qzazwxsx

Untitled

Dec 4th, 2023
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.33 KB | Source Code | 0 0
  1. use crate::{Solution, SolutionPair};
  2. use std::collections::HashMap;
  3. ///////////////////////////////////////////////////////////////////////////////
  4.  
  5. pub fn solve(input: std::str::Lines<'_>) -> SolutionPair {
  6.  
  7.    let lines = input
  8.        .map(|i| i
  9.            .split(": ")
  10.            .nth(1)
  11.            .unwrap())
  12.        .map(|i| i
  13.            .split('|')
  14.            .map(|part| {
  15.                part.trim()
  16.                    .split_whitespace()
  17.                    .map(|num_str| num_str.parse::<i32>().unwrap())
  18.                    .collect::<Vec<_>>()
  19.            })
  20.            .collect::<Vec<_>>());
  21.    
  22.    let mut sum1: u64 = 0;
  23.    let mut sum2 = 0;
  24.    let mut multiplier_map: HashMap<usize, u64> = HashMap::new();
  25.  
  26.    for key in 0..=210 {
  27.        multiplier_map.insert(key, 1);
  28.    }
  29.  
  30.    for (idx, line) in lines.enumerate() {
  31.        let winnings = &line[0];
  32.        let numbers = &line[1];
  33.        let mut count: u32 = 0;
  34.        let mult: u64 = multiplier_map[&idx];
  35.        for number in numbers {
  36.            if winnings.contains(&number) {
  37.                count += 1;
  38.                *multiplier_map.entry(idx + count as usize).or_insert(0) += mult;
  39.            }
  40.        }
  41.        sum1 += 2_u64.pow(count - 1);
  42.        sum2 += mult;
  43.    }
  44.  
  45.    (Solution::from(sum1), Solution::from(sum2))
  46. }
  47.  
Advertisement
Add Comment
Please, Sign In to add comment