mirror of
https://github.com/rjNemo/advent_of_code_2022
synced 2026-06-06 02:26:41 +00:00
day6 part 1
This commit is contained in:
parent
9d19a95073
commit
d46cca4ccf
4 changed files with 81 additions and 0 deletions
44
day6/README.md
Normal file
44
day6/README.md
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
# 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?
|
||||||
0
day6/__init__.py
Normal file
0
day6/__init__.py
Normal file
1
day6/input.txt
Normal file
1
day6/input.txt
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
tnmmpfmfzmmnsmsjmjjbvvhnhzzfmmgpmgpgbgnnwffjhffzqqmzzbnbssrqqrnnhsnngsszsqzszhzfhzfzwzfzrrmhmghgwhhjjqwqttwhttjllrtrtzzcfzfgzznfznfzfnnbddvmvzmmfsmfsmfffhlfldlqqrnrznnhmmgqqzhhmjhmhppqbpbbngnlldvvdqvvrtrdrtrnttnppfllrbbrprpnpdplpmllhwwddqpdprddzzfccqpcqpcpcbbdhdjdjwjcwcctdcttzgzmmscmsmdmttwhwzhhnjhnhlhvhlvlglpgpmmjmgmrgrddmwddjfftfwflfslffqtfqttpftppflfmmhvhvcvbvhbhggpbgbppvdpvpvfppbwwsnnhphllbdbnbvbmvvzffvsffdldmlmtmccnlnbnjbnjnhhbfhhgzzlwlfflzffdccggdcgcjjhffjfgfgcczjccvwcvvqgvvqvllqzqmqllhjjqnqggttsdddjgdjgjzzrgrfrbrssrgrgdgrgbbssmdsdfddsndnsdnsdnnmqqsspqqmrqqpmmsjmmszzqvqrvrzznnjdndtntfnttgtctqtwwnwswrrthrttsdttlhlvvdzzgqgttnppjpljplpgpvgvqqvppzmmqggtjgtgstslltjltjjgcjcmjmsshvvtppgmmlslqqshqshsllbggfpgffdsdgssncchctcwwtllgqlqblqlqvvmsvmmwnnzppqllsttgmttftvfvjjrzzswzzjvzjzljjchcshcscbbrdbrbcrrnvvtctntvtvbvjvqjqggsrspsprrbgghdghhmwwldldzdttrvrnrfftqtftrrdsszlzvvbtbffftzzrzqrrhjhghhwbhhsjsfsttdjdjnjhjmjpmplplrrdjdcdjdbjblllbqlqdlqlpqptppdhhqmqfqhqhchwwqjqfjqfqhqshsmswsbbvssdspdpsdssstntltrrgnnmttgmmsjjrlrnlrnrnwrwfwlfltlzllcjcmjcjpjhphcpcwppmvmjjzbzvbbfnfcflfddntddbmmmhnnsrnrrvdvnvcvwvcwvwrrqwqccqmmswmmjrjmmwjmjfjhwrtbjzdvlgrjmvzfmhcqsncvlhzzncjlbvcwrdwjmqjcnptqslvfzpsvltgzsvjdsjrppdrmqrbqwhddfhnftfblspsrhtdtjwdnhbcbtlwlvccsfscvczzrrqmwbwbdmwgzqntvflppqvppwrhnvtlsbzqglhsfdgssqzdtjdpwrrhbnbtwhhnmnlwfwlqffjjrndbpwwsvdrhddbjnnqzmtpvvtwbcpndjzlhcfrrdvmljswjzvmfqcdsgqwclqshwrmblszdvsnrpdgnllmlchzdjlrrpndmmgddjqgjqrhwfbwddqdfbvptrmzhtsqfsfswpnvmtswqprjhbzvntgrlzthhnqbtpplqpvcfnpgdtbhqbhflltbbtmmhcwztslmpznttmssclhmnbsbrwlblrbsdfmnpqbwwmsncvzmpqwhzjgcgdrzvglgdtswmstdhrprdjfmqtjlmplbjtzcgnrwpdvpfjjfwjfnnpmdtwtqsgfndngsbmcwjtglqwtfrclbczfcmjtgcwszhzrbcphrhwmhcwghjznzthnwpljjltdlvqtffsrbmwcsvrdmqqggbznnlzbbqtgspqvnjpbdhtzmgttrcwwszwpgdrcnfqtgrgqdrctlzwtdwqppbhnwgldnqltznnfpbfqtgmmwpcqnndbgmrrtgtvnmlfcwsldchjnnqfrhpzwtclrzftsqllgvpqbgmfjdhqjttwcvbpvfqsvhbhhtwnqnbgndbtzhcvgglbhghbzrbrmdllmgfgttqmhtdnwrpwllhnghrjctrbzrcpnjnctvmrlpjhftnfbczrjrnnbqplplcrbngbhvmmvcffmgvbhjzbhcmtwmwgmjmwjvvlqfldswpntjnsjvmdlbzqqlgbwspwvmnwtwjbczmwplrhmjgsppnmtwmvsfwnsgddgwqcvpftcpzrhpldnwmcjgtjmljjbcmjcqdbwczndnjnjgrmtjrqnnjndzqdqpcgdqptdbrqftnwrgqmrzrvsfmmmbpltlncvtgrjfjmvtgwqphczwjhdrdwtfvgztbhrndvpcbgfjfvmrrljwrvcrtdmtjndfnwgcnfrzgsnjpztbwwsbvqfnpjctgrhsflhnzbbsfqbnmtnvrmjzsbjfndvttpvpfjhqntflgbfnzcclcwmhbsgqfjdcgsvrhtstspfzgvgglgddqmclsmzgzgtncdsfmwdvtcsgwvbzjvclwppqdjgfcrcbzcwbdhrnssjbmnmfmwthdrnmlfhqlddwqrdhsdvdcsmcgjsgcmpnhlbnqftpdjswtmpbznlcrhtswgnmwjcdfmljdngzfsmlzjjnzmfzshmztdbdmcqwmlvcrzgpmbjqcghclwvdbrhgvwqchnndftnrtptmctdlhmfjvpzrpccddfpcdwmzqfhnsqzrvwblzfhcjdcjfctczwqrcbjnrpdcbbnsgnlvqqmnsfgsqschjlbzhhsrbvdbfrhvsgrlzwncgwpdbvmblgzbwbcbgqfwmdmgcrbbjfcvmqgztqpptdhwmvmsdqwplpgcjzgqzdrftzhqbltvhrmlrfffcgfpqzwrrbbtlsjgmtbjvtnmhwdpjptjwfwgjgvbfqwmflrrqzlzdcmtlnptdrpcpdnswcfscnndnrfbgwvvncdjgsdpbwptdtvrqlmrhmvvcwblhhzbjdpsbszhrftfbcgwhwrgglnjzqdhcqnvlhgqjhnddvrslhntssptsbhmqwwqqnbvfmcbgpvgjbrttnvlljdbtfplgmbwtcbcdtqdpqqdvhbmpmtszwpzblcfrtznhhtcljtdlhjdbnlhvwgjsmgvrslrfwnmzwlstpgltvrgnpdqztvfnvdhdtwwqdfsmtpbpdclsbnwcgjzchjcsjmvhbjshmjjlpgdzcgbmmchwmcsddsvhsnpqtcpnhqnbvwgwqhtjbqncgwwftnrzsbsjtvqmjzqvvncmncwflcfpcjqgdtbsmjzzsdjfvhnqbgjhmfgjghwscthbfmbndltbqzwpqtmrswvprpmgwqnqpfnmffrpdlpfqmhrthppzvzwbrtjvwvjndsqdlqtbpqwfcttggnjmcqqnmjwfhfjgcvlnmtlgbdvmctzlwbfgnflwtsflgnfbnfbhhdgjctzvvmrhdsmvmmtnqwtszmqcpsbrqrgjfrzctcbzmtdlhwjtfdqbtthdnqcrpwrhcrvjstbhpltvgmvpmvfjstgzjsgzprzcqzqztvvdcnrrqwrhddcrhhncdrlwzwqlnbbzcfmqtnwgfdscmrbwnbldlfrqchzdnlnmwncgrzdclnvcvplgwjsbzmbnnsdrsfhrlssvncnwmcrjdjbjpdtrrvlnbjvspfqbwdpcnnpjzfnmbhcdhlmdgbpvbzmfltzstnznfctcdzhbfsvnfbsjqzmwfllhtrsfghlrpjgrgzgchlwrdmqzbrncsvnwhfqmwjbnvjctzphcsftqsbmwntgvjqhhvwndvmfmjhhhmfdvrlhpvzmmhrbhbddqbdmgqqsvddsswmzqcjmvhztfqpchzpwhdshzjlmbmnsgzqhbnmrshwvtmgmgndtddpfwsjrrjdhncdhtlczdvlbvqplttnzrblthlcffdtfsdtpwzdgbldvnsttvpzmbgnqddrszftcpwrgmfzhjjvghpntmzcttcsnrjnfpqzqqqljhzlrpgwngllqjwnwfcsphqplgbzmfqfgbfsqpsrntszqbcqnhctsnbfshmlbwfflrwwsjwqwfqlgnftdwmctmclwjhjhbsspqldlshbmpbgrftpnbpsqldhrrbdqwfwvfhclrlfdjfmzgmptdjdcsplcspznfjrfhtsjndwpslrdgnllllwqjgznrhswfssdlvdpmwwgmstqbhfmdhtzvzzvhwzbrrvvsl
|
||||||
36
day6/main.py
Normal file
36
day6/main.py
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
from common.file import read_data
|
||||||
|
|
||||||
|
test_cases = [
|
||||||
|
{"input": "mjqjpqmgbljsphdztnvjfqwrcgsmlb", "expect": 7},
|
||||||
|
{"input": "bvwbjplbgvbhsrlpgdmjqwftvncz", "expect": 5},
|
||||||
|
{"input": "nppdvjthqldpwncqszvftbrmjlhg", "expect": 6},
|
||||||
|
{"input": "nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg", "expect": 10},
|
||||||
|
{"input": "zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw", "expect": 11},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def end_of_start_marker_1(data: str) -> int:
|
||||||
|
# use 2 counters
|
||||||
|
i = 0
|
||||||
|
j = 4
|
||||||
|
while j < len(data):
|
||||||
|
# read data by window of 4 characters
|
||||||
|
packet = data[i:j]
|
||||||
|
# check if all are different
|
||||||
|
if len(set(packet)) == len(packet):
|
||||||
|
# if yes return end counter
|
||||||
|
return j
|
||||||
|
|
||||||
|
i += 1
|
||||||
|
j += 1
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
for test in test_cases:
|
||||||
|
res = end_of_start_marker_1(test["input"])
|
||||||
|
assert res == test["expect"], f"{res} is not the right value, want {test['expect']}"
|
||||||
|
|
||||||
|
dataset = read_data()
|
||||||
|
print(end_of_start_marker_1(dataset[0]))
|
||||||
Loading…
Reference in a new issue