master
Matthew Butterick 6 years ago
parent 8d68af640e
commit 8409ba623e

@ -0,0 +1,30 @@
#lang reader "../aoc-lang.rkt"
(provide (rename-out [#%mb #%module-begin]))
(define-macro (#%mb (STARS) (TOK ...) ...)
#`(#%module-begin
(inst TOK ...) ...
(if (eq? 'STARS ') (max-arg vals) max-seen)))
(define vals (make-hasheq))
(define (get-val key) (hash-ref! vals key 0))
(define (max-arg vals) (argmax cdr (hash->list vals)))
(define max-seen 0)
(define (set-val! key updater)
(hash-update! vals key updater 0)
(set! max-seen (max max-seen (cdr (max-arg vals)))))
(provide >= <= < > ==)
(define-macro-cases cmp
[(_ ==) #'=]
[(_ !=) #'(negate =)]
[(_ OTHER) #'OTHER])
(define-macro-cases updater
[(_ dec) #'-]
[(_ inc) #'+])
(provide if)
(define-macro (inst TARGET UPDATE-OP UPDATE-VAL if SRC CMP VAL)
#'(when ((cmp CMP) (get-val 'SRC) VAL)
(set-val! 'TARGET (λ (val) ((updater UPDATE-OP) val UPDATE-VAL)))))

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,5 @@
#lang reader "main.rkt"
b inc 5 if a > 1
a inc 1 if b < 5
c dec -10 if a >= 1
c inc -20 if c == 10

@ -0,0 +1,5 @@
#lang reader "main.rkt" ★★
b inc 5 if a > 1
a inc 1 if b < 5
c dec -10 if a >= 1
c inc -20 if c == 10