(ns adventofcode2019.core
[:require (adventofcode2019 day01 day02 day03 day04 day05
day06 day07 day08 day09 day10
- day11 day12 day13 day14)])
+ day11 day12 day13 day14
+ day16)])
(defn -main
([]
--- /dev/null
+(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]
+ (as-> (parse-input input) it
+ (iterate phase it)
+ (nth it 100)
+ (take 8 it)
+ (str/join it)))
+
+(defn day16 []
+ (let [[input] (get-list-from-file (input-file))]
+ (part1 (result-of input))
+ #_(part2)))
--- /dev/null
+(ns adventofcode2019.day16-test
+ (:require [clojure.test :refer :all]
+ [adventofcode2019.day16 :refer :all]))
+
+(deftest examples
+ (is (= "24176176" (result-of "80871224585914546619083218645595")))
+ (is (= "73745418" (result-of "19617804207202209144916044189917")))
+ (is (= "52432133" (result-of "69317163492948606335995924319873"))))