aboutsummaryrefslogtreecommitdiff
path: root/racket/aoc2022/day-22/day-22.rkt
blob: bcce5f8e56817256662e0469ac1c4db4c0a2413f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#lang racket

(require advent-of-code
         threading)

(struct posn (x y) #:transparent)

(match-define (list raw-map raw-instructions)
  (string-split (fetch-aoc-input (find-session) 2022 22 #:cache #true) "\n\n"))

(define board-map
  (for*/hash ([(row y) (in-indexed (string-split raw-map "\n"))]
              [(col x) (in-indexed row)]
              #:unless (equal? col #\space))
    (define tile
      (match col
        [#\. 'open]
        [#\# 'wall]))
    (values (posn x y) tile)))

(define instructions
  (~>> raw-instructions
       (regexp-match* #px"(\\d+)|R|L")
       (map (match-lambda
              [(? string->number n) (string->number n)]
              ["R" 'clockwise]
              ["L" 'counterclockwise]))))

(define start-tile
  (~>> board-map
       hash-keys
       (filter (match-lambda
                 [(posn _ 0) #true]
                 [_ #false]))
       (argmin posn-x)))