+18
-21
2025/7/gleam/src/main.gleam
+18
-21
2025/7/gleam/src/main.gleam
···
2
2
import gleam/int
3
3
import gleam/io
4
4
import gleam/list
5
-
import gleam/result
6
5
import gleam/set
7
6
import gleam/string
8
7
import simplifile as file
···
67
66
68
67
let timelines =
69
68
splitters_map
70
-
|> list.fold(dict.new() |> dict.insert(0, start), fn(timelines, splitters) {
71
-
// echo #(timelines, splitters)
72
-
timelines
73
-
|> dict.fold(timelines, fn(timelines, timeline, beam) {
74
-
case splitters |> set.contains(beam) {
75
-
False -> timelines
76
-
True -> {
77
-
timelines
78
-
|> dict.delete(timeline)
79
-
|> dict.insert(
80
-
int.random(100_000_000_000_000_000_000_000),
81
-
beam - 1,
82
-
)
83
-
|> dict.insert(
84
-
int.random(100_000_000_000_000_000_000_000),
85
-
beam + 1,
86
-
)
69
+
|> list.index_fold(
70
+
dict.new() |> dict.insert("", start),
71
+
fn(timelines, splitters, i) {
72
+
echo i
73
+
// echo #(timelines, splitters)
74
+
timelines
75
+
|> dict.fold(timelines, fn(timelines, timeline, beam) {
76
+
case splitters |> set.contains(beam) {
77
+
False -> timelines
78
+
True -> {
79
+
timelines
80
+
|> dict.delete(timeline)
81
+
|> dict.insert(timeline <> "-", beam - 1)
82
+
|> dict.insert(timeline <> "+", beam + 1)
83
+
}
87
84
}
88
-
}
89
-
})
90
-
})
85
+
})
86
+
},
87
+
)
91
88
echo timelines
92
89
timelines
93
90
|> dict.size
+7
2025/7/rust/Cargo.lock
+7
2025/7/rust/Cargo.lock
+6
2025/7/rust/Cargo.toml
+6
2025/7/rust/Cargo.toml
+43
2025/7/rust/src/main.rs
+43
2025/7/rust/src/main.rs
···
1
+
use std::{
2
+
char,
3
+
collections::{HashMap, HashSet},
4
+
};
5
+
6
+
fn main() {
7
+
let input = include_str!("../../input_example.txt").trim();
8
+
9
+
let mut input: Vec<&str> = input.trim().split("\n").collect();
10
+
let start = input[0].find("S").unwrap() as u32;
11
+
let splitters_map: Vec<HashSet<u32>> = input[0..input.len()]
12
+
.iter()
13
+
.enumerate()
14
+
.map(|(i, line)| if i % 2 != 0 { "" } else { line })
15
+
.filter(|line| line != &"")
16
+
.map(|line| {
17
+
line.chars()
18
+
.enumerate()
19
+
.fold(HashSet::new(), |mut s, (i, char)| {
20
+
if char == '^' {
21
+
s.insert(i as u32);
22
+
}
23
+
s
24
+
})
25
+
})
26
+
.collect();
27
+
28
+
let timelines = {
29
+
let mut timelines: HashMap<String, u32> = HashMap::new();
30
+
timelines.insert("".to_string(), start);
31
+
for splitters in splitters_map {
32
+
for (timeline, pos) in timelines.clone() {
33
+
if splitters.contains(&pos) {
34
+
timelines.remove(&timeline);
35
+
timelines.insert(format!("{timeline}+"), pos + 1);
36
+
timelines.insert(format!("{timeline}-"), pos - 1);
37
+
}
38
+
}
39
+
}
40
+
timelines
41
+
};
42
+
println!("{}", timelines.len());
43
+
}