This commit is contained in:
2021-12-13 23:16:50 +01:00
parent acf4a35309
commit 7c3908c15c

View File

@@ -36,15 +36,14 @@
; returns a new list of coordinates ; returns a new list of coordinates
(define (fold coords axis-position) (define (fold coords axis-position)
(let-values [((axis position) (apply values axis-position))] (let-values [((axis position) (apply values axis-position))]
(let [(position*2 (* position 2))] (let* [(position*2 (* position 2))
(define (mirror-x x y) (list (if (> x position) (- position*2 x) x) y)) (mirror (if (char=? axis #\x)
(define (mirror-y x y) (list x (if (> y position) (- position*2 y) y))) (lambda (x y) (list (if (> x position) (- position*2 x) x) y))
(let [(mirror (if (char=? axis #\x) mirror-x mirror-y))] (lambda (x y) (list x (if (> y position) (- position*2 y) y)))))
(define (folder output coord) (transform (lambda (output coord)
(let* [(mirrored (apply mirror coord))] (let [(mirrored (apply mirror coord))]
; add mirrored coord only if it wasn't in output already (if (member mirrored output) output (cons mirrored output)))))]
(if (member mirrored output) output (cons mirrored output)))) (fold-left transform '() coords))))
(fold-left folder '() coords)))))
(call-with-input-file (call-with-input-file
"input" "input"