Например матрица:
a=([ [7, 1, 1, 8, 1, 1], [1, 1, 7, 3, 1, 5], [2, 3, 1, 2, 5, 1], [1, 1, 1, 5, 1, 4], [4, 6, 5, 1, 3, 1], [1, 1, 9, 1, 2, 1] ]) == True
a=([ [7, 1, 1, 8, 1, 1], [1, 1, 7, 3, 1, 5], [2, 3, 1, 2, 5, 1], [1, 1, 1, 5, 1, 4], [4, 6, 5, 1, 3, 1], [1, 1, 9, 1, 2, 1] ]) == True
== True
Silentium
просто натолкнуть на мысль с чего начать построение алгоритма
Silentiumпо-простому делаете 4 цикла и просматриваете по горизонтали и т.д.
пробегать по строкам, столбцам и диагоналям
Silentiumглавная и дополнительная они по одной!
главных и дополнительных
Silentiumну вы напишите свой код, пото подуайте как его оптимизировать и покажите нам, а мы что-то исправим, что-то подскажем или напишем как будет лучше
чтобы мне не громоздить огромный говнокод
SilentiumНужно написать одну функцию поиска 4-х одинаковых элементов в последовательности и передавать в неё сначала каждую строку, потом каждый столбец, а потом каждую диагональ.
Как проверить есть ли в ней последовательность 4х одинаковых чисел по горизонтали, вертикали и в главных и дополнительных диагоналях?
Нужно написать одну функцию поиска 4-х одинаковых элементов в последовательности и передавать в неё сначала каждую строку, потом каждый столбец, а потом каждую диагональ.
def matrix(a): x = 0 n=len(a) m=len(a[x]) fl=0 # compare rows for x in range(n-1): for a1,a2 in [(a[x][i],a[x][i+1]) for i in range(m-1)]: if a1==a2: fl+=1 if fl==3: return True fl=0 # compare cols for x in range(n-1): for a1,a2 in [(a[i][x],a[i+1][x]) for i in range(m-1)]: if a1==a2: fl+=1 if fl==3: return True fl=0 #compare general diag for x in range(n-1): for a1,a2 in [(a[i][i],a[i+1][i+1]) for i in range(m-1)]: if a1==a2: fl+=1 if fl==3: return True break fl=0 return False if __name__ == '__main__': assert matrix([[7, 1, 1, 8, 1, 1], [1, 1, 7, 3, 1, 5], [2, 3, 1, 2, 5, 1], [1, 1, 1, 5, 1, 4], [4, 6, 5, 1, 3, 1], [1, 1, 9, 1, 2, 1] ])==True
def f(a): for i in a: for j, k in enumerate(i[:-3]): if all(l == k for l in i[j+1: j+4]): return True def d(a): return [[a[i][i] for i in range(len(a))]] def matrix(a): return f(a) or f(zip(*a)) or f(d(a)) or f(d(a[::-1])) or False
if a1==a2: fl+=1 if fl==3: return True
[1, 1, 1, 7, 1, 1, 1]
terabaytСори, забыл объявить в коде x=0
по вашему коду:
1) он даже не запускается!
terabaytя имею ввиду что должно выполняться например условие
а что вы подразумеваете под “главных диагоналях”? диагонали две
главная и дополнительная!
ОДНА главная и ОДНА дополнительная
a= ([ [7, 1, 1, 8, 1, 1] , [1, 1, 7, 3, 1, 5], [2, 3, 1, 2, 5, 1], [1, 1, 1, 5, 1, 4], [4, 6, 5, 1, 3, 1], [1, 1, 9, 1, 2, 1]]) == True
sanderКакая прелесть! Можно я это на литературный факультет МГУ отправлю?
что numpy может в матрицы
def chk(v): return 4 in dict(Counter(v)).values() a=numpy.array(input_list) for i in a: chk(i) for i in a.T: chk(i) chk(a.diagonal()) chk(numpy.flipud(a).diagonal())