diagonals
I need some feedback ... I wrote that code a while ago and can't read it anymore.
From: https://py.checkio.org/mission/find-sequence/solve/
def checkio(matrix):
count = 0;
digits = []
# create set of symbols called digits
for array in matrix:
for elem in array:
if elem not in digits:
digits.append(elem)
#check for horizontal lines
horiz = find4(matrix, digits)
#transpose matrix to use same method again
transposedMatrix = transpose(matrix)
#check for vertical lines
vert = find4(transposedMatrix, digits)
#check for diagonal lines
stringBox = []
stringBox2 = []
stringBox3 = []
diag = findDiagonal(matrix, digits, stringBox, stringBox2)
diagT = findDiagonal(transposedMatrix, digits, stringBox, stringBox2)
return horiz or vert or diag or diagT
def transpose(matrix):
#stackoverflow transposed this
new_matrix = [*zip(*matrix)]
return new_matrix
def find4(matrix, digits):
count = 0
for symbol in digits:
for row in matrix:
for vector in row:
if vector == symbol:
count += 1
if count == 4:
return True
else:
count = 0
count = 0
return False
def findDiagonal(matrix, digits, stringBox, stringBox2):
length = len(matrix)
box1 = []
for item in digits:
for elem in matrix:
for e in elem:
if e == item:
box1.append(elem.index(e))
box2 = []
resultBox = []
length_subset(length, box2, stringBox, stringBox2)
anotherString = toString(box1)
#print(stringBox2)
for elemString in stringBox2:
elemString2 = str(box1)
#print('start')
print(elemString) #TEST
print(anotherString) #TEST
diag = seq_in_seq2(elemString,anotherString)
elemStringR = elemString[::-1]
#diagR = seq_in_seq2(elemStringR,anotherString)
resultBox.append(diag)
#resultBox.append(diagR)
return True in resultBox
def seq_in_seq2(subseq, seq):
if subseq in seq:
return True
print('TRUE')
else:
#print('FALSE')
return False
def seq_in_seq(subseq, seq):
#print(subseq) TEST
#print(seq)
while subseq[0] in seq:
index = seq.index(subseq[0])
#print(subseq)
#print(seq)
if subseq == seq[index:index + len(subseq)]:
return True
else:
# 5432 is a False Negative in Assert Diagonal
return 0
else:
return False
def length_subset(length, result, stringBox, stringBox2):
if length < 3:
flatten_me(result, stringBox2)
return stringBox2
else:
newString = []
newString.append(length)
length2 = length - 1
newString.append(length2)
length3 = length2 - 1
newString.append(length3)
length4 = length3 - 1
newString.append(length4)
str1 = ''.join(str(e) for e in newString)
result.append(str1)
length_subset(length - 1, result, stringBox, stringBox2)
def flatten_me(listt, stringBox2):
ans = []
for elem in listt:
if (elem.__class__ is list):
for e in elem:
if (e.__class__ is list):
for f in e:
if (f.__class__ is list):
stringBox2.append((f))
else:
stringBox2.append((f))
else:
stringBox2.append((e))
else:
stringBox2.append(elem)
return ans
def toString(myList):
str1 = ''.join(str(e) for e in myList)
return str1
def findDiagonal2():
return False
'''
Test 11/12 (5x5)
False Positive 4321
This matrix is 6x6
011110
000000
440000
000021
443212 here
254345
test12/12
your result: false:
right result: true
2365628374
6959768516
6826193664
5832387464
2314512569
5487558495 eight
9799599812 eight
5174834188 eight
5332614388 eight
4814588747
'''
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
assert checkio([
[1, 2, 1, 1],
[1, 1, 4, 1],
[1, 3, 1, 6],
[1, 7, 2, 5]
]) == True, "Vertical"
assert checkio([
[7, 1, 4, 1],
[1, 2, 5, 2],
[3, 4, 1, 3],
[1, 1, 8, 1]
]) == False, "Nothing here"
assert checkio([
[2, 1, 1, 6, 1],
[1, 3, 2, 1, 1],
[4, 1, 1, 3, 1],
[5, 5, 5, 5, 5],
[1, 1, 3, 1, 1]
]) == True, "Long Horizontal"
assert checkio([
[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, "Diagonal"