Es gibt ein Denkspiel namens Enumerate (das ich basierend auf Takuzu gemacht habe ). Ihre Herausforderung besteht darin, dieses Spiel zu spielen.
Aufgabe
Löse ein 4x4 Enumerate / Takuzu-Spiel.
- Erhalten Sie ein Startraster über STDIN oder Befehlszeile.
- Das gelöste Raster über STDOUT ausgeben oder in eine Datei schreiben.
Regeln
Ein Spiel zeichnet sich durch ein 4x4-Brett aus roten und violetten Zellen aus.
In jeder Zeile und Spalte muss die gleiche Anzahl roter und violetter Zellen vorhanden sein (jeweils 2 rote und 2 violette).
Es dürfen keine identischen Zeilen oder Spalten vorhanden sein.
Eingang
Die Startaufstellung wird als 16 Zeichen / Byte - Zeichenfolge gegeben werden , die nur aus 0
, 1
, und 2
. Hier ist ein Beispiel:
0001100002001200
1
repräsentiert eine rote Zelle und 2
repräsentiert eine lila Zelle. Alle Eingangskarten sind lösbar.
Hinweis: Wenn Ihre Sprache keine Zeichenfolgenliteraleingabe unterstützt , können Sie die Eingabe als Array von Ganzzahlen verwenden. Bitte geben Sie in Ihrer Antwort an, dass dies der Fall ist. Es gibt also keine Verwirrung, so sollte das Array aussehen:
[0, 0, 0, 1, 1, 0, 0, 0, 0, 2, 0, 0, 1, 2, 0, 0]
Es sind keine verschachtelten Arrays zulässig.
Ausgabe
Die gelöste Karte sollte im gleichen Format wie oben ausgegeben werden. Eine 16-Zeichen- / Byte-Zeichenfolge, die nur aus 1
und besteht 2
. Hier ist die Lösung für die obige Eingabe:
2121112222111212
Wieder 1
stellt eine rote Zelle und 2
eine lila Zelle dar.
Boni
A -25 Byte Bonus wird für jede Antwort angeboten, die gelöst Board als ASCII - Raster ausgibt. Hier ist ein Beispiel für die zuvor erwähnte Karte.
2|1|2|1
-+-+-+-
1|1|2|2
-+-+-+-
2|2|1|1
-+-+-+-
1|2|1|2
A -50 Bytes Bonus wird für jede Antwort angeboten, die gelöst Board in Farbe ausgibt. Dies kann als Bild oder farbiger Text ausgegeben werden.
Wenn farbiger Text ausgewählt ist, sollte die Ausgabe folgendermaßen aussehen:
2121
1122
2211
1212
Wenn jedoch ein Bild die gewählte Ausgabemethode ist, sollte die resultierende Datei 20 x 20 Pixel groß sein, wobei jede Zelle ein farbiger 5 x 5 Pixel-Block ist. Hier ist ein Beispiel:
Hier sind die Farbcodes:
Red - #a73cba OR (167, 60, 186)
Purple - #f94a32 OR (249, 74, 50)
Proben
In: 0020010100000100
Out: 1221212112122112
In: 0010000200121000
Out: 2211112221121221
In: 1000100102000000
Out: 1122122122112112
0
,1
und2
? Was ist mit einem zweidimensionalen Array?Antworten:
CJam (Punktzahl 13)
Mit farbigem Textbonus nur druckbare Zeichen: 64 Zeichen - 50 = 14
Dies kann durch ein Zeichen verbessert werden , um eine nicht-druckbare Zeichen verwendet:
27c'[@
wird ,"^["\
wo^
repräsentiert Charakter 27, eine Punktzahl von 13. xxd Version geben:Gerade Lösung ohne Bonus: 42 Zeichen
Online-Demo
Mit Gitterbonus: 59 Zeichen - 25 = 34
Online-Demo
Bei Bildausgabe 83 Zeichen - 50 = 33. Die Ausgabe erfolgt im Netpbm-Format.
Online-Demo
quelle
CJam, 74-50 = 24 Bytes (Farbausgabe)
Ich denke nicht, dass dies sehr gut Golf ist, aber es funktioniert! Probieren Sie es hier aus. Warnung: langsam .
l:~:L;
liest eine Eingabezeile inL
. Dann5Zb
ist[1 2]
, und wir nehmen die 16 th cartesianischen Leistung (Gm*
) diese Liste, alle möglichen Lösungen zu erhalten[[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2] ...]
. Der Filter{ },
enthält die Takuzu-Logik.Ich habe einen ANSI-Code-Farbausgabebonus hinzugefügt:
Das funktioniert auf der Website natürlich nicht.
ESC
Die Zeichenfolge enthält ein nicht druckbares Byte"["
.quelle
5Zb
Ruby, 196 Bytes
repeated_permutation
, warum muss dein Name so lang sein? -_-Dies geht einfach alle möglichen Lösungen durch, bis eine davon mit dem Eingabemuster übereinstimmt.
quelle
C (Funktion) (mit eingebauten gcc), 283
Dies schien eine interessante Herausforderung für C zu sein. Ich bin mir ziemlich sicher, dass man mehr Golf spielen kann, aber hier ist ein Anfang:
Eingabe als Zeichenfolge an Funktion übergeben
f()
. Ausgabe an STDOUT.Probieren Sie es online aus.
quelle
JavaScript (ES6), 263
300Angesichts der Einschränkungen scheint die Anzahl der möglichen Lösungen überraschend gering zu sein: 72
Die gesamte Karte kann als 16-Bit-Nummer angesehen werden.
Zulässige Werte für Zeilen (Maskierung 1111): 0011, 0101, 0110 und die invertierten Werte 1100, 1010, 1001
Gleiches gilt für Spalten, nur mit unterschiedlichen Maskierungs- und Mischbits (Maskierung 1000100010001): 0 ... 0 ... 1 ... 1, 0 ... 1 ... 0 ... 1, 0 ... 1 ... 1 ... 0 und die invertierten Werte
Beachten Sie, dass die Bitanordnungen für Zeilen und Spalten unterschiedlich sind. Um die Eindeutigkeit zu überprüfen, können Sie einer Menge sowohl Zeilen als auch Spalten hinzufügen und sicherstellen, dass die eingestellte Größe == 8 ist.
Code zum Auflisten aller möglichen Lösungen in einem Raster 4x4
Prüfung
quelle
0x10000
kann durch ersetzt werden65536
.C, Punktzahl
278257(
328307 Bytes - 50 Bytes für farbige Ausgabe oder 291 Bytes ohne Farbbonus)Dies ist eine Brute-Force-Methode, bei der das erste übereinstimmende Raster gedruckt wird. Es funktioniert tatsächlich mit einem um 180 Grad gedrehten Raster, um einige Schleifen zu vereinfachen, und verwendet eine Nachschlagetabelle (59799), um herauszufinden, welche Zeilen gültig sind. Intern sind alle Gitter nur 16-Bit-Zahlen. Es wird eine einzelne Zeichenfolge aus seinen Argumenten eingegeben.
Aufgrund der zum Färben verwendeten Escape-Codes möchten Sie möglicherweise Ihr Terminal-Styling zurücksetzen, nachdem Sie dies ausgeführt haben (ausführen
printf "\x1b[0m"
).Nervenzusammenbruch:
Also, was ist 59799?
Es gibt nur 16 mögliche Zustände für jede Zeile / Spalte (es ist eine 4-Bit-Binärzahl). Von diesen sind die gültigen Optionen:
Wenn wir diese Werte als Bitindizes verwenden, können wir eine Maske erstellen:
Aber hier wollen wir die ungültigen Zeilen wissen :
quelle