Вызов
Ваша задача - закодировать целое число в виде строки символов ASCII , а затем успешно декодировать его после случайного перемешивания указанной строки.
Вы напишите две программы / функции , которые будут называться Encoder и Decoder .
кодировщик
- Ввод: целое число в диапазоне .
- Вывод: строка из ASCII символов (не обязательно для печати).
дешифратор
- Входные данные: случайная перестановка строки .
- Выходные данные: целое число .
счет
Пусть быть максимальной длиной по во всех возможных значениях . Если кодировщик действует недетерминированно (что разрешено, см. Ниже), тогда будет максимальной длиной которая может возникнуть (возможно, ).
Пусть - длина кодера в байтах, а - длина декодера в байтах.
Тогда ваш счет .
Победа присуждается при подаче наименьшего балла .
Лимит времени
Существует несколько произвольных временных ограничений в 1 минуту на время выполнения как кодера, так и декодера для одного тестового случая (то есть одного значения ).
Цель состоит в том, чтобы избежать решения, которое находит, что грубая сила кодирует, перечисляя все последовательности с определенными свойствами. Если ваше решение делает что-то более умное, оно, скорее всего, будет соответствовать временным ограничениям и будет считаться действительным. Аналогично, если он работает на TIO для некоторых случайно выбранных значений он будет считаться действительным. В противном случае я протестирую его на своей машине, но учтите, что если ваше решение чисто грубое, оно почти наверняка потерпит неудачу.
правила
- Кодер и декодер должны быть написаны на одном языке .
- Декодер необходимо выводить правильно целое число для каждого из возможных перестановок из строки , возвращенного кодировщик .
- Кодер и декодер являются не разрешается обмениваться информацией любым способом (например , с помощью глобальных переменных или файлов).
- Выходные данные кодера не обязательно должны быть детерминированными (то есть один и тот же вход может выдавать разные выходные строки, если кодировщик запускается несколько раз), но декодер всегда должен угадывать правильное целое число .
- Кодер и декодер могут принимать и возвращать целое число в любом удобном способе (например , если это нормально для ввода , чтобы быть
14
,"14"
или[1,4]
). - Кодер может выводить строку либо путем печати его на
stdout
или путем возвращения строки, список / массив символов или список / массив целых чисел в диапазоне ; Обратите внимание , что декодер будет принимать в качестве входных данных перестановки возвращаемой в кодировщике , поэтому он должен принять строку в том же формате , как . - Стандартные лазейки запрещены.
- Если возможно, объясните, как работает ваш код и почему правильная оценка.
пример
Предположим, что .
- Кодер принимает в
14
качестве входных данных. Это может вывести"qwerty"
.- Декодер принимает перестановку в
"qwerty"
качестве входных данных, например"tweyqr"
. Он должен выводиться14
(в любом удобном формате).
Кодировщик мог бы вернуться , [113,119,101,114,116,121]
а также, в этом случае декодер получил бы (например) [116,119,101,121,113,114]
.
Обратите внимание, что строка, возвращаемая кодировщиком, также может содержать непечатаемые символы ASCII (но всегда в диапазоне [0x00, ..., 0x7F]
).