Introducción
Nosotros, especialmente los geeks entre nosotros, que tienden a ser fanáticos, todos recordamos esta vieja caricatura de Far Side :
Claramente, el profesor Schwartzman podría haber repasado sus habilidades de programación un poquito más antes de poner en práctica su invento. Pero, ¿puedes replicarlo tú mismo ... usando la menor cantidad de bytes posible?
Especificaciones de entrada
Debe crear una secuencia de comandos que traduzca los sonidos de los perros en "Hey" adecuadamente entonados. Esto es puro golf de código; gana el menor número de bytes.
Su entrada consistirá en alguna combinación de los siguientes tokens:
Bark
,Baark
,Baaark
,Baaaark
, ... (es decir,B*rk
con al menos 1a
reemplazando el asterisco)Woof
,Wooof
,Woooof
, ... (W*f
con al menos 2o
s reemplazando el asterisco)Grr
`Grrr
`Grrrr
, ..., (G
seguido de al menos 2r
s)- Cualquier número de caracteres
.
(punto),!
(signo de exclamación) y / o?
(signo de interrogación), que pueden aparecer en cualquier parte de la entrada
Tenga en cuenta, nuevamente, que los tokens Woof
basados y Grr
basados siempre requieren al menos dos o
sy r
s respectivamente; Wof
y noGr
son tokens válidos.
No hay límite en cuanto a la duración de un token (por ejemplo, cuántos a
s repetidos puede haber en un Bark
token); Sin embargo, su decodificador sólo tiene que funcionar correctamente para tokens de entrada con un máximo de 10 en total a
s, o
S, o r
S para pasar este desafío.
Especificaciones de salida
Fiel al diseño de Schwartzman, su programa decodificador canino debe procesarlo en texto de salida de la siguiente manera:
Bark
,Woof
YGrr
convertidoHey
;Baark
,Wooof
YGrrr
convertidoHeyy
;Baaark
,Woooof
YGrrrr
convertidoHeyyy
; etc.- Para todos los
Bark
tokens basados, el número dey
s en elHey
token basado en la salida debe ser igual al número dea
s; - Para todos los
Woof
tokens basados en, el número dey
s en elHey
token basado en la salida debe ser uno menos que el número deo
s; - Para todos los
Grr
tokens basados en, el número dey
s en elHey
token basado en la salida debe ser uno menos que el número der
s; - Todo puntuacion (
.
,!
y?
) se deja sin cambios.
¡Recuerde soltar uno y
de la salida solo para Woof
sy Grr
s! La entrada Baaaaaaaark?
, con 8 a
s, se convertirá Heyyyyyyyy?
, con un conjunto coincidente de 8 y
s. Sin embargo, se Woooooooof?
vuelve único Heyyyyyyy?
, con 7 y
s.
Nuevamente, si puede hacer que su programa funcione para tokens de entrada de tamaño ilimitado, eso es genial, pero para los propósitos de este desafío, su programa solo se verificará para asegurarse de que funcione correctamente para tokens de entrada que no tengan más de 10 letras repetidas .
Todo Bark
-, Woof
-, y Grr
los tokens basados en su entrada se supone que comenzar con letras mayúsculas. Por lo tanto, no hay ninguna necesidad de inflexión mango Bark grrr
en Hey heyy
o algo similar.
Ejemplo de entradas y salidas
- Entrada:
Bark. Bark! Bark!!
- Salida:
Hey. Hey! Hey!!
- Entrada:
- Entrada:
Baaaaaark?
(seisa
s) - Salida:
Heyyyyyy?
(seisy
s)
- Entrada:
- Entrada:
Grrrrrrrr...
(ochor
s) - Salida:
Heyyyyyyy...
( sietey
s)
- Entrada:
- Entrada:
?...!
- Salida:
?...!
- Entrada:
- Entrada:
Wooof Woof? Grrrr. Baaaark Grr!
- Salida:
Heyy Hey? Heyyy. Heyyyy Hey!
- Entrada:
Respuestas:
Retina ,
24181716 bytes1 byte guardado en base a una idea en la respuesta de MT0.
Pruébalo en línea!
Explicación
Esto simplemente convierte todas las letras en
y
, pero si van seguidas de unaf
ok
la reemplazamos inmediatamente también. Al eliminarf
yk
"normalizar" la longitud de las palabras para que ahora tengan dosy
s más de lo que necesitan.Esto convierte los dos primeros
y
de cada palabra enHe
, completando la transformación.fuente
Perl,
514139 bytesUso
Entrada
Salida
Cómo funciona
Sustitución simple de expresiones regulares utilizando la impresión automática
-p
agregando 1 byte al conteo/ge
ejecuta la sustitución de cada patrón y ejecuta el reemplazo como código.Una versión anterior usaba una detección de tres vías, pero Martin Ender notó que no era lo suficientemente agresivo, lo que me ahorró 10 bytes.
msh210 me informó que no necesita comillas alrededor de la cadena
He
, ahorrando dos bytes.fuente
He
.Python, 106 bytes
Manifestación
https://repl.it/C6Rr
fuente
JavaScript (ES6) -
57555251 BytesPrueba:
Gracias a @MartinEnder por los bytes 56 y 51 y la inspiración para algunas de las otras virutas.
fuente
Vimscript,
51393733322928 bytes,Regex créditos por afeitar 9 bytes más: MT0, Martin Ender, msh210
Manifestación
Explicación:
fuente
\<yy
lugar de\<\hy
?Perl 5, 25 bytes
Una copia de Perl de la respuesta Retina de Martin Ender . 24 bytes, más 1 para en
-pe
lugar de-e
.fuente
Javascript,
726664 BytesEditar: separado
f=
y función + recuento de bytes reducidofuente
f=
(como valor predeterminado de PPCG), por lo que funciona 64 bytes.Pyke, 35 bytes
Pruébalo aquí!
Genera oye, genera puntuación, se junta, se une
fuente
Python 3,
140135134 bytesUsar expresiones regulares para encontrar ocurrencias de caracteres reemplazables.
Editar: Golfed 1 byte de espacios en blanco y 4 bytes al obtener los valores del resultado findall.
Edit2: Golfed 1 byte ("a" de Bark no se contó correctamente)
fuente