zoukankan      html  css  js  c++  java
  • 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!
  • 相关阅读:
    ckplayer-超酷网页视频播放器的使用
    我的第一篇博文(Winfrom下WebBrowser控件的使用)
    estore商城案例(四、五)------添加购物车&购物车显示/生成订单&在线支付
    estore商城案例(三)------Filter过滤器:自动登录&权限管理
    estore商城案例(二)------登录&添加商品&商品列表(下)
    estore商城案例(二)------登录&添加商品&商品列表(上)
    myeclipse2014在线安装aptana
    estore商城案例(一)------用户注册&邮件激活(下)
    estore商城案例(一)------用户注册&邮件激活(上)
    使用指南
  • 原文地址:https://www.cnblogs.com/noonjuan/p/10958962.html
Copyright © 2011-2022 走看看