◂ 5 décembre 2024 ▸
Print Queue : Remettre des valeurs dans un certain ordre en fonction de règles de précédences (globalement contradictoires…).
56|54
94|55
94|11
⋮
11|37
38,33,35,91, …
46,62,56,61,35,88,74
⋮
Le code viendra, pas eu le temps de faire une version au propre.
- escalierPenrose.jpg
- code_initial_pasPropre.py
import re
f = open("input.txt", 'r', encoding='utf-8')
lines = [line[:-1] for line in f.readlines()]
def parse_ints(line: str) -> list[int]:
return [ int(token) for token in re.split('[^-0-9]+', line) if token ]
#print(len(lines))
nb = 0
rules = []
updates = []
section_rule = True
for line in lines:
values = parse_ints(line)
if not values:
section_rule = False
continue
if section_rule:
rules.append(values)
else:
updates.append(values)
def verify(a, b):
global rules
for x,y in rules:
if a==y and b==x:
return False
return True
def verify2(vals):
for i in range(len(vals) - 1):
for j in range(i+1, len(vals)):
if not verify(vals[i], vals[j]):
return False
return True
def sort_from_rules(a, b):
if a == b:
print("XXXX")
exit()
global rules
for x,y in rules:
if x==a and y == b:
return -1
if x==b and y == a:
return 1
print("Non.")
exit()
all_n = set()
graph = {}
for a,b in rules:
all_n.add(a)
all_n.add(b)
if a not in graph:
graph[a] = {'prec':set(), 'suiv':set()}
if b not in graph:
graph[b] = {'prec':set(), 'suiv':set()}
graph[a]['suiv'].add(b)
graph[b]['prec'].add(a)
print(len(all_n), graph)
really_all = all_n.copy()
def order(vals, rules):
all_n = set(vals)
rules = [ r for r in rules if set(r) <= all_n]
ordered = []
done = really_all.difference(all_n)
print('*** all_n', all_n)
print(' rules', rules)
while all_n:
node = list(all_n)[0]
precs = graph[node]['prec'].difference(done)
while precs:
print(" trait. node", node)
node = precs.pop()
precs = graph[node]['prec'].difference(done)
print("found node", node)
done.add(node)
ordered.append(node)
all_n.remove(node)
#print(ordered, len(done), len(all_n))
return ordered
print("===")
for vals in updates:
if not verify2(vals):
print("recoit vals", vals)
vals = order(vals, rules[:])
print("tri:", vals)
nb += vals[(len(vals) - 1)//2]
#print(len(rules)+ len(updates))
print(nb)
#print("Réponse partie 1:", nb1)
#print("Réponse partie 2:", nb2)