Machen Sie ein Zick-Zack-Muster

25

Ihre Aufgabe ist es, eine Ganzzahleingabe aufzunehmen und ein Zick-Zack-Muster mit Schrägstrichen und Backslashes zu drucken.

  • Die Ganzzahleingabe bestimmt die Länge jedes Zicks und Zacks sowie die Anzahl der Zicks und Zacks
  • Das Muster beginnt immer von rechts nach links

Testfälle

4->
   /
  /
 /
/
\
 \
  \
   \
   /
  /
 /
/
\
 \
  \
   \
2->
 /
/
\
 \
0->
1->
/
8->
       /
      /
     /
    /
   /
  /
 /
/
\
 \
  \
   \
    \
     \
      \
       \
       /
      /
     /
    /
   /
  /
 /
/
\
 \
  \
   \
    \
     \
      \
       \
       /
      /
     /
    /
   /
  /
 /
/
\
 \
  \
   \
    \
     \
      \
       \
       /
      /
     /
    /
   /
  /
 /
/
\
 \
  \
   \
    \
     \
      \
       \
Romulus3799
quelle
3
Können wir für jede Zeile ein Array / eine Liste von Strings ausgeben? Sind Schulungen oder das Führen von Zeilenumbrüchen oder Leerzeichen zulässig?
Shaggy
2
Ist führendes Leerzeichen in Ordnung, solange das Muster nicht beeinflusst wird?
Emigna

Antworten:

10

C (gcc) , 108 102 101 98 80 76 72 Bytes

  • Dank Kevin Cruijssen sechs Bytes gespart ; Entfernen von Klammern und Golf spielen N-n-1aufN+~n
  • Ein Byte wurde gespeichert, indem Zdie Inkrementierung in die Schleifenbedingung verschoben wurde
  • Gespeichert drei Bytes unter Verwendung printf("%c\n",...)statt putchar(...)und,puts("")
  • Dank HatsuPointerKun wurden achtzehn (!) Bytes gespeichert . Verwenden Sie printf("%*s",n,"");, um nLeerzeichen zu drucken , anstatt eine Schleife zu verwenden j;for(j=n;j--;)putchar(32);und beide printf(...);Aufrufe zu kombinieren
  • Vier Bytes mit printf("%*c",-~n,...);anstelle von gespeichertprintf("%*s%c",n,"",...);
  • Dank nwellnhof vier Bytes gespart ; Bewegen Sie alles in einer Schleife statt in zwei
j;f(k){for(j=0;j<k*k;j++)printf("%*c\n",j/k%2?j%k+1:k-j%k,j/k%2?92:47);}

Probieren Sie es online!

Jonathan Frech
quelle
Z,n,j;f(N){for(Z=0;Z<N;Z++)for(n=N;n--;putchar(Z%2?92:47),puts(""))for(j=Z%2?N+~n:n;j--;)putchar(32);} 102 Bytes . Entfernen Sie die geschweiften Klammern, indem Sie alles in die Schlaufen stecken. und geändert N-n-1zu N+~n.
Kevin Cruijssen
1
@ KevinCruijssen Danke. Gespeichert ein weiteres Byte durch beide tauschen Z%2?...:...und ersetzen Z<N;Z++mit Z++<N;.
Jonathan Frech
1
Sie können mehrere Bytes sparen, indem Sie die printf-Magie verwenden, wie ich es in meiner Antwort getan habe . Auf diese Weise entfernen Sie die for-Schleife, die zum Drucken von Leerzeichen verwendet wird. Weitere Einzelheiten dieses Stapelüberlauf Antwort über links padding Räume mit printf
HatsuPointerKun
@HatsuPointerKun Danke; Das ist ein sehr kurzer Weg, um Leerzeichen in C zu wiederholen.
Jonathan Frech
4 Bytes kürzer: i;f(N){for(i=0;i<N*N;i++)printf("%*c\n",i/N%2?i%N+1:N-i%N,i/N%2?92:47);}. Probieren Sie es online!
Nwellnhof
10

Holzkohle , 16 10 9 Bytes

FN«↖Iθ→‖T

Probieren Sie es online! Link ist eine ausführliche Version des Codes.

Neil
quelle
das funktioniert (War das auch InputNumberim Golf-Modus kaputt?)
Nur ASCII
@ Nur ASCII Nein, daher die separaten Links zur angegebenen prägnanten Version und der ungefähren ausführlichen Version.
Neil
Oh> _> habe nicht nachgeschaut, welchen Link ich gerade öffne
ASCII
@ Nur ASCII Nun, es gibt jetzt nur einen Link ;-)
Neil
4

