Day 20, Part 1.

This commit is contained in:
Jonathan Chan 2020-12-19 22:28:05 -08:00
parent 16529eaaba
commit aba1e1dbfe
2 changed files with 1768 additions and 0 deletions

1728
input/20.txt Normal file

File diff suppressed because it is too large Load Diff

40
src/20.rkt Normal file
View File

@ -0,0 +1,40 @@
#lang curly-fn racket
(require "../lib.rkt")
(define input (map string-lines (problem-input-grouped 20)))
(define (parse-tile tile-strings)
(match-let ([`(,name ,rows ...) tile-strings])
(list (string->number (second (regexp-match #px"Tile (\\d+):" name)))
(map string->list rows))))
(define tiles
(map parse-tile input))
(define (tile-edges tile)
(match-let ([(list name rows) tile])
(list name (list (first rows)
(map last rows)
(reverse (last rows))
(reverse (map first rows))))))
(define tiles-edges
(map tile-edges tiles))
(define (corner? edges tiles)
(let ([tiles (map second tiles)])
(= 2 (count #{for/or ([target tiles])
(or (member % target)
(member (reverse %) target))}
edges))))
(define part1
(for/product ([tile tiles-edges]
#:when (corner? (second tile)
(remove tile tiles-edges)))
(first tile)))
(define part2 #f)
(show-solution part1 part2)