From b2c6978311010cd522d2680e7078e496fab28744 Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Sat, 16 Dec 2023 04:01:30 +0100 Subject: day15 --- src/day14pt2.rs | 1 - src/day15pt1.rs | 21 ++++++++++++++++++ src/day15pt2.rs | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 8 +++---- 4 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 src/day15pt1.rs create mode 100644 src/day15pt2.rs (limited to 'src') diff --git a/src/day14pt2.rs b/src/day14pt2.rs index a5d5bed..04db818 100644 --- a/src/day14pt2.rs +++ b/src/day14pt2.rs @@ -111,7 +111,6 @@ pub fn main() { .map(|s| s.chars().collect::>()) .collect::>>(); - let mut a = vec![]; for i in 0..1000 { cycle(&mut input); diff --git a/src/day15pt1.rs b/src/day15pt1.rs new file mode 100644 index 0000000..ff76f54 --- /dev/null +++ b/src/day15pt1.rs @@ -0,0 +1,21 @@ +fn hash(s: String) -> u64 { + let mut sum: u64 = 0; + for c in s.chars() { + sum += c as u64; + sum *= 17; + sum %= 256; + } + return sum; +} + +pub fn main() { + let txt = std::fs::read_to_string("./input/day15.txt").unwrap(); + + let mut sum: u64 = 0; + let input = txt.trim().split(","); + for s in input { + sum += hash(s.to_string()); + } + + println!("{}", sum); +} diff --git a/src/day15pt2.rs b/src/day15pt2.rs new file mode 100644 index 0000000..6f9e53c --- /dev/null +++ b/src/day15pt2.rs @@ -0,0 +1,68 @@ +fn hash(s: String) -> u64 { + let mut sum: u64 = 0; + for c in s.chars() { + sum += c as u64; + sum *= 17; + sum %= 256; + } + return sum; +} + +pub fn main() { + let txt = std::fs::read_to_string("./input/day15.txt").unwrap(); + + let input = txt.trim().split(","); + let mut boxes: [Vec<&str>; 256] = vec![Vec::new(); 256].try_into().expect("static"); + + for s in input { + let fp; + if s.chars().last().unwrap() == '-' { + fp = s.split("-").collect::>(); + } else { + fp = s.split("=").collect::>(); + } + + let box_ind = hash(fp[0].to_string()) as usize; + + if fp[1].len() != 0 { + // dodaj + let mut ind = true; + for el in boxes[box_ind].iter_mut() { + if el.split("=").collect::>()[0] == fp[0] { + *el = s; + ind = false; + break; + } + } + if ind { + boxes[box_ind].push(s); + } + } else { + // obrisi + let mut x = -1; + for i in 0..boxes[box_ind].len() { + if boxes[box_ind][i].split("=").collect::>()[0] == fp[0] { + x = i as isize; + break; + } + } + if x != -1 { + boxes[box_ind].remove(x as usize); + } + } + } + + let mut sum: u64 = 0; + + for (i, b) in (&boxes).iter().enumerate() { + for (j, l) in b.iter().enumerate() { + sum += (i + 1) as u64 + * (j + 1) as u64 + * (l.split("=").collect::>()[1]) + .parse::() + .unwrap(); + } + } + + println!("{}", sum); +} diff --git a/src/main.rs b/src/main.rs index ed80bc3..f3c0d0b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ -mod day14pt1; -mod day14pt2; +mod day15pt1; +mod day15pt2; fn main() { - day14pt1::main(); - day14pt2::main(); + day15pt1::main(); + day15pt2::main(); } -- cgit v1.2.3