Das Spiel der chinesischen Kontrolleure wird auf einem Brett mit Feldern in Form eines sechszackigen Sterns gespielt:
Wir können eine ASCII-artige Darstellung dieser Tafel erstellen, indem wir .
für leere Stellen und die Buchstaben GYORPB
für die sechs farbigen Startpositionen verwenden:
G
G G
G G G
G G G G
B B B B . . . . . Y Y Y Y
B B B . . . . . . Y Y Y
B B . . . . . . . Y Y
B . . . . . . . . Y
. . . . . . . . .
P . . . . . . . . O
P P . . . . . . . O O
P P P . . . . . . O O O
P P P P . . . . . O O O O
R R R R
R R R
R R
R
Um es interessanter zu machen, können wir auch die Größe ändern. Wir messen die Größe eines Brettes an der Seitenlänge seiner dreieckigen Startpositionen: Das Brett darüber hat die Größe 4.
Da es wirklich mühsam ist, all das von Hand zu tippen, schreiben wir ein Programm (oder eine Funktion), um es zu tun!
Einzelheiten
Ihr Code sollte über STDIN, ARGV oder ein Funktionsargument eine positive Ganzzahl annehmen, die die Größe der Karte darstellt. Geben Sie das Schachbrettmuster an STDOUT aus (Sie können es alternativ als Zeichenfolge zurückgeben, wenn Ihre Übermittlung eine Funktion ist).
Ausgabe muss entweder
- haben überhaupt keine nachgestellten Leerzeichen, oder
- genau genug nachgestellte Leerzeichen haben, um das Muster zu einem perfekten Rechteck der Breite 6 * N + 1 auszufüllen .
Die Ausgabe kann optional eine nachgestellte Newline enthalten. Es sind keine weiteren zusätzlichen (führenden, nachgestellten) Leerzeichen zulässig.
Beispiele
Größe 1:
G
B . . Y
. . .
P . . O
R
Größe 2:
G
G G
B B . . . Y Y
B . . . . Y
. . . . .
P . . . . O
P P . . . O O
R R
R
Größe 4:
G
G G
G G G
G G G G
B B B B . . . . . Y Y Y Y
B B B . . . . . . Y Y Y
B B . . . . . . . Y Y
B . . . . . . . . Y
. . . . . . . . .
P . . . . . . . . O
P P . . . . . . . O O
P P P . . . . . . O O O
P P P P . . . . . O O O O
R R R R
R R R
R R
R
Wertung
Das ist Code-Golf : Der kürzeste Code in Bytes gewinnt.
Antworten:
Ruby,
141,127Gibt eine rechteckige Zeichenfolge zurück
Ungolfed im Testprogramm
quelle
Python 2, 140 Bytes
Nicht so toll, aber hier ist mein erstes Gebot.
Die Whitespace-Regeln haben viele Bytes hinzugefügt. Zum Vergleich: Hier ist ein 120-Byte-Python-3-Programm, das nur visuell korrekt ist und nicht den Whitespace-Regeln folgt:
Und hier ist mein etwas längerer rekursiver 149-Byte-Python-3-Versuch:
quelle
Python 2, 152
Dies ist im Nachhinein der falsche Ansatz für Python, aber ich poste ihn hier, falls jemand davon Gebrauch machen kann. Anstatt dieses Durcheinander von Code zu erklären, versuche ich, die Idee dahinter zu formulieren.
Die Idee ist, Dreieckskoordinaten zu verwenden , bei denen das Dreiecksgitter ganzzahligen Tripeln
(a,b,c)
mit entsprichta+b+c=0
.(Hier werden die Gitterpunkte als Sechsecke gezeichnet.)
Wir können kartesische Koordinaten in dreieckige umwandeln
Beachten Sie, dass
x
undy
muss die gleiche Parität haben, sonst ist es off-checkerboard und wir sollten ein Leerzeichen drucken.In Dreieckskoordinaten weisen die Begrenzungslinien des sechsseitigen Stern Gleichungen:
a==n, b==n, c==n, a==-n, b==-n, c==-n
.So können wir feststellen, in welcher Region wir uns
[a,b,c,-a,-b,-c]
befinden und welche größer sind alsn
.Das umgebende Rechteck verlangt, dass wir dies
x
im geschlossenen Intervall [-2 * n, 2 * n] undy
im geschlossenen Intervall [-3 * n, 3 * n] tun .quelle
Retina , 234 Bytes
Nimmt unäre Eingaben auf.
Jede Zeile sollte in eine eigene Datei
#
verschoben und in der Datei in eine neue Zeile geändert werden. Dies ist unpraktisch, aber Sie können den Code so wie er ist als eine Datei mit dem-s
Flag#
ausführen , die Markierungen beibehalten und sie möglicherweise in der Ausgabe in Zeilenumbrüche ändern, um die Lesbarkeit zu erhöhen.Der Code hat eine minimale reguläre Komplexität. Die Hauptschritte in der Generation sind die folgenden:
G
und die ersteB.Y
Zeile (begrenzt durch Markierungenijk
und tatsächlich verwendete Buchstaben sindRPO
).G
Zeile mit einem Pluszeichen minus einem G, bis es nur noch ein G gibt.B.Y
Zeile mit einem Pluszeichen und einem Punkt minus einemB
undY
bis es keinB
undY
übrig gibt.q
). Wir halten einen Marker (w
) in der Mitte.RPO
auf,GBY
wenn sie vor dem Marker stehen.Die Ergebnisse nach jedem der obigen Punkte (getrennt durch
=
's) für die Eingabe1111 (unary 4)
:quelle
JavaScript ( ES6 ) 228
Aufbau Zeile für Zeile. Unglaublich lang im Vergleich zu @ Sp3000, das macht das gleiche.
Verwenden der Vorlagenzeichenfolge, um 3 weitere Bytes für Zeilenumbrüche zu speichern. Alle Zeilenumbrüche sind signifikant und werden gezählt.
quelle