From: Jack Kinsey Date: Fri, 20 Dec 2019 23:21:13 +0000 (-0500) Subject: Add broken day12pt2 X-Git-Url: http://git.jkinsey.net/?p=adventofcode2019.git;a=commitdiff_plain;h=0449019578dbfc4c0b280578cb9e48d5bb1e1079 Add broken day12pt2 The values flip and stuff which is maybe tractable --- diff --git a/project.clj b/project.clj index 7e487cb..cb2791c 100644 --- a/project.clj +++ b/project.clj @@ -5,10 +5,11 @@ ;; :url "https://www.eclipse.org/legal/epl-2.0/"} :dependencies [[org.clojure/clojure "1.10.0"] [org.clojure/core.match "0.3.0"] - [org.clojure/math.combinatorics "0.1.6"] [org.clojure/core.async "0.6.532"] + [org.clojure/math.combinatorics "0.1.6"] [org.clojure/data.priority-map "0.0.10"] - [clojure-lanterna "0.9.4"]] + [clojure-lanterna "0.9.4"] + [aysylu/loom "1.0.2"]] :main ^:skip-aot adventofcode2019.core :target-path "target/%s" :profiles {:uberjar {:aot :all}}) diff --git a/src/adventofcode2019/day12.clj b/src/adventofcode2019/day12.clj index 7326e42..d10e74b 100644 --- a/src/adventofcode2019/day12.clj +++ b/src/adventofcode2019/day12.clj @@ -1,10 +1,10 @@ (ns adventofcode2019.day12 - [:require [adventofcode2019.lib :refer :all] - [adventofcode2019.intcode :as i] - [clojure.string :as str] - [clojure.core.match :refer [match]] - [clojure.math.combinatorics :as combo] - [clojure.pprint :refer [pprint]]]) + [:require [adventofcode2019.lib :refer :all] + [adventofcode2019.intcode :as i] + [clojure.string :as str] + [clojure.core.match :refer [match]] + [clojure.math.combinatorics :as combo] + [clojure.pprint :refer [pprint]]]) ; -> [[1 2 3] [0 0 0]] (defn parse-coords [coords] @@ -41,8 +41,16 @@ (assoc-in [j 1] nv2))))] (mapv velocity (reduce apply-gravity bodies all-pairs)))) +(defn find-cycle [states] + (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)))) + (defn day12 [] (let [input (mapv parse-coords (get-list-from-file (input-file))) - simulate (iterate step-simulation input)] + simulate (iterate step-simulation input)] (part1 (reduce + (map total-energy (nth simulate 1000)))) - #_(part2))) + (part2 (find-cycle simulate))))