O Campo Minado é um popular jogo de computador que você provavelmente perdeu tempo jogando, ao tentar revelar as células que são minas em uma grade retangular, com base em dicas de quantas minas vizinhas cada célula não-mina possui. E caso você não tenha jogado, faça-o aqui .
Um fato matemático interessante sobre uma grade do Campo Minado (aka placa) é que:
Uma placa e seu complemento têm o mesmo número total da mina . ( Prova )
Isto é, se você tiver uma grade do Campo Minado completamente revelada, a soma de todos os números nessa grade, ou seja, o total da mina , será igual ao total da mina do complemento da grade, que é a grade na qual todas as minas foram substituídas por um não-mineiro e todo não-mineiro substituído por um.
Por exemplo, para a grade Campo Minado
**1..
34321
*2**1
o total da mina é 1 + 3 + 4 + 3 + 2 + 1 + 2 + 1 = 17.
O complemento da rede é
24***
*****
3*44*
que tem o meu total 2 + 4 + 3 + 4 + 4 = 17 novamente.
Escreva um programa que leva em uma grade Minesweeper arbitrário em forma de texto, onde *
representa uma mina e 1
através 8
representam o número de minas adjacentes a uma célula não meu. Você pode usar .
ou 0
ou
(espaço) para representar células sem vizinhos de minas, sua escolha. Você pode assumir que a grade de entrada será marcada corretamente, ou seja, cada célula que não é da mina denotará com precisão o número total de minas imediatamente adjacentes a ela, ortogonal ou diagonalmente.
Seu programa precisa imprimir o complemento da grade no mesmo formato (usando o mesmo .
, 0
ou
como você esperava na entrada).
O código mais curto em bytes vence.
- Em vez de um programa, você pode escrever uma função que pega a grade de entrada como uma string e imprime ou retorna a grade do complemento.
- Uma nova linha à direita na entrada ou saída é boa, mas não deve haver outros caracteres além daqueles que formam a grade.
- Você pode assumir que uma grade 1 × 1 será a menor entrada.
Casos de teste
Todas as entradas e saídas podem ser trocadas, pois o complemento do complemento é a grade original. As grades também podem ser giradas para outros casos de teste.
Entrada:
111
1*1
111
Saída:
***
*8*
***
Entrada:
.
Saída:
*
Entrada:
*11*1.1**1...1***1.....1*****1..........
Saída:
1**2***11*****1.1*******1...1***********
Entrada: ( exemplo Cut The Knot )
**212*32
333*33**
1*22*333
222222*1
*33*2232
2**22*2*
Saída:
24***4**
***7**64
*8**7***
******8*
4**7****
*33**5*3
?
) na linha após a linha final do quadro é aceitável ou posso levar o número de linhas de entrada pela linha de comando?