feat: added day 4... that one was easy
This commit is contained in:
1 parent
065bd83312
commit
747fb07143
2 files changed
+184
-1
No files matched your search
@@ -0,0 +1,43 @@
|
||||
(ns question-4
|
||||
(:require [inputs]
|
||||
[clojure.set]
|
||||
[clojure.string :as strings]))
|
||||
(def mock-input "..@@.@@@@.\n@@@.@.@.@@\n@@@@@.@.@@\n@.@@@@..@.\n@@.@@@@.@@\n.@@@@@@@.@\n.@.@.@.@@@\n@.@@@.@@@@\n.@@@@@@@@.\n@.@.@@@.@.")
|
||||
|
||||
(defn parse-input [document]
|
||||
(let [x (map vec (strings/split-lines document))]
|
||||
(apply hash-set (for [[line-idx line] (map-indexed vector x)
|
||||
[col-idx e] (map-indexed vector line)
|
||||
:when (= e \@)] [line-idx col-idx]))))
|
||||
|
||||
(defn neighbourhood [[row col]]
|
||||
(for [delta-row [-1 0 1]
|
||||
delta-col [-1 0 1]
|
||||
:when (not= 0 delta-row delta-col)]
|
||||
[(+ delta-row row) (+ col delta-col)]))
|
||||
|
||||
(defn accessible? [roll all-rolls]
|
||||
(< (count (filter #(contains? all-rolls %) (neighbourhood roll))) 4))
|
||||
|
||||
(defn how-many-accessible [all-rolls]
|
||||
(count (filter #(accessible? % all-rolls) all-rolls)))
|
||||
|
||||
(defn remove-all [all-rolls]
|
||||
(let [to-remove (filter #(accessible? % all-rolls) all-rolls)]
|
||||
(if (empty? to-remove)
|
||||
all-rolls
|
||||
(recur (clojure.set/difference all-rolls to-remove)))))
|
||||
|
||||
(defn question-4-a [document]
|
||||
(-> document parse-input how-many-accessible))
|
||||
|
||||
(defn question-4-b [document]
|
||||
(let [all-rolls (parse-input document)
|
||||
final-rolls (remove-all all-rolls)]
|
||||
(- (count all-rolls) (count final-rolls))))
|
||||
|
||||
(defn -main [& args]
|
||||
(println "Solution to question 4-a is: " (question-4-a inputs/question-4))
|
||||
(println "Solution to question 4-b is: " (question-4-b inputs/question-4)))
|
||||
|
||||
|
||||
Reference in new issue
Block a user