day07 part 1 done
This commit is contained in:
142
inputs/day07.txt
Normal file
142
inputs/day07.txt
Normal file
@@ -0,0 +1,142 @@
|
||||
......................................................................S......................................................................
|
||||
.............................................................................................................................................
|
||||
......................................................................^......................................................................
|
||||
.............................................................................................................................................
|
||||
.....................................................................^.^.....................................................................
|
||||
.............................................................................................................................................
|
||||
....................................................................^...^....................................................................
|
||||
.............................................................................................................................................
|
||||
...................................................................^.^...^...................................................................
|
||||
.............................................................................................................................................
|
||||
..................................................................^.....^.^..................................................................
|
||||
.............................................................................................................................................
|
||||
.................................................................^.^.^.^.^.^.................................................................
|
||||
.............................................................................................................................................
|
||||
................................................................^.^.^...^.^.^................................................................
|
||||
.............................................................................................................................................
|
||||
...............................................................^.^.^.^.^.^.^.^...............................................................
|
||||
.............................................................................................................................................
|
||||
..............................................................^.^.^.^.^.....^.^..............................................................
|
||||
.............................................................................................................................................
|
||||
.............................................................^.^.^.^.^.^.^.^.^.^.............................................................
|
||||
.............................................................................................................................................
|
||||
............................................................^.^.....^.^.^.^.^.^.^............................................................
|
||||
.............................................................................................................................................
|
||||
...........................................................^...^.^...^.^.^...^.^.^...........................................................
|
||||
.............................................................................................................................................
|
||||
..........................................................^.^.^.^.^.^...^.^.^...^.^..........................................................
|
||||
.............................................................................................................................................
|
||||
.........................................................^...^.....^.^...^.^.^.^.^.^.........................................................
|
||||
.............................................................................................................................................
|
||||
........................................................^.^...^.^...^.^.^.^.^.^...^.^........................................................
|
||||
.............................................................................................................................................
|
||||
.......................................................^...^.^...^.^...^.^...^.....^.^.......................................................
|
||||
.............................................................................................................................................
|
||||
......................................................^...^...^.^...^.^.^.^.^.^.^.^...^......................................................
|
||||
.............................................................................................................................................
|
||||
.....................................................^.^.^.^.^.^.^...^.^.^.^...^.^.^.^.^.....................................................
|
||||
.............................................................................................................................................
|
||||
....................................................^.^.^...^.^...^.^...^.^.^.^.^.^.^...^....................................................
|
||||
.............................................................................................................................................
|
||||
...................................................^.^.^.^.^.^.^...^.^.^.^.^.^.....^.^.^.^...................................................
|
||||
.............................................................................................................................................
|
||||
..................................................^.^...^.^.^.....^...^...^.^...^.^...^...^..................................................
|
||||
.............................................................................................................................................
|
||||
.................................................^.......^.^.^.....^.^.^.^.^.^.^.^...^...^.^.................................................
|
||||
.............................................................................................................................................
|
||||
................................................^...^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^................................................
|
||||
.............................................................................................................................................
|
||||
...............................................^.^.....^.^.^.^...^.^.^.^.^...^...^...^.^.....^...............................................
|
||||
.............................................................................................................................................
|
||||
..............................................^...^...^.^.^...^...^.....^.^.......^.....^.....^..............................................
|
||||
.............................................................................................................................................
|
||||
.............................................^.^.^.....^.^.....^.^.....^.......^.^.^.^.^.^.^.^.^.............................................
|
||||
.............................................................................................................................................
|
||||
............................................^.^.....^.^.^.........^.^...^.^...^...^.^.^.^...^...^............................................
|
||||
.............................................................................................................................................
|
||||
...........................................^.^.....^.......^.^.^...^.^.^.^.^.^.^.....^...^.^...^.^...........................................
|
||||
.............................................................................................................................................
|
||||
..........................................^.^.....^.^.^.^...^.^...^.^.^.^.^.^.^.....^.^.^...^...^.^..........................................
|
||||
.............................................................................................................................................
|
||||
.........................................^.^.....^.^.......^.........^.^.^.^...^.^.^.^...^.^.....^.^.........................................
|
||||
.............................................................................................................................................
|
||||
........................................^.^.^.^...^...^...^.^.^.^.^.^.^.^.^.^...^.....^.^.^.^.^.^...^........................................
|
||||
.............................................................................................................................................
|
||||
.......................................^.....^.^.^.......^.^...^.....^.^.^...^...^.^.^.^.^.^.^.^.^...^.......................................
|
||||
.............................................................................................................................................
|
||||
......................................^.^.....^...^.^.^.^.^...^.^.^.....^.^.....^.^.^.^.^...^.^.^.^...^......................................
|
||||
.............................................................................................................................................
|
||||
.....................................^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^...^.^.........^.^.^.....................................
|
||||
.............................................................................................................................................
|
||||
....................................^.^.^.^.^.^.^.^.^.....^.^.^...^...^...^.^.....^.^.^...^.^...^...^.^.^....................................
|
||||
.............................................................................................................................................
|
||||
...................................^.^.....^.^.^...^...^.^...^...^.......^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^...................................
|
||||
.............................................................................................................................................
|
||||
..................................^.^.^.^.^.^.^.^.^.^...^.^...^...^.^.^.^.^.^.^.^.....^.^.^...^.....^.^...^..................................
|
||||
.............................................................................................................................................
|
||||
.................................^.^.^.^.......^...^.^.^...^.^.^.....^.^...^.^.^.^...^.^.^.^...^.^.^.^...^.^.................................
|
||||
.............................................................................................................................................
|
||||
................................^.^.^.........^.^...^.^...^.^.^.^.^...^.^...^.^.....^...^.^.^...^...^.^...^.^................................
|
||||
.............................................................................................................................................
|
||||
...............................^.....^.^.....^.^.^.^.....^.^.^.^.^.^.^.^.^.....^.....^.^...^.....^.^.^.^.^.^.^...............................
|
||||
.............................................................................................................................................
|
||||
..............................^.^.^.^.^.^.....^.^.^.^.^.....^.^.^.^.^.^.....^...^.^...^.^.^.^.^.^.^...^.^.^...^..............................
|
||||
.............................................................................................................................................
|
||||
.............................^...^...^.^.^.^...^.^.......^.^...^...^.^...^.^.^.^...^...^.^.^.....^.^.^...^.^.^.^.............................
|
||||
.............................................................................................................................................
|
||||
............................^...^.^...^.^.^.^...^.^...^...........^.^.^.^.^.^.....^.^.^.^.^.^.^.^.^...^.....^.^.^............................
|
||||
.............................................................................................................................................
|
||||
...........................^.^...^.^.^...^.^.^.^.^.^.^.^.....^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^...........................
|
||||
.............................................................................................................................................
|
||||
..........................^.^.^...^.^...^.^.^...^...^.^.^.^.^...^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^...^.^.^.....^.^.^..........................
|
||||
.............................................................................................................................................
|
||||
.........................^...^...^.^.^.^.^...^...^.......^.^...^.^...^.^.^...^.^.^.^...^.^.^.^...^.^...^.^...^.^.^.^.........................
|
||||
.............................................................................................................................................
|
||||
........................^.^.^.^.^.^.^...^...^.^.^...^.^.^.^.^.^...^...^...^.^.^.....^.^...^.^...^.^.^.^.^.......^.^.^........................
|
||||
.............................................................................................................................................
|
||||
.......................^.^.^.^.^.^.^.^.........^.^.^.^...^.^...^...^.^.^.^.^...^.^...^.^.^...^...^.^.^.^...^.^.^.^...^.......................
|
||||
.............................................................................................................................................
|
||||
......................^.^.^.^.......^.^.^.^.^...^...^...^.^.^...^.....^.^.^...........^.^.^.^.^...^.^.^.^.^.^.^...^.^.^......................
|
||||
.............................................................................................................................................
|
||||
.....................^.^.^...^...^...^.........^...^.^...^.^.^...^.^.^.^...^.^.^...^.^...^...^...^...^.^.^.....^.^.^...^.....................
|
||||
.............................................................................................................................................
|
||||
....................^.^.^.....^.^.^...^...^.^.^.^.^.^.^.^.^.^.^.....^...........^...^.^.^.^.^.^.^...^.....^.^...^...^.^.^....................
|
||||
.............................................................................................................................................
|
||||
...................^.....^.....^.......^.^.^.^.^.^.^.^.^.^.....^.^.^.^.^.^.......^...^.^.^...^.^.^.^.^.^.^.^.^.....^.^...^...................
|
||||
.............................................................................................................................................
|
||||
..................^.^.^...^.^.^.^.^...^.^.^...^.^.^.^.^.^.^.^.^...^.^.^.^.^...^...^...^.^.^.^.^...^.^...^...^.^.^...^...^.^..................
|
||||
.............................................................................................................................................
|
||||
.................^.^.^.^.^.^...^.^.^.^.^.^...^.^.^.^.^...^.......^...^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^...^.^.^.^...^...^.^.^.................
|
||||
.............................................................................................................................................
|
||||
................^...^.^.^.^.^...^...^.^...^...^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^...^.^.^.^.^.....^.^.^.^.^.^................
|
||||
.............................................................................................................................................
|
||||
...............^.....^.^.^.^.^.......^.^.^...^.^.^.^.^.^...^.^.^.^.^.....^.^.^.....^.^.^.^...^.....^.^.^...^.^...^.^.^.^.^...^...............
|
||||
.............................................................................................................................................
|
||||
..............^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^...^.^...^.^.......^.^.^.^.....^...^.........^.....^...^.^.^.^.^...^.^.^.^.^..............
|
||||
.............................................................................................................................................
|
||||
.............^.^.^...^.....^.....^...^.^...^.^...^.^.^.^.^.^.^.^...^.^.^...^.^...^.....^.^.^.^.^.^...^.^...^.^...^.^.^.^.^.....^.............
|
||||
.............................................................................................................................................
|
||||
............^.^.^...^.^.^.^.^.^.^...^.^...^...^.^.^.^.^.^...^...^.^.^.^...^.^.^.^.....^.....^.^...^...^...^.^.^.^.^.^.......^.^.^............
|
||||
.............................................................................................................................................
|
||||
...........^...^.^...^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^...........^.^...^.^...^...^.^.^.^.^.^...^.....^.......^.^.^.^...^...^.^...........
|
||||
.............................................................................................................................................
|
||||
..........^.^.^.^...^...^...^.^.^.....^.^...^.^.^.^...^.^...^.^.^.^...^.^.....^.^...^.^.^.^...^.^.^.^.^...^...^.^.^.^.^.^...^.^.^.^..........
|
||||
.............................................................................................................................................
|
||||
.........^.....^...^.^...^.^.^.^.^.^.^...^.^...^.^.^.^.^...^...^.......^.^...^.^.^.^.^.^.^.....^...^.....^.^.^.^.^.^.^.^.^...^.^.^.^.........
|
||||
.............................................................................................................................................
|
||||
........^.^.^.^.^...^...^.^.^...^.^.^.^...^.^.^.^...^.^...^.^.^.^.....^.^.^.^.....^.^.^.....^.^.^.^...^.^...^.....^.^.^.^.^.^...^.^.^........
|
||||
.............................................................................................................................................
|
||||
.......^.^.......^.....^.^.^.^...^.^.^.^.^...^.....^.^.^.^.^.^.^.^.^.^...^.....^...^.^...^.^.^.^...^.^.^.......^.^...^.........^.^.^.^.......
|
||||
.............................................................................................................................................
|
||||
......^.^...^.....^.^.^.^...^.^.^.^.^.^...^.......^.....^.^.....^.^.^...^.^.^.^...^.^.^.^.^...^.^.^.^.^...^.^.^.^.....^.....^.^.^.^.^.^......
|
||||
.............................................................................................................................................
|
||||
.....^.^.^.^.....^...^.^.^.^.^.....^...^.^...^.^.^.^...^.^.^.....^.^...^...^.^.^.^.....^.^.......^...^...^.^.......^.....^.^...^.^.^.^.^.....
|
||||
.............................................................................................................................................
|
||||
....^.^.....^.^.^.^...^.^.....^.....^.^.^.^.^.^.^.^.^.^.....^.^.^.^.^...^.^.^.^...^.^.^.^.^.^...^...^...^.^.^...^.....^...^...^...^.....^....
|
||||
.............................................................................................................................................
|
||||
...^...^.^.^.^.^...^...^.^.^.^.^...^.^.^...^.^.^.^...^...^.^.^.^...^...^...^...^.^.^.^.^.........^.....^...^.^...^.........^.^.^...^...^.^...
|
||||
.............................................................................................................................................
|
||||
..^.^.....^.^.^.......^...^.^.^...^.^.....^.^...^.^...^.....^.^.....^.^.^...^...^.^.^...^.^.....^.....^...^...^.^.^...^.^.^.^.^...^.^.^.^.^..
|
||||
.............................................................................................................................................
|
||||
.^.^.^.^.^.^.^...^.^...^.^...^.^.....^.....^.^.^.^.^.^.^.^.^...^.^...^...^.....^.^.^.^.^...^.^.^.^...^.^.^.^.^.^.......^.^...^.^.^.^.^...^.^.
|
||||
.............................................................................................................................................
|
||||
16
inputs/day07example.txt
Normal file
16
inputs/day07example.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
.......S.......
|
||||
...............
|
||||
.......^.......
|
||||
...............
|
||||
......^.^......
|
||||
...............
|
||||
.....^.^.^.....
|
||||
...............
|
||||
....^.^...^....
|
||||
...............
|
||||
...^.^...^.^...
|
||||
...............
|
||||
..^...^.....^..
|
||||
...............
|
||||
.^.^.^.^.^...^.
|
||||
...............
|
||||
12
src/bin/day07.rs
Normal file
12
src/bin/day07.rs
Normal file
@@ -0,0 +1,12 @@
|
||||
use aoc_2025::day07;
|
||||
use color_eyre::Report;
|
||||
|
||||
fn main() -> Result<(), Report> {
|
||||
color_eyre::install()?;
|
||||
let data = day07::data("inputs/day07.txt")?;
|
||||
let code1 = day07::part1(&data)?;
|
||||
let code2 = day07::part2(&data)?;
|
||||
println!("code1: {code1}");
|
||||
println!("code2: {code2}");
|
||||
Ok(())
|
||||
}
|
||||
174
src/day07.rs
Normal file
174
src/day07.rs
Normal file
@@ -0,0 +1,174 @@
|
||||
use color_eyre::{
|
||||
Report,
|
||||
eyre::{ContextCompat, eyre},
|
||||
};
|
||||
use std::{
|
||||
fmt::Display,
|
||||
fs::File,
|
||||
io::Read,
|
||||
ops::{Div, Rem},
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum BoardBit {
|
||||
Source,
|
||||
Split,
|
||||
Beam,
|
||||
Empty,
|
||||
}
|
||||
|
||||
impl From<char> for BoardBit {
|
||||
fn from(value: char) -> Self {
|
||||
match value {
|
||||
'.' => BoardBit::Empty,
|
||||
'S' => BoardBit::Source,
|
||||
'|' | '-' => BoardBit::Beam,
|
||||
'^' => BoardBit::Split,
|
||||
_ => BoardBit::Empty,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for BoardBit {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
let c = match self {
|
||||
BoardBit::Empty => '.',
|
||||
BoardBit::Source => 'S',
|
||||
BoardBit::Beam => '|',
|
||||
BoardBit::Split => '^',
|
||||
};
|
||||
write!(f, "{}", c)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Board {
|
||||
data: Vec<BoardBit>,
|
||||
width: usize,
|
||||
height: usize,
|
||||
}
|
||||
|
||||
impl TryFrom<&str> for Board {
|
||||
type Error = Report;
|
||||
|
||||
fn try_from(value: &str) -> Result<Self, Self::Error> {
|
||||
let mut lines = value.lines();
|
||||
let mut width = None;
|
||||
let mut height = 0;
|
||||
let mut data = Vec::new();
|
||||
for line in lines.by_ref() {
|
||||
height += 1;
|
||||
if width.is_none() {
|
||||
width = Some(line.len());
|
||||
} else if width.unwrap() != line.len() {
|
||||
return Err(eyre!("Inconsistent line lengths in board"));
|
||||
}
|
||||
for c in line.chars() {
|
||||
let bit = BoardBit::from(c);
|
||||
data.push(bit);
|
||||
}
|
||||
}
|
||||
Ok(Self {
|
||||
height,
|
||||
width: width.unwrap_or(0),
|
||||
data,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl Board {
|
||||
fn get_row(&self, row: usize) -> Option<&[BoardBit]> {
|
||||
if row >= self.height {
|
||||
return None;
|
||||
}
|
||||
let start = row * self.width;
|
||||
let end = start + self.width;
|
||||
Some(&self.data[start..end])
|
||||
}
|
||||
}
|
||||
|
||||
pub fn part1(data: &Board) -> Result<u64, Report> {
|
||||
let mut splits = 0;
|
||||
let mut cur = data.get_row(0).context("Invalid row")?.to_vec();
|
||||
let mut newdata = Vec::new();
|
||||
newdata.extend(cur.clone());
|
||||
for row in 1..data.height {
|
||||
let line = data.get_row(row).context("Invalid row")?;
|
||||
println!("Row {row}: {:?}", line);
|
||||
let mut new_row = vec![BoardBit::Empty; data.width];
|
||||
for col in 0..data.width {
|
||||
let new = &new_row[col];
|
||||
let prev = &cur[col];
|
||||
let next = &line[col];
|
||||
match (prev, next, new) {
|
||||
(BoardBit::Source, BoardBit::Empty, _) => {
|
||||
new_row[col] = BoardBit::Beam;
|
||||
}
|
||||
(BoardBit::Beam, BoardBit::Empty, _) => {
|
||||
new_row[col] = BoardBit::Beam;
|
||||
}
|
||||
(BoardBit::Beam, BoardBit::Split, _) => {
|
||||
splits += 1;
|
||||
new_row[col] = BoardBit::Split;
|
||||
if col > 0 {
|
||||
new_row[col - 1] = BoardBit::Beam;
|
||||
}
|
||||
if col < data.width - 1 {
|
||||
new_row[col + 1] = BoardBit::Beam;
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
println!(
|
||||
"cur : {:?}",
|
||||
cur.iter().map(|v| v.to_string()).collect::<String>()
|
||||
);
|
||||
println!(
|
||||
"next: {:?}",
|
||||
line.iter().map(|v| v.to_string()).collect::<String>()
|
||||
);
|
||||
println!(
|
||||
"new : {:?}",
|
||||
new_row.iter().map(|v| v.to_string()).collect::<String>()
|
||||
);
|
||||
newdata.extend(new_row.clone());
|
||||
cur = new_row;
|
||||
}
|
||||
// pretty print
|
||||
for row in 0..data.height {
|
||||
let line = newdata.chunks(data.width).nth(row).context("Invalid row")?;
|
||||
let line_str: String = line.iter().map(|v| v.to_string()).collect();
|
||||
println!("{}", line_str);
|
||||
}
|
||||
Ok(splits)
|
||||
}
|
||||
|
||||
pub fn part2(data: &Board) -> Result<u64, Report> {
|
||||
Ok(0)
|
||||
}
|
||||
pub fn data(filepath: &str) -> Result<Board, Report> {
|
||||
let mut file = File::open(filepath)?;
|
||||
let mut string = String::new();
|
||||
let _ = file.read_to_string(&mut string);
|
||||
let board = Board::try_from(string.as_str())?;
|
||||
Ok(board)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use criterion::Criterion;
|
||||
use criterion_macro::criterion;
|
||||
|
||||
#[criterion]
|
||||
fn bench_part1(b: &mut Criterion) {
|
||||
let data = data("inputs/day07.txt").unwrap();
|
||||
b.bench_function("day07-part1", |b| b.iter(|| part1(&data).unwrap()));
|
||||
}
|
||||
#[criterion]
|
||||
fn bench_part2(b: &mut Criterion) {
|
||||
let data = data("inputs/day07.txt").unwrap();
|
||||
b.bench_function("day07-part2", |b| b.iter(|| part2(&data).unwrap()));
|
||||
}
|
||||
}
|
||||
@@ -8,3 +8,4 @@ pub mod day03;
|
||||
pub mod day04;
|
||||
pub mod day05;
|
||||
pub mod day06;
|
||||
pub mod day07;
|
||||
|
||||
Reference in New Issue
Block a user