Számítsa ki az Aknakereső tábla 3BV-jét

Egy iv id = “ 3BV 368d502a8c “>

Aknakereső tábla jelenti a tábla megoldásához szükséges bal oldali kattintások minimális számát, ha már ismeri a megoldást. Ez a ” Bechtel “Board Benchmark Value” értékét jelenti “. Itt “s webhely , amely elmagyarázza.

Az alábbiakban egy megoldott Aknakereső tábla található. A zászlók aknákat jeleznek; Aknák nélküli csempék a szomszédos aknák számát jelzik, átlósan, kivéve, hogy azok a lapok, amelyeknek ” 0 ” legyenek, üresek maradnak. A képen látható, hogy mely táblákra kell kattintani a tábla megoldásához.

3BV számlálása

A 3BV-ba számított kattintások a következők:

  • Egy minden áradással teli területre üres lapok (nulla aknával szomszédosak) és nem üres szomszédaik.
  • Egymást egymásnak, nem az enyémnek.

Egy másik példa (3BV = 39)

Megoldott aknavető tábla Kattintások szükségesek


2D-s értéktömböt adva, 0 a tiszta és 1 egy aknához (vagy logikai értékhez), adja vissza a 3BV .

A tábla méretei legalább 8×8 és legfeljebb 2 4×30, beleértve. A programnak az összes lehetséges táblát kezelnie kell, nem csak a példákat.

Megjegyzés: Egy tábla soha nem tartalmaz csak aknákat.

I / O példa:

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

Megjegyzések

  • Rendben van egész szám tömb bemenetként? Minden egész szám egy sort kódol.
  • @KarlNapf Nem. A bemenetnek táblának kell felismerhetőnek lennie, az ábra szerint.
  • Tudna-e további teszteseteket megadni, esetleg a megjelenített adatok alapján a bemenetet is képek, és lehet, hogy egy maximális dimenzió teszteset?

Válasz

MATLAB, 92 90 86 83 79 74 72 bájt

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

Ez a megoldás 0 “s és 1” s 2D-s mátrix formájában fogadja el a bemenetet, és megjeleníti a megadott bemenet 3BV értékét.

Itt van egy kissé módosított bemutató az Octave-ben azoknak, akiknek nincs MATLAB-ja.

Magyarázat

A bemeneti mátrixot 3 x 3 1 “s mátrix segítségével tágítják, majd megfordítják ( ~), amely az összes olyan pontot azonosítja, amelyek nem rendelkeznek aknákkal szomszédként (1) vagy (). A csatlakoztatott régiók számának meghatározásához a bwlabel elemet használjuk a 1 “s minden egyes csatlakoztatott régiójának felcímkézésére. Az első kimenet a címke mátrix (0 ahol a bemenet nulla volt, és bármely érték a 1...N tartományban, ahol 1 a bemenetben, ahol N a csatlakoztatott csoport indexe, amelyhez tartozik). A második kimenet a régiók száma (a megnyitáshoz szükséges kattintások száma). A bwlabel eredménye a bal oldali képen látható.

ide írja be a kép leírását

A bwlabel első kimenetét kibővítjük a imdilate (az összes nem nulla kibővítve) 3 x 3 mátrixot használva 1 “s. Az eredmény a középső képen látható.

A fennmaradó kattintások meghatározásához megszámoljuk azokat a négyzeteket, amelyek nincsenek ebben a kibővített régióban (~imdilate()) és nem az enyém (-x) (fehér négyzetek a jobb oldali képen), és ezt adjuk hozzá a nyitott régiók teljes számához (a bal oldali képen a különböző színek száma) ) a 3BV megszerzéséhez.

Válasz

Oktáv, 86 84 79 66 bájt

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

Ez a megoldás egy névtelen ans nevű függvényt hoz létre ezután át lehet adni egy 0 “s és 1” 2D-s mátrixot. A logika megegyezik a MATLAB válaszommal, de néhány trükköt használ, amelyeket az Octave kínál a helytakarékosság érdekében.

A megoldáshoz a image csomag telepítése szükséges. .

Bemutató itt

Válasz

MATL, 24 22 21 bájt (nem versenyző )

1 bájt mentve a @Luis nek köszönhetően

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

Próbálja ki itt: MATL Online

Magyarázat

Ez megint hasonló a kérdésemre adott MATLAB és Octave válaszaimhoz.

 % 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 

Megjegyzések

  • Nem versenyképes miért?
  • @CalculatorFeline Sajnos a bwlabeln funkciót bevezették a MATL után kihívást tettek közzé.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük