Aufgabe:
Betrachten Sie das Problem: "Wenn ein Schachbrett mit einem fehlenden Quadrat vorhanden ist, schneiden Sie es in 21 L-Triominoes". Es gibt einen bekannten konstruktiven Beweis dafür, dass dies für jede quadratische Schachbrettgröße mit einer Zweierpotenz möglich ist. Es funktioniert, indem das Schachbrett in ein kleineres Schachbrett mit dem Loch darin und einem großen Triomino aufgeteilt wird und dann beobachtet wird, dass dieses Triomino rekursiv in vier Triominos geschnitten werden kann.
In dieser Aufgabe müssen Sie ein 8x8-Schachbrett in L-förmige Triominoes schneiden und diese dann mit vier Farben färben, sodass keine zwei benachbarten Triominoes dieselbe Farbe haben.
Spezifikation:
Ihre Eingabe ist die Position des Lochs, angegeben als Paar von ganzen Zahlen. Sie können wählen, welcher der Spaltenindex und welcher der Zeilenindex ist. Sie können wählen, ob jede bei 0 oder bei 1 beginnt und von welcher Ecke sie zunimmt. Möglicherweise benötigen Sie A..H als erste Koordinate anstelle von 0..7 oder 1..8. Sie können auch beide Koordinaten akzeptieren, die in einer einzigen Ganzzahl 0..63 oder 1..64 in lexikografischer Reihenfolge gepackt sind (Zeilen- oder Spaltenmajor, von links nach rechts oder von rechts nach links, von oben nach unten oder von unten nach oben). Sie können ein vollständiges Programm oder eine Funktion schreiben.
Sie können die Kacheln als ASCII, als farbiges ASCII oder als grafische Grundelemente ausgeben. Wenn Sie die ASCII-Ausgabe auswählen, können Sie vier beliebige druckbare ASCII-Zeichen auswählen, um die vier Farben darzustellen. Wenn Sie farbiges ASCII auswählen, können Sie vier beliebige druckbare ASCII-Zeichen oder nur ein anderes Zeichen als Leerzeichen auswählen. Das Loch muss durch das Leerzeichen dargestellt werden. Wenn einer Ihrer Charaktere der Leerzeichencharakter ist, darf kein Triomino neben dem Loch oder am Schachbrettrand diese Farbe haben.
Wenn Sie eine farbige ASCII- oder grafische Ausgabe auswählen, können Sie vier beliebige Farben aus # 000, # 00F, # 0F0, # 0FF, # F00, # F0F, # FF0, #FFF oder deren nächstgelegenen Entsprechungen auswählen, die in Ihrer Umgebung verfügbar sind. Wenn Sie sich für eine grafische Ausgabe entscheiden, müssen Ihre grafischen Grundelemente mit mindestens 32 x 32 Pixel großen Quadraten gefüllt und durch nicht mehr als zwei Pixel einer anderen Farbe getrennt sein. Wenn das oben Gesagte die Bildschirmauflösung Ihrer Umgebung überschreitet, wird die Mindestgröße auf die größte quadratische Größe reduziert, die noch auf den Bildschirm passt.
Sie können eine beliebige gültige Kachelung des angegebenen Schachbretts auswählen. Sie können eine beliebige vierfarbige Kachel wählen. Die Auswahl von vier Farben muss für alle Ausgaben gleich sein, Sie müssen jedoch nicht jede Farbe in jeder Ausgabe verwenden.
Beispiele:
Mögliche Ausgabe für Eingabe = [0, 0] (obere linke Ecke)
#??##??
##.?#..?
?..#??.#
??##.?##
##?..#??
#.??##.?
?..#?..#
??##??##
Eine weitere mögliche Ausgabe desselben Programms (Eingabe = [0, 7]):
??#??#?
?##?##??
..xx..xx
.?x#.?x#
??##??##
..xx..xx
.?x#.?x#
??##??##
Ein anderes Programm kann auch für die Eingabe von "D1" (beachten Sie die nicht standardmäßige, aber erlaubte Schachbrettausrichtung) Folgendes erzeugen:
AABBCCAA
ACBACBAC
CCAABBCC
ABBAADD
AABDABDC
BBDDBBCC
BABBACAA
AABAACCA
quelle
Antworten:
JavaScript (ES6),
184 ... 171163 ByteNimmt die Eingabe0 ≤ x ≤ 7 0 ≤ y≤ 7 0 1 2
(x)(y)
mit und . Gibt als Zeichenfolge mit 3 Farben aus (markiert als , und ).Probieren Sie es online aus!
Methode
Wir arbeiten an einer Matrix von Triominoes:4 × 4
Jeder Triomino ist einer von:
Die anfängliche Konfiguration der Matrix ist wie folgt:
Wir wechseln die ersten beiden Farben wie auf jedem Schachbrett, was Folgendes ergibt:
Die nächsten Schritte sind:
In diesem Fall lautet die endgültige Matrix:
Kommentiert
Grafische Ausgabe
Klicken Sie auf das Bild, um die Position des Lochs festzulegen.
Code-Snippet anzeigen
quelle
Holzkohle , 78 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Ausgaben mit
#$%
Zeichen. Erläuterung:Geben Sie die Koordinaten des leeren Quadrats ein.
Geben Sie eine komprimierte Zeichenfolge aus. Es enthält Zeilenumbrüche, damit der Ablauf dieser Erklärung nicht unterbrochen wird. Die Zeichenfolge befindet sich am Ende der Antwort.
Wenn eine der Koordinaten größer ist als diese,
3
merken Sie sich diese Tatsache und subtrahieren Sie die Koordinate von 7.Springe zum nächsten
%
des oberen linken Quadrats von%
s und überschreibe es mit einem#
oder$
entsprechend. (Dies wird jedoch durch das Leerzeichen überschrieben, wenn es sich bereits auf diesem Feld befand.)Blenden Sie das Quadrat an den reduzierten Koordinaten aus und reflektieren Sie dann die Ausgabe nach Bedarf, um den Rohling an die ursprüngliche Position zu bringen.
Ich habe versucht, mit dem Quadrat von
%
s in der Mitte zu beginnen und mich zu den gewünschten Koordinaten herauszuarbeiten, aber das dauerte 90 Bytes.quelle