Torre de cuerdas

22

Dada una cadena de texto, imprímala como una 'torre'.

Cada segmento de la cadena (de la forma 0:n) se repite varias 5*nveces, por lo que el primer carácter se repite 5 veces, luego la primera y la segunda 10 veces, etc.

Ejemplos:

'hello' ->

['h']  
['h']  
['h']  
['h']  
['h']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  


'cat' ->

['c']  
['c']  
['c']  
['c']  
['c']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  

Reglas:

Puede generar cada capa como una lista de caracteres o simplemente como una cadena de ellos unida.

Whalalalalalala CHen
fuente
bienvenido a PPCG! Buen desafío
Giuseppe
Traté de limpiar el formato y explicar el desafío un poco mejor. ¿Entendí el desafío correcto?
Rɪᴋᴇʀ
2
¿Podemos tomar la entrada como una lista de caracteres?
JayCe
55
¿Podemos generar una matriz 2D de cadenas como esta [["c","c","c","c","c"],["ca","ca","ca","ca","ca","ca","ca","ca","ca","ca"],...]:?
Shaggy
3
¿Son aceptables los resultados con nuevas líneas iniciales o finales? ¿Podemos suponer que las entradas no contienen nuevas líneas?
redundancia

Respuestas:

12

R , 48 bytes

function(s)substring(s,1,rep(x<-1:nchar(s),x*5))

Pruébalo en línea!

Devuelve una lista de cadenas.

Giuseppe
fuente
¡Me había perdido el golf obvio aquí! Buena solución Intenté diferentes enfoques, pero hasta ahora todos son mucho más largos que esto.
JayCe
8

05AB1E , 6 bytes

ηā5*ÅΓ

Pruébalo en línea!

Devuelve una lista de cadenas.

Explicación

     ÅΓ # Run-length decode...
η       # ... the prefixes of the input
 ā5*и   # ... with the length range multiplied by 5 -- [5, 10, 15, 20, 25]
