独学のずぶの素人です。
この問題の結果だけ求めるプログラムを書いたのですが、後になって結果がどの数値から求められたのか
気になり改良しようとしたのですが面倒になりやめました
最初からどのように書いていれば拡張性が高いプログラムを作ることが出来たのでしょうか?
'''
「格子内の最大の積」
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
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 08 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 09 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 09 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 08 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 08 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
上の 20×20 の格子のうち, 上下左右斜めのいずれかの方向で連続する4つの数字の積のうち最大のものはいくつか?
'''
python
1import numpy as np 2 3def right( a, row, column ): 4 tmp = 1 5 for i in range( 4 ): 6 tmp *= a[ row ][ column + i ] 7 return tmp 8 9def under( a, row, column ): 10 tmp = 1 11 for i in range( 4 ): 12 tmp *= a[ row + i ][ column ] 13 return tmp 14 15def bottom_right( a, row, column ): 16 tmp = 1 17 for i in range( 4 ): 18 tmp *= a[ row + i ][ column + i ] 19 return tmp 20 21def upper_right( a, row, column ): 22 tmp = 1 23 for i in range( 4 ): 24 tmp *= a[ row - i ][ column + i ] 25 return tmp 26 27standard_value = 20 28 29a = np.loadtxt('11.txt', delimiter = ' ') 30tmp = 0 31 32for row in range( standard_value ): 33 for column in range( standard_value ): 34 if standard_value-4 >= column: 35 tmp = right( a, row, column ) if tmp < right( a, row, column ) else tmp 36 37 if standard_value-4 >= row: 38 tmp = bottom_right( a, row, column ) if tmp < bottom_right( a, row, column ) else tmp 39 elif row >= 3: 40 tmp = upper_right( a, row, column ) if tmp < upper_right( a, row, column ) else tmp 41 if standard_value-4 >= row: 42 tmp = under( a, row, column ) if tmp < under( a, row, column ) else tmp 43print( int(tmp) ) 44 45#51267216
回答3件
あなたの回答
tips
プレビュー