(ns adventofcode2019.day16 [:require [adventofcode2019.lib :refer :all] [clojure.string :as str]]) (defn parse-input [input] (map (comp parse-int str) input)) (defn phase [input] (let [pattern (fn [n] (->> [0 1 0 -1] (mapcat (partial repeat n)) (cycle) (rest))) transform (fn [i n] (->> (map * input (pattern (inc i))) (reduce +) (str) (last) (str) (parse-int)))] (map-indexed transform input))) (defn result-of ([input] (result-of 0 input)) ([offset input] (as-> (parse-input input) it (iterate phase it) (nth it 100) (drop offset it) (take 8 it) (str/join it)))) (defn fft [input] (->> (repeat 10000 input) (str/join) (result-of (->> input (take 7) (str/join) (parse-int))))) (defn day16 [] (let [[input] (get-list-from-file (input-file))] (part1 (result-of input)) (part2 (fft input))))