BBencora
Робоче середовище з ШІ для коду

Канонічний вивід bencode

Закодуйте байти, обмежені цілі числа, списки й словники з байтовими ключами в канонічний відсортований bencode до 65536 байтів.

● ● ●Bencora●
Сценарії · Канонічний вивід bencode ×
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)
✳Канонічний вивід bencode
✓ ЗміниПеревірте перед застосуванням ↗
Ілюстрація робочого середовища
Проєкт
Перевірте порожні контейнери й вкладення, відхиляючи цикли, логічні значення, числа поза ±10^18, понад 64 записи контейнера, глибину понад 16 чи більш ніж 2048 відвіданих значень.
Перевірте перед застосуванням
Порівняйте фактичну поведінку з очікуваним результатом. Якщо перевірка не проходить, з’ясуйте причину перед наступними змінами.
Моделі
Налаштуйте OpenAI-сумісний або Anthropic endpoint із базовою URL-адресою та API-ключем, якщо він потрібен. Перевірте з’єднання. Локальний сервер моделі має працювати; віддалені інструменти можуть окремо передавати дані.
Сценарії

Канонічний вивід bencode

Сценарії ↗
Сценарії
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)
Робоче середовище з ШІ для коду

Зберігайте сумісність і межі змін серіалізації

Двійковий результат може змінювати значення без помітної різниці у звичайному текстовому порівнянні. Bencora — робоче середовище з ШІ для програмування у Windows, де код серіалізації перевіряють з урахуванням цього ризику. Відкрийте проєкт і попросіть підключену модель перевірити допустимі значення, контракт виходу й код-споживач перед пропозицією виправлення.

Конкретне завдання може стосуватися канонічного виводу bencode для записувача метаданих. Попросіть помічника дослідити впорядкування байтових ключів, вкладені контейнери та відхилення непідтримуваних типів. Надайте відомі вихідні тестові дані й опишіть потрібні програмі межі. Зосередьте пропозицію на цьому записувачі та його викликах, не припускаючи нешкідливості зміни серіалізатора лише тому, що він створює правдоподібні байти.

Перевіряйте межі ресурсів поряд зі звичайними прямими та зворотними перетвореннями. Запускайте власні тести максимальної глибини, надмірного виходу та циклічних контейнерів і порівнюйте точні байти для характерних словників. Перевірте шляхи очищення після відхилення, щоб невдала спроба не псувала подальшу роботу. Сумісність потребує доказів від споживачів проєкту, а також прикладів успішного кодування.

Bencora підтримує підключення до кінцевих точок, сумісних з OpenAI, або Anthropic. Модель ШІ без цензури можна вибрати там, де її пропонує налаштована служба; інструменти, обмеження й контекст визначаються цим налаштуванням. Використовуйте обговорення для пояснення зміни, а тестові дані встановлять, чи збережено контракт виходу.

Безпечна перевірка двійкового записувача

Навіщо порівнювати точні байти, а не лише декодовані значення?

Еквівалентні декодовані значення можуть приховувати важливі для канонічного формату відмінності порядку або подання. Зберігайте відомі байтові тестові дані для цих вимог і перевіряйте їх разом із наявними в проєкті тестами прямих та зворотних перетворень.

Який контекст важливий для впорядкування словника?

Покажіть фактичні типи ключів і споживачів, що покладаються на закодований вихід. Попросіть помічника розрізняти байтовий порядок і специфічний для мови порядок тексту. Зручне перетворення на рядок може змінити контракт, визначений над сирими байтами.

Чи слід перевіряти межі розміру виходу лише після кодування?

Перевірте потрібну програмі політику ресурсів. Остаточна перевірка розміру може відбутися після значної роботи або виділення пам’яті. Запитайте, де пропозиція забезпечує межі, і протестуйте шляхи відхилення, включно з вкладеними значеннями, що перевищують дозволений вихід.

Навіщо додавати випадок циклічного контейнера?

Він перевіряє обробку входу, який не можна розгорнути як звичайне скінченне дерево. Перевірте явне відхилення й очищення. Успішні приклади кодування моделі не доводять, що обробка некоректних контейнерних структур завершується правильно.

Завантажити для Windows ↗

Bencora · Оновлено 2026-10-25