Historia
Oświadczenie: Może zawierać wymyślone informacje o kangurach.
Kangury przemierzają kilka etapów rozwoju. Gdy dorastają i stają się silniejsze, mogą skakać coraz wyżej i dłużej i mogą skakać więcej razy, zanim poczują głód.
Na etapie 1 kangur jest bardzo mały i nie może w ogóle skakać. Mimo to stale wymaga pożywienia. Możemy przedstawić wzór aktywności kangura z etapu 1 w ten sposób.
o
Na etapie 2 kangur może wykonywać małe skoki, ale nie więcej niż 2, zanim stanie się głodny. Możemy przedstawić taki wzór aktywności kangura 2. stopnia .
o o
o o o
Po etapie 2 kangur szybko się poprawia. Na każdym kolejnym etapie kangur może skoczyć nieco wyżej (1 jednostka w graficznej reprezentacji) i dwa razy więcej. Na przykład wzór aktywności kangura trzeciego stopnia wygląda tak.
o o o o
o o o o o o o o
o o o o o
Na etapie n wzorzec aktywności składa się z 2 skoków w kształcie litery V o wysokości n n-1 .
Na przykład na etapie 4 jest 8 skoków o wysokości 4 .
o o o o o o o o
o o o o o o o o o o o o o o o o
o o o o o o o o o o o o o o o o
o o o o o o o o o
Zadanie
Napisz pełny program lub funkcję, która przyjmuje na wejściu dodatnią liczbę całkowitą n i wypisuje lub zwraca artystyczną reprezentację ASCII wzorca aktywności kangura stage n .
Dozwolone są otaczające spacje i kody specjalne ANSI, o ile wzór wygląda dokładnie tak, jak pokazano powyżej.
Jeśli wybierzesz funkcję, która zwraca dane wyjściowe, musi zwrócić pojedynczy ciąg lub tablicę znaków, która wyświetla prawidłowe dane wyjściowe po wydrukowaniu. Zwracanie tablicy ciągów jest niedozwolone.
Zamiast tego możesz użyć dowolnego drukowalnego znaku, który nie jest spacją o
, o ile jest on spójny z wzorcem aktywności i we wszystkich wzorcach w odpowiedzi.
To jest golf golfowy ; niech wygra najkrótsza odpowiedź w bajtach!
o
. Czy możesz również użyć dowolnej postaci do przedstawienia spacji (o ile są one różne?)?Odpowiedzi:
05AB1E ,
1210 bajtówWyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
MATLAB,
92 90 8684 bajtówWypróbuj online!
eye
tworzy matrycę tożsamości. Jeśli odwrócimy go i[fliplr(p),p]
połączymy oryginał, tzn. Otrzymamy (zan=3
):Z
repmat(...,1,2^n/2)
powtarzamy te2^(n-1)
czasy i otrzymujemyZ tego po prostu usuwamy niepotrzebne kolumny, za pomocą
A(:,n+1:n:end)=[];
źródło
Węgiel drzewny , 14 bajtów
Wypróbuj online!
Wyjaśnienie
Nλ
wprowadza liczbę całkowitą doλ
.P^
Druk jest wielokierunkowa (SE i SW) z×λo
(string mnożenieλ
zo
). NastępnieF⁻λ¹
uruchamiaλ - 1
czasy pętli for , w których‖O→
z zachodzeniem na siebie odzwierciedla całość po prawej stronie.źródło
P^
to druk wielokierunkowy (SE i SW) „ Fajnie, tego nie często widuje się w językach programowania!Python 2 , 87 bajtów
Wypróbuj online!
Używa wzoru na współrzędne
(i,j)
zawierające okrąg, a następnie łączy i drukuje siatkę. Jest wiele węchu golfowego tutaj -''.join
dwa zakresy zagnieżdżonych,for
nadexec
, więc nie może być poprawa.źródło
Python 2,
8381 bajtówWypróbuj online!
źródło
exec
Befunge,
9891 bajtówWykorzystuje to
,
zamiasto
, ponieważ pozwala nam to zaoszczędzić kilka bajtów.Wypróbuj online!
Wyjaśnienie
Biorąc pod uwagę numer etapu, n , zaczynamy od obliczenia następujących trzech parametrów wzorca:
Jump_len normalizuje się uniknąć przy czym zero dla etapu 1 kangura z:
Możemy wtedy wyjście wzór skok przez iteracji nad x i y współrzędne obszaru wyjściowego i obliczeniem odpowiedniej charater do wyjścia dla każdej lokalizacji. Y współrzędnych odlicza z n - 1 0, a x współrzędnych odlicza od szerokości - 1 do 0. określenia, czy wymaga kropki wykazać za pomocą następującego wzoru:
Wartość logiczna show_dot jest używana jako indeks tabeli w celu ustalenia rzeczywistego znaku, który ma zostać wyprowadzony w każdej lokalizacji. Aby zaoszczędzić miejsce, używamy początku ostatniego wiersza źródła jako tej tabeli, dlatego nasza
o
postać kończy się na,
.źródło
J ,
2825 bajtówZaoszczędź 3 bajty dzięki @ Conor O'Brien .
Jest to oparte na sztuczce palindrom z rozwiązania @ muddyfish .
Wypróbuj online!
Wyjaśnienie
źródło
' o'{~3 :'(}."1,.~|."1)^:y=i.y'
. Chciałbym znaleźć sposób na usunięcie tego wyraźnego czasownika ... Cholera^:
.u&v
dyadycznym używaniu - całkiem fajnie.Pyke, 11 bajtów
Wypróbuj tutaj!
źródło
Haskell , 100 bajtów
Wypróbuj online! Zastosowanie:
k 3
.Wyjaśnienie:
Biorąc pod uwagę wiersz
r
, ustawiana jest kolumnac
im = 2(n-1)
an,o
jeślic mod m
jest równer
lubm-r
. Najbardziej zewnętrzne rozumienie listy ustawia zakresr
odn-1
do0
, następne ustawia zakresc
od0
do,m*2^(n-1)
a najbardziej wewnętrzny działa jako warunkowe zwracanie,'o'
jeśli powyższa formuła jest spełniona i' '
inaczej. Daje to listę ciągów, które są przekształcane w pojedynczy ciąg oddzielony znakiem nowej liniiunlines
. Ponieważn=1
funkcja generuje błąd dzielenia przez zero, więc ten przypadek jest obsługiwany jawnie w pierwszym wierszu.źródło
['o'|mod c m`elem`[m-r,r]]
część!C #,
180, 173171 bajtówNie wygrasz tego, zamieszczając post dla innych zawodników C # jako coś, co mogą pokonać.
pełny program:
edycja: -7 bajtów dzięki @KevinCruijssen
edycja: -2 bajty, uproszczone jeśli
źródło
,i
; możesz użyć ponowniei
zamiastn-1
po sprawdzeniu stanu;||
może być|
;j++
można usunąć i++
dodać doj
. Tak więc w sumie:(n)=>{var s=new string[n];for(int x=0,a=1,j=0,i;j<=Math.Pow(2,n)*(n*n-n);){i=j++%n;s[n-i-1]+=x%n==i?'o':' ';if(i==n-1){x+=a;a*=x==i|x==0?-1:1;}}return string.Join("\n",s);};
( 173 bajtów )||
a&&
jednak przechowywane następnie w całym programie.Pyth , 30 bajtów
Program, który pobiera liczbę całkowitą i wypisuje wynik. Używa znaku cudzysłowu
"
zamiasto
.Wypróbuj online!
Jak to działa
źródło
Python 2 ,
11511310898 bajtówWypróbuj online!
Używanie
range(-n+1,n-1)
do tworzenia bezwzględnej liczby spacji między dnem ao
generowaniema następnie dołączając kolejne kopie, obracając wszystko o 90º i dołączając ostatnią
o
w prawym dolnym roguźródło
J ,
5847 bajtówZaoszczędzono 11 bajtów, korzystając z idei macierzy tożsamości z rozwiązania @ flawr .
Wypróbuj online!
Proste zastosowanie definicji.
Wyjaśnienie
Dla
n = 3
tworzy macierz tożsamości z rzędu n .Następnie wykonaj kopię lustrzaną
Powtórz to 2 n -1 razy i upuść nagłówek każdego rzędu na duplikaty
Użyj tych wartości jako wskaźników do tablicy char,
[' ', 'o']
aby wygenerować tablicę 2d charźródło
JavaScript (ES6), 83 bajty
źródło
Galaretka , 11 bajtów
TryItOnline!
W jaki sposób?
Używany znak do wydruku to
0
.Opiera się na metodzie odpowiedzi Dennisa na poprzednie pytanie dotyczące kangurów.
źródło
ŒḄ¡Ṭ€z0o⁶ṚY
.MATL, 27 bajtów
Wypróbuj to w MATL Online
źródło
Python 3 , 177 bajtów
Wypróbuj online!
źródło
Perl 6 ,
1049388 bajtówWstawia
o
do tablicy 2D, a następnie drukuje.źródło
05AB1E , 16 bajtów
Wypróbuj online!
Dlaczego i jak?
źródło
Java 8, 254 bajty
Gra w golfa:
Nie golfowany:
Wyjście programu:
źródło
PHP, 157 bajtów
Nie golfowany:
źródło
'o'
z1
a każdy''
z0
. Mam nadzieję, że to działa, również spacje można zastąpić przezO
lub9
. Ważny jest wzór, zgodnie z zasadami. Ale najpierw sprawdź