blob: 30ea62f6062f8f3870024bd0d8010f1b9dadc36d (
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 "../lib/obj.rkt")
(define (get-lines fp)
(let loop ((lines '()))
(define l (read-line fp))
(if (eof-object? l)
(reverse lines)
(loop (cons l lines)))))
(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 (lambda (x) (member x (card 'win-nums))) (card 'nums))))
(if (= wins 0)
0
(expt 2 (- wins 1))))
(apply + (map point (map parse-card lines)))
|