Cordas em zig-zag

8

Cordas em zig-zag

Dada uma sequência e um número inteiro positivo, produza a sequência em um padrão de onda em zig-zag com uma amplitude de pico e espaçamento de caracteres igual ao número inteiro.

Isso é semelhante a esta pergunta, mas também inclui espaçamento entre caracteres.

Entrada

A entrada pode ser lida em STDIN ou tomada como argumentos de função. Entrada é uma sequência sem novas linhas e um número inteiro positivo.

Resultado

A saída esperada é a sequência transformada em um padrão de onda em zig-zag - começando para cima - com o primeiro caractere na linha de base. O padrão de onda deve ter uma amplitude e espaçamento de caracteres igual ao número inteiro.

Exemplos

Entrada

Programming Puzzles & Code Golf
2

Resultado

    o               g                s               
  r   g           n                e               e   G
P       r       i       P        l       &       d       o  
          a   m           u    z               o           l
            m                z               C               f

Entrada

Programming Puzzles & Code Golf
1

Resultado

 r   a   n   u   e       e   l
P o r m i g P z l s & C d   o f
   g   m       z       o   G

Este é o código de golfe - o programa mais curto vence.

kvill
fonte
3
Não acho que isso seja uma duplicata do desafio que Martin mencionou , pois esse desafio tem um tamanho de onda variável, regras ligeiramente diferentes para criar ondas e não requer impressão do idioma do programa.
ASCIIThenANSI
1
Também não acho que isso seja uma duplicata.
orlp
1
Eu também não acho que isso é uma duplicata
Willem

Respostas:

4

Javascript (ES6), 133 132 136 134 bytes

(s,n,o=Array(2*n+1).fill``)=>[...s].map((v,i)=>o=o.map((w,a)=>w+(a-((j=(i+3*n)%(4*n))>2*n?4*n-j:j)?" ":v)+" ".repeat(n-1)))&&o.join`
`

Define uma função anônima. Para chamá-lo, adicione f=ao início a chamada da função f. Em seguida, pode ser testado comconsole.log(f("Programming Puzzles & Code Golf", 2))


Obrigado a @vihan e @ edc65 por ajudar a economizar alguns bytes! :)

@kvill: O código foi modificado para atender ao requisito de espaçamento de caracteres variável na especificação. Não percebeu isso no começo!

jrich
fonte
Em vez de ingressar e dividir, você pode usar keysoufill
Downgoat
1
Bem feito, pode ser 118: (s,n,o=Array(2*n+1).fill'')=>[...s].map((v,i)=>o=o.map((w,a)=>a-((j=(i+3*n)%(4*n))>2*n?4*n-j:j)?w+" ":w+v))&&o.join''(preenchimento e juntar-se usando a corda modelo sem colchetes)
edc65
Isso não atende às especificações - o espaçamento entre caracteres deve variar com o tamanho do número inteiro. Veja exemplos.
kvill
0

J, 75 bytes

f=:4 :0
|:((]*>:@i.@#)((+:<:b)|i.#y){x|.}:(],}.@|.)|.=/~i.b=.>:+:x){' ',y
)

Aqui está a função em uso

   7 f'code golf is awesome and I like it'

       l                          
      o f                         
     g                           t
          i                     i 
   e       s                      
  d                           e   
 o           a               k    
c             w             i     
               e           l      
                s                 
                 o       I        
                  m               
                   e   d          
                      n           
                     a            
protista
fonte
1
Bom, mas isso não atende às especificações - o espaçamento entre caracteres deve variar com o tamanho do número inteiro. Veja exemplos.
kvill
0

Python 2, 151

Aqui está a minha resposta usando Python 2:

s,n=input()
a=2*n+1
l,j,o=['',]*a,n,1
for c in s:
 for k in range(a):l[k]+=c+(n-1)*' ' if j==k else' '*n
 j-=o
 if j in [0,2*n]:o=-o
print'\n'.join(l)

Saída de amostra:

         t                                   e                                   h                                   t                                   e  
      s     i                             v     ,                             t     e                             s     i                             v     
   e           n                       a                                                                       e           n                       a        
t                 g                 w                 t                 g                 w                 t                 g                 w           
                                                         e           n                       a                                                              
                        t     e                             s     i                             v     ,                             t     e                 
                           h                                   t                                   e                                   h                    

e

 r   a   n   u   e       e   l 
P o r m i g P z l s & C d   o f
   g   m       z       o   G   
Willem
fonte
1
Isso não atende às especificações - o espaçamento entre caracteres deve variar com o tamanho do número inteiro. Veja exemplos.
kvill
atualizado para incluir o espaçamento entre caracteres
Willem