Коти йдуть М'яв, Корови йдуть Му


40

Всім відомо, що коти ходять м'яко, але те, що багато хто не здогадується, - це те, що кааати ходять меееоооу. Насправді довжина голосних звуків, яку видає кішка, залежить від довжини голосного, з яким ви її адресуєте.

Таким же чином, корови йдуть му, але кукувиці йдуть муооооо

Виклик

Ви повинні написати програму, яка приймає як введення слово, яке означає кішка, і слово, що означає корова, визначить кількість основних голосних і надрукує один із наступних рядків, якщо це доречно:

  • C[]ts go M[]w
  • C[]ws go M[]

Де []стоїть голосний, згідно з наступними правилами:

  • Кількість e і o у "Meow" повинно відповідати кількості голосних, знайдених у вхідному слові.
  • Кількість o у "Moo" має бути вдвічі більшою кількістю голосних, знайдених у введеному слові.

Програма повинна розпізнавати вхідні слова catта cow. Для введення даних може бути використана будь-яка велика література, яка є найзручнішою, але результат повинен бути використаний з великої літери, як показано вище.


42
жарт з приводу певної лисиці
Мартін Ендер

7
Я не впевнений, що розумію виклик. Чи є вхід одним чи двома словами? Чи можете ви навести кілька прикладів пар введення / виводу?
Згарб

31
@ MartinBüttner Я не впевнений, чи знаю я про яку лисицю. Jog моя пам'ять, що це говорить?
DJMcMayhem

4
Ви вказуєте кількість е і о, але не їх порядок. Чи Meooeoewє дійсним вихід Caaat, наприклад?
Пітер Олсон

10
Заради лисиці зупинися на каламбурах!
Евмель

Відповіді:


17

Сітківка , 57 49 44 43 41 байт

Так близько ... :) Піт ...

.(.+).
$0s go M$1$1
+`aa(\w*$)
e$1ow
wo
o

Спробуйте в Інтернеті.

Очікує введення великої літери, як Caaatабо Coooow.

Пояснення

.(.+).
$0s go M$1$1

Зворотний вираз відповідає всьому входу і фіксує голосні голоси в групі 1(нам не потрібні якіри, тому що збіг не може вийти з ладу і буде жадібно відповідати всьому вводу). Заміна записує цей ввід і додає s go M, після чого двічі голосні. Для входів Caaatі Coooowми отримуємо:

Caaats go Maaaaaa
Coooows go Moooooooo

Вихід для корів вже правильний. Нам просто потрібно щось зробити з цими котами.

+`aa(\w*$)
e$1ow

+Каже Retina повторити цей етап якомога частіше. У aостанній частині рядка регулярний вираз відповідає двом s (ми забезпечуємо це $якорем, щоб ми не замінювали речі всередині Caaats). Це по суті буде відповідати всім після M, доки ця частина все ще має as. Після aвидалення двох даних s знімається весь суфікс e...ow:

Caaats go Meaaaaow
Caaats go Meeaaowow
Caaats go Meeeowowow

Нарешті, є два багато wроків в результаті, тому ми видаляємо ті , які передують o(щоб переконатися , що ми не псуючи wін Coooows):

wo
o

І нам залишається:

Caaats go Meeeooow

11

LabVIEW, 58 LabVIEW Primitive

створення таких струн - це біль ...

Крайні ліві візи - це узгодження шаблонів, а + і о + відповідно пошук найбільшої кількості рядків як і os у рядку.

Беручи довжину цих, я створю 3 масиви 1 довжиною os 1 з довжиною es і один з 2-кратною довжиною os.

Потім всі деталі збираються разом. Спочатку початковий вхід, потім переходьте M всі масиви, невикористані порожні, тому вони будуть ігноровані, і, нарешті, aw, якщо вхід був котами. (Якщо як знайдено, то буде після матчу, якщо не після матчу порожньо)

Для lolz я також реалізував лисицю з 6 різними виходами ^^


Я не можу це перевірити, але якщо він працює, як ви кажете, я вражений!
Sonic Atom

