Cuerdas en zig-zag


8

Cuerdas en zig-zag

Dada una cadena y un entero positivo, genera la cadena en un patrón de onda en zig-zag con una amplitud máxima y un espaciado entre caracteres igual al entero.

Esto es similar a esta pregunta pero también incluye el espacio entre caracteres.

Entrada

La entrada puede leerse desde STDIN o tomarse como argumentos de función. La entrada es una cadena sin líneas nuevas y un número entero positivo.

Salida

La salida esperada es la cadena transformada en un patrón de onda en zig-zag, comenzando hacia arriba, con el primer carácter en la línea base. El patrón de onda debe tener una amplitud y espaciado de caracteres igual al entero.

Ejemplos

Entrada

Programming Puzzles & Code Golf
2

Salida

    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

Salida

 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 es el código de golf: el programa más corto gana.



3
No creo que este sea un duplicado del desafío que Martin mencionó , ya que este desafío tiene un tamaño de onda variable, reglas ligeramente diferentes para hacer olas y no requiere imprimir el lenguaje del programa.
ASCIIThenANSI

1
No creo que esto sea un duplicado tampoco.
orlp

1
Tampoco creo que esto sea un duplicado
Willem

Respuestas:


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 una función anónima. Para llamarlo, agregue f=al principio para llamar a la función f. Entonces, se puede probar conconsole.log(f("Programming Puzzles & Code Golf", 2))


¡Gracias a @vihan y @ edc65 por ayudar a salvar algunos bytes! :)

@kvill: el código se ha modificado para abordar el requisito de espacio entre caracteres variable en la especificación. ¡No lo noté al principio!


En lugar de unir y dividir, puede usar keysofill
Downgoat

1
Bien hecho, puede 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''(llenar y unir usando una cadena de plantilla sin corchetes)
edc65

Esto no cumple con las especificaciones: el espacio entre caracteres debe variar con el tamaño del número entero. Ver ejemplos
kvill

0

J, 75 bytes

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

Aquí está la función en 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            

1
Agradable, pero esto no cumple con las especificaciones: el espacio entre caracteres debe variar con el tamaño del número entero. Ver ejemplos
kvill

0

Pitón 2, 151

Aquí está mi respuesta 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)

Salida de muestra:

         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                    

y

 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   

1
Esto no cumple con las especificaciones: el espacio entre caracteres debe variar con el tamaño del número entero. Ver ejemplos
kvill

actualizado para incluir el espacio entre caracteres
Willem
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.