Skip to content

Commit 7479314

Browse files
committed
D12 kommentarer
1 parent 926e22e commit 7479314

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

notebooks/y2024/d12.clj

+15
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
^{:nextjournal.clerk/visibility {:code :hide}}
12
(ns y2024.d12
23
(:require
34
[advent-of-code-clj.input :as input]
@@ -27,6 +28,7 @@ MIIISIJEEE
2728
MMMISSJEEE")
2829

2930
; Som matrise:
31+
(def test-matrix (utils/text->matrix test-input))
3032

3133
(clerk/md
3234
(with-out-str
@@ -57,6 +59,7 @@ MMMISSJEEE")
5759
; Å finne en region er gjort ved å kjøre et bredde-først søk fra
5860
; en gitt node, og lete etter alle noder som er av samme type (bokstav)
5961

62+
^{:nextjournal.clerk/visibility {:result :hide}}
6063
(defn find-region [coord-map node]
6164
(into [] cat
6265
(utils/breadth-search
@@ -66,10 +69,18 @@ MMMISSJEEE")
6669
node))
6770
node)))
6871

72+
; *OBS:* Noder med samme bokstav er ikke nødvendigvis i samme region.
73+
; Se C'en som ligger for seg selv, den er en egen region:
74+
(m/emap (fn [sym]
75+
(if (= \C sym)
76+
\C \.))
77+
test-matrix)
78+
6979
; Å finne alle regioner gjøres ved å undersøke alle noder i matrisen,
7080
; finne hele regionen noden tilhører. Vi unngår å finne samme region
7181
; igjen ved å lagre alle oppdagede noder i et sett (visited)
7282

83+
^{:nextjournal.clerk/visibility {:result :hide}}
7384
(defn find-regions [coord-map]
7485
(loop [visited #{}
7586
regions []
@@ -88,25 +99,29 @@ MMMISSJEEE")
8899
; som også er omkretsen. En firkantet region med 4 noder har
89100
; omkrets lik 8, fordi hver node har to åpne sider.
90101

102+
^{:nextjournal.clerk/visibility {:result :hide}}
91103
(defn open-sides [node-set node]
92104
(->> node
93105
(apply utils/adjacent-hv)
94106
(remove node-set)
95107
count))
96108

109+
^{:nextjournal.clerk/visibility {:result :hide}}
97110
(defn circumference [nodes]
98111
(let [node-set (set nodes)]
99112
(transduce (map #(open-sides node-set %))
100113
+ nodes)))
101114

102115
; "Prisen" i en region er areal multiplisert med omkrets:
103116

117+
^{:nextjournal.clerk/visibility {:result :hide}}
104118
(defn region-price [nodes]
105119
(let [area (count nodes)]
106120
(* area (circumference nodes))))
107121

108122
; Og løsningen på del 1 er summen av prisen i alle regioner:
109123

124+
^{:nextjournal.clerk/visibility {:result :hide}}
110125
(defn part-1 [input]
111126
(let [coord-map (utils/coord-map-fixed (utils/text->matrix input))
112127
regions (find-regions coord-map)]

0 commit comments

Comments
 (0)