aboutsummaryrefslogtreecommitdiff
path: root/13/1.rkt
diff options
context:
space:
mode:
Diffstat (limited to '13/1.rkt')
-rw-r--r--13/1.rkt40
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))