задача
Кодируйте строку, которая полностью состоит из прописных букв ( A-Z
), используя только нули и единицы, используя вашу собственную любимую схему. Но правило не так просто!
правила
- Ваша программа / функция должна правильно обрабатывать любую допустимую строку ввода длиной 8 .
- Результаты должны иметь одинаковую длину для всех входных данных.
- Результаты должны отличаться для разных входов.
- Результаты должны быть максимально короткими.
- Результаты должны быть равны нулю (иметь количество единиц, сходных с нулями). Они не должны быть равными (то есть идеально сбалансированными), но ваш счет будет оштрафован за это.
Вам не нужно предоставлять программу / функцию, которая декодирует вашу кодировку.
Вход и выход
- Вы можете принять любой набор из 26 различных печатаемых символов ASCII вместо
A-Z
. - Вы можете решить вывести любую пару различных печатаемых символов ASCII вместо
0
и1
. - Вам не разрешено выводить целое число вместо битовой строки, так как оно может иметь начальные нули, и неясно, действительно ли вы выполнили правило 2.
- Если вы решили отклониться от значения по умолчанию (
A-Z
ввод и01
вывод), вы должны указать наборы символов ввода / вывода в своем представлении.
счет
- Базовая оценка: размер кода или 1, если ваша программа пуста.
- Штрафы
- Штраф за длину: умножить
1.5 ** (encoded length - 42)
- Там нет бонуса за то, что короче; 42 - минимальная длина для идеально сбалансированного кодирования строк длиной 8 с размером алфавита 26.
- Штраф за несбалансированность: умножить
2 ** max(abs(ones - zeros) for every valid input of length 8)
, гдеones
иzeros
- это числа 1 и 0 в каждом выходе соответственно. - Ваша заявка должна содержать либо пример наихудшего случая (вход / выход), либо теоретическое объяснение значения штрафа.
- Штраф за длину: умножить
- Самый низкий балл побеждает.
Пример представления
Гипотетический esolang, 0 байт, оценка 74733,8906
Вот гипотетический esolang, где пустая программа печатает все ASCII-коды символов ввода в двоичном виде.
Например, если вы дадите в AAAAAAAA
качестве ввода, программа будет печатать 1000001
8 раз подряд, т.е.10000011000001100000110000011000001100000110000011000001
.
Входной алфавит выбран, чтобы быть CEFGIJKLMNQRSTUVXYZabcdefh
. Таким образом, все символы конвертируются в семизначные числа в двоичном виде, а счетчики с нулем один отличаются только на единицу на символ (все они имеют три единицы и четыре нуля или наоборот при преобразовании в двоичную форму).
Длина выхода всегда равна 56, и на входах возникает дисбаланс в худшем случае, например CCCCCCCC
, где нули появляются в 8 раз чаще, чем единицы.
Таким образом, оценка этого представления 1.5 ** (56 - 42) * 2 ** 8 == 74733.8906
.