Schreiben Sie ein Programm oder eine Funktion, die eine positive ganze Zahl N aufnimmt und die ersten N Zahlen dieses verstärkenden Zick-Zack-Musters ausgibt, wobei Sie nur die benötigten Zeilen verwenden:
26
25 27 .
10 24 28 .
9 11 23 29 .
2 8 12 22 30 44
1 3 7 13 21 31 43
4 6 14 20 32 42
5 15 19 33 41
16 18 34 40
17 35 39
36 38
37
Also, wenn N ist, ist 1
der Ausgang
1
Wenn N ist 2
, ist die Ausgabe
2
1
Wenn N ist, ist 3
der Ausgang
2
1 3
Wenn N ist, ist 4
der Ausgang
2
1 3
4
Wenn N ist, ist 10
der Ausgang
10
9
2 8
1 3 7
4 6
5
Wenn N ist, ist 19
der Ausgang
10
9 11
2 8 12
1 3 7 13
4 6 14
5 15 19
16 18
17
und so weiter.
Anmerkungen
Jeder Gipfel oder Tiefpunkt des Zickzacks erreicht seinen Punkt eine Linie weiter von der Linie mit dem
1
darauf als der vorherige Gipfel oder Tiefpunkt.N ist nicht beschränkt auf
44
. Der Zickzack wächst im gleichen Muster und es sollte ein größeres N unterstützt werden.Zahlen mit mehreren Ziffern sollten wie abgebildet nur an den Ecken "anfassen". Stellen Sie sicher, dass dies funktioniert, wenn N
100
und höher ist.Die Ausgabe sollte keine leeren Zeilen (oder nur Leerzeichen) enthalten, mit Ausnahme einer optionalen nachgestellten neuen Zeile.
Jede Zeile kann beliebig viele nachgestellte Leerzeichen enthalten.
Wertung
Der kürzeste Code in Bytes gewinnt. Tiebreaker ist frühere Antwort.
Antworten:
Jelly ,
413729 BytesProbieren Sie es online!
Wie es funktioniert
quelle
PHP,
211177164163 BytesVorhersage der Peaks mit
$n
und dynamische Vergrößerung des Arrays in beide Richtungen mit dem($x, $y)
Ausgabecursor.Zahlen werden mit ausgerichtet
str_pad()
und die endgültige Ausgabe ist die Ausgabeimplode()
dieses Arrays von Zeichenfolgen ($g
).Testen Sie es online!
Update: 34 Bytes wurden entfernt, indem das nicht benötigte array_pad () entfernt wurde. Update2: @ insertusernamehere's Rat gefolgt, um es ein bisschen mehr zu verkürzen. Update3: Befolgte @ Lynns Rat, ein weiteres Byte mit ~ õ zu speichern, was die Verwendung des LATIN-1-Zeichensatzes vorschreibt. (nicht im Online-PHP-Emulator verfügbar, daher dort nicht enthalten)
quelle
$arr = [];
, können Sie darauf verweisen$arr[anything]
. In einigen Fällen werden Hinweise ausgegeben, die hier jedoch ignoriert werden. Beachten Sie, dass das Lesen von solchen Dingen Ihnen wahrscheinlich nicht viel hilft, eine Sprache zu lernen. Ihr Kommentar hat mir klar gemacht, dass ich ihn kürzer machen könnte, da ich anfangs dachte, ich müsste mein Array auffüllen, aber das tue ich nicht. :)for($x=0,$d=-1,$h=$n=2,$y=$a=1;$a<=$argv[1];$y+=$d){$g[$y]=str_pad($g[$y],$x).$a;$x+=strlen($a);if($a++==$n){$h+=2;$n+=$h-1;$d*=-1;}}ksort($g);echo implode("⏎",$g);
(Ersetzen Sie ⏎ durch einen tatsächlichen Zeilenumbruch.)~õ
ist dies eine Zwei-Byte-Alternative zu"⏎"
.Pyth,
6053524642393836343231 Bytes39: Es ist jetzt auf Augenhöhe mit der Bugfix-Version von Jelly und ich habe Dennis 'Konkurrenzversion übertroffen!
38: Ich habe Dennis ausgespielt!
36: Ich habe Dennis schon wieder ausgespielt!
34: Noch niedriger als seine Version mit Fehlerbehebung!
31: 32 -> 31 danke an Dennis.
Probieren Sie es online!
Wie es funktioniert
quelle
MATLAB, 148 Bytes
Beachten Sie, dass die Leerzeichen in Octave fehlen, da MATLAB das mit indizierte Zeichen
0
als Leerzeichen ausgibt, während Octave dieses Zeichen einfach weglässt.Erläuterung:
quelle
Haskell,
144142 BytesAnwendungsbeispiel:
Wie es funktioniert:
Edit: Danke @Lynn für zwei Bytes!
quelle
JavaScript (ES6), 213 Byte
Wobei
\n
ein wörtliches Newline-Zeichen darstellt. Erläuterung:Um es zu verkürzen,
pow(-1,ceil(sqrt(i)))
schreibe ich es neu, dasqrt(i-1)&1||-1
dies jedoch nicht funktioniert, umi=0
zu beheben, dass ich 1 hinzufüge, aber dies kippt dann das Vorzeichen des Ergebnisses, weshalb ich am Ende mit enden-=
.quelle
Python 2, 137 Bytes
Zeigen Sie die Ausgabe auf ideone an .
quelle