W dzisiejszym odcinku AAOD zamierzamy zbudować chińskie sanktuarium o różnej wysokości.
Rozważ następujące przykłady wysokości ( N
) 1
do6
N = 1
:
.
|
. ]#[ .
\_______/
. ]###[ .
\__]#.-.#[__/
|___| |___|
|___|_|___|
####/_\####
|___|
/_____\
N = 2
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\___]#.---.#[___/
|__|_| |_|__|
|__|_|___|_|__|
#####/___\#####
|_____|
/_______\
N = 3
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\____]#.-----.#[____/
|__|__| |__|__|
|__|__|_____|__|__|
######/_____\######
|_______|
/_________\
N = 4
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_____]##.-----.##[_____/
|__|__|_| |_|__|__|
|__|__|_|_____|_|__|__|
########/_____\########
|_______|
/_________\
N = 5
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_______________________/
. ]###########[ .
\______]###.-----.###[______/
|__|__|___| |___|__|__|
|__|__|___|_____|___|__|__|
##########/_____\##########
|_______|
/_________\
N = 6
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_______________________/
. ]###########[ .
\___________________________/
. ]#############[ .
\_______]####.-----.####[_______/
|__|__|__|__| |__|__|__|__|
|__|__|__|__|_____|__|__|__|__|
############/_____\############
|_______|
/_________\
i tak dalej.
Szczegóły budowy
Jestem pewien, że większość szczegółów na temat wzoru jest jasna. Oto kilka drobniejszych szczegółów:
- Drzwi na dole świątyni mogą mieć co najmniej
1
_
szerokość, a maksymalnie5
_
szerokość. - Zawsze będą dwa
.
bezpośrednio nad filarami wokół drzwi (dwa pionowe|
). - Schody zaczynają się od tej samej szerokości co drzwi i zwiększają się jak na schemacie
- Te
]##..##[
bloki nad każdym wzrostem poziomu dachu w wielkości2
od góry do dołu. - Te
\__...__/
poziomy dachy wzrost wielkości4
od góry do dołu. - Bloki ścian wokół drzwi powinny co najmniej zawierać,
1
_
a maksymalnie3
_
między nimi|
. Priorytetem są bloki ścian zewnętrznych, dzięki czemu ten, który jest najbliżej drzwi, ma różny rozmiar dla każdego poziomu. - Przestrzeń między
.
i]
(lub[
) jest wypełniona#
w dachu tuż nad drzwiami.
Szczegóły wyzwania
- Napisz funkcję lub pełny program, który odczytuje dodatnią liczbę całkowitą większą niż
0
za pomocą argumentu STDIN / ARGV / function lub najbliższego odpowiednika i wypisuje (do STDOUT lub najbliższego odpowiednika)N
chińską świątynię - Końcowy znak nowej linii jest opcjonalny.
- Nie powinno być ani spacji końcowych, ani wystarczającej liczby spacji końcowych, aby wstawić wynik w minimalnym prostokącie ograniczającym.
- Nie powinno być żadnych spacji wiodących, które nie są częścią wzorca.
Tabela liderów
Pierwszy post z serii generuje tabelę wyników.
Aby mieć pewność, że Twoje odpowiedzi się pojawią, zacznij każdą odpowiedź od nagłówka, używając następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
N=1
przypadku wynosi 1 ? Dlaczego nie 3 i mieć mniejsze okna boczne, jak wN=2
przypadku?N=1
czy pierwszy dach nie jest zbyt długi (szeroki)?#
obok nich.
wsparcia]
i[
powyżej. Informacje o początkowym rozmiarze dachu - to jest rozmiar dachu w górnym dachu każdej wysokości.Odpowiedzi:
CJam, 200 bajtów
Dodano nowe linie, aby uniknąć przewijania. Wypróbuj online
Krótkie wyjaśnienie:
Program buduje lewą połowę świątyni (w tym środkową), a następnie odwraca ją i zastępuje niektóre postacie, aby uzyskać prawą połowę. Szereg n spacji jest reprezentowany przez liczbę ~ n (bitowe „nie”) podczas budowy i zastępowany rzeczywistymi spacjami na końcu.
Program rozpoczyna się od 2 górnych linii, a następnie dla każdego poziomu dachu poprzedza wszystkie poprzednie linie 2 spacjami i dodaje nowy dach (2 linie). Ostatni dach został zmodyfikowany, aby dodać część „nad drzwiami”.
Następnie, górna ściana jest budowana poprzez powtórzenie „| __” i obcięcie na odpowiedniej długości, a następnie ustalenie „_ |” i spacje. Ściana jest następnie powielana, a przestrzenie drzwi zastępowane podkreślnikami. Wreszcie dolna część jest konstruowana linia po linii.
źródło
Perl,
332 316294Spróbuj mnie .
C 371
Spróbuj mnie .
JavaScript, 365
Powyższe można przetłumaczyć na JavaScript prawie od 1 do 1:
Posługiwać się:
źródło
s
. Oczywiście, chyba że przydzielasz to dynamicznie.Python 2,
356352347344 bajtówTo w zasadzie buduje świątynię linia po linii. Funkcja
p
drukuje ciąg znaków ze spacjami potrzebnymi do jego wyśrodkowania.Użyłem Pythona 2 do zapisania dużej ilości bajtów, ponieważ obiekt mapy Pythona 3 nie uruchamia się. Chyba powinienem zawsze grać w golfa w Pythonie 2 , po prostu zapisuje kilka dodatkowych bajtów (nawet jeśli po prostu nie trzeba analizować danych wejściowych na int). Hehehe, to w ogóle nie jest tak, że kod jest piękny do gry w golfa.
Edycja: i oczywiście nie potrzebuję już mapy ...
Oto kod w postaci bez golfa:
źródło
print(B*(5+2*n-len(s)//2)+s)
naprint B*(5+2*n-len(s)/2)+s
(usunąć nawiasy i zmienić//
na/
).print B*(5+2*n-len(s)/2)+s
, abyprint(5+2*n-len(s)/2)*B+s
można usunąć spację poprint
.JavaScript ( ES6 ), 440
Edytuj Naprawiono błąd nadproża
Funkcja, której wysokość jest parametrem, wysyłana do konsoli.
Korzystanie z szablonu napis dużo , wszystkie znaki nowej linii są znaczące i zliczane.
Uruchom snippet, aby przetestować w Firefoksie (z wyjściem konsoli)
Wersja bez golfa do testu interaktywnego:
źródło
Haskell, 473 bajty
źródło
#
C, 660 bajtów
Wzór wydawał się po prostu zbyt nieregularny, aby wymyślić coś wymyślnego, szczególnie w języku bez przetwarzania łańcucha. Oto moje podejście do brutalnej siły:
Przed golfem:
Nie wiele tu do wyjaśnienia. Po prostu idzie linia po linii i generuje niezbędną liczbę każdego znaku. Próbowałem zachować sam kod, ale nadal się sumuje.
d
to szerokość drzwi,w
szerokość każdego muru z cegły.źródło
c(char*s){for(;*s;)putchar(*s++);}
==>#define c printf
;r(n,c){for(j=0;j++<n;)putchar(c);}
==>r(n,C){while(n--)putchar(C);}