blob: 506a6b99f85d73e1d85a955ae9d7fc94f7c32cf4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
use num::integer::lcm;
use regex::Regex;
#[derive(Debug)]
struct Indeks<'a> {
trn: &'a str,
do_kraja1: u64,
do_kraja2: u64,
}
pub fn main() {
let txt = std::fs::read_to_string("./input/day8.txt").unwrap();
let input = txt.lines().collect::<Vec<_>>();
let instr = input[0];
let graf = (&input[2..input.len()])
.into_iter()
.map(|s| {
let re = Regex::new(r"=\s*|\(|\)|,").unwrap();
re.replace_all(s, "")
.split_whitespace()
.map(String::from)
.collect::<Vec<_>>()
})
.collect::<Vec<_>>();
let mut cvorovi: Vec<Indeks> = vec![];
for cvor in &graf {
if cvor[0].chars().nth(2).unwrap() == 'A' {
cvorovi.push(Indeks {
trn: (cvor[0].as_str()),
do_kraja1: (0),
do_kraja2: (0),
});
}
}
let mut cnt: usize;
for i in 0..cvorovi.len() {
cnt = 0;
loop {
for cvor in &graf {
if cvor[0] == cvorovi[i].trn {
if cvorovi[i].do_kraja2 > 0 || cvorovi[i].trn.chars().last().unwrap() == 'Z' {
cvorovi[i].do_kraja2 += 1;
} else {
cvorovi[i].do_kraja1 += 1;
}
if instr.chars().nth(cnt).unwrap() == 'L' {
cvorovi[i].trn = &cvor[1];
} else {
cvorovi[i].trn = &cvor[2];
}
break;
}
}
cnt = (cnt + 1) % instr.len();
if cvorovi[i].do_kraja2 != 0 && cvorovi[i].trn.chars().last().unwrap() == 'Z' {
break;
}
}
}
let mut a = 1;
for cvor in cvorovi {
a = lcm(a, cvor.do_kraja2);
}
println!("{}", a);
}
|