Biorąc pod uwagę jedną dodatnią nieparzystą liczbę całkowitą jako dane wejściowe, zwróć zbieżny zygzak jako listę ciągów, listę znaków lub ciąg oddzielony znakiem nowej linii w następującej formie:
#
#
#
#
#
#
#
#
#
#
#
Możesz zastąpić #
dowolną spójną spacją. Końcowe białe znaki w każdej linii są dozwolone i dozwolona jest nowa linia końcowa.
Zygzak zaczyna się od kolumny 1
i dla każdego wiersza przesuwa się w prawo o jedną kolumnę, aż do kolumny n
(gdzie n
jest wejście). Następnie przesuwa się w lewo do 2
, następnie w prawo do n-1
, a następnie w lewo do 3
z dwoma zbiegającymi się granicami, aż zygzak kończy się w środkowej kolumnie ( (n+1)/2
).
Przypadki testowe
Powyższy przykład to przypadek testowy dla 5
.
Poniżej przedstawiono indywidualne przypadki testowe:
3
#
#
#
#
7
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
1
#
Odpowiedzi:
C (gcc) , 89 bajtów
Wypróbuj online!
Działa poprzez analizę sekwencji liczby spacji jako (dla n = 7):
A dla n = 3:
Widzimy, że środkowa liczba (
a
w kodzie) biegnie od [n-1, n / 2). Następnie różnica między pierwszą liczbą a liczbą środkową wynosi:Tak więc, jeśli
b
przejdziemy przez [- (2a-n), 2a-n],a-abs(b)
da nam pożądaną sekwencję. Zasadniczo to robi kod.źródło
Węgiel drzewny ,
108 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zaoszczędziłem 2 bajty dzięki @dzaima za wskazanie, że nie muszę używać
#
s.źródło
Python 2 , 78 bajtów
Wypróbuj online!
źródło
Galareta , 14 bajtów
Wypróbuj online!
Pełny program
Używa
1
.-1 dzięki Jonathan Allan .
-1 dzięki Jonathan Allan .
źródło
’R
->Ṗ
dla bajtu.”X
->1
dla innego.Haskell , 72 bajty
Wypróbuj online!
Definiujemy nieskończoną listę
r
będącą przekątną#
s zaczynającą się od lewego górnego rogu.Następnie definiujemy funkcję
g
która wykonuje ciężar pracy.g
pobiera listę i wielokrotnie ją odwraca i usuwa pierwszy element, aż lista będzie pusta, a następnie konkatenuje wynik każdej akcji.Naszą główną funkcją jest tutaj funkcja bez punktów. Ta funkcja zaczyna się od pobrania
n
elementów z nieskończonej listyr
, następnie przycina pierwszy element i stosuje sięg
. Na koniec musimy#
cofnąć się do początku, ponieważ specyfikacja pytania jest trochę dziwna, nie jestem pewien, dlaczego pierwsza przekątna jest zawsze dłuższa niż powinna, ale tak jest, więc musimy dodaj aa#
.źródło
("#":).g.init.(
zabiorąr)
, ale dzięki!SOGL V0.12 , 19 bajtów
Wypróbuj tutaj!
źródło
05AB1E , 22 bajty
Wypróbuj online!
Zastosowania
8
.źródło
05AB1E , 6 bajtów
Wypróbuj online!
źródło
S
. Tak więc wynik będzie dwa razy dłuższy. Nie wiedziałem jeszcze o + i ×. Tworzą naprawdę ciekawe wzory, łącząc je z liczbamiS
, ale nie zwracał wystarczającej uwagi na wynik ..>.> I są+
i×
są w zasadzie wbudowane dla[0,4,4,0,2,6,6,2]
i[1,5,5,1,3,7,7,3]
. I8
resetuje się do pochodzenia, gdzie uruchomiony. Tutaj trochę więcej informacji.CJam , 29 bajtów
Wypróbuj online!
Zastosowania
8
.źródło
Pyth, 23 bajty
Wypróbuj tutaj.
źródło
JavaScript, 127 bajtów
Oblicza cel (
g
) do osiągnięcia. Po osiągnięciu tego celu przejdź do następnego celu. Używa także sztuczki, której należy unikaćMath.round()
, dodając0.5
do każdej nierównej liczby.źródło
Haskell, 74 bajty
Wypróbuj online!
Jak to działa:
Każde wywołanie rekurencyjne
f
dołącza następną przekątną.źródło
Łuska , 19 bajtów
Wypróbuj online!
Wyjaśnienie
To trochę niezręczne.
źródło
Python 3 , 82 bajty
Wypróbuj online!
źródło
Retina , 71 bajtów
Wypróbuj online! Objaśnienie: Pierwsze trzy etapy przekształcają dane wejściowe na postać, w
:> :
której liczba znaków między:
s jest liczbą wejściową. Ostatnie dwa etapy następnie odbijają>
(lub<
, przy ruchu w lewo) między:
s. Czwarty etap zapętla odbicie, za każdym razem drukując wymagane części sznurka.;
Zatrzymuje ciąg znaków jest wydrukowany po pętli.źródło
05AB1E , 16 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
K (Kona), 27 bajtów
Tworzy bazową sekwencję numeryczną poprzez wielokrotne odwracanie i upuszczanie główki wektora, aż będzie pusty.
źródło
PHP, 65 bajtów
Uruchom jako potok
-nF
lub przetestuj go online .wyjaśnienie:
pierwsza iteracja:
$n
jestNULL
, więc--$n
nie ma wpływu i ocenia naNULL
-> set
$n
i$d
na wstępnie zmniejszoną wartość argumentu1. przyrost
$x
parzysty$d
, spadek nieparzysty$d
2. druk
X
, nowy wiersz i$x
spacjedalsze iteracje: dekrementacja
$n
; gdy trafi0
, zresetuj$n
(i$d
) do wstępnie zmniejszonego argumentufinał: wydrukuj jeszcze jeden
X
.źródło
Japt , 31 bajtów
Rozwiązanie rekurencyjne, które zwraca tablicę wierszy.
Wypróbuj online! używając
-R
flagi do łączenia wyników z nowymi liniami.źródło
Python 2,
159145141136 bajtówTen problem był już całkiem niezły w Pythonie, ale pomyślałem, że nadal będę publikować moją okropną wersję jedno-liniową. (Bez średników!)
Edycja: 14 bajtów w dół, używając sumy zamiast podwójnej listy
Edycja: Zauważyłem w Pythonie 2, że możesz używać danych wejściowych zamiast raw_input. Zawsze używałem tego drugiego.
źródło
Mathematica,
142102 bajty (niezależne)To rozwiązanie ma mathowy smak:
UnitVector[#,1-Sum[(-1)^Floor[#+1/2-Sqrt[9/4+#*#-#-2x]],{x,k}]]~Table~{k,0,#(#-1)/2}/.{0->" ",1->"X"}&
To w zasadzie oblicza, w którym odcinku się znajdujemy (odwracając funkcję liczby trójkątnej), a następnie przesuwa się w lewo lub w prawo, dodając moc -1.
Możesz go przetestować w piaskownicy kodu Wolfram , wklejając kod jak
UnitVector[#,1-Sum[(-1)^Floor[#+1/2-Sqrt[9/4+#*#-#-2x]],{x,k}]]~Table~{k,0,#(#-1)/2}/.{0->" ",1->"X"}&@6//MatrixForm
i naciskając Shift + Enter lub Numpad Enter lub klikając Gear -> „Oceń komórkę”.Zdarza się, że ma taką samą długość jak mój oryginalny niepoprawny port rozwiązania Erik's Python 2 (ten port daje wynik dla wejścia o jeden wyższy):
(Print[X];l=Range@#;Do[Do[Print[StringRepeat[" ",l[[j]]]<>"X"],{j,Length@l}];l=l[[-2;;1;;-1]],{i,#}])&
źródło