Téléchargez l’application
Sélectionnez un dossier et demandez à l’assistant de lire les fichiers concernés avant de les modifier. Définissez le résultat attendu et les limites de la tâche.
Encodez octets, entiers bornés, listes et dictionnaires à clés binaires en bencode canonique trié de 65536 octets au plus. Testez conteneurs vides et imbrication, en rejetant cycles, booléens, entiers hors ±10^18, plus de 64 entrées par conteneur, une profondeur supérieure à 16 ou plus de 2048 valeurs visitées.
Sélectionnez un dossier et demandez à l’assistant de lire les fichiers concernés avant de les modifier. Définissez le résultat attendu et les limites de la tâche.
Choisissez un endpoint compatible. Les outils disponibles et la qualité des réponses dépendent du modèle et du serveur utilisés.
Examinez les changements et les sorties de commandes. Lancez les vérifications du projet avant de valider le résultat : le code généré n’est pas testé automatiquement.
Comparez le comportement observé au résultat attendu. Si une vérification échoue, cherchez la cause avant de poursuivre les modifications.
def bencode(value):
active, visited, used, parts = set(), 0, 0, []
def emit(*chunks):
nonlocal used
size = sum(len(chunk) for chunk in chunks)
if size > 65536 - used:
raise ValueError("bencode.output")
used += size
parts.extend(chunks)
def encode(item, depth):
nonlocal visited
visited += 1
if depth > 16 or visited > 2048:
raise ValueError("bencode.bounds")
if type(item) is int:
if not -10**18 <= item <= 10**18:
raise ValueError("bencode.integer")
emit(b"i", str(item).encode("ascii"), b"e")
elif type(item) is bytes:
if len(item) > 65536:
raise ValueError("bencode.bytes")
emit(str(len(item)).encode("ascii"), b":", item)
elif type(item) in (list, dict):
if id(item) in active or len(item) > 64:
raise ValueError("bencode.container")
active.add(id(item))
try:
emit(b"l" if type(item) is list else b"d")
if type(item) is list:
for child in item:
encode(child, depth+1)
else:
if any(type(k) is not bytes for k in item):
raise ValueError("bencode.key")
for key in sorted(item):
encode(key, depth+1)
encode(item[key], depth+1)
emit(b"e")
finally:
active.remove(id(item))
else:
raise ValueError("bencode.type")
encode(value, 0)
return b"".join(parts)
Vérifiez avant d’appliquer. Examinez les changements et les sorties de commandes. Lancez les vérifications du projet avant de valider le résultat : le code généré n’est pas testé automatiquement.