diff options
| author | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-12-09 04:09:31 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-12-09 04:09:31 +0100 |
| commit | 023e428b2669b13b769a946341c08f1a8006a31d (patch) | |
| tree | c4cf655d7d959b00ca095a34307a9e57a8d85234 /src/day8pt2.rs | |
| parent | 55d33c8c29861ecadedcd2fde903bbf34a0bce55 (diff) | |
day7+1
Diffstat (limited to 'src/day8pt2.rs')
| -rw-r--r-- | src/day8pt2.rs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/day8pt2.rs b/src/day8pt2.rs new file mode 100644 index 0000000..506a6b9 --- /dev/null +++ b/src/day8pt2.rs @@ -0,0 +1,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); +} |
