Compare commits
No commits in common. "182cea15a7dd392dea5193a62c72ab758a3243cc" and "34523aebcae413ee0cc6f45b75122aec36c5edb2" have entirely different histories.
182cea15a7
...
34523aebca
4 changed files with 0 additions and 123 deletions
|
|
@ -1,53 +0,0 @@
|
||||||
use crate::days::Solution;
|
|
||||||
|
|
||||||
pub struct Day03;
|
|
||||||
|
|
||||||
impl Solution for Day03 {
|
|
||||||
type Input = Vec<Vec<u32>>;
|
|
||||||
|
|
||||||
fn parse(&self, data: &str) -> Self::Input {
|
|
||||||
data.split("\n")
|
|
||||||
.filter(|s| !s.is_empty())
|
|
||||||
.map(|s| s.chars().map(|c| c.to_digit(10).unwrap_or(0)).collect())
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn part1(&self, input: &Self::Input) -> usize {
|
|
||||||
input
|
|
||||||
.iter()
|
|
||||||
.map(|l| {
|
|
||||||
let (i1, m1) = max(&l[..l.len() - 1]);
|
|
||||||
let (_, m2) = max(&l[i1 + 1..]);
|
|
||||||
10 * m1 + m2
|
|
||||||
})
|
|
||||||
.sum::<u32>() as usize
|
|
||||||
}
|
|
||||||
|
|
||||||
fn part2(&self, input: &Self::Input) -> usize {
|
|
||||||
println!("Part2");
|
|
||||||
input
|
|
||||||
.iter()
|
|
||||||
.map(|l| {
|
|
||||||
(0..12)
|
|
||||||
.rfold((0, 0), |(start_index, joltage), n| {
|
|
||||||
let (i, m) = max(&l[start_index..l.len() - n]);
|
|
||||||
(
|
|
||||||
start_index + i + 1,
|
|
||||||
usize::pow(10, n as u32) * m as usize + joltage,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.1
|
|
||||||
})
|
|
||||||
.sum()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn max(l: &[u32]) -> (usize, u32) {
|
|
||||||
let x = l.iter().enumerate().fold(
|
|
||||||
(0, 0),
|
|
||||||
|(index_m, m), (i, &x)| if x > m { (i, x) } else { (index_m, m) },
|
|
||||||
);
|
|
||||||
|
|
||||||
println!("Max of {:?} is {:?}", l, x);
|
|
||||||
x
|
|
||||||
}
|
|
||||||
|
|
@ -1,66 +0,0 @@
|
||||||
use crate::days::Solution;
|
|
||||||
use std::cmp::{max, min};
|
|
||||||
|
|
||||||
pub struct Day04;
|
|
||||||
|
|
||||||
impl Solution for Day04 {
|
|
||||||
type Input = Vec<Vec<bool>>;
|
|
||||||
|
|
||||||
fn parse(&self, data: &str) -> Self::Input {
|
|
||||||
data.split("\n")
|
|
||||||
.filter(|s| !s.is_empty())
|
|
||||||
.map(|s| s.chars().map(|c| c == '@').collect())
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn part1(&self, input: &Self::Input) -> usize {
|
|
||||||
input
|
|
||||||
.iter()
|
|
||||||
.enumerate()
|
|
||||||
.map(|(x, l)| {
|
|
||||||
l.iter()
|
|
||||||
.enumerate()
|
|
||||||
.filter(move |(y, v)| {
|
|
||||||
**v && neighbors((x, *y), input.len())
|
|
||||||
.iter()
|
|
||||||
.filter(|(nx, ny)| input[*nx][*ny])
|
|
||||||
.count()
|
|
||||||
< 4
|
|
||||||
})
|
|
||||||
.count()
|
|
||||||
})
|
|
||||||
.sum()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn part2(&self, input: &Self::Input) -> usize {
|
|
||||||
0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn coord_in_range((x, y): (i32, i32), size: usize) -> (usize, usize) {
|
|
||||||
(
|
|
||||||
min(max(x, 0) as usize, size - 1),
|
|
||||||
min(max(y, 0) as usize, size - 1),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn neighbors((x, y): (usize, usize), size: usize) -> Vec<(usize, usize)> {
|
|
||||||
(0..=2)
|
|
||||||
.map(|i| i as i32 - 1)
|
|
||||||
.flat_map(|dx| {
|
|
||||||
(0..=2)
|
|
||||||
.map(|i| i as i32 - 1)
|
|
||||||
.filter_map(|dy| {
|
|
||||||
if dx != 0 || dy != 0 {
|
|
||||||
Some(coord_in_range((x as i32 + dx, y as i32 + dy), size))
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.filter(|n| *n != (x, y))
|
|
||||||
.collect::<Vec<(usize, usize)>>()
|
|
||||||
})
|
|
||||||
.collect::<std::collections::HashSet<(usize, usize)>>()
|
|
||||||
.into_iter()
|
|
||||||
.collect::<Vec<(usize, usize)>>()
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
pub mod day01;
|
pub mod day01;
|
||||||
pub mod day02;
|
pub mod day02;
|
||||||
pub mod day03;
|
|
||||||
pub mod day04;
|
|
||||||
|
|
||||||
pub trait Solution {
|
pub trait Solution {
|
||||||
type Input;
|
type Input;
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,6 @@ fn main() {
|
||||||
match cli.day {
|
match cli.day {
|
||||||
1 => run(cli.day, days::day01::Day01),
|
1 => run(cli.day, days::day01::Day01),
|
||||||
2 => run(cli.day, days::day02::Day02),
|
2 => run(cli.day, days::day02::Day02),
|
||||||
3 => run(cli.day, days::day03::Day03),
|
|
||||||
4 => run(cli.day, days::day04::Day04),
|
|
||||||
_ => {
|
_ => {
|
||||||
eprintln!("Day {:02} is not implemented yet!", cli.day);
|
eprintln!("Day {:02} is not implemented yet!", cli.day);
|
||||||
process::exit(1);
|
process::exit(1);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue