android解锁种数代码哪位python大神精通望指点
这个是链接 How many combinations does Android 9 point unlock have?
min_seq_length = 4
def Middle(a, b):
"""Return the node between a and b if there is one, or None."""
if (a+b)%2 != 0:
return None
mid = (a+b)/2
if mid == 5:
return mid
if a%3 == b%3:
return mid
if (a-1)/3 == (b-1)/3:
return mid
return None
def NextValid(base):
"""Generate valid moves j+1 given a sequence of moves 1..j."""
if len(base) >= 9:
return
if len(base) == 0:
for i in xrange(1,10):
yield i
return
for i in xrange(1,10):
if not i in base:
mid = Middle(i, base[-1])
if mid is None or mid in base:
yield i
def Sequences(base):
"""Generator for valid sequences of moves."""
if len(base) >= min_seq_length:
yield list(base)
for n in NextValid(base):
for s in Sequences(base + [n]):
yield s
seqs_of_length = [0]*10
for seq in Sequences([]):
# if len(seq) == 9:
# print seq
seqs_of_length[len(seq)] += 1
print 'Sequences by length:', seqs_of_length
print 'Total number of sequences:', sum(seqs_of_length)
这段代码共有三个函数,连带main在内就是4个代码块,从下往上依次为:
1 main
for seq in Sequences([]):中Sequence([])是以一个点都没有的空状态作为初始状态传入Sequence中。Sequence会返回一个生成器,该生成器可以生成所有节点数大于min_sqe_length的连法。
下面一行则是判断当前遍历到的方法的步骤数,然后将对应步骤数的计数器加1.
最后两行分别输出每一种长度对应的连法种数,以及所有长度的总数。
2 Sequence函数
Sequence实际上是递归函数。base参数就是当前所对应的连法,下面的if语句会做一次判断,如果base的长度达于最小值则将该情况输出,否则略过,直接进入下一步。
下一步首先通过NextValid找到下一步可以连的点的集合,然后遍历该集合对于每一个点都将它与base合并后递归调用Sequence。实质上就是一个遍历树的过程。
需要注意的是Sequence中通过调用yield进行输出可能难以理解,可以等价的转化为list就容易理解了。每个Sequence函数实际上就是讲起调用的子函数所返回的所有list合并后并将自己的base加入,生成一个新的list返回上一级。
3 NextValid函数
该函数可以根据已经连过的点集合找到可以连的下一个点集。
首先如果base长度为9直接返回,因为9个点都连过了。
然后如果base长度为0则返回1-9所有的点。
最后对于其他情况,遍历1-9,找出所有i并返回,i不在base集合中且Middle(i, base[-1])不存在。换句话说就是i不曾被连过且i与之前最后一个点形成的连线中不存在未被连过的点。
4 Middle函数
作用为判断指定两点之间是否有第三点。如果存在第三点且第三点没有被不在之前经过的点之中,那么ab两点是无法直连的。这里用了多种判断,包括若第三点存在则ab之和必为偶数,若ab模3同余则ab在同一列等方法。
玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd19011.html
相关文章 Recommend
- • 关于在android平台使用Python代码的小问题
- • android获得农历时间python有什么开源库或者包吗
- • 保存多用户信息用python哪种数据类型适合
- • Python程序员有尝试在Android平台设备做开发工作的
- • Python能否控制android系统手机硬件
- • Django post与android客户端连接报500错误怎么破解
- • Python与android应用实现实时消息推送的方法是?
- • python 收到的数据是b'\x81\x84t\xdeL\x16\x00\xbb这种数据
- • python编程语言能在android系统下做为shell应用可行
- • 最新Android Studio 2.0更新了哪些更特性
- • google新物联网系统Android Things发布启动运行流程详
- • Android 新机下月推出 推送方案技术选型
必知PYTHON教程 Must Know PYTHON Tutorials
- • python 解释器
- • python idle
- • python dir函数
- • python 数据类型
- • python type函数
- • python 字符串
- • python 整型数字
- • python 列表
- • python 元组
- • python 字典
- • python 集合
- • python 变量
- • python print
- • python 函数
- • python 类定义
- • python import
- • python help
- • python open
- • python 异常处理
- • python 注释
- • python continue
- • python pass
- • python return
- • python global
- • python assert
- • python if语句
- • python break
- • python for循环
- • python while循环
- • python else/elif
- • lambda匿名函数
必知PYTHON模块 Must Know PYTHON Modules
- • os 模块
- • sys 模块
- • re 正则表达式
- • time 日期时间
- • pickle 持久化
- • random 随机
- • csv 模块
- • logging 日志
- • socket网络通信
- • json模块
- • urlparse 解析URL
- • urllib 模块
- • urllib2 模块
- • robotparser 解析
- • Cookie 模块
- • smtplib 邮件
- • Base64 编码
- • xmlrpclib客户端
- • string 文本
- • Queue 线程安全
- • math数学计算
- • linecache缓存
- • threading多线程
- • sqlite3数据库
- • gzip压缩解压
最新内容 NEWS
- • django app提供pv信息的方法是什么
- • Django项目版本升级如何操作?
- • django较多数据传递如何优雅的呈现
- • django1.7获取参数问题求助
- • Django1.7使用内置comment遇到问题
- • python mysql数据库做insert操作时报_mysql_ex
- • 关于python mysql的duplicate insert机制的疑问
- • pymongo使用insert函数批量插入被中断要怎么
- • Python程序员解决棘手问题的常用库
- • 求助关于restfull api接口几个问题
图文精华 RECOMMEND
-
django1.7获取参数问题求助
-
Python程序员解决棘手问题的常用库
-
求问str()同__str__原理上有什么不同
-
scrapy框架里面用link extractor怎么能
-
python {}.fromkeys创建字典append添加操
-
python3 类型Type str doesn't support th
热点文章 HOT
- 学习Python有什么好的书籍推荐?
- Python匿名函数 Lambda表达式作用
- Python与Java、C、Ruby、PHP等编程语言有什么
- Python 正则中文网页字符串提取问题
- 如何为实时性应用存取经纬度?django my
- 想用python做个客户端,在二维码登录这个地
- 有让IDE可识别Python函数参数类型的方法吗
- Python字符串转换成列表正则疑问