Dear Mark,

> I can't see a Python array anywhere.  Do you mean the list of lists? :)
>
>> THE CODE
>
> [snipped as it's been mangled, was it posted in html and not plain text
> or what?  I'm too lazy to unmangle it, others might be kinder]
>
Again, my bad. Here's the code in plain text:

''#-------------------------------------------------------------------------------------------------------------------------------
# Name:Project Euler Problem 11
# Purpose:Project Euler 11
#
# Author: Abasiemeka
#
# Created:23-07-2012
# Copyright: (c) Abasiemeka 2012
# Licence: <your licence>
#-------------------------------------------------------------------------------------------------------------------------------

data = [[ 8, 02, 22, 97, 38, 15, 00, 40, 00, 75, 04, 05, 07, 78, 52,
12, 50, 77, 91,  8],
        [49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69,
48, 04, 56, 62, 00],
        [81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30,
03, 49, 13, 36, 65],
        [52, 70, 95, 23, 04, 60, 11, 42, 69, 24, 68, 56, 01, 32, 56,
71, 37, 02, 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, 03, 45, 02, 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, 05, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14,
88, 34, 89, 63, 72],
        [21, 36, 23,  9, 75, 00, 76, 44, 20, 45, 35, 14, 00, 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, 05, 42, 96, 35, 31, 47, 55, 58, 88, 24, 00, 17, 54,
24, 36, 29, 85, 57],
        [86, 56, 00, 48, 35, 71, 89, 07, 05, 44, 44, 37, 44, 60, 21,
58, 51, 54, 17, 58],
        [19, 80, 81, 68, 05, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17,
77, 04, 89, 55, 40],
        [04, 52,  8, 83, 97, 35, 99, 16, 07, 97, 57, 32, 16, 26, 26,
79, 33, 27, 98, 66],
        [88, 36, 68, 87, 57, 62, 20, 72, 03, 46, 33, 67, 46, 55, 12,
32, 63, 93, 53, 69],
        [04, 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, 04, 36, 16],
        [20, 73, 35, 29, 78, 31, 90, 01, 74, 31, 49, 71, 48, 86, 81,
16, 23, 57, 05, 54],
        [01, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52,
01, 89, 19, 67, 48]]

def down_right_product(row, col):
    if (row>len(data)-3) or (col>len(data[row])-3):
        return 1
    else:
        return reduce(lambda x,y:x*y, [data[row+each][col+each] for
each in range(4)])

def down_left_product(row, col):
    if (row>len(data)-3) or (col<3):
        return 1
    else:
        return reduce(lambda x,y:x*y, [data[row-each][col-each] for
each in range(4)])

def right_product(row, col):
    if col>len(data[row])-3:
        return 0
    else:
        return reduce(lambda x,y:x*y, [data[row][i] for i in range(col, col+4)])

def down_product(row, col):
    if row>len(data)-3:
        return 1
    else:
        return reduce(lambda x,y:x*y, [data[i][col] for i in range(row, row+4)])


def main():
    prod = 1
    source = []
    for row in range(len(data)):
        for col in range(len(data[row])):
            #print col, row
            if right_product(row, col) > prod:
                prod = right_product(row, col)
                source = [data[row][i] for i in range(col, col+4)]

            if down_product(row, col) > prod:
                prod = down_product(row, col)
                source = [data[i][col] for i in range(row, row+4)]

            if down_right_product(row, col) > prod:
                prod = down_right_product(row, col)
                source = [data[row+each][col+each] for each in range(4)]

            if down_left_product(row, col) > prod:
                prod = down_left_product(row, col)
                source = [data[row-each][col-each] for each in range(4)]
    print 'Maximum product is %d from %l' %(prod, source)



if __name__ == '__main__':
    main()


 THE ERROR
>>
>>
>> Traceback (most recent call last):
>>
>>    File "C:\Windows.old\Users\Abasiemeka\Abasiemeka\GOOGLE
>> University\Python\Python Code\MyCode\Project Euler code\Project Euler
>> answer 11.py", line 84, in <module>
>>
>>      main()
>>
>>    File "C:\Windows.old\Users\Abasiemeka\Abasiemeka\GOOGLE
>> University\Python\Python Code\MyCode\Project Euler code\Project Euler
>> answer 11.py", line 64, in main
>>
>>      if right_product(row, col) > prod:
>>
>>    File "C:\Windows.old\Users\Abasiemeka\Abasiemeka\GOOGLE
>> University\Python\Python Code\MyCode\Project Euler code\Project Euler
>> answer 11.py", line 49, in right_product
>>
>>      return reduce(lambda x,y:x*y, [data[row][i] for i in range(col, col+4)])
>>
>> IndexError: list index out of range
>>
>>
>
> The usual way to chase a problem like this is to place print statements
> in appropriate places in your code.  The for loops in your main function
> look like a good starting point to me.  Please try that and see what you
> come up with.
>
> --
> Cheers.
>
> Mark Lawrence.


I had inserted the print statements (now commented out in the main()
function) and found that the error occurs when it attempts to do
right_product(row, col) for (row = 0, col = 18) I had anticipated this
and added the "if col>len(data[row])-3:" statement in the
right_product(row, col) function. It appears this statement was
skipped for some puzzling reason. So the question is why did it not
execute the if statement? And if it did why did it not return rather
than try to execute the else line (which gave the error).
Thanks for your input,

Abasiemeka
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to