Чи можете ви дати пояснення з інтересу?
Sonic Atom

пояснення - до того часу, не соромтесь запитувати, чи є якісь питання
Евмель

Код-гольф, як бос. Ого.
Jakuje

7

Піта, 50 44 34

Здійснює введення у форматі ["caat", "coow"].

Pj.bs[rN3"s go M"S*-lN2+Y\o\w)Q"eo

Спробуйте в Інтернеті.

Пояснили:

  .b                                  Map a lambda across two lists in parallel:
                              Q       The input, e.g. ["caat", "coow"]
                               "eo    The string "eo"
    s[                       )            Create and concatenate a list of:
      rN3                                 - The item N in title caps (e.g. "Caat")
         "s go M"                         - The string "s go M"
                 S                        - The sorted version of:
                       +Y\o                   The item Y + "o" ("eo" or "oo")
                  *-lN2                       Times the length of N - 2 (number of vowels)
                           \w             - The string "w"
Pj                                    Join the result on \n and drop the final "w"

Дякую Якубе за великі скорочення довжини.


Деякі дрібниці: Ви можете замінити перший jkз s, видаліть другий jk(він взагалі нічого не робити), і замінити "w\n"з \wb.
Якубе

Крім того, більша частина вашого коду відображається двічі у вашому коді, як r.Q3і інші речі. Ви можете використовувати binary_map та зберегти 10 додаткових символів. Pj.bs[rN3"s go M"S*-lN2+Y\o\w)Q"eo. Не впевнений, якщо у вас вже є досвід роботи з картами, якщо у вас є якісь питання, я можу пояснити це вам в Pyth Chat .
Якубе

Приємно, дякую. Я подумав, що можу зробити щось подібне, але не зовсім знаю як.
Лука

Це дуже ефективно. У ньому повинно бути більше результатів.
Sonic Atom


5

Perl, 66 61 55 54 байт

включає +1 для -p

/[ao]+/;$\="s go M".$&=~y/a/e/r.o x($+[0]-1).(w)[/w/]

Очікується, що введення відповідатиме /^C[ao]+[tw]$/(немає зворотного нового рядка!)
Використання:/bin/echo -n Caaat | perl -p 55.pl

Зламатися

/[ao]+/;
$\= "s go M"        # assign to $OUTPUT_RECORD_SEPARATOR, normally `\n`. Saves 1 vs `$_.=`
   . $&             # the matched vowels
     =~ y/a/e/r     # translate `a` to `e`; `/r` returns a copy.
   . o x($+[0]-1)   # append 'o', repeated. $+[0] is string position of last match end.
   . (w)[/w/]       # returns 'w' if there is no /w/ in the input, nothing if there is.

Попередня версія:

@l=/[ao]/g;$x=$&x@l.o x@l;$y=$x=~y/a/e/?w:'';s/$/s go M$x$y/

Прокоментував :

@l = /[ao]/g;               # captures $& as vowel and @l as list of vowels
$x = $& x @l .o x @l;       # construct the output vowels
$y = $x =~ y/a/e/ ? w : ''; # correct vowel string for cats (aaaooo->eeeooo); $y='w' if cat.
s/$/s go M$x$y/             # construct the desired output.

Приклад: Caaat

  • Захоплення $&як aі @lяк (a,a,a).
  • Встановіть $xв три рази , aпісля чого 3 рази o: aaaooo.
  • Перевести всі aв $xдо e: eeeooo. Кількість замін (0 або позитивних) служить в якості кішки-детектора: набір , $yщоб wякщо це так.
  • Змініть вхід шляхом додавання s go M, eeeoooі w.

  • оновлення 61 : Збережіть 5 байтів, використовуючи список, а не рядок
  • оновлення 55 : збережіть 6 байтів за допомогою вбудовування, присвоєння, $\а не s/$/, та не вимагає введення нового рядка у введенні.
  • оновлення 54 : збережіть 1 байт, усунувши @l.

4

Python 2, 74 байти

