Цель
Идея состоит в том, чтобы предоставить код, необходимый для отображения 32-разрядного целого числа в / из произносимого слова максимум из 9 символов. Это может быть полезно, например, для облегчения запоминания серийного номера или ввода формы.
Требуется как способ перевода целого числа в соответствующее слово, так и обратного перевода слова в соответствующее целое число.
правила
Между целыми числами и словами должно быть взаимно-однозначное соответствие, и весь набор 32-разрядных целых чисел (или, другими словами, любое целое число от 0 до 4294967295) должен быть отображаемым. Хотя, очевидно, не все слова будут значимыми, и ввод слов, которые не отображаются в целое число, может иметь неопределенное поведение.
Вы можете сами выбирать, какой именно набор «произнесенных» слов имеет смысл, и как выполняется сопоставление, но слова должны, по крайней мере, следовать этим правилам:
- Только основные 26 букв (A ... Z) должны использоваться в качестве символов. Акценты, корпус и т. Д. Не должны использоваться для расширения возможных комбинаций.
- Максимум 9 символов на слово.
- две согласные (BCDFGHJKLMNPQRSTVWXZ - 20 возможностей) не должны быть расположены рядом друг с другом (они должны быть окружены гласными).
- две гласные (AEIOUY - 6 вариантов) не должны находиться рядом друг с другом (они должны быть окружены согласными).
Примечание. Самая простая схема, в которой все слова построены как CVCVCVCVC
( C
будучи согласным и V
гласным), дает 4147200000 комбинаций, а 32-разрядное целое число имеет 4294967296 возможных значений, поэтому этого недостаточно. Вам необходимо увеличить количество комбинаций, либо добавив более короткие слова, либо добавив также VCVCVCVCV
комбинации.
Применяются другие стандартные правила, а стандартные лазейки запрещены.
Входы / выходы
Для каждого представления должны быть предоставлены две части кода:
- Тот, который принимает целое число в качестве аргумента / ввода и возвращает / печатает соответствующее слово
- Тот, который принимает слово в качестве аргумента / ввода и возвращает / печатает соответствующее целое число
Кроме того, вы можете отправить один фрагмент кода, который обрабатывает обе операции:
- Когда в качестве входных данных задано целое число, оно выводит соответствующее слово
- Когда в качестве входных данных приводится строка, она выводит соответствующее целое число
Выигрышное условие
Это код-гольф , ответ, который имеет наименьшее количество байтов (при суммировании обоих фрагментов кода для решений, выбирающих отдельные фрагменты кода), выигрывает.
Ответы:
JavaScript (ES6), 205 байт
Точка среза между CVCVCVCVC и VCVCVCVCV равна 4e9, поэтому начинается ошибка 5244160000 (числовой ввод) или
zesuwurib
(строковый ввод).источник
PHP, 353 байта
Кодировка + Декодирование
is_numeric($argn)
содержит логическое значение. Это правда, если ввод является целым числом.PHP, 190 байт (кодирование) + 195 байт (декодирование) = 385 байт
кодирование
5391360000 = 26 * 120 ** Доступны 4 комбинации
Кодирование онлайн-версии без E_NOTICE
расширенный
Вход => Выход
Если вам нужен всегда 9-байтный результат, пожалуйста, замените
while($a)
наwhile(strlen($r)<9)
+ 10 байтДекодирование
расширенный
Вход => Выход
Декодирование онлайн-версии без E_NOTICE
Дополнительная проверка
Если нам нужна проверка, если строка действительна.
Добавьте
$x.=$b?:0;
в конец цикла декодирования + 10 байт.Заменить
echo$s;
наecho!preg_match('#([01])\1$#',$x)?$s:_;
+ 32 байтаисточник
R 165 байт
Кодирование и декодирование в одной функции.
Эта функция использует метод грубой силы для создания всех возможных значений, а затем просто возвращает индекс, когда ему вводится строка, и возвращает строку, когда вводится целое число. Как следствие, это очень медленно и использует 16 ГБ + памяти!
Возможны 4 354 560 000 значений. Это охватывает все строки формы CVCVCVCV (C), причем последний C является необязательным.
источник