aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/day8pt1.rs36
-rw-r--r--src/day8pt2.rs72
-rw-r--r--src/main.rs8
3 files changed, 112 insertions, 4 deletions
diff --git a/src/day8pt1.rs b/src/day8pt1.rs
new file mode 100644
index 0000000..ece5fd9
--- /dev/null
+++ b/src/day8pt1.rs
@@ -0,0 +1,36 @@
+use regex::Regex;
+
+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 cnt: u32 = 0;
+ let mut trn = "AAA";
+ while trn != "ZZZ" {
+ for cvor in &graf {
+ if cvor[0] == trn {
+ if instr.chars().nth(cnt as usize % instr.len()).unwrap() == 'L' {
+ trn = cvor[1].as_str();
+ } else {
+ trn = cvor[2].as_str();
+ }
+ cnt += 1;
+ break;
+ }
+ }
+ }
+
+ println!("{}", cnt);
+}
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);
+}
diff --git a/src/main.rs b/src/main.rs
index dfe1351..1749ed4 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,7 +1,7 @@
-mod day7pt1;
-mod day7pt2;
+mod day8pt1;
+mod day8pt2;
fn main() {
- day7pt1::main();
- day7pt2::main();
+ day8pt1::main();
+ day8pt2::main();
}