iT邦幫忙

4

[自學Python紀錄] HackerRank 新手30天挑戰-Day11

Day 11: 2D Arrays (陣列)

輸入一個6*6數字的陣列A,每個數字間都有用一個空格隔開,A可以拆解成16個沙漏(hourglass)子集合,由7個數字組合,如下:
a b c
 d
e f g
輸出16個沙漏中7個數字總和最大值

輸入樣本

1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0

輸出樣本

19  

其中最大值(19)為下列沙漏:
2 4 4
 2
1 2 4
  

我的解答

arr = []
for _ in range(6): #歷遍6次(因共6行)
    arr.append(list(map(int, input().split()))) #將陣列儲存到arr
        #將每行以空格隔開的數字轉換為整數,因為map返回迭代器,須再轉為列表
        #以樣本為例,此時arr = [[1, 1, 1, 0, 0, 0], [0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0], [0, 0, 2, 4, 4, 0], [0, 0, 0, 2, 0, 0], [0, 0, 1, 2, 4, 0]]

a = []
for i in range(0,4): #歷遍arr第0-4個元素
    for j in range(0,4): #歷遍arr第0-4個元素的第0-4個數字
        b = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2]
        a += [b] #將每個沙漏的總和儲存到a,共16個
print(max(a)) #印出沙漏總和的最大值

輸入:

0 9 4 5 6 4
4 5 6 8 7 2
1 0 4 6 2 7
6 5 4 2 1 0
6 8 9 5 3 3
3 5 6 8 4 2

輸出:
39


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
一級屠豬士
iT邦大師 1 級 ‧ 2020-05-28 15:35:02

我很好奇一件事,這是你自己想的?還是去找答案的?

Pondudu iT邦新手 5 級 ‧ 2020-05-28 15:43:56 檢舉

...謝謝邦友關心,小女子只是記錄自己解題過程,若有參考別人作法、文章或是請教別人問題,也會一併記錄,希望有解答到你的問題

好一個 希望有解答到你的問題.

gary168 iT邦新手 5 級 ‧ 2020-06-02 23:10:51 檢舉

新手完全看不懂>"<
可以麻煩您詳解這段麼
for i in range(0,4): #歷遍arr第0-4個元素
for j in range(0,4): #歷遍arr第0-4個元素的第0-4個數字
b = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2]
a += [b] #將每個沙漏的總和儲存到a,共16個

以例子而言

[[1, 1, 1, 0, 0, 0], [0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0], [0, 0, 2, 4, 4, 0], [0, 0, 0, 2, 0, 0], [0, 0, 1, 2, 4, 0]]

b=arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2]

是為了達成這樣的結果?
1 1 1 1 1 0 1 0 0 0 0 0
1 0 0 0
1 1 1 1 1 0 1 0 0 0 0 0

0 1 0 1 0 0 0 0 0 0 0 0
1 1 0 0
0 0 2 0 2 4 2 4 4 4 4 0

1 1 1 1 1 0 1 0 0 0 0 0
0 2 4 4
0 0 0 0 0 2 0 2 0 2 0 0

0 0 2 0 2 4 2 4 4 4 4 0
0 0 2 0
0 0 1 0 1 2 1 2 4 2 4 0

還是純粹每個行加總得最大

我要留言

立即登入留言