Жители Flapus используют систему счисления base-8. Числа:
0 - Кузла
1 - Понара
2 - Боккель
3 - Колопи
4 - Вруенат
5 - Фохам
6 - Стикты
7 - Крикола
Для чисел, превышающих 7, полное имя последней цифры идет первым, за ним следует апостроф и первые символы другой цифры, вплоть до первой гласной включительно:
11 - Понара (1) 'по (1)
13 - Колопи (3)' по (1)
64 - Вруенатьсти
55 - Фохам'фо
47 - Крикола'вру
При увеличении чисел формула остается неизменной - первая цифра полного имени идет первой, за ней следует апостроф и первые символы других цифр, вплоть до первой гласной и включительно. Обратите внимание, что кроме последней цифры (первого слова), порядок остается неизменным.
123 - Colopee (3) 'po (1) bo (2)
205 - Foham (5)' bo (2) ku (0)
1123 - Colopee'popobo 7654
- Vruenat'kristifo
Исключением из правила являются числа, оканчивающиеся на 0. Здесь слово начинается с Ku и заканчивается первыми буквами других цифр, вплоть до первого гласного и включительно. Апостроф не используется.
10 - Купо
70 - Кукри
350 - Кучофо
630 - Кустико
1000 - Купокуку
Вызов
Напишите программу или функцию, которая принимает действительный номер base-8 и выводит разговорный эквивалент. Вы можете предположить, что вы всегда получите действительный номер. Конечный пробел / одиночный перевод строки после вашего ответа в порядке. Первый символ должен быть в верхнем регистре, как в примерах.
Это код-гольф . Самый короткий код в байтах побеждает. Применяются стандартные лазейки. Ответы, длина которых конвертирована и дополнительно отправлена на Flapussian, получают дополнительные файлы cookie.
Контрольные примеры
0 -> Кузла
1 -> Понара
2 -> Боккель
3 -> Колопи
4 -> Вруенат
5 -> Фохам
6 -> Стикты
7 -> Крикола
10 -> Купо
11 -> Понара'по
23 -> Колопеебо
56 - > Stikty'fo
70 -> Kukri
100 -> Kupoku
222 -> Boqkel'bobo
2345 -> Foham'bocovru
Ответы:
Pyth, 117 байт (Kricola'popo)
Ручная пересылка в псевдокод:
источник
if ... else
в троичный, превративfor
цикл вmap
операцию, а затем внеся некоторые незначительные изменения. Вот что я получил. Я бы также обратил ваше внимание на то,."
что можно использовать на сжатых строках.Retina , Colopee'pokri,
165157143127123 байтаКонечный перевод строки значителен.
Попробуйте онлайн!
объяснение
Мы начинаем с переноса последней цифры на передний план и вставляем апостроф после нее. Обратите внимание, что это оставляет однозначные числа без изменений, поскольку регулярное выражение не совпадает - поэтому они никогда не получат апостроф в первую очередь.
Это заменяет каждую цифру полным именем независимо от того, где она появляется.
Это сокращает все имена цифр, которые появляются после апострофа. Обратите внимание, что только
iou
первые гласные появляются в имени цифры, поэтому мы проверяем позицию, которая находится сразу после одной из них и после апострофа, а затем сопоставляем (и удаляем) все строчные буквы, следующие за этой позицией. Поскольку мы вставили имена цифр в регистр заголовков, это остановится перед следующей цифрой.При этом используется транслитерация, чтобы превратить все символы в верхнем регистре
L
в их аналоги в нижнем регистреl
, при условии, что они найдены в совпадении, которое начинается с'
(для того, чтобы оставить начальную прописную букву без изменений).Осталось только правильно обработать кратные (восьмеричные) 10. В этом случае у нас будет результат, начинающийся с
Kuzla'
, с которого мы хотим начатьKu
. Поэтому мы просто удаляем все вхожденияzla'
.источник
JavaScript (ES6), 171
Тест
источник
Ява (1,8) - Вруенатьфобо (
486340 байт)Когда я подумал, что больше не могу играть в гольф, я нашел еще 33 байта! Очень рад! Наибольшая экономия была получена от переключения на массивы символов (от короткого до верхнего / нижнего регистра) и повторного использования массива входных строк для слов.
Обнаружение множества уловок гольфа, до менее чем 400! В теории я все еще мог бы уменьшить это больше, поскольку я сказал, что функция будет в порядке в правилах, тогда как это полная программа.
Обновленный Используя подход Мартина Бюттнера, я рефакторинг использовал вместо этого регулярное выражение. Удалось сохранить еще 10 байтов! Спасибо Мартин.
Ungolfed
источник
interface F
и удалить публичное объявление основного метода. Вы также можете удалить пространство вString[] x
и в.substring(0, v+1)
."Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(",")
это 70 байтов, а встроенный массив - 74.Python (3,5)
225222217202 байтаРабочее решение со списком в Python
объяснение
Выиграй 3 байта с раздельным версии (предыдущая версия:
d="Kuzla","Ponara",...
)Инициализация результата в функции последней цифры
Измените список d, сохранив первые 2 или 3 символа и поставив их в нижнем регистре
Кошачий шнур
источник
Javascript ES6,
231228225222204 байтаСпасла кучу байтов благодаря Нейлу.
источник
[...s]
вместоs.split``
;b=b==c[0]?"Ku":b+"'"
вместоif(b==c[0]){b="Ku"}else b+="'"
; аналогично дляif(a.length)
(просто используйте0
дляelse
части);a.map(d=>b+=c[d].match...)
вместо того, чтобы возиться сfor
иshift
. Я думаю, что это уже 29 байтов.[iou]
как класс «гласных».F #,
364288250 байтов (Kubofo)Возвращает функцию, которая принимает целое число и возвращает его эквивалент Flapus. = D
источник
Питон 3 -
181177 байт (Понарабости)Остерегайтесь самого удивительного использования, которое
pow
вы когда-либо видели в своей жизни.u**v
эквивалентноu|(not v)
булевому контексту, как и ранее, в хорошем~v+2|u
выражении!источник