finish day08
parent
1c97c199b0
commit
af7139275a
@ -0,0 +1,174 @@
|
|||||||
|
#lang aoc-racket/2016/day08
|
||||||
|
rect 1x1
|
||||||
|
rotate row y=0 by 20
|
||||||
|
rect 1x1
|
||||||
|
rotate row y=0 by 2
|
||||||
|
rect 1x1
|
||||||
|
rotate row y=0 by 3
|
||||||
|
rect 2x1
|
||||||
|
rotate row y=0 by 2
|
||||||
|
rect 1x1
|
||||||
|
rotate row y=0 by 3
|
||||||
|
rect 2x1
|
||||||
|
rotate row y=0 by 2
|
||||||
|
rect 1x1
|
||||||
|
rotate row y=0 by 4
|
||||||
|
rect 2x1
|
||||||
|
rotate row y=0 by 2
|
||||||
|
rect 1x1
|
||||||
|
rotate row y=0 by 2
|
||||||
|
rect 1x1
|
||||||
|
rotate row y=0 by 2
|
||||||
|
rect 1x1
|
||||||
|
rotate row y=0 by 3
|
||||||
|
rect 2x1
|
||||||
|
rotate row y=0 by 2
|
||||||
|
rect 1x1
|
||||||
|
rotate row y=0 by 5
|
||||||
|
rect 1x1
|
||||||
|
rotate row y=0 by 2
|
||||||
|
rect 1x1
|
||||||
|
rotate row y=0 by 6
|
||||||
|
rect 5x1
|
||||||
|
rotate row y=0 by 2
|
||||||
|
rect 1x3
|
||||||
|
rotate row y=2 by 8
|
||||||
|
rotate row y=0 by 8
|
||||||
|
rotate column x=0 by 1
|
||||||
|
rect 7x1
|
||||||
|
rotate row y=2 by 24
|
||||||
|
rotate row y=0 by 20
|
||||||
|
rotate column x=5 by 1
|
||||||
|
rotate column x=4 by 2
|
||||||
|
rotate column x=2 by 2
|
||||||
|
rotate column x=0 by 1
|
||||||
|
rect 7x1
|
||||||
|
rotate column x=34 by 2
|
||||||
|
rotate column x=22 by 1
|
||||||
|
rotate column x=15 by 1
|
||||||
|
rotate row y=2 by 18
|
||||||
|
rotate row y=0 by 12
|
||||||
|
rotate column x=8 by 2
|
||||||
|
rotate column x=7 by 1
|
||||||
|
rotate column x=5 by 2
|
||||||
|
rotate column x=2 by 1
|
||||||
|
rotate column x=0 by 1
|
||||||
|
rect 9x1
|
||||||
|
rotate row y=3 by 28
|
||||||
|
rotate row y=1 by 28
|
||||||
|
rotate row y=0 by 20
|
||||||
|
rotate column x=18 by 1
|
||||||
|
rotate column x=15 by 1
|
||||||
|
rotate column x=14 by 1
|
||||||
|
rotate column x=13 by 1
|
||||||
|
rotate column x=12 by 2
|
||||||
|
rotate column x=10 by 3
|
||||||
|
rotate column x=8 by 1
|
||||||
|
rotate column x=7 by 2
|
||||||
|
rotate column x=6 by 1
|
||||||
|
rotate column x=5 by 1
|
||||||
|
rotate column x=3 by 1
|
||||||
|
rotate column x=2 by 2
|
||||||
|
rotate column x=0 by 1
|
||||||
|
rect 19x1
|
||||||
|
rotate column x=34 by 2
|
||||||
|
rotate column x=24 by 1
|
||||||
|
rotate column x=23 by 1
|
||||||
|
rotate column x=14 by 1
|
||||||
|
rotate column x=9 by 2
|
||||||
|
rotate column x=4 by 2
|
||||||
|
rotate row y=3 by 5
|
||||||
|
rotate row y=2 by 3
|
||||||
|
rotate row y=1 by 7
|
||||||
|
rotate row y=0 by 5
|
||||||
|
rotate column x=0 by 2
|
||||||
|
rect 3x2
|
||||||
|
rotate column x=16 by 2
|
||||||
|
rotate row y=3 by 27
|
||||||
|
rotate row y=2 by 5
|
||||||
|
rotate row y=0 by 20
|
||||||
|
rotate column x=8 by 2
|
||||||
|
rotate column x=7 by 1
|
||||||
|
rotate column x=5 by 1
|
||||||
|
rotate column x=3 by 3
|
||||||
|
rotate column x=2 by 1
|
||||||
|
rotate column x=1 by 2
|
||||||
|
rotate column x=0 by 1
|
||||||
|
rect 9x1
|
||||||
|
rotate row y=4 by 42
|
||||||
|
rotate row y=3 by 40
|
||||||
|
rotate row y=1 by 30
|
||||||
|
rotate row y=0 by 40
|
||||||
|
rotate column x=37 by 2
|
||||||
|
rotate column x=36 by 3
|
||||||
|
rotate column x=35 by 1
|
||||||
|
rotate column x=33 by 1
|
||||||
|
rotate column x=32 by 1
|
||||||
|
rotate column x=31 by 3
|
||||||
|
rotate column x=30 by 1
|
||||||
|
rotate column x=28 by 1
|
||||||
|
rotate column x=27 by 1
|
||||||
|
rotate column x=25 by 1
|
||||||
|
rotate column x=23 by 3
|
||||||
|
rotate column x=22 by 1
|
||||||
|
rotate column x=21 by 1
|
||||||
|
rotate column x=20 by 1
|
||||||
|
rotate column x=18 by 1
|
||||||
|
rotate column x=17 by 1
|
||||||
|
rotate column x=16 by 3
|
||||||
|
rotate column x=15 by 1
|
||||||
|
rotate column x=13 by 1
|
||||||
|
rotate column x=12 by 1
|
||||||
|
rotate column x=11 by 2
|
||||||
|
rotate column x=10 by 1
|
||||||
|
rotate column x=8 by 1
|
||||||
|
rotate column x=7 by 2
|
||||||
|
rotate column x=5 by 1
|
||||||
|
rotate column x=3 by 3
|
||||||
|
rotate column x=2 by 1
|
||||||
|
rotate column x=1 by 1
|
||||||
|
rotate column x=0 by 1
|
||||||
|
rect 39x1
|
||||||
|
rotate column x=44 by 2
|
||||||
|
rotate column x=42 by 2
|
||||||
|
rotate column x=35 by 5
|
||||||
|
rotate column x=34 by 2
|
||||||
|
rotate column x=32 by 2
|
||||||
|
rotate column x=29 by 2
|
||||||
|
rotate column x=25 by 5
|
||||||
|
rotate column x=24 by 2
|
||||||
|
rotate column x=19 by 2
|
||||||
|
rotate column x=15 by 4
|
||||||
|
rotate column x=14 by 2
|
||||||
|
rotate column x=12 by 3
|
||||||
|
rotate column x=9 by 2
|
||||||
|
rotate column x=5 by 5
|
||||||
|
rotate column x=4 by 2
|
||||||
|
rotate row y=5 by 5
|
||||||
|
rotate row y=4 by 38
|
||||||
|
rotate row y=3 by 10
|
||||||
|
rotate row y=2 by 46
|
||||||
|
rotate row y=1 by 10
|
||||||
|
rotate column x=48 by 4
|
||||||
|
rotate column x=47 by 3
|
||||||
|
rotate column x=46 by 3
|
||||||
|
rotate column x=45 by 1
|
||||||
|
rotate column x=43 by 1
|
||||||
|
rotate column x=37 by 5
|
||||||
|
rotate column x=36 by 5
|
||||||
|
rotate column x=35 by 4
|
||||||
|
rotate column x=33 by 1
|
||||||
|
rotate column x=32 by 5
|
||||||
|
rotate column x=31 by 5
|
||||||
|
rotate column x=28 by 5
|
||||||
|
rotate column x=27 by 5
|
||||||
|
rotate column x=26 by 3
|
||||||
|
rotate column x=25 by 4
|
||||||
|
rotate column x=23 by 1
|
||||||
|
rotate column x=17 by 5
|
||||||
|
rotate column x=16 by 5
|
||||||
|
rotate column x=13 by 1
|
||||||
|
rotate column x=12 by 5
|
||||||
|
rotate column x=11 by 5
|
||||||
|
rotate column x=3 by 1
|
||||||
|
rotate column x=0 by 1
|
@ -0,0 +1,5 @@
|
|||||||
|
#lang aoc-racket/2016/day08
|
||||||
|
rect 3x2
|
||||||
|
rotate column x=1 by 1
|
||||||
|
rotate row y=0 by 4
|
||||||
|
rotate column x=1 by 1
|
@ -0,0 +1,52 @@
|
|||||||
|
#lang br/quicklang
|
||||||
|
|
||||||
|
(module+ reader (provide read-syntax))
|
||||||
|
(define (read-syntax path port)
|
||||||
|
(strip-bindings
|
||||||
|
#`(module mod "day08.rkt"
|
||||||
|
#,@(for/list ([inst (in-lines port)]
|
||||||
|
#:when (not (equal? inst "")))
|
||||||
|
(format-datum '(~a) inst)))))
|
||||||
|
|
||||||
|
(provide (rename-out [mb #%module-begin]))
|
||||||
|
(define-macro (mb INST ...)
|
||||||
|
#'(#%module-begin
|
||||||
|
(define g (for/fold ([g (grid 50 6)])
|
||||||
|
([inst (in-list (list INST ...))])
|
||||||
|
(inst g)))
|
||||||
|
(for-each displayln (map (λ(gr) (map (λ(gri) (if (= gri 1) "X" " ")) gr)) g))
|
||||||
|
(apply + (flatten g))))
|
||||||
|
|
||||||
|
(require (for-syntax racket/string))
|
||||||
|
(define-macro (rect ARG)
|
||||||
|
(with-pattern ([(COLS ROWS) (map string->number (string-split (symbol->string (syntax->datum #'ARG)) "x"))])
|
||||||
|
#'(curryr fill COLS ROWS)))
|
||||||
|
(provide rect)
|
||||||
|
|
||||||
|
(define-macro (rotate DIR WHICH-RAW by DIST)
|
||||||
|
(with-pattern ([PROC (prefix-id "shift-" #'DIR)]
|
||||||
|
[WHICH (string->number (car (string-split (symbol->string (syntax->datum #'WHICH-RAW)) #rx"[xy]=")))])
|
||||||
|
#'(curryr PROC WHICH DIST)))
|
||||||
|
(provide rotate)
|
||||||
|
|
||||||
|
(define (grid x y)
|
||||||
|
(make-list y (make-list x 0)))
|
||||||
|
|
||||||
|
(define (fill g cols rows)
|
||||||
|
(for/list ([(row ridx) (in-indexed g)])
|
||||||
|
(for/list ([(col cidx) (in-indexed (list-ref g ridx))])
|
||||||
|
(if (and (< ridx rows) (< cidx cols))
|
||||||
|
1
|
||||||
|
col))))
|
||||||
|
|
||||||
|
(require sugar/list)
|
||||||
|
(define (shift-row g which dist)
|
||||||
|
(for/list ([(row ridx) (in-indexed g)])
|
||||||
|
(if (= which ridx)
|
||||||
|
(shift row dist #f #t)
|
||||||
|
row)))
|
||||||
|
(provide shift-row)
|
||||||
|
|
||||||
|
(define (shift-column g which dist)
|
||||||
|
(apply map list (shift-row (apply map list g) which dist)))
|
||||||
|
(provide shift-column)
|
Reference in New Issue