Все знают, что кошки идут мяу, но многие не понимают, что кааааа идут мееооооо. На самом деле, длина гласных звуков, которые издает кошка, зависит от длины гласной, с которой вы обращаетесь к ней.
Точно так же коровы идут, кричат
Вызов
Вы должны написать программу, которая принимает в качестве входных данных слово, обозначающее «кошка», и слово, обозначающее «корова», определяет количество основных гласных и, при необходимости, печатает одну из следующих строк:
C[]ts go M[]w
C[]ws go M[]
Где []
обозначает гласные, согласно следующим правилам:
- Число е и о в «мяу» должно совпадать с количеством гласных во входном слове.
- Число о в "Moo" должно быть в два раза больше количества гласных, найденных во входном слове.
Программа должна распознавать вводимые слова cat
и cow
. В качестве входных данных можно использовать любую наиболее удобную заглавную букву, но выходные данные должны быть прописными, как показано выше.
Meooeoew
действительным выходом дляCaaat
, например?Ответы:
Retina ,
5749444341 байтТак близко ...:)Пиф ...Попробуйте онлайн.
Ожидается, что ввод будет заглавным, как
Caaat
илиCoooow
.объяснение
Регулярное выражение соответствует всему вводу и захватывает гласные в группе
1
(нам не нужны якоря, потому что совпадение не может завершиться неудачей и будет жадно соответствовать всему вводу). Подстановка записывает эти входные данные и добавляетs go M
, а затем дважды вводит гласные. Для входовCaaat
иCoooow
мы получаем:Вывод для коров уже правильный. Нам просто нужно что-то сделать с этими кошками.
+
Говорит Retina повторить этот этап как можно чаще. Регулярное выражение соответствует двумa
s в последней части строки (мы гарантируем это с помощью$
якоря, чтобы не заменять вещи внутриCaaats
). Это будет по существу соответствовать всему после тогоM
, как эта часть все еще имеетa
s. Двеa
буквы удаляются, а весь суффикс после него оборачиваетсяe...ow
:Наконец, есть два много
w
лет в результате, поэтому мы удаляем те , которые предшествуютo
(чтобы убедиться , что мы не портяw
инCoooows
):И мы остались с:
источник
LabVIEW, 58 примитивов LabVIEW
создавать такие строки - это боль ...
Крайние левые vis - сопоставление с образцом, a + и o + соответственно ищут самое большое количество as и os в строке.
Взяв длину из тех, что я создал 3 массива 1 с длиной os 1 с длиной es и один с длиной 2 раза os.
Тогда все части собраны вместе. Сначала исходный ввод, затем s идут M все массивы, неиспользуемые пустые, поэтому они будут игнорироваться, и, наконец, aw, если ввод был cat. (Если после того, как найдены, будет после матча, если не после матча пусто)
Для LOLZ я также реализовал лису с 6 различными выходами ^^
источник
Пиф,
504434Принимает ввод в формате
["caat", "coow"]
.Попробуйте онлайн.
Разъяснение:
Спасибо Jakube за значительное сокращение длины.
источник
jk
наs
, удалить второеjk
(оно вообще ничего не делает) и заменить"w\n"
на\wb
.r.Q3
и другие вещи. Вы можете использовать двоичную карту и сохранить 10 дополнительных символов.Pj.bs[rN3"s go M"S*-lN2+Y\o\w)Q"eo
, Не уверен, если у вас уже есть опыт работы с картами, если у вас есть какие-либо вопросы, я могу объяснить их вам в чате Pyth .Perl,
66615554 байтавключает +1 для
-p
Ожидается, что ввод будет соответствовать
/^C[ao]+[tw]$/
(без завершающей строки!)Использование:
/bin/echo -n Caaat | perl -p 55.pl
Сломать
Предыдущая версия:
Прокомментировал :
Пример:
Caaat
$&
какa
и@l
как(a,a,a)
.$x
в три раза ,a
после чего 3 разаo
:aaaooo
.a
в$x
кe
:eeeooo
. Количество замен (либо 0, либо положительных) служит в качестве детектора кошки: установите$y
на,w
если так.s go M
,eeeooo
иw
.$\
а неs/$/
и не требуя завершающего перевода строки при вводе.источник
Python 2, 74 байта
Принимает вход
Caaat
илиCooow
источник
CJam (
60 57 5553 байта)Демо онлайн . Ввод предполагается в нижнем регистре.
Для той же длины:
источник
PowerShell,
135132 байта(разрывы строк считаются такими же, как точки с запятой, поэтому для ясности разбито на строки)
Удивительно сложная задача. И я вполне уверен, что это может быть дальше в гольфе.
Принимает входные строки как
$a
и$b
. Объединяет их и преобразует их как массив символов, а затем передает их через цикл%{}
. Каждая буква затем проверяется , если это-eq
UAL к'a'
и связанная переменная счетчика увеличивается соответствующим образом . Затем мы вычитаем4+$c
из$d
учетаcatcw
входные данные и переходим к формулированию выходных предложений, изменяя время вывода гласных на соответствующие счетчики. (В PowerShell'e'*3
выдаст'eee'
, например.)источник
Почти аналогично ответу @ omulusnr, но это дает правильный вывод, а также ввод нечувствителен к регистру.
PHP, 172
источник
$p=$argv[1];preg_match("/c([ao]+)/i",$p,$e);$l=strlen($e[1]);$s=$k=strcmp($e[0][1],'o')?'eo':'oo';$r='str_repeat';echo $p,' go M',$r($s[0],$l),$r($s[1],$l),$k?'w':'';
немного короче до 166 байтSwift 2, 3̶8̶1̶ 333 байта
Ungolfed:
Принимает кошку или корову любую заглавную букву. Вы можете попробовать это здесь:
http://swiftlang.ng.bluemix.net/#/repl/3f79a5335cb745bf0ba7698804ae5da166dcee6663f1de4b045e3b8fa7e48415
источник
MATLAB:
190152118 байтUngolfed:
тесты:
PS: Спасибо @Kenney за хорошее предложение (см. Комментарии)!
источник
disp( (b>0)*[...] + (c>0)*[...] )
работать здесь?PHP, 138 байт
удобочитаемый:
попробовал короче, но не будет работать в PHP:
знак равно
источник
оКТАВА,
126, 108Первая версия с переменными и пояснениями, 126:
Пояснение: L знает, какое животное содержит какое письмо. S знает, что они повторяют. конец знает. Вам нужно включить «автоматическое вещание», чтобы это работало, но оно должно быть по умолчанию во всех октавах, которые я использовал. Конечно, существуют более короткие способы, например, с помощью команды regexprep (регулярные выражения с заменой), но в ответах уже было несколько таких подходов, так что это будет скучно.
Редактирование: Пропуск переменных, которые встречаются только один раз, с использованием октавного индексирования «на лету» (не знаю, как это называется на самом деле) и добавления «i», входной строковой переменной:
источник
JavaScript (ES2015),
7877Попробуйте это здесь: https://jsbin.com/guqaxejiha/1/edit?js,console
источник
Луа,
12190 байт121 байт
90 байт
Принимает ввод, такой как 'Caats' или 'Coooows' с учетом регистра. Поскольку нет никаких требований для неверных входных данных, выходные данные могут быть странными, скажем, для «лис» или «волов». :П
Ungolfed
Обновление до 90 байт: заменена структура if-control на логические операторы, оптимизирована конкатенация строк путем добавления большего количества данных в объявлении
i
. Убрана скобка наi:find("w")
. Интересно, что при хранении"o"
в переменной при использовании сохраняется пара байтовrep
, но это будет контрпродуктивно с"w"
или"e"
. Чем больше ты знаешь.источник
Lua:
1159289 байтпринимает
C[]t
или вC[]w
качестве входных данных; [] = а или о. Ввод нижнего регистра приведет к результату.длинная версия:
Пример выходов:
Изменить: изменено
if
then
else
наand
or
. удалены ВСЕ не строковые пробелы.Также вы можете попробовать это здесь: Запустите Lua Online, но я не мог понять, как использовать терминал, поэтому я включил его в функцию.
Изменить: изменил использование «o» и удален () из
:find
. кредит идет на Cyv для поиска этих оптимизаций. Добавил "s" и изменилl=#i-3
наl=#i-2
С входом, включающим "s", всего 88 байт
источник
cat
иcow
. В качестве входных данных можно использовать любую заглавную букву, а значение cat или Cat должно быть допустимымДротик ,
114 112 110 104 102100 байтПопробуйте онлайн!
источник
PHP,
170164161157 байтПринимает любую капитализацию вообще.
CaAaT
,coOOOw
что угодно.v2: на самом деле не нужно [wt] $. также исправлено char ct
v3: все символы char ct неверны, сжатое присвоение $ a и $ e
v4: сохранить 3 байта на $ af -> $ a
v5: сохранить 4 байта, отключив его (не показано)
источник
$argv[0]."s go "
. Попробуйте этоpreg_match("/(?i)c([ao]+)/",$x=$argv[1],$e);$a=$e[1][0]=="a"?"ew":"o";echo$x."s go M".str_repeat($a[0],$n=strlen($e[1])).str_repeat("o",$n).$a[1]."\n";
(правильный вывод и 151 байт).