Le 3BV d'un démineur conseil de représente le nombre minimum de clics gauche requis pour résoudre le conseil si vous connaissez déjà la solution. Il signifie "Bechtel's Board Benchmark Value". Voici son site l' expliquant.
Vous trouverez ci-dessous un tableau de démineur résolu. Les drapeaux indiquent les mines; les tuiles sans mines indiquent le nombre de mines adjacentes, y compris en diagonale, sauf que les tuiles qui devraient avoir "0" sont laissées vides à la place. L'image montre quelles tuiles doivent être cliquées pour résoudre le plateau.
Les clics comptabilisés pour le 3BV sont:
- Un pour chaque zone inondée de tuiles vierges (zéro mines adjacentes) et leurs voisins non vierges.
- Un pour chaque tuile non-mine.
Un autre exemple (3BV = 39)
Étant donné un tableau 2D de valeurs, 0
pour clear et 1
pour une mine (ou un booléen), retournez le 3BV .
Les dimensions d'une carte seront d'au moins 8x8 et d'au plus 24x30, inclus. Votre programme doit gérer toutes les cartes possibles, pas seulement les exemples.
Remarque: Un plateau ne contiendra jamais que des mines.
Exemple d'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
la source
Réponses:
MATLAB,
92908683797472 octetsCette solution accepte l'entrée sous la forme d'une matrice 2D de 0 et de 1 et affichera la valeur 3BV pour l'entrée fournie.
Voici une démo légèrement modifiée dans Octave pour ceux d'entre vous sans MATLAB.
Explication
La matrice d'entrée est dilatée à l'aide d'une matrice de 3 x 3
1
puis inversée (en utilisant~
) qui identifie tous les points qui n'ont pas de mines comme voisins (1
) ou do (0
). Pour déterminer le nombre de régions connectées, nous utilisonsbwlabel
pour étiqueter chaque région connectée de1
. La première sortie est la matrice d'étiquettes (0
où l'entrée était zéro et toute valeur dans la plage1...N
où il y avait une1
dans l'entrée oùN
est l'indice du groupe connecté auquel elle appartient). La deuxième sortie est le nombre de régions (le nombre de clics requis pour les ouvrir). Le résultat de labwlabel
figure dans l'image de gauche.Nous développons la première sortie de l'
bwlabel
utilisationimdilate
(tous les non-zéros sont développés) en utilisant une matrice de 3 x 3 de1
. Le résultat est montré dans l'image au milieu.Pour déterminer les clics restants, nous comptons ensuite les carrés qui ne se trouvent pas dans cette région développée (
~imdilate()
) et pas une mine (-x
) (carrés blancs dans l'image de droite) et ajoutons cela au nombre total de régions ouvertes (le nombre de différentes couleurs dans l'image de gauche) pour obtenir le 3BV.la source
Octave,
86847966 octetsCette solution crée une fonction anonyme nommée à
ans
laquelle on peut ensuite transmettre une matrice 2D de0
et1
». La logique est la même que ma réponse MATLAB mais utilise quelques astuces qu'Octave a à offrir pour économiser de l'espace.Cette solution nécessite que le
image
package soit installé.Démo ici
la source
MATL,
242221 octets (non concurrent)1 octet enregistré grâce à @Luis
Essayez-le sur MATL Online
Explication
Encore une fois, cela est similaire à mes réponses MATLAB et Octave à cette question.
la source
bwlabeln
fonctionnalité a été introduite dans MATL après la publication du défi.