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.


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.


¡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]

@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

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

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.




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



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))}


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"]

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.


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


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.


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

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 6Ä, (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


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.


1

Japt, 10 bytes

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

å+ £T±5 ÇX

Intentalo


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")


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

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`

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
]

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         

↑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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.