Skip to content
Snippets Groups Projects
Commit 426da180 authored by Falk Rehse's avatar Falk Rehse
Browse files

Day 15

parent 90b432cf
No related branches found
No related tags found
No related merge requests found
pub fn solve_from_str(input: &str) -> u32 {
input
.split(",")
.map(|string| {
string
.chars()
.fold(0, |acc, char| (acc + char as u32) * 17 % 256)
})
.sum()
}
pub fn solve_from_str(input: &str) -> usize {
let mut hashmap: Vec<Vec<(&str, usize)>> = Vec::new();
for i in 0..256 {
hashmap.push(Vec::new());
}
for instruction in input.split(",") {
if instruction.contains("=") {
let mut data = instruction.split("=");
let label = data.next().unwrap();
let focal_length = str::parse(data.next().unwrap()).unwrap();
let lensbox = &mut hashmap[hash(label)];
let index = lensbox.iter().enumerate().find_map(|(index, lens)| {
if lens.0.eq(label) {
Some(index)
} else {
None
}
});
if let Some(index) = index {
lensbox[index] = (label, focal_length);
} else {
lensbox.push((label, focal_length));
}
} else if instruction.contains("-") {
let mut data = instruction.split("-");
let label = data.next().unwrap();
let lensbox = &mut hashmap[hash(label)];
let index = lensbox.iter().enumerate().find_map(|(index, lens)| {
if lens.0.eq(label) {
Some(index)
} else {
None
}
});
if let Some(index) = index {
lensbox.remove(index);
}
} else {
panic!();
}
}
hashmap
.iter()
.enumerate()
.map(|(boxindex, lensbox)| {
lensbox
.iter()
.enumerate()
.map(|(lensindex, lens)| (boxindex + 1) * (lensindex + 1) * lens.1)
.sum::<usize>()
})
.sum()
}
fn hash(input: &str) -> usize {
input
.chars()
.fold(0, |acc, char| (acc + char as usize) * 17 % 256)
}
...@@ -4,6 +4,11 @@ mod day_11_1; ...@@ -4,6 +4,11 @@ mod day_11_1;
mod day_11_2; mod day_11_2;
mod day_12_1; mod day_12_1;
mod day_12_2; mod day_12_2;
mod day_13_1;
mod day_13_2;
mod day_14_1;
mod day_15_1;
mod day_15_2;
mod day_1_1; mod day_1_1;
mod day_1_2; mod day_1_2;
mod day_2_1; mod day_2_1;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment