Advertisement
HexTree

Advent of Code 2022 Day 25

Dec 25th, 2022
1,223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.09 KB | Source Code | 0 0
  1. def snafu_to_dec(num):
  2.     result = 0
  3.     for i in range(len(num)):
  4.         char = num[-i-1]
  5.         if char == '-':
  6.             modifier = -1
  7.         elif char == '=':
  8.             modifier = -2
  9.         else:
  10.             modifier = int(char)
  11.         result += (modifier * 5**i)
  12.     return result
  13.  
  14. def dec_to_snafu(num):
  15.     def get_leading_digits(n):
  16.         k = 0
  17.         while 5**(k+1) <= n:
  18.             k += 1
  19.         m = n // 5**k
  20.         if m in (1, 2):
  21.             return [(k, str(m))], n - m*5**k
  22.         elif m == 3:
  23.             return [(k+1, "1"), (k, "=")], n - m*5**k
  24.         elif m == 4:
  25.             return [(k+1, "1"), (k, "-")], n - m*5**k
  26.     temp = num
  27.     digits = []
  28.     while temp != 0:
  29.         new_digits, temp = get_leading_digits(temp)
  30.         digits += new_digits
  31.     print(digits)
  32.     l = ['0' for _ in range(digits[0][0]+1)]
  33.     for k, char in digits:
  34.         l[-k-1] = char
  35.     return ''.join(l)
  36.  
  37.  
  38. total = 0
  39. with open('input', 'r') as f:
  40.     for line in f.readlines():
  41.         total += snafu_to_dec(line.strip())
  42.  
  43. print(total)
  44. dec_to_snafu(total)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement