fork(2) download
  1. ;; problem code
  2.  
  3. (defn local-dijkstra
  4. ([a center radius]
  5. (local-dijkstra a (find-walls a) {center 0} center radius))
  6. ([a ent center radius]
  7. (local-dijkstra a (dissoc (merge (find-walls a) (find-monsters @monsters)) (:pos @ent)) {center 0} center radius))
  8. ([a closed open-cells center radius]
  9. (loop [open open-cells result (transient {}) ctr 0]
  10.  
  11. (if (and (seq open) (< ctr radius))
  12. (recur (reduce (fn [newly-open [i v]]
  13. (reduce (fn [acc dir]
  14. (if (or (closed dir) (open dir)
  15. ;(> 0 (get result dir 22222.0))
  16. )
  17. acc
  18. (do (assoc! result dir (inc v))
  19. (println (count result) " " ctr " " (str open) " " (str newly-open))
  20. (assoc acc dir (inc v)))))
  21. newly-open, [(- i wide)
  22. (+ i wide)
  23. (- i 1)
  24. (+ i 1)]))
  25. {}, open) result (inc ctr))
  26. (persistent! result)))
  27. ))
  28.  
  29. ;;utility functions
  30.  
  31. (defn find-cells [^doubles a cell-kind]
  32. (persistent! (areduce ^doubles a i ret (transient {})
  33. (if (= (aget ^doubles a i) cell-kind) (assoc! ret i cell-kind) ret))))
  34.  
  35. (defn find-goals [^doubles a]
  36. (find-cells a GOAL))
  37.  
  38. (defn find-walls [^doubles a]
  39. (persistent! (areduce ^doubles a i ret (transient {})
  40. (if (>= (aget ^doubles a i) wall) (assoc! ret i wall) ret))))
  41.  
  42. (defn find-floors [^doubles a]
  43. (find-cells a floor))
  44.  
  45. (defn find-lowest [^doubles a]
  46. (let [low-val (hiphip/amin a)]
  47. (find-cells a low-val)))
  48.  
  49. (defn find-monsters [m]
  50. (into {} (for [mp (map #(:pos @%) m)] [mp wall])))
  51.  
  52.  
  53. ;; working code by amalloy
  54. (defn dijkstra
  55. ([a]
  56. (dijkstra a (find-walls a) (find-lowest a)))
  57. ([a ent]
  58. (dijkstra a (dissoc (merge (find-walls a) (find-monsters @monsters)) (:pos @ent)) (find-lowest a)))
  59. ([a closed open-cells]
  60. (loop [open open-cells]
  61. (when (seq open)
  62. (recur (reduce (fn [newly-open [i v]]
  63. (reduce (fn [acc dir]
  64. (if (or (closed dir) (open dir)
  65. (>= (inc v) (hiphip/aget a dir)))
  66. acc
  67. (do (hiphip/aset a dir (inc v))
  68. (assoc acc dir (inc v)))))
  69. newly-open, [(- i wide)
  70. (+ i wide)
  71. (- i 1)
  72. (+ i 1)]))
  73. {}, open))))
  74. a))
Runtime error #stdin #stdout #stderr 1.31s 389120KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Exception in thread "main" java.lang.RuntimeException: Unable to resolve symbol: find-walls in this context, compiling:(/home/WMrVT4/prog.clj:5:24)
	at clojure.lang.Compiler.analyze(Compiler.java:6379)
	at clojure.lang.Compiler.analyze(Compiler.java:6321)
	at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3572)
	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$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: find-walls 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)
	... 33 more