正規表現は、問題のように2次元配列ではなく、1次元配列で使用すると便利です。
だから私は正規表現を使用することは良い方法ではないかもしれないと言う傾向があるだろう...私は、+
パターンでG
の配置に固定パターンに一致するようにしようとした各アームの長さは1個の単位である:
B = 0
G = 1
matrix = (
(B, G, B, B, G, B),
(G, G, G, G, G, G),
(B, G, B, B, G, B),
(B, G, B, B, G, B),
(G, G, G, G, G, G),
(B, G, B, B, G, B),
)
pattern = (
(B, G, B),
(G, G, G),
(B, G, B),
)
def getMatrixSize(mat):
# Return (width, height)
return (len(mat[0]), len(mat))
def findPattern(mat, pat):
matches = []
matsize = getMatrixSize(mat)
patsize = getMatrixSize(pat)
for y in range(matsize[1] - patsize[1] + 1):
for x in range(matsize[0] - patsize[0] + 1):
submat_cols = mat[y:y+patsize[1]]
for i in range(patsize[1]):
submat_row = submat_cols[i][x:x+patsize[0]]
if submat_row != pat[i]:
i = -1
break
if i > 0:
matches.append((x, y))
return matches
# Run the thing
print(findPattern(matrix, pattern))
私の考えは、今これはちょっと「ハードコード化された」のためのものである...
をマトリックス上にパターンをスライドさせ、そしてマトリックスパターンの各セグメントの各サブセグメントに比較することでした特定のパターン。
しかし、あなたはいつもここから行くと(異なるアーム長)
注パターンが進化できるように試みることができる:A
が共有だろうどこ正規表現で、あなたは\w{A}.\w{A}
ような何かをすることができないということで問題カウンター...少なくとも私はそれについて聞いたことがない。