Todo el mundo sabe que los gatos maullan, pero lo que muchos no se dan cuenta es que los caaaats se van muuuuuuuy. De hecho, la longitud de los sonidos de las vocales que hace el gato depende de la longitud de la vocal con la que la abordes.
De la misma manera, las vacas se mudan, pero las muuuchas se muuuuu
Reto
Debe escribir un programa que tome como entrada, una palabra que significa gato y una palabra que significa vaca, determine el número de vocales principales e imprima una de las siguientes cadenas, según corresponda:
C[]ts go M[]w
C[]ws go M[]
Donde se []
encuentran las vocales, de acuerdo con las siguientes reglas:
- El número de e's y o's en "Miau" debe coincidir con el número de vocales encontradas en la palabra de entrada.
- El número de o en "Moo" debe ser el doble del número de vocales encontradas en la palabra de entrada.
El programa debe reconocer las palabras de entrada cat
y cow
. La entrada puede usar cualquier uso de mayúsculas que sea más conveniente, pero la salida debe estar en mayúscula exactamente como se muestra arriba.
Meooeoew
una salida válida paraCaaat
, por ejemplo?Respuestas:
Retina ,
5749444341 bytesTan cerca...:)Pyth ...Pruébalo en línea.
Espera que la entrada se capitalice como
Caaat
oCoooow
.Explicación
La expresión regular coincide con toda la entrada y captura las vocales en grupo
1
(no necesitamos anclajes, porque la coincidencia no puede fallar y codiciosamente coincidirá con toda la entrada). La sustitución reescribe esa entrada y agregas go M
, seguida del doble de las vocales. Para entradasCaaat
yCoooow
, obtenemos:El resultado para las vacas ya es correcto. Solo necesitamos hacer algo con esos gatos.
El
+
le dice a Retina que repita esta etapa tan a menudo como sea posible. La expresión regular coincide con dosa
s en la última parte de la cadena (nos aseguramos de esto con el$
ancla, para que no reemplacemos las cosas dentroCaaats
). Esto esencialmente coincidirá con todo despuésM
, siempre y cuando esa parte todavía tengaa
s. Los dosa
s se eliminan y todo el sufijo después de envolverse ene...ow
:Finalmente, hay dos muchos
w
s en el resultado, por lo que eliminamos los que preceden a uno
(para asegurarnos de que no estamos estropeando elw
inCoooows
):Y nos quedamos con:
fuente
LabVIEW, 58 primitivas de LabVIEW
crear cadenas como esta es un dolor ...
Las vis más a la izquierda son patrones coincidentes, a + y o + respectivamente buscan la mayor cantidad de as y os en una fila.
Tomando la longitud de aquellos, creo 3 matrices 1 con longitud os 1 con longitudes y una con 2 veces longitud os.
Entonces todas las partes se juntan. Primero la entrada original, luego s M M todas las matrices, las no utilizadas están vacías, por lo que serán ignoradas, y finalmente aw si la entrada fue gatos. (Si como se encontró, habrá después de la coincidencia, si no después de que la coincidencia esté vacía)
Para el lolz también implementé el zorro con 6 salidas diferentes ^^
fuente
Pyth,
504434Toma entrada en el formato
["caat", "coow"]
.Pruébalo en línea.
Explicado:
Gracias a Jakube por las grandes reducciones de longitud.
fuente
jk
cons
, eliminar el segundojk
(no hace nada) y reemplazar"w\n"
con\wb
.r.Q3
y otras cosas. Puede usar un binary_map y guardar 10 caracteres adicionales.Pj.bs[rN3"s go M"S*-lN2+Y\o\w)Q"eo
. No estoy seguro, si ya tiene experiencia con mapas, si tiene alguna pregunta, puedo explicárselo en Pyth Chat .Perl,
66615554 bytesincluye +1 para
-p
Se espera que la entrada se ajuste a
/^C[ao]+[tw]$/
(¡sin nueva línea final!)Uso:
/bin/echo -n Caaat | perl -p 55.pl
Descompostura
Versión previa:
Comentado :
Ejemplo:
Caaat
$&
comoa
y@l
como(a,a,a)
.$x
en tres vecesa
seguido de 3 veceso
:aaaooo
.a
en$x
ae
:eeeooo
. El número de reemplazos (ya sea 0 o positivo) sirve como un detector de gatos: establecido$y
enw
ser así.s go M
,eeeooo
yw
.$\
lugar des/$/
y no requiriendo nueva línea final en la entrada.fuente
Python 2, 74 bytes
Toma entrada
Caaat
oCooow
fuente
CJam (
60 57 5553 bytes)Demo en línea . Se supone que la entrada está en minúsculas.
Para la misma longitud:
fuente
PowerShell,
135132 bytes(los saltos de línea cuentan lo mismo que los puntos y comas, por lo que se rompe la línea para mayor claridad)
Sorprendentemente difícil desafío. Y estoy razonablemente seguro de que esto se puede jugar más.
Toma cadenas de entrada como
$a
y$b
. Los concatena y los arroja como una matriz de caracteres, luego los canaliza a través de un bucle%{}
. A continuación, se verifica si cada letra es-eq
ual'a'
y la variable de contador asociada se incrementa adecuadamente. Entonces restamos4+$c
de$d
dar cuenta decatcw
en la entrada, y procede a formular las sentencias de salida, la modificación de los tiempos de salida de los contadores de las vocales correspondientes. (En PowerShell,'e'*3
produciría'eee'
, por ejemplo).fuente
Casi similar a la respuesta de @ omulusnr, pero esto produce la salida correcta y también la entrada no distingue entre mayúsculas y minúsculas.
PHP, 172
fuente
$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':'';
un poco más corto a 166 bytesSwift 2, 3̶8̶1̶ 333 bytes
Sin golf:
Toma gato o vaca cualquier capitalización. Puedes probarlo aquí:
http://swiftlang.ng.bluemix.net/#/repl/3f79a5335cb745bf0ba7698804ae5da166dcee6663f1de4b045e3b8fa7e48415
fuente
MATLAB:
190152118 bytesSin golf:
Pruebas:
PD: ¡Gracias a @Kenney por su buena sugerencia (ver comentarios)!
fuente
disp( (b>0)*[...] + (c>0)*[...] )
Trabajaría aquí?PHP, 138 bytes
legible:
intentado más corto pero no funcionará en PHP:
=)
fuente
OCTAVE,
126, 108Primera versión con variables y explicación, 126:
Explicación: L sabe qué animal contiene qué letra. S sabe lo que repiten. Sabemos el final. Necesitas tener activada la "transmisión automática" para que esto funcione, pero debería estar por defecto en todas las octavas que he usado. Por supuesto, existen formas más cortas con, por ejemplo, el comando regexprep (expresiones regulares con reemplazo), pero ya ha habido varios enfoques de este tipo en las respuestas, por lo que sería aburrido.
Editar: omitiendo variables que solo ocurren una vez, usando una indexación de octava sobre la marcha (no sé cómo se llama real) y agregando "i", variable de cadena de entrada:
fuente
JavaScript (ES2015),
7877Pruébelo aquí: https://jsbin.com/guqaxejiha/1/edit?js,console
fuente
Lua,
12190 bytes121 bytes
90 bytes
Toma entradas como 'Caats' o 'Coooows' distingue entre mayúsculas y minúsculas. Como no hay requisitos para entradas no válidas, la salida puede ser extraña para, por ejemplo, 'zorros' u 'bueyes'. :PAGS
Sin golf
Actualización a 90 bytes: se reemplazó la estructura de control de if con operadores lógicos, se optimizó la concatenación de cadenas al agregar más datos en la declaración de
i
. Se eliminó el paréntesis eni:find("w")
. Curiosamente, el almacenamiento"o"
en una variable ahorró un par de bytes cuando se usarep
, pero sería contraproducente con"w"
o"e"
. Cuanto más sepas.fuente
Lua:
1159289 Bytestoma
C[]t
oC[]w
como entrada; [] = a's u o's. Una entrada en minúsculas se traducirá en el resultado.Versión larga:
Salidas de ejemplo:
Editar: cambiado
if
then
else
aand
or
. eliminó TODOS los espacios sin cadenas.También puedes probarlo aquí: Ejecuta Lua Online, pero no pude descubrir cómo usar el terminal, así que lo puse en una función.
Editar: se modificó el uso de "o" y se eliminó () de
:find
. el crédito va a Cyv por encontrar esas optimizaciones. Se agregó "s" y se cambiól=#i-3
al=#i-2
Con entrada que incluye "s" solo 88 bytes:
fuente
cat
ycow
. La entrada puede usar mayúsculas y cat o Cat deben ser válidos.Dart ,
114 112 110 104 102100 bytesPruébalo en línea!
fuente
PHP,
170164161157 bytesToma cualquier capitalización alguna.
CaAaT
,coOOOw
lo que sea.v2: realmente no necesito [wt] $. también corrigió char ct
v3: char ct estaba todo mal, condensó $ a y $ e asignación
v4: guarde 3 bytes en $ af -> $ a
v5: guarde 4 bytes alineándolo (no se muestra)
fuente
$argv[0]."s go "
. Pruebe estopreg_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";
(salida correcta y 151 bytes).