In meiner vorherigen Herausforderung habe ich das erste Diagramm größtenteils von Hand gezeichnet (mithilfe des visuellen Blockmodus von vim). Aber es muss doch einen besseren Weg geben ...
Bei einer Eingabe von zwei Dimensionen, einer Breite und einer Höhe, wird in ASCII-Grafik ein hexagonales Raster mit diesen Dimensionen ausgegeben.
Hier ist das Diagramm, auf das im Intro verwiesen wird (mit geringfügigen Änderungen), das Ihre Ausgabe für die Eingabe sein sollte 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 \
\ / \ / \ / \ /
\_____/ \_____/ \_____/ \_____/
Beachten Sie einige Dinge:
Die Breite und Höhe entsprechen im Wesentlichen der Anzahl der Sechsecke für eine gegebene y- bzw. x-Koordinate. Dies sind immer ungerade Zahlen.
Jedes Sechseck wird durch die ASCII-Kunst dargestellt
_____ / \ / \ \ / \_____/
aber Grenzen werden zwischen benachbarten Sechsecken "geteilt".
Das Komma in den Koordinaten ist immer genau zwei Zeichen unterhalb der Mitte der Oberkante. Die x-Koordinate wird dann direkt vor dem Komma und die y-Koordinate direkt danach positioniert.
Sie können davon ausgehen, dass die Koordinaten niemals so groß werden, dass sie die Sechskantgrenzen überlappen.
Die Eingabe kann als durch Leerzeichen / Komma getrennte Zeichenfolge, als Array von Ganzzahlen oder als Argument für zwei Funktionen / Befehlszeilen erfolgen. Die Ausgabe muss eine einzelne Zeichenfolge sein (an STDOUT als Rückgabewert usw.).
Da es sich um Code-Golf , wird der kürzeste Code in Bytes gewinnen.
Das obige Raster kann als Testfall verwendet werden. Es width=199, height=199
ist offensichtlich unpraktisch, das Raster mit der maximalen Größe
hier einzuschließen, aber die ersten paar Zeilen und Spalten sollten wie folgt aussehen:
_____ ___
/ \ /
_____/-98,-99\_____/-96,
/ \ / \
/-99,-99\_____/-97,-99\___
\ / \ /
\_____/-98,-98\_____/-96,
/ \ / \
/-99,-98\_____/-97,-98\___
\ / \ /
\_____/-98,-97\_____/-96,
/ \ / \
/-99,-97\_____/-97,-97\___
\ / \ /
quelle
Antworten:
Ruby, 221 Bytes
Ungolfed im Testprogramm
Ausgabe
Als ich mit dem Debuggen fertig war, bemerkte ich eine Mehrdeutigkeit in der Spezifikation. Wo
w+1
durch 4 teilbar ist, sind die ersten und letzten x-Koordinaten ungerade und es gibt keine Mehrdeutigkeit. Wow-1
aber durch 4 teilbar ist, sind die ersten und letzten x Koordinaten gerade. Ich ging davon aus, dass die erste und die letzte Spalte unter den nächsten versetzt sein sollten. Aber dann habe ich die vorherige Frage gelesen und festgestellt, dass in diesem Fall die ungeraden Spalten unter den geraden versetzt werden sollten (Anmerkung fürw-1
durch 4 teilbar, es ist nicht möglich, beide zu tun.)Diese Unterscheidung wurde in dieser Frage jedoch nicht getroffen. Ich überlasse dies dem Urteil von OP und überarbeite es gegebenenfalls, obwohl ich es vorziehen würde, es nicht zu müssen.
quelle