This commit is contained in:
2025-12-22 18:02:29 -05:00
parent 14ac947ae3
commit e51b3296d6
+6 -9
View File
@@ -1,7 +1,7 @@
(ns day10 (ns day10
(:require [clojure.math.combinatorics :as combo] (:require [clojure.math.combinatorics :as combo]
[input-manager]) [input-manager])
(:import (com.microsoft.z3 BoolExpr Context Expr IntNum Optimize Optimize$Handle))) (:import (com.microsoft.z3 Context Expr IntNum Optimize Optimize$Handle)))
(defn parse-line [line] (defn parse-line [line]
{:indicators (->> line {:indicators (->> line
@@ -37,8 +37,8 @@
(apply + (map minimum-button-mashing input)) (apply + (map minimum-button-mashing input))
;; part 2 ;; part 2
(defn add-expressions [opt type expressions] (defn add-expressions [opt expressions]
(.Add opt (into-array type expressions))) (.Add opt (into-array Expr expressions)))
(->> input (->> input
(map (fn [{:keys [joltages buttons]}] (map (fn [{:keys [joltages buttons]}]
@@ -52,8 +52,7 @@
count count
range range
(map #(.mkIntConst ctx (str "j" %))))] (map #(.mkIntConst ctx (str "j" %))))]
(add-expressions opt BoolExpr (add-expressions opt (for [idx (range (count joltages))]
(for [idx (range (count joltages))]
(let [jn (nth js idx) (let [jn (nth js idx)
summation-args (->> buttons summation-args (->> buttons
(map set) (map set)
@@ -64,12 +63,10 @@
(into-array Expr) (into-array Expr)
(.mkAdd ctx))] (.mkAdd ctx))]
(.mkEq ctx jn summation-args)))) (.mkEq ctx jn summation-args))))
(add-expressions opt Expr (add-expressions opt (for [[idx joltage] (map-indexed vector joltages)]
(for [[idx joltage] (map-indexed vector joltages)]
(let [jn (nth js idx)] (let [jn (nth js idx)]
(.mkEq ctx jn (.mkInt ctx (long joltage)))))) (.mkEq ctx jn (.mkInt ctx (long joltage))))))
(add-expressions opt Expr (add-expressions opt (for [b bs]
(for [b bs]
(.mkGe ctx b (.mkInt ctx (long 0))))) (.mkGe ctx b (.mkInt ctx (long 0)))))
(let [^Optimize$Handle mx (.MkMinimize opt (.mkAdd ctx (into-array Expr bs)))] (let [^Optimize$Handle mx (.MkMinimize opt (.mkAdd ctx (into-array Expr bs)))]
(.Check opt (into-array Expr [])) (.Check opt (into-array Expr []))