Guest User

Untitled

a guest
Dec 6th, 2021
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.95 KB | None | 0 0
  1. fn aoc_06_part01(input: &[Vec<usize>], days: usize) -> usize {
  2.     // We only care about the last day technically...
  3.     let mut last_day = input[input.len() - 1].clone();
  4.     let mut to_add: usize;
  5.     for _day in 0..(days - input.len() + 1) {
  6.         to_add = 0;
  7.         for lanternfish in last_day.iter_mut() {
  8.             if lanternfish == &0 {
  9.                 *lanternfish = 6;
  10.                 to_add += 1;
  11.             } else {
  12.                 *lanternfish -= 1;
  13.             }
  14.         }
  15.         for _add in 0..to_add {
  16.             last_day.push(8);
  17.         }
  18.     }
  19.  
  20.     last_day.len()
  21. }
  22.  
  23. fn aoc_06_part02(input: &[Vec<usize>], days: usize) -> usize {
  24.     // Basically we dont care about individual values, all we care is each number of fish per day,
  25.     // which is a fixed vec...
  26.     let last_day = input[input.len() - 1].clone();
  27.     let mut aggregated_lanternfish: Vec<usize> = last_day.iter().fold(vec![0; 9], |mut acc, val| {
  28.         acc[*val] += 1;
  29.         acc
  30.     });
  31.  
  32.     let mut to_add: usize;
  33.     for _day in 0..(days - input.len() + 1) {
  34.         // Very simple, each 0 goes back to 6
  35.         // Each 0 creates one 8 each...
  36.         to_add = aggregated_lanternfish[0];
  37.  
  38.         // Depleting each
  39.         for i in 1..9 {
  40.             aggregated_lanternfish[i - 1] = aggregated_lanternfish[i];
  41.         }
  42.  
  43.         aggregated_lanternfish[6] += to_add;
  44.         aggregated_lanternfish[8] = to_add;
  45.     }
  46.  
  47.     aggregated_lanternfish.iter().sum()
  48. }
  49.  
  50. fn main() {
  51.     let s = include_str!("../input.txt").lines()
  52.         // .map(|s| s.split_once(": ").unwrap_or(("", "")).1)
  53.         .map(|s| s.split(',').filter_map(|s| s.parse::<usize>().ok()).collect::<Vec<usize>>())
  54.         .collect::<Vec<Vec<usize>>>();
  55.  
  56.     let result = aoc_06_part01(&s, 80);
  57.     println!("Number of lanternfish after 80 days: {:?}", result);
  58.  
  59.  
  60.     let result = aoc_06_part02(&s, 256);
  61.     println!("Number of lanternfish after 256 days: {:?}", result);
  62. }
  63.  
Advertisement
Add Comment
Please, Sign In to add comment