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)
|