59 lines
1.0 KiB
Python
59 lines
1.0 KiB
Python
from tools.aoc import AOCDay
|
|
from typing import Any
|
|
|
|
|
|
def int2snafu(dec: int) -> str:
|
|
conv = "012=-0"
|
|
snafu = ""
|
|
power = 1
|
|
over = 0
|
|
while dec > 0:
|
|
c = dec % (5 ** power) + over
|
|
dec //= 5
|
|
if c > 2:
|
|
over = 1
|
|
else:
|
|
over = 0
|
|
|
|
snafu = conv[c] + snafu
|
|
|
|
return snafu
|
|
|
|
|
|
def snafu2int(snafu: str) -> int:
|
|
dec = 0
|
|
for i, c in enumerate(snafu):
|
|
if c == '-':
|
|
val = -1
|
|
elif c == '=':
|
|
val = -2
|
|
else:
|
|
val = int(c)
|
|
|
|
dec += 5 ** (len(snafu) - i - 1) * val
|
|
|
|
return dec
|
|
|
|
|
|
class Day(AOCDay):
|
|
inputs = [
|
|
[
|
|
("2=-1=0", "input25_test"),
|
|
("2==221=-002=0-02-000", "input25"),
|
|
],
|
|
[
|
|
(None, "input25"),
|
|
]
|
|
]
|
|
|
|
def part1(self) -> Any:
|
|
return int2snafu(sum(snafu2int(c) for c in self.getInput()))
|
|
|
|
def part2(self) -> Any:
|
|
return ""
|
|
|
|
|
|
if __name__ == '__main__':
|
|
day = Day(2022, 25)
|
|
day.run(verbose=True)
|