+16
-20
2025/5/gleam/src/main.gleam
+16
-20
2025/5/gleam/src/main.gleam
···
15
15
fresh_ranges
16
16
|> string.trim
17
17
|> string.split("\n")
18
-
|> list.reverse
19
-
|> list.drop(5)
20
-
|> list.take(12)
21
-
|> list.reverse
18
+
// |> list.reverse
19
+
// |> list.drop(5)
20
+
// |> list.take(12)
21
+
// |> list.reverse
22
22
|> list.map(fn(i) {
23
23
let assert [from, to] = i |> string.trim |> string.split("-")
24
24
let assert Ok(from) = int.parse(from)
25
25
let assert Ok(to) = int.parse(to)
26
-
#(from / 100_000_000, to / 100_000_000)
27
-
// #(from, to)
26
+
// #(from / 100_000_000, to / 100_000_000)
27
+
#(from, to)
28
28
})
29
29
let available =
30
30
available
···
60
60
prev_seen_ranges
61
61
|> set.fold(#(range, prev_seen_ranges), fn(acc, seen_range) {
62
62
let #(range, seen_ranges) = acc
63
-
echo #(
64
-
range,
65
-
seen_range,
66
-
int.compare(range.0, seen_range.0),
67
-
int.compare(range.1, seen_range.1),
68
-
int.compare(range.0, seen_range.1),
69
-
int.compare(range.1, seen_range.0),
70
-
)
63
+
// echo #(
64
+
// range,
65
+
// seen_range,
66
+
// int.compare(range.0, seen_range.0),
67
+
// int.compare(range.1, seen_range.1),
68
+
// int.compare(range.0, seen_range.1),
69
+
// int.compare(range.1, seen_range.0),
70
+
// )
71
71
case
72
72
int.compare(range.0, seen_range.0),
73
73
int.compare(range.1, seen_range.1),
···
92
92
#(range.0, seen_range.1),
93
93
set.delete(seen_ranges, seen_range),
94
94
)
95
-
Gt, Gt, Lt, Gt -> #(
95
+
Gt, Gt, Lt, Gt | Gt, Gt, Eq, Gt -> #(
96
96
#(seen_range.0, range.1),
97
-
set.delete(seen_ranges, seen_range),
98
-
)
99
-
Gt, Gt, Eq, Gt -> #(
100
-
#(seen_range.0, range.0),
101
97
set.delete(seen_ranges, seen_range),
102
98
)
103
99
_, _, _, _ -> #(range, seen_ranges)
···
109
105
True -> seen_ranges
110
106
}
111
107
})
112
-
echo ranges
108
+
// echo ranges
113
109
ranges
114
110
|> set.fold(0, fn(acc, range) { acc + range.1 - range.0 + 1 })
115
111
|> int.to_string