Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (ns clojure-solution.core
- (:require [loom.graph :as loom])
- (:gen-class))
- (defn make-graph [graph line]
- (let [[_ x y] (re-find #"Step (.) must be finished before step (.) can begin\." line)]
- (assoc graph x (conj (get graph x #{}) y))))
- (defn read-file [path]
- (with-open [rdr (clojure.java.io/reader path)]
- (reduce make-graph {} (line-seq rdr))))
- (defn get-min [dg]
- (->>
- (for [node (loom/nodes dg) :when (= (loom/in-degree dg node) 0)] node)
- (apply min-key #(int (char (first %))))))
- (defn solve [graph]
- (loop [order [] dg graph]
- (if (empty? (loom/nodes dg))
- order
- (let [m (get-min dg)]
- (recur (conj order m) (loom/remove-nodes dg m))))))
- (defn part1 [graph]
- (let [dg (loom/digraph graph)]
- (solve dg)))
- (defn -main
- [& args]
- (time (println (part1 (read-file "resources/input.txt")))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement