Chuỗi zig-zag


8

Chuỗi zig-zag

Cho một chuỗi và một số nguyên dương, xuất chuỗi theo mô hình sóng zig-zag với biên độ cực đại và khoảng cách ký tự bằng với số nguyên.

Điều này tương tự với câu hỏi này nhưng cũng bao gồm khoảng cách ký tự.

Đầu vào

Đầu vào có thể được đọc từ STDIN hoặc lấy làm đối số hàm. Đầu vào là một chuỗi không có dòng mới và số nguyên dương.

Đầu ra

Đầu ra dự kiến ​​là chuỗi được chuyển đổi thành dạng sóng zig-zag - bắt đầu đi lên - với ký tự đầu tiên trên đường cơ sở. Patter sóng phải có biên độ và khoảng cách ký tự bằng số nguyên.

Ví dụ

Đầu vào

Programming Puzzles & Code Golf
2

Đầu ra

    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

Đầu vào

Programming Puzzles & Code Golf
1

Đầu ra

 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

Đây là mã golf - chương trình chiến thắng ngắn nhất.



3
Tôi không nghĩ đây là một bản sao của thử thách mà Martin đã đề cập , vì thử thách này có kích thước sóng khác nhau, các quy tắc hơi khác nhau để tạo sóng và không yêu cầu in ngôn ngữ của chương trình.
ASCIIThenANSI

1
Tôi cũng không nghĩ đây là một bản sao.
orlp

1
Tôi cũng không nghĩ đây là một bản sao
Willem

Câu trả lời:


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

Xác định một hàm ẩn danh. Để gọi nó, thêm f=vào đầu để gọi hàm f. Sau đó, nó có thể được thử nghiệm vớiconsole.log(f("Programming Puzzles & Code Golf", 2))


Cảm ơn @vihan và @ edc65 đã giúp lưu một số byte! :)

@kvill: Mã đã được sửa đổi để giải quyết yêu cầu khoảng cách ký tự biến trong spec. Lúc đầu không để ý điều đó!


Thay vì tham gia và chia tách, bạn có thể sử dụng keyshoặcfill
Downgoat

1
(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''
Hoàn

Điều này không đáp ứng các thông số kỹ thuật - khoảng cách ký tự phải thay đổi theo kích thước của số nguyên. Xem ví dụ.
kvill

0

J, 75 byte

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

Đây là chức năng được sử dụng

   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
Đẹp, nhưng điều này không đáp ứng các thông số kỹ thuật - khoảng cách ký tự phải thay đổi theo kích thước của số nguyên. Xem ví dụ.
kvill

0

Con trăn 2, 151

Đây là câu trả lời của tôi bằng 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)

Đầu ra mẫu:

         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                    

 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
Điều này không đáp ứng các thông số kỹ thuật - khoảng cách ký tự phải thay đổi theo kích thước của số nguyên. Xem ví dụ.
kvill

được cập nhật để bao gồm khoảng cách ký tự
Willem
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.