ST
Size: a a a
ST
ST
ST
DL
DL
ST
(defn task-operations
[K]
{:C1 (fn [[r1 r2 :as rs]] (assoc rs 0 (- (* K r2) r1)))
:C2 (fn [[r1 r2 :as rs]] (assoc rs 1 (+ (* K r1) r2)))})
(defn goal-reached?
[N [r1 r2]]
(or (= N r1) (= N r2)))
(defn solve2 [operations goal? init]
(let [step (fn [[cs rs]] (for [[c f] operations]
[(conj cs c) (f rs)]))
run (fn [states] (or
(not-empty (filter (comp goal? second) states))
(recur (mapcat step states))))]
(run [[[] init]])))
(solve2 (task-operations 1) (partial goal-reached? 100) [1 5])
=>
([[:C1 :C2 :C1 :C2 :C2 :C2 :C1 :C2 :C2 :C2 :C2] [19 100]]
[[:C2 :C1 :C2 :C2 :C2 :C1 :C2 :C1 :C2 :C2 :C2] [21 100]])
AI
ST
ST
AI
AI
ST
AI
AI
AI
ST
AI
ST
ST
AI