Zick-Zack-Saiten

8

Zick-Zack-Saiten

Geben Sie bei einer gegebenen Zeichenfolge und einer positiven Ganzzahl die Zeichenfolge in einem Zick-Zack-Wellenmuster mit einer Spitzenamplitude und einem Zeichenabstand aus, die der Ganzzahl entsprechen.

Dies ähnelt dieser Frage , schließt jedoch auch den Zeichenabstand ein.

Eingang

Die Eingabe kann aus STDIN gelesen oder als Funktionsargumente verwendet werden. Die Eingabe ist eine Zeichenfolge ohne Zeilenumbrüche und eine positive Ganzzahl.

Ausgabe

Die erwartete Ausgabe ist die Zeichenfolge, die in ein Zick-Zack-Wellenmuster umgewandelt wird - beginnend nach oben - mit dem ersten Zeichen auf der Basislinie. Das Wellenmuster muss eine Amplitude und einen Zeichenabstand haben , die der ganzen Zahl entsprechen.

Beispiele

Eingang

Programming Puzzles & Code Golf
2

Ausgabe

    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

Eingang

Programming Puzzles & Code Golf
1

Ausgabe

 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

Dies ist Code Golf - das kürzeste Programm gewinnt.

kvill
quelle
8
Sehr eng verwandt.
Martin Ender
3
Ich denke nicht, dass dies ein Duplikat der von Martin erwähnten Herausforderung ist, da diese Herausforderung eine unterschiedliche Wellengröße, leicht unterschiedliche Regeln für das Erstellen von Wellen hat und nicht das Drucken der Programmsprache erfordert.
ASCIIThenANSI
1
Ich denke auch nicht, dass dies ein Duplikat ist.
Orlp
1
Ich denke auch nicht, dass dies ein Duplikat ist
Willem

Antworten:

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

Definiert eine anonyme Funktion. Fügen Sie f=zum Aufrufen am Anfang hinzu, um die Funktion aufzurufen f. Dann kann es mit getestet werdenconsole.log(f("Programming Puzzles & Code Golf", 2))


Vielen Dank an @vihan und @ edc65 für die Unterstützung beim Speichern einiger Bytes! :) :)

@kvill: Der Code wurde geändert, um die Anforderungen an den variablen Zeichenabstand in der Spezifikation zu erfüllen. Hab das zuerst nicht bemerkt!

jrich
quelle
Anstatt beizutreten und zu teilen, können Sie keysoderfill
Downgoat
1
Gut gemacht, kann 118 sein: (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''(füllen und verbinden mit Vorlage Zeichenfolge ohne Klammern)
edc65
Dies entspricht nicht den Spezifikationen - der Zeichenabstand muss mit der Größe der Ganzzahl variieren. Siehe Beispiele.
Kvill
0

J, 75 Bytes

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

Hier wird die Funktion verwendet

   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            
Protist
quelle
1
Schön, aber dies entspricht nicht den Spezifikationen - der Zeichenabstand muss mit der Größe der Ganzzahl variieren. Siehe Beispiele.
Kvill
0

Python 2, 151

Hier ist meine Antwort mit 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)

Beispielausgabe:

         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                    

und

 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
quelle
1
Dies entspricht nicht den Spezifikationen - der Zeichenabstand muss mit der Größe der Ganzzahl variieren. Siehe Beispiele.
Kvill
aktualisiert, um Zeichenabstand einzuschließen
Willem