Minesweeper ist ein beliebtes Computerspiel, bei dem Sie wahrscheinlich viel Zeit damit verschwendet haben, die Zellen, die Minen sind, in einem rechteckigen Raster anzuzeigen, basierend auf Hinweisen darauf, wie viele benachbarte Minen jede Nicht-Minenzelle hat. Und falls Sie es noch nicht gespielt haben, tun Sie dies hier .
Eine raffinierte mathematische Tatsache über ein Minesweeper-Gitter (auch bekannt als Board) ist, dass:
Ein Brett und sein Komplement haben die gleiche Gesamtzahl an Minen . ( Beweis )
Das heißt, wenn Sie ein vollständig aufgedecktes Minesweeper-Gitter haben, entspricht die Summe aller Zahlen auf diesem Gitter, dh die Minensumme , der Minensumme des Komplements des Gitters, das das Gitter ist, in dem jede Mine ersetzt wurde mit einer Nichtmine und jede Nichtmine durch eine Mine ersetzt.
Zum Beispiel für das Minesweeper-Gitter
**1..
34321
*2**1
Die Minensumme beträgt 1 + 3 + 4 + 3 + 2 + 1 + 2 + 1 = 17.
Die Ergänzung des Gitters ist
24***
*****
3*44*
das hat mir insgesamt 2 + 4 + 3 + 4 + 4 = 17 wieder.
Schreiben Sie ein Programm, das ein beliebiges Minesweeper-Gitter in Textform aufnimmt, wobei *
eine Mine und 1
durch 8
die Anzahl der Minen neben einer Nicht-Minenzelle dargestellt wird. Sie können .
oder 0
oder
(Leerzeichen) verwenden, um Zellen ohne Minennachbarn Ihrer Wahl darzustellen. Sie können davon ausgehen, dass das Eingaberaster korrekt markiert ist, dh, jede Nicht-Minenzelle gibt genau die Gesamtzahl der Minen an, die orthogonal oder diagonal unmittelbar daneben liegen.
Ihr Programm braucht die Ergänzung des Gitters im gleichen Format drucken (mit dem gleichen .
, 0
oder
wie Sie in der Eingabe erwartet).
Der kürzeste Code in Bytes gewinnt.
- Anstelle eines Programms können Sie eine Funktion schreiben, die das Eingaberaster als Zeichenfolge verwendet und das Komplement-Raster ausgibt oder zurückgibt.
- Ein abschließender Zeilenumbruch in der Eingabe oder Ausgabe ist in Ordnung, es sollten jedoch keine anderen Zeichen als die das Raster bildenden vorhanden sein.
- Sie können davon ausgehen, dass ein 1 × 1-Raster die kleinste Eingabe ist.
Testfälle
Alle Ein- und Ausgänge könnten getauscht werden, da das Komplement des Komplements das ursprüngliche Gitter ist. Die Gitter können auch für weitere Testfälle gedreht werden.
Eingang:
111
1*1
111
Ausgabe:
***
*8*
***
Eingang:
.
Ausgabe:
*
Eingang:
*11*1.1**1...1***1.....1*****1..........
Ausgabe:
1**2***11*****1.1*******1...1***********
Eingabe: ( Cut The Knot-Beispiel )
**212*32
333*33**
1*22*333
222222*1
*33*2232
2**22*2*
Ausgabe:
24***4**
***7**64
*8**7***
******8*
4**7****
*33**5*3
?
) in der Zeile nach der letzten Zeile der Karte akzeptabel, oder kann ich die Anzahl der Eingabezeilen über die Befehlszeile eingeben?