diff options
| author | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-12-16 04:01:30 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-12-16 04:01:30 +0100 |
| commit | b2c6978311010cd522d2680e7078e496fab28744 (patch) | |
| tree | eda3e3ca790d481a53531ef4210ad60e23aea8c1 /src | |
| parent | 7769eb17b7d9c0ed4fd28a26f485a76da46b5a5d (diff) | |
day15
Diffstat (limited to 'src')
| -rw-r--r-- | src/day14pt2.rs | 1 | ||||
| -rw-r--r-- | src/day15pt1.rs | 21 | ||||
| -rw-r--r-- | src/day15pt2.rs | 68 | ||||
| -rw-r--r-- | src/main.rs | 8 |
4 files changed, 93 insertions, 5 deletions
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::<Vec<char>>()) .collect::<Vec<Vec<char>>>(); - 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::<Vec<_>>(); + } else { + fp = s.split("=").collect::<Vec<_>>(); + } + + 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::<Vec<_>>()[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::<Vec<_>>()[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::<Vec<_>>()[1]) + .parse::<u64>() + .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(); } |
