Самая длинная соседняя последовательность строк в матрице - PullRequest
0 голосов
/ 28 мая 2019

У меня есть следующее задание, и мне нужна помощь с ним.Предположим, у вас есть следующая матрица:

[['R', 'R', 'R', 'G'], 
['G', 'B', 'R', 'G'], 
['R', 'G', 'G', 'G'], 
['G', 'G', 'B', 'B']]

Мой код:

# Open the unit test in read mode.

file_handle = open('test_3', 'r')

# Create a list of lines.

lines_list = file_handle.readlines()

# Find the matrix dimensions. Cast values to integers from strings.

cols, rows = (int(val) for val in lines_list[0].split())

# Do a double-nested list comprehension to get the rest of the data. Slice to exclude dimensions.

matrix = [[val for val in line.split()] for line in lines_list[1:]]
counter = 0

for i in range(len(matrix) - 1):
    for j in range(len(matrix[i]) - 1):
        if matrix[i][j] == matrix[i][j + 1]:
            counter += 1

print(counter)

Мне нужно пройти по ней как по строкам, так и по столбцам и сосчитать самую длинную последовательность одинаковых строк,исключая диагонали.Таким образом, в этом тестовом примере последовательность будет равна 7, если мы будем следовать букве G от строки 1. до нижнего.

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

Как мне сделать это одновременно для столбцов матрицы?

Имейте в виду, что я ищуNoob дружественное решение.

Заранее спасибо.

1 Ответ

0 голосов
/ 28 мая 2019
for i in range(len(matrix) - 1):
    for j in range(len(matrix[i]) - 1):

У вас возникла проблема с разбором cols, rows - они также могут использовать их как границы цикла.

        if matrix[i][j] == matrix[i][j + 1]:

Да, это обрабатывает одно направление.Попробуйте определить окрестность :

    nbrhd = [
        (0, 1),
        (-1, 0),
        (0, -1),
        (1, 0),
    ]

Затем вы можете выполнить итерацию dx, dy, добавив эти дельты к текущему местоположению.

Рассмотрите возможность использования numpy массив , а не списки списков, поэтому ваши индексы i, j не выходят назад.

алгоритм

Большойвам нужно выбрать алгоритм, записать описание вашего желаемого подхода и начать его реализацию.

Например, возможно, вы захотите рассматривать это как упражнение «считать хлебные крошки», выбираяих, чтобы избежать застрять в петле.Или, возможно, вы бы предпочли создать карту ценностей, показывающую, сколько будет стоить посещение каждого квадрата, начиная с определенной начальной точки.

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

...