Day 4 - Advent of Code 2015

Working solutions for the day 4 puzzles.

Part One

""" day_04_01.py """

# usage: python3 day_04_01.py < input


from hashlib import md5


key = input()
output = ''
i = 0
while output[:5] != '00000':
    i += 1
    value = md5()
    value.update(bytes(key + str(i), 'utf-8'))
    output = value.hexdigest()
print(i)

Part Two

""" day_04_02.py """

# usage: python3 day_04_02.py < input


from hashlib import md5
from multiprocessing import Pool


def md5sum(number, size):
    """ does md5sum have size leading zeroes """
    value = md5()
    value.update(bytes(key + str(number), 'utf-8'))
    return value.hexdigest()[:size] == '0' * size


def md5sum_6(number):
    """ does md5sum have six leading zeroes """
    return md5sum(number, 6)


key = input()
step = 1000000
i = 0
while True:
    with Pool() as p:
        result = list(p.map(md5sum_6, [i + j for j in range(step)]))
        try:
            index = result.index(True)
        except ValueError:
            i += step
        else:
            print(i + index)
            break