31 lines
1.4 KiB
Racket
31 lines
1.4 KiB
Racket
|
#lang racket
|
||
|
|
||
|
(require "../lib.rkt")
|
||
|
|
||
|
(let ([bindings
|
||
|
(for/list ([yell (problem-input 21)])
|
||
|
(match yell
|
||
|
[(pregexp "(\\w+): (\\d+)" `(,_ ,monkey ,n))
|
||
|
(format "(define (~a) ~a)" monkey n)]
|
||
|
[(pregexp "(\\w+): (\\w+) (\\+|-|\\*|/) (\\w+)" `(,_ ,monkey ,monkey1 ,op ,monkey2))
|
||
|
(format "(define (~a) (~a (~a) (~a)))" monkey op monkey1 monkey2)]))])
|
||
|
(display-lines-to-file
|
||
|
`(,"#lang racket" ,@bindings "(root)")
|
||
|
"21-part1.rkt" #:exists 'replace))
|
||
|
|
||
|
(let ([bindings
|
||
|
(for/list ([yell (problem-input 21)])
|
||
|
(match yell
|
||
|
[(pregexp "humn: \\d+" `(,_))
|
||
|
"(define-symbolic humn integer?)"]
|
||
|
[(pregexp "root: (\\w+) (\\+|-|\\*|/) (\\w+)" `(,_ ,monkey1 ,op ,monkey2))
|
||
|
(format "(define (root) (assert (eq? (~a) (~a))))" monkey1 monkey2)]
|
||
|
[(pregexp "(\\w+): (\\w+) (\\+|-|\\*|/) humn" `(,_ ,monkey ,monkey1 ,op))
|
||
|
(format "(define (~a) (~a (~a) humn))" monkey op monkey1)]
|
||
|
[(pregexp "(\\w+): (\\d+)" `(,_ ,monkey ,n))
|
||
|
(format "(define (~a) ~a)" monkey n)]
|
||
|
[(pregexp "(\\w+): (\\w+) (\\+|-|\\*|/) (\\w+)" `(,_ ,monkey ,monkey1 ,op ,monkey2))
|
||
|
(format "(define (~a) (~a (~a) (~a)))" monkey op monkey1 monkey2)]))])
|
||
|
(display-lines-to-file
|
||
|
`(,"#lang rosette/safe" ,@bindings "(evaluate humn (solve (root)))")
|
||
|
"21-part2.rkt" #:exists 'replace))
|