main.rs (1121B)
1 fn main() {
2 let input = std::fs::read_to_string("input.txt")
3 .unwrap()
4 .trim()
5 .split(',')
6 .map(|x| x.parse::<i32>().unwrap())
7 .collect::<Vec<i32>>();
8 // 388739
9 println!("Part 1: {}", part_1(&input, 80));
10 // 1741362314973
11 println!("Part 2: {}", part_1(&input, 256));
12 }
13
14 fn part_1(input: &Vec<i32>, days: usize) -> usize {
15 let mut population = {
16 let mut tmp = std::collections::HashMap::<i32, usize>::new();
17 for i in input {
18 tmp.insert(*i, **tmp.get(i).get_or_insert(&0) + 1);
19 }
20 tmp
21 };
22 for _ in 0..days {
23 let mut new_born = None;
24 population = population
25 .into_iter()
26 .map(|(k, v)| {
27 if k == 0 {
28 new_born = Some(v);
29 (8, v)
30 } else {
31 (k - 1, v)
32 }
33 })
34 .collect();
35 if let Some(new_born) = new_born {
36 population.insert(6, *population.get(&6).get_or_insert(&0) + new_born);
37 }
38 }
39 population.values().sum()
40 }