Mayın Tarlası Tahtasının 3BV'sini hesapla


17

3BV a Mayın Tarlası kurulu zaten çözümü biliyorsanız tablosunu çözmek için gerekli sol tıklama asgari sayısını temsil eder. "Bechtel'in Kurul Karşılaştırma Değeri" anlamına gelir. İşte açıklayan sitesi .

Aşağıda çözülmüş bir Mayın Tarlası tahtası bulunmaktadır. Bayraklar mayınları gösterir; mayınsız fayanslar, diyagonal olarak dahil olmak üzere bitişik mayınların sayısını belirtir, bunun yerine "0" olması gereken fayanslar boş bırakılır. Resim, tahtayı çözmek için hangi karoların tıklanması gerektiğini göstermektedir.

3BV sayma

3BV için sayılan tıklamalar şunlardır:

  • Boş kiremitlerin her taşkın dolu alanı (bitişik sıfır mayın) ve boş olmayan komşuları için bir tane.
  • Birbirimiz için mayın olmayan kiremit.

Başka Bir Örnek (3BV = 39)

Çözülmüş Mayın Tarlası tahtası Tıklama gerekli


2B bir dizi değer verildiğinde, 0açık ve 1bir mayın (veya bir boolean) için 3BV'yi döndürün .

Bir tahtanın boyutları en az 8x8 ve en fazla 24x30 olacaktır. Programınız yalnızca örnekleri değil tüm olası panoları ele almalıdır.

Not: Bir tahta asla sadece mayın içermez.

Örnek G / Ç:

[[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

Bir tamsayı dizisi girdi olarak iyi mi? Her tamsayı bir satırı kodlar.
Karl Napf

@KarlNapf Hayır. Giriş gösterildiği gibi bir pano olarak tanınabilir olmalıdır.
mbomb007

Muhtemelen görüntülenen görüntülere dayalı girdiler ve belki de maksimum boyutlar için test senaryosu gibi daha fazla test durumu sağlayabilir misiniz?
mil

Yanıtlar:


15

MATLAB, 92 90 86 83 79 74 72 bayt

x=input('');I=@(x)~imdilate(x,ones(3));[C,N]=bwlabel(I(x));nnz(I(C)-x)+N

Bu çözüm girişi 0 ve 1'lerin 2D matrisi biçiminde kabul eder ve sağlanan giriş için 3BV değerini görüntüler.

İşte biraz değiştirildi MATLAB olmayanlarınız için Octave'de demo .

açıklama

Giriş matrisi, 3 x 3'lük bir matris 1kullanılarak genişletilir ve daha sonra ~mayın içermeyen tüm noktaları komşu ( 1) veya do ( 0) olarak tanımlayan ters çevrilir (kullanılarak ). Bağlı bölge sayısını belirlemek için, bağlı bölgelerin bwlabelher birini etiketlemek için kullanılır 1. Birinci çıkış (etiket matris 0giriş sıfır ve aralığında bir değer 1...N, bir orada 1girişi Nait olduğu, bağlı grubunun endeksidir). İkinci çıktı, bölge sayısıdır (bunları açmak için gereken tıklama sayısı). Sonucu bwlabelsoldaki resimde gösterilmektedir.

resim açıklamasını buraya girin

bwlabelKullanmanın ilk çıktısını genişletiyoruzimdilate3 x 3 1'lük bir matris (sıfır olmayanlar genişletilir) genişletiriz . Sonuç ortadaki resimde gösterilmektedir.

Kalan tıklamaları belirlemek için, ~imdilate()bir mayın ( -x) (sağdaki resimde beyaz kareler) değil, bu genişletilmiş bölgede olmayan ( ) kareleri sayarız ve bunu toplam açık bölge sayısına ( soldaki resimde farklı renkler).


9

Oktav, 86 84 79 66 bayt

@(x)nnz(~imdilate(c=imerode(~x,o=ones(3)),o)-x)+max(bwlabel(c)(:))

Bu çözüm ans, daha sonra 0's ve1 ' nin . Mantık MATLAB cevabımla aynı, ancak Octave'ın yerden tasarruf etmek için sunduğu birkaç püf noktası var.

Bu çözüm imagepaketin kurulu olmasını gerektirir .

Burada demo


2

MATL, 24 22 21 bayt (rakip olmayan)

@Luis sayesinde 1 bayt kaydedildi

4Y6Z+~l2#ZIw7MZ+G+~z+

MATL Online'da deneyin

açıklama

Yine, bu benim MATLAB ve Octave bu soruya verdikleri cevaplara benzer.

        % Implicitly grab input array
4Y6     % Push the literal [1 1 1; 1 1 1; 1 1 1] to the stack
Z+      % Perform 2D convolution of the input with this array
~       % Negate the result
l2#ZI   % Call bwlabeln which dilates each open region and the second output
        % returns the number of open regions
w       % Flip the top two stack elements
7M      % Push the literal [1 1 1; 1 1 1; 1 1 1] to the stack again
Z+      % Perform 2D convolution
G+      % Explicitly grab the input and add it to the result
~z      % Count the number of 0's in the result (the remaining number of clicks)
+       % Add the total number of remaining clicks to the number of open regions 

Rekabet etmeyen neden?
CalculatorFeline

1
@CalculatorFeline Maalesef, bwlabelngörev gönderildikten sonra işlevsellik MATL'ye tanıtıldı .
Suever
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.