-
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"
Created at: 2018/11/22 16:06; Updated at: 2018/11/29 19:07