From af7139275aff55df17cc8ed0593577a0cd766725 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Thu, 8 Dec 2016 21:47:31 -0800 Subject: [PATCH] finish day08 --- 2016/day08-input.rkt | 174 +++++++++++++++++++++++++++++++++++++++++++ 2016/day08-test.rkt | 5 ++ 2016/day08.rkt | 52 +++++++++++++ 3 files changed, 231 insertions(+) create mode 100644 2016/day08-input.rkt create mode 100644 2016/day08-test.rkt create mode 100644 2016/day08.rkt diff --git a/2016/day08-input.rkt b/2016/day08-input.rkt new file mode 100644 index 0000000..909cc6f --- /dev/null +++ b/2016/day08-input.rkt @@ -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 \ No newline at end of file diff --git a/2016/day08-test.rkt b/2016/day08-test.rkt new file mode 100644 index 0000000..d9078c2 --- /dev/null +++ b/2016/day08-test.rkt @@ -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 \ No newline at end of file diff --git a/2016/day08.rkt b/2016/day08.rkt new file mode 100644 index 0000000..1239b1d --- /dev/null +++ b/2016/day08.rkt @@ -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) \ No newline at end of file