Torre de cordas


22

Dada uma sequência de texto, produza-a como uma 'torre'.

Cada fatia da string (do formulário 0:n) é repetida várias 5*nvezes; portanto, o primeiro caractere é repetido 5 vezes, depois o primeiro e o segundo 10 vezes, etc.

Exemplos:

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

Regras:

Você pode imprimir cada camada como uma lista de caracteres ou apenas uma sequência deles.


bem-vindo ao PPCG! Bom desafio.
Giuseppe

Tentei limpar a formatação e explicar o desafio um pouco melhor. Eu entendi o desafio certo?
Rɪᴋᴇʀ

2
Podemos considerar a entrada como uma lista de caracteres?
Jayce

5
Podemos produzir uma matriz 2D de seqüências de caracteres assim [["c","c","c","c","c"],["ca","ca","ca","ca","ca","ca","ca","ca","ca","ca"],...]:?
Shaggy

3
Os resultados com novas linhas iniciais ou finais são aceitáveis? Podemos assumir que as entradas não contêm novas linhas?
redundância

Respostas:


12

R , 48 bytes

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

Experimente online!

Retorna uma lista de strings.


Eu tinha perdido o golfe óbvio aqui! solução agradável Tentei abordagens diferentes, mas até agora todas são muito mais longas que isso.
Jayce

8

05AB1E , 6 bytes

ηā5*ÅΓ

Experimente online!

Retorna uma lista de string.

Explicação

     ÅΓ # Run-length decode...
η       # ... the prefixes of the input
 ā5*и   # ... with the length range multiplied by 5 -- [5, 10, 15, 20, 25]

