Gatos vão miau, vacas vão moo


40

Todo mundo sabe que os gatos ficam miau, mas o que muitos não percebem é que os caaaats ficam meeeeoooow. De fato, o comprimento da vogal que o gato produz depende do comprimento da vogal com a qual você a dirige.

Da mesma forma, vacas vão moo, mas coooows vão moooooooo

Desafio

Você deve escrever um programa que use como entrada, uma palavra que significa gato e uma palavra que signifique vaca, determine o número de vogais principais e imprima uma das seguintes seqüências de caracteres, conforme apropriado:

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

Onde []significa as vogais, de acordo com as seguintes regras:

  • O número de e e o em "Miau" deve coincidir com o número de vogais encontradas na palavra de entrada.
  • O número de o's em "Moo" deve ser o dobro do número de vogais encontradas na palavra de entrada.

O programa deve reconhecer as palavras de entrada cate cow. A entrada pode usar qualquer capitalização mais conveniente, mas a saída deve ser capitalizada exatamente como mostrado acima.


42
piada sobre uma certa raposa
— Martin Ender

7
Não sei se entendi o desafio. A entrada é uma ou duas palavras? Você pode dar alguns exemplos de pares de entrada / saída?
— Zgarb

31
@ MartinBüttner Não sei se sei de que raposa você está falando. Mova minha memória, o que diz?
— DJMcMayhem

4
Você especifica o número de e e o, mas não a ordem deles. É Meooeoewuma saída válida para Caaat, por exemplo?
— 22615 Peter Olson

10
Pelo amor de raposa, pare com os trocadilhos!
— Eumel

Respostas:


17

Retina , 57 49 44 43 41 bytes

Tão perto ... :) Pitão ...

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

Experimente online.

Espera que a entrada seja capitalizada como Caaatou Coooow.

Explicação

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

A regex corresponde à entrada inteira e captura as vogais no grupo 1(não precisamos de âncoras, porque a correspondência não pode falhar e corresponderá avidamente à entrada inteira). As gravações de substituição de trás que a entrada, e anexa s go M, seguido por duas vezes as vogais. Para entradas Caaate Coooow, obtemos:

Caaats go Maaaaaa
Coooows go Moooooooo

A saída para vacas já está correta. Nós só precisamos fazer algo sobre esses gatos.

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

O +diz à Retina para repetir esta etapa o mais rápido possível. O regex corresponde a dois as na última parte da string (garantimos isso com a $âncora, para não substituir as coisas por dentro Caaats). Isso corresponderá essencialmente a tudo depois M, desde que essa parte ainda tenha as. Os dois as são removidos e o sufixo inteiro depois de envolver e...ow:

Caaats go Meaaaaow
Caaats go Meeaaowow
Caaats go Meeeowowow

Finalmente, existem dois muitos ws no resultado, portanto, removemos aqueles que precedem um o(para garantir que não estamos atrapalhando o win Coooows):

wo
o

E ficamos com:

Caaats go Meeeooow

11

LabVIEW, 58 Primitivas do LabVIEW

criar cordas como essa é uma dor ...

O vis mais à esquerda é a correspondência de padrões, a + e o + pesquisam, respectivamente, a quantidade mais atrasada de as e os em uma linha.

Tomando o comprimento desses, crio 3 matrizes 1 com comprimento os 1 com comprimento es e uma com 2 vezes o comprimento.

Então todas as peças são reunidas. Primeiro a entrada original, depois M todas as matrizes, a não utilizada fica vazia para que sejam ignoradas e, finalmente, se a entrada for de gato. (Se como foi encontrado, haverá após a partida, se não depois da partida estiver vazia)

Para o lolz eu também implementei o fox com 6 saídas diferentes ^^


Não tenho como testar isso, mas se funcionar como você diz, estou bem impressionado!
— Sonic Atom

Você pode dar uma explicação por interesse?
— Sonic Atom

explicação é até btw, não hesite em perguntar se há alguma dúvida
— Eumel

Golpe de código como um chefe. Uau.
— Jakuje

7

Pitão, 50 44 34

Recebe entrada no formato ["caat", "coow"].

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

Experimente online.

Explicado:

  .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"

Obrigado a Jakube pelas grandes reduções de comprimento.


Algumas pequenas coisas: você pode substituir o primeiro jkpor s, remover o segundo jk(não faz nada) e substituir "w\n"por \wb.
— Jakube

