diff options
Diffstat (limited to 'advent-of-code/2023/04/1.rkt')
| -rw-r--r-- | advent-of-code/2023/04/1.rkt | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/advent-of-code/2023/04/1.rkt b/advent-of-code/2023/04/1.rkt new file mode 100644 index 0000000..30ea62f --- /dev/null +++ b/advent-of-code/2023/04/1.rkt @@ -0,0 +1,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))) |
