#! /usr/bin/env python

# --- Day 4: The Ideal Stocking Stuffer ---
#
# Santa needs help mining some AdventCoins (very similar to bitcoins) to use as gifts for all the economically
# forward-thinking little girls and boys.
#
# To do this, he needs to find MD5 hashes which, in hexadecimal, start with at least five zeroes. The input to the
# MD5 hash is some secret key (your puzzle input, given below) followed by a number in decimal. To mine AdventCoins,
# you must find Santa the lowest positive number (no leading zeroes: 1, 2, 3, ...) that produces such a hash.
#
# For example:
#
# - If your secret key is abcdef, the answer is 609043, because the MD5 hash of abcdef609043 starts with five zeroes
#   (000001dbbfa...), and it is the lowest such number to do so.
#
# - If your secret key is pqrstuv, the lowest number it combines with to make an MD5 hash starting with five zeroes
#   is 1048970; that is, the MD5 hash of pqrstuv1048970 looks like 000006136ef....
#
# --- Part Two ---
#
# Now find one that starts with six zeroes.

import hashlib


SECRET_KEY = "yzbqklnj"


def find_md5_with_prefix(prefix):
    i = 0
    while True:
        i += 1
        md5 = hashlib.md5("{}{}".format(SECRET_KEY, i)).hexdigest()
        if md5.startswith(prefix):
            return i


if __name__ == "__main__":
    n = find_md5_with_prefix("000000")
    print n

80d91d0cb67523c54782f58469d8b9c57cb589b8
#! /usr/bin/env python

# --- Day 4: The Ideal Stocking Stuffer ---
#
# Santa needs help mining some AdventCoins (very similar to bitcoins) to use as gifts for all the economically
# forward-thinking little girls and boys.
#
# To do this, he needs to find MD5 hashes which, in hexadecimal, start with at least five zeroes. The input to the
# MD5 hash is some secret key (your puzzle input, given below) followed by a number in decimal. To mine AdventCoins,
# you must find Santa the lowest positive number (no leading zeroes: 1, 2, 3, ...) that produces such a hash.
#
# For example:
#
# - If your secret key is abcdef, the answer is 609043, because the MD5 hash of abcdef609043 starts with five zeroes
#   (000001dbbfa...), and it is the lowest such number to do so.
#
# - If your secret key is pqrstuv, the lowest number it combines with to make an MD5 hash starting with five zeroes
#   is 1048970; that is, the MD5 hash of pqrstuv1048970 looks like 000006136ef....
#
# --- Part Two ---
#
# Now find one that starts with six zeroes.

import hashlib


SECRET_KEY = "yzbqklnj"


def find_md5_with_prefix(prefix):
    i = 0
    while True:
        i += 1
        md5 = hashlib.md5("{}{}".format(SECRET_KEY, i)).hexdigest()
        if md5.startswith(prefix):
            return i


if __name__ == "__main__":
    n = find_md5_with_prefix("000000")
    print n
