Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Uncategorized category for The Square Chest by Rounin
def checkio(lines_list):
lines = set(map(lambda x: str(sorted(x)), lines_list))
squareCount = 0
for corner1 in range(1, 12):
if corner1&3 == 0:
continue
for corner2 in range(corner1+1, 5+(corner1//4)*4):
corners = [corner1, corner2, corner1+4*(corner2-corner1), corner1+5*(corner2-corner1)]
if max(corners) > 16:
break
neededLines = [range(corner1, corner2), range(corners[2], corners[3]), range(corner1, corners[2], 4), range(corner2, corners[3], 4)]
neededLinesCount = 4*(corner2-corner1)
actualLinesCount = 0
for eachRange in range(len(neededLines)):
for tmpcorner1 in neededLines[eachRange]:
if not str([tmpcorner1, tmpcorner1+(1 if eachRange < 2 else 4)]) in lines:
break
actualLinesCount += 1
if actualLinesCount == neededLinesCount:
squareCount += 1
return squareCount
if __name__ == '__main__':
assert (checkio([[1, 2], [3, 4], [1, 5], [2, 6], [4, 8], [5, 6], [6, 7],
[7, 8], [6, 10], [7, 11], [8, 12], [10, 11],
[10, 14], [12, 16], [14, 15], [15, 16]]) == 3), "First, from description"
assert (checkio([[1, 2], [2, 3], [3, 4], [1, 5], [4, 8],
[6, 7], [5, 9], [6, 10], [7, 11], [8, 12],
[9, 13], [10, 11], [12, 16], [13, 14], [14, 15], [15, 16]]) == 2), "Second, from description"
assert (checkio([[1, 2], [1, 5], [2, 6], [5, 6]]) == 1), "Third, one small square"
assert (checkio([[1, 2], [1, 5], [2, 6], [5, 9], [6, 10], [9, 10]]) == 0), "Fourth, it's not square"
assert (checkio([[16, 15], [16, 12], [15, 11], [11, 10],
[10, 14], [14, 13], [13, 9]]) == 0), "Fifth, snake"
July 21, 2017