fork(1) download
  1. (defn find-cells [^doubles a cell-kind]
  2. (persistent! (areduce ^doubles a i ret (transient {})
  3. (if (= (aget ^doubles a i) cell-kind) (assoc! ret i cell-kind) ret))))
  4.  
  5. (comment
  6. (defn find-cells [a cell-kind]
  7. (let [dngn (vec a)]
  8. (into {} (for [x (keep-indexed #(if (= %2 cell-kind) %1) dngn)] [x cell-kind])))))
  9.  
  10. (defn find-goals [^doubles a]
  11. (find-cells a GOAL))
  12.  
  13. (defn find-walls [^doubles a]
  14. (persistent! (areduce ^doubles a i ret (transient {})
  15. (if (>= (aget ^doubles a i) wall) (assoc! ret i wall) ret))))
  16.  
  17. (comment
  18. (defn find-walls [a]
  19. (let [dngn (vec a)]
  20. (into {} (for [x (keep-indexed #(if (>= %2 wall) %1) dngn)] [x wall])))))
  21.  
  22. (defn find-floors [^doubles a]
  23. (find-cells a floor))
  24.  
  25. (defn find-lowest [^doubles a]
  26. (let [low-val (apply min (vec a))]
  27. (find-cells a low-val)))
  28.  
  29. (defn find-monsters [m]
  30. (into {} (for [mp (map #(:pos @%) m)] [mp wall])))
  31.  
  32. (def open (atom {}))
  33.  
  34. (defn dijkstra
  35. ([a]
  36. (do (dijkstra a (find-walls a) (find-lowest a))))
  37. ([a ent]
  38. (do (dijkstra a (dissoc (merge (find-walls a) (find-monsters @monsters)) (:pos @ent)) (find-lowest a))))
  39. ([a closed open-cells]
  40. (reset! open open-cells)
  41. (while (not (empty? @open))
  42. (let [newly-open (atom {})]
  43. (doall (for [[i v] @open]
  44. (let [n (- i wide)
  45. s (+ i wide)
  46. w (- i 1 )
  47. e (+ i 1 )
  48. ]
  49. (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))))
  50. (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))))
  51. (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))))
  52. (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))))
  53. )))
  54. (reset! open @newly-open)))
  55. a
  56. ))
  57.  
Runtime error #stdin #stdout #stderr 1.53s 390144KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
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