2019/src/17.rkt

46 lines
1.8 KiB
Racket
Raw Normal View History

2019-12-17 06:09:34 +00:00
#lang racket
(require "../lib.rkt"
"IntCode.rkt")
(define input
(string->program (car (problem-input 17))))
(define scaffolds
(string-trim (list->string (map integer->char (resume-with-io (exec input) '())))))
(define part1
(let* ([list-grid (map string->list (string-split scaffolds "\n"))]
[vector-grid (list->vector (map list->vector list-grid))]
[width (length (car list-grid))]
[height (length list-grid)])
(foldl (λ (xy sum)
(match-let ([(list x y) xy])
(if (and (char=? #\# (vector-ref (vector-ref vector-grid (add1 y)) x))
(char=? #\# (vector-ref (vector-ref vector-grid (sub1 y)) x))
(char=? #\# (vector-ref (vector-ref vector-grid y) (add1 x)))
(char=? #\# (vector-ref (vector-ref vector-grid y) (sub1 x))))
(+ sum (* x y))
sum)))
0 (cartesian-product (range 1 (sub1 width)) (range 1 (sub1 height))))))
;; I did this manually. sue me
(define A "L,10,R,10,L,10,L,10\n")
(define B "R,10,R,12,L,12\n")
(define C "R,12,L,12,R,6\n")
(define main "A,B,A,B,C,C,B,A,B,C\n")
(define part2
(let* ([program (vector-set!* input 0 2)]
[input (append (map char->integer (string->list main))
(map char->integer (string->list A))
(map char->integer (string->list B))
(map char->integer (string->list C))
(map char->integer (string->list "n\n")))]
[output (resume-with-io (exec program) input)]
[map-list (take output (sub1 (length output)))]
[map-string (list->string (map integer->char map-list))])
(display map-string)
(last output)))
(show-solution part1 part2)