• Problem 11


    Problem 11

    # Problem_11.py
    """
    In the 20×20 grid below, four numbers along a diagonal line have been marked in red.
    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
    The product of these numbers is 26 × 63 × 78 × 14 = 1788696.
    What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?
    四个毗邻的、同一方向的(上、下、左、右、斜)数字的最大乘积是什么?
    """
    
    
    def multi(li):
        tot = 1
        for item in li:
            tot *= item
        return tot
    
    
    raw = '''
    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
    '''
    # 处理数据
    raw = raw.split()
    matrix = []
    for i in range(20):
        line = raw[20*i:20+20*i]
        for index in range(20):
            line[index] = int(line[index])
        matrix.append(line)
    
    greatest_adjacent = []
    greatest_product = 0
    size = 4
    
    for row in range(20):
        for col in range(20):
            right_product, down_product, right_dia_product, left_dia_product = 0, 0, 0, 0
            right_adjacent, down_adjacent, right_dia_adjacent, left_dia_adjacent = [], [], [], []
            if col <= 16:
                right_adjacent = matrix[row][col:col+size]
                right_product = multi(right_adjacent)
            if row <= 16:
                down_adjacent = [i[col] for i in matrix[row:row+size]]
                down_product = multi(down_adjacent)
            if col <= 16 and row <= 16:
                for i in range(size):
                    right_dia_adjacent.append(matrix[row+i][col+i])
                right_dia_product = multi(right_dia_adjacent)
            if col >= 3 and row <= 16:
                for i in range(size):
                    left_dia_adjacent.append(matrix[row+i][col-i])
                left_dia_product = multi(left_dia_adjacent)
            result = dict(zip([right_product, down_product, right_dia_product, left_dia_product], [right_adjacent, down_adjacent, right_dia_adjacent, left_dia_adjacent]))
            compare_product = max(result)
            if greatest_product < compare_product:
                greatest_product = compare_product
                greatest_adjacent = result[compare_product]
    
    print(greatest_adjacent, greatest_product)
    Resistance is Futile!
  • 相关阅读:
    AE计算Tin的体积
    Create a Geometric Network and Set Flow Direction
    为什么查询的时候只能获取FID字段
    美国白蛾入侵北京 GIS兵法破解危局
    字段排序
    如何对ArcSDE空间网格大小进行优化?
    How to create a geodatabase network dataset
    抗击海冰 地理信息系统来帮忙
    控件图片生成网站
    Pascal 之(冒泡排序)
  • 原文地址:https://www.cnblogs.com/noonjuan/p/10958962.html
Copyright © 2020-2023  润新知