mirror of
https://git.sr.ht/~anthonycicc/advent_of_code_2023
synced 2025-04-06 00:32:33 -04:00
day two part one
This commit is contained in:
parent
f085be1244
commit
6f57e947b1
16 changed files with 505 additions and 62 deletions
|
@ -9,7 +9,8 @@ tasks:
|
|||
- run_aoc: |
|
||||
cd advent_of_code_2023
|
||||
for identity in anthonycicc acicchetti-jf; do
|
||||
for day in one; do
|
||||
for day in day_*; do
|
||||
day="${day#*_}"
|
||||
for part in one two; do
|
||||
path="inputs/${identity}/day_${day}/${part}.txt"
|
||||
if [[ -f "$path" ]]; then
|
||||
|
|
21
.gitignore
vendored
21
.gitignore
vendored
|
@ -7,7 +7,7 @@ target/
|
|||
|
||||
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
|
||||
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
|
||||
Cargo.lock
|
||||
# Cargo.lock
|
||||
|
||||
# These are backup files generated by rustfmt
|
||||
**/*.rs.bk
|
||||
|
@ -15,22 +15,3 @@ Cargo.lock
|
|||
# MSVC Windows builds of rustc generate these, which store debugging information
|
||||
*.pdb
|
||||
|
||||
|
||||
### https://raw.github.com/github/gitignore/4488915eec0b3a45b5c63ead28f286819c0917de/Rust.gitignore
|
||||
|
||||
# Generated by Cargo
|
||||
# will have compiled files and executables
|
||||
debug/
|
||||
target/
|
||||
|
||||
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
|
||||
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
|
||||
Cargo.lock
|
||||
|
||||
# These are backup files generated by rustfmt
|
||||
**/*.rs.bk
|
||||
|
||||
# MSVC Windows builds of rustc generate these, which store debugging information
|
||||
*.pdb
|
||||
|
||||
|
||||
|
|
75
Cargo.lock
generated
75
Cargo.lock
generated
|
@ -37,27 +37,27 @@ checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
|
|||
|
||||
[[package]]
|
||||
name = "anstyle-parse"
|
||||
version = "0.2.2"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
|
||||
checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
|
||||
dependencies = [
|
||||
"utf8parse",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-query"
|
||||
version = "1.0.0"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
|
||||
checksum = "a3a318f1f38d2418400f8209655bfd825785afd25aa30bb7ba6cc792e4596748"
|
||||
dependencies = [
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-wincon"
|
||||
version = "3.0.1"
|
||||
version = "3.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
|
||||
checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
|
||||
dependencies = [
|
||||
"anstyle",
|
||||
"windows-sys",
|
||||
|
@ -65,9 +65,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.4.10"
|
||||
version = "4.4.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272"
|
||||
checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2"
|
||||
dependencies = [
|
||||
"clap_builder",
|
||||
"clap_derive",
|
||||
|
@ -75,9 +75,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.4.9"
|
||||
version = "4.4.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1"
|
||||
checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
|
@ -110,6 +110,7 @@ dependencies = [
|
|||
"clap",
|
||||
"common",
|
||||
"day_01",
|
||||
"day_02",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
|
@ -135,6 +136,15 @@ dependencies = [
|
|||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "day_02"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"common",
|
||||
"thiserror",
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
version = "0.4.1"
|
||||
|
@ -245,18 +255,18 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
|
|||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.48.0"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
|
||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||
dependencies = [
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.48.5"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
|
||||
checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm",
|
||||
"windows_aarch64_msvc",
|
||||
|
@ -269,42 +279,51 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.48.5"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
||||
checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.48.5"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
||||
checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.48.5"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
||||
checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.48.5"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
||||
checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.48.5"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
||||
checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.48.5"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
||||
checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.48.5"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
||||
checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
|
||||
|
||||
[[package]]
|
||||
name = "winnow"
|
||||
version = "0.5.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0383266b19108dfc6314a56047aa545a1b4d1be60e799b4dbdd407b56402704b"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
|
|
@ -7,7 +7,8 @@ license = "MIT"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[workspace]
|
||||
members = ['common', 'cli', 'day_01']
|
||||
members = ['common', 'cli', 'day_one', "day_two"]
|
||||
|
||||
[workspace.dependencies]
|
||||
thiserror = "1"
|
||||
thiserror = "1"
|
||||
winnow = "0.5"
|
||||
|
|
|
@ -8,7 +8,8 @@ edition = "2021"
|
|||
[dependencies]
|
||||
clap = { version = "4", features = ["derive"] }
|
||||
common = { path = "../common" }
|
||||
day_01 = { path = "../day_01" }
|
||||
day_01 = { path = "../day_one" }
|
||||
day_02 = { path = "../day_two" }
|
||||
thiserror = { workspace = true }
|
||||
|
||||
|
||||
|
|
|
@ -35,6 +35,10 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||
println!("{}", day_01::run_part(part, input_str).unwrap().deref());
|
||||
Ok(())
|
||||
}
|
||||
(Day::Two, part) => {
|
||||
println!("{}", day_02::run_part(part, input_str).unwrap().deref());
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[allow(unreachable_patterns)]
|
||||
(_, _) => {
|
||||
|
|
|
@ -3,6 +3,7 @@ use clap::ValueEnum;
|
|||
#[derive(ValueEnum, Clone, Copy, Debug)]
|
||||
pub enum Day {
|
||||
One,
|
||||
Two,
|
||||
}
|
||||
|
||||
#[derive(ValueEnum, Copy, Clone, Debug)]
|
||||
|
|
11
day_two/Cargo.toml
Normal file
11
day_two/Cargo.toml
Normal file
|
@ -0,0 +1,11 @@
|
|||
[package]
|
||||
name = "day_02"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
common = { path = "../common"}
|
||||
thiserror = { workspace = true }
|
||||
winnow = { workspace = true }
|
320
day_two/src/lib.rs
Normal file
320
day_two/src/lib.rs
Normal file
|
@ -0,0 +1,320 @@
|
|||
use std::fmt::Display;
|
||||
use std::mem;
|
||||
use std::str::FromStr;
|
||||
|
||||
use thiserror::Error;
|
||||
use winnow::ascii::digit1;
|
||||
use winnow::combinator::{alt, preceded, separated, terminated};
|
||||
use winnow::error::InputError;
|
||||
use winnow::prelude::*;
|
||||
use winnow::PResult;
|
||||
|
||||
use common::Part;
|
||||
|
||||
use crate::Color::{Blue, Green, Red};
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum Day02Error {
|
||||
#[error("something weird happened")]
|
||||
RuntimeError,
|
||||
|
||||
#[error("Couldn't parse game")]
|
||||
GameParseError,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Copy, Clone)]
|
||||
enum Color {
|
||||
Green(usize),
|
||||
Red(usize),
|
||||
Blue(usize),
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, PartialOrd, PartialEq, Copy, Clone)]
|
||||
struct Reveal {
|
||||
green: usize,
|
||||
red: usize,
|
||||
blue: usize,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, PartialOrd, PartialEq)]
|
||||
struct Game {
|
||||
id: usize,
|
||||
reveals: Vec<Reveal>,
|
||||
}
|
||||
|
||||
impl Game {
|
||||
fn fits_requirements(&self, req: &Requirements) -> bool {
|
||||
let max_red = self
|
||||
.reveals
|
||||
.iter()
|
||||
.max_by(|&x, &y| x.red.cmp(&y.red))
|
||||
.expect("No max red")
|
||||
.red;
|
||||
let max_green = self
|
||||
.reveals
|
||||
.iter()
|
||||
.max_by(|&x, &y| x.green.cmp(&y.green))
|
||||
.expect("No max green")
|
||||
.green;
|
||||
let max_blue = self
|
||||
.reveals
|
||||
.iter()
|
||||
.max_by(|&x, &y| x.blue.cmp(&y.blue))
|
||||
.expect("No max blue")
|
||||
.blue;
|
||||
|
||||
max_red <= req.red && max_blue <= req.blue && max_green <= req.green
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
struct Requirements {
|
||||
red: usize,
|
||||
green: usize,
|
||||
blue: usize,
|
||||
}
|
||||
|
||||
fn parser_blue<'s>(input: &mut &'s str) -> PResult<Color, InputError<&'s str>> {
|
||||
terminated(digit1, " blue")
|
||||
.map(|s: &str| Color::Blue(s.parse().unwrap()))
|
||||
.parse_next(input)
|
||||
}
|
||||
|
||||
fn parse_blue(input: &mut &str) -> Color {
|
||||
parser_blue(input).unwrap()
|
||||
}
|
||||
|
||||
fn parser_red<'s>(input: &mut &'s str) -> PResult<Color, InputError<&'s str>> {
|
||||
terminated(digit1, " red")
|
||||
.map(|s: &str| Color::Red(s.parse().unwrap()))
|
||||
.parse_next(input)
|
||||
}
|
||||
|
||||
fn parse_red(input: &mut &str) -> Color {
|
||||
parser_red(input).unwrap()
|
||||
}
|
||||
|
||||
fn parser_green<'s>(input: &mut &'s str) -> PResult<Color, InputError<&'s str>> {
|
||||
terminated(digit1, " green")
|
||||
.map(|s: &str| Color::Green(s.parse().unwrap()))
|
||||
.parse_next(input)
|
||||
}
|
||||
|
||||
fn parse_green(input: &mut &str) -> Color {
|
||||
parser_green(input).unwrap()
|
||||
}
|
||||
|
||||
fn parse_colors<'s>(input: &mut &'s str) -> PResult<Vec<Color>, InputError<&'s str>> {
|
||||
separated(0.., alt((parser_green, parser_blue, parser_red)), ", ").parse_next(input)
|
||||
}
|
||||
|
||||
fn colors_into_reveal(colors: Vec<Color>) -> Reveal {
|
||||
let Green(green) = colors
|
||||
.iter()
|
||||
.find(|&a| mem::discriminant(a) == mem::discriminant(&Color::Green(0)))
|
||||
.unwrap_or(&Color::Green(0))
|
||||
else {
|
||||
panic!()
|
||||
};
|
||||
|
||||
let Blue(blue) = colors
|
||||
.iter()
|
||||
.find(|&a| mem::discriminant(a) == mem::discriminant(&Color::Blue(0)))
|
||||
.unwrap_or(&Color::Blue(0))
|
||||
else {
|
||||
panic!()
|
||||
};
|
||||
|
||||
let Red(red) = colors
|
||||
.iter()
|
||||
.find(|&a| mem::discriminant(a) == mem::discriminant(&Color::Red(0)))
|
||||
.unwrap_or(&Color::Red(0))
|
||||
else {
|
||||
panic!()
|
||||
};
|
||||
|
||||
Reveal {
|
||||
red: *red,
|
||||
blue: *blue,
|
||||
green: *green,
|
||||
}
|
||||
}
|
||||
fn parse_reveal<'a>(inp: &mut &'a str) -> PResult<Reveal, InputError<&'a str>> {
|
||||
parse_colors.map(colors_into_reveal).parse_next(inp)
|
||||
}
|
||||
|
||||
// fn parse_reveals(inp: &mut &str) -> Vec<Reveal> {
|
||||
// separated(0.., )
|
||||
// }
|
||||
|
||||
fn parse_reveals<'a>(inp: &mut &'a str) -> PResult<Vec<Reveal>, InputError<&'a str>> {
|
||||
separated(0.., parse_reveal, "; ").parse_next(inp).clone()
|
||||
// .map(parse_reveal)
|
||||
// .parse_next(&mut input)?)
|
||||
// separated(0.., parse_colors, "; ").map(|s: &str| parse_reveal(s)).parse_next(&mut input)
|
||||
}
|
||||
|
||||
fn parser_game<'s>(input: &mut &'s str) -> Game {
|
||||
let game_num = preceded("Game ", digit1::<&'s str, InputError<&'s str>>)
|
||||
.parse_next(input)
|
||||
.unwrap();
|
||||
let colors = preceded(": ", parse_reveals).parse_next(input).unwrap();
|
||||
dbg!(&game_num, &colors);
|
||||
|
||||
Game {
|
||||
id: game_num.parse().unwrap(),
|
||||
reveals: colors.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&str> for Game {
|
||||
type Error = Day02Error;
|
||||
|
||||
fn try_from(value: &str) -> Result<Self, Self::Error> {
|
||||
value.parse()
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for Game {
|
||||
type Err = Day02Error;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
let mut s = s;
|
||||
Ok(parser_game(&mut s))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run_part(part: Part, inp: String) -> Result<Box<dyn Display>, Day02Error> {
|
||||
match part {
|
||||
Part::One => Ok(Box::new(part_01(&inp))),
|
||||
Part::Two => Ok(Box::new(part_02(&inp))),
|
||||
}
|
||||
}
|
||||
|
||||
fn part_01(inp: &str) -> usize {
|
||||
let parsed_input: Vec<Game> = inp.lines().map(|x| x.try_into().unwrap()).collect();
|
||||
let requirements = Requirements {
|
||||
red: 12,
|
||||
green: 13,
|
||||
blue: 14,
|
||||
};
|
||||
parsed_input
|
||||
.into_iter()
|
||||
.filter(|game| game.fits_requirements(&requirements))
|
||||
.fold(0, |acc, game| acc + game.id)
|
||||
}
|
||||
|
||||
fn part_02(inp: &str) -> usize {
|
||||
todo!()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_parse_blue() {
|
||||
assert_eq!(parse_blue(&mut "5 blue"), Color::Blue(5))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_reveal() {
|
||||
assert_eq!(
|
||||
parse_reveal(&mut "3 blue, 4 red").unwrap(),
|
||||
Reveal {
|
||||
green: 0,
|
||||
blue: 3,
|
||||
red: 4,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_game() {
|
||||
assert_eq!(
|
||||
"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green"
|
||||
.parse::<Game>()
|
||||
.unwrap(),
|
||||
Game {
|
||||
id: 1,
|
||||
reveals: vec![
|
||||
Reveal {
|
||||
blue: 3,
|
||||
red: 4,
|
||||
green: 0,
|
||||
},
|
||||
Reveal {
|
||||
red: 1,
|
||||
green: 2,
|
||||
blue: 6,
|
||||
},
|
||||
Reveal {
|
||||
green: 2,
|
||||
blue: 0,
|
||||
red: 0,
|
||||
},
|
||||
],
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_meets_reqs() {
|
||||
assert!(Game {
|
||||
id: 1,
|
||||
reveals: vec![
|
||||
Reveal {
|
||||
blue: 3,
|
||||
red: 4,
|
||||
green: 0,
|
||||
},
|
||||
Reveal {
|
||||
red: 1,
|
||||
green: 2,
|
||||
blue: 6,
|
||||
},
|
||||
Reveal {
|
||||
green: 2,
|
||||
blue: 0,
|
||||
red: 0,
|
||||
},
|
||||
],
|
||||
}
|
||||
.fits_requirements(&Requirements {
|
||||
red: 10,
|
||||
blue: 10,
|
||||
green: 10,
|
||||
}))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_does_not_meet_reqs() {
|
||||
assert!(
|
||||
!(Game {
|
||||
id: 1,
|
||||
reveals: vec![
|
||||
Reveal {
|
||||
blue: 3,
|
||||
red: 4,
|
||||
green: 0,
|
||||
},
|
||||
Reveal {
|
||||
red: 1,
|
||||
green: 2,
|
||||
blue: 6,
|
||||
},
|
||||
Reveal {
|
||||
green: 2,
|
||||
blue: 0,
|
||||
red: 0,
|
||||
},
|
||||
],
|
||||
}
|
||||
.fits_requirements(&Requirements {
|
||||
red: 5,
|
||||
blue: 5,
|
||||
green: 5,
|
||||
}))
|
||||
)
|
||||
}
|
||||
}
|
20
flake.lock
generated
20
flake.lock
generated
|
@ -60,12 +60,12 @@
|
|||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1694529238,
|
||||
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
||||
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
||||
"revCount": 87,
|
||||
"lastModified": 1701680307,
|
||||
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
|
||||
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
|
||||
"revCount": 88,
|
||||
"type": "tarball",
|
||||
"url": "https://api.flakehub.com/f/pinned/numtide/flake-utils/0.1.87%2Brev-ff7b65b44d01cf9ba6a71320833626af21126384/018a8a74-649b-792e-a959-2f97793b1129/source.tar.gz"
|
||||
"url": "https://api.flakehub.com/f/pinned/numtide/flake-utils/0.1.88%2Brev-4022d587cbbfd70fe950c1e2083a02621806a725/018c340d-3287-7c66-818b-f2f646a808e3/source.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
|
@ -74,12 +74,12 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1701253981,
|
||||
"narHash": "sha256-ztaDIyZ7HrTAfEEUt9AtTDNoCYxUdSd6NrRHaYOIxtk=",
|
||||
"rev": "e92039b55bcd58469325ded85d4f58dd5a4eaf58",
|
||||
"revCount": 554114,
|
||||
"lastModified": 1701436327,
|
||||
"narHash": "sha256-tRHbnoNI8SIM5O5xuxOmtSLnswEByzmnQcGGyNRjxsE=",
|
||||
"rev": "91050ea1e57e50388fa87a3302ba12d188ef723a",
|
||||
"revCount": 555097,
|
||||
"type": "tarball",
|
||||
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.554114%2Brev-e92039b55bcd58469325ded85d4f58dd5a4eaf58/018c246f-3485-7920-b58c-92909d475b54/source.tar.gz"
|
||||
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.555097%2Brev-91050ea1e57e50388fa87a3302ba12d188ef723a/018c3450-2363-7c34-883b-4ba70b1eb7ae/source.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
|
|
|
@ -149,6 +149,7 @@
|
|||
packages = [
|
||||
pkgs.sd
|
||||
pkgs.alejandra
|
||||
pkgs.just
|
||||
];
|
||||
};
|
||||
});
|
||||
|
|
100
inputs/acicchetti-jf/day_two/one.txt
Normal file
100
inputs/acicchetti-jf/day_two/one.txt
Normal file
|
@ -0,0 +1,100 @@
|
|||
Game 1: 4 green, 7 blue; 2 blue, 4 red; 5 blue, 2 green, 2 red; 1 green, 3 red, 9 blue; 3 green, 9 blue; 7 green, 2 blue, 2 red
|
||||
Game 2: 1 blue, 2 red; 1 green, 2 blue, 1 red; 1 red, 5 green; 3 red, 2 blue, 8 green; 3 blue, 2 red, 4 green; 2 blue, 4 green, 3 red
|
||||
Game 3: 7 red, 7 blue, 9 green; 15 green, 4 red, 8 blue; 3 green, 12 blue, 6 red
|
||||
Game 4: 4 blue, 11 green, 6 red; 4 green, 2 red; 12 red, 1 blue, 3 green
|
||||
Game 5: 10 green, 4 blue, 9 red; 3 green, 15 blue, 11 red; 15 blue, 1 green, 2 red; 8 red, 8 blue, 5 green
|
||||
Game 6: 5 green, 19 red; 6 green, 13 red, 2 blue; 2 blue, 16 red, 4 green; 13 red, 9 blue, 5 green
|
||||
Game 7: 1 blue, 6 red, 6 green; 7 blue, 4 red; 6 green, 1 red, 11 blue; 3 green, 4 blue, 4 red; 6 green, 13 blue, 11 red
|
||||
Game 8: 8 green, 2 blue; 20 green, 1 red; 1 blue, 6 red, 6 green; 9 green
|
||||
Game 9: 5 red; 4 green, 3 red, 1 blue; 1 blue; 6 red, 1 blue, 9 green
|
||||
Game 10: 2 green, 3 red; 18 blue, 20 green, 9 red; 7 red, 9 blue, 17 green
|
||||
Game 11: 15 green, 7 blue, 9 red; 7 blue, 10 green, 7 red; 5 red, 3 blue, 10 green; 5 blue, 12 green; 14 green, 8 blue, 5 red; 7 blue, 2 red, 5 green
|
||||
Game 12: 3 green, 1 red, 8 blue; 9 blue, 3 red, 3 green; 4 blue, 1 green; 2 red, 3 green, 1 blue; 4 red, 7 blue, 3 green
|
||||
Game 13: 14 green, 1 red; 4 green; 2 green, 1 blue; 14 green; 13 green, 1 red, 1 blue; 1 blue, 1 red, 5 green
|
||||
Game 14: 1 blue, 6 red, 13 green; 5 red, 10 blue, 3 green; 19 green, 1 red, 14 blue; 4 red, 17 green, 9 blue; 12 green, 10 blue, 7 red
|
||||
Game 15: 10 red, 2 blue, 18 green; 17 green, 3 blue, 7 red; 18 blue, 8 red, 12 green; 6 blue, 6 green, 12 red
|
||||
Game 16: 14 blue, 5 green, 12 red; 7 green, 3 red, 9 blue; 4 green, 1 red, 8 blue; 9 red, 19 green, 12 blue; 12 blue, 7 red, 6 green; 5 blue, 3 green, 6 red
|
||||
Game 17: 1 green, 1 blue, 15 red; 1 blue, 3 green, 12 red; 9 blue, 2 green, 10 red
|
||||
Game 18: 12 red, 7 green, 7 blue; 3 blue, 8 red, 1 green; 2 green, 17 red
|
||||
Game 19: 1 red, 7 blue, 17 green; 11 red, 15 blue; 11 blue, 18 green; 6 blue, 14 green, 14 red; 16 blue, 8 red, 8 green; 17 green, 9 red, 1 blue
|
||||
Game 20: 11 green; 1 blue, 4 green, 7 red; 7 green; 3 red, 1 blue, 6 green
|
||||
Game 21: 18 blue, 6 green, 10 red; 12 blue; 9 blue, 2 green, 9 red; 9 red, 20 blue, 1 green; 8 blue, 6 red; 19 blue, 1 green, 4 red
|
||||
Game 22: 4 blue, 16 red, 3 green; 7 blue, 3 green, 12 red; 10 red, 7 green, 10 blue; 7 red, 11 blue, 4 green; 3 blue, 1 green, 16 red
|
||||
Game 23: 5 green, 8 red, 1 blue; 2 red, 5 blue, 3 green; 2 green, 17 blue, 4 red; 2 blue, 2 red; 7 red, 1 green, 14 blue; 4 red, 8 blue
|
||||
Game 24: 1 blue, 3 green, 1 red; 3 blue, 11 green, 15 red; 3 blue, 2 red, 12 green; 9 green, 6 red, 2 blue; 15 green, 12 red, 3 blue; 13 green, 1 blue, 13 red
|
||||
Game 25: 6 blue, 5 red, 10 green; 9 red, 3 blue, 3 green; 6 blue, 11 red, 15 green; 7 green, 10 red, 4 blue; 2 red, 20 blue, 11 green
|
||||
Game 26: 3 blue, 5 red, 10 green; 7 green, 6 red; 7 green, 1 red, 3 blue; 10 green, 4 red, 3 blue; 4 red, 7 green, 3 blue; 8 green, 4 red
|
||||
Game 27: 16 green, 6 blue, 4 red; 3 red, 6 blue, 7 green; 10 green; 6 green, 1 red
|
||||
Game 28: 5 green, 5 red, 2 blue; 1 blue, 9 red, 6 green; 2 blue, 3 red; 1 blue, 1 green, 5 red; 4 green, 3 red; 9 green, 1 blue, 14 red
|
||||
Game 29: 1 red, 2 green, 13 blue; 1 green, 2 red, 9 blue; 12 red; 3 blue, 5 red
|
||||
Game 30: 8 blue, 3 red, 9 green; 10 green, 9 blue; 9 green, 12 blue; 3 blue, 2 red, 4 green; 8 blue, 9 green; 1 red, 12 blue, 6 green
|
||||
Game 31: 8 red, 16 blue; 2 red, 1 green, 1 blue; 5 red, 8 blue, 1 green
|
||||
Game 32: 3 green, 5 blue, 8 red; 10 blue, 1 red, 3 green; 9 green, 3 blue, 2 red; 2 blue, 1 red, 14 green; 3 blue, 10 red, 16 green
|
||||
Game 33: 1 red, 3 green, 2 blue; 15 blue, 1 green; 1 green, 1 red, 10 blue
|
||||
Game 34: 4 green, 7 blue; 2 blue, 12 green; 6 red, 14 green, 7 blue
|
||||
Game 35: 9 blue, 1 green; 2 green, 6 blue, 11 red; 1 green, 10 red, 1 blue
|
||||
Game 36: 5 blue, 1 green, 2 red; 11 blue, 3 green, 5 red; 2 green, 14 blue, 2 red; 3 green, 5 blue, 5 red; 13 blue, 2 green, 5 red; 3 green
|
||||
Game 37: 4 blue, 2 red, 8 green; 1 blue, 9 green, 4 red; 1 red, 4 green, 1 blue; 16 green, 3 blue, 4 red
|
||||
Game 38: 9 blue, 9 green; 1 green, 3 blue; 8 blue, 6 red, 5 green; 1 green, 9 red, 1 blue
|
||||
Game 39: 1 red, 17 green; 1 blue, 7 green, 7 red; 6 red, 4 blue
|
||||
Game 40: 1 blue, 2 red; 10 blue, 4 green, 2 red; 1 green, 11 blue, 3 red; 4 blue, 2 green; 3 blue, 4 red
|
||||
Game 41: 7 red, 4 blue, 4 green; 10 red, 11 blue, 1 green; 6 red, 6 blue, 4 green; 13 blue, 3 red, 7 green; 9 green, 12 blue, 14 red; 9 blue, 12 red, 10 green
|
||||
Game 42: 3 blue, 1 red, 11 green; 4 blue, 9 green, 8 red; 3 red, 5 blue, 1 green
|
||||
Game 43: 2 green, 17 blue, 9 red; 16 red, 12 blue, 2 green; 12 red, 12 blue, 7 green; 17 red, 16 blue, 7 green
|
||||
Game 44: 2 red, 3 green, 5 blue; 5 red, 5 blue, 7 green; 2 red, 5 blue, 5 green; 6 red, 5 blue, 2 green
|
||||
Game 45: 9 green, 1 blue; 1 red, 5 green, 2 blue; 2 blue, 4 green, 9 red; 13 green, 7 red, 1 blue; 3 blue, 4 green
|
||||
Game 46: 5 green, 7 red; 8 green, 5 blue, 1 red; 1 blue, 7 red, 17 green
|
||||
Game 47: 1 green, 17 blue; 9 blue, 1 green; 1 blue, 1 red
|
||||
Game 48: 1 red, 6 green, 7 blue; 9 green, 1 red, 2 blue; 10 blue, 6 green, 1 red; 1 red, 4 green, 9 blue; 6 blue, 3 green, 1 red
|
||||
Game 49: 1 red, 1 blue, 16 green; 3 red, 1 green; 16 green; 2 blue, 8 red, 19 green; 20 green, 9 red; 8 green, 6 red
|
||||
Game 50: 1 green, 2 blue; 2 red, 3 blue; 4 red, 2 blue; 1 green; 3 blue; 3 blue, 2 green, 1 red
|
||||
Game 51: 6 blue, 5 green; 6 red, 5 green; 6 green, 6 blue, 16 red; 10 red, 10 green, 1 blue
|
||||
Game 52: 4 red, 5 green, 1 blue; 15 green, 1 blue; 8 green, 5 blue, 5 red; 4 blue, 11 green, 1 red
|
||||
Game 53: 5 green, 3 blue, 5 red; 2 red, 4 blue, 1 green; 1 red, 2 green; 11 red
|
||||
Game 54: 7 green, 16 blue, 5 red; 5 green; 10 blue, 6 green, 5 red; 3 green
|
||||
Game 55: 3 green; 16 green, 1 blue; 13 green, 19 blue, 1 red; 13 green, 18 blue
|
||||
Game 56: 9 green; 3 blue, 1 red, 10 green; 1 red, 4 blue, 9 green
|
||||
Game 57: 14 blue, 2 red, 3 green; 1 red, 8 blue, 7 green; 1 green, 3 red, 15 blue; 5 green, 12 blue; 4 green, 15 blue
|
||||
Game 58: 9 red, 5 green; 10 green, 11 red, 1 blue; 12 green, 17 red, 1 blue; 1 blue, 1 green, 17 red; 14 red, 1 blue, 16 green
|
||||
Game 59: 2 red, 12 blue, 10 green; 6 green, 1 red, 14 blue; 14 blue, 9 green, 2 red; 12 green, 14 blue, 2 red
|
||||
Game 60: 5 blue, 8 green; 1 red, 6 green, 7 blue; 1 blue
|
||||
Game 61: 5 red, 2 blue, 5 green; 2 blue, 11 green; 1 blue, 2 red, 14 green; 3 green; 4 red, 13 green; 2 blue, 6 green, 1 red
|
||||
Game 62: 1 red, 1 blue, 2 green; 3 red, 1 blue, 2 green; 1 blue, 10 red; 6 red, 1 blue
|
||||
Game 63: 7 red, 6 blue, 4 green; 2 blue, 5 green, 8 red; 5 blue, 4 green, 10 red; 4 blue, 7 red, 10 green; 5 blue, 10 green, 8 red; 4 blue, 10 green, 3 red
|
||||
Game 64: 6 red, 7 green, 15 blue; 8 blue, 16 green, 3 red; 11 green, 12 blue; 4 red, 17 blue, 8 green
|
||||
Game 65: 2 blue, 7 green; 2 red, 8 blue; 2 green, 1 red, 5 blue; 1 green, 2 blue; 19 green, 7 blue; 2 red, 3 blue, 14 green
|
||||
Game 66: 15 green, 7 blue; 9 blue, 3 green, 16 red; 1 red, 1 blue, 16 green; 18 red, 8 blue, 11 green
|
||||
Game 67: 1 blue, 1 green, 2 red; 5 green, 8 red, 2 blue; 7 red, 1 blue
|
||||
Game 68: 3 blue, 10 red; 13 red, 1 green; 5 blue, 5 red; 2 blue, 1 green, 16 red; 16 red, 3 blue
|
||||
Game 69: 7 red, 1 blue, 3 green; 14 green, 2 blue; 3 green, 2 blue; 4 red, 1 green, 1 blue; 10 red, 14 green, 2 blue
|
||||
Game 70: 10 green, 12 red; 5 red, 7 green; 1 blue, 6 red, 11 green
|
||||
Game 71: 16 green, 13 red, 10 blue; 7 red, 7 blue, 15 green; 17 green, 13 red, 1 blue; 5 blue, 8 green, 11 red; 7 red, 1 blue, 15 green; 15 green, 4 blue, 2 red
|
||||
Game 72: 3 blue, 3 red; 2 blue, 3 red, 1 green; 1 red, 1 blue, 3 green; 1 green, 2 blue, 3 red; 3 blue, 1 green, 1 red; 1 blue, 4 red
|
||||
Game 73: 10 blue, 11 red, 5 green; 6 green, 9 blue, 4 red; 10 red, 5 green, 9 blue
|
||||
Game 74: 6 green, 17 blue; 1 red, 1 blue, 11 green; 2 blue, 1 red, 3 green
|
||||
Game 75: 11 red, 11 green, 3 blue; 11 red, 1 blue, 6 green; 4 green, 3 blue, 8 red
|
||||
Game 76: 3 green, 3 blue, 12 red; 3 blue, 15 green, 3 red; 4 red, 15 green, 2 blue
|
||||
Game 77: 13 blue, 11 red, 1 green; 3 red, 12 green, 12 blue; 7 red, 15 green, 4 blue; 5 red, 2 green, 3 blue
|
||||
Game 78: 4 red, 8 blue, 2 green; 7 blue, 3 green, 7 red; 3 green, 13 blue; 3 red, 4 green
|
||||
Game 79: 7 blue, 13 red, 8 green; 7 green, 15 red, 9 blue; 2 green, 8 red, 10 blue; 13 blue, 20 red, 7 green; 11 red, 2 green, 14 blue
|
||||
Game 80: 12 red; 2 blue, 15 red, 3 green; 1 blue, 1 green, 2 red; 1 green; 1 green, 3 blue, 13 red; 1 green, 2 blue, 1 red
|
||||
Game 81: 11 blue; 6 blue, 8 green, 4 red; 7 blue, 1 red, 1 green
|
||||
Game 82: 9 blue, 1 red; 3 blue, 1 red, 3 green; 8 blue, 8 green, 2 red; 5 blue
|
||||
Game 83: 7 blue, 13 red; 4 blue, 2 green, 3 red; 15 blue, 9 red, 1 green; 14 red, 1 green, 12 blue
|
||||
Game 84: 8 blue, 1 green, 20 red; 9 green, 20 red, 18 blue; 16 red, 15 blue, 5 green; 15 red, 10 green, 16 blue; 11 green, 14 red, 12 blue
|
||||
Game 85: 1 red, 2 blue, 9 green; 13 green, 3 blue, 5 red; 1 green, 1 red, 3 blue; 8 green, 2 blue, 1 red
|
||||
Game 86: 10 red, 6 blue, 11 green; 1 red, 11 green; 7 blue, 6 red, 11 green
|
||||
Game 87: 14 red, 4 blue, 4 green; 14 red, 4 blue, 7 green; 12 red, 11 green, 5 blue; 5 blue, 12 red
|
||||
Game 88: 3 green, 4 blue, 11 red; 3 green, 4 blue, 3 red; 10 red, 3 green; 3 blue, 2 red, 2 green
|
||||
Game 89: 4 blue, 2 red, 3 green; 3 green, 7 red, 13 blue; 1 green, 6 blue
|
||||
Game 90: 7 red; 5 blue, 11 red, 8 green; 8 red, 3 green, 2 blue
|
||||
Game 91: 2 blue; 4 red; 2 blue, 4 green; 3 green, 1 blue, 1 red
|
||||
Game 92: 7 blue, 10 green; 9 green, 9 blue, 7 red; 6 green; 12 red, 1 blue, 4 green; 5 red, 1 green, 13 blue
|
||||
Game 93: 7 green, 6 red, 1 blue; 3 red, 6 green, 8 blue; 1 blue, 6 green; 6 red, 15 blue, 4 green; 10 blue, 2 green, 6 red; 3 green, 5 red, 6 blue
|
||||
Game 94: 5 red, 1 green, 15 blue; 1 blue, 6 red; 2 red, 6 blue, 2 green
|
||||
Game 95: 9 blue, 4 red, 17 green; 15 green, 9 red, 10 blue; 1 blue, 13 green, 12 red
|
||||
Game 96: 1 blue, 12 green, 1 red; 3 blue, 1 green, 5 red; 2 blue, 8 red, 10 green
|
||||
Game 97: 18 blue, 7 red, 11 green; 6 red, 3 blue, 14 green; 1 red, 13 blue, 4 green
|
||||
Game 98: 5 blue, 2 green, 8 red; 12 red; 13 red, 4 blue, 4 green; 7 red, 11 blue; 10 blue, 2 green, 2 red; 6 red, 12 blue
|
||||
Game 99: 4 green, 2 blue, 4 red; 9 blue, 11 red, 1 green; 5 green
|
||||
Game 100: 2 blue, 12 green; 6 green, 1 red, 12 blue; 1 green, 5 blue, 1 red; 1 red, 12 green, 6 blue; 16 blue, 3 green
|
3
rust-toolchain.toml
Normal file
3
rust-toolchain.toml
Normal file
|
@ -0,0 +1,3 @@
|
|||
[toolchain]
|
||||
channel = "nightly"
|
||||
components = [ "rustfmt", "clippy", "rust-analyzer"]
|
Loading…
Add table
Reference in a new issue