Created
February 1, 2011 21:49
-
-
Save velociraptors/806763 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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