Python练手项目:计算机自动还原魔方(2)还原顶部

20 篇文章 3 订阅
17 篇文章 2 订阅

上文介绍了计算机自动还原顶部十字,情况比较复杂,一旦完成,后续的步骤就简单一些了。本文在上文的基础上,还原魔方顶部为蓝色面,在顶部蓝色十字的前提下,要求将顶部四个棱角还原为蓝色棱角,棱角的其余两面需要与所在面的中心色一致,如下图所示:


 

沿用上文的化简方法,还原顶部蓝面比还原顶部蓝色十字简单多了,只需要考虑R面的左上和左下角,采用《软件工程》中介绍的判定表分析方法,分析如下:

状态编码动作
左下角有蓝色,其余两色与R和F面中心色一致01R'D'RD(重复做)
左下角有蓝色,其余两色与R和F面中心色不一致02D‘ right
左上角有蓝色,三色与U、R和F面中心色一致10right
左上角有蓝色,三色与U、R和F面中心色相同,但顺序不一致11R'D'RD(重复做)
左上角有蓝色,其余亮色与R和F面颜色不一致12R'D'R right
左上和左下角都没有蓝色right

将判定表用Python字典实现如下:

conner_action_dict={'01':['Rp', 'Dp','R','D'],
                    '02':['Dp', 'right'],
                    '10':['right'],
                    '11':['Rp', 'Dp','R','D'],
                    '12':['Rp', 'Dp','R','right']
                    }

算法如下:

def 还原upper面():
    while not 蓝色upper面():
        coners_list=计算棱角颜色列表() #计算左上、下角编码
        if len(coners_list)==0: #左、上下角无蓝色
            right()
            continue
        conner =coners_list[0] #左上和左下都有蓝色,只取1个(左下优先)
        command_list = conner_action_dict[conner] #查字典获得动作列表
        if conner[1]=='1':
            while not 左上角到位():  #重复执行公式,直到左上角三色到位
                for command in command_list:
                    eval(command)()
        else:
            for command in command_list:
                eval(command)()

运行结果:

1)打乱魔方

2)还原顶部蓝色十字

3)还原顶部蓝面

 离我们的目标,还原整个魔方不远了!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值