diff options
| author | Shivesh Mandalia <mail@shivesh.org> | 2022-12-21 21:20:05 +0000 |
|---|---|---|
| committer | Shivesh Mandalia <mail@shivesh.org> | 2022-12-21 21:20:05 +0000 |
| commit | 8f85eafcf28ecc77607ad2b54b4bde3bd07885bb (patch) | |
| tree | ff0ae03dd95beb1bc8c6020c87190aae7fb171cb | |
| parent | 666b11bc77f17d6d2b5a466c56ea7710bb9134fd (diff) | |
| download | advent_of_code_2022-8f85eafcf28ecc77607ad2b54b4bde3bd07885bb.tar.gz advent_of_code_2022-8f85eafcf28ecc77607ad2b54b4bde3bd07885bb.zip | |
complete day 6
| -rw-r--r-- | Cargo.lock | 16 | ||||
| -rw-r--r-- | Cargo.toml | 4 | ||||
| -rw-r--r-- | day06a/Cargo.toml | 10 | ||||
| -rw-r--r-- | day06a/examples/input.txt | 1 | ||||
| -rw-r--r-- | day06a/examples/test0.txt | 1 | ||||
| -rw-r--r-- | day06a/examples/test1.txt | 1 | ||||
| -rw-r--r-- | day06a/examples/test2.txt | 1 | ||||
| -rw-r--r-- | day06a/examples/test3.txt | 1 | ||||
| -rw-r--r-- | day06a/examples/test4.txt | 1 | ||||
| -rw-r--r-- | day06a/src/main.rs | 85 | ||||
| -rw-r--r-- | day06b/Cargo.toml | 10 | ||||
| -rw-r--r-- | day06b/examples/input.txt | 1 | ||||
| -rw-r--r-- | day06b/examples/test0.txt | 1 | ||||
| -rw-r--r-- | day06b/examples/test1.txt | 1 | ||||
| -rw-r--r-- | day06b/examples/test2.txt | 1 | ||||
| -rw-r--r-- | day06b/examples/test3.txt | 1 | ||||
| -rw-r--r-- | day06b/examples/test4.txt | 1 | ||||
| -rw-r--r-- | day06b/src/main.rs | 51 |
18 files changed, 186 insertions, 2 deletions
@@ -147,6 +147,22 @@ dependencies = [ ] [[package]] +name = "day06a" +version = "0.1.0" +dependencies = [ + "clap", + "itertools", +] + +[[package]] +name = "day06b" +version = "0.1.0" +dependencies = [ + "clap", + "itertools", +] + +[[package]] name = "either" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11,8 +11,8 @@ members = [ "day04b", "day05a", "day05b", - # "day06a", - # "day06b", + "day06a", + "day06b", # "day07a", # "day07b", # "day08a", diff --git a/day06a/Cargo.toml b/day06a/Cargo.toml new file mode 100644 index 0000000..4a6665c --- /dev/null +++ b/day06a/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "day06a" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clap = { version = "3.2.20", features = ["derive"] } +itertools = "0.10.5" diff --git a/day06a/examples/input.txt b/day06a/examples/input.txt new file mode 100644 index 0000000..636557c --- /dev/null +++ b/day06a/examples/input.txt @@ -0,0 +1 @@ +gzbzwzjwwrfftfrrbvvcbcvcffpssvhhzfzbfzzrbrtrcttnthnhsnhsnnclcpctpprwwgppppchhvvctvtsvswwcdcrrdzdhzdzvddvfvfjjlldvvfllfhlfhlhghnhghrgrsggvbbhdhffzggmttjqtjjgljjwtjwjggldlzzrfrpppjsjggqrrdbbgwgtwwwtqwtqqvccjnnhrhqqsnssjbssmjjbzjjqnqnlnjncjjzzqddfqqqnqvnqncqqmsshqqccssvpvllbbfvfmmmgzgdggtjgjtjbttngtnnhhfrfddmtmtftcftthvttwzwrzrbrgrbrqbqccmmtvtqvtqqzmzwmzzzsvzvhhhqlhqlqplpggvmvwmmshhnshsjszzljlnlrnllgddqllpmllsgswwqnqlnlqqlmqqvrqvrqrppvrrqwqhqllgjgcggsllqgllghlghhbvhhcvvbddvcvwwwzdzzfjjvcczbbwccjvccmvmfvfgfmfttwrttpmtmsszccjggcssmqsmsgszzfpphghvgvvcddtltwlwnnrbbfdbbtssrvvmwwjfflmlblwlrlmlwwhrhnhqnnvdvllzblzzndzdlzzhpprbrprnrzrjjlnlnrrjddgrrwrttcstsgshszzvgvfvpfpqfpfbpbfbwbmmzvvnnqvvqppzspzpzplldqlqsqlldmlmgmcmwmsmfsfzfdzzbpzzbbcwbbtppphlhshchjjszztctpprqppszzchcqczczddscsrstsntstjsjqjjfggvccgbggqhghrhppdldnlndnpddllgplgppnlpnnmwwglghhftfrtrqtqsszrssfjjzhzfhfssflfslsmmgrrcdrdnrdnnqznndrrbtrrmhrhbhsbsgsnslsqlqnncpccplpldpldppshsdssqdsqdsqdsdsdfsddchczhczcszcscffzhfzffpbbgttdhthnhnjnwnnwrrmwmlljzlzlzdzrrcvcbbsfstfsfnfqftqffgjfjzfjfsjswswccsvcvlccshhjpjcccnfnqqmsqmmrwmwjwswgsgjsjttmjmjttpqtqwttgmgfmmnbnrnpnwppgspggwnwqnqpqmmbmmnwnllbwwdqqzsqqtgttnrtrllcwcchpchcbhbpbnpbpsptpvtvzvrzzslljddjzjjmqmmdpmddcdzzrdrqddtctppwzzwrzrvzrvrzzjtztqqsmmcncllhmlmpmhgsrtrzjhjbtfvhmzpssfbjwcdshthnmmqmfhlhwcbbllwzbwfgfvzjcqblchzqqqgcgmpnbnnblhbcpgmvsbvtcmhsghldlhqlghgtpdvjflmjsmppdsvrjlwvhmwsmfvvdnzpmtfqjqpjdctnnrlfjfvdtmvdmhsczlfsqwfrqtlqwnzdzrcdzmhvrgwnjjtqjrqljhgcffglvhnsdssqdpfrfhtjwlqzvfjmpjnqhsjvndtstqjsqgcmgqdjvfqnlmtjlvcblndprmffrgqdnnncnlfflclgqbjbmsdqsjrmzpwtbqqqqsqmgthhjfqwzvcbqwlvdbffhcvncpldmchnptbnlbhmzrrjhzvzdrvtlhsnfnfdnvhlrlrmdcpnmvdwswctcqldszlvftqtwldrhmfjmfvcgjcdjsbjqjwdtslblwhqfvgrfcpnhszqqsfwbwcmvfvccvztdmcjqfjvdvmbdtcjvtwqpwsqjtdvpvvvsdrrvngmjztgjtnpdbmtlrbrjlwsdnthgzgpssgbzzrqvgblqhrtfbflnphvhpzmdfrwqvjjvcpsmdrqwdbzlpnqpmglgqzfhctrzdpzdthqgjtvpwcrlsmqnjwgzlnqbthvfswhjtrrsrswhbmnddgzmznvppbnmtjpzpdpmpzpmsgfstzldgmrtgplwwsbztphtcvdfgsqzqwrmlqpnhvpcqpfjpbrthrtwgqlfnrqcrpvhssjmhfgpnzzvlrlcbnpmddhtdvvfrrvprqrwbhfgvvltgrhrpwsdgvrlgthbztcgcfggtcfzqtlcdhpmcvpgcszslhpfrttnrdrqpqlgdfwtccmbhfrnlbhhmrtrjmzstbqhmtphzcpcllzsnghfvlwvzzvlqrjmfsvhrnjnvldgnbqvpjsmmphhrmhqrtcncmjwbdlqtrvmhgjrjsrddcpqnjhfmczfgwzspnrjfwvfdpdlcfpvctfrlspdwwlnpbvbglzsmgfsmrshsqgcvlfrvjssrglbwvvvgpvtqshbtqmzbnglflhhldtfzqssptrbnnzdqwqtstpftdqgmmhfjdlfwtmcmtmcgcvtfhzvsbllgbchvlhrgnvvbsnrwqrlvdqlcwwlgbjrvrzgcvljqzvdngtbhpnppjrzpmbwztzvnvrbfccfgvnqvrcmpdblngcvlwjwzpbbwmnslsdjmbrwbvnjsgcmsfvzvnwbzrrlzvgdnzcqqgggvmcwczjqnrddnzhlndgzjbvtbtjqdnlvlflqnfvjdmfstpdfqsgjdslgtpgdnvvpmfwvlqbmbgdrqjhdfhlmsdtfwpscsvdzmswszjfwqtsjqpfnjjlnsspvlgzwwtvwgdzfjjljfwbvfbvpglcqcdbdpshwcqzswbwhftbfqblzpqfmqpvzdjsrcqtvjntnhmlhmzllffcjsdnwpfzdglvlrhrljbrhjhgdnfcqcrccwrbbhrvqwrzlwjrrwzsfcwsvbqsjgtgpzqwlczljrtdhtzcgsfgqssdbjjmttdtzhrqtbqjtqfwmcpdftrfjmznpscsqmtfcdpcdjwcqjvmhngcqnmtmwfttcvpwgcnhhgnnbgjdvztzhczvqljjqwcmwcbvmqqjsfnmhtbtsvsnsfwfzgdvlctrgdvbjqpgfrrlsnppmvhfbbclprlvcssnvtsgftmlpqrpjzrrphrzltbtgfwjqqvbgqjdpdgqvzppfzcbhdbbjttcdzclsphtlzfvnfqgpmqvpzrqgpdnbmsrqgsnfdwpvndzmsllgmnrlhnnzldwshtrrsrsmdncwrcjnmcjlwbbfpzcwzvldtgvbcvhnbhgjgwjcvslrfcwbqlrqldvpcgnbwbzzncncftrgbrwchfrrtnpqsjbcpzvplnbqdgtvnnrcwwfvbdzdrsfspvtbhflhsbqmlsjvfmpvjbfvcrdmgrfqsmqgfrntfqnlqbvmsqtpncjrstspbqvfmddmhwsssdcddshmwdlscttmdzljtpwhzhzhwsdnmgjstfmlnqqvzzdqpqsjdsllswmqcjtnthwqnhbscrjdstljqgncjvjvlpfrtscrzrqghrdvdnbtnpshpldcchljzrzqjlwwscnphvrwlvzttcdjdrddgmvqpvdmttdqhwpfmslzvnrwlrrdttbhctgpgzjrmdwjbcmsprwggvmdmmltldgpbfnppnrpwcnpgtblccdvbsnfvgzmjppftvndmdslfshjvndfvvzjjlzhgfmhcggttrcrbrlwrqgjpchvhnjwqnbsnmftwszhzftglrfdvvnbcbzsslgmdchtrrrqqzhllrfhwfwbbdgfpdfwssmzcfcnzmrhfdddtdhfqmctsglqbwhwpnbdzbsfbbvvthrrgjvztjjwgjcgjntrddmmdldtmvjnwjbcqwfwvfhsrpchznhlqpcttqjffbrpbftftdjzlrqchmzrfgjrqlndfwfrghtsfsblcvtjmjrbfrwdgsgzmmjpdlbwzfscfsfcdqwdwnjwjbvvbptmfrqltmnlpbtrqspwdfmhnncqgtrtmbzhfmwrbcqhmmpmvprvwrjplspcmmspldmbgpbtmqjtrfcpfhcnpjbnlhjpzflstjqfqvzcnfgvrmtplndchffzrtfrqdpdnzrspddwmpzlfchrzzfcfvmbvfnlfwtfbvnffdqhljbvwwdtmszgrjtzwqdbgvvfphcnsdgvlmslqngfmsbrztrnpjprghmjffscbnfqwrvjjjtfzrmjtzbwdsmzgmbtjzvddhngmzvflwftblbzfd diff --git a/day06a/examples/test0.txt b/day06a/examples/test0.txt new file mode 100644 index 0000000..7980a82 --- /dev/null +++ b/day06a/examples/test0.txt @@ -0,0 +1 @@ +mjqjpqmgbljsphdztnvjfqwrcgsmlb diff --git a/day06a/examples/test1.txt b/day06a/examples/test1.txt new file mode 100644 index 0000000..19fe247 --- /dev/null +++ b/day06a/examples/test1.txt @@ -0,0 +1 @@ +bvwbjplbgvbhsrlpgdmjqwftvncz diff --git a/day06a/examples/test2.txt b/day06a/examples/test2.txt new file mode 100644 index 0000000..0f12ee2 --- /dev/null +++ b/day06a/examples/test2.txt @@ -0,0 +1 @@ +nppdvjthqldpwncqszvftbrmjlhg diff --git a/day06a/examples/test3.txt b/day06a/examples/test3.txt new file mode 100644 index 0000000..38510e7 --- /dev/null +++ b/day06a/examples/test3.txt @@ -0,0 +1 @@ +nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg diff --git a/day06a/examples/test4.txt b/day06a/examples/test4.txt new file mode 100644 index 0000000..e1d0a43 --- /dev/null +++ b/day06a/examples/test4.txt @@ -0,0 +1 @@ +zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw diff --git a/day06a/src/main.rs b/day06a/src/main.rs new file mode 100644 index 0000000..dc15d67 --- /dev/null +++ b/day06a/src/main.rs @@ -0,0 +1,85 @@ +/// --- Day 6: Tuning Trouble --- +/// +/// The preparations are finally complete; you and the Elves leave camp on foot and begin to make +/// your way toward the star fruit grove. +/// +/// As you move through the dense undergrowth, one of the Elves gives you a handheld device. He +/// says that it has many fancy features, but the most important one to set up right now is the +/// communication system. +/// +/// However, because he's heard you have significant experience dealing with signal-based systems, +/// he convinced the other Elves that it would be okay to give you their one malfunctioning device +/// - surely you'll have no problem fixing it. +/// +/// As if inspired by comedic timing, the device emits a few colorful sparks. +/// +/// To be able to communicate with the Elves, the device needs to lock on to their signal. The +/// signal is a series of seemingly-random characters that the device receives one at a time. +/// +/// To fix the communication system, you need to add a subroutine to the device that detects a +/// start-of-packet marker in the datastream. In the protocol being used by the Elves, the start +/// of a packet is indicated by a sequence of four characters that are all different. +/// +/// The device will send your subroutine a datastream buffer (your puzzle input); your subroutine +/// needs to identify the first position where the four most recently received characters were all +/// different. Specifically, it needs to report the number of characters from the beginning of the +/// buffer to the end of the first such four-character marker. +/// +/// For example, suppose you receive the following datastream buffer: +/// +/// ``` +/// mjqjpqmgbljsphdztnvjfqwrcgsmlb +/// ``` +/// +/// After the first three characters (mjq) have been received, there haven't been enough characters +/// received yet to find the marker. The first time a marker could occur is after the fourth +/// character is received, making the most recent four characters mjqj. Because j is repeated, this +/// isn't a marker. +/// +/// The first time a marker appears is after the seventh character arrives. Once it does, the last +/// four characters received are jpqm, which are all different. In this case, your subroutine +/// should report the value 7, because the first start-of-packet marker is complete after 7 +/// characters have been processed. +/// +/// Here are a few more examples: +/// +/// bvwbjplbgvbhsrlpgdmjqwftvncz: first marker after character 5 +/// nppdvjthqldpwncqszvftbrmjlhg: first marker after character 6 +/// nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg: first marker after character 10 +/// zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw: first marker after character 11 +/// +/// How many characters need to be processed before the first start-of-packet marker is detected? +use clap::Parser; +use itertools::Itertools; + +use std::fs::File; +use std::io::prelude::*; +use std::io::BufReader; +use std::iter::*; +use std::path::PathBuf; + +const FILEPATH: &'static str = "examples/input.txt"; +const CONS_CHARS: usize = 4; + +#[derive(Parser, Debug)] +#[clap(author, version, about, long_about = None)] +struct Cli { + #[clap(short, long, default_value = FILEPATH)] + file: PathBuf, +} + +fn main() { + let args = Cli::parse(); + + let file = File::open(&args.file).unwrap(); + let reader = BufReader::new(file); + let line = reader.lines().next().unwrap().unwrap(); + let res = line + .into_bytes() + .windows(CONS_CHARS) + .position(|b| b.iter().all_unique()) + .unwrap() + + CONS_CHARS; + + println!("{:?}", res); +} diff --git a/day06b/Cargo.toml b/day06b/Cargo.toml new file mode 100644 index 0000000..61dface --- /dev/null +++ b/day06b/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "day06b" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clap = { version = "3.2.20", features = ["derive"] } +itertools = "0.10.5" diff --git a/day06b/examples/input.txt b/day06b/examples/input.txt new file mode 100644 index 0000000..636557c --- /dev/null +++ b/day06b/examples/input.txt @@ -0,0 +1 @@ +gzbzwzjwwrfftfrrbvvcbcvcffpssvhhzfzbfzzrbrtrcttnthnhsnhsnnclcpctpprwwgppppchhvvctvtsvswwcdcrrdzdhzdzvddvfvfjjlldvvfllfhlfhlhghnhghrgrsggvbbhdhffzggmttjqtjjgljjwtjwjggldlzzrfrpppjsjggqrrdbbgwgtwwwtqwtqqvccjnnhrhqqsnssjbssmjjbzjjqnqnlnjncjjzzqddfqqqnqvnqncqqmsshqqccssvpvllbbfvfmmmgzgdggtjgjtjbttngtnnhhfrfddmtmtftcftthvttwzwrzrbrgrbrqbqccmmtvtqvtqqzmzwmzzzsvzvhhhqlhqlqplpggvmvwmmshhnshsjszzljlnlrnllgddqllpmllsgswwqnqlnlqqlmqqvrqvrqrppvrrqwqhqllgjgcggsllqgllghlghhbvhhcvvbddvcvwwwzdzzfjjvcczbbwccjvccmvmfvfgfmfttwrttpmtmsszccjggcssmqsmsgszzfpphghvgvvcddtltwlwnnrbbfdbbtssrvvmwwjfflmlblwlrlmlwwhrhnhqnnvdvllzblzzndzdlzzhpprbrprnrzrjjlnlnrrjddgrrwrttcstsgshszzvgvfvpfpqfpfbpbfbwbmmzvvnnqvvqppzspzpzplldqlqsqlldmlmgmcmwmsmfsfzfdzzbpzzbbcwbbtppphlhshchjjszztctpprqppszzchcqczczddscsrstsntstjsjqjjfggvccgbggqhghrhppdldnlndnpddllgplgppnlpnnmwwglghhftfrtrqtqsszrssfjjzhzfhfssflfslsmmgrrcdrdnrdnnqznndrrbtrrmhrhbhsbsgsnslsqlqnncpccplpldpldppshsdssqdsqdsqdsdsdfsddchczhczcszcscffzhfzffpbbgttdhthnhnjnwnnwrrmwmlljzlzlzdzrrcvcbbsfstfsfnfqftqffgjfjzfjfsjswswccsvcvlccshhjpjcccnfnqqmsqmmrwmwjwswgsgjsjttmjmjttpqtqwttgmgfmmnbnrnpnwppgspggwnwqnqpqmmbmmnwnllbwwdqqzsqqtgttnrtrllcwcchpchcbhbpbnpbpsptpvtvzvrzzslljddjzjjmqmmdpmddcdzzrdrqddtctppwzzwrzrvzrvrzzjtztqqsmmcncllhmlmpmhgsrtrzjhjbtfvhmzpssfbjwcdshthnmmqmfhlhwcbbllwzbwfgfvzjcqblchzqqqgcgmpnbnnblhbcpgmvsbvtcmhsghldlhqlghgtpdvjflmjsmppdsvrjlwvhmwsmfvvdnzpmtfqjqpjdctnnrlfjfvdtmvdmhsczlfsqwfrqtlqwnzdzrcdzmhvrgwnjjtqjrqljhgcffglvhnsdssqdpfrfhtjwlqzvfjmpjnqhsjvndtstqjsqgcmgqdjvfqnlmtjlvcblndprmffrgqdnnncnlfflclgqbjbmsdqsjrmzpwtbqqqqsqmgthhjfqwzvcbqwlvdbffhcvncpldmchnptbnlbhmzrrjhzvzdrvtlhsnfnfdnvhlrlrmdcpnmvdwswctcqldszlvftqtwldrhmfjmfvcgjcdjsbjqjwdtslblwhqfvgrfcpnhszqqsfwbwcmvfvccvztdmcjqfjvdvmbdtcjvtwqpwsqjtdvpvvvsdrrvngmjztgjtnpdbmtlrbrjlwsdnthgzgpssgbzzrqvgblqhrtfbflnphvhpzmdfrwqvjjvcpsmdrqwdbzlpnqpmglgqzfhctrzdpzdthqgjtvpwcrlsmqnjwgzlnqbthvfswhjtrrsrswhbmnddgzmznvppbnmtjpzpdpmpzpmsgfstzldgmrtgplwwsbztphtcvdfgsqzqwrmlqpnhvpcqpfjpbrthrtwgqlfnrqcrpvhssjmhfgpnzzvlrlcbnpmddhtdvvfrrvprqrwbhfgvvltgrhrpwsdgvrlgthbztcgcfggtcfzqtlcdhpmcvpgcszslhpfrttnrdrqpqlgdfwtccmbhfrnlbhhmrtrjmzstbqhmtphzcpcllzsnghfvlwvzzvlqrjmfsvhrnjnvldgnbqvpjsmmphhrmhqrtcncmjwbdlqtrvmhgjrjsrddcpqnjhfmczfgwzspnrjfwvfdpdlcfpvctfrlspdwwlnpbvbglzsmgfsmrshsqgcvlfrvjssrglbwvvvgpvtqshbtqmzbnglflhhldtfzqssptrbnnzdqwqtstpftdqgmmhfjdlfwtmcmtmcgcvtfhzvsbllgbchvlhrgnvvbsnrwqrlvdqlcwwlgbjrvrzgcvljqzvdngtbhpnppjrzpmbwztzvnvrbfccfgvnqvrcmpdblngcvlwjwzpbbwmnslsdjmbrwbvnjsgcmsfvzvnwbzrrlzvgdnzcqqgggvmcwczjqnrddnzhlndgzjbvtbtjqdnlvlflqnfvjdmfstpdfqsgjdslgtpgdnvvpmfwvlqbmbgdrqjhdfhlmsdtfwpscsvdzmswszjfwqtsjqpfnjjlnsspvlgzwwtvwgdzfjjljfwbvfbvpglcqcdbdpshwcqzswbwhftbfqblzpqfmqpvzdjsrcqtvjntnhmlhmzllffcjsdnwpfzdglvlrhrljbrhjhgdnfcqcrccwrbbhrvqwrzlwjrrwzsfcwsvbqsjgtgpzqwlczljrtdhtzcgsfgqssdbjjmttdtzhrqtbqjtqfwmcpdftrfjmznpscsqmtfcdpcdjwcqjvmhngcqnmtmwfttcvpwgcnhhgnnbgjdvztzhczvqljjqwcmwcbvmqqjsfnmhtbtsvsnsfwfzgdvlctrgdvbjqpgfrrlsnppmvhfbbclprlvcssnvtsgftmlpqrpjzrrphrzltbtgfwjqqvbgqjdpdgqvzppfzcbhdbbjttcdzclsphtlzfvnfqgpmqvpzrqgpdnbmsrqgsnfdwpvndzmsllgmnrlhnnzldwshtrrsrsmdncwrcjnmcjlwbbfpzcwzvldtgvbcvhnbhgjgwjcvslrfcwbqlrqldvpcgnbwbzzncncftrgbrwchfrrtnpqsjbcpzvplnbqdgtvnnrcwwfvbdzdrsfspvtbhflhsbqmlsjvfmpvjbfvcrdmgrfqsmqgfrntfqnlqbvmsqtpncjrstspbqvfmddmhwsssdcddshmwdlscttmdzljtpwhzhzhwsdnmgjstfmlnqqvzzdqpqsjdsllswmqcjtnthwqnhbscrjdstljqgncjvjvlpfrtscrzrqghrdvdnbtnpshpldcchljzrzqjlwwscnphvrwlvzttcdjdrddgmvqpvdmttdqhwpfmslzvnrwlrrdttbhctgpgzjrmdwjbcmsprwggvmdmmltldgpbfnppnrpwcnpgtblccdvbsnfvgzmjppftvndmdslfshjvndfvvzjjlzhgfmhcggttrcrbrlwrqgjpchvhnjwqnbsnmftwszhzftglrfdvvnbcbzsslgmdchtrrrqqzhllrfhwfwbbdgfpdfwssmzcfcnzmrhfdddtdhfqmctsglqbwhwpnbdzbsfbbvvthrrgjvztjjwgjcgjntrddmmdldtmvjnwjbcqwfwvfhsrpchznhlqpcttqjffbrpbftftdjzlrqchmzrfgjrqlndfwfrghtsfsblcvtjmjrbfrwdgsgzmmjpdlbwzfscfsfcdqwdwnjwjbvvbptmfrqltmnlpbtrqspwdfmhnncqgtrtmbzhfmwrbcqhmmpmvprvwrjplspcmmspldmbgpbtmqjtrfcpfhcnpjbnlhjpzflstjqfqvzcnfgvrmtplndchffzrtfrqdpdnzrspddwmpzlfchrzzfcfvmbvfnlfwtfbvnffdqhljbvwwdtmszgrjtzwqdbgvvfphcnsdgvlmslqngfmsbrztrnpjprghmjffscbnfqwrvjjjtfzrmjtzbwdsmzgmbtjzvddhngmzvflwftblbzfd diff --git a/day06b/examples/test0.txt b/day06b/examples/test0.txt new file mode 100644 index 0000000..7980a82 --- /dev/null +++ b/day06b/examples/test0.txt @@ -0,0 +1 @@ +mjqjpqmgbljsphdztnvjfqwrcgsmlb diff --git a/day06b/examples/test1.txt b/day06b/examples/test1.txt new file mode 100644 index 0000000..19fe247 --- /dev/null +++ b/day06b/examples/test1.txt @@ -0,0 +1 @@ +bvwbjplbgvbhsrlpgdmjqwftvncz diff --git a/day06b/examples/test2.txt b/day06b/examples/test2.txt new file mode 100644 index 0000000..0f12ee2 --- /dev/null +++ b/day06b/examples/test2.txt @@ -0,0 +1 @@ +nppdvjthqldpwncqszvftbrmjlhg diff --git a/day06b/examples/test3.txt b/day06b/examples/test3.txt new file mode 100644 index 0000000..38510e7 --- /dev/null +++ b/day06b/examples/test3.txt @@ -0,0 +1 @@ +nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg diff --git a/day06b/examples/test4.txt b/day06b/examples/test4.txt new file mode 100644 index 0000000..e1d0a43 --- /dev/null +++ b/day06b/examples/test4.txt @@ -0,0 +1 @@ +zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw diff --git a/day06b/src/main.rs b/day06b/src/main.rs new file mode 100644 index 0000000..7e98082 --- /dev/null +++ b/day06b/src/main.rs @@ -0,0 +1,51 @@ +/// --- Part Two --- +/// +/// Your device's communication system is correctly detecting packets, but still isn't working. It +/// looks like it also needs to look for messages. +/// +/// A start-of-message marker is just like a start-of-packet marker, except it consists of 14 +/// distinct characters rather than 4. +/// +/// Here are the first positions of start-of-message markers for all of the above examples: +/// +/// mjqjpqmgbljsphdztnvjfqwrcgsmlb: first marker after character 19 +/// bvwbjplbgvbhsrlpgdmjqwftvncz: first marker after character 23 +/// nppdvjthqldpwncqszvftbrmjlhg: first marker after character 23 +/// nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg: first marker after character 29 +/// zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw: first marker after character 26 +/// +/// How many characters need to be processed before the first start-of-message marker is detected? +use clap::Parser; +use itertools::Itertools; + +use std::fs::File; +use std::io::prelude::*; +use std::io::BufReader; +use std::iter::*; +use std::path::PathBuf; + +const FILEPATH: &'static str = "examples/input.txt"; +const CONS_CHARS: usize = 14; + +#[derive(Parser, Debug)] +#[clap(author, version, about, long_about = None)] +struct Cli { + #[clap(short, long, default_value = FILEPATH)] + file: PathBuf, +} + +fn main() { + let args = Cli::parse(); + + let file = File::open(&args.file).unwrap(); + let reader = BufReader::new(file); + let line = reader.lines().next().unwrap().unwrap(); + let res = line + .into_bytes() + .windows(CONS_CHARS) + .position(|b| b.iter().all_unique()) + .unwrap() + + CONS_CHARS; + + println!("{:?}", res); +} |