i=input()
l=len(i)-2
print i+'s go M'+['e'*l+'o'*l+'w','o'*l*2][i[-1]>'v']

Бере введення

Caaat або Cooow


2

CJam ( 60 57 55 53 байт)

"C%s%ss go M%sw
"2*-2<q"ctw"-S/"teowoo"3/.{(2$,@*$}e%

Інтернет демо . Вхідні дані вважаються малими літерами.

Для однакової довжини:

"C

s go M"N/_]"w
"a*q"ctw"-S/"teowoo"3/.{(2$,@*$M}]z

'CM"s go M"]2*q"ctw"-S/"teowoo"3/.{(2$,@*$}[MM"w
"]]z

1

PowerShell, 135 132 байт

param($a,$b)
[char[]]"$a$b"|%{if($_-eq'a'){$c++}$d++}
$d-=4+$c
"C$("a"*$c)ts go M$("e"*$c)$("o"*$c)w"
"C$("o"*$d)ws go M$("o"*2*$d)"

(рядкові перерви вважаються такими, як крапки з комою, тому розбиття рядків для наочності)

Напрочуд складний виклик. І я впевнено впевнений, що це можна пограти в гольф далі.

Приймає рядки введення як $aі $b. З’єднує їх і кидає їх як масив, а потім труби, що проходять через петлю %{}. Потім кожну букву перевіряють, чи вона не -eqвказана, 'a'а відповідну змінну лічильника належним чином збільшують. Потім ми віднімаємо 4+$cз $dдля обліку catcwна вході, і приступити до розробки вихідних пропозицій, зміна голосні вихідного імпульсу відповідним лічильників. (У PowerShell, наприклад, 'e'*3вийде 'eee'.)


1

Майже схожий на відповідь @ 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';
echo $p,' go M',str_repeat($s[0],$l),str_repeat($s[1],$l),$k?'w':'';

$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 байт
Цхаллачка

1

Swift 2, 3̶8̶1̶ 333 байт

func f(i:String)->String{var s=i.lowercaseString;s.replaceRange(s.startIndex...s.startIndex,with:String(s[s.startIndex]).uppercaseString);let c=i.characters.count-2;let l=s.characters.last;return(s+"s go M"+String(count:c,repeatedValue:l=="t" ?"e" :"o" as Character)+String(count:c,repeatedValue:"o" as Character)+(l=="t" ?"w" :""))}

Безголовки:

func f(i:String)->String{
    var s = i.lowercaseString
    s.replaceRange(s.startIndex...s.startIndex,with:String(s[s.startIndex]).uppercaseString)
    let c = i.characters.count-2
    let l = s.characters.last
    return(s+"s go M"+String(count:c,repeatedValue:l=="t" ?"e" :"o" as Character)+String(count:c,repeatedValue:"o" as Character)+(l=="t" ?"w" :""))
}

Бере котячу або корову будь-якої капіталізації. Ви можете спробувати тут:

http://swiftlang.ng.bluemix.net/#/repl/3f79a5335cb745bf0ba7698804ae5da166dcee6663f1de4b045e3b8fa7e48415


2
Як це приймає внесок?
спагето

Немає даних у цьому прикладі, я зробив це для тестування на ігровому майданчику, тому жодного входу там не потрібно, треба використовувати vars для тестування
Fidel Eduardo López

1
Я думаю, що це робить цей фрагмент тоді. Щоб бути дійсною, це повинна бути функція або повна програма. : /
спагето

1
Гаразд, я зробив це функцією ..
Фідель Едуардо Лопес

1

MATLAB: 190 152 118 байт

i=input('','s');b=sum(i=='a');c=sum(i=='o');d=b>c;disp(['C',i(2:2+b+c),'s go M',i(2:1+b)+4,repmat('o',1,b+2*c),'w'*d])

Безголовки:

i=input('','s');
b=sum(i=='a');
c=sum(i=='o');
d=b>c;
disp(['C',i(2:2+b+c),'s go M',i(2:1+b)+4,repmat('o',1,b+2*c),'w'*d])

