|
| 1 | +#!/usr/bin/env python |
| 2 | +# Copyright 2008-2010 Isaac Gouy |
| 3 | +# Copyright (c) 2013, 2014, Regents of the University of California |
| 4 | +# Copyright (c) 2017, 2019, Oracle and/or its affiliates. |
| 5 | +# All rights reserved. |
| 6 | +# |
| 7 | +# Revised BSD license |
| 8 | +# |
| 9 | +# This is a specific instance of the Open Source Initiative (OSI) BSD license |
| 10 | +# template http://www.opensource.org/licenses/bsd-license.php |
| 11 | +# |
| 12 | +# Redistribution and use in source and binary forms, with or without |
| 13 | +# modification, are permitted provided that the following conditions are met: |
| 14 | +# |
| 15 | +# Redistributions of source code must retain the above copyright notice, this |
| 16 | +# list of conditions and the following disclaimer. |
| 17 | +# |
| 18 | +# Redistributions in binary form must reproduce the above copyright notice, |
| 19 | +# this list of conditions and the following disclaimer in the documentation |
| 20 | +# and/or other materials provided with the distribution. |
| 21 | +# |
| 22 | +# Neither the name of "The Computer Language Benchmarks Game" nor the name of |
| 23 | +# "The Computer Language Shootout Benchmarks" nor the name "nanobench" nor the |
| 24 | +# name "bencher" nor the names of its contributors may be used to endorse or |
| 25 | +# promote products derived from this software without specific prior written |
| 26 | +# permission. |
| 27 | +# |
| 28 | +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| 29 | +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 30 | +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 31 | +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE |
| 32 | +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 33 | +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| 34 | +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| 35 | +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| 36 | +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 37 | +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 38 | + |
| 39 | +#runas solve() |
| 40 | +#pythran export solve() |
| 41 | +# 12/31/13 modified for benchmarking by Wei Zhang |
| 42 | + |
| 43 | +from java.util import ArrayList |
| 44 | + |
| 45 | +NUMS = ArrayList() |
| 46 | + |
| 47 | +for pyline in [ |
| 48 | + [ 8, 2,22,97,38,15, 0,40, 0,75, 4, 5, 7,78,52,12,50,77,91, 8,], |
| 49 | + [49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48, 4,56,62, 0,], |
| 50 | + [81,49,31,73,55,79,14,29,93,71,40,67,53,88,30, 3,49,13,36,65,], |
| 51 | + [52,70,95,23, 4,60,11,42,69,24,68,56, 1,32,56,71,37, 2,36,91,], |
| 52 | + [22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80,], |
| 53 | + [24,47,32,60,99, 3,45, 2,44,75,33,53,78,36,84,20,35,17,12,50,], |
| 54 | + [32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70,], |
| 55 | + [67,26,20,68, 2,62,12,20,95,63,94,39,63, 8,40,91,66,49,94,21,], |
| 56 | + [24,55,58, 5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72,], |
| 57 | + [21,36,23, 9,75, 0,76,44,20,45,35,14, 0,61,33,97,34,31,33,95,], |
| 58 | + [78,17,53,28,22,75,31,67,15,94, 3,80, 4,62,16,14, 9,53,56,92,], |
| 59 | + [16,39, 5,42,96,35,31,47,55,58,88,24, 0,17,54,24,36,29,85,57,], |
| 60 | + [86,56, 0,48,35,71,89, 7, 5,44,44,37,44,60,21,58,51,54,17,58,], |
| 61 | + [19,80,81,68, 5,94,47,69,28,73,92,13,86,52,17,77, 4,89,55,40,], |
| 62 | + [ 4,52, 8,83,97,35,99,16, 7,97,57,32,16,26,26,79,33,27,98,66,], |
| 63 | + [88,36,68,87,57,62,20,72, 3,46,33,67,46,55,12,32,63,93,53,69,], |
| 64 | + [ 4,42,16,73,38,25,39,11,24,94,72,18, 8,46,29,32,40,62,76,36,], |
| 65 | + [20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74, 4,36,16,], |
| 66 | + [20,73,35,29,78,31,90, 1,74,31,49,71,48,86,81,16,23,57, 5,54,], |
| 67 | + [ 1,70,54,71,83,51,54,69,16,92,33,48,61,43,52, 1,89,19,67,48,], |
| 68 | +]: |
| 69 | + jline = ArrayList() |
| 70 | + for n in pyline: |
| 71 | + jline.add(n) |
| 72 | + NUMS.add(jline) |
| 73 | + |
| 74 | + |
| 75 | +def seqs(nums, row, col): |
| 76 | + if row + 4 <= len(nums): yield list(nums[i][col] for i in range(row, row+4)) |
| 77 | + if col + 4 <= len(nums[row]): yield list(nums[row][i] for i in range(col, col+4)) |
| 78 | + if row + 4 <= len(nums) and col + 4 <= len(nums[row]): yield list(nums[row+i][col+i] for i in range(0,4)) |
| 79 | + if row + 4 <= len(nums) and col >= 3: yield list(nums[row+i][col-i] for i in range(0,4)) |
| 80 | + |
| 81 | + |
| 82 | +def product(seq): |
| 83 | + n = 1 |
| 84 | + for x in seq: |
| 85 | + n = n * x |
| 86 | + return n |
| 87 | + |
| 88 | + |
| 89 | +def list_seqs(nums): |
| 90 | + for row in range(0, len(nums)): |
| 91 | + for col in range(0, len(nums[row])): |
| 92 | + for seq in seqs(nums, row, col): |
| 93 | + yield seq |
| 94 | + |
| 95 | + |
| 96 | +def solve(): |
| 97 | + return _max(product(seq) for seq in list_seqs(NUMS)) |
| 98 | + |
| 99 | + |
| 100 | +# test |
| 101 | +def _max(iterator): |
| 102 | + max = None |
| 103 | + for i in iterator: |
| 104 | + if max is None: |
| 105 | + max = i |
| 106 | + if i > max: |
| 107 | + max = i |
| 108 | + return max |
| 109 | + |
| 110 | + |
| 111 | +def main(iteration): |
| 112 | + for i in range(iteration): |
| 113 | + solve() |
| 114 | + |
| 115 | + return solve() |
| 116 | + |
| 117 | + |
| 118 | +def measure(num): |
| 119 | + result = main(num) |
| 120 | + print('max: ', result) |
| 121 | + |
| 122 | + |
| 123 | +def __benchmark__(num=10000): |
| 124 | + measure(num) |
0 commit comments