私はロジックに頭を悩ませようとしていますが、それを行う最善の方法が思いつきません。
私は2次元配列array [10] [6]を持っています。10は列の数で、6は行の数です。配列内に一致する項目が 3 つ以上あることを確認したい。誰かが良い例を知っているか、解決策のアイデアを持っていますか? オンラインでいくつかのリソースを見てきましたが、実際に見たものはすべてコメントがなく、読みにくいものでした。
行に 3 つ以上が並んでいる場合、または列に 3 つが重なっている場合、アイテムは一致します。
これは@Daveと同じ考え方で、理解しやすいかもしれません(tあなたの2D配列です):
for y=1,6 do -- for each row
for x=1,10-2 do -- for each possible horizontal triplet
if t[x+1][y] == t[x][y] and t[x+2][y] == t[x][y] then
-- match
end
end
end
for x=1,10 do -- for each column
for y=1,6-2 do -- for each possible vertical triplet
if t[x][y+1] == t[x][y] and t[x][y+2] == t[x][y] then
-- match
end
end
end
これは最速のアルゴリズムではないかもしれませんが、最も単純なアルゴリズムであり、他のアルゴリズムの潜在的なパフォーマンスの向上は、IMO の複雑さの増加に値するものではありません。
編集: Dave が OP だとは思いませんでした :) はい、その方法は機能します。
yこれが最善の方法かどうかはわかりませんが、それが私が仕事をしなければならなかった方法です. これはluaコードです
function checkWinningsFunction()
--Check x axis for matches
for i=1,6 do
for n=1,8 do
if(reelImages[n][i].value == reelImages[n+1][i].value and reelImages[n+1][i].value == reelImages[n+2][i].value) then
--Match
end
end
end
--Check y axis for matches
for i=1,4 do
for n=1,10 do
if(reelImages[n][i].value == reelImages[n][i+1].value and reelImages[n][i+1].value == reelImages[n][i+2].value) then
--Match
end
end
end
end