Created template for advent of code in rust
This commit is contained in:
parent
0603763cf8
commit
bf2205c257
57
.gitea/workflows/nightly.yaml
Normal file
57
.gitea/workflows/nightly.yaml
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 18 * * *"
|
||||||
|
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check:
|
||||||
|
name: Check
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
cache: false
|
||||||
|
- run: cargo check
|
||||||
|
|
||||||
|
test:
|
||||||
|
name: Test Suite
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
cache: false
|
||||||
|
- run: cargo test
|
||||||
|
|
||||||
|
fmt:
|
||||||
|
name: Rustfmt
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
cache: false
|
||||||
|
- run: rustup component add rustfmt
|
||||||
|
- run: cargo fmt --all -- --check
|
||||||
|
|
||||||
|
clippy:
|
||||||
|
name: Clippy
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
cache: false
|
||||||
|
- run: rustup component add clippy
|
||||||
|
- run: cargo clippy -- -D warnings
|
||||||
|
|
||||||
|
build:
|
||||||
|
name: build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
cache: false
|
||||||
|
- run: cargo build
|
45
.gitea/workflows/test.yaml
Normal file
45
.gitea/workflows/test.yaml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
name: Continuous integration
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check:
|
||||||
|
name: Check
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
cache: false
|
||||||
|
- run: cargo check
|
||||||
|
|
||||||
|
test:
|
||||||
|
name: Test Suite
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
cache: false
|
||||||
|
- run: cargo test
|
||||||
|
|
||||||
|
fmt:
|
||||||
|
name: Rustfmt
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
cache: false
|
||||||
|
- run: rustup component add rustfmt
|
||||||
|
- run: cargo fmt --all -- --check
|
||||||
|
|
||||||
|
build:
|
||||||
|
name: build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
cache: false
|
||||||
|
- run: cargo build
|
13
Cargo.toml
Normal file
13
Cargo.toml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[package]
|
||||||
|
name = "advent_of_code_XXXX"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
async-trait = "0.1.74"
|
||||||
|
fancy-regex = "0.14.0"
|
||||||
|
hashbrown = "0.15.1"
|
||||||
|
itertools = "0.13.0"
|
||||||
|
strum = "0.26.3"
|
||||||
|
strum_macros = "0.26.4"
|
||||||
|
tokio = {version = "1.41.1", features = ["full"]}
|
12
create.py
Normal file
12
create.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
for day in range(1, 26):
|
||||||
|
boilerplate = open(".\\src\\solutions\\dayxx.rs", "r").read()
|
||||||
|
boilerplate = boilerplate.replace("0", str(day))
|
||||||
|
boilerplate = boilerplate.replace("XX", f"{day:02d}")
|
||||||
|
|
||||||
|
new_code = open(f".\\src\\solutions\\day{day:02d}.rs", "w")
|
||||||
|
new_code.write(boilerplate)
|
||||||
|
|
||||||
|
f = open(f".\\src\\input\\day{day:02d}", "x")
|
||||||
|
f = open(f".\\src\\input\\day{day:02d}_test1", "x")
|
||||||
|
f = open(f".\\src\\input\\day{day:02d}_test2", "x")
|
0
src/input/day01
Normal file
0
src/input/day01
Normal file
0
src/input/day01_test1
Normal file
0
src/input/day01_test1
Normal file
0
src/input/day01_test2
Normal file
0
src/input/day01_test2
Normal file
0
src/input/day02
Normal file
0
src/input/day02
Normal file
0
src/input/day02_test1
Normal file
0
src/input/day02_test1
Normal file
0
src/input/day02_test2
Normal file
0
src/input/day02_test2
Normal file
0
src/input/day03
Normal file
0
src/input/day03
Normal file
0
src/input/day03_test1
Normal file
0
src/input/day03_test1
Normal file
0
src/input/day03_test2
Normal file
0
src/input/day03_test2
Normal file
0
src/input/day04
Normal file
0
src/input/day04
Normal file
0
src/input/day04_test1
Normal file
0
src/input/day04_test1
Normal file
0
src/input/day04_test2
Normal file
0
src/input/day04_test2
Normal file
0
src/input/day05
Normal file
0
src/input/day05
Normal file
0
src/input/day05_test1
Normal file
0
src/input/day05_test1
Normal file
0
src/input/day05_test2
Normal file
0
src/input/day05_test2
Normal file
0
src/input/day06
Normal file
0
src/input/day06
Normal file
0
src/input/day06_test1
Normal file
0
src/input/day06_test1
Normal file
0
src/input/day06_test2
Normal file
0
src/input/day06_test2
Normal file
0
src/input/day07
Normal file
0
src/input/day07
Normal file
0
src/input/day07_test1
Normal file
0
src/input/day07_test1
Normal file
0
src/input/day07_test2
Normal file
0
src/input/day07_test2
Normal file
0
src/input/day08
Normal file
0
src/input/day08
Normal file
0
src/input/day08_test1
Normal file
0
src/input/day08_test1
Normal file
0
src/input/day08_test2
Normal file
0
src/input/day08_test2
Normal file
0
src/input/day09
Normal file
0
src/input/day09
Normal file
0
src/input/day09_test1
Normal file
0
src/input/day09_test1
Normal file
0
src/input/day09_test2
Normal file
0
src/input/day09_test2
Normal file
0
src/input/day10
Normal file
0
src/input/day10
Normal file
0
src/input/day10_test1
Normal file
0
src/input/day10_test1
Normal file
0
src/input/day10_test2
Normal file
0
src/input/day10_test2
Normal file
0
src/input/day11
Normal file
0
src/input/day11
Normal file
0
src/input/day11_test1
Normal file
0
src/input/day11_test1
Normal file
0
src/input/day11_test2
Normal file
0
src/input/day11_test2
Normal file
0
src/input/day12
Normal file
0
src/input/day12
Normal file
0
src/input/day12_test1
Normal file
0
src/input/day12_test1
Normal file
0
src/input/day12_test2
Normal file
0
src/input/day12_test2
Normal file
0
src/input/day13
Normal file
0
src/input/day13
Normal file
0
src/input/day13_test1
Normal file
0
src/input/day13_test1
Normal file
0
src/input/day13_test2
Normal file
0
src/input/day13_test2
Normal file
0
src/input/day14
Normal file
0
src/input/day14
Normal file
0
src/input/day14_test1
Normal file
0
src/input/day14_test1
Normal file
0
src/input/day14_test2
Normal file
0
src/input/day14_test2
Normal file
0
src/input/day15
Normal file
0
src/input/day15
Normal file
0
src/input/day15_test1
Normal file
0
src/input/day15_test1
Normal file
0
src/input/day15_test2
Normal file
0
src/input/day15_test2
Normal file
0
src/input/day16
Normal file
0
src/input/day16
Normal file
0
src/input/day16_test1
Normal file
0
src/input/day16_test1
Normal file
0
src/input/day16_test2
Normal file
0
src/input/day16_test2
Normal file
0
src/input/day17
Normal file
0
src/input/day17
Normal file
0
src/input/day17_test1
Normal file
0
src/input/day17_test1
Normal file
0
src/input/day17_test2
Normal file
0
src/input/day17_test2
Normal file
0
src/input/day18
Normal file
0
src/input/day18
Normal file
0
src/input/day18_test1
Normal file
0
src/input/day18_test1
Normal file
0
src/input/day18_test2
Normal file
0
src/input/day18_test2
Normal file
0
src/input/day19
Normal file
0
src/input/day19
Normal file
0
src/input/day19_test1
Normal file
0
src/input/day19_test1
Normal file
0
src/input/day19_test2
Normal file
0
src/input/day19_test2
Normal file
0
src/input/day20
Normal file
0
src/input/day20
Normal file
0
src/input/day20_test1
Normal file
0
src/input/day20_test1
Normal file
0
src/input/day20_test2
Normal file
0
src/input/day20_test2
Normal file
0
src/input/day21
Normal file
0
src/input/day21
Normal file
0
src/input/day21_test1
Normal file
0
src/input/day21_test1
Normal file
0
src/input/day21_test2
Normal file
0
src/input/day21_test2
Normal file
0
src/input/day22
Normal file
0
src/input/day22
Normal file
0
src/input/day22_test1
Normal file
0
src/input/day22_test1
Normal file
0
src/input/day22_test2
Normal file
0
src/input/day22_test2
Normal file
0
src/input/day23
Normal file
0
src/input/day23
Normal file
0
src/input/day23_test1
Normal file
0
src/input/day23_test1
Normal file
0
src/input/day23_test2
Normal file
0
src/input/day23_test2
Normal file
0
src/input/day24
Normal file
0
src/input/day24
Normal file
0
src/input/day24_test1
Normal file
0
src/input/day24_test1
Normal file
0
src/input/day24_test2
Normal file
0
src/input/day24_test2
Normal file
0
src/input/day25
Normal file
0
src/input/day25
Normal file
0
src/input/day25_test1
Normal file
0
src/input/day25_test1
Normal file
0
src/input/day25_test2
Normal file
0
src/input/day25_test2
Normal file
65
src/main.rs
Normal file
65
src/main.rs
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
mod solutions;
|
||||||
|
mod utils;
|
||||||
|
|
||||||
|
use std::{error::Error, time::SystemTime};
|
||||||
|
|
||||||
|
use solutions::*;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> Result<(), Box<dyn Error>> {
|
||||||
|
let days: Vec<Box<dyn Solution + Sync>> = vec![
|
||||||
|
Box::new(day01::Day01 {}),
|
||||||
|
Box::new(day02::Day02 {}),
|
||||||
|
Box::new(day03::Day03 {}),
|
||||||
|
Box::new(day04::Day04 {}),
|
||||||
|
Box::new(day05::Day05 {}),
|
||||||
|
Box::new(day06::Day06 {}),
|
||||||
|
Box::new(day07::Day07 {}),
|
||||||
|
Box::new(day08::Day08 {}),
|
||||||
|
Box::new(day09::Day09 {}),
|
||||||
|
Box::new(day10::Day10 {}),
|
||||||
|
Box::new(day11::Day11 {}),
|
||||||
|
Box::new(day12::Day12 {}),
|
||||||
|
Box::new(day13::Day13 {}),
|
||||||
|
Box::new(day14::Day14 {}),
|
||||||
|
Box::new(day15::Day15 {}),
|
||||||
|
Box::new(day16::Day16 {}),
|
||||||
|
Box::new(day17::Day17 {}),
|
||||||
|
Box::new(day18::Day18 {}),
|
||||||
|
Box::new(day19::Day19 {}),
|
||||||
|
Box::new(day20::Day20 {}),
|
||||||
|
Box::new(day21::Day21 {}),
|
||||||
|
Box::new(day22::Day22 {}),
|
||||||
|
Box::new(day23::Day23 {}),
|
||||||
|
Box::new(day24::Day24 {}),
|
||||||
|
Box::new(day25::Day25 {}),
|
||||||
|
];
|
||||||
|
|
||||||
|
let mut t = vec![];
|
||||||
|
|
||||||
|
// Run through and generate solutions
|
||||||
|
for day in days.leak() {
|
||||||
|
let task = tokio::spawn(async { day.run().unwrap() });
|
||||||
|
t.push(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
let start_time = SystemTime::now();
|
||||||
|
|
||||||
|
let mut days = vec![];
|
||||||
|
for thread in t {
|
||||||
|
days.push(thread.await?);
|
||||||
|
}
|
||||||
|
|
||||||
|
for day in days {
|
||||||
|
println!("========= Day {} ==========", day.day);
|
||||||
|
println!("Part1 Result: {}", day.part1);
|
||||||
|
println!("Part2 Result: {}", day.part2);
|
||||||
|
println!("========= {}ms =========\n", day.time.as_millis());
|
||||||
|
}
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"Ran AoC 2023 in {}ms",
|
||||||
|
SystemTime::now().duration_since(start_time)?.as_millis()
|
||||||
|
);
|
||||||
|
Ok(())
|
||||||
|
}
|
66
src/solutions/day01.rs
Normal file
66
src/solutions/day01.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day01 {}
|
||||||
|
|
||||||
|
impl Solution for Day01 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day01 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day01::Day01 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day01::Day01 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day02.rs
Normal file
66
src/solutions/day02.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day02 {}
|
||||||
|
|
||||||
|
impl Solution for Day02 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day02 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day02::Day02 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day02::Day02 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day03.rs
Normal file
66
src/solutions/day03.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day03 {}
|
||||||
|
|
||||||
|
impl Solution for Day03 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day03 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day03::Day03 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day03::Day03 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day04.rs
Normal file
66
src/solutions/day04.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day04 {}
|
||||||
|
|
||||||
|
impl Solution for Day04 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day04 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day04::Day04 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day04::Day04 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day05.rs
Normal file
66
src/solutions/day05.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day05 {}
|
||||||
|
|
||||||
|
impl Solution for Day05 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day05 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day05::Day05 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day05::Day05 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day06.rs
Normal file
66
src/solutions/day06.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day06 {}
|
||||||
|
|
||||||
|
impl Solution for Day06 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day06 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day06::Day06 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day06::Day06 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day07.rs
Normal file
66
src/solutions/day07.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day07 {}
|
||||||
|
|
||||||
|
impl Solution for Day07 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
7
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day07 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day07::Day07 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day07::Day07 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day08.rs
Normal file
66
src/solutions/day08.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day08 {}
|
||||||
|
|
||||||
|
impl Solution for Day08 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day08 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day08::Day08 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day08::Day08 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day09.rs
Normal file
66
src/solutions/day09.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day09 {}
|
||||||
|
|
||||||
|
impl Solution for Day09 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
9
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day09 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day09::Day09 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day09::Day09 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day10.rs
Normal file
66
src/solutions/day10.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day10 {}
|
||||||
|
|
||||||
|
impl Solution for Day10 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day10 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day10::Day10 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day10::Day10 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day11.rs
Normal file
66
src/solutions/day11.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day11 {}
|
||||||
|
|
||||||
|
impl Solution for Day11 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
11
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day11 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day11::Day11 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day11::Day11 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day12.rs
Normal file
66
src/solutions/day12.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day12 {}
|
||||||
|
|
||||||
|
impl Solution for Day12 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
12
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day12 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day12::Day12 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day12::Day12 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day13.rs
Normal file
66
src/solutions/day13.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day13 {}
|
||||||
|
|
||||||
|
impl Solution for Day13 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
13
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day13 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day13::Day13 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day13::Day13 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day14.rs
Normal file
66
src/solutions/day14.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day14 {}
|
||||||
|
|
||||||
|
impl Solution for Day14 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
14
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day14 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day14::Day14 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day14::Day14 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day15.rs
Normal file
66
src/solutions/day15.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day15 {}
|
||||||
|
|
||||||
|
impl Solution for Day15 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day15 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day15::Day15 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day15::Day15 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day16.rs
Normal file
66
src/solutions/day16.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day16 {}
|
||||||
|
|
||||||
|
impl Solution for Day16 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day16 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day16::Day16 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day16::Day16 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day17.rs
Normal file
66
src/solutions/day17.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day17 {}
|
||||||
|
|
||||||
|
impl Solution for Day17 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
17
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day17 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day17::Day17 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day17::Day17 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day18.rs
Normal file
66
src/solutions/day18.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day18 {}
|
||||||
|
|
||||||
|
impl Solution for Day18 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day18 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day18::Day18 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day18::Day18 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day19.rs
Normal file
66
src/solutions/day19.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day19 {}
|
||||||
|
|
||||||
|
impl Solution for Day19 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
19
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day19 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day19::Day19 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day19::Day19 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
66
src/solutions/day20.rs
Normal file
66
src/solutions/day20.rs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
use super::Solution;
|
||||||
|
|
||||||
|
pub struct Day20 {}
|
||||||
|
|
||||||
|
impl Solution for Day20 {
|
||||||
|
fn part1(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(
|
||||||
|
&self,
|
||||||
|
_input: &mut Vec<String>,
|
||||||
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
|
Ok(Box::new("Ready"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_day(&self) -> u8 {
|
||||||
|
20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Day20 {}
|
||||||
|
|
||||||
|
/// Test from puzzle input
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
let challenge = day20::Day20 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part1(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test1)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
let challenge = day20::Day20 {};
|
||||||
|
|
||||||
|
//Complete the Challenge
|
||||||
|
let answer = challenge
|
||||||
|
.part2(
|
||||||
|
utils::get_input(challenge.get_day(), utils::InputType::Test2)
|
||||||
|
.unwrap()
|
||||||
|
.as_mut(),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
assert_eq!(answer, "Ready");
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user