已有 0 位网友发表了一针见血的评论,你还等什么?
-
8月26日
-
一直有个疑问,到底“九宫格图案解锁总共能绘出多少种图案?IOS很少用到,除了支付宝、QQ之外,安卓上面是所谓原创的解锁手势。
需要满足的要求有:
至少经过四个点;不能重复经过同一个点;路径上的中间点不能跳过(如从1到3一定会经过2);如果中间的点是之前已经用过的,那么这个点就可以被跳过(如213,因为2已经被用过,1就可以越过2与3连接,132是不允许的)。
知乎上有个牛逼哥们linkwun 很精简的做答,树梢老李只能表示不明觉厉。
linkwun 用python写了段代码,先计算出所有大于四个数字的所有排列组合,然后从中剃除穿过中间那个数字的组合,剩下的既为符合要求的代码。例如13组合是不可能存在的,因为它会穿过2,19组合也不可能存在,因为它会穿过5,总共有16个这样的组合。fromitertoolsimport*
impossible={'13':'2',
'46':'5',
'79':'8',
'17':'4',
'28':'5',
'39':'6',
'19':'5',
'37':'5',
'31':'2',
'64':'5',
'97':'8',
'71':'4',
'82':'5',
'93':'6',
'91':'5',
'73':'5'}
defcounts():
iterlst=chain(*(permutations('123456789',i)foriinrange(4,10)
))count=0
foriiniterlst:
stri=''.join(i)
fork,
vinimpossible.items():ifkinstriandvnotinstri[:stri.find(k)]:
break
else:
count+=1
returncount
print(counts())
但是假如中间这个数字已经用过了,是可以穿过的,比如213,2已经用过了,1是可以穿过2与3连接的。如此筛选以后,就得到正确答案389112了。
…………………………
看完之后,以我基本c的知识,感觉python是厉害啊,这拿C写得写多少行……
标签:手势解锁 智能手机
除非注明,文章均为树梢老李原创,转载请注明本文地址:http://jiaweili.com/post/119.html
- 评论:(0)
- 隐藏评论
【评论很精彩,欢迎吐槽。定期精选优质评论发红包】