Вы натолкнулись на старую индийскую рукопись, которая описывает кучу захороненных сокровищ. Рукопись также сообщает вам местонахождение сокровища, за исключением того, что некоторые важные цифры были косвенно закодированы в текст. Вы выясните, что в тексте используется система «Каади», ограниченное подмножество более распространенной системы «Катапаяди».
(Система Katapayadi - это древняя индийская система кодирования цифр в виде букв, часто используемая как мнемоника для запоминания длинных чисел.)
Ваша задача здесь состоит в том, чтобы декодировать текст, закодированный в системе Kaadi, и распечатать числовое значение.
Детали
Введите символы
Система Kaadi основана на правилах системы Katapayadi , но использует только первый ряд согласных. Ваш текст здесь транслитерирован на латинский алфавит и, как известно, содержит только:
- гласные 'a', 'e', 'i', 'o', 'u'
- согласные «g», «k», «c», «j» и их заглавные буквы (для представления аспирированной формы этих согласных), а также «ṅ» и «ñ».
(Вы можете получать и обрабатывать 'ṅ' как 'ng', а 'ñ' как 'ny', если это более удобно на вашем языке.)
Присвоение значения
В этой системе
с каждой согласной, сопровождаемой гласным, связана цифра. Эти:
'k'=>1, 'K'=>2,
'g'=>3, 'G'=>4,
'ṅ'=>5,
'c'=>6, 'C'=>7,
'j'=>8, 'J'=>9,
'ñ'=>0
Однако обратите внимание, что эти значения применяются только тогда, когда за этими согласными следует гласный. kacCi
имеет то же значение, что и kaCi
( ka
, Ci
= (1,7)), так как середина c не сопровождается гласной.
Кроме того, начальный гласный или последовательность из двух гласных представляет собой 0.
aikaCi
будет:ai
,ka
,Ci
= (0,1,7)Дополнительные гласные где-либо еще в середине текста не имеют значения:
kauCia
то же самоеkaCi
, что дополнительные гласные можно игнорировать.
Конечное числовое значение
После того, как значения цифр букв были вычислены, окончательное числовое значение получается как обратный порядок этих цифр, т.е. первая цифра в тексте является наименее значимой цифрой в конечном значении.
Например.
GucCi
имеет Gu
и Ci
, таким образом (4, 7), поэтому конечное значение 74.
kakakaGo
является (1,1,1,4), поэтому ответ 4111.
guṅKo
является (3,2), поэтому кодируется 23. ( gungKo
если используется ASCII -эквивалентны.)
вход
- Строка, содержащая текст в кодировке Kaadi
- будет содержать только гласные и вышеуказанные согласные
- гласные всегда в нижнем регистре и встречаются в группах не более 2
- Вы можете принять буквы 5 и 0 либо как их символы Unicode 'ṅ' и 'ñ', либо как их эквиваленты ASCII 'ng' и 'ny' (они в нижнем регистре в любой форме)
- Вы можете предположить, что нет пробелов или знаков препинания
Выход
- Числовое значение текста, как указано выше правил
- для пустого ввода допустим пустой вывод или любой вывод false-y на выбранном вами языке, в дополнение к 0
- для неверного ввода (ввод с чем-либо, кроме гласных и вышеуказанных согласных), вывод не определен - все идет
Контрольные примеры
"GucCi"
=> 74
"kakakaGo"
=> 4111
"aiKaCiigukoJe"
=> 913720
""
=> 0 //OR empty/falsey output
"a"
=> 0
"ukkiKagijeCaGaacoJiiKka"
=> 1964783210
"kegJugjugKeg"
=> 2891
"guṅKo"
=> 23
"Guñaaka"
=> 104
"juñiKoṅe"
=>5208
(последние могут быть:
"gungKo"
=> 23
"Gunyaaka"
=> 104
"junyiKonge"
=>5208
если ты предпочитаешь это.)
Применяются стандартные правила для ввода / вывода и лазеек . Пусть победит лучший гольфист!
aiaKaci
вводить? (3 ведущих гласных)ord(c)%47%10
дает уникальный индекс[0..9]
для каждого согласного. (Сord("ṅ")=7749
иord("ñ")=241
.)Ответы:
JavaScript (ES6), 83 байта
Попробуйте онлайн!
Как?
Мы используем следующее регулярное выражение, чтобы соответствовать либо началу строки, либо одному из согласных Каади, за которым следует гласная:
Для каждого совпадения во входной строке мы вызываем следующую функцию обратного вызова, которая принимает содержимое c группы захвата в качестве параметра:
Мы находим значение согласного, ища его положение в регулярном выражении (приводится к строке, добавляя ее к себе).
Согласные упорядочены таким образом, что их значение равно их положению по модулю 10 :
Когда мы сопоставляем начало строки вместо согласного, c - пустая строка, позиция которой в регулярном выражении равна 0, что, как правило, является ожидаемым результатом в этом случае.
Наконец, мы вставляем эту цифру в начало строки вывода o .
источник
Сетчатка , 41 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Explantion:
Переведите согласные, за которыми следуют гласные.
Ручка ведущий гласный.
Удалить все остальное.
Обратный результат.
источник
Python 2 , 93 байта
Неименованная функция, принимающая строку Unicode, которая возвращает строковое представление результата из десяти основных.
Попробуйте онлайн!
источник
Java 8,
136126 байтПопробуйте онлайн.
Объяснение:
источник
Желе , 27 байт
Попробуйте онлайн!
Желе имеет встроенный для ... 1 байт
ṅ
.объяснение
источник
O%47%10
дает уникальный индекс[0...9]
для каждого согласного. (Это означает, чтоO%47
с неявным модулем ofị
позволит подобрать правильное значение в массиве из 10 записей.)6;µe€Øẹœpṫ€0O%47ị“ ʠḷ’Œ?’¤Ṛ
но также 27, если это не может быть в гольф.Python 2 , 101 байт
Попробуйте онлайн!
Python 3 ,
104102 байтаПопробуйте онлайн!
Сохраненный
источник
JavaScript (Node.js) , 126 байт
Попробуйте онлайн!
источник
x=[..."ñkKgGṅcCjJ"]
толькоx="ñkKgGṅcCjJ"
такindexOf
работы со строками тоже0
, поэтому не проходит тестовые случаи 3 и 6 (как можно увидеть в Выходных данных на TIO).Красный ,
152143 байтаПопробуйте онлайн!
Удобочитаемый:
источник
MATL ,
484745 байтПопробуйте онлайн!
(«b» вместо «d» для сохранения байта)
(-2 байта благодаря Луису Мендо)
MATLAB (и, следовательно, MATL), обрабатывающий строки как немую серию байтов, усложнил перенос решения Python @ TFeld, чем я себе представлял (может быть, решение с прямым циклом было бы проще здесь?). Законченное использование альтернативного
'ng'
,'ny'
метод ввода и заменаng
сb
в начале для более легкой обработки.Объяснение:
источник
unicode2native
, но я думаю, что теперь ты этого хочешь. Я согласен, поддержка Unicode в MATLAB не самая лучшая. И не начинайте меня с Octave :-D Что касается MATL, он был разработан до того, как новый тип строковых данных существовал в MATLAB (и мне он все равно не очень нравится), поэтому в MATL "строка" такая же как это было в старых версиях MATLAB: вектор строки символов. Я сделал примечание, чтобы уточнить, что в документации, спасибо за замечание!Stax , 27 байт
Запустите и отладьте его
источник