@KevinCruijssen Obrigado por perceber isso! Eu não deveria golfe na parte da manhã sem café primeira :-(
Kaldo

1
O uso da decodificação do comprimento da execução economiza 3 bytes:ηā5*ÅΓ
Adnan

@Adnan Brilliant, obrigado! Mas acho que ele merece sua própria resposta, você reduziu a contagem de bytes em 33% ... Voltarei à minha solução original se você decidir publicá-la.
Kaldo

Bom, eu tinha ηvyg5*Fy=por 8 anos.
Magic Octopus Urn



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

Explicação:

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*$($>`¶

Experimente online! O link inclui casos de teste. Explicação:

.

Combine cada caractere na sequência.

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

$`é o prefixo da partida. O Retina fornece dois modificadores, >modifica-o para que esteja no contexto da sequência entre correspondências sucessivas, enquanto .leva o comprimento. Portanto, começamos com o prefixo do sufixo, que é equivalente à correspondência, incluindo seu prefixo. Isso economiza 2 bytes usando correspondências sobrepostas. Em $(seguida, concatena que, com uma nova linha, a 5*repita e, em seguida, a $.>`repete mais um número de vezes, dada por seu comprimento.




6

Cubix ,  44  40 bytes

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

Experimente online!

Isso ainda tem muitas no-ops, mas é um pouco melhor do que antes.

Como uma descrição muito breve, um personagem é capturado da entrada e testado para EOI (-1), interrompido se for. A pilha é então invertida. Obtenha o número de itens na pilha e múltiplos por -5. Coloque isso no fundo da pilha e limpe. Passe pela pilha, imprimindo, até um número negativo. Imprima nova linha, aumente o número, se 0 soltar o zero, inverter a pilha e começar da entrada novamente, caso contrário, percorrerá a pilha, imprimindo, até um número negativo ... ad nauseum

Cubificado parece

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

Assista online



5

JavaScript, 48 46 bytes

(obrigado @redundancy)

Edit: O autor esclareceu e esta resposta agora não é válida, mas vou deixá-lo aqui inalterado.

Retorna uma matriz de seqüências de várias linhas.

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

Tente

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

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

Estratégia potencial:

Isso não me ajudou muito, mas talvez alguém possa usar isso:

O número de caracteres na linha (indexada 0) ié floor(sqrt(2/5*i+1/4)+1/2), que é jogado no JavaScript como (.4*i+.25)**.5+.5|0.

Para uma sequência de comprimento n, há n*(n+1)*5/2linhas.

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


1
Supondo que seu formato de saída seja válido de acordo com o desafio, você pode salvar 2 bytes, conforme demonstrado aqui: Experimente online!
redundância



3

Casca , 8 bytes

ΣzoR*5Nḣ

Experimente online!

Explicação

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

Experimente online!

Infelizmente initsrequer import Data.List, então

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

com seus 45 bytes é maior.

Edit: -1 byte graças a @BWO.


3

Carvão , 11 bytes

F⊕LθE×⁵ι…θι

Experimente online! Link é a versão detalhada do código. A saída inclui 0 repetições da substring de comprimento zero. Explicação:

   θ          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

Pontuação cortada ao meio, graças a
+5 bytes confusos, graças ao AdmBorkBork apontando as especificações

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

Experimente online!

Recebe entrada através de splatting. Funciona criando a sequência adicionando o próximo caractere a si próprio, convertendo-o em uma matriz de um elemento e repetindo-o várias 5*ivezes.


1
paramé muito caro. Tente evitá-lo
mazzy 16/12

@mazzy Dang, tentar salvar o índice em vez do próprio caractere me desviou. Obrigado.
Veskah 16/12

@AdmBorkBork Ha ha, oops. Deve ser corrigido agora
Veskah 18/12

2

MATL , 12 bytes

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

Experimente online!

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 sem novas linhas e saídas com novas linhas supérfluas.

Eu posso remover esta entrada se a entrada / saída violar a especificação do desafio.

Experimente online!

21 bytes

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

Espera entradas sem novas linhas, mas gera apenas uma nova e inicial e posterior.

Explicação

Substrings diferentes são separados por duas novas linhas consecutivas, de modo que a duplicação na linha se aplique apenas às linhas correspondentes ao regex $\n\n.

Quando o comando de duplicação ( Ä) recebe uma contagem, por exemplo , (acho), ele exclui a linha atual antes de colar os ntempos, parecendo apenas anexar n - 1cópias.

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

Experimente online!

Bloco de código anônimo que retorna uma lista de lista de strings.

Se você deseja como uma matriz 1D, pode acrescentar flatna frente da seguinte forma:

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

Experimente online!

Explicação:

{                       }  # 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}

Experimente online!

Também funciona para a mesma quantidade de bytes.


1

Japonês, 10 bytes

Aguardando confirmação sobre se o formato de saída é aceitável (+2 bytes, se não).

å+ £T±5 ÇX

Tente


A saída parece razoável para mim, bem feita.
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")


Olá e bem-vindo ao PPCG.
Jonathan Frech

i=1;i<=s.length;i++pode ser i=0;++i<=s.length;.
22618 Jonathan Frech

1

Quarto (gforth) , 48 bytes

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

Experimente online!

Explicação

  1. Loop de 1 ao comprimento da string
  2. para cada iteração:
    1. Tempos de loop (5 * loop index)
    2. Imprimir string do início ao índice do loop externo

Código Explicação

: 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 graças a @ OlivierGrégoire .
-1 byte graças a @ceilingcat .

Experimente online.

Explicação:

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 Obrigado! E eu consegui jogar mais 2 bytes alterando usando >=e em ?j=1:0vez de <e ?0:+(j=1).
Kevin Cruijssen

Boa! Eu estava tentando me livrar disso, mas continuava tendo problemas de compilação. Não pensou em reverter a condição. Bem feito! ;)
Olivier Grégoire

@ceilingcat Thanks
Kevin Cruijssen 14/12

1

brainfuck , 40 bytes

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

Experimente online!

[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×⍳≢⍵)/,\⍵}

Experimente online!

Meu primeiro post apl, por favor, deixe-me saber se você tem alguma sugestão

Como funciona:

{↑(5×⍳≢⍵)/,\⍵}
          ,\⍵  - Prefixes of the input
         /      - Repeated
     ⍳≢⍵        - By a list of indices the same length as the input
   5×           - Times 5
               - Separate into rows         

não é realmente Separado em linhas, mas Combinado [lista de listas] em linhas [de uma matriz] , ou mais tecnicamente Aumente a classificação à custa da profundidade .
Adám 19/12

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.