N
Jako dane wejściowe otrzymasz dodatnią liczbę całkowitą . Twoim zadaniem jest zbudowanie pół-zygzaka, o N
bokach o długości każdej N
. Ponieważ stosunkowo trudno jest jasno opisać to zadanie, oto kilka przykładów:
N = 1
:O
N = 2
:O OO
N = 3
:OO OO OOO
N = 4
:OOOOO OO OO OOOO
N = 5
:OOOOOO OOO OOO OOO OOOOOO
N = 6
:OOOOOOO OOO OOO OOO OOO OOOOOOOOOOOO
N = 7
:OOOOOOOOO OOOO OOOO OOOO OOOO OOOO OOOOOOOOOOOOOO
Jak widać, pół-zygzak składa się z naprzemiennych linii ukośnych i poziomych, i zawsze zaczyna się od górnej linii od lewej do prawej dolnej. Zwróć uwagę, że znaki na poziomych liniach są oddzielone spacją.
Zasady
Można wybrać dowolną non-białymi charakter zamiast
O
, może to być nawet sprzeczne.Możesz wyprowadzić / zwrócić wynik jako ciąg znaków lub listę ciągów znaków, z których każdy reprezentuje jedną linię .
Możesz mieć końcowy lub wiodący znak nowej linii.
Możesz przyjmować dane wejściowe i dostarczać dane wyjściowe dowolnym standardowym środkiem .
Jeśli to możliwe, dodaj link testowy do swojego zgłoszenia. Będę głosować za każdą odpowiedzią, która pokazuje wysiłki w golfa i zawiera wyjaśnienie.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach w każdym języku !
Odpowiedzi:
Węgiel drzewny , 24 bajty
Wypróbuj online!
-5 dzięki Neilowi .
AST:
źródło
FN§⟦↘→↗→⟧ι⁻Iθ¹→
(tylko 15 bajtów), ale listy kierunków wydają się nie działać poprawnie w Charcoal. Szkoda.FN✳§⟦↘→↗→⟧ι⁻θ¹O
będzie działać po tym, jak Dennis pociągnie,✳
będąc skierowanym w kierunkuPython 2 ,
157153 bajtówWypróbuj online!
n*3/2*~-n+1
jest szerokością każdej linii: ⌊3n / 2⌋ · (n − 1) + 1 znaki.q*n+s*(4*n-6)
reprezentuje górny i dolny rząd. Jeśli powtórzymy i pokroimy[2*(n-1):]
, otrzymamy górny rząd; jeśli kroimy[5*(n-1):]
, otrzymujemy dolny rząd. Stąd definicjap
i wywołaniap(2)
ip(5)
. Ale ponieważ i tak potrzebujemy powtórzeń i odcinania długości linii dla wszystkich innych linii, ponownie używamyp
w pętli.i*s+s+o+…
tylko nudne wyrażenie dla środkowych rzędów.n>1>p(5)
spowoduje zwarcie, jeśli nien≯1
spowodujep(5)
to oceny. Stąd jest to skrótif n>1:p(5)
.źródło
Mathematica,
1261251211121048986 bajtów#
to numer wejściowy dla funkcji anonimowej (zakończony końcowym&
).m=" "&~Array~{#,#^2-#+1};
tworzy macierz znaków spacji o odpowiednim rozmiarze, wypełniając tablicę podanych wymiarów#,#^2-#+1
wyjściami stałej funkcji anonimowej „wypisz spację”" "&
.Do[foo,{j,#},{i,#}]
to para zagnieżdżonych pętli do, w którychj
zakresy od1
do#
i wewnątrz tychi
zakresów od1
do#
.m[[1[i,#,-i][[j~Mod~4]],j#-#+i+1-j]]="X"
ustawia odpowiednią część macierzy na znakX
na podstawiej
ii
.-i
Wykorzystuje negatywne indeksowanie aby zapisać bajty od#-i+1
. (Zapomniałem napisaćMod[j,4]
jakj~Mod~4
w oryginalnej wersji tego kodu.) Jenny_mathy zwróciła uwagę, że możemy użyć modułowej reszty do bezpośredniego indeksowania listy (zamiast używaniaSwitch
) w celu zaoszczędzenia 9 bajtów, a JungHwan Min wskazał, że nie T trzeba użyć,ReplacePart
ponieważ możemy ustawić część tablicy, która1[i,#,-i][[j~Mod~4]]
wykorzystuje dziwne zachowanie i ogólność,[[foo]]
aby zaoszczędzić bajty{1,i,#,-i}[[j~Mod~4+1]]
Możesz to przetestować w piaskownicy Wolfram Cloud , wklejając poniższy kod i naciskając Shift + Enter lub Numpad Enter:
źródło
ReplacePart
tutaj.m=ReplacePart[...]
może byćm[[{1,i,#,-i}[[j~Mod~4+1]],j#-#+i+1-j]]="X"
- można z listy. Pozbywa się 15 bajtów.Set
Part
{1,i,#,-i}[[j~Mod~4+1]]
może być również1[i,#,-i][[j~Mod~4]]
. Ta sztuczka działa, ponieważ[[0]]
zwracaHead
wyrażenie.C ++,
321234 bajty-87 bajtów dzięki Zacharýowi
Zwraca wektor ciągów
źródło
Mathematica, 179 bajtów
edycja dla @JungHwanMin
źródło
Mod[z,4]==0
go zastąpićMod[z,4]<1
?Mod[#,4]
ją#~Mod~4
dla -1 bajtów?05AB1E ,
212019 bajtówKod
Używa nowego trybu płótna:
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
Wyjaśnienie:
Dla wejścia 6 daje to następujące argumenty (w tej samej kolejności) dla obszaru roboczego:
Aby wyjaśnić, co robi płótno, wybieramy pierwszy zestaw argumentów z powyższej listy.
Liczba 6 określa długość ciągu, który zostanie zapisany na płótnie. Wypełniacz służy do pisania na płótnie, którym w tym przypadku jest
O
. Cyklicznie przebiega przez łańcuch wypełniający. Kierunek łańcucha jest określony przez ostatni argument, kierunek. Kierunki są następujące:Oznacza to, że 3 ustawia kierunek na południowy wschód , co można również wypróbować online .
źródło
SOGL V0.12 , 36 bajtów
Wypróbuj tutaj!
Podstawową ideą jest, aby dla każdej liczby zakresu wejściowego wybrać dodanie przekątnej lub poziomej kropkowanej części, w którym to przypadku obróci tablicę, aby ułatwić dodawanie. Wyjaśnienie:
Gdyby wprowadzenie 1 nie było dozwolone, również
ο.∫2%?.╝}F2\?№@.┌Ο};1w⁄Hh1ž}.4%1>?№
by działało. Gdyby dozwolone były pływające liczby losowe, również.∫2%?.╝}F2\?№@.┌Ο};1w⁄Hh1ž}.4%1>?№
by działały. Gdybym nie był leniwy i zaimplementowany‼
,}F2%?
mógłby zostać zastąpiony‼
przez -4 bajtyźródło
Mathematica,
10687 bajtówZwraca
SparseArray
obiektString
s. Aby zwizualizować dane wyjściowe, możesz dołączyćGrid@
. Zgłasza błąd w przypadku1
, ale można go zignorować.Wyjaśnienie
Ustaw
i
ij
na 1.Ustaw
k
na wejście - 1.Ustaw
l
nak*input + 1
Powtarzaj
l
czasy, zaczynając od0
, zwiększając za1
każdym razem ...Dodaj urojoną część
i
doj
...Jeśli bieżąca iteracja jest podzielna przez
k
, pomnóżi
przez urojoną jednostkę ...Utwórz
Rule
obiekt, który zmienia element w pozycji{j, current iteration + 1}
na"o"
Stwórz
SparseArray
obiekt, używając wygenerowanychRule
obiektów, z wymiarem{input, l}
, używając" "
jako pusty.Wypróbuj na Wolfram Sandbox!
źródło
SparseArray
liczenie liczy się jako tablica? Można to wizualizować za pomocąGrid
lubMatrixForm
, ale normalnie nie liczyłbym go tutaj jako „listy ciągów”. Jeśli wystarcza tablica 2D, to na przykład odcina 8 bajtów od mojego rozwiązania (12 przed pomocą Jenny_mathy).SparseArray
odpowiedzi, więc zakładam, że jest w porządku.Python 3 ,
228 226 224 215 197195 bajtów-11 bajtów Dzięki @Mr. Xcoder
-2 bajty Dzięki @Mr. Xcoder
Wypróbuj online!
Objaśnienie i mniej golfowy kod:
źródło
c+=i%(n-1)<1
sięc+=i%~-n<1
do -2 bajtówif 2>n:return'o'
jest dość zbędny. Zrobiłem obejściec+=i%[~-n,n][2>n]<1
zamiast zc+=i%~-n<1
.Haskell , 197 bajtów
Wypróbuj online!
Dzięki @Lynn: naprawiono odstępy między
O
s na poziomych segmentach zygzaka, ale kosztowało to dużo bajtów!Kilka wyjaśnień:
r
jest wierszem wyniku: ma0 y y y y y 0 x x x 0 y ...
format, liczbęx
iy
zależnie od wiersza i inicjałun
x='0'
iy=' '
x=' '
iy=' '
x=' '
iy='0'
take(div(3*n)2*(n-1)+1)
tnie nieskończony rząd we właściwym miejscun=1
:take n
obsługuje tę skrzynkę.źródło
replicate n x
może być zastąpiony przezx<$[1..n]
. Ponadto w Twojej odpowiedzi nie ma odstępów międzyO
s na poziomych segmentach zygzaka.Python 2 ,
155151146137 bajtówWypróbuj online!
źródło
`L`[2::5]
oszczędzam bajt''.join(L)