Musisz zbudować piramidę z kostek. Kostki można oglądać pod 2 kątami:
_____ _____
/\ \ / /\
/ \____\ /____/ \
\ / / \ \ /
\/____/ \____\/
To jest przykład kostek 2-wymiarowych z 2 możliwych kątów. Wysokość kostek to $size
ukośniki (lub odwrotne), a szerokość sześcianu jest 2 * $size
podkreślona. Szerokość najwyższego poziomu powinna zawierać dodatkowy znak podkreślenia.
Dane wejściowe będą dostarczane jako ciąg znaków zawierający liczbę (rozmiar kostki), ukośnik lub ukośnik odwrotny (w celu wskazania kierunku / kąta) oraz inną liczbę (wysokość piramidy).
Przykłady:
Wejście:
1/1
Wynik:
___
/\__\
\/__/
Wejście:
1\1
Wynik:
___
/__/\
\__\/
Wejście:
2/1
Wynik:
_____
/\ \
/ \____\
\ / /
\/____/
Wejście:
1/2
Wynik:
___
___/\__\
/\__\/__/
\/__/\__\
\/__/
Wejście:
2\2
Wynik:
_____
/ /\
/____/ \_____
\ \ / /\
\____\/____/ \
/ /\ \ /
/____/ \____\/
\ \ /
\____\/
Wejście:
1/3
Wynik:
___
___/\__\
___/\__\/__/
/\__\/__/\__\
\/__/\__\/__/
\/__/\__\
\/__/
- Końcowe / wiodące białe znaki są prawidłowe.
- Standardowe luki są niedozwolone.
- Możesz założyć, że dane wejściowe będą zawsze prawidłowe.
- Możesz założyć, że dane wejściowe nie spowodują zbyt dużego wyniku, tj .: brak zawijania linii, gdy dane wyjściowe zostaną wydrukowane na terminalu.
- Rozmiar sześcianu i wysokość piramidy jest dodatnia (tj. ≥ 1)
- To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach.
Aktualny zwycięzca to:
Glen O z 270 bajtami w Julii
wyzwanie pozostaje otwarte. jeśli pobijesz obecny najlepszy, zaktualizuję zaakceptowaną odpowiedź.
Odpowiedzi:
Julia -
503455369346313270 bajtówNie golfowany:
Stosowanie:
lub
źródło
Perl, 343 bajtów
Multiline z komentarzami:
Przykładowe dane wyjściowe:
Próbowałem również zaimplementować go jako funkcję C przy użyciu tego samego algorytmu, mając nadzieję na zaoszczędzenie bajtów z luksusu jednoznakowych nazw zmiennych, ale skończyło się to 15 bajtami większymi, przy 358 bajtach (aby go
-std=c89
przerwać, należy go skompilować pod gccvoid
w nagłówku funkcji):źródło
printf("%c" --> putchar(
,printf("\n") --> puts("")
, przenieść wszystkie deklaracje int poza funkcją, można wyeliminowaćint
(patrz meta.codegolf.stackexchange.com/q/5532/15599 ), zmień wszystkie literały znaków dla ich kodów ascii, np' ' --> 32
. Refaktoryzacja pętli np.for(k+1;z--;)
Może również pomóc, ale jest trudniejsza.e
może być int pod warunkiem, że zainicjujesz go do zera.sscanf
nadpisze tylko najmniej znaczący bajt i może pozostawić wszelkie śmieci w pozostałych trzech bajtach.main
Zamiast tegoj
zyskujesz trzy dodatkowe znaki, ale nie musisz przekazywać parametróws
i możesz skorzystać z automatycznej inicjalizacji zmiennych globalnych.Ruby, 332
Jedynym golfem wykonanym do tej pory jest wyeliminowanie komentarzy i wcięć. Później zagram w golfa.
Ustawiam tablicę spacji i wsuwam w nią poszczególne postacie. Przeciąganie zarówno jednej kostki na drugą (praca od dołu do góry), jak i samej kostki jest dość duże, aby uniknąć dodatkowego kodu. Tworzę piramidę, rysując romb (podobny do /codegolf//a/54297/15599 ) i tłumiąc górną połowę.
Najtrudniejszą częścią było narysowanie skalowalnej kostki. Zacząłem od sześciokąta obwodowego z 2n + 1
_
znakami po poziomych bokach. Ja też miałem 2n + 1/
i\
tak miałem jeden zbyt wiele, ale przez wykreślenie_
ostatni raz zastępowania nimi.Jedynie linie wewnętrzne zmieniane są w zależności od kierunku, w którym zwrócona jest kostka. Spisuję wszystko
/
i\
za pomocą jednego zadania.abs
pomaga odwrócić kierunek ii>>9&1
dodaje dodatkowe 1 do ujemnych wartości i, co obniża górną część w dół. dlai
= 0 jeden z wymaganych_
jest wykreślany, więc łańcuch selektora'\_/'
zawiera wszystkie trzy symbole, wybrane zgodnie ze znakiemi
.Biała spacja wokół wyjścia jest duża, ale nie nadmierna: 4 * p * n wysoka i 8 * p * n szeroka (ta ostatnia ma umożliwić, aby wierzchołek kostki zawsze znajdował się w środku wyjścia). Rozumiem „końcowe / wiodące białe znaki ”, aby uwzględnić całe linie, ale w razie potrzeby można je zmienić.
Nieskluczony kod
źródło