๐Ÿ“ฆ Bogdanp / aoc2020

๐Ÿ“„ day15.rkt ยท 29 lines
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 racket/fixnum
         racket/list
         racket/string)

(define starting-numbers
  (map string->number (string-split (call-with-input-file "input15.txt" read-line) ",")))

(define (interp nums turns)
  (define counts (make-hasheq))
  (for ([(c i) (in-indexed nums)])
    (hash-set! counts c (add1 i)))
  (for/fold ([prev (last nums)])
            ([turn (in-range (length nums) turns)])
    (define new-count
      (let ([t (hash-ref counts prev #f)])
        (if t (fx- turn t) 0)))
    (hash-set! counts prev turn)
    new-count))

(= (interp '(0 3 6) 2020) 436)
(= (interp '(1 3 2) 2020) 1)
(= (interp '(2 1 3) 2020) 10)
(= (interp '(1 2 3) 2020) 27)

(= (interp starting-numbers 2020) 1015)
(= (interp starting-numbers 30000000) 201)