Além disso, a maior parte do seu código aparece duas vezes no código, como r.Q3outras coisas. Você pode usar um mapa binário e salvar 10 caracteres adicionais. Pj.bs[rN3"s go M"S*-lN2+Y\o\w)Q"eo. Não tenho certeza, se você já tem experiência com mapas, se tiver alguma dúvida, eu posso explicar no Pyth Chat .
— 21415 Jak Jak

Bom obrigado. Imaginei que poderia fazer algo assim, mas não sabia exatamente como.
— Luke

Isto é muito eficiente. Deveria ter mais votos.
— Sonic Atom


5

Perl, 66 61 55 54 bytes

inclui +1 para -p

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

A entrada é esperado para estar de acordo com /^C[ao]+[tw]$/(sem mudança de linha à direita!)
Uso:/bin/echo -n Caaat | perl -p 55.pl

Demolir

/[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.

Versão anterior:

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

Comentado :

@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.

Exemplo: Caaat

  • Capturar $&como ae @lcomo (a,a,a).
  • Definir $xa três vezes a, seguido de 3 vezes o: aaaooo.
  • Traduzir tudo aem $xque e: eeeooo. O número de substituições (0 ou positivo) serve como um detector de gato: defina $ycomo wsim.
  • Mude a entrada acrescentando s go M, eeeoooe w.

  • atualização 61 : economize 5 bytes usando list em vez de string
  • actualizar 55 : desc 6 bytes por inlining, a atribuição de $\, em vez de s/$/, e não necessitando de final de linha de entrada.
  • atualização 54 : economize 1 byte eliminando @l.

4

Python 2, 74 bytes

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

Recebe entrada

Caaat ou Cooow


2

CJam ( 60 57 55 53 bytes)

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

Demonstração online . A entrada é assumida como minúscula.

Para o mesmo comprimento:

"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 bytes

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)"

(as quebras de linha contam o mesmo que ponto e vírgula, portanto, são quebradas para maior clareza)

Desafio surpreendentemente complicado. E estou razoavelmente certo de que isso pode ser ainda mais importante.

Toma seqüências de entrada como $ae $b. Concatena-os e os projeta como um conjunto de caracteres, e depois passa por um loop %{}. Cada letra é então verificada se é o -equal 'a'e a variável de contador associada é incrementada adequadamente. Em seguida, subtraímos 4+$cde $dpara contabilizar catcwna entrada e procedemos à formulação das sentenças de saída, modificando os tempos de saída das vogais nos contadores correspondentes. (No PowerShell, 'e'*3renderia 'eee', por exemplo.)


1

Quase semelhante à resposta do @ omulusnr, mas isso produz a saída correta e também a entrada não diferencia maiúsculas de minúsculas.

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':'';Um pouco mais curto para 166 bytes
— Tschallacka

1

Swift 2, 3̶8̶1̶ 333 bytes

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" :""))}

Ungolfed:

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" :""))
}

Leva gato ou vaca qualquer capitalização. Você pode tentar aqui:

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


2
Como isso leva a entrada?
— a spaghetto

Sem entrada neste exemplo, eu fiz isso para testar no campo de jogos, de modo nenhum a entrada lá, uso deve vars para teste
— Fidel Eduardo López

11
Eu acho que isso torna um trecho então. Ele precisa ser uma função ou um programa completo para ser válido. : /
— a spaghetto

11
Ok, eu fiz isso funcionar ..
— Fidel Eduardo López

1

MATLAB: 190 152 118 bytes

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])

Ungolfed:

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])

Testes:

caaaaaaaats
Caaaaaaaats go Meeeeeeeeoooooooow

cooooows
Cooooows go Moooooooooo

PS: Obrigado a @Kenney pela boa sugestão (ver comentários)!


Iria disp( (b>0)*[...] + (c>0)*[...] )trabalhar aqui?
— 22615 Kenney

Boa sugestão @Kenney
— brainkz

1

PHP, 138 bytes

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')));

legível:

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'))
);

tentou mais curto, mas não vai funcionar em 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

OCTAVE, 126 , 108

Primeira versão com variáveis ​​e explicação, 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}]);

