1
0
Fork 0

Day 16: Part 1.

This commit is contained in:
Jonathan Chan 2019-12-15 23:31:42 -08:00
parent e3d0c0aee8
commit 58048e4998
2 changed files with 39 additions and 0 deletions

1
input/16.txt Normal file
View File

@ -0,0 +1 @@
59717513948900379305109702352254961099291386881456676203556183151524797037683068791860532352118123252250974130706958763348105389034831381607519427872819735052750376719383812473081415096360867340158428371353702640632449827967163188043812193288449328058464005995046093112575926165337330100634707115160053682715014464686531460025493602539343245166620098362467196933484413717749680188294435582266877493265037758875197256932099061961217414581388227153472347319505899534413848174322474743198535953826086266146686256066319093589456135923631361106367290236939056758783671975582829257390514211329195992209734175732361974503874578275698611819911236908050184158

38
src/16.rkt Normal file
View File

@ -0,0 +1,38 @@
#lang racket
(require "../lib.rkt")
(define (string->numbers str)
(map (λ (c) (- (char->integer c) (char->integer #\0)))
(string->list str)))
(define input-string (car (problem-input 16)))
(define input
(string->numbers input-string))
(define input-long
(apply append (make-list 10000 input)))
(define message-offset
(string->number (substring input-string 0 7)))
(define (base len n)
(let* ([base-n (apply append (map ( make-list n) '(0 1 0 -1)))]
[repeats (add1 (ceiling (/ len (* n 4))))]
[repeated (apply append (make-list repeats base-n))])
(take (cdr repeated) len)))
(define (prod-sum l1 l2)
(sum (map * l1 l2)))
(define (fft ns)
(map (λ (n) (remainder (abs (prod-sum ns (base (length ns) n))) 10))
(range 1 (add1 (length ns)))))
(define (part1)
(let loop ([signal input]
[count 0])
(if (= 100 count)
(take signal 8)
(loop (fft signal) (add1 count)))))