+50
day7/day7.gleam
+50
day7/day7.gleam
···
1
+
import gleam/dict
2
+
import gleam/int
3
+
import gleam/io
4
+
import gleam/list
5
+
import gleam/pair
6
+
import gleam/set
7
+
import gleam/string
8
+
import simplifile
9
+
10
+
pub fn main() {
11
+
let assert Ok(raw_input) = simplifile.read("src/day7/input.txt")
12
+
13
+
let assert [first, ..rest] =
14
+
string.trim(raw_input)
15
+
|> string.split("\n")
16
+
17
+
let input =
18
+
list.map(rest, fn(line) {
19
+
string.to_graphemes(line)
20
+
|> list.index_map(fn(x, i) { #(i, x) })
21
+
|> dict.from_list
22
+
})
23
+
24
+
let start =
25
+
string.to_graphemes(first)
26
+
|> list.index_fold(0, fn(acc, x, i) {
27
+
case x {
28
+
"S" -> i
29
+
_ -> acc
30
+
}
31
+
})
32
+
33
+
let part1 =
34
+
list.fold(input, #(0, set.from_list([start])), fn(acc, x) {
35
+
set.fold(acc.1, acc, fn(acc, y) {
36
+
case dict.get(x, y) {
37
+
Ok("^") -> #(
38
+
acc.0 + 1,
39
+
set.delete(acc.1, y)
40
+
|> set.insert(y + 1)
41
+
|> set.insert(y - 1),
42
+
)
43
+
_ -> acc
44
+
}
45
+
})
46
+
})
47
+
|> pair.first
48
+
49
+
io.println("Part 1: " <> int.to_string(part1))
50
+
}