shorter, using values and apply

This commit is contained in:
2021-12-13 22:53:23 +01:00
parent 69a73f90d7
commit acf4a35309

View File

@@ -35,21 +35,16 @@
; mirrors coordinates along given axis and line/column ; mirrors coordinates along given axis and line/column
; returns a new list of coordinates ; returns a new list of coordinates
(define (fold coords axis-position) (define (fold coords axis-position)
(let* [(axis (car axis-position)) (let-values [((axis position) (apply values axis-position))]
(position (cadr axis-position)) (let [(position*2 (* position 2))]
(position*2 (* 2 position))] (define (mirror-x x y) (list (if (> x position) (- position*2 x) x) y))
(define (mirror-x x y) (list (if (> x position) (- position*2 x) x) y)) (define (mirror-y x y) (list x (if (> y position) (- position*2 y) y)))
(define (mirror-y x y) (list x (if (> y position) (- position*2 y) y))) (let [(mirror (if (char=? axis #\x) mirror-x mirror-y))]
(let [(mirror (if (char=? axis #\x) mirror-x mirror-y))] (define (folder output coord)
(define (folder output coord) (let* [(mirrored (apply mirror coord))]
(let* [(x (car coord)) ; add mirrored coord only if it wasn't in output already
(y (cadr coord)) (if (member mirrored output) output (cons mirrored output))))
(mirrored (mirror x y))] (fold-left folder '() coords)))))
; add mirrored coord only if it wasn't in output already
(if (member mirrored output)
output
(cons (mirror x y) output))))
(fold-left folder '() coords))))
(call-with-input-file (call-with-input-file
"input" "input"