46 lines
1.8 KiB
Racket
46 lines
1.8 KiB
Racket
|
#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)
|