W poprzednim wyzwaniu pierwszy schemat narysowałem głównie ręcznie (za pomocą trybu wizualnego blokowania vima). Ale na pewno musi być lepszy sposób ...
Biorąc pod uwagę dane wejściowe dwóch wymiarów, szerokości i wysokości, wygeneruj sześciokątną siatkę o tych wymiarach w sztuce ASCII.
Oto diagram, do którego odwołuje się wprowadzenie (z niewielkimi zmianami), który powinien być twoim wyjściem dla danych wejściowych width=7, height=3
:
_____ _____ _____
/ \ / \ / \
_____/ -2,-1 \_____/ 0,-1 \_____/ 2,-1 \_____
/ \ / \ / \ / \
/ -3,-1 \_____/ -1,-1 \_____/ 1,-1 \_____/ 3,-1 \
\ / \ / \ / \ /
\_____/ -2,0 \_____/ 0,0 \_____/ 2,0 \_____/
/ \ / \ / \ / \
/ -3,0 \_____/ -1,0 \_____/ 1,0 \_____/ 3,0 \
\ / \ / \ / \ /
\_____/ -2,1 \_____/ 0,1 \_____/ 2,1 \_____/
/ \ / \ / \ / \
/ -3,1 \_____/ -1,1 \_____/ 1,1 \_____/ 3,1 \
\ / \ / \ / \ /
\_____/ \_____/ \_____/ \_____/
Zwróć uwagę na kilka rzeczy:
Szerokość i wysokość są zasadniczo równoważne liczbie sześciokątów odpowiednio dla danej współrzędnej y i x. Zawsze będą to liczby nieparzyste.
Każdy sześciokąt jest reprezentowany przez sztukę ASCII
_____ / \ / \ \ / \_____/
ale granice są „dzielone” między sąsiadującymi sześciokątami.
Przecinek we współrzędnych jest zawsze dokładnie dwa znaki poniżej środka górnej krawędzi. Współrzędna x jest następnie umieszczana bezpośrednio przed przecinkiem, a współrzędna y bezpośrednio po.
Możesz założyć, że współrzędne nigdy nie będą zbyt duże, aby zachodziły na granice sześciokąta.
Dane wejściowe mogą być traktowane jako ciąg oddzielony spacjami / przecinkami, tablica liczb całkowitych lub dwa argumenty funkcji / wiersza poleceń. Dane wyjściowe muszą być pojedynczymi łańcuchami (do STDOUT, jako wartość zwracana itp.).
Ponieważ jest to code-golf , wygra najkrótszy kod w bajtach.
Powyższą siatkę można wykorzystać jako przypadek testowy. width=199, height=199
Siatka o maksymalnych rozmiarach
jest oczywiście niepraktyczna, ale kilka pierwszych wierszy i kolumn powinno wyglądać następująco:
_____ ___
/ \ /
_____/-98,-99\_____/-96,
/ \ / \
/-99,-99\_____/-97,-99\___
\ / \ /
\_____/-98,-98\_____/-96,
/ \ / \
/-99,-98\_____/-97,-98\___
\ / \ /
\_____/-98,-97\_____/-96,
/ \ / \
/-99,-97\_____/-97,-97\___
\ / \ /
źródło
Odpowiedzi:
Rubinowy, 221 bajtów
Niegolfowany w programie testowym
Wynik
Gdy kończyłem debugowanie, zauważyłem dwuznaczność w specyfikacji. Gdzie
w+1
dzieli się przez 4, pierwsza i ostatnia współrzędna x są nieparzyste i nie ma dwuznaczności. Ale gdziew-1
dzieli się przez 4, pierwsza i ostatnia współrzędna x są parzyste. Zakładałem, że pierwsza i ostatnia kolumna powinny być przesunięte poniżej następnych. Ale potem przeczytałem poprzednie pytanie i zauważyłem, że w tym przypadku to nieparzyste kolumny powinny być przesunięte poniżej parzystych (uwaga dlaw-1
podzielności przez 4 nie można zrobić obu).Jednak w tym pytaniu nie wprowadzono takiego rozróżnienia. Zostawię to osądowi OP i przeróbię, jeśli to konieczne, choć wolałbym tego nie robić.
źródło