Download de toepassing
Selecteer een map en laat de assistent de relevante bestanden lezen voordat hij ze wijzigt. Benoem het doel en de grenzen van je opdracht.
Codeer bytes, begrensde gehele getallen, lijsten en kaarten met bytesleutels als gesorteerde canonieke bencode van maximaal 65536 bytes. Test lege containers en nesting, en weiger cycli, booleans, getallen buiten ±10^18, meer dan 64 items per container, diepte boven 16 of meer dan 2048 bezochte waarden.
Selecteer een map en laat de assistent de relevante bestanden lezen voordat hij ze wijzigt. Benoem het doel en de grenzen van je opdracht.
Kies een compatibel endpoint. Beschikbare hulpmiddelen en de kwaliteit van antwoorden hangen af van het ingestelde model en de server.
Controleer wijzigingen en uitvoer van opdrachten. Voer de projectcontroles uit voordat je het resultaat overneemt; gegenereerde code is niet automatisch getest.
Vergelijk het werkelijke gedrag met het verwachte resultaat. Onderzoek een mislukte controle voordat je verdergaat met wijzigingen.
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)
Controleer vóór het toepassen. Controleer wijzigingen en uitvoer van opdrachten. Voer de projectcontroles uit voordat je het resultaat overneemt; gegenereerde code is niet automatisch getest.