| @@ -11,31 +11,35 @@ def main(lines): | |||
| Ignore any doubles or triples past the first set. | |||
| At the end, multiply x2 by x3 to get the checksum. | |||
| """ | |||
| x2, x3 = 0, 0 | |||
| for line in lines: | |||
| chars = {} | |||
| gota2, gota3 = False, False | |||
| for char in line: | |||
| if char in chars.keys(): | |||
| chars[char] += 1 | |||
| else: | |||
| chars[char] = 1 | |||
| for k,v in chars.items(): | |||
| if v == 2 and not gota2: | |||
| x2 += 1 | |||
| gota2 = True | |||
| if v == 3 and not gota3: | |||
| x3 += 1 | |||
| gota3 = True | |||
| if gota2 and gota3: | |||
| break | |||
| print("Totals: x2 {}, x3 {}".format(x2, x3)) | |||
| print("Checksum: {}".format(x2 * x3)) | |||
| x2, x3 = 0, 0 # independent counters. Count how many lines had at least one pair/triplet | |||
| for line in lines: # iterate over each line in the input file | |||
| chars = {} # dictionary to hold character: count values (e.g. a:1, b:2) for the current line | |||
| for char in line: # iterate over characters in each line | |||
| if char in chars.keys(): # if we've seen the character before in this line | |||
| chars[char] += 1 # increment its count in the dictionary by 1 | |||
| else: # but if we haven't | |||
| chars[char] = 1 # then add it to the dictionary | |||
| gota2, gota3 = False, False # Do we have at least one pair/triplet in the line? | |||
| for k,v in chars.items(): # iterate over the dictionary | |||
| if v == 2 and not gota2: # if the count is 2, we have a pair; if we didn't already have one, then | |||
| x2 += 1 # increment the "pair" counter by 1, and | |||
| gota2 = True # track that we've seen one so we don't accidentally add any more | |||
| if v == 3 and not gota3: # if the count is 3, we have a triplet; if we didn't already have one, then | |||
| x3 += 1 # increment the triplet counter by 1, and | |||
| gota3 = True # track that we've seen one so we don't accidentally add any more | |||
| if gota2 and gota3: # if at this point we've seen both a pair and a triplet, | |||
| break # we don't need to check any more characters, so break the loop | |||
| print("Totals: x2 {}, x3 {}".format(x2, x3)) # print our totals | |||
| print("Checksum: {}".format(x2 * x3)) # print the totals multiplied, which is our checksum | |||
| if __name__ == "__main__": | |||
| lines = [] | |||
| with open("02in.txt","r") as f: | |||
| for line in f: | |||
| lines.append(line.strip()) | |||
| main(lines) | |||
| lines = [] # an empty list for the lines in the input file | |||
| with open("02in.txt","r") as f: # open the file. "with" means we don't have to close it | |||
| for line in f: # iterate over the lines in the input file | |||
| lines.append(line.strip()) # strip the newline character, then add it to the list | |||
| main(lines) # and pass the list to our main function. | |||