Pierwsza kostka Ascii ukończona przez poprzednika (PAC 1) to prosta kostka o długości boku 1 i wygląda następująco:
/////\
///// \
\\\\\ /
\\\\\/
PAC 2 ma kształt geometryczny tak, że połączenie go z jego poprzednika (The PAC 1 ) uzupełnia o boku 2 kostka:
front back
/////////\ /////////\
///////// \ ///////// \
/////\\\\\ \ ///////// \
///// \\\\\ \ ///////// \
\\\\\ ///// / \\\\\\\\\ /
\\\\\///// / \\\\\\\\\ /
\\\\\\\\\ / \\\\\\\\\ /
\\\\\\\\\/ \\\\\\\\\/
Ponieważ widok z tyłu jest nudny, interesuje nas tylko widok z przodu .
To samo dotyczy PAC 3 : Przy odrobinie myślenia PAC 2 można odwrócić i podłączyć do PAC 3, aby utworzyć kostkę o solidnej długości 3:
/////////////\
///////////// \
/////\\\\\\\\\ \
///// \\\\\\\\\ \
///// /////\\\\\ \
///// ///// \\\\\ \
\\\\\ \\\\\ ///// /
\\\\\ \\\\\///// /
\\\\\ ///////// /
\\\\\///////// /
\\\\\\\\\\\\\ /
\\\\\\\\\\\\\/
I tak dalej z PAC 4 :
/////////////////\
///////////////// \
/////\\\\\\\\\\\\\ \
///// \\\\\\\\\\\\\ \
///// /////////\\\\\ \
///// ///////// \\\\\ \
///// /////\\\\\ \\\\\ \
///// ///// \\\\\ \\\\\ \
\\\\\ \\\\\ ///// ///// /
\\\\\ \\\\\///// ///// /
\\\\\ \\\\\\\\\ ///// /
\\\\\ \\\\\\\\\///// /
\\\\\ ///////////// /
\\\\\///////////// /
\\\\\\\\\\\\\\\\\ /
\\\\\\\\\\\\\\\\\/
Zadanie:
Napisz pełny program lub funkcję, która przyjmuje na wejściu dodatnią liczbę całkowitą n i zwraca lub drukuje odpowiedni widok PAC n z przodu dokładnie tak, jak pokazano powyżej. Dopuszczalne są dodatkowe końcowe białe znaki.
To jest golf golfowy , więc spróbuj użyć jak najmniej bajtów w wybranym języku.
Odpowiedzi:
JavaScript (ES6), 229 bajtów
źródło
Partia,
559432400 bajtówObjaśnienie: Dolna połowa sześcianu jest rysowana poprzez odbicie górnej połowy. Połówki są dalej podzielone na
siedemsześciutrzechpasków, zgodnie z tym schematem przedstawiającym górną połowę:Edycja: Oszczędź ponad 20%, ulepszając kod, który odzwierciedlał górę do dolnej połowy. Zaoszczędź prawie 10%, łącząc lewy dwa i środkowe trzy paski.
źródło
Płótno , 36 bajtów
Wypróbuj tutaj!
źródło
SOGL V0.12 , 32 bajty
Wypróbuj tutaj!
Proste wyjaśnienie:
1. iteruj dla każdego z 1..x
2. stwórz
⌐
kształt o szerokościi*4+1
i wysokości =(0-indexed)i // 2
3. wypełnij go tak, aby wyglądał jak
⦧
4. dodaj kształt „\” do tego poziomu
5. wstaw poprzedni krok wewnątrz tego odwróconego 6. po wszystkim lustro w pionie
pełny program:
źródło
Haskell ,
232227224187183180175 bajtówFunkcja anonimowa w ostatnim wierszu przyjmuje argument liczby całkowitej i zwraca wiersze do wydrukowania dla kostki o tym rozmiarze.
Chodzi o to, aby użyć rekurencji, aby narysować większe kostki z mniejszych. Spójrzmy na górną połowę sześcianu o rozmiarze 1. Następnie otrzymujemy górną połowę sześcianu o rozmiarze 2, odbijając lustro poprzednią połowę i dodając stały wzór ukośników i spacji wokół niej:
Tak więc algorytmem do narysowania kostki o rozmiarze n jest
/
s i\
s) oraz pad////
i\
wokół.////
n plus/\
i/ \
.źródło
g=
.(\l->r l++k(k m)l)
jest taki sam jakliftM2 (++) r (k(k m))
, który ponownie można skrócić(++).r<*>k(k m)
. Wypróbuj online!Ruby ,
174 167 169167 bajtówWypróbuj online!
tworzy tablicę
n*4
ciągów wypełnionych spacjami, a następnie zastępuje ją kolejno mniejszymi kostkami.Skomentowany kod
źródło
Python 2 ,
254234226203201199 bajtówNareszcie sub 200!
Wydziwianie:
Ta funkcja służy do zamiany wszystkich
\
z/
i vice versatrochę długo w python2 - działa tylko z unicode
Odjazd to na jak to działa
Generuje nowe dwa górne wiersze dla każdej iteracji
Na razie nie mogę znaleźć kompaktowego sposobu na otrzymanie tych linii z poprzedniej iteracji
Odwróć wszystkie wiersze poprzedniej iteracji i zamień ukośniki
Skopiuj górną połowę, odwróconą o rzędy, zamień ukośniki
Staranna metoda dla środkowych łańcuchów wypełniających
Wypróbuj online!
źródło
Stax , 36 bajtów
Uruchom i debuguj
Takie podejście tworzy iteracyjnie górną połowę wyników. Wykonuje blok główny określoną liczbę razy. W tym bloku każdy wiersz jest dublowany i ma dodany prefiks i sufiks. Dwa górne nowe wiersze są dodawane osobno. Po zbudowaniu wszystkich rzędów są one wyśrodkowane, a następnie dno jest odbijane pionowo.
Oto program rozpakowany, nieposortowany i skomentowany.
Uruchom ten
źródło
Haskell, 193 bajty
Dłuższy niż zwycięzca, ale podejście może być interesujące - wykorzystuje nawet
cos
ipi
:)Kod:
Uruchom tak:
Ten program w zasadzie „rysuje” wiele diamentów takich jak ten:
Funkcja
i s e f
„rysuje” jeden diament wielkościs
, gdziee, f
są(abs$z-y)(abs$z+y-1)
.Funkcja
w
przesuwa ciągnione diamenty wi
celu poprawienia miejsc.head
użyte w jego definicji odpowiada tylko za najwyższą warstwę.Wypróbuj tutaj
źródło
Węgiel drzewny , 42 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Narysuj kostki od najmniejszej do największej. (Rysowanie od największego do najmniejszego oznaczało, że skończyłem z odbiciem lustrzanym dla liczb nieparzystych, których naprawienie kosztuje zbyt wiele bajtów).
Wydrukuj linię
/
s. (To stanie się\
literą po prawej, ale rysunek jest wykonywany w odbiciu lustrzanym, ponieważ golfist ma lustro na końcu pętli.)Wydrukuj dwa górne rzędy
\
s. (Rysowanie wszystkich\
s w jednym wielokącie oznaczało, że kursor znalazł się w niezręcznej pozycji, której naprawienie kosztowało zbyt wiele bajtów).Wydrukuj lewe cztery rzędy
\
s. (Piąty rząd pochodzi z poprzedniej kostki.)Przejdź na początek następnej kostki.
Odbij poziomo, gotowy do następnego sześcianu.
Odzwierciedlaj wszystko pionowo, aby ukończyć sześcian.
źródło