Das 3BV eines Minesweeper- Boards gibt die minimale Anzahl von Linksklicks an, die erforderlich sind, um das Board zu lösen, wenn Sie die Lösung bereits kennen. Es steht für "Bechtel's Board Benchmark Value". Hier ist seine Seite , die es erklärt.
Unten ist ein gelöstes Minesweeper-Board. Die Flaggen zeigen Minen an; Kacheln ohne Minen geben die Anzahl benachbarter Minen an, auch diagonal, mit der Ausnahme, dass Kacheln mit "0" leer bleiben. Das Bild zeigt, welche Kacheln angeklickt werden müssen, um das Brett zu lösen.
Für die 3BV gezählte Klicks sind:
- Eine für jeden überfluteten Bereich mit leeren Kacheln (null Minen nebeneinander) und deren nicht leeren Nachbarn.
- Eine für jede andere Nicht-Minen-Fliese.
Ein weiteres Beispiel (3BV = 39)
Bei einem gegebenen 2D-Array von Werten geben Sie 0
für clear und 1
für eine Mine (oder einen Booleschen Wert ) die 3BV zurück .
Die Abmessungen eines Boards betragen mindestens 8x8 und höchstens 24x30. Ihr Programm sollte alle möglichen Karten verarbeiten, nicht nur die Beispiele.
Hinweis: Ein Brett enthält niemals nur Minen.
Beispiel I / O:
[[0,0,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0],
[0,0,0,1,0,0,1,0],
[0,1,0,0,1,0,0,0],
[0,0,1,0,0,0,0,1],
[0,0,0,1,0,0,0,0],
[0,0,0,0,0,0,1,0],
[0,0,0,0,0,0,0,1]]
23
[[0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0],
[0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0],
[0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1],
[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1],
[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0],
[1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1],
[0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0],
[0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0],
[0,1,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0],
[0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,0],
[0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0]]
187
quelle
Antworten:
MATLAB,
92908683797472 BytesDiese Lösung akzeptiert die Eingabe in Form einer 2D-Matrix aus Nullen und Einsen und zeigt den 3BV-Wert für die bereitgestellte Eingabe an.
Hier ist eine leicht modifizierte Demo in Octave für diejenigen unter Ihnen ohne MATLAB.
Erläuterung
Die Eingabematrix wird mit einer 3 x 3-Matrix von
1
's erweitert und dann invertiert (using~
), wodurch alle Punkte identifiziert werden, die keine Minen als Nachbarn haben (1
) oder do (0
). Um die Anzahl der verbundenen Regionen zu bestimmen, kennzeichnen wirbwlabel
jede verbundene Region von1
. Die erste Ausgabe ist die Beschriftungsmatrix (0
wobei die Eingabe Null war und ein beliebiger Wert in dem Bereich,1...N
in dem sich eine1
Eingabe befand, in demN
sich der Index der verbundenen Gruppe befindet, zu der sie gehört). Die zweite Ausgabe ist die Anzahl der Regionen (die Anzahl der Klicks, die erforderlich sind, um sie zu öffnen). Das Ergebnis vonbwlabel
wird im Bild links angezeigt.Wir erweitern die erste Ausgabe von
bwlabel
usingimdilate
(alle Nicht-Nullen werden erweitert) mit einer 3 x 3-Matrix von1
's. Das Ergebnis ist in der Abbildung in der Mitte dargestellt.Um die verbleibenden Klicks zu bestimmen, zählen wir die Quadrate, die sich nicht in diesem erweiterten Bereich (
~imdilate()
) und nicht in einer Mine (-x
) befinden (weiße Quadrate im Bild rechts) und addieren diese zur Gesamtzahl der offenen Bereiche (die Anzahl der) verschiedene Farben im Bild links), um die 3BV zu erhalten.quelle
Oktave,
86847966 BytesDiese Lösung erstellt eine anonyme Funktion mit dem Namen,
ans
der dann eine 2D-Matrix von0
's und1
' s übergeben werden kann. Die Logik ist dieselbe wie bei meiner MATLAB-Antwort, verwendet jedoch einige Tricks, die Octave zu bieten hat, um Platz zu sparen.Diese Lösung setzt voraus, dass das
image
Paket installiert ist.Demo hier
quelle
MATL,
242221 Bytes (nicht konkurrierend)1 Byte gespart dank @Luis
Probieren Sie es bei MATL Online aus
Erläuterung
Auch dies ähnelt den Antworten von MATLAB und Octave auf diese Frage.
quelle
bwlabeln
Funktionalität in MATL eingeführt, nachdem die Herausforderung veröffentlicht wurde.