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 cat
e cow
. A entrada pode usar qualquer capitalização mais conveniente, mas a saída deve ser capitalizada exatamente como mostrado acima.
Meooeoew
uma saída válida paraCaaat
, por exemplo?Respostas:
Retina ,
5749444341 bytesTão perto ...:)Pitão ...Experimente online.
Espera que a entrada seja capitalizada como
Caaat
ouCoooow
.Explicação
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 anexas go M
, seguido por duas vezes as vogais. Para entradasCaaat
eCoooow
, obtemos:A saída para vacas já está correta. Nós só precisamos fazer algo sobre esses gatos.
O
+
diz à Retina para repetir esta etapa o mais rápido possível. O regex corresponde a doisa
s na última parte da string (garantimos isso com a$
âncora, para não substituir as coisas por dentroCaaats
). Isso corresponderá essencialmente a tudo depoisM
, desde que essa parte ainda tenhaa
s. Os doisa
s são removidos e o sufixo inteiro depois de envolvere...ow
:Finalmente, existem dois muitos
w
s no resultado, portanto, removemos aqueles que precedem umo
(para garantir que não estamos atrapalhando ow
inCoooows
):E ficamos com:
fonte
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 ^^
fonte
Pitão,
504434Recebe entrada no formato
["caat", "coow"]
.Experimente online.
Explicado:
Obrigado a Jakube pelas grandes reduções de comprimento.
fonte
jk
pors
, remover o segundojk
(não faz nada) e substituir"w\n"
por\wb
.r.Q3
outras 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 .Perl,
66615554 bytesinclui +1 para
-p
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
Versão anterior:
Comentado :
Exemplo:
Caaat
$&
comoa
e@l
como(a,a,a)
.$x
a três vezesa
, seguido de 3 vezeso
:aaaooo
.a
em$x
quee
:eeeooo
. O número de substituições (0 ou positivo) serve como um detector de gato: defina$y
comow
sim.s go M
,eeeooo
ew
.$\
, em vez des/$/
, e não necessitando de final de linha de entrada.fonte
Python 2, 74 bytes
Recebe entrada
Caaat
ouCooow
fonte
CJam (
60 57 5553 bytes)Demonstração online . A entrada é assumida como minúscula.
Para o mesmo comprimento:
fonte
PowerShell,
135132 bytes(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
$a
e$b
. Concatena-os e os projeta como um conjunto de caracteres, e depois passa por um loop%{}
. Cada letra é então verificada se é o-eq
ual'a'
e a variável de contador associada é incrementada adequadamente. Em seguida, subtraímos4+$c
de$d
para contabilizarcatcw
na 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'*3
renderia'eee'
, por exemplo.)fonte
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
fonte
$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 bytesSwift 2, 3̶8̶1̶ 333 bytes
Ungolfed:
Leva gato ou vaca qualquer capitalização. Você pode tentar aqui:
http://swiftlang.ng.bluemix.net/#/repl/3f79a5335cb745bf0ba7698804ae5da166dcee6663f1de4b045e3b8fa7e48415
fonte
MATLAB:
190152118 bytesUngolfed:
Testes:
PS: Obrigado a @Kenney pela boa sugestão (ver comentários)!
fonte
disp( (b>0)*[...] + (c>0)*[...] )
trabalhar aqui?PHP, 138 bytes
legível:
tentou mais curto, mas não vai funcionar em PHP:
=)
fonte
OCTAVE,
126, 108Primeira versão com variáveis e explicação, 126:
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:
fonte
JavaScript (ES2015),
7877Experimente aqui: https://jsbin.com/guqaxejiha/1/edit?js,console
fonte
Lua,
12190 Bytes121 bytes
90 bytes
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
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 emi:find("w")
. Curiosamente, o armazenamento"o"
em uma variável economizou alguns bytes ao usarrep
, mas seria contraproducente com"w"
ou"e"
. Quanto mais você sabe.fonte
Lua:
1159289 Bytesaceita
C[]t
ouC[]w
como entrada; [] = a ou o. Uma entrada lowecase será traduzida para o resultado.versão longa:
Exemplo de saídas:
Editar: alterado
if
then
else
paraand
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 alteradol=#i-3
paral=#i-2
Com entrada incluindo "s" apenas 88 bytes:
fonte
cat
ecow
. A entrada pode usar qualquer maiúscula e o gato ou o gato devem ser válidos.Dardo ,
114 112 110 104 102100 bytesExperimente online!
fonte
PHP,
170164161157 bytesToma qualquer capitalização qualquer.
CaAaT
,coOOOw
seja 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)
fonte
$argv[0]."s go "
. Tente issopreg_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).