[py] Port 2016_05

This commit is contained in:
Joscha 2022-12-06 20:00:02 +01:00
parent 2038c5ccde
commit 5caa178c1c
3 changed files with 54 additions and 55 deletions

View file

@ -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")

View file

@ -2,7 +2,7 @@ import sys
import argparse
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 .y2018 import d01, d02, d03, d04, d05, d06, d07, d08, d09, d10, d11
from .y2020 import d10
@ -14,6 +14,7 @@ DAYS = {
"2016_02": y2016.d02.solve,
"2016_03": y2016.d03.solve,
"2016_04": y2016.d04.solve,
"2016_05": y2016.d05.solve,
"2017_01": y2017.d01.solve,
"2017_02": y2017.d02.solve,
"2017_03": y2017.d03.solve,

52
py/aoc/y2016/d05.py Normal file
View 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}")