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); }