pub fn part_1(input: &str) -> u64 { let mut priorities_sum: u64 = 0; let backpacks = input.lines(); for backpack in backpacks { // todo this should be .chars() or something let items: Vec<&str> = backpack.split("").collect(); let items_per_compartment = items.len() / 2; let first_compartment = &items[1..items_per_compartment]; let second_compartment= &items[items_per_compartment..(items.len() - 1)]; for item in first_compartment { if second_compartment.contains(item) { let mut byte = item.as_bytes()[0] as u64; // this is kind of diabolical if item.to_string() == item.to_uppercase() { byte -= 38; } else { byte -= 96; } priorities_sum += byte; break; } } } priorities_sum }