From ee4b3a34da35502ce12cdd5a5b42d76cd1a4e220 Mon Sep 17 00:00:00 2001 From: Dennis Pettersson Date: Sat, 1 Dec 2018 22:02:53 +0100 Subject: [PATCH 01/11] day 1, part 1 --- day-01-part-01/Cargo.lock | 4 + day-01-part-01/Cargo.toml | 6 + day-01-part-01/src/input | 1008 ++++++++++++++++++++++++++++++++++++ day-01-part-01/src/main.rs | 26 + 4 files changed, 1044 insertions(+) create mode 100644 day-01-part-01/Cargo.lock create mode 100644 day-01-part-01/Cargo.toml create mode 100644 day-01-part-01/src/input create mode 100644 day-01-part-01/src/main.rs diff --git a/day-01-part-01/Cargo.lock b/day-01-part-01/Cargo.lock new file mode 100644 index 0000000..e1f39f8 --- /dev/null +++ b/day-01-part-01/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "day-01-part-01" +version = "0.1.0" + diff --git a/day-01-part-01/Cargo.toml b/day-01-part-01/Cargo.toml new file mode 100644 index 0000000..4862d4e --- /dev/null +++ b/day-01-part-01/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day-01-part-01" +version = "0.1.0" +authors = ["Dennis Pettersson "] + +[dependencies] diff --git a/day-01-part-01/src/input b/day-01-part-01/src/input new file mode 100644 index 0000000..408dd66 --- /dev/null +++ b/day-01-part-01/src/input @@ -0,0 +1,1008 @@ ++15 +-7 ++16 ++5 ++12 ++16 +-4 ++10 +-1 ++14 +-16 ++6 ++4 ++11 +-2 ++5 ++4 ++12 ++13 ++5 ++16 ++18 +-3 +-2 ++9 +-10 ++12 +-10 +-17 ++12 +-14 +-14 ++11 ++1 +-16 ++11 +-5 ++20 +-1 ++14 +-15 +-10 +-5 ++4 +-17 +-13 +-2 +-12 +-15 ++12 ++8 +-3 ++13 ++17 ++21 ++21 ++8 ++9 +-5 +-15 +-19 +-9 +-17 +-5 ++15 ++12 ++14 ++19 +-2 ++15 +-6 ++19 +-2 ++4 +-5 +-8 +-4 ++10 ++1 +-5 ++10 ++12 ++14 +-2 ++11 +-3 +-15 +-6 ++14 ++3 ++8 ++10 ++14 ++11 ++18 ++3 +-4 +-5 +-13 ++17 +-12 +-8 +-5 ++7 ++7 +-10 +-19 ++17 ++1 ++17 +-5 +-9 +-10 +-9 +-1 +-3 +-14 ++11 ++1 ++11 ++1 ++2 +-17 ++4 ++19 ++17 ++6 ++18 +-4 ++3 +-13 ++7 +-3 ++19 ++5 ++2 ++6 ++12 ++5 +-7 ++10 ++16 +-9 +-16 ++11 ++10 ++2 ++7 +-16 ++6 ++16 ++17 ++11 ++11 +-14 ++11 +-16 +-13 ++6 ++8 ++10 +-4 +-5 ++2 ++5 +-18 ++19 +-11 +-5 +-5 +-5 +-16 +-5 ++16 ++7 +-10 +-20 +-14 +-18 ++13 ++9 +-10 ++18 +-7 +-8 +-4 ++13 ++9 ++18 ++20 +-10 +-14 +-22 +-21 +-10 ++20 +-7 +-9 ++1 ++11 ++6 ++12 ++14 +-5 ++16 ++13 ++8 +-2 +-13 +-2 ++11 ++21 ++9 +-5 ++1 ++18 ++6 ++18 +-17 ++3 ++7 +-2 +-3 ++1 ++7 ++17 ++16 ++4 ++13 ++7 ++17 +-18 ++17 ++2 ++19 +-11 ++2 ++2 ++1 +-16 +-19 +-4 +-17 +-8 +-5 ++12 +-8 ++19 ++3 ++17 ++3 ++3 ++8 ++3 +-13 ++12 +-7 ++9 ++16 ++15 ++3 +-6 +-10 ++14 +-13 +-8 ++4 ++12 ++19 ++17 ++18 +-12 +-11 ++7 +-1 +-7 +-28 +-19 +-6 ++2 ++15 ++3 +-12 +-15 ++5 +-15 +-8 +-16 +-17 ++8 +-7 ++3 ++6 +-18 ++10 +-17 +-9 +-13 ++20 +-13 +-12 +-12 ++9 +-2 ++6 +-10 +-1 ++14 +-18 +-14 ++2 ++25 +-16 +-17 ++19 ++8 ++14 +-15 +-17 ++40 ++21 +-19 ++4 ++3 +-2 ++9 +-2 +-3 ++15 +-9 +-18 ++9 ++7 ++27 ++3 ++8 ++6 ++2 +-13 ++4 +-16 ++26 +-15 +-8 +-16 ++17 +-18 ++33 ++9 ++68 ++8 ++20 +-9 +-8 ++28 ++15 ++15 ++9 ++12 ++20 ++5 ++16 ++22 +-5 ++8 ++14 ++6 ++6 ++10 ++10 ++7 +-13 +-8 ++10 ++9 ++13 +-15 +-15 ++13 ++8 ++5 ++25 +-10 ++21 ++16 ++10 +-16 ++1 +-57 ++13 +-20 +-30 ++2 ++7 ++15 +-18 +-28 +-13 ++1 +-9 +-6 +-2 +-13 ++11 +-4 +-1 +-9 +-13 +-13 ++12 +-14 ++12 +-13 +-7 +-2 +-15 +-2 ++3 ++32 ++13 ++12 +-4 +-19 +-5 ++22 +-29 +-24 +-25 +-6 +-12 +-9 ++3 +-15 ++3 +-5 ++20 +-10 +-34 +-77 +-9 +-9 +-23 +-6 ++8 ++9 ++47 +-82 +-21 ++38 +-61 ++11 +-65 +-37 +-22 ++2 ++12 +-26 +-20 +-4 ++6 +-7 ++14 ++6 ++11 ++19 +-32 ++10 +-74 ++9 +-64 +-59 +-92 +-10 +-92 +-18 +-23 +-64754 +-2 +-16 +-6 +-19 ++6 +-12 +-10 ++14 ++9 ++11 ++12 ++15 ++2 +-14 +-11 ++13 +-1 +-18 +-3 ++19 ++16 ++12 ++14 +-19 +-11 ++9 +-7 ++13 ++20 +-1 ++2 ++13 ++10 ++15 ++15 ++13 +-15 +-7 +-10 ++9 ++2 ++7 ++18 +-9 ++6 +-8 ++4 ++18 +-17 ++12 ++14 ++14 +-15 +-12 +-17 ++18 +-16 ++6 +-13 +-23 +-5 ++9 +-10 +-16 +-19 ++1 ++12 +-18 +-9 +-1 ++5 +-9 ++11 ++1 ++1 ++17 +-20 ++5 +-17 +-13 +-9 +-18 +-11 +-19 +-13 ++11 +-4 ++19 +-5 ++9 ++18 ++8 +-12 +-10 +-14 ++17 ++20 ++12 ++15 +-22 +-12 ++9 +-5 +-19 ++18 ++19 +-8 +-23 +-18 +-1 +-4 +-16 ++1 +-16 ++19 +-11 +-19 +-8 +-15 +-12 +-4 +-15 ++10 ++3 ++15 +-19 ++11 ++5 ++8 +-19 ++3 +-18 ++4 +-8 ++1 ++5 +-13 +-20 ++7 +-8 +-2 ++16 ++13 +-8 +-12 ++2 ++3 ++13 +-9 ++15 ++9 +-16 +-1 +-21 ++8 +-17 +-6 +-2 +-18 +-10 +-6 +-13 +-19 +-1 ++10 +-3 +-9 +-9 ++8 ++2 ++17 +-3 ++5 +-6 +-17 ++13 ++16 +-10 ++3 ++12 ++15 +-13 +-12 +-23 ++10 ++16 ++3 +-14 +-6 +-14 ++11 ++13 ++20 ++8 +-15 ++19 +-10 ++1 +-6 ++14 ++13 ++7 +-15 +-1 +-5 +-3 +-19 ++4 ++7 +-13 +-12 +-19 ++4 +-2 +-15 +-1 ++10 +-13 +-1 +-10 ++7 ++11 +-1 +-9 ++14 +-9 +-15 ++14 +-7 +-15 +-16 +-14 ++12 +-5 +-5 ++11 +-5 ++7 ++18 +-1 +-14 +-14 +-1 +-12 ++1 ++1 ++6 ++18 +-11 +-12 +-14 +-2 ++1 +-3 +-20 +-8 +-8 +-3 ++17 ++7 ++4 ++21 ++19 +-10 ++6 ++20 ++16 +-17 ++7 +-11 ++7 ++8 +-2 ++20 +-14 ++21 ++4 ++3 ++3 +-7 ++23 +-17 +-24 ++5 ++15 +-27 +-10 +-2 +-12 +-23 ++2 +-25 +-11 ++19 +-30 +-17 +-15 ++2 ++16 ++8 ++10 ++1 +-15 +-10 ++9 +-18 +-17 ++23 +-15 ++17 ++6 +-19 ++15 +-7 ++2 +-15 ++21 +-24 +-15 +-4 ++14 ++2 ++18 ++34 ++6 ++8 +-19 +-6 +-12 ++3 +-15 +-12 +-37 ++2 ++9 +-22 +-31 +-5 ++1 +-16 ++19 ++10 +-19 +-22 +-14 +-6 +-18 ++10 +-6 ++17 ++18 +-19 +-15 ++3 +-16 ++20 ++10 +-19 ++10 +-6 ++20 ++19 ++11 +-17 ++13 +-20 +-4 ++20 +-18 +-12 +-8 +-18 +-18 ++6 +-2 ++5 +-17 +-7 +-12 +-5 +-9 ++11 +-9 +-11 +-12 +-4 +-4 +-1 +-2 ++14 +-13 ++17 +-12 +-19 ++23 ++12 +-5 ++16 ++15 +-9 +-12 +-11 +-17 +-17 +-6 ++22 ++21 ++12 ++19 ++13 ++22 ++19 +-11 ++2 +-7 ++8 +-12 +-18 ++6 +-5 +-13 +-34 +-11 +-1 +-4 ++20 ++63 +-4 +-14 +-24 +-20 +-31 +-90 +-8 +-9 +-21 +-16 ++27 +-19 +-9 +-183 +-3 +-10 +-16 ++9 +-10 ++11 ++11 ++19 ++32 +-2 +-3 +-81 ++12 ++16 ++5 +-1 ++17 +-28 ++32 ++22 ++39 +-115 +-2 ++183 ++108 ++1 +-19 ++14 ++3 ++39 +-10 ++33 ++14 +-161 +-885 +-63592 +-9 +-10 ++3 +-4 +-4 ++19 ++16 ++20 ++14 +-3 +-18 +-10 +-5 +-7 ++17 +-16 ++5 +-4 +-18 ++10 ++1 ++18 ++1 ++2 +-19 +-6 +-19 +-12 +-13 +-4 ++20 +-7 ++2 +-4 ++15 +-21 +-4 +-16 +-5 ++17 +-10 ++9 +-5 ++18 ++21 +-6 ++9 +-19 +-6 ++17 +-2 +-5 ++24 ++130793 diff --git a/day-01-part-01/src/main.rs b/day-01-part-01/src/main.rs new file mode 100644 index 0000000..ed3d1cf --- /dev/null +++ b/day-01-part-01/src/main.rs @@ -0,0 +1,26 @@ +use std::io; +use std::io::prelude::*; +use std::fs::File; + +fn main() -> io::Result<()> { + let input_file = try!(File::open("src/input")); + let file = io::BufReader::new(&input_file); + let mut total = 0; + + for line in file.lines() { + let chars: Vec = line.unwrap().chars().collect(); + + let n_str: String = chars[1..chars.len()].iter().collect(); + let n: i32 = n_str.parse::().unwrap(); + + match chars[0].to_string().as_str() { + "+" => total += n, + "-" => total -= n, + _ => {} + } + } + + println!("total: {}", total); + + Ok(()) +} From 86ea4054aa19cfa5eeb34550090fc1fe696e23c8 Mon Sep 17 00:00:00 2001 From: Dennis Pettersson Date: Wed, 1 Dec 2021 08:26:56 +0100 Subject: [PATCH 02/11] chore(day_01): scaffolding --- .gitignore | 3 + Cargo.toml | 7 + README.md | 29 + day-01-part-01/Cargo.lock | 4 - day-01-part-01/Cargo.toml | 6 - day-01-part-01/src/input | 1008 ------------------ day-01-part-01/src/main.rs | 26 - day_01/Cargo.toml | 15 + day_01/src/lib.rs | 27 + day_01/src/main.rs | 12 + day_01/src/part_01.rs | 24 + day_01/src/part_02.rs | 24 + input/day_01 | 2000 ++++++++++++++++++++++++++++++++++++ 13 files changed, 2141 insertions(+), 1044 deletions(-) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 README.md delete mode 100644 day-01-part-01/Cargo.lock delete mode 100644 day-01-part-01/Cargo.toml delete mode 100644 day-01-part-01/src/input delete mode 100644 day-01-part-01/src/main.rs create mode 100644 day_01/Cargo.toml create mode 100644 day_01/src/lib.rs create mode 100644 day_01/src/main.rs create mode 100644 day_01/src/part_01.rs create mode 100644 day_01/src/part_02.rs create mode 100644 input/day_01 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..835ad4a --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +debug*/ +target*/ +Cargo.lock diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..d948d6b --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[workspace] +members = ["day_*"] + +[profile.release] +lto = true +panic = "abort" +opt-level = 3 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e6a5fe7 --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# Advent of Code 2021 + +## Progress: + +- [Day 1](https://github.com/ankjevel/adventofcode/tree/2021/day_01) +- [Day 2](#) +- [Day 3](#) +- [Day 4](#) +- [Day 5](#) +- [Day 6](#) +- [Day 7](#) +- [Day 8](#) +- [Day 9](#) +- [Day 10](#) +- [Day 11](#) +- [Day 12](#) +- [Day 13](#) +- [Day 14](#) +- [Day 15](#) +- [Day 16](#) +- [Day 17](#) +- [Day 18](#) +- [Day 19](#) +- [Day 20](#) +- [Day 21](#) +- [Day 22](#) +- [Day 23](#) +- [Day 24](#) +- [Day 25](#) diff --git a/day-01-part-01/Cargo.lock b/day-01-part-01/Cargo.lock deleted file mode 100644 index e1f39f8..0000000 --- a/day-01-part-01/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "day-01-part-01" -version = "0.1.0" - diff --git a/day-01-part-01/Cargo.toml b/day-01-part-01/Cargo.toml deleted file mode 100644 index 4862d4e..0000000 --- a/day-01-part-01/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "day-01-part-01" -version = "0.1.0" -authors = ["Dennis Pettersson "] - -[dependencies] diff --git a/day-01-part-01/src/input b/day-01-part-01/src/input deleted file mode 100644 index 408dd66..0000000 --- a/day-01-part-01/src/input +++ /dev/null @@ -1,1008 +0,0 @@ -+15 --7 -+16 -+5 -+12 -+16 --4 -+10 --1 -+14 --16 -+6 -+4 -+11 --2 -+5 -+4 -+12 -+13 -+5 -+16 -+18 --3 --2 -+9 --10 -+12 --10 --17 -+12 --14 --14 -+11 -+1 --16 -+11 --5 -+20 --1 -+14 --15 --10 --5 -+4 --17 --13 --2 --12 --15 -+12 -+8 --3 -+13 -+17 -+21 -+21 -+8 -+9 --5 --15 --19 --9 --17 --5 -+15 -+12 -+14 -+19 --2 -+15 --6 -+19 --2 -+4 --5 --8 --4 -+10 -+1 --5 -+10 -+12 -+14 --2 -+11 --3 --15 --6 -+14 -+3 -+8 -+10 -+14 -+11 -+18 -+3 --4 --5 --13 -+17 --12 --8 --5 -+7 -+7 --10 --19 -+17 -+1 -+17 --5 --9 --10 --9 --1 --3 --14 -+11 -+1 -+11 -+1 -+2 --17 -+4 -+19 -+17 -+6 -+18 --4 -+3 --13 -+7 --3 -+19 -+5 -+2 -+6 -+12 -+5 --7 -+10 -+16 --9 --16 -+11 -+10 -+2 -+7 --16 -+6 -+16 -+17 -+11 -+11 --14 -+11 --16 --13 -+6 -+8 -+10 --4 --5 -+2 -+5 --18 -+19 --11 --5 --5 --5 --16 --5 -+16 -+7 --10 --20 --14 --18 -+13 -+9 --10 -+18 --7 --8 --4 -+13 -+9 -+18 -+20 --10 --14 --22 --21 --10 -+20 --7 --9 -+1 -+11 -+6 -+12 -+14 --5 -+16 -+13 -+8 --2 --13 --2 -+11 -+21 -+9 --5 -+1 -+18 -+6 -+18 --17 -+3 -+7 --2 --3 -+1 -+7 -+17 -+16 -+4 -+13 -+7 -+17 --18 -+17 -+2 -+19 --11 -+2 -+2 -+1 --16 --19 --4 --17 --8 --5 -+12 --8 -+19 -+3 -+17 -+3 -+3 -+8 -+3 --13 -+12 --7 -+9 -+16 -+15 -+3 --6 --10 -+14 --13 --8 -+4 -+12 -+19 -+17 -+18 --12 --11 -+7 --1 --7 --28 --19 --6 -+2 -+15 -+3 --12 --15 -+5 --15 --8 --16 --17 -+8 --7 -+3 -+6 --18 -+10 --17 --9 --13 -+20 --13 --12 --12 -+9 --2 -+6 --10 --1 -+14 --18 --14 -+2 -+25 --16 --17 -+19 -+8 -+14 --15 --17 -+40 -+21 --19 -+4 -+3 --2 -+9 --2 --3 -+15 --9 --18 -+9 -+7 -+27 -+3 -+8 -+6 -+2 --13 -+4 --16 -+26 --15 --8 --16 -+17 --18 -+33 -+9 -+68 -+8 -+20 --9 --8 -+28 -+15 -+15 -+9 -+12 -+20 -+5 -+16 -+22 --5 -+8 -+14 -+6 -+6 -+10 -+10 -+7 --13 --8 -+10 -+9 -+13 --15 --15 -+13 -+8 -+5 -+25 --10 -+21 -+16 -+10 --16 -+1 --57 -+13 --20 --30 -+2 -+7 -+15 --18 --28 --13 -+1 --9 --6 --2 --13 -+11 --4 --1 --9 --13 --13 -+12 --14 -+12 --13 --7 --2 --15 --2 -+3 -+32 -+13 -+12 --4 --19 --5 -+22 --29 --24 --25 --6 --12 --9 -+3 --15 -+3 --5 -+20 --10 --34 --77 --9 --9 --23 --6 -+8 -+9 -+47 --82 --21 -+38 --61 -+11 --65 --37 --22 -+2 -+12 --26 --20 --4 -+6 --7 -+14 -+6 -+11 -+19 --32 -+10 --74 -+9 --64 --59 --92 --10 --92 --18 --23 --64754 --2 --16 --6 --19 -+6 --12 --10 -+14 -+9 -+11 -+12 -+15 -+2 --14 --11 -+13 --1 --18 --3 -+19 -+16 -+12 -+14 --19 --11 -+9 --7 -+13 -+20 --1 -+2 -+13 -+10 -+15 -+15 -+13 --15 --7 --10 -+9 -+2 -+7 -+18 --9 -+6 --8 -+4 -+18 --17 -+12 -+14 -+14 --15 --12 --17 -+18 --16 -+6 --13 --23 --5 -+9 --10 --16 --19 -+1 -+12 --18 --9 --1 -+5 --9 -+11 -+1 -+1 -+17 --20 -+5 --17 --13 --9 --18 --11 --19 --13 -+11 --4 -+19 --5 -+9 -+18 -+8 --12 --10 --14 -+17 -+20 -+12 -+15 --22 --12 -+9 --5 --19 -+18 -+19 --8 --23 --18 --1 --4 --16 -+1 --16 -+19 --11 --19 --8 --15 --12 --4 --15 -+10 -+3 -+15 --19 -+11 -+5 -+8 --19 -+3 --18 -+4 --8 -+1 -+5 --13 --20 -+7 --8 --2 -+16 -+13 --8 --12 -+2 -+3 -+13 --9 -+15 -+9 --16 --1 --21 -+8 --17 --6 --2 --18 --10 --6 --13 --19 --1 -+10 --3 --9 --9 -+8 -+2 -+17 --3 -+5 --6 --17 -+13 -+16 --10 -+3 -+12 -+15 --13 --12 --23 -+10 -+16 -+3 --14 --6 --14 -+11 -+13 -+20 -+8 --15 -+19 --10 -+1 --6 -+14 -+13 -+7 --15 --1 --5 --3 --19 -+4 -+7 --13 --12 --19 -+4 --2 --15 --1 -+10 --13 --1 --10 -+7 -+11 --1 --9 -+14 --9 --15 -+14 --7 --15 --16 --14 -+12 --5 --5 -+11 --5 -+7 -+18 --1 --14 --14 --1 --12 -+1 -+1 -+6 -+18 --11 --12 --14 --2 -+1 --3 --20 --8 --8 --3 -+17 -+7 -+4 -+21 -+19 --10 -+6 -+20 -+16 --17 -+7 --11 -+7 -+8 --2 -+20 --14 -+21 -+4 -+3 -+3 --7 -+23 --17 --24 -+5 -+15 --27 --10 --2 --12 --23 -+2 --25 --11 -+19 --30 --17 --15 -+2 -+16 -+8 -+10 -+1 --15 --10 -+9 --18 --17 -+23 --15 -+17 -+6 --19 -+15 --7 -+2 --15 -+21 --24 --15 --4 -+14 -+2 -+18 -+34 -+6 -+8 --19 --6 --12 -+3 --15 --12 --37 -+2 -+9 --22 --31 --5 -+1 --16 -+19 -+10 --19 --22 --14 --6 --18 -+10 --6 -+17 -+18 --19 --15 -+3 --16 -+20 -+10 --19 -+10 --6 -+20 -+19 -+11 --17 -+13 --20 --4 -+20 --18 --12 --8 --18 --18 -+6 --2 -+5 --17 --7 --12 --5 --9 -+11 --9 --11 --12 --4 --4 --1 --2 -+14 --13 -+17 --12 --19 -+23 -+12 --5 -+16 -+15 --9 --12 --11 --17 --17 --6 -+22 -+21 -+12 -+19 -+13 -+22 -+19 --11 -+2 --7 -+8 --12 --18 -+6 --5 --13 --34 --11 --1 --4 -+20 -+63 --4 --14 --24 --20 --31 --90 --8 --9 --21 --16 -+27 --19 --9 --183 --3 --10 --16 -+9 --10 -+11 -+11 -+19 -+32 --2 --3 --81 -+12 -+16 -+5 --1 -+17 --28 -+32 -+22 -+39 --115 --2 -+183 -+108 -+1 --19 -+14 -+3 -+39 --10 -+33 -+14 --161 --885 --63592 --9 --10 -+3 --4 --4 -+19 -+16 -+20 -+14 --3 --18 --10 --5 --7 -+17 --16 -+5 --4 --18 -+10 -+1 -+18 -+1 -+2 --19 --6 --19 --12 --13 --4 -+20 --7 -+2 --4 -+15 --21 --4 --16 --5 -+17 --10 -+9 --5 -+18 -+21 --6 -+9 --19 --6 -+17 --2 --5 -+24 -+130793 diff --git a/day-01-part-01/src/main.rs b/day-01-part-01/src/main.rs deleted file mode 100644 index ed3d1cf..0000000 --- a/day-01-part-01/src/main.rs +++ /dev/null @@ -1,26 +0,0 @@ -use std::io; -use std::io::prelude::*; -use std::fs::File; - -fn main() -> io::Result<()> { - let input_file = try!(File::open("src/input")); - let file = io::BufReader::new(&input_file); - let mut total = 0; - - for line in file.lines() { - let chars: Vec = line.unwrap().chars().collect(); - - let n_str: String = chars[1..chars.len()].iter().collect(); - let n: i32 = n_str.parse::().unwrap(); - - match chars[0].to_string().as_str() { - "+" => total += n, - "-" => total -= n, - _ => {} - } - } - - println!("total: {}", total); - - Ok(()) -} diff --git a/day_01/Cargo.toml b/day_01/Cargo.toml new file mode 100644 index 0000000..51a47b4 --- /dev/null +++ b/day_01/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "day_01" +version = "0.1.0" +edition = "2018" +authors = ["Dennis Pettersson "] + +[lib] +doctest = false + +[[bin]] +name = "day_01" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/day_01/src/lib.rs b/day_01/src/lib.rs new file mode 100644 index 0000000..4949d40 --- /dev/null +++ b/day_01/src/lib.rs @@ -0,0 +1,27 @@ +pub mod part_01; +pub mod part_02; + +pub type Input = Vec; + +pub fn parse_input(input: &str) -> Input { + input + .lines() + .map(str::trim) + .filter(|string| !string.is_empty()) + .map(str::to_owned) + .collect() +} + +#[cfg(test)] +mod tests { + use super::*; + + const EXAMPLE_DATA: &'static str = " + example + "; + + #[test] + fn it_parses_example() { + assert_eq!(parse_input(&EXAMPLE_DATA), vec!["example"]); + } +} diff --git a/day_01/src/main.rs b/day_01/src/main.rs new file mode 100644 index 0000000..879aa49 --- /dev/null +++ b/day_01/src/main.rs @@ -0,0 +1,12 @@ +use std::io::Result; + +use day_01::{parse_input, part_01::main as part_01, part_02::main as part_02}; + +fn main() -> Result<()> { + let input = parse_input(include_str!("../../input/day_01")); + + println!("part_01: {:?}", part_01(&input)?); + println!("part_02: {:?}", part_02(&input)?); + + Ok(()) +} diff --git a/day_01/src/part_01.rs b/day_01/src/part_01.rs new file mode 100644 index 0000000..dd3d5a5 --- /dev/null +++ b/day_01/src/part_01.rs @@ -0,0 +1,24 @@ +use std::io::Result; + +use crate::Input; + +pub fn main(_input: &Input) -> Result<()> { + Ok(()) +} + +#[cfg(test)] +mod tests { + use crate::parse_input; + + use super::*; + + const EXAMPLE_DATA: &'static str = " + example + "; + + #[test] + fn it_gets_the_example_correct() -> Result<()> { + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, ()); + Ok(()) + } +} diff --git a/day_01/src/part_02.rs b/day_01/src/part_02.rs new file mode 100644 index 0000000..dd3d5a5 --- /dev/null +++ b/day_01/src/part_02.rs @@ -0,0 +1,24 @@ +use std::io::Result; + +use crate::Input; + +pub fn main(_input: &Input) -> Result<()> { + Ok(()) +} + +#[cfg(test)] +mod tests { + use crate::parse_input; + + use super::*; + + const EXAMPLE_DATA: &'static str = " + example + "; + + #[test] + fn it_gets_the_example_correct() -> Result<()> { + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, ()); + Ok(()) + } +} diff --git a/input/day_01 b/input/day_01 new file mode 100644 index 0000000..94adc1c --- /dev/null +++ b/input/day_01 @@ -0,0 +1,2000 @@ +173 +179 +200 +210 +226 +229 +220 +221 +228 +233 +237 +238 +249 +261 +284 +285 +287 +289 +291 +284 +285 +279 +295 +313 +314 +315 +317 +318 +316 +344 +345 +347 +352 +356 +352 +379 +384 +389 +392 +394 +395 +401 +424 +429 +432 +446 +454 +464 +459 +455 +467 +501 +509 +523 +526 +529 +535 +557 +559 +562 +564 +572 +573 +576 +584 +586 +588 +587 +588 +594 +598 +599 +600 +602 +604 +609 +626 +633 +641 +642 +649 +655 +658 +661 +681 +683 +685 +684 +685 +687 +691 +694 +696 +697 +705 +706 +710 +740 +741 +749 +740 +744 +749 +750 +753 +759 +754 +736 +731 +732 +722 +720 +732 +745 +754 +769 +771 +772 +766 +768 +778 +780 +768 +771 +775 +804 +809 +810 +806 +808 +818 +813 +801 +804 +813 +817 +836 +827 +833 +836 +840 +860 +865 +877 +843 +845 +871 +872 +874 +885 +900 +904 +906 +909 +911 +910 +919 +932 +938 +954 +961 +962 +964 +979 +980 +992 +997 +1000 +1012 +1017 +1025 +1027 +1028 +1035 +1036 +1052 +1053 +1057 +1068 +1092 +1093 +1104 +1106 +1107 +1112 +1121 +1123 +1126 +1127 +1126 +1132 +1135 +1136 +1138 +1143 +1146 +1148 +1149 +1154 +1172 +1173 +1174 +1175 +1176 +1182 +1183 +1188 +1194 +1195 +1199 +1204 +1208 +1211 +1210 +1190 +1197 +1209 +1210 +1211 +1221 +1240 +1241 +1240 +1244 +1247 +1245 +1249 +1266 +1272 +1280 +1285 +1305 +1308 +1315 +1325 +1328 +1357 +1362 +1363 +1365 +1368 +1366 +1376 +1359 +1378 +1380 +1381 +1375 +1376 +1374 +1375 +1377 +1379 +1380 +1376 +1377 +1391 +1393 +1399 +1412 +1416 +1420 +1427 +1428 +1432 +1434 +1435 +1436 +1439 +1440 +1464 +1458 +1461 +1465 +1467 +1502 +1503 +1500 +1514 +1516 +1533 +1535 +1536 +1517 +1547 +1531 +1532 +1543 +1544 +1546 +1519 +1521 +1522 +1529 +1510 +1518 +1520 +1511 +1486 +1489 +1501 +1484 +1479 +1481 +1485 +1493 +1497 +1498 +1500 +1505 +1512 +1534 +1535 +1539 +1522 +1523 +1531 +1548 +1549 +1550 +1576 +1586 +1583 +1584 +1585 +1599 +1606 +1607 +1609 +1625 +1638 +1643 +1681 +1680 +1688 +1702 +1703 +1705 +1706 +1717 +1716 +1711 +1708 +1719 +1721 +1716 +1728 +1729 +1739 +1765 +1769 +1778 +1779 +1781 +1785 +1786 +1783 +1786 +1787 +1778 +1776 +1797 +1802 +1808 +1811 +1816 +1819 +1818 +1830 +1837 +1839 +1842 +1843 +1845 +1846 +1854 +1842 +1815 +1816 +1829 +1831 +1836 +1842 +1845 +1868 +1869 +1870 +1877 +1879 +1897 +1896 +1897 +1899 +1909 +1912 +1913 +1920 +1919 +1921 +1902 +1921 +1923 +1928 +1935 +1936 +1941 +1944 +1964 +1962 +1971 +1983 +1985 +1987 +2000 +2002 +2005 +2006 +2026 +2024 +2025 +2027 +2029 +2026 +2028 +2029 +2044 +2043 +2047 +2055 +2056 +2068 +2085 +2086 +2096 +2097 +2108 +2105 +2106 +2103 +2098 +2101 +2102 +2107 +2127 +2128 +2131 +2132 +2123 +2126 +2141 +2160 +2163 +2167 +2171 +2179 +2184 +2187 +2198 +2209 +2218 +2219 +2221 +2236 +2239 +2245 +2249 +2268 +2272 +2269 +2270 +2262 +2261 +2263 +2260 +2263 +2265 +2270 +2285 +2286 +2290 +2272 +2259 +2267 +2268 +2283 +2286 +2289 +2290 +2300 +2304 +2305 +2306 +2294 +2295 +2324 +2331 +2345 +2352 +2356 +2357 +2362 +2369 +2377 +2398 +2405 +2397 +2398 +2391 +2394 +2399 +2400 +2411 +2412 +2415 +2416 +2421 +2417 +2395 +2397 +2404 +2414 +2432 +2405 +2406 +2423 +2425 +2427 +2436 +2442 +2443 +2451 +2450 +2451 +2479 +2484 +2491 +2494 +2491 +2480 +2485 +2486 +2487 +2497 +2499 +2526 +2525 +2526 +2528 +2526 +2528 +2532 +2536 +2563 +2566 +2580 +2584 +2595 +2603 +2615 +2620 +2627 +2641 +2645 +2643 +2659 +2664 +2665 +2669 +2671 +2678 +2687 +2688 +2713 +2717 +2729 +2732 +2733 +2732 +2734 +2735 +2737 +2718 +2719 +2720 +2727 +2736 +2738 +2740 +2749 +2743 +2785 +2799 +2800 +2821 +2828 +2829 +2832 +2834 +2852 +2853 +2850 +2863 +2866 +2867 +2865 +2860 +2861 +2869 +2862 +2864 +2862 +2868 +2873 +2881 +2887 +2888 +2891 +2898 +2892 +2901 +2903 +2901 +2906 +2910 +2911 +2922 +2919 +2918 +2912 +2910 +2924 +2921 +2923 +2924 +2931 +2945 +2946 +2918 +2946 +2947 +2951 +2937 +2938 +2940 +2941 +2945 +2960 +2965 +2964 +2965 +2966 +2967 +2979 +3000 +3006 +3008 +3010 +3003 +3009 +3003 +3012 +3026 +3032 +3036 +3041 +3046 +3058 +3059 +3070 +3059 +3056 +3060 +3070 +3078 +3084 +3085 +3089 +3092 +3095 +3078 +3113 +3107 +3109 +3121 +3129 +3118 +3128 +3130 +3131 +3132 +3133 +3132 +3128 +3130 +3149 +3159 +3162 +3172 +3180 +3195 +3196 +3197 +3209 +3214 +3216 +3217 +3218 +3221 +3234 +3236 +3238 +3246 +3212 +3205 +3214 +3243 +3245 +3250 +3252 +3268 +3271 +3270 +3258 +3253 +3264 +3273 +3281 +3282 +3288 +3291 +3300 +3310 +3312 +3331 +3329 +3330 +3331 +3344 +3366 +3367 +3381 +3385 +3386 +3395 +3396 +3397 +3433 +3422 +3433 +3426 +3421 +3422 +3427 +3433 +3439 +3443 +3445 +3442 +3447 +3446 +3449 +3458 +3470 +3473 +3479 +3478 +3480 +3482 +3484 +3495 +3494 +3492 +3499 +3491 +3495 +3506 +3512 +3518 +3523 +3538 +3546 +3554 +3559 +3565 +3580 +3583 +3584 +3591 +3592 +3607 +3609 +3633 +3636 +3634 +3637 +3638 +3642 +3643 +3652 +3653 +3655 +3657 +3656 +3657 +3656 +3677 +3678 +3716 +3727 +3730 +3751 +3752 +3776 +3778 +3775 +3779 +3782 +3783 +3817 +3819 +3822 +3824 +3826 +3841 +3842 +3843 +3864 +3868 +3875 +3880 +3896 +3898 +3899 +3900 +3901 +3907 +3914 +3904 +3908 +3917 +3918 +3919 +3926 +3939 +3945 +3938 +3956 +3967 +3968 +3972 +3975 +3974 +3975 +3976 +3981 +3982 +3983 +3977 +3982 +3987 +3995 +4012 +4025 +4021 +4046 +4048 +4053 +4069 +4078 +4083 +4081 +4080 +4082 +4091 +4099 +4100 +4097 +4109 +4112 +4126 +4127 +4128 +4129 +4130 +4133 +4132 +4136 +4156 +4160 +4161 +4159 +4160 +4161 +4178 +4180 +4197 +4195 +4197 +4199 +4201 +4200 +4196 +4219 +4220 +4221 +4205 +4219 +4224 +4257 +4262 +4263 +4266 +4267 +4266 +4271 +4272 +4273 +4285 +4286 +4285 +4266 +4242 +4248 +4270 +4271 +4293 +4309 +4314 +4340 +4343 +4348 +4347 +4348 +4351 +4352 +4364 +4365 +4388 +4390 +4417 +4410 +4426 +4431 +4429 +4434 +4424 +4432 +4421 +4440 +4441 +4428 +4438 +4456 +4457 +4460 +4468 +4471 +4473 +4490 +4477 +4478 +4486 +4475 +4487 +4490 +4497 +4524 +4533 +4537 +4541 +4545 +4548 +4552 +4556 +4558 +4571 +4573 +4578 +4580 +4581 +4542 +4545 +4548 +4549 +4536 +4551 +4557 +4556 +4547 +4548 +4567 +4552 +4554 +4552 +4576 +4577 +4603 +4616 +4633 +4634 +4639 +4642 +4651 +4656 +4657 +4659 +4663 +4667 +4673 +4695 +4712 +4713 +4720 +4718 +4721 +4737 +4743 +4746 +4778 +4779 +4793 +4768 +4773 +4776 +4778 +4796 +4798 +4800 +4802 +4803 +4822 +4823 +4831 +4836 +4831 +4833 +4840 +4842 +4847 +4868 +4870 +4869 +4875 +4876 +4879 +4881 +4891 +4892 +4909 +4903 +4901 +4902 +4930 +4933 +4932 +4933 +4936 +4937 +4943 +4945 +4948 +4949 +4943 +4963 +4956 +4967 +4969 +4961 +4966 +4970 +4974 +4961 +4964 +4952 +4953 +4981 +4984 +4966 +4970 +4971 +4975 +4966 +4968 +4966 +4968 +4974 +4971 +4988 +4989 +4995 +4996 +5001 +5004 +5005 +5008 +5016 +5018 +5007 +5010 +5011 +5024 +5027 +5032 +5037 +5033 +5034 +5045 +5071 +5068 +5069 +5070 +5088 +5086 +5088 +5114 +5133 +5144 +5145 +5152 +5161 +5154 +5155 +5156 +5159 +5170 +5176 +5189 +5190 +5200 +5204 +5205 +5206 +5221 +5222 +5223 +5224 +5217 +5218 +5219 +5225 +5203 +5210 +5212 +5213 +5215 +5214 +5215 +5221 +5222 +5233 +5242 +5256 +5258 +5256 +5281 +5286 +5315 +5336 +5337 +5345 +5348 +5341 +5336 +5341 +5344 +5350 +5341 +5342 +5337 +5339 +5346 +5347 +5364 +5366 +5368 +5361 +5362 +5365 +5358 +5370 +5376 +5377 +5380 +5381 +5382 +5383 +5388 +5396 +5405 +5396 +5410 +5431 +5432 +5436 +5447 +5456 +5457 +5462 +5475 +5476 +5490 +5493 +5503 +5504 +5512 +5513 +5527 +5542 +5546 +5545 +5547 +5555 +5558 +5577 +5613 +5614 +5620 +5623 +5636 +5651 +5660 +5665 +5668 +5672 +5676 +5687 +5712 +5707 +5708 +5709 +5711 +5712 +5714 +5715 +5717 +5727 +5731 +5746 +5754 +5755 +5758 +5759 +5770 +5775 +5799 +5789 +5794 +5800 +5802 +5813 +5808 +5812 +5832 +5830 +5839 +5842 +5825 +5830 +5835 +5836 +5847 +5851 +5849 +5855 +5816 +5818 +5829 +5830 +5829 +5830 +5858 +5859 +5860 +5862 +5867 +5868 +5863 +5864 +5869 +5872 +5878 +5885 +5888 +5890 +5884 +5875 +5876 +5880 +5886 +5889 +5890 +5892 +5895 +5896 +5895 +5896 +5897 +5895 +5907 +5906 +5908 +5897 +5900 +5913 +5915 +5914 +5917 +5915 +5916 +5920 +5923 +5929 +5931 +5936 +5944 +5929 +5932 +5934 +5945 +5948 +5949 +5951 +5957 +5967 +5968 +5969 +5974 +5975 +5982 +5983 +5990 +5994 +5989 +5993 +5996 +5986 +5987 +5990 +5991 +5993 +5995 +5998 +5999 +5990 +5994 +5996 +6010 +6016 +6032 +6039 +6041 +6044 +6057 +6058 +6059 +6060 +6061 +6063 +6064 +6067 +6073 +6074 +6075 +6070 +6071 +6076 +6077 +6071 +6083 +6088 +6096 +6095 +6100 +6101 +6106 +6109 +6111 +6112 +6121 +6143 +6151 +6175 +6179 +6174 +6175 +6185 +6186 +6184 +6195 +6196 +6197 +6188 +6195 +6196 +6197 +6198 +6204 +6209 +6222 +6233 +6231 +6222 +6223 +6224 +6233 +6235 +6239 +6229 +6259 +6286 +6295 +6269 +6273 +6274 +6265 +6266 +6264 +6259 +6260 +6265 +6268 +6280 +6281 +6283 +6277 +6279 +6311 +6340 +6342 +6345 +6353 +6375 +6399 +6425 +6423 +6428 +6448 +6449 +6456 +6460 +6465 +6470 +6477 +6493 +6494 +6499 +6521 +6522 +6524 +6525 +6536 +6537 +6538 +6526 +6550 +6551 +6552 +6559 +6561 +6563 +6564 +6584 +6585 +6588 +6600 +6610 +6612 +6616 +6619 +6639 +6644 +6646 +6647 +6644 +6629 +6635 +6646 +6648 +6659 +6662 +6641 +6637 +6626 +6627 +6630 +6632 +6643 +6644 +6645 +6656 +6658 +6663 +6680 +6675 +6678 +6681 +6682 +6680 +6692 +6702 +6707 +6708 +6709 +6717 +6719 +6733 +6734 +6730 +6751 +6757 +6766 +6770 +6810 +6812 +6816 +6810 +6817 +6821 +6823 +6828 +6844 +6838 +6841 +6846 +6843 +6844 +6848 +6851 +6853 +6868 +6870 +6884 +6886 +6896 +6886 +6887 +6891 +6896 +6905 +6902 +6903 +6902 +6911 +6951 +6955 +6958 +6940 +6943 +6945 +6946 +6945 +6943 +6944 +6949 +6950 +6952 +6953 +6958 +6962 +6970 +6974 +6977 +7018 +7023 +7027 +7029 +7031 +7033 +7035 +7057 +7058 +7060 +7071 +7072 +7087 +7102 +7111 +7138 +7118 +7136 +7142 +7143 +7162 +7163 +7166 +7153 +7152 +7151 +7154 +7156 +7178 +7177 +7184 +7188 +7193 +7198 +7205 +7217 +7248 +7247 +7249 +7251 +7253 +7254 +7255 +7263 +7265 +7280 +7287 +7315 +7323 +7332 +7333 +7323 +7324 +7332 +7334 +7338 +7339 +7341 +7347 +7346 +7347 +7365 +7370 +7372 +7373 +7374 +7376 +7381 +7383 +7401 +7402 +7421 +7433 +7438 +7439 +7440 +7476 +7484 +7504 +7510 +7526 +7527 +7531 +7532 +7539 +7542 +7553 +7555 +7560 +7558 +7560 +7562 +7578 +7581 +7587 +7599 +7600 +7616 +7627 +7645 +7658 +7659 +7646 +7648 +7652 +7650 +7651 +7667 +7671 +7675 +7682 +7683 +7684 +7687 +7686 +7688 +7699 +7710 +7699 +7698 +7699 +7706 +7724 +7725 +7740 +7741 +7740 +7741 +7747 +7742 +7749 +7758 +7769 +7770 +7785 +7793 +7794 +7797 +7805 +7806 +7826 +7827 +7828 +7826 +7827 +7837 +7843 +7852 +7867 +7874 +7881 +7875 +7874 +7873 +7887 +7890 +7919 +7918 +7926 +7935 +7936 +7935 +7941 +7942 +7940 +7949 +7958 +7960 +7963 +7961 +7963 +7965 +7960 +7983 +7980 +7984 +7986 +7988 +8000 +8009 +8014 +8013 +8014 +8015 +8022 +8023 +8020 +8035 +8046 +8053 +8050 +8046 +8057 +8056 +8085 +8086 +8087 +8088 +8092 +8094 +8095 +8094 +8096 +8099 +8128 +8159 +8167 +8185 +8200 +8212 +8214 +8219 +8246 +8248 +8261 +8262 +8242 +8236 +8237 +8247 +8243 +8242 +8244 +8256 +8268 +8270 +8311 +8323 +8324 +8325 +8327 +8349 +8347 +8348 +8347 +8353 +8366 +8384 +8386 +8389 +8404 +8405 +8408 +8411 +8415 +8428 +8437 +8423 +8427 +8455 +8463 +8466 +8470 +8471 +8475 +8476 +8479 +8484 +8483 +8486 +8485 +8498 +8502 +8503 +8507 +8517 +8518 +8531 +8532 +8545 +8548 +8561 +8569 +8573 +8575 +8580 +8581 +8585 +8589 +8598 +8604 +8630 +8628 +8625 +8620 +8625 +8626 +8627 +8620 +8631 +8643 +8645 +8669 +8673 +8674 +8679 +8687 +8698 +8731 +8738 +8746 +8785 +8760 +8764 +8760 +8761 +8767 +8768 +8769 +8771 +8773 +8768 +8766 +8767 +8785 +8789 +8790 +8802 +8801 +8802 +8809 +8820 +8823 +8824 +8829 +8830 +8836 +8835 +8834 +8828 +8829 +8833 +8844 +8852 +8857 +8863 +8862 +8863 +8853 +8858 +8859 +8860 +8845 +8844 +8823 +8822 +8850 +8851 +8852 +8863 +8879 +8881 +8882 +8889 +8892 +8894 +8910 +8908 +8912 +8933 +8932 +8911 +8906 +8908 +8909 +8919 +8920 +8921 +8933 +8935 +8945 +8947 +8948 +8951 +8961 +8962 +8972 +8989 +8990 +8999 +9000 +9018 +9028 +9029 +9035 +9031 +9043 +9044 +9049 +9078 +9074 +9078 +9081 +9074 +9077 +9071 +9054 +9055 +9060 +9062 +9065 +9094 +9099 +9108 +9125 +9136 +9137 +9143 +9147 +9150 +9162 +9166 +9170 +9171 +9174 +9188 +9198 +9204 +9207 +9217 +9230 +9243 +9256 +9264 +9273 +9275 +9286 +9293 +9299 +9300 +9317 +9320 +9324 +9348 +9351 +9356 +9372 +9380 From 671a8199893b6431f34a8e2af2de1acd682e2949 Mon Sep 17 00:00:00 2001 From: Dennis Pettersson Date: Wed, 1 Dec 2021 08:56:26 +0100 Subject: [PATCH 03/11] feat(day_01): completed part 1 --- README.md | 2 +- day_01/src/lib.rs | 10 ++++++---- day_01/src/part_01.rs | 30 ++++++++++++++++++++++++++---- day_01/src/part_02.rs | 17 +++++++++++++---- 4 files changed, 46 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index e6a5fe7..1992f7a 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Progress: -- [Day 1](https://github.com/ankjevel/adventofcode/tree/2021/day_01) +- [Day 1](https://github.com/ankjevel/adventofcode/tree/2021/day_01) 🌟 - [Day 2](#) - [Day 3](#) - [Day 4](#) diff --git a/day_01/src/lib.rs b/day_01/src/lib.rs index 4949d40..bdc838a 100644 --- a/day_01/src/lib.rs +++ b/day_01/src/lib.rs @@ -1,14 +1,14 @@ pub mod part_01; pub mod part_02; -pub type Input = Vec; +pub type Input = Vec; pub fn parse_input(input: &str) -> Input { input .lines() .map(str::trim) .filter(|string| !string.is_empty()) - .map(str::to_owned) + .map(|src| u32::from_str_radix(src, 10).unwrap_or(0)) .collect() } @@ -17,11 +17,13 @@ mod tests { use super::*; const EXAMPLE_DATA: &'static str = " - example + 199 + 200 + 208 "; #[test] fn it_parses_example() { - assert_eq!(parse_input(&EXAMPLE_DATA), vec!["example"]); + assert_eq!(parse_input(&EXAMPLE_DATA), vec![199, 200, 208]); } } diff --git a/day_01/src/part_01.rs b/day_01/src/part_01.rs index dd3d5a5..f6b25a3 100644 --- a/day_01/src/part_01.rs +++ b/day_01/src/part_01.rs @@ -2,8 +2,21 @@ use std::io::Result; use crate::Input; -pub fn main(_input: &Input) -> Result<()> { - Ok(()) +pub fn main(input: &Input) -> Result { + let mut last = None; + let mut measurement_increases = 0; + for value in input { + match last { + Some(pre_value) => { + if &pre_value < value { + measurement_increases += 1; + } + } + _ => {} + } + last = Some(value.to_owned()); + } + Ok(measurement_increases) } #[cfg(test)] @@ -13,12 +26,21 @@ mod tests { use super::*; const EXAMPLE_DATA: &'static str = " - example + 199 + 200 + 208 + 210 + 200 + 207 + 240 + 269 + 260 + 263 "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, ()); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 7); Ok(()) } } diff --git a/day_01/src/part_02.rs b/day_01/src/part_02.rs index dd3d5a5..7629ab6 100644 --- a/day_01/src/part_02.rs +++ b/day_01/src/part_02.rs @@ -2,8 +2,8 @@ use std::io::Result; use crate::Input; -pub fn main(_input: &Input) -> Result<()> { - Ok(()) +pub fn main(_input: &Input) -> Result { + Ok(0) } #[cfg(test)] @@ -13,12 +13,21 @@ mod tests { use super::*; const EXAMPLE_DATA: &'static str = " - example + 199 + 200 + 208 + 210 + 200 + 207 + 240 + 269 + 260 + 263 "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, ()); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 5); Ok(()) } } From caa6e6aa357f5d07926ccfb09f168178c773945c Mon Sep 17 00:00:00 2001 From: Dennis Pettersson Date: Wed, 1 Dec 2021 17:25:18 +0100 Subject: [PATCH 04/11] feat(day_01): completed part 2 --- README.md | 2 +- day_01/src/part_02.rs | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1992f7a..a24d468 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Progress: -- [Day 1](https://github.com/ankjevel/adventofcode/tree/2021/day_01) 🌟 +- [Day 1](https://github.com/ankjevel/adventofcode/tree/2021/day_01) 🌟 🌟 - [Day 2](#) - [Day 3](#) - [Day 4](#) diff --git a/day_01/src/part_02.rs b/day_01/src/part_02.rs index 7629ab6..73f3419 100644 --- a/day_01/src/part_02.rs +++ b/day_01/src/part_02.rs @@ -2,8 +2,27 @@ use std::io::Result; use crate::Input; -pub fn main(_input: &Input) -> Result { - Ok(0) +pub fn main(input: &Input) -> Result { + let mut last = None; + let mut measurement_increases = 0; + for value in input.windows(3) { + let window = value + .into_iter() + .map(u32::to_owned) + .reduce(|a, b| a + b) + .unwrap_or(0); + + match last { + Some(pre_value) => { + if pre_value < window { + measurement_increases += 1; + } + } + _ => {} + } + last = Some(window.to_owned()); + } + Ok(measurement_increases) } #[cfg(test)] From 4096e4540a9babef88f8347bfc148643f944b474 Mon Sep 17 00:00:00 2001 From: Dennis Pettersson Date: Thu, 2 Dec 2021 09:21:43 +0100 Subject: [PATCH 05/11] feat(day_02): completed part 1 --- README.md | 2 +- day_02/Cargo.toml | 15 + day_02/src/lib.rs | 49 ++ day_02/src/main.rs | 12 + day_02/src/part_01.rs | 37 ++ day_02/src/part_02.rs | 24 + input/day_02 | 1000 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 1138 insertions(+), 1 deletion(-) create mode 100644 day_02/Cargo.toml create mode 100644 day_02/src/lib.rs create mode 100644 day_02/src/main.rs create mode 100644 day_02/src/part_01.rs create mode 100644 day_02/src/part_02.rs create mode 100644 input/day_02 diff --git a/README.md b/README.md index a24d468..2444ecb 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ## Progress: - [Day 1](https://github.com/ankjevel/adventofcode/tree/2021/day_01) 🌟 🌟 -- [Day 2](#) +- [Day 2](https://github.com/ankjevel/adventofcode/tree/2021/day_02) 🌟 - [Day 3](#) - [Day 4](#) - [Day 5](#) diff --git a/day_02/Cargo.toml b/day_02/Cargo.toml new file mode 100644 index 0000000..38e36fb --- /dev/null +++ b/day_02/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "day_02" +version = "0.1.0" +edition = "2018" +authors = ["Dennis Pettersson "] + +[lib] +doctest = false + +[[bin]] +name = "day_02" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/day_02/src/lib.rs b/day_02/src/lib.rs new file mode 100644 index 0000000..98e19bf --- /dev/null +++ b/day_02/src/lib.rs @@ -0,0 +1,49 @@ +pub mod part_01; +pub mod part_02; + +#[derive(Debug, Hash, Eq, PartialEq, Clone, Copy)] +pub enum Command { + Up(i32), + Down(i32), + Forward(i32), +} + +pub type Input = Vec; + +pub fn parse_input(input: &str) -> Input { + input + .lines() + .map(str::trim) + .filter(|string| !string.is_empty()) + .map(str::to_owned) + .map(|string| { + let split = string.split_whitespace().collect::>(); + let units = i32::from_str_radix(split[1], 10).unwrap_or(0); + match split[0] { + "forward" => Command::Forward(units), + "down" => Command::Down(units), + "up" => Command::Up(units), + _ => panic!("unknown command"), + } + }) + .collect() +} + +#[cfg(test)] +mod tests { + use super::*; + + const EXAMPLE_DATA: &'static str = " + forward 5 + down 5 + up 2 + "; + + #[test] + fn it_parses_example() { + assert_eq!( + parse_input(&EXAMPLE_DATA), + vec![Command::Forward(5), Command::Down(5), Command::Up(2)] + ); + } +} diff --git a/day_02/src/main.rs b/day_02/src/main.rs new file mode 100644 index 0000000..a41bdc7 --- /dev/null +++ b/day_02/src/main.rs @@ -0,0 +1,12 @@ +use std::io::Result; + +use day_02::{parse_input, part_01::main as part_01, part_02::main as part_02}; + +fn main() -> Result<()> { + let input = parse_input(include_str!("../../input/day_02")); + + println!("part_01: {:?}", part_01(&input)?); + println!("part_02: {:?}", part_02(&input)?); + + Ok(()) +} diff --git a/day_02/src/part_01.rs b/day_02/src/part_01.rs new file mode 100644 index 0000000..ea1907f --- /dev/null +++ b/day_02/src/part_01.rs @@ -0,0 +1,37 @@ +use std::io::Result; + +use crate::{Command::*, Input}; + +pub fn main(input: &Input) -> Result { + let (mut x, mut y) = (0, 0); + for command in input { + match command { + Forward(units) => x += units, + Up(units) => y -= units, + Down(units) => y += units, + } + } + Ok(y * x) +} + +#[cfg(test)] +mod tests { + use crate::parse_input; + + use super::*; + + const EXAMPLE_DATA: &'static str = " + forward 5 + down 5 + forward 8 + up 3 + down 8 + forward 2 + "; + + #[test] + fn it_gets_the_example_correct() -> Result<()> { + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 150); + Ok(()) + } +} diff --git a/day_02/src/part_02.rs b/day_02/src/part_02.rs new file mode 100644 index 0000000..dd3d5a5 --- /dev/null +++ b/day_02/src/part_02.rs @@ -0,0 +1,24 @@ +use std::io::Result; + +use crate::Input; + +pub fn main(_input: &Input) -> Result<()> { + Ok(()) +} + +#[cfg(test)] +mod tests { + use crate::parse_input; + + use super::*; + + const EXAMPLE_DATA: &'static str = " + example + "; + + #[test] + fn it_gets_the_example_correct() -> Result<()> { + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, ()); + Ok(()) + } +} diff --git a/input/day_02 b/input/day_02 new file mode 100644 index 0000000..2efbeb6 --- /dev/null +++ b/input/day_02 @@ -0,0 +1,1000 @@ +forward 9 +down 9 +down 6 +up 2 +down 5 +forward 3 +forward 6 +forward 8 +down 8 +up 4 +down 5 +down 4 +up 6 +down 7 +forward 5 +forward 5 +down 9 +down 5 +up 4 +forward 1 +forward 7 +down 8 +up 2 +down 1 +down 3 +up 7 +up 5 +down 8 +down 6 +forward 9 +up 8 +down 4 +forward 9 +forward 4 +forward 1 +up 9 +forward 5 +forward 1 +down 2 +down 7 +forward 5 +up 8 +forward 1 +down 9 +down 3 +forward 6 +up 6 +down 4 +forward 6 +down 3 +forward 5 +forward 1 +down 3 +forward 3 +down 8 +down 2 +forward 8 +forward 1 +up 4 +forward 4 +down 1 +down 5 +forward 2 +forward 9 +forward 5 +down 2 +up 9 +forward 2 +down 2 +down 2 +down 9 +up 8 +down 3 +forward 8 +down 4 +up 3 +down 1 +forward 7 +down 7 +forward 9 +down 2 +up 9 +up 3 +down 2 +up 2 +forward 8 +down 3 +forward 2 +forward 6 +down 5 +up 9 +forward 6 +forward 7 +down 3 +forward 1 +down 2 +forward 8 +up 5 +down 6 +forward 1 +down 8 +down 5 +forward 4 +down 5 +forward 3 +forward 5 +up 3 +down 4 +down 8 +up 7 +down 7 +forward 3 +down 2 +forward 3 +up 2 +down 1 +up 2 +forward 4 +forward 2 +down 1 +up 9 +forward 5 +forward 7 +down 6 +down 3 +down 5 +down 4 +up 4 +forward 8 +down 6 +forward 1 +forward 6 +down 8 +down 2 +down 3 +up 8 +forward 9 +down 5 +down 6 +forward 7 +down 2 +forward 6 +up 3 +up 6 +forward 2 +up 8 +up 2 +up 4 +forward 3 +forward 4 +down 7 +up 1 +forward 5 +forward 1 +forward 9 +forward 8 +up 6 +forward 4 +forward 2 +up 9 +forward 8 +down 2 +forward 4 +forward 4 +forward 6 +down 3 +forward 8 +forward 7 +forward 6 +forward 3 +down 5 +down 3 +forward 4 +forward 7 +forward 4 +forward 3 +forward 1 +forward 1 +up 1 +down 4 +up 5 +up 4 +up 8 +forward 7 +forward 4 +forward 3 +up 6 +up 4 +down 4 +up 4 +down 6 +forward 1 +forward 5 +up 3 +forward 5 +up 9 +down 9 +forward 1 +down 3 +forward 7 +up 2 +up 1 +down 8 +forward 9 +forward 3 +forward 2 +forward 6 +down 2 +forward 4 +up 9 +forward 6 +forward 8 +down 5 +down 6 +forward 7 +forward 5 +forward 6 +forward 9 +forward 5 +up 3 +forward 2 +forward 2 +forward 8 +down 5 +forward 9 +forward 7 +forward 5 +up 2 +up 7 +forward 7 +forward 9 +down 9 +up 5 +up 5 +up 1 +forward 8 +forward 3 +forward 2 +forward 4 +down 7 +down 7 +forward 7 +down 2 +forward 4 +down 6 +down 8 +down 5 +down 9 +forward 1 +forward 4 +forward 1 +forward 1 +up 5 +down 5 +up 7 +up 7 +down 6 +down 5 +forward 9 +up 7 +down 2 +down 9 +down 9 +forward 3 +up 9 +down 7 +down 2 +up 6 +down 9 +down 6 +up 3 +up 6 +forward 4 +forward 6 +down 2 +up 3 +down 3 +forward 8 +up 1 +forward 8 +forward 5 +forward 4 +forward 9 +forward 8 +up 1 +forward 2 +down 8 +up 9 +forward 3 +forward 9 +down 3 +down 8 +down 5 +up 5 +up 3 +down 5 +down 4 +down 2 +forward 1 +forward 8 +down 3 +down 1 +down 5 +down 1 +up 1 +down 4 +forward 6 +down 5 +down 7 +forward 4 +down 2 +down 2 +up 1 +forward 9 +down 2 +forward 7 +up 4 +down 8 +down 5 +up 2 +down 7 +forward 7 +up 4 +down 8 +forward 9 +up 3 +down 9 +forward 4 +forward 5 +up 6 +forward 5 +down 6 +down 3 +down 1 +down 6 +forward 7 +forward 3 +forward 4 +up 8 +forward 7 +down 3 +up 2 +up 3 +up 5 +forward 4 +forward 9 +forward 1 +down 2 +forward 4 +forward 1 +forward 6 +down 6 +forward 8 +down 2 +forward 7 +down 5 +forward 6 +down 4 +down 8 +down 6 +forward 9 +forward 2 +forward 4 +forward 9 +down 1 +down 9 +forward 2 +down 3 +forward 2 +down 4 +down 6 +up 5 +forward 9 +forward 1 +down 1 +forward 8 +forward 7 +forward 2 +forward 4 +forward 3 +up 8 +down 4 +forward 5 +up 5 +forward 4 +up 5 +forward 7 +up 7 +forward 5 +down 3 +up 9 +up 2 +forward 9 +forward 8 +forward 7 +down 8 +forward 8 +down 2 +forward 7 +forward 4 +down 7 +up 4 +forward 2 +forward 1 +up 5 +forward 5 +down 5 +down 1 +down 7 +up 6 +down 5 +down 6 +forward 2 +forward 2 +forward 8 +down 9 +down 4 +down 3 +forward 7 +forward 6 +forward 5 +up 9 +forward 8 +forward 9 +forward 4 +down 9 +down 6 +down 2 +down 7 +up 3 +forward 3 +forward 5 +up 6 +down 7 +down 3 +forward 3 +down 5 +down 2 +down 4 +up 4 +down 5 +forward 3 +forward 1 +forward 7 +down 7 +forward 8 +up 7 +forward 3 +forward 8 +down 9 +down 1 +forward 4 +forward 4 +forward 5 +forward 6 +down 5 +down 6 +forward 6 +down 5 +down 7 +forward 2 +down 1 +down 8 +down 3 +down 4 +forward 9 +forward 4 +down 4 +up 4 +down 3 +forward 5 +down 4 +forward 3 +forward 9 +up 7 +down 5 +down 1 +forward 8 +down 2 +forward 9 +forward 6 +forward 3 +down 7 +forward 2 +forward 5 +down 6 +forward 1 +forward 7 +up 1 +forward 3 +forward 7 +forward 3 +forward 5 +down 5 +forward 6 +forward 9 +up 4 +forward 6 +forward 3 +down 9 +up 4 +up 6 +down 5 +down 8 +down 2 +down 9 +forward 8 +up 8 +forward 3 +forward 8 +up 8 +down 5 +down 9 +down 1 +down 3 +forward 3 +forward 9 +up 9 +down 5 +down 6 +down 1 +forward 9 +up 3 +forward 3 +forward 9 +down 7 +down 4 +down 5 +up 5 +forward 2 +down 5 +up 5 +up 4 +up 5 +forward 1 +down 2 +forward 7 +down 9 +forward 8 +forward 7 +forward 5 +down 3 +forward 5 +forward 7 +forward 1 +up 5 +forward 3 +forward 1 +down 1 +up 1 +down 7 +up 4 +forward 8 +up 9 +down 9 +down 9 +forward 8 +forward 3 +forward 3 +up 4 +down 3 +forward 4 +forward 6 +forward 7 +down 2 +forward 5 +down 3 +down 9 +down 4 +down 4 +forward 3 +down 3 +down 6 +up 5 +up 4 +down 6 +up 9 +down 9 +up 2 +up 1 +down 3 +forward 6 +up 6 +forward 1 +down 9 +down 6 +down 8 +down 9 +down 6 +forward 4 +up 6 +down 2 +forward 9 +forward 2 +down 4 +up 3 +forward 6 +down 2 +down 7 +down 1 +up 6 +down 5 +forward 1 +forward 7 +up 9 +forward 2 +up 8 +down 4 +forward 8 +up 2 +up 2 +down 1 +forward 6 +down 3 +forward 7 +forward 2 +down 5 +down 6 +up 8 +forward 4 +up 2 +forward 7 +forward 4 +forward 2 +down 1 +forward 7 +down 1 +up 1 +down 9 +forward 5 +forward 3 +down 6 +up 5 +up 9 +down 1 +forward 2 +forward 8 +down 5 +down 4 +forward 6 +forward 1 +forward 4 +forward 2 +forward 4 +up 7 +forward 5 +forward 2 +down 2 +forward 1 +forward 4 +down 4 +forward 7 +down 6 +forward 9 +forward 9 +forward 3 +up 5 +up 5 +down 6 +forward 7 +forward 8 +down 5 +forward 6 +forward 5 +forward 1 +forward 7 +forward 6 +up 2 +up 4 +forward 6 +down 4 +down 9 +forward 9 +down 4 +up 2 +down 5 +forward 9 +down 7 +forward 9 +up 9 +forward 9 +up 7 +up 2 +up 6 +forward 1 +up 9 +down 4 +down 8 +forward 8 +forward 7 +up 5 +forward 4 +down 3 +down 5 +up 9 +up 5 +forward 1 +down 3 +down 9 +up 2 +forward 5 +down 8 +down 3 +forward 5 +up 8 +forward 1 +forward 8 +forward 6 +down 2 +down 8 +down 8 +down 8 +forward 8 +forward 9 +up 2 +up 9 +up 8 +forward 2 +down 4 +up 7 +down 3 +forward 1 +forward 7 +down 8 +down 2 +forward 6 +forward 2 +down 6 +down 6 +up 9 +forward 9 +down 7 +forward 7 +down 4 +up 2 +up 7 +down 8 +forward 6 +up 2 +forward 4 +forward 9 +down 7 +forward 4 +up 4 +forward 8 +down 4 +forward 6 +forward 8 +down 2 +down 6 +up 4 +forward 5 +forward 1 +down 2 +up 6 +down 6 +down 3 +up 2 +up 4 +forward 1 +up 3 +up 5 +down 4 +down 1 +down 7 +down 7 +down 4 +forward 7 +down 9 +down 4 +down 2 +down 7 +forward 7 +forward 8 +forward 1 +down 8 +down 3 +down 5 +down 8 +forward 7 +forward 9 +forward 3 +up 8 +forward 5 +up 5 +up 2 +forward 4 +forward 6 +down 8 +down 1 +up 6 +forward 5 +forward 5 +down 9 +forward 3 +up 1 +down 1 +forward 5 +forward 5 +up 5 +down 4 +up 6 +forward 8 +forward 6 +up 5 +forward 2 +up 3 +forward 9 +forward 5 +down 9 +forward 3 +forward 1 +forward 4 +up 5 +forward 3 +forward 3 +up 9 +down 2 +down 3 +down 1 +forward 8 +down 4 +forward 8 +forward 8 +down 8 +forward 9 +forward 8 +forward 7 +down 6 +forward 5 +down 6 +up 8 +forward 6 +down 8 +forward 8 +down 6 +up 2 +forward 5 +forward 1 +up 2 +forward 4 +down 5 +up 8 +up 3 +forward 8 +down 3 +forward 4 +up 5 +forward 2 +down 3 +down 2 +down 7 +forward 5 +down 5 +forward 2 +up 1 +down 3 +down 9 +up 4 +up 3 +down 8 +up 1 +down 5 +down 5 +forward 7 +up 2 +down 3 +up 3 +forward 1 +forward 4 +forward 3 +up 5 +down 5 +up 3 +down 2 +forward 6 +down 6 +up 3 +forward 9 +down 9 +up 4 +down 4 +down 6 +up 9 +forward 3 +forward 2 +up 2 +up 5 +forward 2 +up 5 +forward 7 +down 8 +down 7 +up 8 +down 1 +up 1 +up 9 +forward 7 +forward 5 +down 9 +forward 8 +down 8 +forward 4 +forward 1 +forward 2 +down 8 +forward 3 +forward 6 +down 9 +forward 2 +forward 9 +down 4 +down 1 +down 1 +down 8 +down 1 +down 4 +up 3 +down 7 +down 5 +forward 1 +forward 5 +forward 8 +forward 4 +down 7 +down 6 +forward 2 +down 3 +down 3 +down 3 +forward 5 +forward 7 +down 4 +forward 6 +forward 9 +down 1 +forward 7 +down 5 +up 4 +up 5 +down 3 +down 1 +up 5 +forward 4 +down 9 +down 7 +up 1 +up 9 +up 4 +forward 7 +down 5 +down 8 +forward 5 +forward 9 +down 2 +down 7 +forward 8 +forward 7 +down 6 +down 8 +forward 3 +forward 6 +down 5 +forward 7 +up 7 +down 8 +forward 9 +down 3 +up 3 +forward 4 +up 4 +forward 3 +forward 4 +forward 9 +forward 5 +down 3 +down 6 +forward 9 +forward 4 +forward 1 +forward 7 +forward 8 +forward 2 +forward 7 +up 9 +down 8 +forward 4 +forward 4 +down 5 +forward 2 +forward 5 +down 6 +forward 4 +forward 2 +forward 7 +down 6 +down 2 +down 5 +down 1 +forward 5 From 574003677a3e096768ee3a22fd57f99dd0825a67 Mon Sep 17 00:00:00 2001 From: Dennis Pettersson Date: Thu, 2 Dec 2021 09:45:42 +0100 Subject: [PATCH 06/11] feat(day_02): completed part 2 --- README.md | 2 +- day_02/src/part_01.rs | 10 +++++----- day_02/src/part_02.rs | 28 +++++++++++++++++++++++----- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 2444ecb..309132e 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ## Progress: - [Day 1](https://github.com/ankjevel/adventofcode/tree/2021/day_01) 🌟 🌟 -- [Day 2](https://github.com/ankjevel/adventofcode/tree/2021/day_02) 🌟 +- [Day 2](https://github.com/ankjevel/adventofcode/tree/2021/day_02) 🌟 🌟 - [Day 3](#) - [Day 4](#) - [Day 5](#) diff --git a/day_02/src/part_01.rs b/day_02/src/part_01.rs index ea1907f..6ebcd05 100644 --- a/day_02/src/part_01.rs +++ b/day_02/src/part_01.rs @@ -3,15 +3,15 @@ use std::io::Result; use crate::{Command::*, Input}; pub fn main(input: &Input) -> Result { - let (mut x, mut y) = (0, 0); + let (mut horizontal_position, mut depth) = (0, 0); for command in input { match command { - Forward(units) => x += units, - Up(units) => y -= units, - Down(units) => y += units, + Forward(units) => horizontal_position += units, + Up(units) => depth -= units, + Down(units) => depth += units, } } - Ok(y * x) + Ok(horizontal_position * depth) } #[cfg(test)] diff --git a/day_02/src/part_02.rs b/day_02/src/part_02.rs index dd3d5a5..69a6692 100644 --- a/day_02/src/part_02.rs +++ b/day_02/src/part_02.rs @@ -1,9 +1,22 @@ use std::io::Result; -use crate::Input; +use crate::{Command::*, Input}; -pub fn main(_input: &Input) -> Result<()> { - Ok(()) +pub fn main(input: &Input) -> Result { + let (mut horizontal_position, mut depth, mut aim) = (0, 0, 0); + for command in input { + match command { + Forward(units) => { + horizontal_position += units; + if aim != 0 { + depth += aim * units; + } + } + Up(units) => aim -= units, + Down(units) => aim += units, + } + } + Ok(horizontal_position * depth) } #[cfg(test)] @@ -13,12 +26,17 @@ mod tests { use super::*; const EXAMPLE_DATA: &'static str = " - example + forward 5 + down 5 + forward 8 + up 3 + down 8 + forward 2 "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, ()); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 900); Ok(()) } } From 0859a68147653810e25fd512db579cb304d02d33 Mon Sep 17 00:00:00 2001 From: Dennis Pettersson Date: Fri, 3 Dec 2021 22:41:04 +0100 Subject: [PATCH 07/11] feat(day_03): completed part 1 --- README.md | 2 +- day_03/Cargo.toml | 15 + day_03/src/lib.rs | 28 ++ day_03/src/main.rs | 12 + day_03/src/part_01.rs | 75 ++++ day_03/src/part_02.rs | 24 + input/day_03 | 1000 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 1155 insertions(+), 1 deletion(-) create mode 100644 day_03/Cargo.toml create mode 100644 day_03/src/lib.rs create mode 100644 day_03/src/main.rs create mode 100644 day_03/src/part_01.rs create mode 100644 day_03/src/part_02.rs create mode 100644 input/day_03 diff --git a/README.md b/README.md index 309132e..2ab5a32 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ - [Day 1](https://github.com/ankjevel/adventofcode/tree/2021/day_01) 🌟 🌟 - [Day 2](https://github.com/ankjevel/adventofcode/tree/2021/day_02) 🌟 🌟 -- [Day 3](#) +- [Day 3](https://github.com/ankjevel/adventofcode/tree/2021/day_03) 🌟 - [Day 4](#) - [Day 5](#) - [Day 6](#) diff --git a/day_03/Cargo.toml b/day_03/Cargo.toml new file mode 100644 index 0000000..40d792e --- /dev/null +++ b/day_03/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "day_03" +version = "0.1.0" +edition = "2018" +authors = ["Dennis Pettersson "] + +[lib] +doctest = false + +[[bin]] +name = "day_03" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/day_03/src/lib.rs b/day_03/src/lib.rs new file mode 100644 index 0000000..34c38f1 --- /dev/null +++ b/day_03/src/lib.rs @@ -0,0 +1,28 @@ +pub mod part_01; +pub mod part_02; + +pub type Input = Vec; + +pub fn parse_input(input: &str) -> Input { + input + .lines() + .map(str::trim) + .filter(|string| !string.is_empty()) + .map(str::to_owned) + .collect() +} + +#[cfg(test)] +mod tests { + use super::*; + + const EXAMPLE_DATA: &'static str = " + 00100 + 11110 + "; + + #[test] + fn it_parses_example() { + assert_eq!(parse_input(&EXAMPLE_DATA), vec!["00100", "11110"]); + } +} diff --git a/day_03/src/main.rs b/day_03/src/main.rs new file mode 100644 index 0000000..61dd442 --- /dev/null +++ b/day_03/src/main.rs @@ -0,0 +1,12 @@ +use std::io::Result; + +use day_03::{parse_input, part_01::main as part_01, part_02::main as part_02}; + +fn main() -> Result<()> { + let input = parse_input(include_str!("../../input/day_03")); + + println!("part_01: {:?}", part_01(&input)?); + println!("part_02: {:?}", part_02(&input)?); + + Ok(()) +} diff --git a/day_03/src/part_01.rs b/day_03/src/part_01.rs new file mode 100644 index 0000000..afb09b2 --- /dev/null +++ b/day_03/src/part_01.rs @@ -0,0 +1,75 @@ +use std::io::Result; + +use crate::Input; + +pub fn main(input: &Input) -> Result { + let bits = (0..input.first().unwrap().len()) + .into_iter() + .map(|n| { + input + .into_iter() + .map(|v| v.chars().collect::>()[n].to_owned()) + .collect::>() + }) + .map(|v| { + let mut result = vec![(0u8, 0u32), (1u8, 0u32)]; + v.iter().for_each(|n| match n { + '1' => result[1].1 += 1, + _ => result[0].1 += 1, + }); + result + }) + .collect::>>(); + + let gamma = bits + .clone() + .iter() + .map( + |vec| match vec.iter().max_by_key(|n| n.1.to_owned()).unwrap().0 { + 1 => '1', + _ => '0', + }, + ) + .collect::(); + + let epsilon = bits + .clone() + .iter() + .map( + |vec| match vec.iter().min_by_key(|n| n.1.to_owned()).unwrap().0 { + 1 => '1', + _ => '0', + }, + ) + .collect::(); + + Ok(u32::from_str_radix(&gamma, 2).unwrap() * u32::from_str_radix(&epsilon, 2).unwrap()) +} + +#[cfg(test)] +mod tests { + use crate::parse_input; + + use super::*; + + const EXAMPLE_DATA: &'static str = " + 00100 + 11110 + 10110 + 10111 + 10101 + 01111 + 00111 + 11100 + 10000 + 11001 + 00010 + 01010 + "; + + #[test] + fn it_gets_the_example_correct() -> Result<()> { + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 198); + Ok(()) + } +} diff --git a/day_03/src/part_02.rs b/day_03/src/part_02.rs new file mode 100644 index 0000000..dd3d5a5 --- /dev/null +++ b/day_03/src/part_02.rs @@ -0,0 +1,24 @@ +use std::io::Result; + +use crate::Input; + +pub fn main(_input: &Input) -> Result<()> { + Ok(()) +} + +#[cfg(test)] +mod tests { + use crate::parse_input; + + use super::*; + + const EXAMPLE_DATA: &'static str = " + example + "; + + #[test] + fn it_gets_the_example_correct() -> Result<()> { + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, ()); + Ok(()) + } +} diff --git a/input/day_03 b/input/day_03 new file mode 100644 index 0000000..4c5a9e7 --- /dev/null +++ b/input/day_03 @@ -0,0 +1,1000 @@ +010011001001 +110101011110 +111111000101 +100111111001 +000000011111 +111100100111 +011111100000 +001001011100 +101100111011 +010001010100 +111011001010 +010001100011 +110110011011 +011011000001 +001100101100 +001000101100 +100000001010 +001111110000 +100101000000 +010000100000 +010100110000 +110000111101 +000001011010 +000011011001 +011000101110 +100011100101 +110010010100 +001110110101 +100011000000 +110100111100 +100100001111 +010110011001 +000001111101 +100001000010 +110010101110 +000101001100 +100100010010 +111111101000 +001010111001 +100101000001 +001101101110 +101100011010 +100100011100 +111100000111 +101011000100 +110000101010 +101100111010 +101100010101 +001011111101 +011010000110 +001101000011 +110001001110 +011010101111 +001111111011 +001100100001 +111010110001 +011011111100 +001011111001 +111110111110 +011111001011 +110110011101 +111110011011 +101101010010 +110111011110 +111011110100 +111110001011 +110100000010 +000011111001 +100001001111 +101110101010 +000111111011 +011110110001 +000011110110 +011101001011 +010011001110 +101110011110 +110101010011 +111010100011 +010101011001 +011011010101 +000010110100 +010011001000 +110000010010 +101111111001 +000100111011 +011101010101 +100011101111 +001010110100 +101101000110 +011100111011 +000100010111 +010111100000 +100100111110 +110110001111 +010010010111 +001000001110 +001110000101 +001111101100 +101100111110 +111011010111 +110110111000 +000111110001 +111001101001 +011111001000 +001110100011 +111100100010 +010111101000 +111100110101 +111100111010 +010100110110 +100101111100 +101000011000 +011011111111 +010000111100 +101111000000 +100001011000 +110010010110 +111000011011 +010100110111 +100100110011 +000010011101 +010001100111 +011000110011 +100101001101 +110111011011 +000100001000 +011111100101 +110110111100 +100010010100 +110110110111 +111000111011 +101101111000 +000000110110 +101111111010 +000110000001 +011111000110 +110010100111 +111010101111 +101011000010 +011001010111 +010100111110 +110001111000 +110101101111 +011001000110 +111000111111 +010100100111 +100001100001 +110101011010 +000110111000 +101101001010 +010110100110 +111101101010 +110100011111 +101010010000 +001100001001 +001000000101 +111000010001 +100100101100 +001111100011 +110110010000 +011010111010 +011001110110 +000000100111 +011110111100 +011101000101 +011000111010 +110110100011 +101110101000 +111001111001 +010001000001 +111000111100 +001011101011 +110111111111 +010111011101 +110010001010 +011111000100 +011001100110 +011100000010 +000101100010 +000111111010 +000000010101 +010011110110 +000111111101 +101101000010 +101111010001 +011110001101 +100000000111 +110111111110 +000010011110 +111000010010 +110011110011 +101101101011 +011011101110 +101011011000 +000101101001 +010110100011 +011001100111 +011101000011 +001110010110 +001001010010 +111110101001 +001111001001 +010101001111 +100111100001 +011100010101 +100001110011 +010001110001 +101011010101 +000100000110 +100101110001 +100101110010 +111011011001 +100110101101 +101100110001 +101111100101 +001010000000 +011000100011 +010010001111 +011100011101 +001100110010 +000001011111 +101111000011 +111000111110 +011111100100 +100110000000 +011110110100 +001100101011 +110010101010 +010011100100 +011000010100 +001101100101 +101010101000 +011110011010 +010010001100 +010100010001 +010001011011 +110010011001 +010111000101 +111011010110 +111010111100 +011111101000 +100110010100 +010101011011 +010111001011 +011110010011 +011000011110 +100001000111 +000011111101 +111100101001 +000000100011 +110011100100 +101111100001 +010011110111 +101000001011 +001101111001 +100111000011 +000001000100 +100100010000 +000010010100 +000111111001 +000100100010 +011011011111 +010110011110 +001101010011 +110111101001 +111011101111 +100110000100 +001101110111 +010101101110 +011010100011 +010010100101 +101110110110 +111000001011 +010001101000 +111101100110 +100111010001 +100010011010 +101111001000 +011000100000 +111000010101 +100101011001 +011011110011 +110011001010 +000110010111 +101000010011 +100100111100 +001111000001 +001110101101 +100111100011 +011001011101 +111000000000 +101001010011 +000000111101 +000011000000 +001011000100 +011111111011 +000111101111 +101100011000 +111011000001 +101000000111 +111110000100 +101001110100 +010111000001 +010010101001 +110011001111 +100010000010 +001001001010 +100110010110 +101100110010 +111000111010 +101110011111 +110111111001 +011010110011 +111010100010 +110000011000 +011000101011 +001001000001 +000100110010 +111100000000 +001010100101 +101011010110 +110001010100 +101111010000 +000110000000 +111110011000 +110011110111 +011010111001 +001100110110 +111111111101 +001010010001 +101001111000 +000100110101 +000100111111 +100000110111 +001011100001 +001010111000 +100010101100 +110110000111 +100101010010 +101001001010 +110000011101 +111010010101 +001011011000 +101101101001 +010101111011 +101010011100 +000010000011 +001110110110 +111100001111 +011000000001 +000000111010 +000110011110 +010100110010 +000111010000 +110111110111 +110000000101 +011111111111 +010101000011 +110000101000 +000001110001 +010001010010 +100100010110 +000100101110 +100011011000 +000110010001 +100000001001 +011010010001 +010111101011 +101101101100 +001101100001 +010101111101 +001010101110 +001110001001 +100101110110 +001000110011 +010001011110 +100110011001 +010100101110 +101101111011 +001110110011 +000111001111 +100100110110 +101000111101 +100000111100 +111000101100 +000010010011 +001100001101 +111101011011 +001100101010 +001000010001 +011001010010 +111011101011 +010010001101 +000100100011 +111110001111 +110010001111 +010001100010 +101101110001 +101100110011 +110111111011 +011011010100 +011101100101 +111111000100 +101111001001 +010000000100 +011001111110 +110101111100 +111111100001 +111011000100 +100110100001 +101001110000 +001011010010 +011010001000 +110010001110 +000101111001 +010100100110 +011100110100 +000011111000 +100100000111 +110111001000 +111100001110 +001010101100 +010111111011 +111010100100 +101000011101 +110111100110 +111100110100 +000010011010 +000110101111 +001101010001 +010010000111 +011000100001 +110111100100 +010011100101 +011001001011 +101101010100 +010000010001 +001001110001 +100010000110 +111101111011 +011110100101 +000101001000 +111110011100 +000001101110 +111101000001 +100111000100 +011110100011 +110000101011 +000010011111 +000101011001 +101100111001 +011010000111 +000010001011 +010001111110 +000010111110 +101001111110 +000110001101 +001100101001 +000101111011 +110000100110 +110001000011 +000001111100 +010100111010 +011001000001 +110111000010 +110011101010 +001101101000 +100110100011 +000010101010 +101101111010 +111111100111 +010101000000 +011010011110 +011110100100 +100000110000 +011111011100 +011000001110 +000010000010 +101011010010 +010101110000 +110001000000 +011111111100 +101110110010 +111111011001 +100000110110 +111010100111 +000001100101 +101010010111 +010000110110 +001000010111 +101000100000 +100101000011 +111100011011 +010110001101 +101010100110 +101111111101 +100000111001 +011100001000 +110111011000 +100011101101 +101101110011 +000010101100 +000011000001 +011110110110 +001100011110 +010100111111 +011111101011 +000011110100 +001000100111 +010000000101 +111001111000 +111001010001 +001100000001 +110110111010 +101000011010 +010100111001 +000100111100 +110000100011 +100000101011 +001001001110 +101110111101 +110101001110 +101110110100 +001111110101 +100000010101 +110000011010 +111101100011 +101001100100 +100010100001 +011001010000 +111001110000 +101000100111 +100111011110 +000000101111 +101000110000 +110100001111 +001101101010 +010011001101 +000110011101 +101011110000 +100010011110 +101010100011 +000110111011 +000101110110 +001000000011 +011011111010 +101011101111 +000011010101 +010001011101 +001010011100 +011111111000 +111011100111 +010111010001 +010111101001 +101000110100 +000001010000 +010001000101 +000010111101 +010101101111 +010100001010 +100010011101 +011111011001 +111010001001 +000110011011 +000001001000 +100011011111 +110001011000 +001101011000 +000010001101 +100100101111 +110101111011 +000010010110 +001110011010 +100110101000 +100101101100 +110011101101 +000011011011 +110110010110 +001111011110 +100111010100 +011001000000 +011011100001 +101100111000 +010001000011 +010110010110 +101010110100 +101011100100 +110001110101 +110110001100 +000100011011 +110100010000 +101010110001 +110010111000 +110011100101 +010000100100 +101100000011 +111101111101 +000100001100 +000000101011 +101101100000 +000111000110 +010100001000 +011110100001 +101101110010 +110010001101 +011100001001 +001100111111 +000011011010 +001110011110 +000010011000 +111001100010 +110100010001 +100001000100 +000110100000 +111011110111 +001011110000 +000001100010 +001000110001 +110001000010 +010100000011 +010110001111 +100111001001 +011100011011 +011101101111 +110000101100 +101111011111 +101111000110 +111001101011 +011011101111 +010110010101 +100001001100 +011101110011 +000001100001 +001000110111 +011000110001 +111000000111 +000100101001 +101100101101 +000100010110 +110010101001 +100110011100 +000111010011 +110100000100 +101011001110 +010011110001 +010110110100 +111111001000 +010100101111 +101111101000 +011110101000 +001011111000 +111110010111 +101101010000 +111111010100 +100111010011 +011101010011 +100000111110 +100010111111 +011011100010 +111000011101 +010100001101 +010100001011 +001111101001 +011001111100 +111101000111 +000100000000 +110101111001 +111010011111 +010010011101 +001101101011 +110111101111 +001000111001 +100010110000 +000000000101 +101001000001 +001110001101 +110111001101 +111010101110 +101001000110 +000011100011 +010101001101 +000111000001 +001011011101 +111100011101 +111101000110 +101101001011 +101110010101 +110100111000 +000010101101 +000110000110 +100001110001 +011010010000 +110000011111 +101011011110 +000010001111 +100001100101 +111010000001 +010010001011 +011111110100 +000001010010 +110010010111 +011000001000 +011101010100 +111110111101 +111100010100 +001101111000 +011110000001 +111011111001 +111011011011 +001010010011 +011011001110 +101101111111 +001101011001 +010111001000 +101110001011 +111101100111 +001101110010 +100001100110 +010100010100 +110010111011 +110011110110 +010110011101 +101101011001 +001111110011 +100000001100 +110010000000 +001011001100 +001111111100 +110010100101 +100000101100 +011000101101 +000101000010 +100100110001 +010111111110 +101111110100 +100001101011 +111010100001 +100111101010 +100110110000 +000101011000 +100011110011 +110100101101 +010011011011 +011010000001 +010000100001 +001101111110 +110000000010 +011010000000 +100110111001 +101011000011 +100101010101 +001100110111 +001111011001 +110000110100 +111101000000 +110101010100 +011100110111 +001100100000 +111110010110 +101010111010 +110100011010 +110010010010 +101000101101 +111110010010 +100111001000 +110000101110 +100001101110 +100011010110 +000101000001 +000010110111 +000110000100 +011101110101 +111100011010 +000000010100 +111100011000 +110110101011 +001100010101 +000010010010 +010100110001 +001001010110 +100110000011 +110100100001 +000111110010 +011000011011 +111101001000 +001101110101 +001101110110 +010101101010 +110111000011 +011110000010 +011010011011 +111100110001 +010001001000 +000101100110 +010001110111 +010000101000 +000000100000 +100011001011 +100001111110 +100011111101 +101101001110 +101110110011 +100000011111 +001101010111 +111101100000 +011010001111 +101001010010 +100010100000 +011000100111 +101100100000 +011011000011 +001101001011 +001010001011 +110100000001 +111110001000 +101000010101 +100011000010 +010110101000 +011101011111 +000110001000 +101100000111 +110100101001 +101001101001 +010111000011 +011101000001 +101011001000 +110101001101 +010010100110 +111001110011 +010111010010 +010011101100 +001110111100 +010111011110 +000010001100 +111000001001 +001100101110 +111001100011 +010000011001 +111010111111 +010011111111 +011100100110 +001001101111 +001000111110 +010101111000 +011011001011 +101110001100 +010100010010 +000001011011 +000001100100 +000000010011 +000001110011 +010101001000 +110110100001 +001101101101 +011010001110 +101011100110 +110001100101 +110100100110 +101010110000 +110100110101 +011101000100 +101110001010 +001100110101 +000100011110 +101110111001 +011111101010 +010110001010 +110111110010 +001000101110 +100011001100 +010011010101 +100101001001 +111011001110 +101100000100 +000010111100 +111000101111 +010001001100 +010011110100 +010010110000 +001111101110 +111110110111 +101010000010 +010001101101 +111001000000 +100011001010 +100000111111 +110000001101 +000000111110 +010011100111 +010110110010 +010110010000 +011010001001 +101000110101 +111110001010 +100101001010 +011000001001 +011100010111 +111010111000 +011011001100 +001010000100 +011100001110 +001001110010 +110001000110 +100100010111 +101110001101 +000100001001 +001001011111 +100111100100 +100001100011 +000011011110 +101011111110 +111000011000 +000100001010 +011111010111 +011001010100 +011101110111 +001100000110 +100011011101 +011010111111 +010110100111 +011000111001 +000100111010 +011001001110 +111010001000 +110011000101 +110001101010 +001101100111 +101011101010 +000001001010 +110110010100 +100000000001 +000011011101 +010011101110 +101001100110 +111110011001 +110010100000 +100011000100 +111111000001 +010000100011 +000100010010 +010111000010 +011111101001 +101101100100 +011011000101 +111110010000 +001000000000 +011000001011 +111111110110 +011010110110 +000001111110 +011101001000 +110101010000 +110001010000 +101000100001 +111100001001 +000000000110 +100000011101 +101001011011 +000001001100 +110000010110 +110000001011 +000101101101 +001011000111 +100110011111 +011111011101 +110010101111 +000000000001 +000101110001 +100011000001 +100101010011 +100011010111 +001101100000 +001100111110 +100101000111 +100011110111 +100000110011 +111010000101 +010101110110 +101010001011 +011001100100 +111101110011 +110011000001 +111011101100 +110010011010 +111100010011 +001011011001 +000000000000 +001000001101 +001110010001 +000011010100 +100001010101 +101010001000 +110100011011 +011100111000 +111111111001 +100101001110 +100011100011 +101000101000 +010101110101 +011100011100 From 461cf5f9308b596af92d3bb107a734d6beb6897d Mon Sep 17 00:00:00 2001 From: Dennis Pettersson Date: Mon, 6 Dec 2021 10:20:22 +0100 Subject: [PATCH 08/11] feat(day_03): completed part 2 --- README.md | 2 +- day_03/src/part_02.rs | 71 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 68 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2ab5a32..bd89dbc 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ - [Day 1](https://github.com/ankjevel/adventofcode/tree/2021/day_01) 🌟 🌟 - [Day 2](https://github.com/ankjevel/adventofcode/tree/2021/day_02) 🌟 🌟 -- [Day 3](https://github.com/ankjevel/adventofcode/tree/2021/day_03) 🌟 +- [Day 3](https://github.com/ankjevel/adventofcode/tree/2021/day_03) 🌟 🌟 - [Day 4](#) - [Day 5](#) - [Day 6](#) diff --git a/day_03/src/part_02.rs b/day_03/src/part_02.rs index dd3d5a5..7b4e9ce 100644 --- a/day_03/src/part_02.rs +++ b/day_03/src/part_02.rs @@ -2,8 +2,60 @@ use std::io::Result; use crate::Input; -pub fn main(_input: &Input) -> Result<()> { - Ok(()) +pub fn main(input: &Input) -> Result { + let process = |cmp: fn((Vec, Vec)) -> Vec| -> String { + let mut res = "".to_owned(); + let line_len = input.first().unwrap().len(); + let mut lines = input.clone(); + let mut sum: (Vec, Vec) = (vec![], vec![]); + for bit_n in 0..line_len { + lines.clone().iter().enumerate().for_each(|(i, row)| { + match row.chars().collect::>()[bit_n] { + '1' => sum.1.push(i), + _ => sum.0.push(i), + } + }); + + let entries = cmp(sum); + + if entries.len() == 1 { + res = lines[entries[0]].to_owned(); + break; + } + + lines = lines + .clone() + .iter() + .enumerate() + .filter(|(i, _n)| entries.contains(&i)) + .map(|(_i, line)| line.to_owned()) + .collect::>(); + + sum = (vec![], vec![]); + } + res + }; + + let oxygen_generator_rating = process(|sum| { + let (sum_0, sum_1) = (sum.0.len(), sum.1.len()); + if sum_1 == sum_0 || sum_1 > sum_0 { + sum.1.to_owned() + } else { + sum.0.to_owned() + } + }); + + let co2_scrubber_rating = process(|sum| { + let (sum_0, sum_1) = (sum.0.len(), sum.1.len()); + if sum_1 == sum_0 || sum_1 > sum_0 { + sum.0.to_owned() + } else { + sum.1.to_owned() + } + }); + + Ok(u32::from_str_radix(&oxygen_generator_rating, 2).unwrap() + * u32::from_str_radix(&co2_scrubber_rating, 2).unwrap()) } #[cfg(test)] @@ -13,12 +65,23 @@ mod tests { use super::*; const EXAMPLE_DATA: &'static str = " - example + 00100 + 11110 + 10110 + 10111 + 10101 + 01111 + 00111 + 11100 + 10000 + 11001 + 00010 + 01010 "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, ()); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 230); Ok(()) } } From 81f53d27398efcf51bcb79cfa863684524005fa6 Mon Sep 17 00:00:00 2001 From: Dennis Pettersson Date: Fri, 10 Dec 2021 08:52:38 +0100 Subject: [PATCH 09/11] chore(day_04): scaffolding --- day_04/Cargo.toml | 15 ++ day_04/src/lib.rs | 76 ++++++ day_04/src/main.rs | 12 + day_04/src/part_01.rs | 42 +++ day_04/src/part_02.rs | 24 ++ input/day_04 | 601 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 770 insertions(+) create mode 100644 day_04/Cargo.toml create mode 100644 day_04/src/lib.rs create mode 100644 day_04/src/main.rs create mode 100644 day_04/src/part_01.rs create mode 100644 day_04/src/part_02.rs create mode 100644 input/day_04 diff --git a/day_04/Cargo.toml b/day_04/Cargo.toml new file mode 100644 index 0000000..7dd489f --- /dev/null +++ b/day_04/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "day_04" +version = "0.1.0" +edition = "2018" +authors = ["Dennis Pettersson "] + +[lib] +doctest = false + +[[bin]] +name = "day_04" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/day_04/src/lib.rs b/day_04/src/lib.rs new file mode 100644 index 0000000..960428f --- /dev/null +++ b/day_04/src/lib.rs @@ -0,0 +1,76 @@ +use std::mem; +pub mod part_01; +pub mod part_02; + +#[derive(Debug, Eq, PartialEq, Clone)] +pub struct Input { + pub numbers: Vec, + pub boards: Vec>>, +} + +pub fn parse_input(input: &str) -> Input { + let mut lines = input.lines().map(str::trim).map(str::to_owned).into_iter(); + let mut numbers: Vec<_> = vec![]; + + loop { + let curr = lines.next(); + let unwrap = curr.expect("no value exists"); + + if unwrap.is_empty() { + continue; + } + + let _old = mem::replace( + &mut numbers, + unwrap + .split(&",") + .map(|c| u32::from_str_radix(c, 10).unwrap()) + .collect::>(), + ); + + break; + } + + let mut boards = vec![]; + let mut board = vec![]; + lines.for_each(|v| { + if v.trim().is_empty() { + if !board.is_empty() { + boards.push(board.to_owned()); + board.clear(); + } + return; + } + + board.push( + v.split_whitespace() + .map(|c| u32::from_str_radix(c, 10).unwrap()) + .collect::>(), + ); + }); + + Input { numbers, boards } +} + +#[cfg(test)] +mod tests { + use super::*; + + const EXAMPLE_DATA: &'static str = " + 7,4,9,5 + + 22 13 17 11 0 + 8 2 23 4 24 + "; + + #[test] + fn it_parses_example() { + assert_eq!( + parse_input(&EXAMPLE_DATA), + Input { + numbers: vec![7, 4, 9, 5], + boards: vec![vec![vec![22, 13, 17, 11, 0], vec![8, 2, 23, 4, 24]]] + } + ); + } +} diff --git a/day_04/src/main.rs b/day_04/src/main.rs new file mode 100644 index 0000000..6286c1f --- /dev/null +++ b/day_04/src/main.rs @@ -0,0 +1,12 @@ +use std::io::Result; + +use day_04::{parse_input, part_01::main as part_01, part_02::main as part_02}; + +fn main() -> Result<()> { + let input = parse_input(include_str!("../../input/day_04")); + + println!("part_01: {:?}", part_01(&input)?); + println!("part_02: {:?}", part_02(&input)?); + + Ok(()) +} diff --git a/day_04/src/part_01.rs b/day_04/src/part_01.rs new file mode 100644 index 0000000..08865e6 --- /dev/null +++ b/day_04/src/part_01.rs @@ -0,0 +1,42 @@ +use std::io::Result; + +use crate::Input; + +pub fn main(_input: &Input) -> Result { + Ok(0) +} + +#[cfg(test)] +mod tests { + use crate::parse_input; + + use super::*; + + const EXAMPLE_DATA: &'static str = " + 7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1 + + 22 13 17 11 0 + 8 2 23 4 24 + 21 9 14 16 7 + 6 10 3 18 5 + 1 12 20 15 19 + + 3 15 0 2 22 + 9 18 13 17 5 + 19 8 7 25 23 + 20 11 10 24 4 + 14 21 16 12 6 + + 14 21 17 24 4 + 10 16 15 9 19 + 18 8 23 26 20 + 22 11 13 6 5 + 2 0 12 3 7 + "; + + #[test] + fn it_gets_the_example_correct() -> Result<()> { + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 4512); + Ok(()) + } +} diff --git a/day_04/src/part_02.rs b/day_04/src/part_02.rs new file mode 100644 index 0000000..dd3d5a5 --- /dev/null +++ b/day_04/src/part_02.rs @@ -0,0 +1,24 @@ +use std::io::Result; + +use crate::Input; + +pub fn main(_input: &Input) -> Result<()> { + Ok(()) +} + +#[cfg(test)] +mod tests { + use crate::parse_input; + + use super::*; + + const EXAMPLE_DATA: &'static str = " + example + "; + + #[test] + fn it_gets_the_example_correct() -> Result<()> { + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, ()); + Ok(()) + } +} diff --git a/input/day_04 b/input/day_04 new file mode 100644 index 0000000..26358a9 --- /dev/null +++ b/input/day_04 @@ -0,0 +1,601 @@ +26,38,2,15,36,8,12,46,88,72,32,35,64,19,5,66,20,52,74,3,59,94,45,56,0,6,67,24,97,50,92,93,84,65,71,90,96,21,87,75,58,82,14,53,95,27,49,69,16,89,37,13,1,81,60,79,51,18,48,33,42,63,39,34,62,55,47,54,23,83,77,9,70,68,85,86,91,41,4,61,78,31,22,76,40,17,30,98,44,25,80,73,11,28,7,99,29,57,43,10 + +57 12 60 96 93 +73 87 63 70 91 +74 32 43 67 46 +59 34 5 35 82 +53 40 55 29 1 + +48 71 59 45 63 +13 42 23 95 39 +84 82 10 29 4 +16 91 32 92 62 +99 33 20 21 3 + +51 20 32 30 90 +86 88 89 1 73 + 5 64 78 81 22 +95 50 7 27 17 +39 82 46 35 92 + + 2 65 21 77 97 +50 46 38 99 82 +22 1 24 63 70 + 8 32 80 98 35 +57 67 25 81 18 + +64 7 26 44 14 +42 71 19 22 0 + 4 36 51 25 6 +69 59 90 15 88 +85 65 32 76 70 + + 8 69 75 42 44 +64 25 72 71 34 + 2 94 81 14 38 +97 89 59 23 88 +57 70 13 1 51 + +93 94 26 11 35 +63 57 84 10 92 +12 29 78 65 64 +54 75 61 50 81 +13 90 2 66 99 + +10 21 39 24 56 +90 49 25 80 59 +41 72 47 74 79 + 9 89 42 92 31 +20 1 32 58 83 + +81 11 58 2 69 +79 23 60 8 63 +94 9 0 45 34 +36 31 61 71 74 +51 48 59 99 70 + +66 47 88 16 18 +35 75 54 26 77 +23 55 33 3 19 +82 71 57 80 45 +22 8 40 76 20 + + 8 5 95 86 76 +49 21 82 78 77 +12 38 61 85 4 +14 54 42 40 39 +69 66 1 0 7 + +85 66 96 45 64 +25 55 36 76 37 +82 61 29 47 54 +73 94 3 59 24 +71 62 31 98 79 + +84 10 60 61 97 +75 90 95 6 8 +93 89 65 70 80 +35 15 46 55 77 +52 3 74 39 36 + +80 24 59 71 52 +17 43 45 8 6 +58 22 32 46 98 +48 3 56 31 77 +97 28 55 0 76 + +51 98 12 49 19 +28 94 9 97 85 + 5 78 47 93 24 +67 0 37 81 76 +77 48 15 69 50 + +34 45 5 80 14 +82 42 63 2 86 + 3 95 54 74 69 +46 27 49 92 66 + 0 85 98 83 17 + +41 99 93 62 96 +90 30 10 5 94 +98 32 83 78 25 +76 27 29 19 35 +58 91 34 31 3 + +31 1 24 96 36 +58 12 59 57 92 +84 5 55 49 41 +54 72 70 95 88 +66 50 22 35 15 + +35 57 69 13 93 +34 62 28 26 36 + 6 64 47 74 45 + 0 32 19 33 44 +65 25 90 91 1 + +57 96 70 15 89 + 7 65 29 12 34 +40 25 36 81 86 +58 39 27 79 59 +19 91 47 6 11 + +60 74 67 87 68 +80 53 42 91 89 +11 19 8 78 31 + 4 6 30 10 90 +64 41 27 59 12 + +45 0 86 81 34 + 8 29 53 12 32 +89 74 64 26 96 +60 13 87 35 73 +52 69 23 46 40 + +43 35 1 59 40 +63 74 7 53 94 +39 42 8 84 27 +66 65 46 82 80 +61 76 13 31 45 + +38 4 51 76 5 +36 57 3 86 84 +83 37 60 67 52 + 0 70 7 19 72 +62 99 9 75 58 + +95 47 78 27 14 +50 82 17 15 22 + 1 76 64 73 71 +24 26 42 79 55 +36 40 43 81 59 + +13 7 60 49 87 +30 31 99 19 82 +91 88 53 96 97 +37 11 47 32 81 +86 94 45 71 38 + +64 42 19 6 69 +33 2 61 98 55 +20 48 5 82 56 +78 11 65 59 74 +85 72 1 54 29 + +76 56 84 34 83 +16 26 33 50 3 +85 20 87 31 51 +62 7 28 96 8 +81 57 89 44 58 + +92 49 58 8 45 +47 89 48 91 71 +53 67 37 59 88 +24 69 96 61 16 + 2 6 68 95 60 + +99 60 39 96 0 +62 14 77 70 47 +72 98 66 42 58 +85 19 12 23 44 +68 28 51 94 82 + +59 32 45 99 92 +96 36 30 87 9 +61 54 71 94 22 +76 4 62 20 2 +40 18 43 70 44 + +22 54 77 12 3 + 5 11 41 19 58 +49 51 75 24 63 +42 20 43 92 69 +62 36 15 25 80 + +93 40 48 21 10 + 0 83 86 31 65 +52 7 17 67 72 +95 28 63 99 47 +51 22 85 55 44 + +43 26 86 80 94 +93 66 84 90 61 +91 58 71 73 89 + 9 72 81 48 54 +11 60 36 25 70 + +33 42 73 20 69 +15 12 27 72 14 +93 30 89 86 22 +77 25 80 85 74 +66 78 0 49 82 + +37 84 46 86 39 +55 31 96 17 43 +12 33 45 97 9 +44 57 25 77 78 + 5 73 81 35 58 + +19 41 87 94 59 +97 84 78 52 77 +70 15 91 53 1 +71 47 82 35 99 +25 55 58 39 29 + +29 74 31 73 72 +23 10 83 63 25 +18 26 79 35 65 +59 44 98 45 20 +67 7 87 28 11 + +83 89 92 55 72 +32 6 78 93 49 +66 77 5 60 61 +85 57 29 97 65 +86 84 48 20 75 + +85 82 83 66 86 +64 61 77 38 84 + 1 68 4 18 72 +56 97 37 98 74 +44 14 78 52 93 + +30 73 72 24 51 +78 3 97 39 5 +90 42 58 96 17 +33 95 44 27 1 +80 16 84 54 99 + +92 88 79 14 10 +24 52 80 46 51 +11 31 35 53 25 +44 54 63 33 93 +87 38 15 64 4 + +14 25 61 40 95 +34 17 97 38 26 +64 90 45 91 65 + 8 50 23 11 74 +32 33 22 88 28 + + 8 32 94 72 74 +27 29 22 2 76 +58 54 80 5 35 +36 24 83 59 25 +21 31 48 39 4 + +56 13 22 53 72 +61 60 81 87 86 + 7 74 98 28 11 +67 38 91 23 0 +42 84 24 3 47 + +29 98 43 45 30 +86 50 15 60 11 +18 34 8 67 24 +36 97 69 27 79 +35 87 52 55 61 + +40 50 30 75 72 + 1 62 85 21 11 +80 10 91 7 2 +27 31 73 25 29 +63 65 55 87 23 + +12 68 47 77 76 +98 30 6 51 80 +22 85 88 99 24 +35 90 82 18 37 +17 27 34 54 43 + +85 46 35 16 45 + 4 6 96 9 61 +44 90 64 29 50 +76 38 69 80 28 +27 23 51 8 7 + +72 8 62 61 83 + 0 30 92 29 7 +86 28 54 52 5 +32 97 82 68 31 +76 69 22 12 13 + +66 67 1 36 94 +80 99 49 47 38 +76 95 30 13 19 +83 21 45 44 43 +29 91 14 20 98 + + 8 80 3 82 99 +62 41 47 6 27 +12 72 76 81 36 +30 7 67 90 5 +85 31 83 49 19 + +25 91 86 47 27 +69 74 20 17 97 +59 45 87 28 75 +49 94 63 33 9 + 8 66 2 30 32 + +69 58 41 84 5 +27 2 22 65 88 +63 96 90 17 85 +26 52 86 20 8 + 3 9 59 50 57 + +80 85 90 5 56 +66 57 76 65 62 +81 74 15 38 32 + 0 75 61 16 79 +96 50 8 86 1 + +52 21 98 54 94 +73 90 87 58 50 +38 39 30 69 82 +55 12 81 48 29 +93 23 91 47 28 + +92 14 3 1 19 +18 27 91 62 86 +61 80 49 53 97 +77 98 52 0 8 +17 54 85 59 51 + +49 45 38 70 33 +96 18 63 5 99 +65 58 29 91 19 +78 7 98 39 17 +31 15 13 35 75 + +55 50 58 96 94 +67 72 4 40 90 +59 31 15 78 81 + 1 80 56 34 20 +27 52 88 75 53 + + 0 5 91 65 72 +53 42 4 50 25 +13 52 81 79 92 +46 89 55 58 95 +19 77 30 36 18 + +38 97 86 69 44 +70 52 14 19 29 + 9 36 96 24 80 +84 22 32 72 48 +28 3 46 42 87 + +94 93 31 33 38 +21 30 34 69 35 + 1 10 55 79 57 +54 28 44 78 73 + 8 20 45 41 23 + +32 13 49 80 68 +41 95 84 74 57 +15 61 5 77 67 +53 54 29 51 75 +24 66 36 88 90 + +74 49 19 2 66 +94 45 30 84 37 + 7 24 22 87 60 +13 40 57 9 1 +56 42 92 67 27 + +29 7 97 22 36 +80 77 92 3 67 +48 54 73 51 41 +28 8 55 24 4 +13 11 66 5 86 + +76 16 8 71 92 +23 61 53 27 43 +25 6 17 32 64 +40 69 21 84 93 +89 30 55 90 41 + +86 22 81 13 33 +35 87 82 77 71 +96 65 37 62 51 +16 72 36 93 23 +84 44 26 66 27 + + 4 73 52 35 43 +39 9 96 34 70 +19 67 38 10 54 +21 7 36 13 90 +84 28 59 57 75 + +55 7 32 68 97 +10 56 46 28 66 +74 81 18 73 26 +44 76 13 35 61 +90 36 45 64 58 + +96 62 97 87 95 +45 78 38 84 41 +91 19 88 25 22 +12 27 31 92 5 +15 83 7 53 71 + +31 17 96 6 47 + 3 90 27 89 75 +53 39 62 82 13 +52 34 23 83 87 +19 67 50 98 84 + +96 3 70 17 42 +50 74 65 53 31 +52 80 18 26 77 +29 57 95 25 81 +88 92 55 13 28 + +63 34 56 1 4 +40 97 10 5 50 +96 55 15 68 37 +43 33 89 72 3 +11 88 44 86 2 + +65 44 24 34 41 + 1 68 67 6 26 +27 88 73 25 9 +55 56 16 48 29 +33 18 77 3 94 + +91 75 35 33 56 +96 19 69 81 53 +25 14 32 74 22 +24 6 89 42 90 + 9 2 77 67 20 + +19 97 36 78 71 +16 26 99 23 92 +10 68 74 90 88 +30 60 96 11 34 + 8 76 35 53 22 + +84 15 76 31 63 + 1 34 96 70 35 +66 57 71 26 61 +83 41 74 85 60 +16 28 30 23 49 + +72 88 56 92 86 +12 44 71 47 30 +39 53 4 46 45 +38 5 9 35 25 + 8 61 13 50 82 + +62 92 49 21 95 +70 47 73 74 56 +17 89 0 39 60 +42 99 13 63 67 +43 16 11 20 84 + +13 30 59 84 12 +52 88 79 62 29 +99 39 95 55 70 +80 46 31 89 69 +74 71 65 3 38 + +47 86 21 24 22 + 0 62 69 38 59 +27 10 41 81 92 +14 51 35 13 17 +30 15 7 71 70 + +25 26 29 66 32 +68 46 77 45 86 +14 15 90 40 22 + 6 36 17 76 1 +80 55 83 98 79 + +98 76 58 27 39 +45 90 56 46 69 +10 41 54 82 25 +94 86 89 33 79 +16 30 87 24 83 + +66 28 93 91 68 +71 51 22 10 42 +29 20 77 17 8 +55 39 89 72 12 +98 78 65 48 41 + +49 25 80 64 99 +90 9 40 76 63 +60 93 46 4 27 +17 0 42 33 28 +59 26 18 69 75 + +35 0 76 58 31 +87 17 42 13 33 +70 67 61 52 12 +59 85 64 80 1 + 4 73 99 55 48 + +40 73 94 80 90 + 9 93 17 51 62 +96 0 57 82 47 +86 27 64 95 84 +16 99 37 41 44 + + 8 96 31 26 50 +20 69 75 82 89 +94 42 38 78 35 +83 13 45 62 43 +97 14 34 17 47 + +35 88 38 7 97 + 8 79 51 74 26 +60 22 53 5 33 +63 23 69 0 83 +21 44 91 95 18 + +64 77 4 0 15 +80 66 9 16 5 +75 8 18 40 91 +72 1 49 60 97 +14 24 34 65 92 + +84 75 31 56 55 +17 92 48 45 89 +88 52 10 90 47 +91 97 6 39 79 +99 65 11 42 93 + + 7 82 10 88 49 +11 66 54 3 53 + 4 73 71 42 92 +22 75 84 16 48 + 5 94 79 96 45 + +20 87 16 25 9 +15 70 19 72 56 +71 37 69 2 62 +76 97 41 8 92 +40 65 86 0 32 + +81 48 14 75 4 +70 30 6 74 62 +15 28 55 22 63 +36 32 35 86 71 +29 47 59 18 78 + +10 35 27 14 64 +43 19 86 71 36 +32 79 9 51 91 +17 67 26 41 56 +15 1 95 13 65 + +74 79 22 30 46 +80 55 57 14 37 +59 88 40 83 56 +63 10 97 64 7 +77 61 53 91 20 + +53 81 13 72 67 +79 10 71 11 8 + 0 99 60 20 4 + 7 45 89 66 98 +50 36 80 57 5 + + 5 7 35 4 29 +28 65 31 86 33 +66 98 75 13 92 +38 67 80 46 11 + 9 15 57 71 32 + +21 33 22 77 5 + 0 6 59 37 69 +50 45 32 60 96 + 9 39 28 56 57 +34 46 43 52 25 + +67 11 21 53 60 +52 58 54 94 47 +84 46 72 81 16 +31 51 23 36 97 +80 43 75 99 79 From b0f7eb8f26561557acb431ab6145f83db564033c Mon Sep 17 00:00:00 2001 From: Dennis Pettersson Date: Fri, 10 Dec 2021 10:32:05 +0100 Subject: [PATCH 10/11] feat(day_04): completed part 1 (dirty.) --- README.md | 2 +- day_04/src/board.rs | 75 +++++++++++++++++++++++++++++++++++++++++++ day_04/src/lib.rs | 1 + day_04/src/part_01.rs | 31 +++++++++++++++--- 4 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 day_04/src/board.rs diff --git a/README.md b/README.md index bd89dbc..d4f391e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ - [Day 1](https://github.com/ankjevel/adventofcode/tree/2021/day_01) 🌟 🌟 - [Day 2](https://github.com/ankjevel/adventofcode/tree/2021/day_02) 🌟 🌟 - [Day 3](https://github.com/ankjevel/adventofcode/tree/2021/day_03) 🌟 🌟 -- [Day 4](#) +- [Day 4](https://github.com/ankjevel/adventofcode/tree/2021/day_04) 🌟 - [Day 5](#) - [Day 6](#) - [Day 7](#) diff --git a/day_04/src/board.rs b/day_04/src/board.rs new file mode 100644 index 0000000..bc8b3e0 --- /dev/null +++ b/day_04/src/board.rs @@ -0,0 +1,75 @@ +use std::collections::HashMap; + +#[derive(Debug, Eq, PartialEq, Clone, Copy)] +pub struct N { + pub pos: (usize, usize), + pub marked: bool, +} + +#[derive(Debug, Eq, PartialEq, Clone)] +pub struct Board { + pub values: HashMap, +} + +impl Board { + pub fn new(input: &Vec>) -> Self { + let mut values = HashMap::new(); + + for (i, n) in input.into_iter().enumerate() { + for (j, nn) in n.into_iter().enumerate() { + values.insert( + nn.to_owned(), + N { + pos: (i, j), + marked: false, + }, + ); + } + } + + Self { values } + } + + pub fn new_draw(&mut self, n: &u32) { + if !self.values.contains_key(&n) { + return; + } + + self.values.get_mut(n).unwrap().marked = true; + } + + pub fn get_unmarked(&self) -> u32 { + let mut sum = 0u32; + for b in self.values.iter() { + if !b.1.marked { + sum += b.0; + } + } + sum + } + + pub fn completed_row_or_column(&self) -> bool { + let mut completed_row = vec![0, 0, 0, 0, 0]; + let mut completed_column = vec![0, 0, 0, 0, 0]; + for n in self.values.values() { + if n.marked { + completed_row[n.pos.0] += 1; + completed_column[n.pos.1] += 1; + } + } + + for row in &completed_row { + if row == &5 { + return true; + } + + for column in &completed_column { + if column == &5 { + return true; + } + } + } + + false + } +} diff --git a/day_04/src/lib.rs b/day_04/src/lib.rs index 960428f..0566319 100644 --- a/day_04/src/lib.rs +++ b/day_04/src/lib.rs @@ -1,4 +1,5 @@ use std::mem; +pub mod board; pub mod part_01; pub mod part_02; diff --git a/day_04/src/part_01.rs b/day_04/src/part_01.rs index 08865e6..a9a269c 100644 --- a/day_04/src/part_01.rs +++ b/day_04/src/part_01.rs @@ -1,9 +1,32 @@ -use std::io::Result; +use std::{io::Result, sync::Mutex}; -use crate::Input; +use crate::{board::Board, Input}; -pub fn main(_input: &Input) -> Result { - Ok(0) +pub fn main(input: &Input) -> Result { + let boards = Mutex::new( + input + .boards + .to_owned() + .into_iter() + .map(|b| Board::new(&b.to_owned())) + .collect::>(), + ); + + let mut result = 0u32; + + 'main: for n in &input.numbers { + let mutable_boards: &mut Vec<_> = &mut *boards.try_lock().unwrap(); + for board in mutable_boards { + board.new_draw(n); + + if board.completed_row_or_column() { + result = board.get_unmarked() * n; + break 'main; + } + } + } + + Ok(result) } #[cfg(test)] From bf6b2649596b5cb39eb66cad7f6fc18249b27979 Mon Sep 17 00:00:00 2001 From: Dennis Pettersson Date: Fri, 10 Dec 2021 22:50:04 +0100 Subject: [PATCH 11/11] feat(day_04): completed part 2 --- README.md | 2 +- day_04/src/board.rs | 40 ++++++++++++++--------------- day_04/src/lib.rs | 13 ++++++++-- day_04/src/part_01.rs | 2 +- day_04/src/part_02.rs | 58 ++++++++++++++++++++++++++++++++++++++----- 5 files changed, 85 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index d4f391e..c7a425a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ - [Day 1](https://github.com/ankjevel/adventofcode/tree/2021/day_01) 🌟 🌟 - [Day 2](https://github.com/ankjevel/adventofcode/tree/2021/day_02) 🌟 🌟 - [Day 3](https://github.com/ankjevel/adventofcode/tree/2021/day_03) 🌟 🌟 -- [Day 4](https://github.com/ankjevel/adventofcode/tree/2021/day_04) 🌟 +- [Day 4](https://github.com/ankjevel/adventofcode/tree/2021/day_04) 🌟 🌟 - [Day 5](#) - [Day 6](#) - [Day 7](#) diff --git a/day_04/src/board.rs b/day_04/src/board.rs index bc8b3e0..faa53c5 100644 --- a/day_04/src/board.rs +++ b/day_04/src/board.rs @@ -9,6 +9,7 @@ pub struct N { #[derive(Debug, Eq, PartialEq, Clone)] pub struct Board { pub values: HashMap, + pub completed: bool, } impl Board { @@ -26,16 +27,16 @@ impl Board { ); } } - - Self { values } + Self { + values, + completed: false, + } } pub fn new_draw(&mut self, n: &u32) { - if !self.values.contains_key(&n) { - return; + if self.values.contains_key(&n) { + self.values.get_mut(n).unwrap().marked = true; } - - self.values.get_mut(n).unwrap().marked = true; } pub fn get_unmarked(&self) -> u32 { @@ -48,26 +49,25 @@ impl Board { sum } - pub fn completed_row_or_column(&self) -> bool { + pub fn completed_row_or_column(&mut self) -> bool { + if self.completed { + return false; + } + let mut completed_row = vec![0, 0, 0, 0, 0]; let mut completed_column = vec![0, 0, 0, 0, 0]; - for n in self.values.values() { - if n.marked { - completed_row[n.pos.0] += 1; - completed_column[n.pos.1] += 1; + for n in self.values.values_mut() { + if !n.marked { + continue; } - } - for row in &completed_row { - if row == &5 { + let (row, col) = n.pos; + completed_row[row] += 1; + completed_column[col] += 1; + if completed_row[row] == 5 || completed_column[col] == 5 { + self.completed = true; return true; } - - for column in &completed_column { - if column == &5 { - return true; - } - } } false diff --git a/day_04/src/lib.rs b/day_04/src/lib.rs index 0566319..5d3f855 100644 --- a/day_04/src/lib.rs +++ b/day_04/src/lib.rs @@ -10,6 +10,7 @@ pub struct Input { } pub fn parse_input(input: &str) -> Input { + let input = format!("{}\n\n", input); let mut lines = input.lines().map(str::trim).map(str::to_owned).into_iter(); let mut numbers: Vec<_> = vec![]; @@ -62,7 +63,9 @@ mod tests { 22 13 17 11 0 8 2 23 4 24 - "; + 21 9 14 16 7 + 6 10 3 18 5 + 1 12 20 15 19"; #[test] fn it_parses_example() { @@ -70,7 +73,13 @@ mod tests { parse_input(&EXAMPLE_DATA), Input { numbers: vec![7, 4, 9, 5], - boards: vec![vec![vec![22, 13, 17, 11, 0], vec![8, 2, 23, 4, 24]]] + boards: vec![vec![ + vec![22, 13, 17, 11, 0], + vec![8, 2, 23, 4, 24], + vec![21, 9, 14, 16, 7], + vec![6, 10, 3, 18, 5], + vec![1, 12, 20, 15, 19], + ]] } ); } diff --git a/day_04/src/part_01.rs b/day_04/src/part_01.rs index a9a269c..9242c9a 100644 --- a/day_04/src/part_01.rs +++ b/day_04/src/part_01.rs @@ -8,7 +8,7 @@ pub fn main(input: &Input) -> Result { .boards .to_owned() .into_iter() - .map(|b| Board::new(&b.to_owned())) + .map(|b| Board::new(&b)) .collect::>(), ); diff --git a/day_04/src/part_02.rs b/day_04/src/part_02.rs index dd3d5a5..eb1ad38 100644 --- a/day_04/src/part_02.rs +++ b/day_04/src/part_02.rs @@ -1,9 +1,37 @@ -use std::io::Result; +use std::{io::Result, sync::Mutex}; -use crate::Input; +use crate::{board::Board, Input}; -pub fn main(_input: &Input) -> Result<()> { - Ok(()) +pub fn main(input: &Input) -> Result { + let boards = Mutex::new( + input + .boards + .to_owned() + .into_iter() + .map(|b| Board::new(&b)) + .collect::>(), + ); + + let total_boards = input.boards.len(); + let mut completed = 0usize; + let mut result = 0u32; + + 'main: for n in &input.numbers { + let mutable_boards: &mut Vec<_> = &mut *boards.try_lock().unwrap(); + for board in mutable_boards { + board.new_draw(n); + + if board.completed_row_or_column() { + completed += 1; + if completed == total_boards { + result = board.get_unmarked() * n; + break 'main; + } + } + } + } + + Ok(result) } #[cfg(test)] @@ -13,12 +41,30 @@ mod tests { use super::*; const EXAMPLE_DATA: &'static str = " - example + 7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1 + + 22 13 17 11 0 + 8 2 23 4 24 + 21 9 14 16 7 + 6 10 3 18 5 + 1 12 20 15 19 + + 3 15 0 2 22 + 9 18 13 17 5 + 19 8 7 25 23 + 20 11 10 24 4 + 14 21 16 12 6 + + 14 21 17 24 4 + 10 16 15 9 19 + 18 8 23 26 20 + 22 11 13 6 5 + 2 0 12 3 7 "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, ()); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 1924); Ok(()) } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy