Skip to content

Instantly share code, notes, and snippets.

@ayushgoel
Created July 31, 2015 18:40
Show Gist options
  • Save ayushgoel/090ff75f2d49e6ee177e to your computer and use it in GitHub Desktop.
Save ayushgoel/090ff75f2d49e6ee177e to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import random
import itertools
def rindex(alist, value):
return len(alist) - alist[-1::-1].index(value) - 1
def getAvailability(arr, val):
return [i.count(val) > 0 for i in arr]
def getDistances(arr, val1, val2):
horizontal_dist = []
for i in arr:
try:
horizontal_dist.append(max(
abs(i.index(val1) - rindex(i, val2)),
abs(i.index(val2) - rindex(i, val1))))
except ValueError:
horizontal_dist.append(None)
return horizontal_dist
def maxArea(distances, availability):
max_area = -1
for id_i, i in enumerate(distances):
if not i == None:
for id_j, j in enumerate(availability):
if j == True:
max_area = max(max_area, (0.5 * i * (abs(id_j - id_i))))
return max_area
def main():
x = 4
arr = [[random.randint(0,2) for i in xrange(x)] for j in xrange(x)]
transposed_arr = zip(*arr)
for i in arr: print i
all_values = set([0, 1, 2])
max_in_horizontal = max([maxArea(getDistances(arr, i[0], i[1]), getAvailability(arr, all_values.difference(i).pop())) for i in itertools.combinations(all_values, 2)])
max_in_vertical = max([maxArea(getDistances(transposed_arr, i[0], i[1]), getAvailability(transposed_arr, all_values.difference(i).pop())) for i in itertools.combinations(all_values, 2)])
print "Answer: ", max(max_in_horizontal, max_in_vertical)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment