From a4a527bd20a3ad430834434abc3109fb5a11cd76 Mon Sep 17 00:00:00 2001 From: MelKam Date: Tue, 6 Dec 2022 17:36:32 +0000 Subject: [PATCH] 2022_06: rust solution --- .vscode/launch.json | 230 ++++++++++++++++++++++++++++++++++++ 2022/day_6/input.txt | 1 + 2022/day_6/rust/Cargo.toml | 8 ++ 2022/day_6/rust/src/main.rs | 46 ++++++++ Cargo.lock | 4 + Cargo.toml | 3 +- 6 files changed, 291 insertions(+), 1 deletion(-) create mode 100644 .vscode/launch.json create mode 100644 2022/day_6/input.txt create mode 100644 2022/day_6/rust/Cargo.toml create mode 100644 2022/day_6/rust/src/main.rs diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..c46707f --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,230 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "lldb", + "request": "launch", + "name": "Debug executable 'rust_2022_01'", + "cargo": { + "args": [ + "build", + "--bin=rust_2022_01", + "--package=rust_2022_01" + ], + "filter": { + "name": "rust_2022_01", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in executable 'rust_2022_01'", + "cargo": { + "args": [ + "test", + "--no-run", + "--bin=rust_2022_01", + "--package=rust_2022_01" + ], + "filter": { + "name": "rust_2022_01", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug executable 'rust_2022_02'", + "cargo": { + "args": [ + "build", + "--bin=rust_2022_02", + "--package=rust_2022_02" + ], + "filter": { + "name": "rust_2022_02", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in executable 'rust_2022_02'", + "cargo": { + "args": [ + "test", + "--no-run", + "--bin=rust_2022_02", + "--package=rust_2022_02" + ], + "filter": { + "name": "rust_2022_02", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug executable 'rust_2022_03'", + "cargo": { + "args": [ + "build", + "--bin=rust_2022_03", + "--package=rust_2022_03" + ], + "filter": { + "name": "rust_2022_03", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in executable 'rust_2022_03'", + "cargo": { + "args": [ + "test", + "--no-run", + "--bin=rust_2022_03", + "--package=rust_2022_03" + ], + "filter": { + "name": "rust_2022_03", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug executable 'rust_2022_04'", + "cargo": { + "args": [ + "build", + "--bin=rust_2022_04", + "--package=rust_2022_04" + ], + "filter": { + "name": "rust_2022_04", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in executable 'rust_2022_04'", + "cargo": { + "args": [ + "test", + "--no-run", + "--bin=rust_2022_04", + "--package=rust_2022_04" + ], + "filter": { + "name": "rust_2022_04", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug executable 'rust_2022_05'", + "cargo": { + "args": [ + "build", + "--bin=rust_2022_05", + "--package=rust_2022_05" + ], + "filter": { + "name": "rust_2022_05", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in executable 'rust_2022_05'", + "cargo": { + "args": [ + "test", + "--no-run", + "--bin=rust_2022_05", + "--package=rust_2022_05" + ], + "filter": { + "name": "rust_2022_05", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug executable 'rust_2022_06'", + "cargo": { + "args": [ + "build", + "--bin=rust_2022_06", + "--package=rust_2022_06" + ], + "filter": { + "name": "rust_2022_06", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in executable 'rust_2022_06'", + "cargo": { + "args": [ + "test", + "--no-run", + "--bin=rust_2022_06", + "--package=rust_2022_06" + ], + "filter": { + "name": "rust_2022_06", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + } + ] +} \ No newline at end of file diff --git a/2022/day_6/input.txt b/2022/day_6/input.txt new file mode 100644 index 0000000..af8b8a3 --- /dev/null +++ b/2022/day_6/input.txt @@ -0,0 +1 @@ +dvgdvvbpbtbhbdhbhmmmcctmcmccggtrgghnhmnnqffpcprrqssnhsnhnshhsrsqqhchcdcfcqqcncrrzpppmzpzzhjzzzvrvnnpbpzzswzwswnngjgjgcjcfcllhffjbfjfhhppvnppfmfcmmcnnmnfnzfnzffphpnnnsvswvvnwnfntftjftfvvztzqzhzddttjpjbpphhlnnwgnwggdmmczclczzqddlcdldrlrccfflwwgqwwrjwrwzrrsdrrfssddcmmvrvlvhvfhfzhzbhbzzdmdvvsppwswmwdwjjzmzhhvghgthghvvtcthcttgsttpqpbbhthppzznntpnttshtshthhwrrgbbjzbjblblzbllcblcblbvvqfqqnjqqhfhftftwfftvvmddgzzmdzmdmtttttqmqmnqmqpmqpqqjlldpllfvlffjdfjjvlvjjjjbsjbjnnhmnhnrrwtrrfvvtppwmmpnnjbnjjcncjcttrcrjjlqjljccpzccvqvzzscctgccsmmnznhzhnnjggmjgmgjgtgtlgglhhrlhhrvhvrvtvvlvvwmmrjjzqqbzqqtgtzgttmgggwpgwgbwggwwprwwvswszznczncnccjnccjdjdjssqmmgcmcjmmhwhswhwdwrddtccmzmjmsmrmrddhrhhqbbspbsppqvqmvqmmclcddzjzvvslsffdhhqgqrqjrqjqjrrmpmrppcjpjffwhfwwppqvvzjzqqtftgfghgpglgnglldlvvwzwmmfzzhzmzhhswhhnvhvphpmphphrrwwfccmgmqgmmzgmgngznnzbzttjwttgngzzdndffwhfwhhlmllwqlwwgfgfpfnnldnldndbdcdddmbdmbbdpbpwbpptrrpggtrtrnttsmmcrmmlhltlgttblttbhttjzzvnnsbsqbqwbbtwtmtbbcjcljjslscswwglgqlgqgmmcpctcrttprpjjfvjfjqqljlvjljnnfhhfzhzmhmghhjnhjjbppmqqwlwswwgbbzszspzsppcscvvnhndhdwdmdrdssqrqdqsddnbnpplqppjbjdbdqdcccffsnntzntnmnlnbbrzzzvgvvqttbbzpbzpzdpdvppjmjpjbbdrbbgwgffzpzzjddmldlwwjdwwscwcfccnznmmfttvvmpmvpmvmcvmmjmwjwbbwqwjjzqjzjbbjqbjqqqthhsssmrsshvvprvvwccjlcctwwmgwgpwgpgcpptrppjppltlhthctttfptppwgpwprpbbqzbzznssfcsffbnnndffqmmqwmmpvvpvdppjqqttfpttjccbnbddvtdvddlsstjtccphchsswbbrqqgtqgqpqjqnjjvccwscwssjwjttqvtvmtmjjghghccpnpsplslmmfjfjtffgtgrtrftfhttpsttzzmhmllwqwhhnffdpffwbwnnbrrfbrrnjrjlljqqnjqnqqwlqqbbbtvvwgvgbgddpwdwvdwvdvvwzvwwtzwttppnttqccjtjrttqbbprpsrpssfjsffmdfmfbmbggjhggcjgcgvvjqqbhbllhrlhlclzzplpqqdtddrhhfssdvsvrrscsjjnwjjfpjfffcbfcfmmlpmphhhlpltptcpttppfssppgwppjgjnnblbhbtbrbgbpplnlvlsvlvwvwpptmtsswzswsnscsfcsfsfggzhghvvgbbfddgbbrmrtrqtthvhzhzthtbtjjcljjlcllzglzzdszdzjzjfzzzblbslbljjdnndvvnwnqnwqqscscmczcwwvrrlclttbtdtvddbrddvllnppvpmvmbbvfvttfcttggwgffrfwwwpwcpchppcrrgprgprgrjgjdgdgvddzndzdbzzswsvvtgtccrrnggbwggpjpnnsjjwfjjqfqvffrrhdrrsfrfjjfzfdzzqfqwbztszjqtttfdqvzmznzjlsjnwdthtwdtfslgdmgfpwsqcsqdhnsnsmghttfvlzqgspzdtlstdmthzftwmnqrznldpmwqbtthggjwcgjjmbpqgrnwspggjvrlcmtvpchmqhlwwtswqgpdjpbznqnssqhdjzgbjnfmgssrvnmmcvvhgmcvqbfdhgrhnqqzdmttmdzwgtprzqhplwnhhmlrvcbwpllqprtltdvqrwhvwzvlqsvfqsfjwmrnzlqpdgfpmtfdczqdnfjjbjmrdnffcmtwlzcmvnwmlpmqhvggdhptnzlvzwzwjbcszsnzgpwncfgvzfgbzwclvrbmllzpltzwjrftmppsfwhvvvhvqjtstnnczgtdbmpjjsscbdwplftgcgmtrnrnzplzhghrqgdtjwntwfstjwqjjrlhtwhnfqwfqgsjptjfpsrbnvvlgsltnvtfvscttwvrfzblzmfmnfrlrnzrrzhclggtntpjbbcphdvrfhnrtzvdmwbwgbftgzwlcqztghdhdmzwlmjbgptfnnzbmwsnzlzcpprqzmbbdsplmhpgmzthqcsfjcnfbfvsdsqzfvfcnpgqsvpgwsdbgjmsglrwmfjfpddczwvgdppfmrtszbtfdwbmlmzhqvvwmvlzvjfpffjnhwwhssfjnbzlqwqvjbjbhfntmhgswntdpbzlwwfbdbhrfhzfjsjbtlrqhlnrpfbwtpmrfvbhlmmsgtvcmrqmdpwvhqfqpgmfgnfrbvprhprtnpzjcnltndfsvjgndwblhwphtpsmnczgbtpwdvjsrctjbvbfslvslzlwbtstqvgcrqmfphwztpjqdmvcjpjqmjbdndfpzwsfwplchsmqwwbggptjdtztszmpfwgfwnqpdwfcpgrrhmfglsctjllflfltbcfvcpfcnqbwrvzmcmjpwptgsrlbrdchngwsdstfmcbrqvdsvvbnppdmnfwcgvpjjzqwcpvqfncvqlsfnjzprvhpgqscshqwsttdrsmqjfwlhcwlvnzvgvclqfjdgctvsrbwzflcldmrwlfhbgdtstqsqlblndnpgqlfbjzslcpcwvdwdffshhrzvhqwdsdmwtmtvcnrhmstvrnscppmbpmjbfjhljmsjnbjlhjhmnmcvvfgbdrblwbzrcctrjwjjwjtgnfjhhqbsmdjvdrdjtjbscfrsljnvqjlgjwqrvfmdttsvqjwdbswdtcfqsrpbvzrbsdqlqfjlrgcwzbqtqrpsrfcmbzcvjngcsmvqlbnghllcqcztbtvdrfcmpgfdprghsmbjvzbdnrdqnjdzslclgdsqglvpvcjpzqfwztlssljtmcdfcqdnqzwcttvpqfdpvzlhjfvvsgphgqrmzppvnjznqmdzfnfztjppstjfwddftcpcjnssznqbrvlvrzfhbvsjrwghttwlwfrptsvsrwfnvjtthwrppbngbgqvbsdgcrjcwjjljcwptrvgmbjpjtdbmhmzcfhzbsbrmzhdsrjbbmnwbsntpffdrrlgcrcgbcfwvlpmrzvsmvpjthtdjdvcspdsdvshlrwzcqnjmcnrgzbqzhfzbmtrvzzmjwbnjggtrtgcsnrmzbtjzgdmffdntspdhgnvgrmpbtnsspcqhsrvppjbrmdbggjbftnnbrgdsmdscqthdzflldfnplqccthpwccsfsnstttwztqnmnfshntqngmcndbsbftmgnhhwjvhchdfqzzgpdnfgvnjzjzfdzvsvtdqqcftrvmdcszcwpfrbcsmlqqfprrjgncwcvcngmrnwntcvzzlnwrhrznnldslhqdscbgsrqnvnmdtqvlttwqljmvbpbfldtbgzhvwzghnhwrwdqphhhgjpnmtlcmvfbdffnsvcswtmffzsrvczbntfpdsmwbqphvvcflpwgsrmjhrljlvzdgrcwpfphmvtwqwhjmrvmjzjlzlbflhzrdrzcdwhblpqwjljbvprddtvnccmchgctncwbpnmlqppfmhwchvjvpmblqhccfhlprdrczdfhmnsqhddbqlppgsnvhhfrwhqhfdpvsfcvzbqhgswtmnpmzrwsvnmztnqwdrhllssmgtzbztsprpsj \ No newline at end of file diff --git a/2022/day_6/rust/Cargo.toml b/2022/day_6/rust/Cargo.toml new file mode 100644 index 0000000..c3568c3 --- /dev/null +++ b/2022/day_6/rust/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "rust_2022_06" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/2022/day_6/rust/src/main.rs b/2022/day_6/rust/src/main.rs new file mode 100644 index 0000000..b0c2ebb --- /dev/null +++ b/2022/day_6/rust/src/main.rs @@ -0,0 +1,46 @@ +fn find_start_of_packet(data: &str, marker_length: usize) -> usize { + if data.len() < marker_length { + return 0; + } + + let bytes_data = data.as_bytes(); + let mut curr_index = 0; + let mut unique_count = 0; + + return 'outer: loop { + let active_byte = match bytes_data.get(curr_index) { + Some(b) => b, + None => break 'outer 0, + }; + + let max_marker_index = curr_index + (marker_length - 1) - unique_count; + + 'inner: loop { + curr_index += 1; + + if *active_byte == *bytes_data.get(curr_index).unwrap() { + unique_count = 0; + curr_index = max_marker_index - (marker_length - 2); + break 'inner; + } + + if curr_index == max_marker_index { + unique_count += 1; + + if unique_count == marker_length - 1 { + break 'outer curr_index + 1; + } + + curr_index -= (marker_length - 1) - unique_count; + break 'inner; + } + } + }; +} + +fn main() { + let data = include_str!("../../input.txt"); + + let result = find_start_of_packet(data, 14); + println!("{result}"); +} diff --git a/Cargo.lock b/Cargo.lock index 47f0905..7bea00e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21,3 +21,7 @@ version = "0.1.0" [[package]] name = "rust_2022_05" version = "0.1.0" + +[[package]] +name = "rust_2022_06" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 811adef..6ae8a70 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ members = [ "2022/day_2/rust", "2022/day_3/rust", "2022/day_4/rust", - "2022/day_5/rust" + "2022/day_5/rust", + "2022/day_6/rust" ] exclude = [ "2022" ] \ No newline at end of file