Sean McLemon | Advent of Code

Home | Czech | Blog | GitHub | Advent Of Code | Notes


2016-12-06 - Signals and Noise

(original .ipynb)
from collections import defaultdict

puzzle_input_str = open("puzzle_input/day6.txt").read()

test_input_str = """eedadn
drvtee
eandsr
raavrd
atevrs
tsrnev
sdttsa
rasrtv
nssdts
ntnada
svetve
tesnvt
vntsnd
vrdear
dvrsen
enarar"""


def error_correct(signals, sort_descending=True):   
    positions = []
    for n in range(len(signals[0])):
        positions.append(defaultdict(lambda:0))
    
    for signal in signals:
        for i, c in enumerate(signal):
            positions[i][c] += 1
            
    word = []
    for position in positions:
        word.append(sorted(position, key=lambda x:position[x], reverse=sort_descending)[0])

    return "".join(word)


def part_one(input_str):
    lines = input_str.split("\n")
    return error_correct(lines)


assert "easter" == part_one(test_input_str)

print("part one:" , part_one(puzzle_input_str))
part one: bjosfbce
def part_two(input_str):
    lines = input_str.split("\n")
    return error_correct(lines, False)


assert "advent" == part_two(test_input_str)

print("part two:", part_two(puzzle_input_str))
part two: veqfxzfx