концепция
Запоминание цифр может быть трудным. Вспомнить слово может быть проще. Для запоминания больших чисел я создал способ произносить их в стиле буквального разговора.
правила
Каждая цифра сначала заменяется соответствующей буквой:
0 => O
1 => I
2 => R
3 => E
4 => A
5 => S
6 => G
7 => T
8 => B
9 => P
После замены делаются две дополнительные вещи для улучшения произношения:
Между двумя согласными
U
добавляется.Между двумя гласными
N
добавляется.
Примеры / тесты
512431 => SIRANENI
834677081 => BENAGUTUTOBI
3141592 => ENINANISUPUR
1234567890 => IRENASUGUTUBUPO
6164817 => GIGABIT
Что невозможно
- Буквы и цифры смешаны в одном слове
- Два последовательных согласных или два последовательных гласных
- Письма, которых нет в списке выше
- Другие персонажи
правила
Цель этого code-golf - создать двухсторонний переводчик для этой концепции.
- Ваша программа должна сначала понять, переводится ли она на цифру или цифру.
- Он должен проверить правильность формирования записи.
- Если все правильно, покажите перевод.
- Иначе, отобразить сообщение об ошибке, ничего, вернуть значение фальси или завершить работу программы.
Детали
- Введенное число / строку можно вводить в любом формате, который вы хотите (стандартный, аргумент, ...)
- Это код-гольф , поэтому выигрывает самый короткий ответ.
- Стандартные лазейки запрещены.
GIGATESTER
бытьGIGATESUTER
?AB23
;AEI
;BB
;Z
;ACE
;giga
;!@#$
;-123
; и т.д. Кроме того, на основе правил валидации мы можем преобразовать6164735732 => GIGATESTER
, ноGIGATESTER
это приведет к ложному значению из-заST
(правила двух последовательных согласных). То, как ваша задача в настоящее время настроена, основной частью задачи является проверка, а не преобразование. Я в порядке с этим, но в этом случае проверка должна быть определена немного лучше.Ответы:
JavaScript (ES6), 130 байт
Принимает ввод в виде строки обоими способами перевода. Возвращает перевод в виде строки или
false
в случае неверного ввода.демонстрация
Показать фрагмент кода
источник
Japt ,
6159928584 байтаПринимает ввод как строку для обеих операций и возвращает строку как для, так и
false
для недопустимого ввода. Предполагается, что числовые входные данные всегда будут содержать несколько цифр, добавьте 1 байт, заменяяUÉ
на,Un<space>
если это недопустимо. Возвращаетfalse
для тестового примера,GIGATESTER
но, согласно правилам, это должен быть неверный ввод.Попробуйте это: цифры -> буквы или буквы -> цифры
24 байта спасены благодаря obarakon , который также убедил меня снова заняться этим после того, как я отказался от него ранее. Я бы хотел, чтобы он этого не сделал!332625 (!) Байтов были пожертвованы реализацией быстрого исправления (т. Е. Еще не полностью обработанного) для проверки правильности ввода.объяснение
(Еще не обновлено до последней версии)
источник
AEI
Python 3 , 147 байт
Попробуйте онлайн!
источник
Java (OpenJDK 8) ,
416410399382376370 байт-2 байта благодаря @Cyoce
-17 больше байтов благодаря идее @Cyoce
-6 байт благодаря @KevinCruijssen
Попробуйте онлайн!
Тьфу, замена Java так многословна.
Функция, которая принимает строку и возвращает строку, переведенную из числа -> буквы или наоборот. Сбои при неверном вводе (вы можете увидеть это в примере tio, где он выводит правильные значения для первых 10 тестовых случаев, а затем падает с ошибкой деления на ноль, которая отображается в представлении отладки)
Ungolfed (первый и последний члены цикла for извлекаются для удобства чтения)
Регулярное выражение для сопоставления чисел простое, но вот регулярное выражение для сопоставления букв с числами
источник
(s)->
if
оператора являются присваиваниями (которые возвращают значение), попробуйте заменитьif
...else if
...else
условным оператором?:
, предварительно добавив его,Object _=
чтобы сделать его допустимым оператором. Не уверен, поможет ли это на самом деле подсчет байтов, но я думаю, что это поможет.t
, потому что вы используете ее только один раз. Такt.charAt(i)+""
становится"OIREASGTBP".charAt(i)+""
( -4 байта ). И вы можете поместить последнюю строку внутри цикла for послеi<9;
объявления цикла for. Так и становитсяfor(;i<9;s=b?s.replace(v,c):s.replace(c,v)){
( -1 байт ). О, и вы можете поместить то,s=b?...
что идет сразу послеint i=-1;
цикла for:for(s=b?...;i<9;...
( -1 байт ).PHP;
129 127 267 259228 байтЗапустите как трубу с
-nR
или попробуйте онлайн .сломать
источник
Java 8,
312308304301294290 байт-4 байта (308 → 304) для исправления ошибки (не часто, когда количество байтов уменьшается, когда я исправляю ошибку в моем коде ..: D)
РЕДАКТИРОВАТЬ: Использует другой подход, чем Java-ответ @ PunPun1000, сначала создавая возвращаемую строку в цикле for для символов, а затем использует более абстрактное регулярное выражение для проверки его в возвращаемой троице (входные данные представляют собой либо все цифры, или чередуются заданные гласные и согласные (то есть без каких-либо смежных гласных или согласных).
Объяснение:
Попробуй это здесь.
Проверочное регулярное выражение:
источник
05AB1E , 76 байт
Попробуйте онлайн!
Возвращает ложное значение
0
для неверного ввода.источник
Баш ,
241 238235 байтовПопробуйте онлайн!
Меньше гольфа:
источник
PHP, 268 байт
Попробуйте онлайн!
источник
Perl, 127 байт
126 байт + 1 байт командной строки
Использование:
Должен следовать всем правилам вызова - может принимать буквы или цифры и будет ошибка (деление на ноль), если проверка не пройдена
источник
NO
иUS
.Рубин , 205 + 1 = 206 байт
Использует
-p
флаг для +1 байта. Теперь с исчерпывающей системой проверки ввода.Попробуйте онлайн!
источник
Python 3, 741 байт
Попробуйте онлайн!
Я знаю, что есть много возможностей для совершенствования.
источник
sed, 123 байта
объяснение
Сначала мы окружаем цифры с
_
(для гласных) или=
(для согласных).Если мы не делали никаких подстановок, мы конвертируем буквы в цифры, так что это простая подстановка, и удаляем
U
иN
. Тогда выходи.В противном случае мы разветвляемся на метку
a
, где имеем дело с последовательными гласными, а затем с последовательными согласными. Затем преобразуйте цифры в буквы и удалите символы маркера, которые мы ввели на первом шаге.источник
Python3, 246 байт
объяснение:
dictкортежа, плюс текущий элементДИКТКортеж таблица истинности основана на двух элементах, будучи гласным или нетисточник
JavaScript (ES6), 120
Функция, принимающая ввод в виде строки. Возвращает правильно переведенную строку, если ввод верен, в противном случае - ложь или сбой функции.
Меньше гольфа
Тестовое задание
источник