小朋友们好,大朋友们好!
我是猫妹,一名爱上Python编程的小学生。
欢迎和猫妹一起,趣味学Python。
今日主题
今天呢,我们学习一点关于魔方的知识。
魔方,又叫鲁比克方块,最早是由匈牙利布达佩斯建筑学院厄尔诺·鲁比克教授于1974年发明的机械益智玩具。

通常意义下的魔方,是指狭义的三阶魔方。
三阶魔方形状通常是正方体,由有弹性的硬塑料制成。
常规竞速玩法是将魔方打乱,然后在最短的时间内复原。
广义的魔方,指各类可以通过转动打乱和复原的几何体。
魔方与华容道、法国的单身贵族(独立钻石棋)并称为智力游戏界的三大不可思议。
你玩过魔方吗?
它虽然小巧,但是可以变化出很多种组合。
你手头有魔方吗?
如果有的话,多长时间可以将其还原呢?

咱们现在这个年代啊,真是太幸福了,买什么东西都很方便。
足不出户,只需动动手指,东西就会快递到家门口。
比起猫爸那个年代,真是太方便了,一个天上,一个地上,差别就是这么大。
猫妹幼儿园就知道有个东西叫魔方了,并且买过,也拿在手里把玩过。
猫爸呢?
高中时候才接触过魔方,没看错,就是高中。
他的同桌不知从哪里弄来个魔方,玩得不亦乐乎,除了正常的旋转,把打乱图形还原外,还可以把它拆零碎了又组装好,可谓炉火纯青。
受到同桌的诱惑,猫爸也买了一个。
凭着直觉,也可以将打乱的魔方再次还原,不过不会拆装。
如今,猫爸这种直觉退化了。
毕竟很久不玩了,他只能勉强还原一个面。

看着桌上这个被猫妹打乱的魔方,猫爸决定还原它。
不用直觉,用科学方法还原。
于是,有了今天这篇文章。
魔方常识
正阶魔方
正阶魔方有二阶,三阶,四阶
二阶魔方
二阶魔方的英文名字叫作PocketRubik'sCube或MiniCube,为2×2×2的立方体结构。本身只有8个角块,没有其他结构的方块。
结构与三阶魔方相近。

三阶魔方
三阶魔方的英文官方名字叫作Rubik'sCube,也就是用鲁比克教授的名字命名的,是当前最普遍的魔方种类。
它每个边有三个方块,官方版本魔方边长为57毫米,三阶魔方的总变化数是(8!×38×12!×212)/(2×2×3)=43,252,003,274,489,856,000或者约等于4.3x1019。
三阶魔方由一个连接着六个中心块的中心轴以及8个角块,12个棱块构成,当它们连接在一起的时候会形成一个整体,并且任何一面都可水平转动而不影响到其他方块。
在2011年3月出现了新型三阶——面包三阶,打破了三阶魔方立方体的常规设计。

其他阶魔方
四阶魔方的英文名字叫作Rubik'sRevenge,直译过来是“魔方的复仇”。
五阶魔方的英文名字叫作Professor'sCube,直译过来是“专家(玩)的魔方”
此处省略若干阶魔方
十七阶魔方于2017年首次量产。
截止到2017年,最高阶的魔方为非官方的33阶魔方。
其他这些,不太常见。

异型魔方
异型魔方相对原始魔方的变化较大,但是原理基本上相同。
不少异形魔方都可以使用正阶魔方的复原方法或相似思路进行复原。



这些,也不太常见。
我们以常见的三阶魔方来学习。
魔方术语

魔方各层以英文首字母指代:
右层:R(Right)
左层:L(Left)
顶(上)层:U(Up)
底(下)层:D(Down)
正(前)层:F(Front)
背(后)层:B(Back)
魔方转动:
小写的r、l、u、d、f、b代表转动两层
另外M、E、S代表不同面的中间层,x、y、z代表魔方整体按R、U、F转动
转动方向:
顺时针转动90度,直接写各层字母
逆时针转动90度,在各层字母后缀(')
旋转180度,在各层字母后缀(2)
请看图:

Kociemba
有人写了一个Kociemba的python库,输入魔方的各面颜色,直接就求解了。
该代码在github上已经开源,需要研究其中算法的朋友,可以在github上搜索kociemba。
使用很简单的,输入各个面的每个块的颜色,自动生成还原方式:


上面是一位网友的测试数据。
程序使用没有难度,这个库的算法倒是值得研究研究。
今天,咱们通过另外一种方式来还原魔方。
一个神奇的网站
猫妹今天呢
在猫爸的启迪下,用一个神奇的网站来还原魔方。
网站打开后长这个样子:

这里面有二阶、三阶等魔方的还原方式。
我们直接看三阶,毕竟手里有一个三阶魔方嘛!
之前用二阶魔方也还原过,可以的。


第二步:把目前魔方的颜色输入到上图魔方中。



第四步:大功告成

屏幕前的你,学会了吗?
如果你手头有个三阶魔方,或者二阶魔方,不妨试试哦!
网址的话,可以在公众号(和猫妹学Python)后台回复2023
进阶玩法
输入每个色块,有些繁琐。
有网友在上述基础上,用摄像头扫码魔方每个面,识别每个色块的颜色。
这样不用手动输入了,电脑拍照输入色块,这样更简单了。
虽然使用简单,但是摄像头识别色块,程序还是有一些工作量的。

好了,我们今天就学到这里吧!
如果遇到什么问题,咱们多多交流,共同解决。
我是猫妹,咱们下次见!