From 1cb8db79d6fc8a0171459592a5a5f715e518b369 Mon Sep 17 00:00:00 2001 From: Patrick Auernig Date: Tue, 6 Dec 2022 21:25:01 +0100 Subject: [PATCH] Add solution for 2022 day 06 --- 2022/Cargo.lock | 7 +++++++ 2022/Cargo.toml | 9 ++++++++- 2022/README.md | 2 +- 2022/day-06/Cargo.toml | 7 +++++++ 2022/day-06/Justfile | 5 +++++ 2022/day-06/inputs/puzzle.txt | 1 + 2022/day-06/inputs/test.txt | 1 + 2022/day-06/src/bin/part_one.rs | 12 ++++++++++++ 2022/day-06/src/bin/part_two.rs | 12 ++++++++++++ 2022/day-06/src/lib.rs | 29 +++++++++++++++++++++++++++++ README.md | 2 +- 11 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 2022/day-06/Cargo.toml create mode 100644 2022/day-06/Justfile create mode 100644 2022/day-06/inputs/puzzle.txt create mode 100644 2022/day-06/inputs/test.txt create mode 100644 2022/day-06/src/bin/part_one.rs create mode 100644 2022/day-06/src/bin/part_two.rs create mode 100644 2022/day-06/src/lib.rs diff --git a/2022/Cargo.lock b/2022/Cargo.lock index 96d8ac9..ec29b4b 100644 --- a/2022/Cargo.lock +++ b/2022/Cargo.lock @@ -25,6 +25,13 @@ version = "0.1.0" name = "aoc-2022-05" version = "0.1.0" +[[package]] +name = "aoc-2022-06" +version = "0.1.0" +dependencies = [ + "itertools", +] + [[package]] name = "either" version = "1.8.0" diff --git a/2022/Cargo.toml b/2022/Cargo.toml index 8cfc10d..22636bd 100644 --- a/2022/Cargo.toml +++ b/2022/Cargo.toml @@ -1,5 +1,12 @@ [workspace] -members = ["./day-01", "./day-02", "./day-03", "./day-04", "./day-05"] +members = [ + "./day-01", + "./day-02", + "./day-03", + "./day-04", + "./day-05", + "./day-06", +] [workspace.package] diff --git a/2022/README.md b/2022/README.md index e3a8fd0..7892c16 100644 --- a/2022/README.md +++ b/2022/README.md @@ -9,7 +9,7 @@ | 03 | ✓ | ✓ | [Rust] | | 04 | ✓ | ✓ | [Rust] | | 05 | ✓ | ✓ | [Rust] | -| 06 | | | | +| 06 | ✓ | ✓ | [Rust] | | 07 | | | | | 08 | | | | | 09 | | | | diff --git a/2022/day-06/Cargo.toml b/2022/day-06/Cargo.toml new file mode 100644 index 0000000..2404f92 --- /dev/null +++ b/2022/day-06/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc-2022-06" +version = "0.1.0" +edition = "2021" + +[dependencies] +itertools = "0.10" diff --git a/2022/day-06/Justfile b/2022/day-06/Justfile new file mode 100644 index 0000000..7d08527 --- /dev/null +++ b/2022/day-06/Justfile @@ -0,0 +1,5 @@ +@part PART INPUT_FILE="inputs/puzzle.txt": + cargo --quiet run --bin part_{{PART}} -- {{INPUT_FILE}} + +clean: + cargo clean diff --git a/2022/day-06/inputs/puzzle.txt b/2022/day-06/inputs/puzzle.txt new file mode 100644 index 0000000..caaf415 --- /dev/null +++ b/2022/day-06/inputs/puzzle.txt @@ -0,0 +1 @@ +jghhttcmttdwwfjjjpqjqllwvwffswwqmwmddvndvdrrcwrccfncfcgcjjpjrjzjggczgglhllbzlztlzzswwbqqrvrvqrqcrclrccrbrpbbzhbbzvbbwrwswqwqqgmmgqmqmdqdhdmmfnndpdvvdvdbbmgmqgqgqmqrrsbsrrzcrzrcrvrddpqdpdwwsvshvshvshszhshddjllbjljjwhjwhwppbssdccvzzmvvwrrrhmmbdbggqhgqglglgrrdbdjddjvddzpznzmnnpgnppnznzvzbzvvdtdwdttnzzdpzzqjzjzllhglghgttcbtcbtbjbssqcqtcqtqvttvpvqvggbsszjsjqjllfgfqqhllvsvmmjhhbdbzzrwzzggdfgdgcddgmmjnjhhhgvgwghgfffclffdmmmlclzclzzqgqjqzqwzqzbbbljlplnlrlqlqlhlvlmvvlwltwtqwwznndpdttjjrllpptnngjnnzppjhpjhpjpjmjpmjpptzppjpsprpbpmmshmsmqqnhnjhnjnccdnnqhhgfgmgnmnvvtwvttcbtbnbcnnhjjnpphjpjppshsppmrmrbrlrzlzjlzzvssvfffsjfsjshshppchppprpcclhlmmgwwsddgbdggcqqhsqqbdbzzdffmpmvmpptppjrprrgvvgrrztrtllnblbffpgprpqqwcwjwcjcbbjgbbsgsbgbgwbwrrbcrcjcnnvlnlmnnwcncbcrrgcrggtqqgbbqsqhsqslswsdswscwssbqbppczzpmmnjnfjfpjpqpddpbbgrrnqrnqqnwqnntsnsdnddvhhgrgmmgzmgmwgmwwmfwwnqnjjgqghqhhpzpmpbmpbbqvvjjlvvddcnnglnnhpnhhjghgrgjrjqqgtqggmzzbdbssbpssrjsrsbbpzzsgzzpcpwwfgwfgfccslsmlltlnttpvvcbvbqqqqvlvplvvmnntstffvhvvwfftltjjtftbftfqqnbbmnmqqwbbldbldbddtldtldldbllsggdqgdgfgtggglmmgfgcfgccgttgdgdvgglhhvbbnzbzvbzzvtvntvntvvwgvgcgrrmbmnmttzlzgllpmlpmmscsncnnnfrrvqvmvsvsrvvbvpbbvsvssdnnmvnnnggpmpbbqsqwssjwwtnwwhbwwmcwwjfwfhfvvsnsqqwmmrfmrmcrchhpqprpzpmpzzqqmqbqjjbffjnnhphdpdjjbcjcsjcjcdcrddscsgsqgsqggcscrssscvcncfccptcccjgjqqlppjbpjpgpzpgpqqzwqwcwnwccmnnnwrnrttjqtjtllbslsrlrggjrrjwrwmrrcbbnddzcdzcchqqrhhcrcrlrmrcchcpcmcrrlqltlhttdhhjrrzllwjjfvvzccmwwtlwwhpwwssfdsfdsfsddwbbfsfqfwqffhqfqvqwwhfhrrwhrwhrwrzrwrzwwbsblslzzrwzwdwnwznnbsnsbbgffjppvqppbmmdffgghrrchrhfhthqthqhvvrcvrrfvfbvffmmbjmjbbwhhvqvbvjjfzjzvvwnvncvvdssfffjfhjhbbdhdlllmrlmrllbtltbbhnnczzwjzwjwllvtvmvpvvmmfnmnwmwjwrrqtqlltwllwrllsvvdrvrnvrnnsjnjfnnmpnpgnglnggbnbmmcmddhrdrjdjtthssdbssjtjvttqwqppwbpblljnlnljlfjffvddtzzqfzqqjttqhhhvppghpghpghghjggsrrczzqvvbjbbbglldcdrdqdpqpwpffnjnhnthhtlhhrdrcrwrvrlvrlvrvprpccmffqzffdbdhhwjjgmgzzqhqnqsstltjjzszpsppdpnddrnrmrllhtwnlhgzgvsfjfmgfcnnzqhbfztnzhnctmjjhvzrhjcptzqqtstlmrgnbcpnctjgswhfcmtzgsndfzdlqsrlcjrssmjndgrzgvtgfjwtcqwnzmrgtgngcwcwzvttqcdwqspzldfmzgmfclwgqvvvqhhhswpdjlbpjpppdljbdjrbblbrtftdsmvmfpftdlvhdphzbcwwwjvmsjczbtblwbtszmbcmpbdqnwcgcltbdzbsvtjhlqgrsgqzztqrvmswtzgvsjslgvjcvhqftdcmwqwhgwrmrpfdqvfqhczlztrhjqlppchgspfjwzvfsncdhgnlnnshwsbvqmqwtldtmshhqpqbdzqlwfvvbbzwqvlvqdwcpbtrsrhmrjnzmqjttthhbbdjwtzhwjcvhzrtgfwltqhmzwtqbgjjpphlfwfhgctmwpqrmngfrfmbmcqpqcrsmzhjzdzbppbfwpgdtdjvjdvbwfcbddjpjbgtrjtddlpvnppcwhbbgpqgmcrwmfsvqspdvctvljbhcgnllzdpjmjdqwflrfqrsfqnhcsbtszjfmqvjwmcsghwcssbnzzpsggbmpdqrlctrcrmbzlnnqcfmrpfwsnjcggtqncwddsjjzwvlnfpwjlrgwrrvfhgtjwqlblnsnrddjqqtwtzrvfqfqcjhbwtlmfsfgpzgtdddtlvqlqgjwpprpzvdhvlfjbqqflbnvgsgblfpcqprlqrhrrddjjftbmfgghrrrhmttmnfzgmrzwcscnsmdnnddsbdjswhwmjfjnfvjbtcqjlflzjsqqhldcdsbjttmvmcdbwrfwdlllbbjhbmdhnfgwmmbpbsrmqptppqzwtncnwwsjjrchgpvdcsspfqpczmsqfrgvfgsnhfmplrnhzddlbvnthltpwbbzdwwnmhmllwfphhfpnghgdzlzgpbvsphbhvfmcvqpqvdsjjbnbsdvccbmgwdbgsnhpgfshzzznjdbngsrqpwhqjqdfsnmngzznwgvqrtjmzcmbbqjgjcdjdqbmdrgvqflsstqhgsgpfnmzvrdgztlzlhvdjdcslwbgldwjwftvczvtbpdtdqtqshqrbpvpgbfbtnnlmzrhdtsjdlllbtwqgcfphssqmszmbllnbpwvhfdllwtcbqccmbtscmsvppjjrcpswgtzgvhblvbmcddhhgqghbtwzffscsvzgwjdfldccbcfptpmmfbwqzlqhdrcdvhpnwvddqcrwwlmtgvrcvlbvtblhhmhdrvvnpmrdqsgjdrfprfcmtfsbrmsglfjcnjwvpjqlptrbmrqcrdfccmfvhqzrmwqbbmtmjrbnmvzdbwcfpwjzrjrhzrncpwptswhnrgsdpdfjqcjhnvvftgzdccpsgdqcqzfvbtftrzljqmjbgmmlrdlvpwqddmdhzsslzlnvfrblfzfpwtvhpwhmqmbzvchndbzfswtmvcprhlssmncfdqcpzjczptptgdzpjvrqtrlcgbhlqqwvnsrrvtllldbhztgnlmjbmqmgcpcbwtthnhwghnqgvqtnnltbzslmmbjbhqtrmqbgccphjsgwbtstvjnpjjqsdwdsgcrjgznntsgvlrgzmbnzdmbghrmtscppgmztfbsqczzvhsmjmmclhrcbgnvjbgffgbrhrdwccplpdfzcljgfntjlzmsqrwrmdqbclffbfpscddcfsbpsnnphjvjwsfvbprsgpcnbrblvvqfvngbhgmmglzzfmmpnnrphwrvqnmffwpsmmrlhmnsdvbdgjlrjmsdzjltgmjfplrrfmgbhzltzzfpwtqcqwbgsgwfbmntzsvtqqtnrhbtbnshfmwwzbvtsqmtsfssrcvgngvvhjlcnfsvltpsdjspgmmrqttcsltjzqglpspmgrnbrtnbtnjzprqmtfhgczjrlqdhsjqjbhpnwhrffmhvqfmlzcpfflptgqwthfzvspbjjdwmmbnttbztzpnjmlstgmgqbptdncqgbdbdnqwslwhfrdfvmbbqlzhdptpfrhnvcchpddngslzzrhsrwclpccbqhcscbzcpdtwmppvrpjnnjfgrswndtzprjnsvvdwwhhbcsglnwwptptdzgsmbwppdrhwpqhzlgfcsqtfzvqdvcsbtbqvtfvwlcdrwttgmwhbjlqphclqfzmlb \ No newline at end of file diff --git a/2022/day-06/inputs/test.txt b/2022/day-06/inputs/test.txt new file mode 100644 index 0000000..5a2b0a7 --- /dev/null +++ b/2022/day-06/inputs/test.txt @@ -0,0 +1 @@ +mjqjpqmgbljsphdztnvjfqwrcgsmlb \ No newline at end of file diff --git a/2022/day-06/src/bin/part_one.rs b/2022/day-06/src/bin/part_one.rs new file mode 100644 index 0000000..2cf8ae5 --- /dev/null +++ b/2022/day-06/src/bin/part_one.rs @@ -0,0 +1,12 @@ +use std::{env, io}; + +use aoc_2022_06::{find_marker, parse_input}; + +fn main() -> io::Result<()> { + let infile_path = env::args().nth(1).expect("input file"); + let inputs = parse_input(infile_path)?; + + println!("{}", find_marker(&inputs, 4)); + + Ok(()) +} diff --git a/2022/day-06/src/bin/part_two.rs b/2022/day-06/src/bin/part_two.rs new file mode 100644 index 0000000..b924599 --- /dev/null +++ b/2022/day-06/src/bin/part_two.rs @@ -0,0 +1,12 @@ +use std::{env, io}; + +use aoc_2022_06::{find_marker, parse_input}; + +fn main() -> io::Result<()> { + let infile_path = env::args().nth(1).expect("input file"); + let inputs = parse_input(infile_path)?; + + println!("{}", find_marker(&inputs, 14)); + + Ok(()) +} diff --git a/2022/day-06/src/lib.rs b/2022/day-06/src/lib.rs new file mode 100644 index 0000000..14a7682 --- /dev/null +++ b/2022/day-06/src/lib.rs @@ -0,0 +1,29 @@ +use std::{ + fs::File, + io::{self, Read}, + path::Path, +}; + +use itertools::Itertools; + +pub fn find_marker(inputs: &[char], length: usize) -> usize { + for (idx, chunk) in inputs.windows(length).enumerate() { + let dups = chunk.iter().duplicates().collect::>(); + if dups.is_empty() { + return idx + length; + } + } + + panic!("how did we get here, whoops"); +} + +pub fn parse_input

(path: P) -> io::Result> +where + P: AsRef, +{ + let mut file = File::open(path)?; + let mut input = String::new(); + file.read_to_string(&mut input)?; + let chars = input.chars().collect(); + Ok(chars) +} diff --git a/README.md b/README.md index 5ef121a..8eb0b4b 100644 --- a/README.md +++ b/README.md @@ -9,4 +9,4 @@ - [2019](2019/README.md) (0% completed) - [2020](2020/README.md) (20% completed) - [2021](2021/README.md) (68% completed) -- [2022](2022/README.md) (20% completed) +- [2022](2022/README.md) (24% completed)