doall holds on to the head of the seq, "causing the entire seq to reside in
memory at one time." (https://clojuredocs.org/clojure.core/doall)
Instead, just find the first solution:
(->> (permutations (range 10)) (filter check?) (first) (print-solution))
On Friday, April 8, 2016 at 9:28:55 AM UTC-4, Olivier Scalbert wrote:
>
> Hello everybody !
>
> I just start learning Clojure and I am a complete newbie !
>
> I have tried to solve this classical small puzzle with Clojure.
> Assign one digit from {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} to each letter {o n e
> t h r l v w y} so that
> one + one + one + three + three + eleven = twenty
>
> Here is the code:
>
> (defn permutations [s]
> (lazy-seq
> (if (seq (rest s))
> (apply concat (for [x s]
> (map #(cons x %) (permutations (remove #{x} s)))))
> [s])))
>
> (defn tomap [proposal]
> (zipmap [:o :n :e :t :h :r :l :v :w :y] proposal))
>
> (defn one-value [m]
> (+ (* 100 (:o m))
> (* 10 (:n m))
> (:e m)))
>
> (defn three-value [m]
> (+ (* 10000 (:t m))
> (* 1000 (:h m))
> (* 100 (:r m))
> (* 10 (:e m))
> (:e m)))
>
> (defn eleven-value [m]
> (+ (* 100000 (:e m))
> (* 10000 (:l m))
> (* 1000 (:e m))
> (* 100 (:v m))
> (* 10 (:e m))
> (:n m)))
>
> (defn twenty-value [m]
> (+ (* 100000 (:t m))
> (* 10000 (:w m))
> (* 1000 (:e m))
> (* 100 (:n m))
> (* 10 (:t m))
> (:y m)))
>
> (defn check? [proposal]
> (let [m (tomap proposal)
> one (one-value m)
> three (three-value m)
> eleven (eleven-value m)
> twenty (twenty-value m)]
>
> (= (+ one one one three three eleven)
> twenty)))
>
> (defn print-solution [solution]
> (println (tomap solution)))
>
> (doall (map print-solution (filter check? (permutations (range 10)))))
>
> This program prints the correct solution, but I have some questions !
> It seems to consume lot of memory (around 6GB). Do I miss something with
> the lazy evaluation ?
> How can I change the code into a more idiomatic one ?
>
> Thanks for your help and time !
>
> Olivier
>
>
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.