[py] Port 2016_05
This commit is contained in:
parent
2038c5ccde
commit
5caa178c1c
3 changed files with 54 additions and 55 deletions
|
|
@ -1,54 +0,0 @@
|
||||||
import hashlib
|
|
||||||
|
|
||||||
# PART 1
|
|
||||||
|
|
||||||
def chars(start, amount):
|
|
||||||
n = 0
|
|
||||||
chars = []
|
|
||||||
while amount > 0:
|
|
||||||
text = (start + str(n)).encode("utf-8")
|
|
||||||
h = hashlib.md5(text).hexdigest()
|
|
||||||
if h[:5] == "00000":
|
|
||||||
print(h, "->", char)
|
|
||||||
char = h[5]
|
|
||||||
chars.append(char)
|
|
||||||
amount -= 1
|
|
||||||
n += 1
|
|
||||||
return "".join(chars)
|
|
||||||
|
|
||||||
# PART 2
|
|
||||||
|
|
||||||
def chars_2(start, amount):
|
|
||||||
n = 0
|
|
||||||
chars = [None]*amount
|
|
||||||
while amount > 0:
|
|
||||||
text = (start + str(n)).encode("utf-8")
|
|
||||||
h = hashlib.md5(text).hexdigest()
|
|
||||||
if h[:5] == "00000":
|
|
||||||
char = h[6]
|
|
||||||
pos = int(h[5], base=16)
|
|
||||||
if pos < len(chars):
|
|
||||||
if chars[pos] is None:
|
|
||||||
chars[pos] = char
|
|
||||||
pw = "".join("_" if x is None else x for x in chars)
|
|
||||||
print(h, "->", char, "in position", pos, "->", pw)
|
|
||||||
if None not in chars:
|
|
||||||
return "".join(chars)
|
|
||||||
else:
|
|
||||||
print(h, "->", chars[pos], "already in position", pos)
|
|
||||||
else:
|
|
||||||
print(h, "->", "invalid position", pos)
|
|
||||||
n += 1
|
|
||||||
|
|
||||||
def main(hashstart):
|
|
||||||
print("Previously calculated")
|
|
||||||
print("Part 1: 4543c154")
|
|
||||||
print("Part 2: 1050cbbd")
|
|
||||||
print(f"Solutions")
|
|
||||||
pw = chars(hashstart, 8)
|
|
||||||
print(f"Part 1: {pw}")
|
|
||||||
pw_2 = chars_2(hashstart, 8)
|
|
||||||
print(f"Part 2: {pw_2}")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main("ojvtpuvg")
|
|
||||||
|
|
@ -2,7 +2,7 @@ import sys
|
||||||
import argparse
|
import argparse
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from .y2016 import d01, d02, d03, d04
|
from .y2016 import d01, d02, d03, d04, d05
|
||||||
from .y2017 import d01, d02, d03, d04, d05, d06, d07, d08, d09
|
from .y2017 import d01, d02, d03, d04, d05, d06, d07, d08, d09
|
||||||
from .y2018 import d01, d02, d03, d04, d05, d06, d07, d08, d09, d10, d11
|
from .y2018 import d01, d02, d03, d04, d05, d06, d07, d08, d09, d10, d11
|
||||||
from .y2020 import d10
|
from .y2020 import d10
|
||||||
|
|
@ -14,6 +14,7 @@ DAYS = {
|
||||||
"2016_02": y2016.d02.solve,
|
"2016_02": y2016.d02.solve,
|
||||||
"2016_03": y2016.d03.solve,
|
"2016_03": y2016.d03.solve,
|
||||||
"2016_04": y2016.d04.solve,
|
"2016_04": y2016.d04.solve,
|
||||||
|
"2016_05": y2016.d05.solve,
|
||||||
"2017_01": y2017.d01.solve,
|
"2017_01": y2017.d01.solve,
|
||||||
"2017_02": y2017.d02.solve,
|
"2017_02": y2017.d02.solve,
|
||||||
"2017_03": y2017.d03.solve,
|
"2017_03": y2017.d03.solve,
|
||||||
|
|
|
||||||
52
py/aoc/y2016/d05.py
Normal file
52
py/aoc/y2016/d05.py
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
# PART 1
|
||||||
|
|
||||||
|
|
||||||
|
def chars(start, amount):
|
||||||
|
n = 0
|
||||||
|
chars = []
|
||||||
|
while amount > 0:
|
||||||
|
text = (start + str(n)).encode("utf-8")
|
||||||
|
h = hashlib.md5(text).hexdigest()
|
||||||
|
if h[:5] == "00000":
|
||||||
|
# print(h, "->", char)
|
||||||
|
char = h[5]
|
||||||
|
chars.append(char)
|
||||||
|
amount -= 1
|
||||||
|
n += 1
|
||||||
|
return "".join(chars)
|
||||||
|
|
||||||
|
|
||||||
|
# PART 2
|
||||||
|
|
||||||
|
|
||||||
|
def chars_2(start, amount):
|
||||||
|
n = 0
|
||||||
|
chars = [None] * amount
|
||||||
|
while amount > 0:
|
||||||
|
text = (start + str(n)).encode("utf-8")
|
||||||
|
h = hashlib.md5(text).hexdigest()
|
||||||
|
if h[:5] == "00000":
|
||||||
|
char = h[6]
|
||||||
|
pos = int(h[5], base=16)
|
||||||
|
if pos < len(chars):
|
||||||
|
if chars[pos] is None:
|
||||||
|
chars[pos] = char
|
||||||
|
pw = "".join("_" if x is None else x for x in chars)
|
||||||
|
# print(h, "->", char, "in position", pos, "->", pw)
|
||||||
|
if None not in chars:
|
||||||
|
return "".join(chars)
|
||||||
|
# else:
|
||||||
|
# print(h, "->", chars[pos], "already in position", pos)
|
||||||
|
# else:
|
||||||
|
# print(h, "->", "invalid position", pos)
|
||||||
|
n += 1
|
||||||
|
|
||||||
|
|
||||||
|
def solve(inputstr):
|
||||||
|
hashstart = inputstr.strip()
|
||||||
|
pw = chars(hashstart, 8)
|
||||||
|
print(f"Part 1: {pw}")
|
||||||
|
pw_2 = chars_2(hashstart, 8)
|
||||||
|
print(f"Part 2: {pw_2}")
|
||||||
Loading…
Add table
Add a link
Reference in a new issue