정규 표현식은 1 차원 배열에서 사용할 때 유용하며 2 차원 배열에서는 사용하지 않는 것이 좋습니다. 그래서
나는 정규 표현식을 사용하는 것은 좋은 방법이되지 않을 수도 있다고 경향이 ... 난 각각의 팔은 1 개 단위 길이 인하는 +
패턴으로 G
의 배치와 고정 된 패턴과 일치하는 시도 :
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}
처럼 뭔가를 할 수 없다는 것을 문제 카운터 ... 적어도 나는 그것에 대해 들어 본 적이 없다.