From a6e6f2e9f4f6b9de4fe81f21a23cae92a5d604e4 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 4 May 2026 08:47:45 -0400 Subject: [PATCH] do 2017 day 10 --- 2017/src/day10.clj | 56 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 2017/src/day10.clj diff --git a/2017/src/day10.clj b/2017/src/day10.clj new file mode 100644 index 0000000..770d7f1 --- /dev/null +++ b/2017/src/day10.clj @@ -0,0 +1,56 @@ +(ns day10 + (:require + [clojure.string :as str] + [input-manager])) + +(def input (input-manager/get-input-raw 2017 10)) + +(defn pinch-and-rotate [data pos length] + (->> data + cycle + (drop pos) + (take length) + reverse + (map-indexed vector) + (reduce (fn [acc [idx el]] + (assoc acc (mod (+ pos idx) (count data)) el)) + data))) + +(defn part-one [list-size input] + (->> (mapv parse-long (str/split input #",")) + (map-indexed vector) + (reduce (fn [{:keys [data pos]} + [skip-size el]] + {:data (pinch-and-rotate data pos el) + :pos (+ pos skip-size el)}) + {:data (vec (range list-size)) + :pos 0}) + :data + (take 2) + (apply *))) +(part-one 256 input) +(char 65) + +(do + (def suffix [17, 31, 73, 47, 23]) + (defn part-two [data lengths] + (let [lengths (vec (concat (map int lengths) suffix))] + (->> (reduce (fn [acc _] + (reduce (fn [{:keys [data pos skip]} + el] + {:data (pinch-and-rotate data pos el) + :skip (inc skip) + :pos (+ pos skip el)}) + acc + lengths)) + {:data (vec (concat data suffix)) + :pos 0 + :skip 0} + (range 64)) + :data + #_(partition 16) + #_(map #(apply bit-xor %)) + #_(map #(Long/toHexString %)) + #_(apply str)))) + (part-two (mapv parse-long (str/split input #",")) input)) +(part-two (map int "1,2,3") [3 4 5 7])