+57
-53
2025/5/gleam/src/main.gleam
+57
-53
2025/5/gleam/src/main.gleam
···
45
45
|> int.to_string
46
46
|> io.println
47
47
48
+
// nicer looking but idc
49
+
// |> list.filter(fn(i) {
50
+
// list.any(fresh_ranges, fn(range) { i >= range.0 && i <= range.1 })
51
+
// })
52
+
// |> list.length
53
+
54
+
// this thing crashed my computer btw im stupid
48
55
// let haha =
49
56
// fresh_ranges
50
57
// |> list.fold(set.new(), fn(acc, i) {
···
53
60
// io.println(set.size(haha) |> int.to_string)
54
61
55
62
let base_set: set.Set(#(Int, Int)) = set.new()
56
-
let ranges =
57
-
fresh_ranges
58
-
|> list.fold(base_set, fn(prev_seen_ranges, range) {
59
-
let #(range, seen_ranges) =
60
-
prev_seen_ranges
61
-
|> set.fold(#(range, prev_seen_ranges), fn(acc, seen_range) {
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
-
// )
71
-
// btw im refusing to ever do something better than this idc about your sorting and whatever this is the way shut the fuck up i spent three hours on this i will be using it
72
-
case
73
-
int.compare(range.0, seen_range.0),
74
-
int.compare(range.1, seen_range.1),
75
-
int.compare(range.0, seen_range.1),
76
-
int.compare(range.1, seen_range.0)
77
-
{
78
-
// if there's no touching
79
-
Gt, Gt, Gt, Gt | Lt, Lt, Lt, Lt -> #(range, seen_ranges)
80
-
// if it's inside of the other one
81
-
Gt, Lt, _, _ | Eq, Lt, _, _ | Gt, Eq, _, _ | Eq, Eq, _, _ -> #(
82
-
#(0, 0),
83
-
seen_ranges,
84
-
)
85
-
// if the other one is inside it
86
-
Lt, Gt, _, _ | Eq, Gt, _, _ | Lt, Eq, _, _ -> #(
87
-
range,
88
-
set.delete(seen_ranges, seen_range),
89
-
)
90
-
// if it's touching on the left side make them touch
91
-
Lt, Lt, _, _ -> #(
92
-
#(range.0, seen_range.1),
93
-
set.delete(seen_ranges, seen_range),
94
-
)
95
-
// if it's touching on the right size make them touch
96
-
Gt, Gt, _, _ -> #(
97
-
#(seen_range.0, range.1),
98
-
set.delete(seen_ranges, seen_range),
99
-
)
100
-
}
101
-
})
63
+
fresh_ranges
64
+
|> list.fold(base_set, fn(prev_seen_ranges, range) {
65
+
let #(range, seen_ranges) =
66
+
prev_seen_ranges
67
+
|> set.fold(#(range, prev_seen_ranges), fn(acc, seen_range) {
68
+
let #(range, seen_ranges) = acc
69
+
// echo #(
70
+
// range,
71
+
// seen_range,
72
+
// int.compare(range.0, seen_range.0),
73
+
// int.compare(range.1, seen_range.1),
74
+
// int.compare(range.0, seen_range.1),
75
+
// int.compare(range.1, seen_range.0),
76
+
// )
77
+
// btw im refusing to ever do something better than this idc about your sorting and whatever this is the way shut the fuck up i spent three hours on this i will be using it
78
+
case
79
+
int.compare(range.0, seen_range.0),
80
+
int.compare(range.1, seen_range.1),
81
+
int.compare(range.0, seen_range.1),
82
+
int.compare(range.1, seen_range.0)
83
+
{
84
+
// if there's no touching
85
+
Gt, Gt, Gt, Gt | Lt, Lt, Lt, Lt -> #(range, seen_ranges)
86
+
// if it's inside of the other one
87
+
Gt, Lt, _, _ | Eq, Lt, _, _ | Gt, Eq, _, _ | Eq, Eq, _, _ -> #(
88
+
#(0, 0),
89
+
seen_ranges,
90
+
)
91
+
// if the other one is inside it
92
+
Lt, Gt, _, _ | Eq, Gt, _, _ | Lt, Eq, _, _ -> #(
93
+
range,
94
+
set.delete(seen_ranges, seen_range),
95
+
)
96
+
// if it's touching on the left side make them touch
97
+
Lt, Lt, _, _ -> #(
98
+
#(range.0, seen_range.1),
99
+
set.delete(seen_ranges, seen_range),
100
+
)
101
+
// if it's touching on the right size make them touch
102
+
Gt, Gt, _, _ -> #(
103
+
#(seen_range.0, range.1),
104
+
set.delete(seen_ranges, seen_range),
105
+
)
106
+
}
107
+
})
102
108
103
-
case range == #(0, 0) {
104
-
False -> seen_ranges |> set.insert(range)
105
-
True -> seen_ranges
106
-
}
107
-
})
108
-
// echo ranges
109
-
ranges
109
+
case range == #(0, 0) {
110
+
False -> seen_ranges |> set.insert(range)
111
+
True -> seen_ranges
112
+
}
113
+
})
110
114
|> set.fold(0, fn(acc, range) { acc + range.1 - range.0 + 1 })
111
115
|> int.to_string
112
116
|> io.println