MATL , 17 Bytes

:"GXy@o?P47}92]*c

Probieren Sie es online!

Erläuterung

:         % Implicit input, n. Push range [1 2 ... n]
"         % For each k in that range
  G       %   Push n again
  Xy      %   Identity matrix of that size
  @       %   Push k
  o?      %   If it's odd
    P     %     Flip the matrix upside down
    47    %     Push 47 (ASCII for '/')
  }       %   Else
    92    %     Push 92 (ASCII for '\')
  ]       %   End
  *       %   Multiply each entry of the matrix by that number
  c       %   Convert to char. Char 0 is shown as space
          % Implicit end. Implicit display
Luis Mendo
quelle
4

C # (.NET Core) , 117 103 101 Bytes

a=>{for(int z=a+1,e=0;e<a*a;)System.Console.WriteLine(e++/a%2<1?"/".PadLeft(--z):@"\".PadLeft(z++));}

Probieren Sie es online!

Mein Pronomen ist monicareinstate
quelle
Sie können 14 Bytes wie folgt speichern: a=>{var o="";for(int z=a+1,e=0;e<a*a;)o+=(e++/a%2<1?"/".PadLeft(--z):@"\".PadLeft(z++))+"\n";return o;} 103 Bytes Sie benötigen nicht alle diese Klammern; Sie können das kombinieren int; und nur +"\n"einmal hinzufügen .
Kevin Cruijssen
Oh wow, danke!
Mein Pronomen ist monicareinstate
Hmm, Sie können 2 weitere Bytes sparen, indem Sie direkt drucken, anstatt eine Zeichenfolge zurückzugeben: a=>{for(int z=a+1,e=0;e<a*a;)System.Console.WriteLine(e++/a%2<1?"/".PadLeft(--z):@"\".PadLeft(z++));} 101 Bytes
Kevin Cruijssen
3

SOGL V0.12 , 13 12 9 Bytes

╝F{±↔}P}ø

Probieren Sie es hier aus!

könnte 8 Bytes sein, ╝F{±↔}P}wenn der 0-Testfall nicht erforderlich wäre

Erläuterung:

       }   implicitly started loop repeated input times
╝            create a down-right diagonal of the input
 F           get the current looping index, 1-indexed
  {  }       that many times
   ±↔          reverse the diagonal horizontally
      P      print that
        ø  push an empty string - something to implicitly print if the loop wasn't executed
dzaima
quelle
3

Python 2 , 69 68 62 Bytes

-1 Byte danke an Jonathan Frech

lambda n:[[~i,i][i/n%2]%n*' '+'/\\'[i/n%2]for i in range(n*n)]

Probieren Sie es online!

Stange
quelle
68 Bytes .
Jonathan Frech
3

Mathematica, 84 90 Bytes

(n=#;Grid@Array[If[Abs[n-(s=Mod[#-1,2n])-.5]==#2-.5,If[s<n,"‌​/","\\"],""]&,{n^2,n‌​}])&
  • Danke Jenny_mathy für -6 Bytes.

Ich habe keine Ahnung warum \das offensichtlich dunkler ist als /.

Bildbeschreibung hier eingeben

Keyu Gan
quelle
2
84 Bytes(n=#;Grid@Array[If[Abs[n-(s=Mod[#-1,2n])-.5]==#2-.5,If[s<n,"/","\\"],""]&,{n^2,n}])&
J42161217
3

Jq 1,5 , 94 89 Bytes

["/","\\"][range($n)%2]as$s|range($n)|[(range(if$s=="/"then$n-.-1 else. end)|" "),$s]|add

Erläuterung

  ["/","\\"][range($n)%2] as $s                         # for $s= / \ / \ $n times 
| range($n)                                             # for .=0 to $n-1
| [(range(if $s=="/" then $n-.-1 else . end)|" "), $s]  # form list of spaces ending with $s
| add                                                   # concatenate

Probelauf

$ jq -Mnr --argjson n 5 '["/","\\"][range($n)%2]as$s|range($n)|[(range(if$s=="/"then$n-.-1 else. end)|" "),$s]|add'
    /
   /
  /
 /
/
\
 \
  \
   \
    \
    /
   /
  /
 /
/
\
 \
  \
   \
    \
    /
   /
  /
 /
/

Probieren Sie es online!

jq170727
quelle
3

Java 8, 140 134 116 Bytes

n->{String r="";for(int a=0,b,c;a++<n;)for(b=n;b-->0;r+=a%2>0?"/\n":"\\\n")for(c=b-n+b|-a%2;++c<b;r+=" ");return r;}

-24 Bytes dank @Nevay .

Erläuterung:

Probieren Sie es hier aus.

n->{                // Method with integer parameter and String return-type
  String r="";      //  Result-String
  for(int a=0,b,c;  //  Index integers
      a++<n;)       //  Loop (1) from 0 to the input (exclusive)
    for(b=n;        //   Reset `b` to the input
        b-->0;      //   Inner loop (2) from the input to 0 (exclusive)
                    //     After every iteration: 
        r+=a%2>0?"/\n":"\\\n") 
                    //      Append either of the slashes + a new-line
      for(c=b-n+b|-a%2;++c<b;r+=" ");
                    //    Append the correct amount of spaces
                    //   End of inner loop (2) (implicit / single-line body)
                    //  End of loop (1) (implicit / single-line body)
  return r;         //  Return the result-String
}                   // End of method
Kevin Cruijssen
quelle
1
Der Zustand der innersten Schleife kann als c-->f*(b-n-~b)(-6 Bytes) geschrieben werden.
Nevay
1
116 Bytes:n->{String r="";for(int a=0,b,c;a++<n;)for(b=n;b-->0;r+=a%2>0?"/\n":"\\\n")for(c=b-n+b|-a%2;++c<b;r+=" ");return r;}
Nevay
3

Javascript ES8, 83 79 78 76 75 74 71 Bytes

* 1 Byte mit ES8 dank Shaggy reduziert

A=(m,i=0)=>i<m*m?`/\\`[x=i/m&1].padStart(x?i%m+1:m-i%m)+`
`+A(m,++i):""

Hier testen

DanielIndie
quelle
Wer auch immer meine Lösung herabgestimmt hat, können Sie erklären, warum? Vermisse ich etwas?
DanielIndie
2
Ich bin nicht derjenige, der das Abstimmen abgelehnt hat, aber ich gehe davon aus, dass Funktionen wiederholbar sein müssen, um gültig zu sein. Ihr Problem kann ganz einfach behoben werden, indem Sie ieinen Standardparameter festlegen. Die Byteanzahl scheint ebenfalls aus zu sein.
Emigna
1
Das Hinzufügen eines TIO-Links ist auch immer willkommen, damit die Benutzer Ihre Lösung problemlos testen können.
Emigna
1
@Emigna behoben (char weise und Link weise) :)
DanielIndie
1
74 Bytes mit etwas ES8. Für JS können Sie statt TIO auch nur ein Stack-Snippet verwenden.
Shaggy
2

Power Shell , 81 Byte

param($a)if($a){1..$a|%{((1..$a|%{" "*--$_+'\'}),($a..1|%{" "*--$_+'/'}))[$_%2]}}

Probieren Sie es online!

Ugh, das ist hässlich. So viel wiederholter Code, plus 7 Bytes, um den 0Sonderfall zu berücksichtigen . Golfvorschläge sind willkommen.

AdmBorkBork
quelle
2

Pyth, 17 Bytes

js<*_+RV"\/"_B*L;

Probieren Sie es online aus: Demonstration

Erläuterung:

js<*_+RV"\/"_B*L;QQQ   implicit Qs at the end
              *L;Q     list with ["", " ", "  ", ..., " "*(input-1)]
            _B         bifurcate with reverse: [["" to "   "], ["   " to ""]]
     +RV"\/"           append to each one either "\" or "/": 
                       [["\", to "   \"], ["   /" to "/"]]
    _                  reverse
   *              Q    repeat input times
  <                Q   but only take the first input many
 s                     flatten the list of lists
j                      print on each line
Jakube
quelle
2

Python 3: 90 Bytes 82 Bytes

lambda n:"\n".join(" "*(abs(i%(n*2)-n+i//n%2)-1)+"/\\"[i//n%2]for i in range(n*n))

Vielen Dank an Jonathan Frech, der darauf hingewiesen hat, dass der Ausdruck nicht erforderlich war und dass das erste Zickzack der falsche Weg war

Bassintag
quelle
] for-> ]for.
Jonathan Frech
Sie brauchen das nicht print(...), eine Funktion, die einen String zurückgibt, wäre gültig. Ich denke auch, dass Ihr anfängliches Zickzack falsch ausgerichtet ist (\ statt /).
Jonathan Frech
@ JonathanFrech Danke! Ich habe es geändert
Bassintag
1
(abs(...)-1)-> ~-abs(...).
Jonathan Frech
2

05AB1E , 17 16 Bytes

F<„/\Nèú.sNƒR}»,

Probieren Sie es online!

Erläuterung

F                  # for N in [0 ... input-1] do
  „/\              # push the string "/\"
     Nè            # cyclically index into this string with N
 <     ú           # prepend input-1 spaces to this string
        .s         # get suffixes
          NƒR}     # reverse the list of suffixes input+1 times
              »,   # join on newline and print

Derzeit bester Versuch mit Canvas:

F„/\Nè©53NèΛ2®ð«4Λ
Emigna
quelle
2

C ++, 92 91 Bytes

-1 Bytes dank Kevin Cruijssen

void m(int n){for(int i=0,j;i<n;++i)for(j=0;j<n;++j)printf("%*c\n",i%2?j+1:n-j,i%2?92:47);}

Dank der Kraft der Magie printf

HatsuPointerKun
quelle
Sie können int i=0,jdie for-Schleife einfügen for(int i=0,j;i<n;++i), um ein Byte zu speichern.
Kevin Cruijssen
88 Bytes
Ceilingcat
2

Java (OpenJDK 8) , 131 106 98 96 94 91 Bytes

i->{for(int j=0;j<i*i;System.out.printf("%"+(j/i%2<1?i-j%i:j%i+1)+"c\n",47+45*(j++/i%2)));}

Probieren Sie es online!

Roberto Graham
quelle
1
Sie können einige Klammern entfernen: i->{for(int j=0;j<i*i;System.out.printf("%"+(j/i%2<1?i-j%i+1:j%i+2)+"s",j++/i%2<1?"/\n":"\\\n"));}(98 Byte).
Nevay
2

Dyalog APL , 39 36 35 34 Bytes

{↑((,⍵ ⍵⍴(⌽,⊢)⍳⍵)/¨' '),¨⍵/⍵⍴'/\'}

Probieren Sie es online!

Dank Zacharý 1 Byte gespart

dzaima
quelle
Verdammt, schlag mich um ein Byte. Sie können machen ⎕IOsein 0, und dann entfernen ¯1+.
Zacharý
@ Zacharý Ich wollte das gerade machen: p
dzaima
Oh, noch eine Sache: (⌽,⊢)⍳⍵Statt(⌽⍳⍵),⍳⍵
Zacharý
@ Zacharý Ja, ich bin noch zu verstehen, die Reißzwecken, Beweismittel und Sachen, die damit einhergehen: /
Dzaima
Keine Sorge, ich verstehe auch nicht ganz, wie Züge / Gabeln / was auch immer sie heißen funktionieren.
Zacharý
1

Kotlin , 102 Bytes

(0..q-1).map{r->if(r%2<1)q-1 downTo 0 else{0..q-1}.map{(1..it).map{print(' ')};println('/'+45*(r%2))}}

Probieren Sie es online!

jrtapsell
quelle
1

Excel VBA, 84 83 Bytes

Anonyme VBE-Direktfensterfunktion, die Eingaben aus dem Bereich [A1]und Ausgaben in das VBE-Direktfenster übernimmt

For i=1To[A1]:For j=1To[A1]:?IIf(i mod 2,Space([A1]-j)&"/",Space(j-1)&"\"):Next j,i
Taylor Scott
quelle
0

Haskell , 86-85 Bytes

f n=take(n*n)$cycle$[(' '<$[x..n-1])++"/"|x<-[1..n]]++[(' '<$[2..x])++"\\"|x<-[1..n]]

Probieren Sie es online!

Dank Laikoni ein Byte gespart

Wiederhole ein Zick-Zack und nimm die ersten n*nZeilen.

jferard
quelle
cycle$ ...statt cycle( ... )speichert ein Byte.
Laikoni
@Laikoni danke!
Jferard
0

Dyalog APL, 41 bis 40 Bytes

⎕IOmuss sein 0.

{⍪/((⌽⍵ ⍵⍴S↑'/')(⍵ ⍵⍴'\'↑⍨S←⍵+1))[2|⍳⍵]}

Probieren Sie es online!

Zacharý
quelle
0

D , 105 Bytes

import std.stdio;void m(T)(T n){for(T i,j;i<n;++i)for(j=0;j<n;++j)printf("%*c\n",i%2?j+1:n-j,i%2?92:47);}

Probieren Sie es online!

Aufgehoben aus der C ++ - Antwort von HatsuPointerKun.

Zacharý
quelle