aboutsummaryrefslogtreecommitdiff
path: root/racket/aoc2020/day-15/day-15.rkt
blob: 4dd9e8823c878fa5c03de20f80ef0d08b0000041 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#lang rackjure

(define first-numbers '(2 20 0 4 1 17))

(define number-hash
  (for/hash ([(xs i) (in-indexed (drop-right first-numbers 1))])
    (values xs (add1 i))))

(define starting-round (~> number-hash hash-values (apply max _) (+ 2)))

(define (find-spoken-number-at end)
  (for/fold ([ns number-hash] [previous-number (last first-numbers)] #:result previous-number)
            ([rnd (inclusive-range starting-round end)])
    (define next-spoken-number
      (match (ns previous-number)
        [#f 0]
        [n (- (sub1 rnd) n)]))
    (values (ns previous-number (sub1 rnd)) next-spoken-number)))

(find-spoken-number-at 2020)

(find-spoken-number-at 30000000)