A 3BV de uma placa Minesweeper representa o número mínimo de cliques esquerdos necessários para resolver a placa, se você já conhece a solução. Significa "Valor de referência do conselho da Bechtel". Aqui está o site dele explicando isso.
Abaixo está uma placa do Campo Minado resolvida. As bandeiras indicam minas; ladrilhos sem minas indicam a contagem de minas adjacentes, inclusive na diagonal, exceto que os ladrilhos que deveriam ter "0" são deixados em branco. A imagem mostra em quais blocos é necessário clicar para resolver o quadro.
Os cliques contados no 3BV são:
- Um para cada área cheia de ladrilhos em branco (zero minas adjacentes) e seus vizinhos não em branco.
- Um para o outro lado a lado não-mina.
Outro exemplo (3BV = 39)
Dada uma matriz de valores 2D, 0
para clear e 1
para uma mina (ou um booleano), retorne o 3BV .
As dimensões de uma placa terão pelo menos 8x8 e, no máximo, 24x30, inclusive. Seu programa deve lidar com todas as placas possíveis, não apenas com os exemplos.
Nota: Um tabuleiro nunca conterá apenas minas.
Exemplo de E / S:
[[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
fonte
Respostas:
MATLAB,
92908683797472 bytesEsta solução aceita a entrada na forma de uma matriz 2D de 0 e 1 e exibirá o valor de 3 VB para a entrada fornecida.
Aqui está uma demonstração ligeiramente modificada no Octave para aqueles que não têm o MATLAB.
Explicação
A matriz de entrada é dilatada usando uma matriz de 3 x 3 de
1
's e depois invertida (usando~
) que identifica todos os pontos que não possuem minas como vizinhos (1
) ou fazem (0
). Para determinar o número de regiões conectadas, usamosbwlabel
para rotular cada região conectada de1
's. A primeira saída é a matriz de rótulo (0
onde a entrada era zero e qualquer valor no intervalo1...N
em que havia um1
na entrada ondeN
está o índice do grupo conectado ao qual ele pertence). A segunda saída é o número de regiões (o número de cliques necessários para abri-las). O resultadobwlabel
é mostrado na imagem à esquerda.Expandimos a primeira saída do
bwlabel
usoimdilate
(todos os não-zeros são expandidos) usando uma matriz de 3 x 3 de1
's. O resultado é mostrado na imagem ao meio.Para determinar os cliques restantes, contamos os quadrados que não estão nessa região expandida (
~imdilate()
) e não são uma mina (-x
) (quadrados brancos na imagem à direita) e adicionamos isso ao número total de regiões abertas (o número de cores diferentes na imagem à esquerda) para obter o 3BV.fonte
Oitava,
86847966 bytesEsta solução cria uma função anônima nomeada
ans
que pode ser passada para uma matriz 2D de0
's1
' e 's. A lógica é a mesma da minha resposta do MATLAB, mas usa alguns truques que o Octave tem a oferecer para economizar espaço.Esta solução requer que o
image
pacote esteja instalado.Demonstração aqui
fonte
MATL,
242221 bytes (não concorrente)1 byte salvo graças a @Luis
Experimente no MATL Online
Explicação
Novamente, isso é semelhante às minhas respostas MATLAB e Octave a esta pergunta.
fonte
bwlabeln
funcionalidade foi introduzida no MATL após o lançamento do desafio.