앱 다운로드
폴더를 선택하고 편집하기 전에 관련 파일을 읽도록 요청하세요. 작업의 목표와 변경 범위를 명확히 정합니다.
바이트, 제한된 정수, 목록, 바이트 키 사전을 키 순서의 정규 bencode로 인코딩하되 출력은 65536바이트 이하로 하세요. 빈 컨테이너와 중첩을 시험하고 순환, 불리언, ±10^18 밖의 정수, 컨테이너의 64개 초과 항목, 16 초과 깊이, 2048개 초과 방문 값을 거부하세요.
폴더를 선택하고 편집하기 전에 관련 파일을 읽도록 요청하세요. 작업의 목표와 변경 범위를 명확히 정합니다.
호환되는 엔드포인트를 선택하세요. 사용 가능한 도구와 응답 품질은 설정한 모델과 서버에 따라 달라집니다.
변경 사항과 명령 출력을 검토하세요. 결과를 채택하기 전에 프로젝트 검사를 실행해야 합니다. 생성된 코드는 자동으로 테스트된 코드가 아닙니다.
실제 동작을 예상 결과와 비교하세요. 검사가 실패하면 다음 변경을 하기 전에 원인을 조사하세요.
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)
적용하기 전에 검토하세요. 변경 사항과 명령 출력을 검토하세요. 결과를 채택하기 전에 프로젝트 검사를 실행해야 합니다. 생성된 코드는 자동으로 테스트된 코드가 아닙니다.