2022: d25: ex1: add solution
This commit is contained in:
parent
d20e79e2b0
commit
bc91ad5dad
50
2022/d25/ex1/ex1.py
Executable file
50
2022/d25/ex1/ex1.py
Executable file
|
@ -0,0 +1,50 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def solve(input: list[str]) -> str:
|
||||||
|
def from_snafu(input: str) -> int:
|
||||||
|
res = 0
|
||||||
|
for c in input:
|
||||||
|
if c == "=":
|
||||||
|
n = -2
|
||||||
|
elif c == "-":
|
||||||
|
n = -1
|
||||||
|
else:
|
||||||
|
n = int(c)
|
||||||
|
res = res * 5 + n
|
||||||
|
return res
|
||||||
|
|
||||||
|
def to_snafu(input: int) -> str:
|
||||||
|
# Base case
|
||||||
|
if not input:
|
||||||
|
return "0"
|
||||||
|
|
||||||
|
DIGITS = {
|
||||||
|
2: "2",
|
||||||
|
1: "1",
|
||||||
|
0: "0",
|
||||||
|
-1: "-",
|
||||||
|
-2: "=",
|
||||||
|
}
|
||||||
|
|
||||||
|
digits: list[int] = []
|
||||||
|
while input:
|
||||||
|
input, d = divmod(input, 5)
|
||||||
|
if d not in DIGITS:
|
||||||
|
d -= 5
|
||||||
|
input += 1
|
||||||
|
digits.append(d)
|
||||||
|
return "".join(DIGITS[c] for c in reversed(digits))
|
||||||
|
|
||||||
|
return to_snafu(sum(map(from_snafu, input)))
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
input = sys.stdin.read().splitlines()
|
||||||
|
print(solve(input))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in a new issue