Added 2015/04
This commit is contained in:
parent
58f56e33c7
commit
703d4c05ce
40
2015/04/4.md
Normal file
40
2015/04/4.md
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
## \-\-- Day 4: The Ideal Stocking Stuffer \-\--
|
||||||
|
|
||||||
|
Santa needs help [mining](https://en.wikipedia.org/wiki/Bitcoin#Mining)
|
||||||
|
some AdventCoins (very similar
|
||||||
|
to [bitcoins](https://en.wikipedia.org/wiki/Bitcoin)) to use as gifts
|
||||||
|
for all the economically forward-thinking little girls and boys.
|
||||||
|
|
||||||
|
To do this, he needs to find [MD5](https://en.wikipedia.org/wiki/MD5)
|
||||||
|
hashes which, in
|
||||||
|
[hexadecimal](https://en.wikipedia.org/wiki/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...`.
|
||||||
|
|
||||||
|
Your puzzle answer was `254575`.
|
||||||
|
|
||||||
|
## \-\-- Part Two \-\-- {#part2}
|
||||||
|
|
||||||
|
Now find one that starts with *six zeroes*.
|
||||||
|
|
||||||
|
Your puzzle answer was `1038736`.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars:
|
||||||
|
\*\*
|
||||||
|
|
||||||
|
At this point, you should [return to your Advent calendar](/2015) and
|
||||||
|
try another puzzle.
|
||||||
|
|
||||||
|
Your puzzle input was `bgvyzdsv`{.puzzle-input}.
|
||||||
|
|
73
2015/04/solution.py
Normal file
73
2015/04/solution.py
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
#!/bin/python3
|
||||||
|
import sys,re,hashlib
|
||||||
|
from pprint import pprint
|
||||||
|
sys.path.insert(0, '../../')
|
||||||
|
from fred import list2int
|
||||||
|
|
||||||
|
input_f = 'input'
|
||||||
|
|
||||||
|
part = 2
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 1 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
|
||||||
|
if part == 1:
|
||||||
|
result = 0
|
||||||
|
count = 0
|
||||||
|
found = False
|
||||||
|
with open(input_f) as file:
|
||||||
|
for line in file:
|
||||||
|
tmp = line.rstrip()
|
||||||
|
while found == False:
|
||||||
|
m = hashlib.md5()
|
||||||
|
text = tmp + str(count)
|
||||||
|
#print(text)
|
||||||
|
m.update(text.encode('UTF-8'))
|
||||||
|
nr = m.hexdigest()
|
||||||
|
#print(nr)
|
||||||
|
|
||||||
|
if nr[0:5] == '00000':
|
||||||
|
print(count)
|
||||||
|
#print(text)
|
||||||
|
#print(nr)
|
||||||
|
found = True
|
||||||
|
else:
|
||||||
|
count += 1
|
||||||
|
#print(nr[ 0 : 5 ])
|
||||||
|
found = False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 2 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
if part == 2:
|
||||||
|
result = 0
|
||||||
|
count = 0
|
||||||
|
found = False
|
||||||
|
with open(input_f) as file:
|
||||||
|
for line in file:
|
||||||
|
tmp = line.rstrip()
|
||||||
|
while found == False:
|
||||||
|
m = hashlib.md5()
|
||||||
|
text = tmp + str(count)
|
||||||
|
#print(text)
|
||||||
|
m.update(text.encode('UTF-8'))
|
||||||
|
nr = m.hexdigest()
|
||||||
|
#print(nr)
|
||||||
|
|
||||||
|
if nr[0:6] == '000000':
|
||||||
|
print(count)
|
||||||
|
#print(text)
|
||||||
|
#print(nr)
|
||||||
|
found = True
|
||||||
|
else:
|
||||||
|
count += 1
|
||||||
|
#print(nr[ 0 : 5 ])
|
||||||
|
found = False
|
||||||
|
|
Loading…
Reference in New Issue
Block a user