брифинг
Иностранцы поселились на земле и, как ни странно, их алфавит точно такой же, как и у нас. Их язык также очень похож на наш с некоторыми очень четкими и легко вычисляемыми различиями.
Вызов
Возьмите строку и выведите эквивалент языка иностранца. Перевод работает так:
Поменяйте местами все гласные в слове с соответствующими:
Vowel | With
--------+--------
a | obo
e | unu
i | ini
o | api
u | iki
Вы также можете написать другого переводчика для перевода Alien-> English, однако это не обязательно.
Примеры
Input: Shaun
Output: Shoboikin
Input: Java
Output: Jobovobo
Input: Hello, World!
Output: Hunullapi, Wapirld!
Если гласный написан с заглавной буквы, тогда вы пишете с заглавной буквы первую букву.
Input: Alan
Output: Obolobon
Input: Australia
Output: Oboikistroboliniobo
правила
- Применяются стандартные лазейки
- Должен работать для текста, который содержит новые строки
Вы можете написать функцию, лямбду или полную программу
Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!
Ответы:
Haskell,
10091 байтисточник
TI-Basic, 173 + 59 + 148 = 380 байт
Надеемся, что инопланетяне используют калькуляторы TI-83/84;)
Основная программа, 173 байта
БОНУС: Оставьте вторую или третью строку в зависимости от того, хотите ли вы нормального или обратного переводчика.
Подпрограмма (
prgmQ
), 59 байт:Подпрограмма (
prgmR
), 148 байт:PS
~
представляет токен0x81
и@
представляет токен0x7F
, узнайте больше здесь .PPS Часть почему эти программы имеют высокое количество байт , так как
sub(
,inString(
,length(
, и все строчные буквы два байта каждый ...источник
prgmR
иprgmQ
в своем коде заголовки однажды?Perl, 56 байт
Включает +1 для
-p
Внести вклад в STDIN
alien.pl
:Работает, как показано, но заменяет
\xXX
экранирование на фактический персонаж, чтобы получить заявленный счетисточник
седьмой 89
источник
Питон,
999593 байтаНа ideone.com ...
Довольно просто Просто возьмите индекс, в котором мы находим каждый символ в списке гласных, и используем его, чтобы получить три символа, которые нам нужны. Если он не найден,
.find()
возвращается,-1
поэтому просто вставьте текущий символ в конец строки. Пробелы необходимы, поэтому ни одна буква"a"
не содержит добавленныхc
. Переведенные гласные сгруппированы по порядку букв (первая буква каждого перевода, затем вторая, затем третья).источник
["aeiouAEIOU".find(c)::11] for
05AB1E ,
282720 байтПопробуйте онлайн!
Unuxplobonobotiniapin
источник
PHP, 91 байт
источник
Python, 129 байт
Посмотреть это работает на ideone.com
Вот более красиво отформатированная версия:
Наиболее интересными являются те,
{ ... }.get(l.lower(), l)
которые пытаются найтиl
в словаре букву, сохраненную в преобразованном в нижний регистр, и либо возвращает переведенную версию (если найдена), либо оригинальную букву,и
[str, str.capitalize][ord(l) < 91]( ... )
которая проверяет, была ли оригинальная буква заглавной ( Кодовая точка ASCII ниже 91), а затем либо вызываетstr()
функцию с буквой в качестве аргумента (если это не заглавная буква, ничего не делает), либоstr.capitalize()
функцию (преобразует первую букву строки аргумента в верхний регистр).источник
C (gcc) ,
150 141 136134 байтаПопробуйте онлайн!
Основано на ответе @algmyr и -8 благодаря @ ASCII-only
Менее гольф-версия
источник
a;l;i;e(char*n){for(char*v=" AEIOU",*t;i=*n++;printf("%c%c%c"+4*!a,(a?" OUIAI"[a]:i)|i&32," bnnpk"[a]," ouiii"[t=index(v,i-32*l),a=t?t-v:0]))l=i>96;}
a;l;i;e(char*n){for(char*v="AEIOU",*t;i=*n++;printf("%c%c%c"+4*!a,(a?" OUIAI"[a]:i)|i&32," bnnpk"[a]," ouiii"[t=index(v,i&95),a=t&&t-v<5?t-v+1:0]));}
a;l;i;e(char*n){for(char*v=" AEIOU",*t;i=*n++;)printf("%c%c%c"+4*!a,a?" OUIAI"[a]|i&32:i," bnnpk"[a]," ouiii"[t=index(v,i-i/96*32),a=t?t-v:0]);}
Пакет, 215 байт
Принимает участие в STDIN. Обработка посимвольных символов удобна с учетом регистра.
источник
Pyth, 42 байта
Программа, которая принимает входные данные в STDIN и печатает выходные данные.
Попробуйте онлайн
Как это устроено
источник
C 167 байт
Я действительно не хотел избавляться от своей привычки всегда выполнять основные функции при кодировании C, но это существенно короче, чем версия с main, и таким образом я получил еще одно письмо, чтобы написать то, что я хотел!
Golfed
комментарии
В Си есть что-то особенное, и как ужасно ты можешь быть с указателями и тому подобным.
источник
Сетчатка , 60 байт
Число байтов предполагает кодировку ISO 8859-1.
Попробуйте онлайн!
источник
Javascript (ES6),
949392 байтаСохранено 1 байт благодаря edc65
Сохранено 1 байт благодаря Нейлу
демонстрация
источник
.indexOf
и.search
использовать~
вместо<0
s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])
что все еще 93 байта. Но посколькуc
теперь известно, что это гласная, вы можете использовать ееsearch
вместоindexOf
сохранения байта!Java 8, 172 байта
ungolfed:
И пришелец вернулся на английский (171 байт):
Ungolfed:
источник
Tcl, 75 байт
Строка для перевода находится в переменной
s
.источник
Mathematica, 128 байт
Не уверен, можно ли получить более короткую программу, используя
IgnoreCase->True
вместе с проверкой случая.источник
C 178 байт
источник
C
163162159 байтисточник
char*t="aeiou";
в цикл сохраняет 1 байтC #,
133121 байтИзменить (спасибо
milk
)спасибо :) Я на самом деле знаю эту перегрузку, но как-то совершенно забыл это при написании этого ..
источник
Select(char, int)
перегрузку, так что вам не нужно объявлятьi
и можно поместить все это в одну строку.s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
C
207202 байта (спасибо Cyoce)1) Я ненавижу опускать тип перед любым видом объявлений
2) Я не очень люблю ставить неиспользуемый код (без функции main ()).
Использование:
источник
(c=getchar())!= EOF
может стать~(c=getchar())
Swift 2.2 196 байт
¯ \ _ (ツ) _ / ¯
Golfed
unGolfed
источник
var r = [
?Perl 6 ,
8482 байтаExpanded:
Использование:
источник
C - 192 байта
(новые строки добавлены для ясности)
Просто таблицы поиска и логический переключатель.
Поиск каждой буквы в таблице (строка) гласных; если найдено, то измените его в соответствии с правилом в таблице
s
. Выведите каждый символ, за которым следует строка: если найден гласный символ, выведите символ, модифицированный значением, заs
которым следует остаток слога, хранящийся в таблицеf
; если гласный не был найден, выведите исходный символ и пустую строку.источник
Рубин,
10293918878 байтОбъяснение:
Выполнить строку
ruby -pe "gsub(/[#{b='aeiouAEIOU'}]/){'obounuiniapiikiOboUnuIniApiIki'[b.index($&)*3,3]}"
, следующего типа вверх, к примеру,Australia
он должен вывод:Oboikistroboliniobo
.Это довольно просто, замените все гласные на подстроку, основанную на индексе заменяемого гласного в (b), раз 3 и следующие 3 символа в строке перевода.
источник
b
в регулярное выражение (/[#{b=...}/
).p $*
не нужно-p
флаг, чтобы сохранить дополнительные байты.ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
-pe
). Как вы получаете 71?TI-BASIC,
201197195 байтовДумать, что я найду другой ответ TI-BASIC здесь!
В любом случае, ввод - это английская строка в
Ans
.Результатом является переведенная строка.
Примеры:
Объяснение:
(Новые строки добавлены для удобства чтения. Несколько строк из одной и той же строки будут обозначены символом
:
в следующем блоке кода.)Примечания:
TI-BASIC - это токенизированный язык. Количество символов не равно количеству байтов.
Строчные буквы в TI-BASIC по два байта каждая.
источник