(defn find-cells [^doubles a cell-kind] (persistent! (areduce ^doubles a i ret (transient {}) (if (= (aget ^doubles a i) cell-kind) (assoc! ret i cell-kind) ret)))) (comment (defn find-cells [a cell-kind] (let [dngn (vec a)] (into {} (for [x (keep-indexed #(if (= %2 cell-kind) %1) dngn)] [x cell-kind]))))) (defn find-goals [^doubles a] (find-cells a GOAL)) (defn find-walls [^doubles a] (persistent! (areduce ^doubles a i ret (transient {}) (if (>= (aget ^doubles a i) wall) (assoc! ret i wall) ret)))) (comment (defn find-walls [a] (let [dngn (vec a)] (into {} (for [x (keep-indexed #(if (>= %2 wall) %1) dngn)] [x wall]))))) (defn find-floors [^doubles a] (defn find-lowest [^doubles a] (let [low-val (apply min (vec a))] (find-cells a low-val))) (defn find-monsters [m] (into {} (for [mp (map #(:pos @%) m)] [mp wall]))) (def open (atom {})) (defn dijkstra ([a] (do (dijkstra a (find-walls a) (find-lowest a)))) ([a ent] (do (dijkstra a (dissoc (merge (find-walls a) (find-monsters @monsters)) (:pos @ent)) (find-lowest a)))) ([a closed open-cells] (reset! open open-cells) (while (not (empty? @open)) (let [newly-open (atom {})] (doall (for [[i v] @open] (let [n (- i wide) s (+ i wide) w (- i 1 ) e (+ i 1 ) ] (if (or (closed n) (@open n) (>= (inc v) (hiphip/aget a n))) nil (do (hiphip/aset a n (inc v)) (swap! newly-open assoc n (inc v)))) (if (or (closed s) (@open s) (>= (inc v) (hiphip/aget a s))) nil (do (hiphip/aset a s (inc v)) (swap! newly-open assoc s (inc v)))) (if (or (closed w) (@open w) (>= (inc v) (hiphip/aget a w))) nil (do (hiphip/aset a w (inc v)) (swap! newly-open assoc w (inc v)))) (if (or (closed e) (@open e) (>= (inc v) (hiphip/aget a e))) nil (do (hiphip/aset a e (inc v)) (swap! newly-open assoc e (inc v)))) ))) (reset! open @newly-open))) a ))
Standard input is empty
Standard output is empty
Exception in thread "main" java.lang.RuntimeException: Unable to resolve symbol: GOAL in this context, compiling:(/home/2JeGW1/prog.clj:11:3) at clojure.lang.Compiler.analyze(Compiler.java:6379) at clojure.lang.Compiler.analyze(Compiler.java:6321) at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3623) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6561) at clojure.lang.Compiler.analyze(Compiler.java:6360) at clojure.lang.Compiler.analyze(Compiler.java:6321) at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5707) at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5138) at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3750) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6557) at clojure.lang.Compiler.analyze(Compiler.java:6360) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6547) at clojure.lang.Compiler.analyze(Compiler.java:6360) at clojure.lang.Compiler.access$100(Compiler.java:37) at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:528) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6559) at clojure.lang.Compiler.analyze(Compiler.java:6360) at clojure.lang.Compiler.analyze(Compiler.java:6321) at clojure.lang.Compiler.eval(Compiler.java:6622) at clojure.lang.Compiler.load(Compiler.java:7062) at clojure.lang.Compiler.loadFile(Compiler.java:7019) at clojure.main$load_script.invoke(main.clj:286) at clojure.main$script_opt.invoke(main.clj:348) at clojure.main$main$fn__6676.invoke(main.clj:432) at clojure.main$main.doInvoke(main.clj:429) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.lang.Var.invoke(Var.java:415) at clojure.lang.AFn.applyToHelper(AFn.java:161) at clojure.lang.Var.applyTo(Var.java:532) at clojure.main.main(main.java:37) Caused by: java.lang.RuntimeException: Unable to resolve symbol: GOAL in this context at clojure.lang.Util.runtimeException(Util.java:219) at clojure.lang.Compiler.resolveIn(Compiler.java:6873) at clojure.lang.Compiler.resolve(Compiler.java:6817) at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6778) at clojure.lang.Compiler.analyze(Compiler.java:6342) ... 29 more