Advent of code

 13 décembre 2022 

  Distress Signal : Décoder des strings de tableaux imbriqués et les trier
[[[0,10]],[7,9,[[2,1],[7]],4,[
   
[[10,3,[[4],0,8]],[7,6,[]]]
   
  
   
[[[5,[10,4,3,10,1]],1],[[[3,1,
   
               
  1. code.py
import json
f = open("input.txt", 'r')
lines = [line[:-1] for line in f.readlines()]

# Fonction inutile, il suffisait d'appeler json.loads ! (ou eval, mais c'est dangereux…)
def decodeArray(s):
    if s[0] != '[':
        return int(s)
    if s == '[]':
        return []
    resultArray = []
    level = 0
    lastIndex = 1
    for i in range(1,len(s)):
        if s[i] == '[':
            level += 1
        elif s[i] == ']':
            level -= 1
        if level <= 0 and (s[i] == ',' or i == (len(s) - 1)):
                resultArray.append(decodeArray(s[lastIndex:i]))
                lastIndex = i+1
    return resultArray


def cmp(a,b):
    if type(a) == int and type(b) == int:
        return (a > b) - (a < b)
    elif type(a) == int:
        return cmp([a], b)
    elif type(b) == int:
        return cmp(a, [b])
    else:
        for i in range(min(len(a), len(b))):
            c = cmp(a[i], b[i])
            if c != 0:
                return c
        return cmp(len(a), len(b))


tousLesTableaux = []
sommeIndicesBienTries = 0
for i in range(len(lines) // 3):
    tab1 = json.loads(lines[3*i])       # tab1 = decodeArray(lines[3*i])
    tab2 = json.loads(lines[3*i + 1])   # tab2 = decodeArray(lines[3*i + 1])
    tousLesTableaux.append(tab1)
    tousLesTableaux.append(tab2)
    if cmp(tab1, tab2) <= 0:
        sommeIndicesBienTries += (1+i)

print("Réponse partie 1:", sommeIndicesBienTries)


# Partie 2
DIVIDER1 = [[2]]
DIVIDER2 = [[6]]
nb1 = 1  # compter la ligne de [[2]] lui-même
nb2 = 2  # compter la ligne de [[6]] lui-même, et la ligne de [[2]] qui le précède

# Pas besoin de trier, il suffit de comparer les DIVIDERS aux autres
for tab in tousLesTableaux:
    if cmp(DIVIDER1, tab) > 0:
        nb1 += 1
    if cmp(DIVIDER2, tab) > 0:
        nb2 += 1

print("Réponse partie 2:", nb1 * nb2)