小朋友们好,大朋友们好!
我是猫妹,一名爱上Python编程的小学生。
欢迎和猫妹一起,趣味学Python。
今日主题
今天呢,我们学习一点关于魔方的知识。
魔方,又叫鲁比克方块,最早是由匈牙利布达佩斯建筑学院厄尔诺·鲁比克教授于1974年发明的机械益智玩具。
![](https://i-blog.csdnimg.cn/blog_migrate/255365a0405c0b0e854e6085d4a32d1c.png)
通常意义下的魔方,是指狭义的三阶魔方。
三阶魔方形状通常是正方体,由有弹性的硬塑料制成。
常规竞速玩法是将魔方打乱,然后在最短的时间内复原。
广义的魔方,指各类可以通过转动打乱和复原的几何体。
魔方与华容道、法国的单身贵族(独立钻石棋)并称为智力游戏界的三大不可思议。
你玩过魔方吗?
它虽然小巧,但是可以变化出很多种组合。
你手头有魔方吗?
如果有的话,多长时间可以将其还原呢?
![](https://i-blog.csdnimg.cn/blog_migrate/0c38de644cca27a76f37b7b05073b224.jpeg)
咱们现在这个年代啊,真是太幸福了,买什么东西都很方便。
足不出户,只需动动手指,东西就会快递到家门口。
比起猫爸那个年代,真是太方便了,一个天上,一个地上,差别就是这么大。
猫妹幼儿园就知道有个东西叫魔方了,并且买过,也拿在手里把玩过。
猫爸呢?
高中时候才接触过魔方,没看错,就是高中。
他的同桌不知从哪里弄来个魔方,玩得不亦乐乎,除了正常的旋转,把打乱图形还原外,还可以把它拆零碎了又组装好,可谓炉火纯青。
受到同桌的诱惑,猫爸也买了一个。
凭着直觉,也可以将打乱的魔方再次还原,不过不会拆装。
如今,猫爸这种直觉退化了。
毕竟很久不玩了,他只能勉强还原一个面。
![](https://i-blog.csdnimg.cn/blog_migrate/118935d33956570b1f1f1cf3aebbe5a2.jpeg)
看着桌上这个被猫妹打乱的魔方,猫爸决定还原它。
不用直觉,用科学方法还原。
于是,有了今天这篇文章。
魔方常识
正阶魔方
正阶魔方有二阶,三阶,四阶......
二阶魔方
二阶魔方的英文名字叫作Pocket Rubik's Cube或Mini Cube,为2×2×2的立方体结构。本身只有8个角块,没有其他结构的方块。
结构与三阶魔方相近。
![](https://i-blog.csdnimg.cn/blog_migrate/1af371204af8728daa3bff639b0d821f.jpeg)
三阶魔方
三阶魔方的英文官方名字叫作Rubik's Cube,也就是用鲁比克教授的名字命名的,是当前最普遍的魔方种类。
它每个边有三个方块,官方版本魔方边长为57毫米,三阶魔方的总变化数是(8!×38×12!×212)/(2×2×3)=43,252,003,274,489,856,000或者约等于4.3x1019。
三阶魔方由一个连接着六个中心块的中心轴以及8个角块,12个棱块构成,当它们连接在一起的时候会形成一个整体,并且任何一面都可水平转动而不影响到其他方块。
在2011年3月出现了新型三阶——面包三阶,打破了三阶魔方立方体的常规设计。
![](https://i-blog.csdnimg.cn/blog_migrate/548147a2b508033ebced4e0e43c75cbf.jpeg)
其他阶魔方
四阶魔方的英文名字叫作Rubik's Revenge,直译过来是“魔方的复仇”。
五阶魔方的英文名字叫作Professor's Cube,直译过来是“专家(玩)的魔方”
此处省略若干阶魔方
十七阶魔方于2017年首次量产。
截止到2017年,最高阶的魔方为非官方的33阶魔方。
其他这些,不太常见。
![](https://i-blog.csdnimg.cn/blog_migrate/adabf5fa2711b0295f1c9d97b1f0c32b.png)
异型魔方
异型魔方相对原始魔方的变化较大,但是原理基本上相同。
不少异形魔方都可以使用正阶魔方的复原方法或相似思路进行复原。
![](https://i-blog.csdnimg.cn/blog_migrate/a6a2b1db282e93b9b7884f6f7ea9887c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3ac18dbd03d1103b1363d7656806c09a.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/fb8decfbdaa1c857a96dbd73c069da00.png)
这些,也不太常见。
我们以常见的三阶魔方来学习。
魔方术语
![](https://i-blog.csdnimg.cn/blog_migrate/669b9375fb599ef7204663eaf39c1a87.png)
魔方各层以英文首字母指代:
右层: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)
请看图:
![](https://i-blog.csdnimg.cn/blog_migrate/57b601205ad45ac628aab265f630d65b.png)
Kociemba
有人写了一个Kociemba的python库,输入魔方的各面颜色,直接就求解了。
该代码在github上已经开源,需要研究其中算法的朋友,可以在github上搜索kociemba。
使用很简单的,输入各个面的每个块的颜色,自动生成还原方式:
![](https://i-blog.csdnimg.cn/blog_migrate/7ea26d66a0cf479e73b0a1996e983c55.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f09b3c9866178baff96e04abe7ed27e2.png)
上面是一位网友的测试数据。
程序使用没有难度,这个库的算法倒是值得研究研究。
今天,咱们通过另外一种方式来还原魔方。
一个神奇的网站
猫妹今天呢
在猫爸的启迪下,用一个神奇的网站来还原魔方。
网站打开后长这个样子:
![](https://i-blog.csdnimg.cn/blog_migrate/991749389ca05d9071565d0d3efb1775.png)
这里面有二阶、三阶等魔方的还原方式。
我们直接看三阶,毕竟手里有一个三阶魔方嘛!
之前用二阶魔方也还原过,可以的。
![](https://i-blog.csdnimg.cn/blog_migrate/40913a2c4ac898d0aece5609b13518dd.png)
第一步:我们先点击上图的clear,清空魔方着色。
![](https://i-blog.csdnimg.cn/blog_migrate/c3ca540e5e53831e0f3a949d61e9a350.png)
第二步:把目前魔方的颜色输入到上图魔方中。
![](https://i-blog.csdnimg.cn/blog_migrate/2a4e5512b9ebac4588e02c6f692360cc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8265105707339c4612a7952b3c13d86e.jpeg)
第三步:上图输入完毕后,点击Slove。网站会自动帮我们计算出来还原步骤,如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/2eff9a6b39b79550f6d1364f75ff3a21.png)
第四步:大功告成
![](https://i-blog.csdnimg.cn/blog_migrate/a0f00654f776dec0729eed03d850a661.jpeg)
屏幕前的你,学会了吗?
如果你手头有个三阶魔方,或者二阶魔方,不妨试试哦!
网址的话,可以在公众号(和猫妹学Python)后台回复2023
进阶玩法
输入每个色块,有些繁琐。
有网友在上述基础上,用摄像头扫码魔方每个面,识别每个色块的颜色。
这样不用手动输入了,电脑拍照输入色块,这样更简单了。
虽然使用简单,但是摄像头识别色块,程序还是有一些工作量的。
![](https://i-blog.csdnimg.cn/blog_migrate/5a288159b683ff1ed3424eeec8fa1431.jpeg)
好了,我们今天就学到这里吧!
如果遇到什么问题,咱们多多交流,共同解决。
我是猫妹,咱们下次见!