La entrada es una palabra de letras minúsculas no separadas por espacios en blanco. Una nueva línea al final es opcional.
Se debe emitir la misma palabra en una versión modificada: para cada carácter, duplíquelo la segunda vez que aparece en la palabra original, triplíquelo la tercera vez, etc.
Entrada de ejemplo:
bonobo
Salida de ejemplo:
bonoobbooo
Se aplican las reglas estándar de E / S. El código más corto en bytes gana.
Pruebas proporcionadas por @Neil:
tutu -> tuttuu
queue -> queuuee
bookkeeper -> boookkkeeepeeer
repetitive -> repeetittiiveee
uncopyrightables -> uncopyrightables
abracadabra -> abraacaaadaaaabbrraaaaa
mississippi -> misssiisssssssiiipppiiii
Pyth, 6 bytes
Gracias a @Doorknob por despegar 1 byte.
Gracias a @Maltysen por despegar 5 bytes.
Pruébalo en línea!
Cómo funciona
Por ejemplo, toma la cuerda
"bonobo"
.._
hace una lista:['b', 'bo', 'bon', 'bono', 'bonob', 'bonobo']
VQ._
significa "la función anterior vectorizada (aplicada en paralelo) sobreQ
y._
", lo que significa queQ
(la entrada evaluada) se tratará como una lista:['b', 'o', 'n', 'o', 'b', 'o']
y luego se emparejarán de la@
siguiente manera:Por lo tanto,
@VQ._
producirá['b', 'o', 'n', 'oo', 'bb', 'ooo']
.El
s
entonces les une todo junto, creando una cadena'bonoobbooo'
, que a continuación se imprime de manera implícita a convertirsebonoobbooo
.fuente
VQ
solo significafor N in Q
cuando no está dentro de una función. En este caso, lo que realmente está sucediendo es que@V
significa la@
función vectorizada (aplicada en paralelo) sobre sus siguientes dos argumentos,Q
y._
. Esto falta en los documentos, así que lo arreglaré.Retina ,
3419 bytesAhorró 15 bytes inspirándose en la solución de Isaac.
El recuento de bytes asume la codificación ISO 8859-1.
Las líneas vacías iniciales y finales son significativas.
Pruébalo en línea!
Explicación
Esta es una etapa de reemplazo que coincide con la expresión regular vacía (es decir, cada posición de ancho cero en la cadena) y la sustituye
$`¶
, donde$`
es el prefijo de la coincidencia e¶
inserta un salto de línea. Básicamente, esto calcula todos los prefijos y los coloca en una línea separada junto con el último carácter de ese prefijo:Habrá algunos avances de línea iniciales y finales, pero podemos ignorarlos.
De cada uno de estos prefijos queremos mantener los caracteres que son iguales al último carácter. Para eso usamos otra etapa de reemplazo:
Esto coincide con todo lo que no queremos conservar y lo reemplaza por nada. Hacemos coincidir cualquier carácter (
\D
ya que sabemos que no habrá dígitos en la entrada) y luego nos aseguramos de que no haya otra copia de ese carácter al final de la línea.fuente
Python, 56 bytes
Parece que estoy atrapado con dos respuestas de la misma longitud:
Editar: Vea la respuesta de @ pacholik para un enfoque Python más corto y alternativo.
fuente
+1
con una precedencia lo suficientemente alta como para que los padres no sean necesariosHaskell, 39 bytes
Ejemplo de uso:
f "bonobo"
->"bonoobbooo"
.Lo suficientemente diferente de la respuesta de @ Damien . Construye la cadena desde la derecha extrayendo todas las ocurrencias del último carácter de la cadena y anteponiendo una llamada recursiva con todos menos el último carácter.
fuente
> <> , 27 bytes
Requiere el intérprete oficial que sale con un error al intentar imprimir el punto de código -1. Pruébalo en línea!
El código lee la entrada de un carácter a la vez y utiliza la primera fila del cuadro de código como una gran matriz que almacena la cantidad de veces que se ha visto cada carácter hasta ahora (> <> inicializa las celdas que no son del programa a 0). La segunda fila es un bucle para generar un carácter varias veces.
Alternativamente, aquí hay una versión que sale limpiamente (37 bytes, no correctamente golfizada):
fuente
chr(-1)
. El intérprete animado es ideal para visualizaciones, pero desafortunadamente algunas de las discrepancias con el intérprete oficial son un poco molestas: /JavaScript (ES6),
4845 bytesEditar: Guardado 3 bytes gracias a @ user81655.
fuente
Haskell,
504241 bytesGuardado 8 bytes gracias a Lynn
fuente
f t=[c|(i,c)<-zip[0..]t,j<-[0..i],c==t!!j]
MATL , 8 bytes
Pruébalo en línea! O verifique todos los casos de prueba a la vez .
Explicación
fuente
Laberinto ,
5425 bytesOtra colabo con @ MartinBüttner, que en realidad hizo
máscasi todo el golf para éste. ¡Al renovar el algoritmo, hemos logrado reducir el tamaño del programa bastante!Pruébalo en línea!
Explicación
Una cartilla rápida de Labrinth:
Labyrinth es un lenguaje 2D basado en pila. Hay dos pilas, una pila principal y una pila auxiliar, y el estallido de una pila vacía produce cero.
En cada cruce, donde hay múltiples rutas para que el puntero de instrucciones se mueva hacia abajo, se comprueba la parte superior de la pila principal para ver a dónde ir después. Negativo es girar a la izquierda, cero es recto y positivo es girar a la derecha.
Las dos pilas de enteros de precisión arbitraria no tienen mucha flexibilidad en términos de opciones de memoria. Para realizar el recuento, este programa en realidad usa las dos pilas como una cinta, con el cambio de un valor de una pila a otra es similar a mover un puntero de memoria hacia la izquierda / derecha por una celda. Sin embargo, no es exactamente lo mismo, ya que necesitamos arrastrar un contador de bucle con nosotros en el camino hacia arriba.
En primer lugar, el
<
y>
en cada extremo muestra un desplazamiento y gira la fila de código que se desplaza por uno hacia la izquierda o hacia la derecha. Este mecanismo se utiliza para hacer que el código se ejecute en un bucle:<
aparece un cero y gira la fila actual hacia la izquierda, colocando la IP a la derecha del código, y>
aparece otro cero y repara la fila.Esto es lo que sucede cada iteración, en relación con el diagrama anterior:
fuente
Perl, 17
(Código de 16 bytes, +1 para -p)
Uso:
fuente
Pyth, 7 bytes
Banco de pruebas
Test suite gracias a DenkerAffe
Explicación:
fuente
Pitón 3, 52
fuente
f=lambda s:s and f(s[:-1])+s[-1]*s.count(s[-1])
PowerShell v2 +,
5247 bytesConstruye una tabla hash vacía, la almacena
$b
. Este es nuestro "contador" de las letras que hemos visto. Luego tomamos información$args[0]
, la convertimos como una matriz de caracteres y la enviamos a través de un bucle. Cada iteración, tomamos el carácter actual"$_"
y lo multiplicamos por el contador pre-incrementado en el valor dado, lo que hará que la primera aparición se multiplique por1
, la segunda por2
y así sucesivamente. Encapsulamos eso con un,-join
por lo que se genera una sola palabra.Ahorré 5 bytes gracias a TessellatingHeckler mediante el uso de una tabla hash en lugar de una matriz, por lo que no tuvimos que disminuir el carácter ASCII
97
para alcanzar el índice apropiado. Esto funciona porque el incremento previo del índice hash implícitamente llama.Add()
en segundo plano si ese índice no existe, ya que las tablas hash son mutables.fuente
Dyalog APL , 6 bytes
TryAPL!
4 funciones es una cima (2 trenes) de una horquilla (3 trenes):
Primero
⊢
(derecha - un no-op) en la cadena dada, dando'bonobo'
Luego
,\
(escaneo de concatenación) en la cadena, dando'b' 'bo' 'bon' 'bono' 'bonob' 'bonobo'
Los dos se bifurcan junto con (dados como argumentos derecho e izquierdo para)
∩¨
(intersección cada uno), es decir('b'∩'b') ('bo'∩'o') ('bon'∩'n') ('bono'∩'o') ('bonob'∩'b') ('bonobo'∩'o')
, que es'b' 'o' 'n' 'oo' 'bb' 'ooo'
Finalmente,
∊
(alistar) se aplica al resultado para aplanarlo, dando'bonoobbooo'
¡Oye, al menos coincide con Pyth ! Obviamente, Jelly es más corto, ya que es una versión de golf de J, que a su vez es un dialecto avanzado de 2 caracteres por función de APL.
fuente
Pyth, 11 bytes
Pruébalo aquí!
Explicación
fuente
J, 11 bytes
Este es un verbo monádico. Pruébalo aquí Uso:
Explicación
fuente
05AB1E , 10 bytes
Código:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
CJam, 14
Pruébalo en línea
Explicación:
fuente
Perl 6, 37 bytes
fuente
> <> , 52 bytes
Apila cada letra leída, las imprime una y otra vez por cada letra similar en la pila.
Utiliza el
&
registro, porque tener que manejar 3 variables en la pila (carta de lectura actual, posición en la pila, letra en esta posición) es una molestia.¡Puedes probarlo aquí !
fuente
Óxido, 176 bytes
Esto usa un mapa para almacenar una cadena para cada carácter en la entrada. Para cada carácter, la cadena se eliminará del mapa, se concatenará con el carácter, se volverá a insertar en el mapa y se agregará a la salida.
Me hubiera gustado usar en
get(...)
lugar deremove(...)
, pero el comprobador de préstamos me hizo cambiar de opinión.fuente
Mathcad, 66 bytes
Desafortunadamente, Mathcad no tiene un manejo de cadenas particularmente bueno, por lo que convertí la cadena de entrada a un vector y luego usé un vector (indexado con código de caracteres) para realizar un seguimiento de la cantidad de veces que se encuentra un carácter, agregando el carácter que número de veces a un vector de resultados. Finalmente, el vector resultante se convierte de nuevo en una cadena. Bastante largo por desgracia.
Tenga en cuenta que Mathcad utiliza una interfaz 2D "pizarra", con una combinación de texto normal y operadores; los operadores normalmente se ingresan a través de una barra de herramientas o atajo de teclado; por ejemplo, ctl- # ingresa el operador de bucle for, que comprende la palabra clave for, el elemento de símbolo y 3 "marcadores de posición" vacíos para las variables de iteración, rango y expresiones corporales respectivamente. Escribir [después de que un nombre de variable ingrese al modo de índice de matriz, Typing 'ingresa un par de paréntesis coincidentes ( principalmente ... hay excepciones dependiendo de qué más hay en la expresión circundante )
fuente
Javascript ES6 44 bytes
vieja respuesta
Javascript ES6 46 bytes
fuente
x
a la matriz de entrada ->q=>(x=[...q]).map(a=>x[a]=(x[a]||'')+a).join``
Julia,
3835 bytesI / O está en el origen de las matrices de caracteres. Pruébalo en línea!
Cómo funciona
¡Nosotros (re) definimos el operador monádico ! para nuestros propósitos.
Cuando ! se llama, comprueba si su argumento s está vacío. Si es así, devuelve su argumento.
Si s no está vacío, intersectamos s con su último carácter (
s[end]
), que produce todas las apariciones de ese carácter en s . Este resultado se concatena con el valor de retorno de una llamada recursiva a ! con s menos su último carácter (s[1:end-1]
) como argumento.fuente
PHP,
54515047 bytesCorre así:
Ajustes
null
deint
de desplazamiento de cadena, como se echa a compensar int todos modos cuerdas$argn
lugar de$argv
(thx Titus)fuente
$argn
con-R
para guardar tres bytes más.-n
debería hacer lo mismo que su-d error_reporting
:n
significano config file
, y los avisos están desactivados en la configuración predeterminada; entonces-nr
(respectivamente-nR
) debería ser suficiente.Mathematica, 57 bytes
Usamos
c[x]
como una tabla de búsqueda de la frecuencia con la que el personajex
ya ha ocurrido. Esto se incrementa cada vez que se recuperax~StringRepeat~++c[x]
. Desafortunadamente, para que la función sea reutilizable, necesitamos restablecer la tabla de búsqueda cada vezClear@c;c@_=0;
, lo cual es bastante costoso.fuente
awk, 72 bytes
La idea es almacenar el recuento del carácter que aparece en una matriz asociativa e imprimir el carácter este recuento veces.
fuente
Viga, 32
3342bytesEsto debería haber sido más pequeño, pero perdí algunos bytes al inicializar las ranuras de memoria a 0. Intercambiar algunas direcciones de flujo logró eliminar mucho espacio vacío.
Pruébalo en este fragmento
Explicacion general.
fuente
Python,
6662 bytesPruébalo aquí
Golfed
Sin golf
fuente