my solutions for advent of code 2022
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.6 KiB

converter = {
'2' : 2,
'1' : 1,
'0' : 0,
'-' : -1,
'=' : -2
}
def maximum(n):
maxi = 0
for x in range(n + 1):
maxi += 2*5**x
return maxi
def decimalToSnafu(num):
n = 0
while True:
if n == 0:
if num <= 2:
break
n += 1
continue
if num <= maximum(n):
break
n += 1
rest = num
subtract = False
if n > 0:
Snafu = ['0' for x in range(n+1)]
for digit in range(n, -1, -1):
if rest > 0:
count, rest = divmod(rest, 5**digit)
if count != 2 and rest > maximum(digit - 1):
count += 1
Snafu[-(digit+ 1)] = str(count)
elif rest < 0:
count, rest = divmod(abs(rest), 5**digit)
if count != 2 and rest > maximum(digit - 1):
count += 1
if count == 2:
Snafu[-(digit+ 1)] = '='
elif count == 1:
Snafu[-(digit+ 1)] = '-'
else:
Snafu[-(digit+ 1)] = '0'
rest = num - SnafuToDecimal(''.join(Snafu))
return(Snafu)
else:
return str(num)
def SnafuToDecimal(number):
number = list(reversed(number))
decimal = 0
for x in range(len(number)):
decimal += converter[number[x]] * 5 ** x
return decimal
total = 0
with open('input25.txt', 'r') as f:
numbers = f.read().splitlines(keepends=False)
for number in numbers:
total += SnafuToDecimal(number)
print(total)
print(''.join(decimalToSnafu(total)))