day two part one

This commit is contained in:
Anthony Cicchetti 2023-12-05 16:15:58 -05:00
parent f085be1244
commit 6f57e947b1
16 changed files with 505 additions and 62 deletions

View file

@ -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
View file

@ -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
View file

@ -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",
]

View file

@ -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"

View file

@ -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 }

View file

@ -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)]
(_, _) => {

View file

@ -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
View 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
View 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
View file

@ -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",

View file

@ -149,6 +149,7 @@
packages = [
pkgs.sd
pkgs.alejandra
pkgs.just
];
};
});

View 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
View file

@ -0,0 +1,3 @@
[toolchain]
channel = "nightly"
components = [ "rustfmt", "clippy", "rust-analyzer"]