Найти узор в сетке - PullRequest
       4

Найти узор в сетке

1 голос
/ 12 июля 2020

Я пытаюсь создать программу на python, которая находит заданный шаблон внутри матрицы и подсчитывает, сколько раз этот шаблон появляется.

    pattern = [[1,0,1],
              [0,0,0],
              [1,0,1]]

    grid = [[0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0],
            [0,0,0,1,0,1,0,0,0],
            [0,0,0,0,0,0,0,0,0],
            [0,0,0,1,0,1,0,0,0],
            [0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0]]

Я пробовал это, но это не так работа:

    def find_pattern(grid,pattern):
        for x in range(len(grid)):
            for y in range (len(grid[0])):
                x0 = (x//3)*3
                y0 = (y//3)*3

                for i in range(len(pattern)):
                    for j in range(len(pattern[0])):
                        if grid[x0 + i][y0 + j] != patter[i][j]:
                            return False

return True

1 Ответ

0 голосов
/ 13 июля 2020

Это работает для меня:

def find_pattern(grid, pattern):
    count = 0
    for x in range(len(grid[0])-len(pattern[0])+1):
        for y in range(len(grid)-len(pattern)+1):
            local = grid[y:y+len(pattern)]
            local = [e[x:x+len(pattern[0])] for e in local]
            if local == pattern:
                count += 1
    return count

В основном он просматривает все разделы grid размером с pattern, а затем добавляет один к count для каждого раздела, который совпадает как pattern.

Пример:

pattern = [[0,1],
           [1,0]]
grid = [[1,0,1,0,1],
        [0,1,0,1,0]]

print(find_pattern(grid, pattern))

выходы 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...