blob: 21c29c3454d5b37172e770d213fc7ad349076ead (
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
36
37
38
39
40
|
#lang racket
(require "../lib/utils.rkt")
(define lines
(call-with-input-file "input"
(λ (fp) (get-lines fp))))
(define patterns (split-list-by "" lines))
(define (find-reflection lines)
(define lines-vec (list->vector lines))
(define len (vector-length lines-vec))
(define (find-first)
(let loop ((i 0) (ret '()))
(if (>= i (- len 1))
(reverse ret)
(if (string=? (vector-ref lines-vec i)
(vector-ref lines-vec (+ i 1)))
(loop (+ 1 i) (cons i ret))
(loop (+ 1 i) ret)))))
(define (count start)
(let loop ((cnt 1) (i start))
(if (or (< i 0)
(>= (+ start cnt) len))
(+ start 1)
(if (string=? (vector-ref lines-vec i)
(vector-ref lines-vec (+ start cnt)))
(loop (+ 1 cnt) (- i 1))
0))))
(define start (find-first))
(if (null? start)
0
(apply max (map count start))))
(define (score pattern)
(+ (* 100 (find-reflection pattern))
(find-reflection (transpose-list pattern))))
(apply + (map score patterns))
|