Wyzwanie
Napisz program, który pobiera tablicę liczb całkowitych 11 x 11 i konstruuje budowę bloku 3D ASCII, gdzie każda wartość w tablicy reprezentuje wysokość kolumny bloków o współrzędnych pasujących do pozycji tablicy. Wysokość ujemna to kolumna „pływająca” - widoczny jest tylko górny blok.
Przykład
__________________
___ /\__\__\__\__\__\__\
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /\__\ /\/\__\__\__\__\__\__\
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /\/__/ /\/\/__/__/__/__/__/__/
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /\/\__\ /\/\/\__\ /\/\/__/
1, 0, 0, 7,-7,-7,-7,-7, 7, 0, 0, \/\/\__\ /\/\/\/__/ /\/\/__/
0, 0, 0, 7,-7,-7,-7,-7, 7, 0, 0, \/\/__/ /\/\/\/\__\ /\/\/__/
0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, \/\__\ /\/\/\/\/__/ /\/\/__/
0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, \/__/ \/\/\/\/\__\_ \/\/__/
1, 0, 0, 4, 3, 2, 1, 0, 0, 0, 1, \/\/\/\/__/_\_ \/__/
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, ___ \/\/\/__/__/_\_ ___
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /\__\ \/\/__/__/__/_\ /\__\
1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, \/\__\ \/__/__/__/__/ \/\__\
\/\__\_________ ______\/\__\
\/\__\__\__\__\ /\__\__\__\__\
\/__/__/__/__/ \/__/__/__/__/
Wejście
Wejście będzie listą 121 liczb całkowitych, odczytanych ze standardowego wejścia (wybór separatora zależy od Ciebie) lub przekazanych jako tablica (może być 1D lub 2D).
Wysokość będzie w zakresie od -11 do 11.
Wynik
Wygenerowany budynek można zapisać na standardowym ekranie, wyświetlić bezpośrednio na ekranie lub zwrócić jako ciąg oddzielony znakiem nowej linii.
Wiodące i końcowe białe znaki są dozwolone.
Zasady budowania
Kształt pojedynczego bloku 3D wygląda następująco:
___
/\__\
\/__/
A sześcian bloków 2x2x2 wygląda następująco:
______
/\__\__\
/\/\__\__\
\/\/__/__/
\/__/__/
Kiedy bloki zachodzą na siebie, wyższy blok ma pierwszeństwo przed dolnym, bloki z przodu mają pierwszeństwo przed tymi z tyłu, a bloki po lewej mają pierwszeństwo przed blokami po prawej. Jedynym szczególnym przypadkiem jest to, że górna linia bloku nigdy nie powinna zastępować znaków spacji za nim.
Interpretację wysokości kolumn można najlepiej wyjaśnić, patrząc z boku na dwuwymiarową reprezentację.
HEIGHT: 1 2 3 -3 -2 -1
__ __
__ |__| |__| __
__ |__| |__| |__| __
|__| |__| |__| |__|
Przypadki testowe
Jeśli chcesz wypróbować swoje rozwiązanie na kilku większej liczby wejść, ja już ułożyła kilka przypadków testowych tutaj .
Zwycięski
To jest golf golfowy , więc wygrywa najkrótsze przesłanie (w bajtach).
Odpowiedzi:
Węgiel drzewny ,
706968 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Przeczytaj tablicę, podziel każdą linię przecinkami i rzutuj na liczbę całkowitą, ale także odwróć każdą linię, ponieważ chcemy rysować od prawej do lewej, aby lewe kolumny nadpisały prawe kolumny. (Inne wymiary mają już pożądane zachowanie zastępowania).
Zapętlić i) górne linie i bryły k) wysokość l) rzędy m) kolumny. (Pętla przechodząca przez pierwsze górne linie, a następnie treści, pozwala uniknąć nadpisywania obiektów górnymi liniami.)
Skocz do pozycji sześcianu.
Pobierz wysokość w bieżącym wierszu i kolumnie.
Sprawdź, czy należy narysować sześcian na tej wysokości dla tego wiersza i kolumny.
Narysuj korpus lub górę sześcianu.
źródło
3
na a33
, dostaję tylko 11 bloków w wieży. Ogólnie wieże wydają się być ograniczone do 11. Jak to się dzieje?F¹¹F¹¹F¹¹
to nie był trop ...C,
376350313309285 bajtówDzięki @Jonathan Frech za uratowanie czterech bajtów!
Wypróbuj online!
Rozwinięty:
źródło
26*66
nie być1716
?*s==32
->*s<33
.for(e=k=1;e;++k)for(e=
->for(k=1;e;++k)for(e=
.#define B b(...)&++e
->#define B++e&b(...)
(zakładając,b
że nie zależye
, co moim zdaniem nie zależy ).JavaScript (ES6),
277251 bajtówPokaż fragment kodu
Zapisano 26 bajtów z sugestii @ Neila .
Nie golfił
źródło
,$(w=>$(z=>$(y=>$(x=>(Z=a[y][x=10-x,X=x*3+y+z,Y=y-z+n,x])<=z&&Z+z+1?0:w?['/\\__\\','\\/__/'].map(s=>S[++Y].splice(X,5,...s)):S[Y].splice(X+1,3,...'___'))))),
wydaje się oszczędzać 26 bajtów.Python 2 , 243 bajty
Wypróbuj online!
Tłumaczenie Pythona podejścia Neila do Węgla drzewnego.
źródło
+1+k
->-~k
.APL (Dyalog Unicode) ,
117116112 bajtów SBCSWypróbuj online!
źródło
Tcl, 380
409bajtówUżytkownik sergiol był bardzo zajęty rozwiązywaniem tego problemu :
Wypróbuj online!
Oryginalna treść
Wypróbuj online!
Niestety, tak jest. To jest tylko odrobinę łatwiejsze dla oczu, gdy „nie golfia”
Buduje ciąg, zgodnie z wymaganiami. Pobiera tablicę ze standardowego wejścia. Przechodzi od dołu do góry, od przodu do tyłu, od prawej do lewej nad danymi ciągu. Robi to w dwóch przejściach, raz dla górnej krawędzi i ponownie dla reszty korpusu każdej kostki.
Próbowałem go zmniejszyć za pomocą jakiegoś słodkiego funkcjonalnego lambda mojo, ale, niestety, to go powiększyło.
źródło