作者content71 (罗莉饲养中...)
看板Python
标题[问题] 特殊宾果的问题
时间Fri Apr 15 01:38:11 2016
请教各位先进,
给你一个 list, 里面有六个 sub-list,
每个 sub-list 里面有六个数字(范围从1-9)
list 每次随机生成
举例:
[ [ 3, 4, 9, 2, 4, 6],
[ 4, 4, 4, 9, 3, 2],
[ 1, 4, 9, 8, 3, 7],
[ 6, 4, 2, 1, 3, 8],
[ 5, 6, 1, 9, 2, 4],
[ 8, 8, 8, 8, 8, 8] ]
目标是计算出连线数,
横排有3个或以上相同数字的话连线数+1
直排有3个或以上相同数字的话连线数+1
以例子来算的话,连线数是4条 (直的、横的分开算)
我的想法是先 loop 过 sub-list, 再 loop 过每个数字
可是这样横排好解,直排要怎麽计算呢?
ps.我在工作了,这真的不是学校作业~谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 116.87.43.238
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1460655494.A.F87.html
※ 编辑: content71 (116.87.43.238), 04/15/2016 01:38:55
1F:推 tiefblau: loop过index 这我看跟大一作业有九成像 拜托不要跟我说 04/15 02:25
→ tiefblau: 你是以写程式为职业......
04/15 02:25
我是转行的网页工程师,其实平常没用到什麽逻辑运算,
如果问题蠢了些不好意思~
这题是一个线上的练习题
3F:推 Yshuan: 最简单就是enumerate抓index吧 直排跟横排就内外颠倒 04/15 10:06
所以解题的重点是transpose matrix?
目的是3个或以上相同数字的话连线数+1
这样算的话如果有一排6个相同数字,连线数会+4
5F:→ yjc1: x=np.array(L) 04/16 09:46
6F:→ yjc1: print (sum(sum(v>=3 for v in Counter(p).values()) 04/16 09:47
7F:→ 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
但程式有点亢长
8F:→ bigpigbigpig: 你可以用 itertools 模组的 groupby() :) 04/17 21:10
groupby()的功能我了解,但要怎麽应用在这呢?
9F:→ bigpigbigpig: if any(len(list(g)) >= 3 for k,g in groupby( 04/17 23:04
10F:→ bigpigbigpig: bingo_line )) 04/17 23:04
11F:→ yjc1: sum(any(len(list(g))>=3 for k, g in groupby(v)) 04/17 23:28
12F:→ 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
13F:→ yjc1: 把 any 改成 sum 04/18 17:40
改成sum之後就没有问题了:)
太威了请受我一拜
14F:推 jenny2921: return cal_cnt(arrs) + cal_cnt( zip(*arrs) ) 04/20 00:59
15F:→ jenny2921: from collections import Counter 04/20 01:07
16F:→ jenny2921: def cal_cnt(arrs): 04/20 01:07
17F:→ jenny2921: t=0 04/20 01:15
18F:→ jenny2921: for arr in arrs: 04/20 01:15
19F:→ jenny2921: t+=sum(map( lambda x:x>=3, Counter(arr).values() )) 04/20 01:15
20F:→ jenny2921: 原谅我推文推不出indent XD 04/20 01:16
21F:→ jenny2921: 喔喔 现在才看到上面有人用Counter了~原来要连续啊 04/20 01:18
感谢回覆
其实想像他是宝石方块的游戏,三个或以上相连就可以消掉
我猜是题目的本意
※ 编辑: content71 (116.87.43.238), 04/21/2016 04:15:29