Hi,

$ time clojure euler43.clj
(1 4 0 6 3 5 7 2 8 9)
(1 4 3 0 9 5 2 8 6 7)
(1 4 6 0 3 5 7 2 8 9)
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid7476.hprof ...

The hprof file is 330mb in size, i can't read it with jhat (even if i
give it 1.5G ....).

I assume perms is the problem, but i dont know how to write this in a
more memory efficient way - I'm not looking for a more efficient
algorithm though....

Thanx for any hint,
Dirk

(use 'clojure.contrib.combinatorics)

(def perms (permutations (range 10)))

(defn seq-to-val [ s ]
    (reduce #(+ (* %1 10) %2)  s))

(defn extract [ s i ]
   (conj [] (nth s i) (nth s (inc i)) (nth s (inc (inc i)))))

(defn f24 [ s ]
   (= (mod (seq-to-val (extract s 1)) 2) 0))

(defn f35 [ s ]
   (= (mod (seq-to-val (extract s 2)) 3) 0))

(defn f46 [ s ]
   (= (mod (seq-to-val (extract s 3)) 5) 0))

(defn f57 [ s ]
   (= (mod (seq-to-val (extract s 4)) 7) 0))

(defn f68 [ s ]
   (= (mod (seq-to-val (extract s 5)) 11) 0))

(defn f79 [ s ]
   (= (mod (seq-to-val (extract s 6)) 13) 0))

(defn f810 [ s ]
   (= (mod (seq-to-val (extract s 7)) 17) 0))

(def guards [ f24 f35 f46 f57 f68 f79 f810 ])

(loop [ p (first perms) r (rest perms) sum 0 count 0 ]
    (when (= count 10)
        sum)
    (if (every? #(%1 p) guards)
        (do
           (println p)
           (recur (first r) (rest r) (+ sum (seq-to-val p)) (inc count)))
       (recur (first r) (rest r) sum (inc count))))

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to