Тести:

caaaaaaaats
Caaaaaaaats go Meeeeeeeeoooooooow

cooooows
Cooooows go Moooooooooo

PS: Дякую @Kenney за гарну пропозицію (див. Коментарі)!


Чи disp( (b>0)*[...] + (c>0)*[...] )працювали б тут?
Кенні

Гарна пропозиція @Kenney
brainkz

1

PHP, 138 байт

echo ucfirst($a=$argv[1]).'s go M'.(($n=substr_count($a,'a'))?str_repeat('e',$n).str_repeat('o',$n).'w':str_repeat('oo',substr_count($a,'o')));

читабельний:

echo ucfirst($a = $argv[1]) . 's go M'. (
    ($n = substr_count($a, 'a'))
        ? str_repeat('e', $n) . str_repeat('o', $n) . 'w'
        : str_repeat('oo', substr_count($a, 'o'))
);

спробував коротшу, але звичну роботу в PHP:

#too long -- echo ucfirst($s=$argv[1]).'s go M'.(($o='o'and$n=substr_count($s,'a'))?str_repeat('e',$n).str_repeat($o,$n).'w':str_repeat('oo',substr_count($s,$o)));
#too long -- echo ucfirst($s=$argv[1]).'s go M'.(($o='o'and$f=function($s,$n){return str_repeat($s,$n);}and$n=substr_count($s,'a'))?$f('e',$n).$f($o,$n).'w':$f('oo',substr_count($s,$o)));

=)


1

ОКТАВ, 126 , 108

Перша версія зі змінними та поясненнями, 126:

L="ao"';S={'eo','oo'},e={'w',' '};a=sum(argv(){1}==L,2);b=find(a);disp([argv(){1},' goes m',vec(ones(sum(a),1)*S{b})',e{b}]);

Пояснення: L знає, яка тварина містить яку букву. S знає, що вони повторюють. е знає закінчення. Потрібно ввімкнути "автоматичне мовлення", щоб це працювало, але воно повинно бути за замовчуванням у всіх октавах, які я використовував. Звичайно, існують більш короткі способи, наприклад, наприклад, команда regexprep (регулярні вирази із заміною), але у відповідях вже було кілька таких підходів, так що це буде нудно.


Редагувати: пропуск змінних, які виникають лише один раз, за ​​допомогою октави на ходу індексації (не знаю, що це називається реально) та додавання "i", змінної рядкової вставки:

i=argv(){1};a=sum(i=="ao"',2);b=find(a);disp([i,' goes m',vec(ones(sum(a),1)*{'eo','oo'}{b})',{'w',''}{b}]);

1

JavaScript (ES2015), 78 77

s=>s+'s go M'+(l=s.length-1,w=s[l]<'u',Array(l).join(w?'eo':'oo')+(w?'w':''))

Спробуйте тут: https://jsbin.com/guqaxejiha/1/edit?js,console


Не працює на Caaat, виведіть "Caaats go Meoeoeow і повинен бути" Caaats go Meeeooow
Fidel Eduardo López

@ FidelEduardoLópez виклик не визначає порядок: "Кількість e та o у" Meow "повинно відповідати кількості голосних, знайдених у вхідному слові."
Павло

Я гадаю, що ти маєш рацію. Смішні котячі коти у тебе :)
Фідель Едуардо Лопес

0

Луа, 121 90 байт

121 байт

i=...r="M"o="o"s=i:len()-3if(i:find("w"))then r=r..o:rep(s*2)else r=r..("e"):rep(s)..o:rep(s).."w"end print(i.." go "..r)

90 байт

i=....." go M"o="o"s=#i-7 print(i..(i:find"w"and o:rep(s*2)or("e"):rep(s)..o:rep(s).."w"))

Приймає такі дані, як "Caats" або "Coooows". Оскільки немає вимог щодо недійсних входів, вихід може бути дивним для, скажімо, "Лисиць" або "Оксен". : P

Безумовно

