Day 6 optimized + Day 7
This commit is contained in:
parent
8b34e1bb1e
commit
54700e121b
4 changed files with 50 additions and 12 deletions
25
src/day06.rs
25
src/day06.rs
|
@ -1,32 +1,33 @@
|
|||
use aoc_runner_derive::{aoc, aoc_generator};
|
||||
|
||||
type Data = Vec<u8>;
|
||||
type Data = [usize;9];
|
||||
|
||||
#[aoc_generator(day06)]
|
||||
pub fn input_generator(input: &str) -> Data {
|
||||
input.trim().split(',').map(|v| v.parse().unwrap()).collect()
|
||||
pub fn input_generator(input: &str) -> [usize;9] {
|
||||
let mut state: [usize;9] = [0;9];
|
||||
let input = input.trim().split(',').map(|v| v.parse::<usize>().unwrap());
|
||||
for v in input {
|
||||
state[v]+=1;
|
||||
}
|
||||
state
|
||||
}
|
||||
|
||||
|
||||
fn simulate(input: &Data,n: usize) -> usize {
|
||||
let mut state: [usize;9] = [0;9];
|
||||
for v in input {
|
||||
state[*v as usize]+=1;
|
||||
}
|
||||
for _ in 0..n {
|
||||
state[7]+=state[0];
|
||||
state.rotate_left(1);
|
||||
let mut state=*input;
|
||||
for i in 0..n {
|
||||
state[(7+i)%9]+=state[i%9];
|
||||
}
|
||||
state.iter().sum()
|
||||
|
||||
}
|
||||
|
||||
#[aoc(day06, part1)]
|
||||
#[aoc(day06, part1)] // 353274
|
||||
pub fn solve_part1(input: &Data) -> usize {
|
||||
simulate(input,80)
|
||||
}
|
||||
|
||||
#[aoc(day06, part2)]
|
||||
#[aoc(day06, part2)] // 1609314870967
|
||||
pub fn solve_part2(input: &Data) -> usize {
|
||||
simulate(input,256)
|
||||
}
|
||||
|
|
33
src/day07.rs
Normal file
33
src/day07.rs
Normal file
|
@ -0,0 +1,33 @@
|
|||
use aoc_runner_derive::{aoc, aoc_generator};
|
||||
|
||||
type Data = Vec<i64>;
|
||||
|
||||
#[aoc_generator(day07)]
|
||||
pub fn input_generator(input: &str) -> Data {
|
||||
let mut input: Vec<_> = input.split(',').map(|v| v.parse().unwrap()).collect();
|
||||
input.sort_unstable();
|
||||
input
|
||||
}
|
||||
|
||||
#[aoc(day07, part1)] // 336040
|
||||
pub fn solve_part1(input: &Data) -> i64 {
|
||||
let start = *input.first().unwrap();
|
||||
let end = *input.last().unwrap();
|
||||
(start..=end).map(|n| {
|
||||
input.iter().map(|v| {
|
||||
(v-n).abs()
|
||||
}).sum()
|
||||
}).min().unwrap()
|
||||
}
|
||||
|
||||
#[aoc(day07, part2)] // 94813675
|
||||
pub fn solve_part2(input: &Data) -> i64 {
|
||||
let start = *input.first().unwrap();
|
||||
let end = *input.last().unwrap();
|
||||
(start..=end).map(|n| {
|
||||
input.iter().map(|v| {
|
||||
let diff=(v-n).abs();
|
||||
(diff*(diff+1))>>1 // Gauss
|
||||
}).sum()
|
||||
}).min().unwrap()
|
||||
}
|
|
@ -1,4 +1,6 @@
|
|||
#![allow(clippy::clippy::needless_return)]
|
||||
#![feature(int_abs_diff)]
|
||||
|
||||
use aoc_runner_derive::aoc_lib;
|
||||
pub mod day01;
|
||||
pub mod day02;
|
||||
|
@ -6,4 +8,5 @@ pub mod day03;
|
|||
pub mod day04;
|
||||
pub mod day05;
|
||||
pub mod day06;
|
||||
pub mod day07;
|
||||
aoc_lib! { year = 2021 }
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
#![feature(int_abs_diff)]
|
||||
use aoc_runner_derive::aoc_main;
|
||||
aoc_main! { lib = aoc_2021 }
|
||||
|
|
Loading…
Reference in a new issue