Wprowadzenie
Kaktusy występują w różnych rozmiarach, kształtach i kolorach. Jednak najbardziej charakterystycznym kaktusem i must-have w każdym westernu musi być saguaro . Ważnymi cechami są jego rozmiar i ramiona, które określają stereotypowy wygląd kaktusa.
Twoim zadaniem jest sprowadzenie saguaro do świata ASCII. Jednak - podobnie jak w prawdziwym świecie - żadne saguaro nie jest takie jak inne, więc twój program musi być w stanie generować saguaros z różnymi konfiguracjami ramion.
Przykład saguaro
- Dane wejściowe:
[0b10, 0b11]
([2, 3]
dziesiętnie, długość wejściowa2
)
_
/ \
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
Dane techniczne
Saguaro ma zawsze podstawę i górę, a pomiędzy nimi są zmienne ilości łodygi. Części trzonu nie mogą mieć ramion, ramienia po prawej stronie, ramienia po lewej ani dwóch ramion.
Wzorce wzrostu Saguaro podano jako listę wejściową zawierającą wartości dwubitowe. 00
oznacza brak ramion, 01
ramię po prawej, 10
ramię po lewej i 11
dwa ramiona (wszystkie w układzie dwójkowym). Długość listy wejściowej określa wysokość saguaro.
Sekcje Saguaro wyglądają następująco. Części kaktusa są otoczone oktorą #
, dla jasności, która nie będzie drukowana.
Wysokość saguaro jest zawsze równa 4+6*k
znakom dla liczb całkowitych nieujemnych k
.
#############
# _ # Saguaro top
# / \ #
#############
# _ | | _ # Stem, both arms
#/ \ | | / \# Stem id: 11
#| | | | | |#
#\ \_| |_/ /#
# \__ __/ #
# \ / #
#############
# _ | | # Stem, left arm
#/ \ | | # Stem id: 10
#| | | | #
#\ \_| | #
# \__ | #
# \ | #
#############
# | | _ # Stem, right arm
# | | / \# Stem id: 01
# | | | |#
# | |_/ /#
# | __/ #
# | / #
#############
# | | # Stem, no arms
# | | # Stem id: 00
# | | #
# | | #
# | | #
# | | #
#############
# | | # Saguaro base
# | | #
#############
Wkład
Jak wspomniano wcześniej, dane wejściowe składają się z listy wartości dwubitowych ( 0, 1, 2, 3
dziesiętnie). Można go podać w dowolnym rozsądnym formacie. Pierwszy element listy odpowiada najwyższej części pnia saguaro, drugi element do drugiej najwyższej części pnia itp.
Jeśli chcesz, możesz wymagać długości listy danych wejściowych jako dodatkowego wejścia. Jeśli tak, proszę podać to w odpowiedzi.
Wydajność
Twój wyjściowy saguaro ASCII powinien być zbudowany przy użyciu dokładnych części trzpienia, jak opisano powyżej. Końcowe spacje na linii i końcowe nowe linie są ignorowane; możesz wydrukować więcej, mniej lub tyle, ile określono powyżej.
Zasady
- Standardowe luki zastosowanie
- Ponieważ jest to golf kod , liczba bajtów programu powinna być minimalna
Przypadki testowe
- Wartość odstająca. Wkład:
[0b01, 0b00, 0b01, 0b11]
_
/ \
| | _
| | / \
| | | |
| |_/ /
| __/
| /
| |
| |
| |
| |
| |
| |
| | _
| | / \
| | | |
| |_/ /
| __/
| /
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
- Ramiona naprzemienne. Wkład:
[0b10, 0b01, 0b10]
_
/ \
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
| | _
| | / \
| | | |
| |_/ /
| __/
| /
_ | |
/ \ | |
| | | |
\ \_| |
\__ |
\ |
| |
| |
- Obfitość broni. Wkład:
[0b11, 0b11]
_
/ \
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
_ | | _
/ \ | | / \
| | | | | |
\ \_| |_/ /
\__ __/
\ /
| |
| |
- Żadnych ramion, zwanych także włócznią. Wkład:
[0b00]
_
/ \
| |
| |
| |
| |
| |
| |
| |
| |
- Żadnego ciała, niektórzy nazywają to młodym kaktusem. Wkład:
[]
_
/ \
| |
| |
źródło
4 1 0 1 3
)Odpowiedzi:
Węgiel ,
5049 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Narysuj górę.
Pętla po każdej stronie.
Skocz na prawą stronę góry.
Zapętlić każdą część łodygi.
Sprawdź, czy jest ramię.
Jeśli tak, wydrukuj ramię.
W przeciwnym razie po prostu wydrukuj linię pionową.
Po wydrukowaniu łodygi wydrukuj podstawę.
Odbicie gotowe do narysowania drugiej strony. Po narysowaniu obu stron, boki są następnie odbijane z powrotem do ich ostatecznej pozycji.
źródło
JavaScript (ES6), 210 bajtów
Spędziłem zdecydowanie za dużo czasu na innym rozwiązaniu, zanim zdałem sobie sprawę, że istnieje lepszy sposób, który nie dał mi tyle czasu, ile chciałbym nad tym popracować.
Spróbuj
źródło
00,01,10,11
jako danych wejściowych zamiast danych binarnych lub0,1,2,3
. użycie przypadków testowych OP nie powiedzie się.Python 2 , 189 bajtów
Wypróbuj online!
źródło
Python 2 ,
256253 ... 205203199 bajtówWypróbuj online!
źródło
for ...:\n r...\n r...
->for ...:r...;r...
zapisuje trzy bajty.PowerShell , 235 bajtów
Wypróbuj online!
PowerShell nie ma
map
anizip
łatwego sposobu na odwrócenie ciągów, więc pozostaje nam coś innego - proste zastąpienie powtarzających się sekcji.Pierwsze dwa wiersze pobierają dane wejściowe jako tablicę liczb całkowitych i wyprowadzają górę kaktusa. Następnie zapętlamy
$a
i wybieramy tablicę czterech ciągów w oparciu o bieżącą wartość. Te ciągi są pozostawione na rurociągu, a następnie używamy naszego-replace
do wypełnienia odpowiednich miejsc. Następnie umieszczamy również dno kaktusa na rurociągu.Wszystko jest gromadzone z potoku i niejawne
Write-Output
dzieje się po zakończeniu programu, wstawiając nowy wiersz między każdym elementem.źródło
05AB1E ,
7675 bajtówWypróbuj online!
źródło
Java (OpenJDK 8) ,
626566499466398312310308 bajtówMożna grać w golfa za tonę
Wypróbuj online!
źródło
{j=e>1;k=e%2>0;n+=(k?" _ |":g)+(j?" | _,":r)+
sięn+=((k=e%2>0)?" _ |":g)+((j=e>1)?" | _,":r)+
i usunięciu zamknięcia}
z pętli for również.1
i2
.SOGL V0.12 ,
565453 bajtówWypróbuj tutaj!
Wyjaśnienie:
źródło