задача
Кодируйте строку, которая полностью состоит из прописных букв ( 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качестве ввода, программа будет печатать 10000018 раз подряд, т.е.10000011000001100000110000011000001100000110000011000001 .
Входной алфавит выбран, чтобы быть CEFGIJKLMNQRSTUVXYZabcdefh . Таким образом, все символы конвертируются в семизначные числа в двоичном виде, а счетчики с нулем один отличаются только на единицу на символ (все они имеют три единицы и четыре нуля или наоборот при преобразовании в двоичную форму).
Длина выхода всегда равна 56, и на входах возникает дисбаланс в худшем случае, например CCCCCCCC, где нули появляются в 8 раз чаще, чем единицы.
Таким образом, оценка этого представления 1.5 ** (56 - 42) * 2 ** 8 == 74733.8906.