i=... .. " go M"
o="o"
s=#i-7
print(i..
         (i:find"w"and o:rep(s*2) or 
         ("e"):rep(s)..o:rep(s).."w")
      )

Оновлення до 90 байт: Замінена структура if-control на логічні оператори, оптимізована конкатенація рядків шляхом додавання в дані декларації більше даних i. Видалені дужки ввімкнено i:find("w"). Цікаво, що зберігання "o"до змінної зберегло пару байтів при використанні rep, але було б контрпродуктивним з "w"або "e". Чим більше ви знаєте.


0

Луа: 115 92 89 байт

i=...l=#i-2o="o"io.write(i,"s go M",i:find"a"and("e"):rep(l)..o:rep(l).."w"or o:rep(l*2))

приймає C[]tабо C[]wяк вхід; [] = a або o. Вхідний номер введено для результату.

довга версія:

i=...   --"C[]t" or "C[]w"
l=#i-2  --length of input -2
o="o"   --shorten usage of "o"
io.write(i,"s go M",i:find"a"and("e"):rep(l)..o:rep(l).."w"or o:rep(l*2)) 

-- if it's a C"a"t concat "s go M" then repeat  --> Cats/Cows go M
-- "e" and then "o" l times and concat else     --> Cats go Meo
-- repeat "o" l*2 times and concat              --> Cows go Moo
-- concat "w" and output evrything              --> Cats go Meow

Приклади виходів:

Caaat --> Caaats go Meeeooow
Cat   --> Cats go Meow
Cow   --> Cows go Moo

Редагувати: змінено if then elseна and or. видалено ВСІ непроміжні місця.

Також ви спробуйте його тут: Execute Lua Online, але я не міг зрозуміти, як користуватися терміналом, тому я поставив його у функцію.

Редагувати: змінити використання "o" та видалити () з :find. заслуга в Cyv за пошук цих оптимізацій. Додано "s" і змінено l=#i-3наl=#i-2

З введенням, включаючи "s" лише 88 байт:

i=...l=#i-3o="o"io.write(i," go M",i:find"a"and("e"):rep(l)..o:rep(l).."w"or o:rep(l*2))

Вхід повинен бути котом чи коровою, а не котами, коровами. І не використовує великих букв. 'коти' вихід 'коти йдуть М'яв' має бути "Коти йдуть мяу"
Фідель Едуардо Лопес

@ FidelEduardoLópez Я погоджуюся на перше, а не на друге. Відповідно до слова, яке означає кішка, і слово, що означає корова, Коти дозволяється, але не відповідно до введених слів catі cow. Для введення даних може використовуватися будь-яка велика літера, і кішка чи кішка повинні бути дійсними.
CHlM3RA

Погодьтеся. Вхід може використовувати будь-яку велику літеру, але вихід завжди повинен бути використаний з великої літери, як C [] ts M [] w, чи не так?
Фідель Едуардо Лопес

0

Дарт , 114 112 110 104 102 100 байт

f(s)=>s+'s go M'.padRight(s[1]=='a'?s.length+4:0,'e').padRight(2*s.length+2,'o')+(s[1]=='a'?'w':'');

Спробуйте в Інтернеті!

  • -2 байти: Змінено спосіб обчислення зміщення u, щоб зменшити кількість доповнень
  • -2 байти: перемістив чек на першому вкладенні на ширину, а не на символ
  • -6 байт: Змінено чек корів / котів
  • -2 байти: позбавлення від змінних призначень
  • -2 байти: зменшено зменшення темпів парентезу на 2 * (довжина довжини + 1)

  • -1

    PHP, 170 164 161 157 байт

    preg_match("/(?i)c([ao]+)/",$argv[1],$e);
    $n=strlen($e[1]);
    $c=$e[1][0];
    $a=($c=="a"?("ew"):("o"));
    echo "M".str_repeat($a[0],$n).str_repeat("o",$n).$a[1]."\n";

    Бере будь-яку капіталізацію. 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 байт).
    Кенні
    Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
    Licensed under cc by-sa 3.0 with attribution required.