Explicação: L sabe qual animal contém qual letra. S sabe o que eles repetem. e conhece o final. Você precisa ter a "transmissão automática" ativada para que isso funcione, mas deve estar por padrão em todas as oitavas que usei. É claro que existem maneiras mais curtas com, por exemplo, o comando regexprep (expressões regulares com substituição), mas já existem várias dessas abordagens nas respostas, o que seria chato.


Edit: Ignorando variáveis ​​que ocorrem apenas uma vez, usando a indexação on-the-fly de oitavas (não sei o que é chamado de real) e adicionando "i", variável de string de entrada:

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':''))

Experimente aqui: https://jsbin.com/guqaxejiha/1/edit?js,console


Não funciona em Caaat, gera 'Caaats go Meoeoeow e deve ser' Caaats go Meeeooow
— Fidel Eduardo López

@ FidelEduardoLópez o desafio não especifica a ordem: "O número de e e o em" Miau "deve corresponder ao número de vogais encontradas na palavra de entrada."
— Pavlo

Bem, eu acho que você está certo .. engraçado miando gatos você tem lá :)
— Fidel Eduardo López

0

Lua, 121 90 Bytes

121 bytes

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 bytes

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"))

Recebe entradas como 'Caats' ou 'Coooows' que diferenciam maiúsculas de minúsculas. Como não há requisitos para entradas inválidas, a saída pode ser estranha para, por exemplo, 'Foxes' ou 'Bois'. : P

Ungolfed

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")
      )

Atualização para 90 bytes: estrutura if-control substituída por operadores lógicos, concatenação otimizada de cadeias, acrescentando mais dados na declaração de i. Parêntese removido em i:find("w"). Curiosamente, o armazenamento "o"em uma variável economizou alguns bytes ao usar rep, mas seria contraproducente com "w"ou "e". Quanto mais você sabe.


0

Lua: 115 92 89 Bytes

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))

aceita C[]tou C[]wcomo entrada; [] = a ou o. Uma entrada lowecase será traduzida para o resultado.

versão longa:

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

Exemplo de saídas:

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

Editar: alterado if then elsepara and or. removeu TODOS os espaços sem cadeia de caracteres.

Você também pode tentar aqui: Execute Lua Online, mas eu não consegui descobrir como usar o terminal, então coloquei-o em uma função.

Editar: uso alterado de "o" e removido () de :find. o crédito vai para o Cyv por encontrar essas otimizações. Adicionado "s" e alterado l=#i-3paral=#i-2

Com entrada incluindo "s" apenas 88 bytes:

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))

A entrada deve ser gato ou vaca, não gatos, vacas. E não capitaliza. saída 'gatos' 'gatos vão Meow' deve ser 'Cats ir Meow'
— Fidel Eduardo López

@ FidelEduardoLópez Concordo no primeiro e não no segundo. De acordo com a palavra que significa gato, e uma palavra que significa vaca Gatos é permitida, mas não de acordo com as palavras de entrada cate cow. A entrada pode usar qualquer maiúscula e o gato ou o gato devem ser válidos.
— CHlM3RA

Aceita. a entrada pode usar qualquer capitalização, mas a saída deve sempre ser capitalizada à medida que C [] vai M [] w, não é?
— Fidel Eduardo López

0

Dardo , 114 112 110 104 102 100 bytes

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':'');

Experimente online!

  • -2 bytes: alterado a maneira como o deslocamento em u é calculado para reduzir o número de adições
  • -2 bytes: moveu a verificação do primeiro pasdding para a largura e não para o caractere
  • -6 bytes: alterada a verificação Cow / Cat
  • -2 bytes: Livre-se das atribuições de variáveis
  • -2 bytes: reduzido, em seguida, um número de parenteses em 2 * (comprimento s + 1)

  • -1

    PHP, 170 164 161 157 bytes

    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";

    Toma qualquer capitalização qualquer. CaAaT, coOOOwseja qual for.

    v2: realmente não precisa de [wt] $. também corrigiu char ct
    v3: char ct estava tudo errado, condensou a atribuição $ a e $ e
    v4: economize 3 bytes em $ af -> $ a
    v5: economize 4 bytes, marcando-o (não mostrado)


    Não diminuiu o voto, mas a saída está errada: ausente $argv[0]."s go ". Tente isso 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";(saída correta e 151 bytes).
    — 22615 Kenney
    Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
    Licensed under cc by-sa 3.0 with attribution required.