Für Zeilen können Sie einen Zähler führen, der angibt, wie viele gleiche Elemente in einer Zeile vorhanden sind. Iterieren Sie dazu durch die Zeile und
- wenn das aktuelle Element mit dem vorherigen Element übereinstimmt, wird der Zähler um eins erhöht. Wenn der Zähler 5 ist, haben Sie die 5 gesuchten Elemente gefunden.
- wenn das aktuelle Element nicht mit dem vorherigen Element übereinstimmt, wird der Zähler auf 1 gesetzt.
Dasselbe Prinzip kann auch auf Spalten und Diagonalen angewendet werden. Wahrscheinlich möchten Sie ein Array von Zählern für Spalten (ein Element für jede Spalte) und Diagonalen verwenden, damit Sie einmal durch die Matrix iterieren können.
Ich habe das kleine Beispiel für ein kleineres Gehäuse gemacht, aber Sie können es leicht ändern:
n = 3
matrix = [[1, 2, 3, 4],
[1, 2, 3, 1],
[2, 3, 1, 3],
[2, 1, 4, 2]]
col_counter = [1, 1, 1, 1]
for row in range(0, len(matrix)):
row_counter = 1
for col in range(0, len(matrix[row])):
current_element = matrix[row][col]
# check elements in a same row
if col > 0:
previous_element = matrix[row][col - 1]
if current_element == previous_element:
row_counter = row_counter + 1
if row_counter == n:
print n, 'in a row at:', row, col - n + 1
else:
row_counter = 1
# check elements in a same column
if row > 0:
previous_element = matrix[row - 1][col]
if current_element == previous_element:
col_counter[col] = col_counter[col] + 1;
if col_counter[col] == n:
print n, 'in a column at:', row - n + 1, col
else:
col_counter[col] = 1
Ich habe die Diagonalen ausgelassen, um das Beispiel kurz und einfach zu halten, aber für die Diagonalen können Sie das gleiche Prinzip wie für die Spalten anwenden. Das vorherige Element wäre eines der folgenden (abhängig von der Richtung der Diagonale):
matrix[row - 1][col - 1]
matrix[row - 1][col + 1]
Beachten Sie, dass Sie im zweiten Fall ein wenig mehr Aufwand betreiben müssen. Durchlaufen Sie zum Beispiel die Zeile in der inneren Schleife von rechts nach links.