String zig-zag

8

String zig-zag

Diberikan string dan integer positif, output string dalam pola gelombang zig-zag dengan amplitudo puncak dan jarak karakter yang sama dengan integer.

Ini mirip dengan pertanyaan ini tetapi juga termasuk spasi karakter.

Memasukkan

Input dapat dibaca dari STDIN atau diambil sebagai argumen fungsi. Input adalah string tanpa baris baru dan bilangan bulat positif.

Keluaran

Output yang diharapkan adalah string yang diubah menjadi pola gelombang zig-zag - mulai dari atas - dengan karakter pertama pada garis dasar. Derai gelombang harus memiliki amplitudo dan jarak karakter yang sama dengan integer.

Contohnya

Memasukkan

Programming Puzzles & Code Golf
2

Keluaran

    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

Memasukkan

Programming Puzzles & Code Golf
1

Keluaran

 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

Ini adalah kode golf - program yang paling cepat menang.

kill
sumber
8
Sangat terkait erat.
Martin Ender
3
Saya tidak berpikir ini adalah duplikat dari tantangan yang disebutkan Martin , karena tantangan ini memiliki ukuran gelombang yang bervariasi, aturan yang sedikit berbeda untuk membuat gelombang, dan tidak perlu mencetak bahasa program.
ASCIIThenANSI
1
Saya pikir ini juga bukan duplikat.
orlp
1
Saya juga tidak berpikir ini adalah duplikat
Willem

Jawaban:

4

Javascript (ES6), 133 132 136 134 byte

(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`
`

Menentukan fungsi anonim. Untuk memanggilnya, tambahkan f=ke awal untuk memanggil fungsi f. Kemudian, dapat diuji denganconsole.log(f("Programming Puzzles & Code Golf", 2))


Terima kasih kepada @vihan dan @ edc65 karena telah membantu menghemat beberapa byte! :)

@ kvill: Kode telah dimodifikasi untuk memenuhi persyaratan spasi karakter variabel dalam spec. Tidak memperhatikan itu pada awalnya!

Jrich
sumber
Alih-alih bergabung dan berpisah, Anda dapat menggunakan keysataufill
Downgoat
1
Bagus sekali, bisa 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''(isi dan gabung menggunakan string template tanpa tanda kurung)
edc65
Ini tidak memenuhi spesifikasi - spasi karakter harus bervariasi dengan ukuran integer. Lihat contoh.
kvill
0

J, 75 byte

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

Berikut adalah fungsi yang digunakan

   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
sumber
1
Bagus, tetapi ini tidak memenuhi spesifikasi - spasi karakter harus bervariasi dengan ukuran bilangan bulat. Lihat contoh.
kvill
0

Python 2, 151

Ini jawaban saya menggunakan 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)

Output sampel:

         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                    

dan

 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
sumber
1
Ini tidak memenuhi spesifikasi - spasi karakter harus bervariasi dengan ukuran integer. Lihat contoh.
kvill
diperbarui untuk memasukkan spasi karakter
Willem