2020-12-03 14:10:04 +00:00
|
|
|
use aoc_runner_derive::{aoc, aoc_generator};
|
|
|
|
|
|
|
|
#[aoc_generator(day1)]
|
|
|
|
pub fn input_generator(input: &str) -> Vec<usize> {
|
|
|
|
input
|
|
|
|
.lines()
|
|
|
|
.map(|l| l.trim().parse())
|
|
|
|
.collect::<Result<Vec<usize>, _>>()
|
|
|
|
.unwrap()
|
|
|
|
}
|
|
|
|
|
|
|
|
#[aoc(day1, part1)]
|
|
|
|
pub fn solve_part1(input: &Vec<usize>) -> usize {
|
|
|
|
let mut input = input.clone();
|
|
|
|
input.sort();
|
|
|
|
for (i1, v1) in input.iter().enumerate() {
|
|
|
|
if v1 > &2020 {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
for v2 in input.iter().skip(i1 + 1) {
|
|
|
|
if (v1 + v2) == 2020 {
|
|
|
|
return v1 * v2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
panic!("No pair summed to 20202!");
|
|
|
|
}
|
|
|
|
|
|
|
|
#[aoc(day1, part2)]
|
|
|
|
pub fn solve_part2(input: &Vec<usize>) -> usize {
|
|
|
|
let mut input = input.clone();
|
|
|
|
input.sort();
|
|
|
|
for (i1, v1) in input.iter().enumerate() {
|
|
|
|
if v1 > &2020 {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
for (i2, v2) in input.iter().enumerate().skip(i1 + 1) {
|
|
|
|
if (v1 + v2) > 2020 {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
for v3 in input.iter().skip(i2 + 1) {
|
|
|
|
if (v1 + v2 + v3) == 2020 {
|
|
|
|
return v1 * v2 * v3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
panic!("No triplet summed to 20202!");
|
|
|
|
}
|