Das ist Code Golf. Der Gewinner ist der gültige Code mit der geringsten Anzahl von Bytes.
Herausforderung
Bei den Eingaben M und N , der Breite und Höhe eines rechteckigen Quadratrasters, wird ein Polygon ausgegeben, das die folgenden Anforderungen erfüllt:
- Die Polygonkanten bestehen nur aus quadratischen Kanten: Es gibt keine diagonalen Kanten - alle sind vertikal oder horizontal.
- Das Polygon hat keine Löcher: Jedes Quadrat außerhalb des Polygons kann durch orthogonale Schritte auf Quadraten außerhalb des Polygons erreicht werden, beginnend mit einem Quadrat außerhalb des Polygons an der äußeren Begrenzung des Rechtecks.
- Das Polygon hat keine Selbstüberschneidung: Von den quadratischen Kanten, die sich an einem Scheitelpunkt treffen, dürfen nicht mehr als 2 Teile des Polygonumfangs sein.
- Das Polygon ist verbunden: Jedes Quadrat im Polygon muss über orthogonale Schritte, die innerhalb des Polygons bleiben, von jedem anderen Quadrat im Polygon aus erreichbar sein.
- Das Polygon hat den maximal möglichen Umfang: gemäß der unten gezeigten Formel.
Ihr Code muss für M und N von 1 bis 255 funktionieren .
Formel für maximalen Umfang
Die Herausforderung besteht darin, das am besten geeignete Polygon mit dem maximalen Umfang zu finden. Der maximale Umfang selbst wird immer durch die Formel definiert:
Dies ist richtig, da für einen maximalen Umfang jeder quadratische Eckpunkt auf dem Umfang liegen muss. Für eine ungerade Anzahl von Scheitelpunkten ist dies nicht möglich und das Beste, was erreicht werden kann, ist ein Scheitelpunkt weniger (da der Umfang immer gerade ist).
Ausgabe
Geben Sie die Form als Zeichenfolge mit Zeilenumbrüchen aus ( N Zeilen mit genau M Zeichen). Hier verwende ich Platz für Quadrate außerhalb des Polygons und '#' für Quadrate innerhalb des Polygons. Sie können jedoch zwei beliebige visuell unterschiedliche Zeichen verwenden, sofern deren Bedeutung für alle Eingaben konsistent ist.
Sie können bis zu eine führende und bis zu eine nachfolgende Zeile einfügen.
Wenn Sie möchten, können Sie stattdessen Ausgang M Reihen von genau N Zeichen, und Sie können wählen M von N für einige Ein- und Ausgang N von M für die anderen Ausgang.
Beispiele
Ungültig wegen einer Lücke:
###
# #
###
Ungültig wegen Schnittpunkt (diagonal berühren - ein Scheitelpunkt mit 4 quadratischen Kanten am Umfang) und im Übrigen ein Loch:
##
# #
###
Ungültig , da die Verbindung getrennt wurde:
#
# #
#
Gültiges Polygon mit maximalem Umfang:
# #
# #
###
Credits
Ich habe anfangs unterschätzt, wie schnell der Wert des maximalen Umfangs berechnet werden kann, und wollte nur diesen Wert als Ausgabe anfordern. Vielen Dank an die wunderbar hilfreichen Personen im Chat, die erklärt haben, wie man den maximalen Umfang für beliebiges N und M errechnet und dabei hilft, dies zu einer Herausforderung zu machen, die für mehr als eine Antwort Bestand hat ...
Speziell danke an:
Sparr , Zgarb , Feersum , Jimmy23013 .