diff options
| author | Mistivia <i@mistivia.com> | 2024-03-10 13:19:25 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2024-03-10 13:19:25 +0800 |
| commit | e28258fddce742063a09a1b1da3ea5a6d5a2bc9f (patch) | |
| tree | 4046f2d35e965dcfd898099f66571ebe653f6807 /13/1.rkt | |
| parent | 9d68d71e8176812de18d86efee2d5767feda92ea (diff) | |
solve day 13 part 1
Diffstat (limited to '13/1.rkt')
| -rw-r--r-- | 13/1.rkt | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/13/1.rkt b/13/1.rkt new file mode 100644 index 0000000..21c29c3 --- /dev/null +++ b/13/1.rkt @@ -0,0 +1,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)) |
