From 58048e4998eee48818769aa5b78cd00c31660db7 Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Sun, 15 Dec 2019 23:31:42 -0800 Subject: [PATCH] Day 16: Part 1. --- input/16.txt | 1 + src/16.rkt | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 input/16.txt create mode 100644 src/16.rkt diff --git a/input/16.txt b/input/16.txt new file mode 100644 index 0000000..b94743d --- /dev/null +++ b/input/16.txt @@ -0,0 +1 @@ +59717513948900379305109702352254961099291386881456676203556183151524797037683068791860532352118123252250974130706958763348105389034831381607519427872819735052750376719383812473081415096360867340158428371353702640632449827967163188043812193288449328058464005995046093112575926165337330100634707115160053682715014464686531460025493602539343245166620098362467196933484413717749680188294435582266877493265037758875197256932099061961217414581388227153472347319505899534413848174322474743198535953826086266146686256066319093589456135923631361106367290236939056758783671975582829257390514211329195992209734175732361974503874578275698611819911236908050184158 diff --git a/src/16.rkt b/src/16.rkt new file mode 100644 index 0000000..9ef2dc1 --- /dev/null +++ b/src/16.rkt @@ -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))))) \ No newline at end of file