ジグザグストリング


8

ジグザグストリング

文字列と正の整数を指定して、ピーク振幅と文字間隔が整数に等しいジグザグ波パターンで文字列を出力します。

これはこの質問に似ていますが、文字間隔も含まれます。

入力

入力はSTDINから読み取るか、関数の引数として使用できます。入力は、改行と正の整数を含まない文字列です。

出力

期待される出力は、ベースラインの最初の文字で、ジグザグの波パターンに変換された文字列です。波のパターンには、整数と等しい振幅と文字間隔が必要です。

入力

Programming Puzzles & Code Golf
2

出力

    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

入力

Programming Puzzles & Code Golf
1

出力

 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

これはコードゴルフです-最短のプログラムが勝ちます。



3
これは、Martinが述べた課題と重複しているとは思いません。この課題には、さまざまな波のサイズ、波を作るためのわずかに異なる規則があり、プログラムの言語を印刷する必要がないためです。
ASCIIThenANSI 2015

1
これも重複だとは思いません。
orlp 2015

1
私もこれが重複しているとは思いません
ウィレム

回答:


4

ジャバスクリプト(ES6)、133の 132 136 134バイト

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

無名関数を定義します。これを呼び出すにはf=、最初にを追加して関数を呼び出しますf。次に、それをテストすることができますconsole.log(f("Programming Puzzles & Code Golf", 2))


いくつかのバイトを節約してくれた@vihanと@ edc65に感謝します!:)

@kvill:仕様の可変文字間隔要件に対応するようにコードが変更されました。最初はそれに気づかなかった!


代わりに参加し、分割は、使用することができますkeysfill
Downgoat

1
よくできました、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''ブラケットなしのテンプレート文字列を使用して入力および結合)
edc65

これは仕様を満たしていません。文字の間隔は整数のサイズによって異なる必要があります。例を参照してください。
kvill 2015

0

J、75バイト

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

こちらは使用中の機能です

   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
いいですが、これは仕様を満たしていません。文字の間隔は整数のサイズによって異なる必要があります。例を参照してください。
kvill 2015

0

Python 2、151

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)

出力例:

         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
これは仕様を満たしていません。文字の間隔は整数のサイズによって異なる必要があります。例を参照してください。
kvill 2015

文字間隔を含むように更新
ウィレム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.