W tym wyzwaniu musisz wyświetlić grafikę ASCII balonu z wodą, biorąc pod uwagę ilość wody, którą wypełnia balon:
| __||__ |
| / # #\ |
| |######| |
| |######| |
| |######| |
| |######| |
| |######| |
| \######/ |
| |
| |
+----------+
Jak narysować balon
Aby wyświetlić balon wielkości n
, wykonaj następujące kroki (uwaga: za każdym razem, gdy /
używany jest symbol podziału ( ), reprezentuje on dzielenie liczb całkowitych, zaokrąglając w dół):
Narysuj pojemnik składający się z dziesięciu pionowych pasków (
|
) po lewej i prawej stronie, dziesięciu myślników (-
) na dole i znaku plus (+
) w lewym dolnym i prawym dolnym rogu. To sprawia, że całość ma wymiary 12 x 11, a „wewnątrz” 10 x 10.| | | | | | | | | | | | | | | | | | | | +----------+
Narysuj dwa pionowe słupki (otwór balonu) wyśrodkowane na środku górnego rzędu, z
n/2
podkreślnikami (_
) po obu stronach (w tym przykładzien
będzie to 5):| __||__ | | | | | | | | | | | | | | | | | | | +----------+
Narysuj jeden ukośnik (
/
) i jeden ukośnik odwrotny (\
) otaczający ten górny wiersz, jeden wiersz poniżej:| __||__ | | / \ | | | | | | | | | | | | | | | | | +----------+
Narysuj
n
rzędy identycznie rozmieszczonych pionowych pasków, a następnie jeden rząd pary (wciąż identycznie rozmieszczonych) ukośników i ukośników:| __||__ | | / \ | | | | | | | | | | | | | | | | | | | | | | \ / | | | | | +----------+
„Wypełnij” balon wodą reprezentowaną przez znak krzyżyka (
#
). Zacznij od najniższego rzędu i pracuj w górę. Jeśli wiersz nie jest całkowicie wypełniony, możesz umieścić znaki skrótu w dowolnym miejscu (w poniższym przykładzie są one rozmieszczane losowo, ale możesz je umieścić, powiedzmy, po lewej stronie, jeśli chcesz).| __||__ | | / # #\ | | |######| | | |######| | | |######| | | |######| | | |######| | | \######/ | | | | | +----------+
Maksymalny n
to 7, a minimalny to 0.
Wejście
Dane wejściowe będą liczbami całkowitymi i
, czyli ilością znaków skrótu (wody), które należy narysować.
Nigdy nie będzie mniejsza niż 2 lub większa niż 100.
Wynik
Wyjście powinno być balonem wielkości n
zawierającym i
znaki skrótu (jednostki wody), gdzie n
jest to najniższy możliwy rozmiar, który może pomieścić i
jednostki wody. Ponieważ i
zawsze będzie wynosić 2 lub więcej, n
zawsze będzie wynosić 0 lub więcej.
Maksymalny możliwy rozmiar, na którym można narysować balon, wynosi n
= 7. Jeśli balon o rozmiarze 7 nie zmieści się w określonej ilości wody, balon wyskoczy:
| |
| |
|## # ###|
|##########|
|##########|
|##########|
|##########|
|##########|
|##########|
|##########|
+----------+
(Powyższe powinno być wyjściem dla danych wejściowych i
= 76. Podobnie jak nieopakowany balon, sześć dodatkowych jednostek wody w górnym rzędzie może być ułożonych w dowolny sposób.)
Przypadki testowe
Po co mieć jeden przypadek testowy, skoro można je wszystkie mieć ?
Oto animowany GIF wszystkich danych wejściowych i
od 2 do 100:
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
Odpowiedzi:
Oktawa, 523 bajty
23 z tych bajtów dotyczy tylko przypadku n = 100. Może ktoś może zaproponować bardziej wydajny sposób ...
Test
Wejście: 21
Wynik:
źródło
Python 2, 591 bajtów
Zajęło mi to trochę czasu i prawdopodobnie można by grać w golfa znacznie więcej.
Mam nadzieję, że nie ma żadnych poważniejszych błędów.
Przykładowy przebieg:
daje:
źródło