Oto dynia ASCII wyrzeźbiona w latarni morskiej. Czy to nie słodkie?
((^v^))
Oto duch ASCII. Zobacz, jakie to straszne!
\{O.O}/
Oczywiście dynie muszą znajdować się na ziemi, z odstępem między nimi, aby się nie gniły.
Duchy jednak lubią stać na dyniach , więc są jeszcze bardziej przerażające . Muszą jednak stać na dwóch dyniach, w przeciwnym razie ich upiorny ciężar zmiażdży dyni pod nimi. Ale ze względu na sposób działania ich widmowej magii wiele duchów może układać dynie i dzielić się nimi, pod warunkiem, że duchy są równo podzielone na niższe dynie lub na niższe duchy. Innymi słowy, tworząc kształt ludzkiej piramidy . Pamiętaj, że duchy nie mogą nakładać się na duchy, chyba że pod spodem znajduje się dynia (tak działa magia).
Biorąc pod uwagę dwie nieujemne liczby całkowite, g
i p
reprezentując liczbę g
hostów i p
umpkinów, wysyłamy najbardziej kompaktową lewą formację, jak to możliwe, zgodnie z powyższymi regułami układania piramidy. Pozostałe dynie i duchy (czyli te, które nie tworzą piramidy) idą na ziemię po prawej stronie.
Dla wyjaśnienia te formacje są OK (oddzielone puste znaki nowej linii) i służą jako przykładowe operacje wejścia / wyjścia:
0p 1g
\{O.O}/
1p 0g
((^v^))
1p 1g
((^v^)) \{O.O}/
2p 1g
\{O.O}/
((^v^)) ((^v^))
2p 2g
\{O.O}/
((^v^)) ((^v^)) \{O.O}/
3p 1g
\{O.O}/
((^v^)) ((^v^)) ((^v^))
3p 2g
\{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^))
3p 3g
\{O.O}/
\{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^))
0p 4g
\{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/
3p 0g
((^v^)) ((^v^)) ((^v^))
7p 6g
\{O.O}/
\{O.O}/ \{O.O}/
\{O.O}/ \{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^))
Te formacje nie są OK
\{O.O}/
((^v^))
\{O.O}/
((^v^))
((^v^)) ((^v^)) \{O.O}/
\{O.O}/
\{O.O}/
((^v^)) ((^v^))
\{O.O}/
\{O.O}/ ((^v^)) ((^v^))
((^v^))
((^v^)) ((^v^))
\{O.O}/
((^v^)) ((^v^))
Wejście
Dwie nieujemne liczby całkowite w dowolnym dogodnym formacie . Co najmniej jedna z liczb będzie niezerowa. Możesz przyjmować dane wejściowe w dowolnej kolejności (tj. W przykładach, w których najpierw miałem dynie) - określ, w jaki sposób przyjmujesz dane wejściowe w swojej odpowiedzi.
Wynik
Reprezentacja duchów i dyń w stylu ASCII, zgodnie z powyższymi zasadami. Wiodące / końcowe znaki nowej linii lub inne białe znaki są opcjonalne, pod warunkiem, że duchy i dynie są odpowiednio ustawione.
Zasady
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
Odpowiedzi:
JavaScript (ES7),
166164159 bajtówZaoszczędź 5 bajtów dzięki Neilowi
Sformatowane i skomentowane
Podstawowa matematyka
Trudną częścią jest znalezienie optymalnej szerokości
G
piramidy duchów.Liczbę duchów
g
w takiej piramidzie podaje:Odwrotnie, szerokość piramidy zawierającej
g
duchy jest prawdziwym pierwiastkiem wynikowego równania kwadratowego:Co prowadzi do następującego prawdziwego korzenia (znanego również jako korzeń trójkątny ):
Jednak szerokość piramidy jest również ograniczona przez liczbę dyń: nie możemy mieć więcej niż
p-1
duchy nadp
dyniami. Stąd ostateczna formuła zastosowana w kodzie:Wersja ES6,
173171166 bajtówPrzypadki testowe (ES6)
Pokaż fragment kodu
źródło
j=(g+g)**.5+.5|0
powinien działać.Perl, 246 bajtów (znaki nowego wiersza nie są częścią kodu i służą wyłącznie do odczytu)
Akceptuje dwie liczby: najpierw dynie, a następnie duchy. Przykładowe dane wejściowe:
Przykładowe dane wyjściowe:
źródło
0p 4g
przypadku testowym wszystkie duchy są umieszczone w jednej linii, a nie w stosie.