Kaldo
fuente
@KevinCruijssen ¡Gracias por notar eso! No debería jugar golf por la mañana sin un café primero :-(
Kaldo
1
El uso de la decodificación de longitud de ejecución ahorra 3 bytes:ηā5*ÅΓ
Adnan
@Adnan Brilliant, gracias! Sin embargo, creo que merece su propia respuesta, usted ha reducido el número de bytes en un 33% ... Volveré a mi solución original si decide publicarlo usted mismo.
Kaldo
Bonito, tuve ηvyg5*Fy=para 8.
Urna de pulpo mágico
6

Stax , 8 bytes

äï▄;♫├W^

Ejecutar y depurarlo

Desempaquetado, sin golf y comentado, se ve así.

|[F for each prefix of the input
  i^5*  5*(i+1) where i is the iteration index
  DQ    that many times, peek and print to output

Ejecute este

recursivo
fuente
6

TI-Basic (TI-84 Plus CE), 29 bytes (27 tokens)

For(A,1,length(Ans
For(B,1,5A
Disp sub(Ans,1,A
End
End

Explicación:

For(A,1,length(Ans # 9 bytes, 8 tokens: for A from 1 to the length of the string
For(B,1,5A         # 8 bytes, 8 tokens:  5*A times
Disp sub(Ans,1,A   # 9 bytes, 8 tokens:   Print the first A characters of the string 
End                # 2 bytes, 2 tokens:  end loop
End                # 1 byte,  1 token:  end loop
pizzapants184
fuente
6

Retina , 15 bytes

.
$.>`*5*$($>`¶

Pruébalo en línea! El enlace incluye casos de prueba. Explicación:

.

Une cada personaje en la cadena.

$.>`*5*$($>`¶

$`es el prefijo del partido. Retina luego proporciona dos modificadores, lo >modifica para que esté en el contexto de la cadena entre coincidencias sucesivas, mientras .toma la longitud. Por lo tanto, comenzamos con el prefijo del sufijo, que es equivalente a la coincidencia, incluido su prefijo. Esto ahorra 2 bytes al usar coincidencias superpuestas. Los $(concatena a continuación, que, con un carácter de nueva línea, las 5*repeticiones, y luego los $.>`repite un número adicional de veces dadas por su longitud.

Neil
fuente
6

Lienzo , 6 bytes.

[³5×*P

Pruébalo aquí!

Explicación:

[      for each prefix
 ³5×     1-indexed counter * 5
    *    repeat the prefix vertically that many times
     P   and print that
dzaima
fuente
6

Brachylog , 15 bytes

a₀ᶠ⟨gj₎{l×₅}⟩ᵐc

Pruébalo en línea!

El final cse puede eliminar si OP responde positivamente a la pregunta sobre la salida de matrices 2D.

sundar - Restablece a Monica
fuente
6

Cubix ,  44  40 bytes

i.!?@UBqwW_#/>u...;B^...?qo;;q*n5;oN/./)

Pruébalo en línea!

Esto todavía tiene muchas operaciones no operativas, pero es un poco mejor que antes.

Como una descripción muy breve, un personaje se toma de la entrada y se prueba para EOI (-1), deténgase si es así. La pila se invierte. Obtenga el número de elementos en la pila y multiplique por -5. Déjalo caer al fondo de la pila y limpia. Pase por la pila, imprimiendo, hasta obtener un número negativo. Imprima la nueva línea, incremente el número, si 0 cae el cero, invierta la pila y comience desde la entrada nuevamente, de lo contrario recorra la pila, imprima, hasta un número negativo ... hasta la saciedad

Cubificado parece

      i . !
      ? @ U
      B q w
W _ # / > u . . . ; B ^
. . . ? q o ; ; q * n 5
; o N / . / ) . . . . .
      . . .
      . . .
      . . .

Míralo en línea

MickyT
fuente
5

JavaScript, 48 46 bytes

(gracias @redundancy)

Editar: El autor aclaró y esta respuesta ahora no es válida, pero la dejaré aquí sin cambios.

Devuelve una matriz de cadenas de varias líneas.

s=>[...s].map(c=>(q+=c).repeat(5*++i),i=q=`
`)

Intentalo

f = s=>[...s].map(c=>(q+=c).repeat(5*++i),i=q=`
`);

console.log( f("hello").join`` );

Estrategia potencial:

No me ayudó mucho, pero tal vez alguien pueda usar esto:

El número de caracteres en la línea (indexada a 0) ies floor(sqrt(2/5*i+1/4)+1/2), que se reproduce en JavaScript como (.4*i+.25)**.5+.5|0.

Para una cadena de longitud n, hayn*(n+1)*5/2 líneas.

Quizás: s=>{for(i=0;(n=(.4*i+++.25)**.5+.5|0)<=s.length;)console.log(s.slice(0,n))}

MattH
fuente
1
Suponiendo que su formato de salida es válido de acuerdo con el desafío, puede guardar 2 bytes como se demuestra aquí: ¡ Pruébelo en línea!
redundancia
3

Casco , 8 bytes

ΣzoR*5Nḣ

Pruébalo en línea!

Explicación

Σz(R*5)Nḣ  -- example input: "ab"
        ḣ  -- non-empty prefixes: ["a","ab"]
 z(   )N   -- zip with [1..]
    *5     -- | multiply by 5
   R       -- | replicate
           -- : [["a","a","a","a","a"],["ab","ab","ab","ab","ab","ab","ab","ab","ab","ab"]]
Σ          -- concat: ["a","a","a","a","a","ab","ab","ab","ab","ab","ab","ab","ab","ab","ab"]
ბიმო
fuente
3

Haskell, 46 43 42 bytes

f s=do n<-[1..length s];take n s<$[1..n*5]

Pruébalo en línea!

Tristemente initsrequiere import Data.List, entonces

import Data.List
((<$)<*>(>>[1..5])=<<).inits

con sus 45 bytes es más largo.

Editar: -1 byte gracias a @BWO.

nimi
fuente
3

Carbón , 11 bytes

F⊕LθE×⁵ι…θι

Pruébalo en línea! El enlace es a la versión detallada del código. La salida incluye 0 repeticiones de la subcadena de longitud cero. Explicación:

   θ          Input string
  L           Length
 ⊕            Incremented
F             Loop over implicit range
      ⁵       Literal 5
       ι      Current index
     ×        Multiply
    E         Map over implicit range
         θ    Input string
          ι   Current index
        …     Chop to length
              Implicitly print each string on its own line
Neil
fuente
3

PowerShell , 40 20 25 bytes

Puntuación reducida a la mitad gracias a mazzy
+5 bytes gracias a AdmBorkBork que señala las especificaciones

$args|%{,($s+=$_)*5*++$i}

Pruébalo en línea!

Toma entrada a través de salpicaduras. Funciona construyendo la cadena agregando el siguiente carácter a sí mismo, lo convierte en una matriz de un elemento y luego lo repite 5*iveces.

Veskah
fuente
1
parames muy caro. Trate de evitarlo
mazzy
@mazzy Dang, tratar de guardar el índice en lugar del personaje en sí me llevó por mal camino. Gracias.
Veskah
@AdmBorkBork Ja, ja. Debería arreglarse ahora
Veskah
2

MATL , 12 bytes

f"G@:)@5*1X"

Pruébalo en línea!

f               % Get the indices of input i.e. range 1 to length(input)
 "              % For loop over that
   G            % Push input string
    @           % Push current loop index
     :          % Range 1 to that
      )         % Index at those positions (substring 1 to i)
       @5*      % Multiply loop index by 5
          1X"   % Repeat the substring that many times rowwise
                % Results collect on the stack and are 
                %  implicitly output at the end
sundar - Restablece a Monica
fuente
2

V , 17 bytes

òïç$îî/6Ä
Hl$xòxú

Espera entradas sin nuevas líneas y salidas con nuevas líneas iniciales superfluas.

Puedo eliminar esta entrada si la entrada / salida viola la especificación de desafío.

Pruébalo en línea!

21 bytes

òïç$îî/6Ä
Hl$xòxíîî/ò

Espera entradas sin nuevas líneas, pero salidas con solo una nueva línea inicial y final.

Explicación

Las subcadenas diferentes se separan con dos líneas nuevas consecutivas, de modo que la duplicación en línea solo se aplica a las líneas que coinciden con la expresión regular $\n\n .

Cuando el comando de duplicación ( Ä) recibe un recuento, por ejemplo , (creo) elimina la línea actual antes de pegar los ntiempos, por lo que solo parece agregar n - 1copias.

ò         | recursively...
 ï        | . append newline
  ç       | . globally search lines matching...
   $îî    | . . compressed version of $\n\n regex
      /6Ä | . . duplicate to create 6 copies
H         | . go to first line
 l        | . move cursor right 1 char
          | . . if current line is 1 char long, errors out of recursion
  $x      | . delete 1 char from end of current line
    ò     | ...end
     x    | delete extra 1-char substring
      ú   | sort so that newlines rise to top
redundancia
fuente
1

Perl 6 , 25 bytes

{(1..*X*5)RZxx[\~] .comb}

Pruébalo en línea!

Bloque de código anónimo que devuelve una lista de la lista de cadenas.

Si lo desea como una matriz 1D, puede agregarlo flatal frente de esta manera:

{flat (1..*X*5)RZxx[\~] .comb}

Pruébalo en línea!

Explicación:

{                       }  # Anonymous code block
                   .comb   # Split the string into a list of characters
              [\~]         # Triangular reduce the list of characters with the concatenate operator
          RZxx             # Multiply each list by:
 (1..*X*5)                 # A sequence of 5,10,15 etc.

Alternativamente,

{($+=5)xx*RZxx[\~] .comb}

Pruébalo en línea!

También funciona para la misma cantidad de bytes.

Jo King
fuente
1

Japt, 10 bytes

Esperando confirmación de si el formato de salida es aceptable (+2 bytes si no).

å+ £T±5 ÇX

Intentalo

Lanudo
fuente
La salida me parece razonable, bien hecha.
Nit
1

JavaScript, 76 bytes

s=>{for(i=1;i<=s.length;i++)for(j=0;j<5*i;j++)console.log(s.substring(0,i))}

f=s=>{for(i=1;i<=s.length;i++)for(j=0;j<5*i;j++)console.log(s.substring(0,i))}

f("cat")

Medude
fuente
Hola y bienvenidos a PPCG.
Jonathan Frech
i=1;i<=s.length;i++puede ser i=0;++i<=s.length;.
Jonathan Frech
1

Adelante (gforth) , 48 bytes

: f 1+ 1 do i 5 * 0 do dup j type cr loop loop ;

Pruébalo en línea!

Explicación

  1. Bucle de 1 a longitud de cadena
  2. para cada iteración:
    1. Tiempos de bucle (5 * índice de bucle)
    2. Imprimir cadena desde el principio al índice del bucle externo

Explicación del código

: f                \ start a new word definiton
  1+ 1             \ set up to the loop paramers from 1 to str-length
  do               \ start a counted loop
    i 5 * 0 do     \ start a second counted loop from 0 to 5*index - 1
      dup j        \ duplicate the string address and set the length to the outer index
      type         \ print character from start of string to loop index
      cr           \ output a newline
    loop           \ end inner counted loop
  loop             \ end outer counted loop
;                  \ end word definition
reffu
fuente
1

Java 10, 120 92 90 89 bytes

s->{for(int j=1,i=1;i<=s.length();i+=++j>i*5?j=1:0)System.out.println(s.substring(0,i));}

-28 bytes gracias a @ OlivierGrégoire .
-1 byte gracias a @ceilingcat .

Pruébalo en línea.

Explicación:

s->{                      // Method with String parameter and no return-type
  for(int j=1,            //  Repeat-integer, starting at 1
      i=1;i<=s.length()   //  Loop `i` in the range [1,length_input]
      ;                   //    After every iteration:
       i+=++j>i*5?        //     Increase `j` by 1 first with `++j`
                          //     If `j` is now larger than `i` multiplied by 5:
           j=1            //      Increase `i` by 1, and reset `j` to 1
          :               //     Else:
           0)             //      Leave `i` the same by increasing it with 0
    System.out.println(   //   Print with trailing newline:
      s.substring(0,i));} //    The prefix of size `i`
Kevin Cruijssen
fuente
1
92 bytes :s->{for(int i=1,j=1;i<=s.length();i+=j++<i*5?0:+(j=1))System.out.println(s.substring(0,i));}
Olivier Grégoire
@ OlivierGrégoire Gracias! Y he podido jugar golf 2 bytes más al cambiar usando >=y en ?j=1:0lugar de <y ?0:+(j=1).
Kevin Cruijssen
¡Bueno! Estaba tratando de deshacerme de él, pero seguía teniendo problemas de compilación. No pensé en revertir la condición. ¡Bien hecho! ;)
Olivier Grégoire
@ceilingcat Gracias
Kevin Cruijssen
1

brainfuck , 40 bytes

++++++++++>,[>>+++++[<<[<]>[.>]>>+<-]<,]

Pruébalo en línea!

[Tape: 10 (newline), [characters], 0, rowcounter]

++++++++++> 10 (newline)
,[          for each input character
  >>+++++     add 5 to number of rows
  [           for each row
    <<[<]       go to start
    >[.>]       print newline and all previous characters
    >>+         add 1 to next rowcounter cell
    <-          decrement current rowcounter cell
  ]
  <,          input next character
]
dorio
fuente
1

APL (Dyalog Unicode) , SBCS de 14 bytes

{↑(5×⍳≢⍵)/,\⍵}

Pruébalo en línea!

Mi primera publicación apl, así que avíseme si tiene alguna sugerencia

Cómo funciona:

{↑(5×⍳≢⍵)/,\⍵}
          ,\⍵  - Prefixes of the input
         /      - Repeated
     ⍳≢⍵        - By a list of indices the same length as the input
   5×           - Times 5
               - Separate into rows         
franco
fuente
en realidad no es Separar en filas sino Combinar [lista de listas] en filas [de una matriz] , o más técnicamente Incrementar el rango a expensas de la profundidad .
Adám