◂ 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, …
⋮
- 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)