Palabras de guirnalda
Una palabra de guirnalda es una palabra que se puede unir como una guirnalda, porque termina con las mismas letras con las que comienza. ¡Estos grupos de letras pueden incluso superponerse!
Por ejemplo, underground
es una palabra de orden de guirnaldas 3
, porque comienza y termina con los mismos 3 caracteres und
,. Esto significa que podría ser encadenado como undergroundergrounderground...
.
alfalfa
¡es una palabra de guirnalda también! Es de orden 4. Comienza y termina con alfa
. Puede ser ensartados este modo: alfalfalfalfa
.
Un proceso que llamo guirnalda es cuando una vez que determina el orden n
de una palabra de guirnalda, toma la palabra original y agrega el segmento requerido para que se repita como guirnalda n
veces. Entonces, dado que onion
es una 2
palabra de guirnalda de orden , tomaría onion
, cortaría las primeras 2
letras para obtener ion
y agregar eso al final de los 2
tiempos para obtener onionionion
.
Objetivo
Haga un programa o función que tome datos de entrada estándar o un argumento de función e imprima o devuelva la palabra, garlandified.
Todas las palabras serán minúsculas, y el orden más alto posible para una palabra es length(word) - 1
.
Ejemplo de E / S
"onion" --> "onionionion"
"jackhammer" --> "jackhammer"
"abracadabra" --> "abracadabracadabracadabracadabracadabra"
"" --> ""
"zvioz" --> "zviozvioz"
"alfalfa" --> "alfalfalfalfalfalfa"
"aaaa" --> "aaaaaaa"
Este es el código de golf , por lo que gana el menor número de bytes.
Respuestas:
Pyth,
1918 bytesPruébelo en línea: demostración o prueba de arnés
Explicaciones:
fuente
Python, 60 bytes
Esperaba algo mejor, pero bueno.
s.find
funciona perfectamente aquí en lugar denot s.startswith
.fuente
Retina , 58 bytes
Cada línea debe ir a su propio archivo, pero puede ejecutar el código como un archivo con la
-s
bandera.Los cuatro pares de sustitución hacen lo siguiente:
order
número de caracteres.order
veces.Los estados de cadena para el ejemplo
onion
:fuente
Haskell, 64 bytes
Pruebas:
fuente
Java,
160157 bytesDe entrada y salida:
Espaciado y con pestañas para facilitar la lectura:
Sugerencias bienvenidas.
fuente
i=0;
?Sed:
8784 caracteres(Código de 83 caracteres + opción de línea de comando de 1 carácter).
Ejecución de muestra:
fuente
CJam,
2423 bytesSolo para empezar con algo ...
Pruébalo en línea aquí
fuente
Matlab:
978982 bytesFunción que usa una expresión regular con lookbehind y un grupo de captura:
Eso
sum
es necesario para manejar la entrada de cadena vacía (convertir[]
en0
).Ejemplos:
fuente
REGXY,
5349 bytesUtiliza REGXY , un lenguaje basado en la sustitución de expresiones regulares.
Descripción general: se aplican varias expresiones regulares. Un ejemplo de ejecución se vería así:
Explicación detallada El siguiente es un desglose línea por línea de las expresiones regulares:
Esta es una sustitución de expresiones regulares que coincide con la primera cadena vacía (es decir, el inicio de la cadena) y la reemplaza con todo a la derecha de la coincidencia (
$'
) seguido de un hash. Por ejemplo, se convertiráonion
enonion#onion
.Esta línea encuentra la sección que se superpone al buscar un grupo de caracteres que preceden inmediatamente al # (
(.+)
) que son los mismos en el otro lado del # (\1
). El \ K simplemente significa 'olvida que hice coincidir cualquier cosa', lo que significa que en realidad no será reemplazado en la sustitución. Esto efectivamente, esto significa que simplemente agregamos un # a la posición después de que se haya encontrado la superposición, convirtiéndoseonion#onion
enonion#on#ion
.La 'a' inicial es solo una etiqueta para la expresión regular. Después de esto, encontramos el primer # seguido de un solo carácter (
.
) y capturamos todo después de esto hasta el siguiente # (.*#
). Reemplazamos esto con todo a la derecha del partido, es decir, el último token ($ '), seguido de un # ($1
), seguido del segundo token menos un carácter (tratamos esto como un contador, disminuyéndolo en cada iteración). En el caso de la cebolla # en # ion, las dos fichas a las que hacemos referencia se muestran entre paréntesis, y la sección que coincide con la expresión regular completa se encuentra entre las tuberías:onion|(#)o(n#)|ion
. Luego reemplazamos los bits que emparejamos (entre las tuberías) con$'
(todo a la derecha del emparejamiento, es decir, 'ion'), luego $ 1 (el #), luego $ 2 (n #), lo que significa que terminamos cononion|(ion)(#)(n#)|ion
(los paréntesis muestran los tres tokens en la cadena de reemplazo).Si la expresión regular no coincide en la primera alternancia (todo antes de la tubería), debemos haber reducido nuestro contador a cero, lo que significa que no hay caracteres dentro de la segunda ficha. En su lugar, nos fijamos en la segunda parte del patrón,
#.*
. Esto simplemente reemplaza todo después del primer # con$'$1$2
. Dado que esta alternancia no crea referencias inversas, y no hay nada a la derecha de la coincidencia (.*
coincide hasta el final de la cadena), terminamos la coincidencia y devolvemos el resultado.Esto es solo un puntero a la línea anterior, lo que garantiza que continuaremos ejecutando la sustitución de expresiones regulares hasta que ya no coincida.
fuente
jq 1.5: 91 caracteres
(Código de 87 caracteres + opción de línea de comando de 4 caracteres).
Ejecución de muestra:
fuente
rs ,
5148 bytesTOMA ESO, RETINA Y SED !!!!! ;)
Corte 3 bytes gracias a @randomra.
Demostración en vivo y casos de prueba.
Tenga en cuenta que el
jackhammer
caso de prueba no está allí. Hay un error en el manejo de espacios en la interfaz web que hace que imprima resultados incorrectos. La versión sin conexión de lors
maneja correctamente.Versión de 51 bytes:
Demostración en vivo y casos de prueba para el original.
fuente
JavaScript (ES6), 95 bytes
Manifestación
Firefox solo por ahora:
fuente
JavaScript (ES6), 82 bytes
[Eliminé mi respuesta original, porque ahora aprendí ES6 y estaba interesado en encontrar una solución recursiva para este desafío]
Ejemplo
fuente
CoffeeScript + ES6, 77 bytes
El mismo enfoque que mi respuesta de JavaScript.
fuente
do
Golfizado: 195 bytes - GCC
fuente
int
implícito en (versiones suficientemente antiguas de) C?Groovy
755755 bytesEs sorprendente cómo volver a algo al día siguiente puede ayudar
Sin golf:
fuente
En caso de que alguien necesite el código en JS para probarlo. Nota: atravesé la cadena desde el final para aumentar la eficiencia:
fuente