adventofcode2022/day25/sol.py

44 lines
774 B
Python
Raw Normal View History

2022-12-25 05:16:39 +00:00
def eval(num):
digits = ["=-012".index(c)-2 for c in num]
n = 0
for x in digits:
n = n*5 + x
return n
def tosnafu(n):
orig = n
digits = []
while n != 0:
n, d = divmod(n, 5)
digits.append(d)
print(digits)
carry = 0
for i in range(len(digits)):
d = digits[i] + carry
carry, d = divmod(d, 5)
if d > 2:
carry += 1
d -= 5
digits[i] = d
if carry:
digits.append(carry)
digits.reverse()
snafu = "".join("=-012"[d+2] for d in digits)
print(n, digits, snafu)
assert eval(snafu) == orig
return snafu
t = 0
for line in open("input"):
n = (eval(line.strip()))
print(n)
t += n
print(t)
print(tosnafu(t))