mirror of
https://github.com/Rhelvetican/aoc2024.git
synced 2024-12-22 22:51:38 +00:00
day 6.9
This commit is contained in:
parent
c38b6b6087
commit
289ae15cc5
21 changed files with 480 additions and 25 deletions
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayTenSolution;
|
||||
|
||||
impl AocSolution for AocDayTenSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_10.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayElevenSolution;
|
||||
|
||||
impl AocSolution for AocDayElevenSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_11.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayTwelveSolution;
|
||||
|
||||
impl AocSolution for AocDayTwelveSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_12.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayThirteenSolution;
|
||||
|
||||
impl AocSolution for AocDayThirteenSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_13.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayFourteenSolution;
|
||||
|
||||
impl AocSolution for AocDayFourteenSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_14.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayFifteenSolution;
|
||||
|
||||
impl AocSolution for AocDayFifteenSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_15.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDaySixteenSolution;
|
||||
|
||||
impl AocSolution for AocDaySixteenSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_16.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDaySeventeenSolution;
|
||||
|
||||
impl AocSolution for AocDaySeventeenSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_17.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayEighteenSolution;
|
||||
|
||||
impl AocSolution for AocDayEighteenSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_18.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayNineteenSolution;
|
||||
|
||||
impl AocSolution for AocDayNineteenSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_19.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayTwentySolution;
|
||||
|
||||
impl AocSolution for AocDayTwentySolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_20.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayTwentyOneSolution;
|
||||
|
||||
impl AocSolution for AocDayTwentyOneSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_21.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,26 @@
|
|||
|
||||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayTwentyTwoSolution;
|
||||
|
||||
impl AocSolution for AocDayTwentyTwoSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_22.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayTwentyThreeSolution;
|
||||
|
||||
impl AocSolution for AocDayTwentyThreeSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_23.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayTwentyFourSolution;
|
||||
|
||||
impl AocSolution for AocDayTwentyFourSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_24.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayTwentyFiveSolution;
|
||||
|
||||
impl AocSolution for AocDayTwentyFiveSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_25.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
use std::{collections::HashMap, fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
use crate::utils::{coord::Coord, Result};
|
||||
|
||||
const DIRS: [(i16, i16); 8] = [
|
||||
(1, 0),
|
||||
(1, -1),
|
||||
(0, -1),
|
||||
(-1, -1),
|
||||
(-1, 0),
|
||||
(-1, 1),
|
||||
(0, 1),
|
||||
(1, 1),
|
||||
const DIRS: [Coord; 8] = [
|
||||
Coord::new(1, 0),
|
||||
Coord::new(1, -1),
|
||||
Coord::new(0, -1),
|
||||
Coord::new(-1, -1),
|
||||
Coord::new(-1, 0),
|
||||
Coord::new(-1, 1),
|
||||
Coord::new(0, 1),
|
||||
Coord::new(1, 1),
|
||||
];
|
||||
|
||||
struct XmasGrid {
|
||||
pub grid: HashMap<(i16, i16), char>,
|
||||
pub grid: HashMap<Coord, char>,
|
||||
}
|
||||
|
||||
impl XmasGrid {
|
||||
|
@ -24,22 +24,20 @@ impl XmasGrid {
|
|||
grid: src
|
||||
.lines()
|
||||
.zip(0..)
|
||||
.flat_map(|(l, y)| l.chars().zip(0..).map(move |(c, x)| ((x, y), c)))
|
||||
.flat_map(|(l, y)| l.chars().zip(0..).map(move |(c, x)| (Coord::new(x, y), c)))
|
||||
.collect(),
|
||||
}
|
||||
}
|
||||
|
||||
fn find_xmas(&self, pos: (i16, i16)) -> usize {
|
||||
fn find_xmas(&self, pos: Coord) -> usize {
|
||||
let mut tmp = 0;
|
||||
for (dx, dy) in DIRS {
|
||||
for dir in DIRS {
|
||||
let mut found = true;
|
||||
let (mut x, mut y) = pos;
|
||||
|
||||
for nxt in ['M', 'A', 'S'] {
|
||||
x += dx;
|
||||
y += dy;
|
||||
let nxt_pos = pos + dir;
|
||||
|
||||
if self.grid.get(&(x, y)) != Some(&nxt) {
|
||||
if self.grid.get(&nxt_pos) != Some(&nxt) {
|
||||
found = false;
|
||||
break;
|
||||
}
|
||||
|
@ -53,13 +51,13 @@ impl XmasGrid {
|
|||
tmp
|
||||
}
|
||||
|
||||
fn find_x_mas(&self, pos: (i16, i16)) -> usize {
|
||||
let (x, y) = pos;
|
||||
fn find_x_mas(&self, pos: Coord) -> usize {
|
||||
let (x, y) = (pos.x, pos.y);
|
||||
|
||||
let tr = self.grid.get(&(x + 1, y + 1));
|
||||
let br = self.grid.get(&(x + 1, y - 1));
|
||||
let bl = self.grid.get(&(x - 1, y - 1));
|
||||
let tl = self.grid.get(&(x - 1, y + 1));
|
||||
let tr = self.grid.get(&Coord::new(x + 1, y + 1));
|
||||
let br = self.grid.get(&Coord::new(x + 1, y - 1));
|
||||
let bl = self.grid.get(&Coord::new(x - 1, y - 1));
|
||||
let tl = self.grid.get(&Coord::new(x - 1, y + 1));
|
||||
|
||||
match (tr, bl, tl, br) {
|
||||
(Some('S'), Some('M'), Some('M'), Some('S')) => 1,
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDaySevenSolution;
|
||||
|
||||
impl AocSolution for AocDaySevenSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_7.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayEightSolution;
|
||||
|
||||
impl AocSolution for AocDayEightSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_8.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
use std::{fs::read_to_string, path::Path};
|
||||
|
||||
use super::AocSolution;
|
||||
use crate::utils::Result;
|
||||
|
||||
pub struct AocDayNineSolution;
|
||||
|
||||
impl AocSolution for AocDayNineSolution {
|
||||
type Output = u64;
|
||||
|
||||
fn get_input(&self, path: Option<&Path>) -> Result<String> {
|
||||
Ok(match path {
|
||||
Some(p) => read_to_string(p)?,
|
||||
None => read_to_string("./input/day_day_9.txt")?,
|
||||
})
|
||||
}
|
||||
|
||||
fn part_one(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn part_two(&self, input: &str) -> Result<Self::Output> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ pub struct Coord {
|
|||
}
|
||||
|
||||
impl Coord {
|
||||
pub fn new(x: i16, y: i16) -> Self {
|
||||
pub const fn new(x: i16, y: i16) -> Self {
|
||||
Self { x, y }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue