(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]]])
; <x=1, y=2, z=3> -> [[1 2 3] [0 0 0]]
(defn parse-coords [coords]
(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))))