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.
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)
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ó.
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. .
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