Es wurde bewiesen, dass die folgenden 13 quadratischen Wang-Kacheln das Flugzeug immer aperiodisch kacheln . Dies bedeutet, dass, wenn die Quadrate in einem Raster mit allen benachbarten Seiten derselben Farbe angeordnet sind, eine Übersetzung des Musters niemals mit sich selbst übereinstimmt.
Wir werden jede Kachel in Textform durch ein 3 × 3-Raster darstellen, das mit Leerzeichen in der Mitte und in den Ecken und den Zahlen 1 bis 5 anstelle der Farben Rot, Grün, Blau, Gelb, Grau an den Rändern gefüllt ist:
2 2 2 1 1 1 4 3 2 2 4 3 2
1 2 1 3 2 3 2 1 3 1 3 2 4 4 4 4 4 5 4 5 5 5 5 5 5 4
3 2 3 2 3 2 1 2 1 4 1 2 2
Tor
Ihre Aufgabe ist es, ein Programm zu schreiben, das Breite und Höhe berücksichtigt und ein gültiges Wang-Kachelraster mit diesen Abmessungen ausgibt. Eine gültige Kachel ist eine Kachel, bei der alle angrenzenden Kachelkanten dieselbe Farbe (oder Nummer) haben. Das kleinste Programm in Bytes gewinnt.
Ihre Eingabe sollte von stdin oder Befehlszeilenargumenten stammen, und die Ausgabe sollte nach stdout gehen. Das genaue Eingabeformat kann alles einigermaßen Offensichtliche sein, wie z >>> wangtiler 3 2
. Die Breite und Höhe sind immer positive ganze Zahlen.
Beispiel (Breite = 3, Höhe = 2)
Beachten Sie, dass beim Layouten der Textkacheln die benachbarten Kanten die erforderlichen redundanten Ziffernpaare bilden:
1 2 1
2 11 22 1
2 3 2
2 3 2
4 55 55 4
1 2 2
(Dies ist NICHT das richtige Ausgabeformat.)
Wir können diese horizontal und vertikal komprimieren, um Folgendes zu erhalten:
1 2 1
2 1 2 1
2 3 2
4 5 5 4
1 2 2
Dieses komprimierte Format ist das richtige Ausgabeformat, das Sie verwenden müssen. Die ungeradzahligen Zeilen müssen ein Leerzeichen enthalten.
Grafischer Bonus
Anstelle einer Textausgabe gibt Ihr Programm möglicherweise ein Bild des gekachelten Rasters aus. Die grafischen Kacheln müssen aus vier 45-45-90 Dreiecken bestehen, die in einem Quadrat angeordnet sind, und fünf leicht unterscheidbare Farben wie die obigen Kacheln verwenden. Die schwarzen Ränder sind nicht erforderlich. Die Grafikkacheln müssen mindestens 32 × 32 Pixel groß sein. Es wird keine "Komprimierung" auf sie angewendet.
Beispiel Bonusbild: (gleiches Raster wie oben)
Der Bonus ist minus 150 Bytes wert.
Anmerkungen
- Sie müssen diesen Satz von 13 Kacheln verwenden.
- Fliesen dürfen nicht gedreht werden.
- Kacheln können beliebig oft vorkommen (auch keine).
- Sie können davon ausgehen, dass eine gültige Kachelung mit beliebigen Maßen möglich ist.
quelle
Antworten:
GolfScript, 200 Zeichen
ASCII-Version ohne grafische Ausgabe. Geben Sie die Eingabe für STDIN ein - versuchen Sie es hier . Der Code verwendet einen einfachen Backtracking-Ansatz und füllt den Raum zeilenweise aus.
Beispiele:
Grafischer Bonus, Punktzahl 122, 272 Zeichen - 150 Bonus
Gleicher Basiscode mit einem anderen Ausgabeformatierer. Die Ausgabe ist ein Bild im PPM-Format (dh leiten Sie die Ausgabe einfach in eine Datei um
image.ppm
). Die Farben unterscheiden sich geringfügig von den Kacheln in der Frage, sind jedoch deutlich unterscheidbar (1-> Blau, 2-> Grün, 3-> Cyan, 4-> Rot, 5-> Magenta).16x12 Beispiel:
quelle
Python (565 - 150 = 415)
Übrigens ... es sieht so aus, als könnten wir die nächste Kachel nicht einfach naiv anhand der linken und oberen Kachel bestimmen. Es gibt eine Kombination von Fliesen, die zueinander passen.
Diese Lösung füllt links-> rechts-, oben-> unten-Brute-Forces durch alle möglichen Kombinationen und Backtracks aus, wenn eine Kachel nicht hineinpasst.
Weitere Informationen zum 13-Kacheln-Proof: Ein aperiodischer Satz von 13 Wang-Kacheln
Breite und Höhe werden mit
W
und angegebenH
Rot, Grün, Blau, Gelb und Noir spezifiziert durch
R
,G
,B
,Y
undN
Ausgabe. Nicht das eigentliche Farbschema ... weil es zu grell ist. Dies könnte einige interessante Dekorationsmuster ergeben ...:
quelle
Haskell, 208 Bytes
Keine Suche, nur Mathe. Beispiellauf: gegeben
(8,5)
auf stdin, AusgängeLaufen Sie online bei Ideone
quelle