Saper to popularna gra komputerowa, w którą prawdopodobnie zmarnowałeś czas, grając, w której próbujesz odsłonić komórki, które są kopalniami w prostokątnej siatce na podstawie wskazówek o tym, ile sąsiednich min ma każda komórka niemina. A jeśli jeszcze tego nie grałeś, zrób to tutaj .
Sprytny matematyczny fakt o siatce Saperów (aka board) jest taki, że:
Plansza i jej uzupełnienie mają taką samą całkowitą liczbę kopalni . ( Dowód )
To znaczy, że jeśli masz całkowicie ujawnioną siatkę Saper, suma wszystkich liczb na tej siatce, tj. Suma kopalni , będzie równa sumie kopalni uzupełnienia siatki, która jest siatką, w której każda kopalnia została zastąpiona z nie-kopalnią, a każda nie-kopalnia zastąpiona kopalnią.
Na przykład dla siatki Saper
**1..
34321
*2**1
suma kopalni wynosi 1 + 3 + 4 + 3 + 2 + 1 + 2 + 1 = 17.
Uzupełnieniem siatki jest
24***
*****
3*44*
która ma moje kopie łącznie 2 + 4 + 3 + 4 + 4 = 17 ponownie.
Napisz program, który pobierze dowolną siatkę Saper w postaci tekstowej, gdzie *
reprezentuje minę i 1
poprzez 8
reprezentuje liczbę min sąsiadujących z komórką inną niż kopalnia. Możesz użyć .
lub 0
lub
(spacji) do reprezentowania komórek bez sąsiadów kopalni, twój wybór. Możesz założyć, że siatka wejściowa zostanie poprawnie oznaczona, tj. Każda komórka nie będąca kopalnią będzie dokładnie oznaczać całkowitą liczbę min bezpośrednio przylegających do niej prostopadle lub ukośnie.
Twój program musi wydrukować uzupełnienie sieci w tym samym formacie (przy użyciu tego samego .
, 0
lub
, jak oczekiwano na wejściu).
Najkrótszy kod w bajtach wygrywa.
- Zamiast programu możesz napisać funkcję, która pobiera siatkę wejściową jako ciąg i wypisuje lub zwraca siatkę dopełniacza.
- Końcowy znak nowej linii na wejściu lub wyjściu jest w porządku, ale nie powinno być żadnych innych znaków poza tymi, które tworzą siatkę.
- Możesz założyć, że siatka 1 × 1 będzie najmniejszym wejściem.
Przypadki testowe
Wszystkie dane wejściowe i wyjściowe można zamienić, ponieważ uzupełnieniem uzupełnienia jest pierwotna siatka. Siatki mogą być również obracane w dalszych przypadkach testowych.
Wkład:
111
1*1
111
Wydajność:
***
*8*
***
Wkład:
.
Wydajność:
*
Wkład:
*11*1.1**1...1***1.....1*****1..........
Wydajność:
1**2***11*****1.1*******1...1***********
Dane wejściowe: ( Wytnij przykład węzła )
**212*32
333*33**
1*22*333
222222*1
*33*2232
2**22*2*
Wydajność:
24***4**
***7**64
*8**7***
******8*
4**7****
*33**5*3
?
) w wierszu po ostatnim wierszu płyty jest dopuszczalne, czy też mogę przenieść liczbę wierszy wejściowych przez wiersz poleceń?