Dada una cadena ASCII, genera los sufijos explotados de la misma. Por ejemplo, si la cadena era abcde
, hay 5 sufijos, ordenados de mayor a menor:
abcde
bcde
cde
de
e
Luego se explota cada sufijo , lo que significa que cada personaje se copia tantas veces como su ubicación indexada en ese sufijo. Por ejemplo, explotando los sufijos de abcde
,
abcde
12345
abbcccddddeeeee
bcde
1234
bccdddeeee
cde
123
cddeee
de
12
dee
e
1
e
En total, los sufijos explotados de abcde
son
abbcccddddeeeee
bccdddeeee
cddeee
dee
e
Reglas
- Este es el código de golf, por lo que gana el código más corto.
- La entrada consistirá en los caracteres ASCII imprimibles. (Esto excluye las nuevas líneas pero incluye espacios).
- La salida tendrá cada cadena en una línea separada.
- Se permiten espacios finales en cada línea y puede haber una nueva línea adicional al final.
Casos de prueba
''
'a'
a
'bc'
bcc
c
'xyz'
xyyzzz
yzz
z
'code-golf'
coodddeeee-----ggggggooooooollllllllfffffffff
oddeee----gggggoooooolllllllffffffff
dee---ggggooooollllllfffffff
e--gggoooolllllffffff
-ggooollllfffff
goolllffff
ollfff
lff
f
's p a c e'
s ppp aaaaa ccccccc eeeeeeeee
pp aaaa cccccc eeeeeeee
p aaa ccccc eeeeeee
aa cccc eeeeee
a ccc eeeee
cc eeee
c eee
ee
e
Respuestas:
Jalea , 5 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
J,
22128 bytes¡Gracias a las millas por ahorrar 14 bytes!
Ahora esta es una muy buena solución. Bastante sucinto, también.
Este es el gancho
#~#\
aplicado a los sufijos (\.
) de la entrada. El gancho, cuando se llama en la entraday
, se descompone así:Aquí hay algunos resultados intermedios:
Casos de prueba
fuente
Python, 61 bytes
Alternativa 63:
fuente
Pitón 3,
916865 bytesTermina con un error después de imprimir la salida deseada. Pruébalo en Ideone .
Cómo funciona
Antes de f pueda llamarse recursivamente, los índices de
s[1:...]
tienen que ser calculados.Primero
enumerate(s[0]+s)
produce todos los pares (i, c) de caracteres c de s - con su primer carácter duplicado - y los índices correspondientes i . El antecedentes[0]
tiene dos propósitos aquí.El primer carácter de s debe repetirse una vez, pero el primer índice es 0 .
Una vez que se hayan procesado todos los caracteres,
s[0]
generará un IndexError , haciendo que f termine con un error en lugar de imprimir nuevas líneas hasta que se alcance el límite de recursión.''.join(i*c for i,c in ...)
construye una cadena plana de cada c repetida i veces, queprint
hace eco en STDOUT.Finalmente, dado que
print
devuelve None ys[1:None]
es simplementes[1:]
, la llamada recursivaf(s[1:...])
repite el proceso anterior para s sin su primer carácter.fuente
Perl 6 , 38 bytes
37 bytes + 1 para
-n
cambio de línea de comandoEjemplo:
Expandido:
fuente
Brachylog , 17 bytes
Pruébalo en línea!
Explicación
fuente
05AB1E , 13 bytes
Pruébalo en línea!
Explicación
fuente
CJam , 14 bytes
Pruébalo en línea!
Explicación
fuente
C #, 101 bytes
Función anónima recursiva, que también imprime una nueva línea principal. Si la nueva línea inicial no está permitida, 3 bytes adicionales la convierten en una nueva línea final:
Programa completo con método no protegido y casos de prueba:
fuente
Haskell, 48 bytes
está interconectado por cualquiera de
fuente
putStr.
, aceptamos como salida de función. Sinimport Data.List
embargo, debes usarlotails
.uncurry ... zip
conzipWith
:unlines.map(concat.zipWith replicate[1..]).tails
.zipWith replicate
acortamiento también se me ocurrió cuando desperté. Lástima quetails
no se encuentra enPrelude
i podría alcanzartails
deData.List
manera implícita y sin una completaimport
y todavía sin rebasar elfoldr
equivalente. Con respecto a la pureza sinIO
placa de caldera, también dejaría elmapM_ putStrLn
condimento al gusto de los lectores y tampoco realizaríaunlines
ninguno. Definir un bloquee=
costaría el recuento de bytes.imports
Haskell no es estándar, sino una característica de laghci
réplica. Dependiendo de tales cosas cuenta como un idioma separado, por lo que sugiero cambiar el título de su respuesta a algo asíHaskell (ghci)
. ( Ver también esta meta discusión ).Perl, 36 + 1 (
-n
) = 37 bytesNecesidades
-n
y-E
(o-M5.010
) para ejecutar:Tenga en cuenta que funciona solo en una instancia cada vez que lo ejecuta (porque usa la variable
$.
que se incrementa cada vez que se lee una línea, por lo que se mantiene1
solo la primera vez que se lee una línea). (¡Pero no hay problema aquí, solo^D
y vuelva a ejecutarlo!)fuente
Retina , 31 bytes
El recuento de bytes supone la codificación ISO 8859-1.
Pruébalo en línea!
fuente
Java,
150127 bytesEditar:
Snipet:
Sin golf:
fuente
f->{String s[]=f.split(""),o="";int i=-1,j,l=s.length;for(;++i<l;)for(j=-2;++j<i;o+=s[i]);return l<1?o:o+"\n"+f.substring(1);}
Raqueta 184 bytes
Sin golf:
Salida:
fuente
JavaScript (ES6), 65 bytes
Intentos previos:
fuente
PHP, 103 bytes (99 con etiquetas cortas)
Estoy bastante seguro de que esta no es la respuesta más corta posible.
fuente
MATL , 12 bytes
¡Me encanta cuando las comillas se juntan!
Pruébalo en línea!
Explicación
Esto funciona construyendo una matriz cuyas columnas se utilizan, una por una, para decodificar la entrada de longitud de ejecución. Como ejemplo, para la entrada
'abcde'
la matriz esCódigo:
fuente
Python 3, 95 bytes
Esto fue sorprendentemente más difícil de lo que esperaba. Rehice toda mi función tal vez 4 veces.
fuente
Java 7.140 bytes
Sin golf
La siguiente línea me da mucho dolor. No sé cómo puedo jugar golf (porque hay dos bucles para romper la condición para poner
"\n"
en la declaración impresa).System.out.println();
fuente
Pyke, 12 bytes
Pruébalo aquí!
fuente
Ruby, 51 bytes
Utiliza la
-n
bandera para +1 byte.fuente
R, 108 bytes
Lea la entrada de stdin e imprime en stdout
Sentí que el uso de
do.call
era apropiado aquí. Básicamente toma dos entradas: 1. un nombre de función en forma de cadena (rep
aquí) y una lista de argumentos y 2. aplica iterativamente las llamadas a la función usando los argumentos de la lista.P.ej:
rep("c",3)
produce el vector"c" "c" "c"
do.call("rep",list(c("a","b","c"),1:3))
produce el vector"a" "b" "b" "c" "c" "c"
rep("a",1)
,rep("b",2)
yrep("c",3)
fuente
Vim, 43 bytes
qqYlpx@qq@qqr0<C-H><C-V>{$:s/\v%V(.)\1*/&\1/g<CR>@rq@r
La primera macro separa los sufijos, la segunda macro los "explota". Probablemente vencible. Los espacios son molestos.
fuente
C, 186 bytes
Esto probablemente se puede acortar un poco, pero solo quería probarlo. Es mi segundo intento en el golf, así que dame algunos consejos (* lol) que puedas. Toma una cadena como parámetro y explota desde allí. u se usa como un búfer que almacena la cadena explotada.
Sin golf:
fuente
Acc !! 150 bytes
Espera entrada en stdin, terminada con un carácter de tabulación.
Explicación
¡Esto es realmente una muy buena tarea para Acc !! , ya que solo requiere leer una cadena e iterar sobre ella con algunos bucles anidados. Leemos la cadena en el acumulador, tratándola como una secuencia de dígitos de base 128, con el primer carácter en el extremo inferior. Después del
Count c
ciclo de apertura , el valor del acumulador se puede conceptualizar de esta manera (utilizandoxyz
como entrada de ejemplo):(El valor real del acumulador para este ejemplo es
9*128^3 + 122*128^2 + 121*128 + 120
=20888824
.)Luego podemos iterar sobre la cadena iterando sobre poderes crecientes de 128. Y podemos iterar sobre los sufijos dividiendo el acumulador por 128 después de cada iteración, cortando un carácter.
Con sangría y comentarios:
fuente