aboutsummaryrefslogtreecommitdiff
path: root/src/day8pt2.rs
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);
}