Advent of code

 25 décembre 2022 

  Full of Hot Air : Calculer en quinaire balancé (base 5 avec chiffres de –2 à 2)
1-12212=-=--=0221
   
1----2-1
   
1=2==-1-1=1-02---
   
220--0=2-01-
   
        
  1. code.py
VALEURS_SNAFU  = {'0':0, '1':1, '2':2, '-':-1, '=':-2 }
SYMBOLES_SNAFU = { 0:'0', 1:'1', 2:'2', -1:'-', -2:'='}

def snafuToDecimal(snafu):
    valeur = 0
    for c in snafu:
        valeur *= 5
        valeur += VALEURS_SNAFU[c]
    return valeur

def decimalToSnafu(nb):
    snafu = ''
    while nb > 0:
        valeurChiffre = (nb+2) % 5 - 2
        snafu = SYMBOLES_SNAFU[valeurChiffre] + snafu
        nb = nb // 5
        if valeurChiffre < 0:
            nb += 1
    return snafu


with open("input.txt", 'r', encoding='utf-8') as f:
    lines = [line[:-1] for line in f.readlines()]

print("Réponse partie 1:", decimalToSnafu(sum(snafuToDecimal(snafu) for snafu in lines)))