3BV z Saper pokładzie oznacza minimalną liczbę lewych kliknięć potrzebnych do rozwiązania płytę jeśli już zna rozwiązanie. To skrót od „Bechtel's Board Benchmark Value”. Oto jego strona wyjaśniająca to.
Poniżej znajduje się rozwiązana plansza Saper. Flagi wskazują miny; kafelki bez min wskazują liczbę sąsiadujących min, w tym po przekątnej, z tym wyjątkiem, że kafelki, które powinny mieć „0”, pozostawiają puste. Obraz pokazuje, które płytki należy kliknąć, aby rozwiązać planszę.
Kliknięcia liczone do 3BV to:
- Jeden na każdy wypełniony powodzią obszar pustych kafelków (sąsiadujących ze sobą min) i ich niepustych sąsiadów.
- Jeden dla siebie inny niż kopalnia.
Kolejny przykład (3BV = 39)
Biorąc pod uwagę tablicę wartości 2D, 0
dla wyczyszczenia i 1
dla kopalni (lub logicznej), zwróć 3BV .
Wymiary planszy będą wynosić co najmniej 8 x 8, a co najwyżej 24 x 30 włącznie. Twój program powinien obsłużyć wszystkie możliwe tablice, a nie tylko przykłady.
Uwaga: na planszy nigdy nie będą znajdować się tylko miny.
Przykład 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
źródło
Odpowiedzi:
MATLAB,
92908683797472 bajtyTo rozwiązanie akceptuje dane wejściowe w postaci macierzy 2D zer i jedynek i wyświetla wartość 3BV dla podanego sygnału wejściowego.
Oto nieco zmodyfikowane demo w Octave dla tych z was, którzy nie mają MATLAB-a.
Wyjaśnienie
Macierz wejściowa jest rozszerzana za pomocą macierzy 3 x 3,
1
a następnie odwrócona (za pomocą~
), która identyfikuje wszystkie punkty, które nie mają min, jako sąsiadów (1
) lub do (0
). Aby określić liczbę połączonych regionów, używamybwlabel
do oznaczenia każdego połączonego regionu1
. Pierwszym wyjściem jest matryca etykiet (0
gdzie wejście było zerowe i dowolna wartość w zakresie, w1...N
którym było1
wejście, gdzieN
jest indeks połączonej grupy, do której należy). Drugi wynik to liczba regionów (liczba kliknięć wymaganych do ich otwarcia). Wynikbwlabel
jest pokazany na obrazku po lewej stronie.Rozszerzamy pierwszy wynik
bwlabel
użyciaimdilate
(wszystkie niezerowe są rozwijane) przy użyciu macierzy 3 x 31
. Wynik jest pokazany na obrazku pośrodku.Aby określić pozostałe kliknięcia, zliczamy kwadraty, które nie znajdują się w tym rozwiniętym regionie (
~imdilate()
), a nie kopalni (-x
) (białe kwadraty na obrazie po prawej stronie) i dodajemy to do całkowitej liczby otwartych regionów (liczby różne kolory na obrazku po lewej), aby uzyskać 3BV.źródło
Oktawa,
86847966 bajtówTo rozwiązanie tworzy anonimową funkcję o nazwie,
ans
którą można następnie przekazać macierz 2D z0
i1
. Logika jest taka sama jak w mojej odpowiedzi MATLAB, ale wykorzystuje kilka sztuczek, które Octave ma do zaoferowania, aby zaoszczędzić miejsce.To rozwiązanie wymaga
image
zainstalowania pakietu.Demo tutaj
źródło
MATL,
242221 bajtów (niekonkurencyjny)1 bajt zapisany dzięki @Luis
Wypróbuj w MATL Online
Wyjaśnienie
Ponownie, jest to podobne do moich odpowiedzi MATLAB i Octave na to pytanie.
źródło
bwlabeln
funkcjonalność została wprowadzona do MATL po opublikowaniu wyzwania.