Skip to content

Instantly share code, notes, and snippets.

@velociraptors
Created February 1, 2011 21:49
Show Gist options
  • Save velociraptors/806763 to your computer and use it in GitHub Desktop.
Save velociraptors/806763 to your computer and use it in GitHub Desktop.
# Think of the array in this manner:
# _ i --> _
# ARRAY = |00 | In the top level list, indices are i
# | 11 | In the nested lists, indices are j
# j | 22 |
# | | 33 |
# V | 44 |
# |_ 55 _|
SELECTION = 4
myarray = [[8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8],
[49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0],
[81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65],
[52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91],
[22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80],
[24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50],
[32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70],
[67, 26, 20, 68, 02, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21],
[24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72],
[21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95],
[78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 03, 80, 04, 62, 16, 14, 9, 53, 56, 92],
[16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57],
[86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58],
[19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40],
[4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66],
[88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69],
[4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36],
[20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16],
[20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54],
[1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48]]
def multList(input_list):
value = 1
for i in input_list:
value = value * i
return value
def testRegularity(array):
depth = len(array[0])
for column in array:
if not len(column) == depth:
print('Array table is irregular')
return False
print('Array table is regular')
return True
def cardinalScan(array, direction, size):
"""Takes an array, cardinal direction, and selection size.
Returns the highest value found by multiplying select values
in the ray, as they are selected according to size and direction
Acceptable arguments for direction:
'N', 'S', 'W', 'E', 'NW', 'NE', 'SW', 'SE'
"""
cardinal = direction.upper()
MAXVAL = 0
if cardinal == ('N'):
start = SELECTION - 1
end = len(array[0])
for i in array:
j = start
while j <= end:
myslice = i[j - SELECTION:j]
if MAXVAL < multList(myslice):
MAXVAL = multList(myslice)
j += 1
return MAXVAL
elif cardinal == ('S'):
start = 0
end = len(array[0]) - SELECTION
for i in array:
j = start
while j <= end:
myslice = i[j: j + SELECTION]
if MAXVAL < multList(myslice):
MAXVAL = multList(myslice)
j += 1
return MAXVAL
elif cardinal == ('E'):
end = len(array) - SELECTION - 1
myslice = []
i = 0
while i < end:
j = 0
while j < len(array[0]):
k = 0
while k < SELECTION:
myslice.append(array[i + k][j])
k += 1
if MAXVAL < multList(myslice):
MAXVAL = multList(myslice)
myslice = []
j += 1
myslice = []
i += 1
return MAXVAL
elif cardinal == ('W'):
start = SELECTION
end = len(array)
myslice = []
i = start
while i < end:
j = 0
while j < len(array[0]):
k = 0
while k < SELECTION:
myslice.append(array[i - k][j])
k += 1
if MAXVAL < multList(myslice):
MAXVAL = multList(myslice)
myslice = []
j += 1
myslice = []
i += 1
return MAXVAL
elif cardinal == ('NW'):
istep = -1
jstep = -1
ihalt = SELECTION
jhalt = SELECTION
myslice = []
i = ihalt
while i < len(array):
j = jhalt
while j < len(array[0]):
k = 0
while k < SELECTION:
myslice.append(array[i + k * istep][j + k * jstep])
k += 1
if MAXVAL < multList(myslice):
MAXVAL = multList(myslice)
myslice = []
j += 1
myslice = []
i += 1
return MAXVAL
elif cardinal == ('NE'):
istep = 1
jstep = -1
ihalt = len(array) - SELECTION - 1
jhalt = SELECTION
myslice = []
i = 0
while i < ihalt:
j = jhalt
while j < len(array[0]):
k = 0
while k < SELECTION:
myslice.append(array[i + k * istep][j + k * jstep])
k += 1
if MAXVAL < multList(myslice):
MAXVAL = multList(myslice)
myslice = []
j += 1
myslice = []
i += 1
return MAXVAL
elif cardinal == ('SW'):
istep = -1
jstep = 1
ihalt = SELECTION
jhalt = len(array[0]) - SELECTION - 1
myslice = []
i = ihalt
while i < len(array):
j = 0
while j < jhalt:
k = 0
while k < SELECTION:
myslice.append(array[i + k * istep][j + k * jstep])
k += 1
if MAXVAL < multList(myslice):
MAXVAL = multList(myslice)
myslice = []
j += 1
myslice = []
i += 1
return MAXVAL
elif cardinal == ('SE'):
istep = 1
jstep = 1
ihalt = len(array) - SELECTION - 1
jhalt = len(array[0]) - SELECTION - 1
myslice = []
i = 0
while i < ihalt:
j = 0
while j < jhalt:
k = 0
while k < SELECTION:
myslice.append(array[i + k * istep][j + k * jstep])
k += 1
if MAXVAL < multList(myslice):
MAXVAL = multList(myslice)
myslice = []
j += 1
myslice = []
i += 1
return MAXVAL
else:
print('Directional argument not available')
return None
def fullScan(array):
MAXVAL = 0
maxvals = [cardinalScan(myarray,'N', SELECTION),
cardinalScan(myarray,'S', SELECTION),
cardinalScan(myarray,'E', SELECTION),
cardinalScan(myarray,'W', SELECTION),
cardinalScan(myarray,'NW', SELECTION),
cardinalScan(myarray,'NE', SELECTION),
cardinalScan(myarray,'SW', SELECTION),
cardinalScan(myarray,'SE', SELECTION)]
for value in maxvals:
if value > MAXVAL:
MAXVAL = value
return MAXVAL
Regularity = testRegularity(myarray)
if Regularity:
print(fullScan(myarray))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment