Skip to content

Instantly share code, notes, and snippets.

@erdos
Created December 8, 2021 13:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save erdos/e2a704552532554a209e8a7e23d8491e to your computer and use it in GitHub Desktop.
Save erdos/e2a704552532554a209e8a7e23d8491e to your computer and use it in GitHub Desktop.
advent of code 2021 day 8 second part with clojure core logic
(ns aoc21-day8-2
(:require [clojure.core.logic :as logic]))
(def lines
(for [line (clojure.string/split-lines (slurp (clojure.java.io/resource "input.txt")))
:let [[data test] (clojure.string/split line #" \| ")]]
[(clojure.string/split data #" ") (clojure.string/split test #" ")]))
(defn- segments [xs digit & segments]
(logic/all (logic/member1o digit xs)
(logic/permuteo digit (vec segments))))
(defn get-model [xs]
(first (logic/run 1 [dig0 dig1 dig2 dig3 dig4 dig5 dig6 dig7 dig8 dig9]
(logic/fresh [aaaa bbbb cccc dddd eeee ffff gggg]
(segments xs dig1 cccc ffff)
(segments xs dig7 aaaa cccc ffff)
(segments xs dig4 bbbb cccc dddd ffff)
(segments xs dig3 aaaa cccc dddd ffff gggg)
(segments xs dig5 aaaa bbbb dddd ffff gggg)
(segments xs dig2 aaaa cccc dddd eeee gggg)
(segments xs dig6 aaaa bbbb dddd eeee ffff gggg)
(segments xs dig9 aaaa bbbb cccc dddd ffff gggg)
(segments xs dig0 aaaa bbbb cccc eeee ffff gggg)
(segments xs dig8 aaaa bbbb cccc dddd eeee ffff gggg)))))
(->> (for [[model b] (pmap (fn [[a b]] [(get-model (map vec a)) (map set b)]) lines)
:let [set->digit (reduce-kv (fn [m i v] (assoc m (set v) i)) {} model)]]
(doto (Long/parseLong (apply str (map set->digit b))) (println :calculating)))
(reduce +)
(println :second-star) (time))
@erdos
Copy link
Author

erdos commented Dec 8, 2021

takes about 30 seconds 😿

@erdos
Copy link
Author

erdos commented Dec 20, 2021

Added to the solutions repo: https://github.com/erdos/advent-of-code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment