From 297bfc51cea8986dc780a44595eb02e08e5e387c Mon Sep 17 00:00:00 2001 From: Jack Kinsey Date: Sat, 21 Dec 2019 21:25:54 -0500 Subject: [PATCH] Add correct day12pt2 --- project.clj | 1 + src/adventofcode2019/day12.clj | 24 +++++++++++++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/project.clj b/project.clj index cb2791c..da40573 100644 --- a/project.clj +++ b/project.clj @@ -7,6 +7,7 @@ [org.clojure/core.match "0.3.0"] [org.clojure/core.async "0.6.532"] [org.clojure/math.combinatorics "0.1.6"] + [org.clojure/math.numeric-tower "0.0.4"] [org.clojure/data.priority-map "0.0.10"] [clojure-lanterna "0.9.4"] [aysylu/loom "1.0.2"]] diff --git a/src/adventofcode2019/day12.clj b/src/adventofcode2019/day12.clj index d10e74b..acf3ff6 100644 --- a/src/adventofcode2019/day12.clj +++ b/src/adventofcode2019/day12.clj @@ -4,7 +4,7 @@ [clojure.string :as str] [clojure.core.match :refer [match]] [clojure.math.combinatorics :as combo] - [clojure.pprint :refer [pprint]]]) + [clojure.math.numeric-tower :as math]]) ; -> [[1 2 3] [0 0 0]] (defn parse-coords [coords] @@ -41,16 +41,22 @@ (assoc-in [j 1] nv2))))] (mapv velocity (reduce apply-gravity bodies all-pairs)))) -(defn find-cycle [states] +(defn find-cycle [xs ys zs] (let [detect-dup (fn [[ct prev] state] - (if (= (flatten prev) - (map - (flatten state))) - (reduced (inc ct)) - [(inc ct) state]))] - (* 2 (reduce detect-dup [0 []] states)))) + (if (prev state) + (reduced ct) + [(inc ct) (conj prev state)])) + dup-rep (partial reduce detect-dup [0 (hash-set)])] + (reduce math/lcm (map dup-rep [xs ys zs])))) (defn day12 [] (let [input (mapv parse-coords (get-list-from-file (input-file))) - simulate (iterate step-simulation input)] + input-x (mapv (fn [[[p _ _] [v _ _]]] [[p] [v]]) input) + input-y (mapv (fn [[[_ p _] [_ v _]]] [[p] [v]]) input) + input-z (mapv (fn [[[_ _ p] [_ _ v]]] [[p] [v]]) input) + simulate (iterate step-simulation input) + simulate-x (iterate step-simulation input-x) + simulate-y (iterate step-simulation input-y) + simulate-z (iterate step-simulation input-z)] (part1 (reduce + (map total-energy (nth simulate 1000)))) - (part2 (find-cycle simulate)))) + (part2 (find-cycle simulate-x simulate-y simulate-z)))) -- 2.26.2