diff --git a/2021/8/main2.py b/2021/8/main2.py new file mode 100644 index 0000000..dbec45d --- /dev/null +++ b/2021/8/main2.py @@ -0,0 +1,85 @@ +# IDEAS(dev): +# - You might not have to determine all the positions if the numbers to decode don't use them +# e.g. while(number to decode NOT IN numbers decodable) { do everything } +# - + +# NOTES(dev): +# - It looks like the codes are NOT always printed in the same order. For example, if one shows up +# as 'cg', it might also later show up as 'gc' in the same line. +# 0: 1: 2: 3: 4: + +# aaaa .... aaaa aaaa .... +# b c . c . c . c b c +# b c . c . c . c b c +# .... .... dddd dddd dddd +# e f . f e . . f . f +# e f . f e . . f . f +# gggg .... gggg gggg .... + +# 5: 6: 7: 8: 9: +# aaaa aaaa aaaa aaaa aaaa +# b . b . . c b c b c +# b . b . . c b c b c +# dddd dddd .... dddd dddd +# . f e f . f e f . f +# . f e f . f e f . f +# gggg gggg .... gggg gggg + +# initialize shared data: +possibilities = {} +all_possibilities = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ] + +# functions: +def ResetData(): + possibilities.clear() + for letter in all_possibilities: + possibilities[letter] = list(all_possibilities) + +def ParsePossibilities(text): + text_len = len(text) + if(text_len == 2): + good_letters = [ text[0], text[1] ] + print(good_letters) + + # first, get rid of the good letters from all the other positions + for letter in ['a', 'b', 'd', 'e', 'g']: # all the positions not used by #1 + for to_remove in good_letters: + possibilities[letter].remove(to_remove) + + # second, get rid of the other letters from the positions used by #1 + for letter in ['c', 'f']: + to_remove_list = [] + for l in possibilities[letter]: + if(not (l in good_letters)): + to_remove_list.append(l) + for to_remove in to_remove_list: + possibilities[letter].remove(to_remove) + +total = 0 +with open('example_data', 'r') as fp: + # NOTE(dev): We assume all lines are the same length + for line in fp: + ResetData() + split_line = line.split(' | ') + data = split_line[0].split() + print(data) + codes = split_line[1] + for val in codes.split(): + if(len(val) in [2, 3, 4, 7]): + total += 1 + + for text in data: + ParsePossibilities(text.strip()) + + asdf = possibilities.items() + asdf = list(asdf) + asdf.sort() + print(asdf) + +# part 1 answer: +print(total) + + + +# # DEBUG(dev): +# print(possibilities)