推 tiefblau: loop過index 這我看跟大一作業有九成像 拜託不要跟我說 04/15 02:25
→ tiefblau: 你是以寫程式為職業......
04/15 02:25
我是轉行的網頁工程師,其實平常沒用到什麼邏輯運算,
如果問題蠢了些不好意思~
這題是一個線上的練習題
推 Yshuan: 最簡單就是enumerate抓index吧 直排跟橫排就內外顛倒 04/15 10:06
所以解題的重點是transpose matrix?
目的是3個或以上相同數字的話連線數+1
這樣算的話如果有一排6個相同數字,連線數會+4
→ yjc1: x=np.array(L) 04/16 09:46
→ yjc1: print (sum(sum(v>=3 for v in Counter(p).values()) 04/16 09:47
→ yjc1: for p in chain(x,x.T))) 04/16 09:48
這個厲害...不過試跑了一下
這code是計算一排同樣數字有三個以上
而不是"連續"的三個以上
也就是一排如果是 4, 4, 2, 3, 4, 4
也會被算成賓果
回報一下結果,利用transpose matrix解出來的答案
http://imgur.com/Kk9PedF
但程式有點亢長
→ bigpigbigpig: 你可以用 itertools 模組的 groupby() :) 04/17 21:10
groupby()的功能我了解,但要怎麼應用在這呢?
→ bigpigbigpig: if any(len(list(g)) >= 3 for k,g in groupby( 04/17 23:04
→ bigpigbigpig: bingo_line )) 04/17 23:04
→ yjc1: sum(any(len(list(g))>=3 for k, g in groupby(v)) 04/17 23:28
→ yjc1: for p in (x,x.T) for v in p) 04/17 23:28
感謝回覆
試跑了一下
無法處理一排裡有兩個賓果的狀況
例如 [8,8,8,3,7,7,7,2,1]
跑出來只會有一個賓果
補充一下,題目還滿機的,隨機給的矩陣大小不是固定6x6
→ yjc1: 把 any 改成 sum 04/18 17:40
改成sum之後就沒有問題了:)
太威了請受我一拜
推 jenny2921: return cal_cnt(arrs) + cal_cnt( zip(*arrs) ) 04/20 00:59
→ jenny2921: from collections import Counter 04/20 01:07
→ jenny2921: def cal_cnt(arrs): 04/20 01:07
→ jenny2921: t=0 04/20 01:15
→ jenny2921: for arr in arrs: 04/20 01:15
→ jenny2921: t+=sum(map( lambda x:x>=3, Counter(arr).values() )) 04/20 01:15
→ jenny2921: 原諒我推文推不出indent XD 04/20 01:16
→ jenny2921: 喔喔 現在才看到上面有人用Counter了~原來要連續啊 04/20 01:18
感謝回覆
其實想像他是寶石方塊的遊戲,三個或以上相連就可以消掉
我猜是題目的本意
※ 編輯: content71 (116.87.43.238), 04/21/2016 04:15:29