Biorąc pod uwagę trzy liczby całkowite> = 2, utwórz sześcian ASCII w rzucie ortogonalnym (szafkowym). Trzy liczby całkowite przedstawiają wysokość, szerokość i głębokość (mierzone widocznymi znakami), w tym rogi. Narożniki powinny być „o” lub „+”, dowolny wybór.
w: 10, h: 5, d: 4 Tak więc daje:
o--------o
/ /|
/ / |
o--------o |
| | o
| | /
| |/
o--------o
Teraz, aby uczynić to nieco trudniejszym, wszystkie twarze mogą być pełne, przezroczyste lub może ich brakować. Zamawiamy twarze w następujący sposób:
o--------o
/ /|
/ 2 / |
o--------o 3|
| | o
| 1 | /
| |/
o--------o
---
|2|
-------
|5|1|3|
-------
|4|
---
|6|
---
I podaj listę tokenów, S, T lub M. Oryginalny przykład to:
w 10
h 5
d 4
S S S S S S
o--------o
/ /|
/ / |
o--------o |
| | o
| | /
| |/
o--------o
Jeśli jedna twarz jest przezroczysta, możemy zobaczyć wszystko, co się za nią kryje:
T S S S S S
o--------o
/ /|
/ / |
o--------o |
| o-----| o
| / | /
|/ |/
o--------o
T T T T T T
o--------o
/| /|
/ | / |
o--------o |
| o-----|--o
| / | /
|/ |/
o--------o
W przypadku par brakujących ścian sąsiednie krawędzie lub narożniki nie są już widoczne:
M M S S S S
o--------o
/| /|
/ | / |
o | o |
| o-----| o
| / | /
|/ |/
o--------o
M M S S M S
o--------o
| /|
| / |
| o |
o-----| o
/ | /
/ |/
o--------o
Code golf, najkrótszy kod wygrywa! Końcowe spacje i znaki nowej linii są w porządku, możesz wybrać metodę wprowadzania i kolejność wprowadzania.
you're free to choose input method and input order
. A ponieważ nic nie mówi inaczej, można zastosować dowolną z domyślnych metod wejścia / wyjścia .Odpowiedzi:
Węgiel drzewny ,
190181 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisałem 9 bajtów, optymalizując moje warunki. Węgiel drzewny nie ma
else
tokena, więcif
polecenia zawsze mają dwie możliwości, chyba że znajdują się na końcu bloku lub programu. Aby tego uniknąć, używamfor (<bool>)
zamiast tego,if (<bool>)
który ma podobny efekt, gdy wyrażenie może mieć tylko wartości 0 lub 1, ale zapisuje bajt. (W celu osiągnięcia tego musiałem zmienić wyrażeń, tak aby były one zawsze prawdziwe, gdy organizm musiał być wykonywany.) Byłem również w stanie zoptymalizowaćif (<bool>) for (<int>)
podfor (And(bool, int))
.źródło
X * Y * Z
kostki ASCII.JavaScript (ES6),
318314308 bajtówPrzyjmuje szerokość, wysokość i głębokość jako liczby całkowite, a twarze jako tablicę znaków.
W jaki sposób?
Funkcja M () przetwarza dane wywołanie zwrotne F w danym zakresie [0 ... n] .
Zmienna a zawiera płaską tablicę reprezentującą siatkę wielkości (w + d) x (h + d-1) . Początkowo jest wypełniony rzędami spacji zakończonych znakami nowej linii.
Funkcja D () służy do „rysowania” powierzchni prostopadłościanu.
Dwa najmniej znaczące bity parametru t zawierają typ twarzy:
Bity od 2 do 4 przechowują indeks twarzy oparty na 0.
Twarze są rysowane w następującej kolejności:
Próbny
Pokaż fragment kodu
źródło
SOGL V0.11 ,
200194193192190 bajtówPobiera dane wejściowe w kolejności
Związany!
Wypróbuj tutaj! (wartość skompresowana zmieniona na kompatybilną z V0.12)
źródło