aboutsummaryrefslogtreecommitdiff
path: root/advent-of-code/2023/04/1.rkt
blob: 5210420f1fe867c5a453490b7765ee680954ff8e (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
#lang racket/base

(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 (lambda (x) (member x (card 'win-nums))) (card 'nums))))
  (if (= wins 0)
    0
    (expt 2 (- wins 1))))

(apply + (map point (map parse-card lines)))