aboutsummaryrefslogtreecommitdiff
path: root/04/1.rkt
diff options
context:
space:
mode:
Diffstat (limited to '04/1.rkt')
-rw-r--r--04/1.rkt29
1 files changed, 29 insertions, 0 deletions
diff --git a/04/1.rkt b/04/1.rkt
new file mode 100644
index 0000000..e5bae92
--- /dev/null
+++ b/04/1.rkt
@@ -0,0 +1,29 @@
+#lang racket
+
+(require "../lib/utils.rkt")
+(require "../lib/obj.rkt")
+
+(define fp (open-input-file "input"))
+
+(define lines (get-lines fp))
+
+(define (strip-head s)
+ (string-trim (cadr (string-split s ":"))))
+
+(set! lines (map strip-head lines))
+
+(define make-card (obj-maker 'win-nums 'nums))
+
+(define (parse-card s)
+ (define lst (string-split s "|"))
+ (define win-nums (map string->number (string-split (car lst))))
+ (define nums (map string->number (string-split (cadr lst))))
+ (make-card win-nums nums))
+
+(define (point card)
+ (define wins (length (filter (λ (x) (member x (card 'win-nums))) (card 'nums))))
+ (if (= wins 0)
+ 0
+ (expt 2 (- wins 1))))
+
+(apply + (map point (map parse-card lines)))