Napisz program lub funkcję, która przyjmuje dodatnią liczbę całkowitą N i wysyła pierwsze N liczb tego wzmacniającego zygzakowatego wzoru, używając tylko potrzebnych linii:
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
Więc jeśli N jest 1
wynikiem, to
1
Jeśli N jest 2
, wyjście jest
2
1
Jeśli N jest 3
wyjście, to
2
1 3
Jeśli N to 4
wyjście, to
2
1 3
4
Jeśli N to 10
wyjście, to
10
9
2 8
1 3 7
4 6
5
Jeśli N to 19
wyjście, to
10
9 11
2 8 12
1 3 7 13
4 6 14
5 15 19
16 18
17
i tak dalej.
Notatki
Każdy szczyt lub dolina zygzaka osiąga punkt o jedną linię dalej od linii z
1
nim niż poprzedni szczyt lub dolina.N nie jest ograniczony do
44
. Zygzak rośnie w tym samym wzorze i należy wspierać większy N.Liczby z wieloma cyframi powinny „dotykać” tylko w rogach, jak pokazano. Upewnij się, że działa to, gdy N jest
100
większe.Wyjście nie powinno zawierać pustych (lub tylko spacji) wierszy, z wyjątkiem jednej opcjonalnej końcowej linii nowej linii.
Każda linia może mieć dowolną liczbę końcowych spacji.
Punktacja
Najkrótszy kod w bajtach wygrywa. Tiebreaker to wcześniejsza odpowiedź.
Odpowiedzi:
Galaretka ,
413729 bajtówWypróbuj online!
Jak to działa
źródło
PHP,
211177164163 bajtówPrzewiduj piki
$n
i dynamicznie zwiększaj tablicę w dowolnym kierunku, używając($x, $y)
kursora wyjściowego.Liczby są wyrównane,
str_pad()
a ostatecznym wynikiem jestimplode()
tablica ciągów ($g
).Przetestuj online!
Aktualizacja: usunięto 34 bajty, pozbywając się niepotrzebnej array_pad (). Update2: poszedł za @ inserttusernametutaj porada, aby nieco go skrócić. Update3: postępował zgodnie z radą @ Lynn, aby zapisać jeszcze jeden bajt za pomocą ~ õ, który narzuca użycie zestawu znaków LATIN-1. (niedostępne w emulatorze PHP online, więc go nie uwzględniono)
źródło
$arr = [];
możesz się odwołać$arr[anything]
. Niektóre przypadki generują powiadomienia, ale są one tutaj ignorowane. Pamiętaj, że czytanie takich rzeczy prawdopodobnie nie pomoże ci w nauce języka. Twój komentarz uświadomił mi, że mogę go skrócić, ponieważ początkowo myślałem, że muszę uzupełnić tablicę, ale nie robię tego. :)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);
(Zamień ⏎ na nowy~õ
to dwubajtowa alternatywa dla"⏎"
.Pyth,
6053524642393836343231 bajtów39: Jest teraz na równi z naprawioną błędem wersją Galaretki , a ja wygrałem konkurencyjną wersję Dennisa!
38: Nie grałem w Dennisa!
36: Znów wygrałem Dennisa!
34: Jeszcze niższy niż jego wersja z naprawioną usterką!
31: 32 -> 31 dzięki Dennisowi.
Wypróbuj online!
Jak to działa
źródło
MATLAB, 148 bajtów
Zauważ, że brakuje spacji w Octave, ponieważ MATLAB drukuje znak zindeksowany
0
jako spację, podczas gdy oktawa po prostu pomija ten znak.Wyjaśnienie:
źródło
Haskell,
144142 bajtyPrzykład użycia:
Jak to działa:
Edycja: Dzięki @Lynn za dwa bajty!
źródło
JavaScript (ES6), 213 bajtów
Gdzie
\n
reprezentuje dosłowny znak nowej linii. Wyjaśnienie:Aby skrócić
pow(-1,ceil(sqrt(i)))
, przepisuję go, ponieważ tosqrt(i-1)&1||-1
jednak nie działa,i=0
więc naprawiam dodawanie 1, ale to następnie odwraca znak wyniku i dlatego kończęn-=
.źródło
Python 2, 137 bajtów
Wyświetl wynik na ideone .
źródło