Einführung
Regeln des Puzzles:
Das Puzzle Binary (auch bekannt als Takuzu oder Subiku) ist sehr einfach zu verstehen und hat nur wenige Regeln:
Da der Name des Spiels binär ist, ist es ziemlich offensichtlich, aber Sie können nur Nullen und Einsen eingeben.
- Es dürfen nicht mehr als zwei gleiche Ziffern vertikal oder horizontal nebeneinander liegen
- Jede Zeile und jede Spalte muss gleich viele Nullen und Einsen enthalten (dies bedeutet implizit, dass jedes Binärspiel immer gerade Dimensionen hat).
- Es dürfen keine doppelten Zeilen und keine doppelten Spalten vorhanden sein (mit genau der gleichen Reihenfolge von Nullen und Einsen).
Sie können das Spiel auf www.binarypuzzle.com spielen, wenn Sie möchten.
Taktik:
Aufgrund von Regel 1 können wir immer eine Ziffer eingeben, wenn:
- bereits zwei gleiche Ziffern vertikal oder horizontal nebeneinander liegen. In diesem Fall können wir die gegenüberliegende Ziffer auf beiden Seiten eingeben. Dh .11...
→ 0110..
.
- Es gibt zwei gleiche Ziffern vertikal oder horizontal mit nur einer Lücke dazwischen. Dh .1.1..
→.101..
Aufgrund von Regel 1 können wir eine der Lücken füllen, wenn drei Lücken übrig sind und wir nicht drei neben derselben Ziffer haben können. Dh .0.1.0
→ 10.1.0
(Wir müssen noch zwei ausfüllen, und wir können nicht drei benachbarte in der Mitte haben, also muss die erste Lücke a sein 1
.)
Aufgrund von Regel 2 können wir die verbleibenden Lücken in einer Zeile oder Spalte immer dann ausfüllen, wenn die Hälfte davon bereits mit der entgegengesetzten Ziffer ausgefüllt ist. Dh .1.011
→010011
Aufgrund von Regel 3 können wir immer die entgegengesetzten Ziffern eingeben, wenn nur noch zwei in einer gleich geordneten Zeile zu lösen sind. Dh 101100 & 1..100
→101100 & 110100
Aufgrund von Regel 3 können wir manchmal eine Lücke füllen, wenn drei Lücken in einer gleich geordneten Linie verbleiben. Dh 010011 & .1.01.
→ 010011 & .1.010
(Hier können wir 1
am Ende kein a ausfüllen , da dies bedeuten würde, dass wir an den beiden anderen Lücken Nullen ausfüllen müssen, sodass beide Zeilen der Reihe nach gleich sind.)
Beispiel:
Wir beginnen mit dem folgenden 6x6-Raster, in dem einige Einsen und Nullen ausgefüllt sind (und die Punkte sind Lücken, die wir noch ausfüllen müssen):
.1....
.10.0.
1.11..
.1....
...1.0
......
Aufgrund der Regeln 1 und 2 können wir folgende Ziffern eingeben:
.1.01.
.1010.
101100
010011
.0.1.0
.010..
Aufgrund von Regel 1 können wir in Zeile 5, Spalte 1 eine 1 eintragen:
.1.01.
.1010.
101100
010011
10.1.0
.010..
Aufgrund von Regel 3 können wir in Zeile 1, Spalte 6 (bei Betrachtung von Zeile 4) eine 0 eintragen:
.1.010
.1010.
101100
010011
10.1.0
.010..
Jetzt können wir aufgrund der Regeln 1 und 2 weiterhin Lücken mit Ziffern füllen:
.1.010
010101
101100
010011
10.1.0
.010.1
Jetzt können wir Zeile 5 aufgrund von Regel 3 beenden (wenn wir Zeile 3 betrachten):
.1.010
010101
101100
010011
100110
.010.1
Und dann können wir das Rätsel aufgrund der Regeln 1 und 2 beenden:
011010
010101
101100
010011
100110
101001
Herausforderung:
Die Herausforderung ist einfach: Geben Sie angesichts des Startgitters das gelöste Rätsel aus.
HINWEIS: Sie müssen die oben genannten Regeln nicht implementieren. Das können Sie natürlich, und es sollte Ihnen Hinweise geben, wie Sie diese Herausforderung umsetzen können, aber es ist völlig in Ordnung, die Lösung unter Berücksichtigung der Regeln brutal durchzusetzen.
Wie Sie es lösen, liegt bei Ihnen, aber die Herausforderung besteht darin, das gelöste Rätsel auszugeben.
Herausforderungsregeln:
- Das Eingabe- und Ausgabeformat für das Raster ist flexibel. Bitte geben Sie an, was Sie verwenden. (Dh 2D-Byte-Array; String mit Zeilenumbrüchen usw.)
- Dies gilt auch für die verwendeten Zeichen. In dem Beispiel, das ich verwendet habe
01.
, aber wenn Sie möchten, können SieABx
stattdessen verwenden. Bitte geben Sie an, welches Eingabe- / Ausgabeformat und welche Zeichen Sie verwendet haben. - Sie können davon ausgehen, dass nur die folgenden Rastergrößen verwendet werden :
6x6
;8x8
;;10x10
;;12x12
;;14x14
;;16x16
.
Allgemeine Regeln:
- Dies ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich nicht von Code-Golf-Sprachen davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, eine möglichst kurze Antwort für "jede" Programmiersprache zu finden. - Für Ihre Antwort gelten Standardregeln , sodass Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme verwenden dürfen. Ihr Anruf.
- Standardschlupflöcher sind verboten.
- Wenn möglich, fügen Sie bitte einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie bei Bedarf auch eine Erklärung hinzu.
Testfälle:
Die Punkte werden nur zur besseren Lesbarkeit hinzugefügt. Verwenden Sie stattdessen Leerzeichen oder andere Elemente, die Sie für Lücken bevorzugen. Sowohl das In- als auch das Ausgabeformat sind flexibel.
Input:
1..0..
..00.1
.00..1
......
00.1..
.1..00
Output:
101010
010011
100101
011010
001101
110100
Input:
.1....
.10.0.
1.11..
.1....
...1.0
......
Output:
011010
010101
101100
010011
100110
101001
Input:
.......1..
.00..0..1.
.0..1..0.0
..1...1...
1.1......1
.......1..
.0..1...0.
....11...0
.0.0..1..0
0...0...1.
Output:
0110010101
1001100110
1001101010
0110011001
1010100101
0101010110
1001101001
0110110100
1010011010
0101001011