问题标签 [rubiks-cube]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
143 浏览

python - Python Rubiks Cube 如何判断两个状态是否相等

我在 Python 中创建了一个魔方,遇到了检查 2 个魔方是否相同的问题。我将立方体的侧面表示为北、东、南、西、前和后。我最初只是让我的函数检查 cube1.north = cube2.north、cube1.south = cube2.south 等,如果所有这些都是真的,那么它们是一样的。这排除了 cube1.north = cube2.south、cube1.south = cube2.north 等的立方体以及它们相等但特定面不完全匹配的许多其他场景。有没有人知道如何在没有大量 if 语句的情况下检查任何 2 个立方体是否相等?

0 投票
2 回答
2804 浏览

java - 魔方旋转算法

我目前正在执行一项任务,以构建一个正常运行的魔方。该程序不需要 GUI。但它必须模拟具有旋转行为的 3 X 3 立方体并提供立方体的图形表示(我将使用扁平字母结构)。我的代码有一个用于制作 Face 的 facet 类(另一个类),然后有一个包含旋转方法的立方体类。

我在创建/选择要使用的算法来准确模拟立方体和所有可能的旋转时遇到问题。我在这个网站上找到了一个解决方案,参考了一篇提出 7 种不同方法的论文(下面的链接)。但是哪种方法最直观/最容易编码?更重要的是,哪个最适合下面概述的行为(在伪代码中)?

我无法理解如何使用任何方法同时考虑每个面上的变化,尤其是在考虑到面旋转的行为(而不是行和列)时。

您将如何在代码中表示魔方?

此伪代码不考虑面部变化。

有没有更好/更简单的方法来做到这一点,与我的伪代码提出的方法不同?我如何解释面部变化?

示例:(正面,1 圈,顺时针)

注意:我倾向于 54 元素向量,但不确定如何操作它。

另外,这是我的第一个问题,所以让我知道是否有问题(信息不足、太多、主题错误等)

谢谢!

注意:这是我正在使用的代码。

刻面类:

面类:

立方体类:

魔方:

0 投票
1 回答
1155 浏览

java - 在java中解决一个魔方

正如标题所说,我正在编写一种用java解决魔方的方法,我遇到了一些困难。我正在尝试实现 Kociemba 的算法,为此我正在关注这里的一篇文章(顺便说一下,具体部分大约是下降的 2/3)。但是,该代码有一个带有条件的 if 语句subgoal reached。我不明白如何检查这一点,因为子目标并没有真正定义。因此,如果有人可以向我解释如何检查立方体是否已达到子目标或提供其他教程,我将非常感激。预先感谢您的帮助。

0 投票
1 回答
365 浏览

c++ - Fix Rotation for 2D Rubik's Puzzle

I'm working on this program that is a simulation for the Grid puzzle. Grid is like a 2- Dimensional version of the Rubik's Cube. Here is the criteria for this puzzle:

  • 6 x 6 grid
  • 2 faces
  • user can rotate columns and rows
  • rotations are 180 degrees
  • consist of two colors

Note: I have used the '*' star character to represent black and 'o' to represent white.

The user enters the side (top, bottom, left or right) and the number of columns or rows they want to rotate, and the simulation will simulate the movement. Please take a look at the grid:enter image description here

When the user rotates, the color changes to the opposite color and CHANGES POSITION according to the rotation.

I have mostly everything done, except the rotation. When the user enters the side and row/ column number, only the color reverses, the placement of the color is not correct.

Here is an example of the rotation:enter image description here

Can you please help me so that the rotations work properly. Thanks a lot in advance.

Here is my class code.

And here is my c++ file that runs the class.

0 投票
0 回答
559 浏览

unity3d - 比 Vuforia 更好的扩展跟踪选择?

我和一个朋友正在尝试开发一个具有非常独特和奇怪概念的应用程序。我有一个魔方,所有的贴纸都被二维码替换了,所以肉眼无法区分它们,但是通过二维码阅读器(还有一点耐心)你可以扫描一张和一张贴纸以显示它实际上是哪种颜色,并使用该系统最终解决魔方。这个想法在立方体社区中被广泛接受,我现在希望通过制作一个可以识别每个贴纸的应用程序来扩展这个想法,使用跟踪插件跟踪它们,并在该贴纸中虚拟着色,这样通过我的镜头智能手机,贴纸有颜色。到目前为止,我已经使用 Vuforia 跟踪插件制作了一个简单版本的应用程序,它产生了非常有希望的结果该应用程序的屏幕截图

不过我的问题是,Vuforia 一次只允许跟踪和绘制 2-3 个贴纸,虽然我之前已经读过 6 个贴纸,但这需要我保持立方体不动。我正在开发一套全新的贴纸,它不是二维码,而是随机图案,希望应用程序更容易识别,但我真正需要的是一个跟踪插件,可以一次跟踪更多贴纸。据我了解,Vuforia 是目前最好的免费跟踪插件,但是否有任何其他跟踪插件可以产生我正在寻找的结果?理想情况下,我想一次跟踪 27 个贴纸,因为这是一次在魔方上可见的最大贴纸数量。但如果这太多了,9 个贴纸,也就是每边的贴纸数量,也可以。任何对跟踪和扩展跟踪有更多了解的人都可以帮助我吗?我没有做这个应用程序,只有贴纸,立方体和概念,所以我不知道如何使用插件。可以同时使用多个插件吗?如果需要的话,我愿意为更好的插件的许可证付费。如果有更好的方法来实现我的想法,我也很乐意听取他们的意见。非常感谢您的宝贵时间

0 投票
1 回答
201 浏览

algorithm - 任何与魔方相关的算法

昨天我有一个有趣的想法。想象一下,你有一个魔方,每个面上已经有相同的颜色。现在,如果我扭曲它一次并且我知道如何扭曲它,我总是可以通过反转此步骤将立方体恢复到原来的状态。如果我扭转两次,我总是可以用最少的两步来恢复立方体。所以我在想,如果我随机扭曲 n 步,总有 n 步可以将立方体反转为原来的。

但是,我认为当 n 变大时,进行反转的最小步骤可能会小于 n,因为在使用更多步骤时,会有一些特定的步骤序列可以使用更少的步骤来达到相同的效果。

例如,如果n=100,在n=30时可能有相同的模式,所以相当于n=30。那么也许我可以使用 m 步的操作将 n 减少到 20,但 m 小于 10。

所以我在想,无论 n 有多大,它总是会收敛到一个
很小的数字,这意味着无论魔方最初如何,我总是可以在小于或等于 k ​​步内将它恢复到原来的值,其中 k 是n 的收敛。

我的问题是是否存在可用于找到 n 收敛的算法?我想图论或群论中的一些东西会有所帮助。

0 投票
0 回答
95 浏览

python - 编辑大文件的特定行

我正在为魔方求解器创建修剪表,这意味着我需要创建一个文件,将任何立方体的唯一标识符映射到 0 到 25 范围内的数字,该数字表示立方体与已求解状态的距离(25是我正在使用的最大深度)。但是,标识符可以从 0 到大约 4.7 * 10^21 或大约 2^72,因此它们不能用作传统数据结构中的索引,因为它们远远超出了整数的范围。此外,修剪表需要检查数百万次,所以我需要快速查找。

所以,我的想法是创建一个文件,其中立方体的 id 用作行号,深度存储在那里。我会将深度转换为以 26 为底,因此文件的每一行都将包含从 a 到 z 的一个字符。但是,我需要将一个字符写入文件的特定行,并且我不希望读取它之前的数千行。所以,我想知道如果我知道每一行都包含一个字符,是否有办法编辑文件的特定行。

例如,求解的立方体的 id 是 591305913000000,所以第 591305913000000 行存储一个 0,因为它是 0,从求解的立方体移动。执行移动的多维数据集R的 ID 为 5889210210000498,1 将存储在第 5889210210000498 行。

我也愿意接受有关以一种可以快速读取的方式存储所有这些数据的更好方法的建议。预先感谢您的帮助。

0 投票
3 回答
106 浏览

c++ - 枚举成员不是类型错误

我正在用 C++ 制作一个 Rubik 的 2x2x2 立方体模拟器控制台应用程序(我使用的 IDE 是 Code::Blocks)。现在,我正在尝试实现所有 6 个面转弯(L 代表左等)和立方体本身。问题是,我收到一个意外错误,上面写着:

错误:白色没有命名类型

错误:红色没有命名类型

...等等

这是我的代码:

我在 main 中尝试了这个声明,它运行顺利:

关于我为什么会得到这个以及如何解决它的任何想法?

0 投票
1 回答
124 浏览

javascript - 如何保证我的魔方加扰算法不会连续两次选择相同的方向?

我正在开发魔方计时器网站(JavaScript),它需要一个加扰算法。如果它只是从数组中随机选择字母会很容易,但它需要满足一些要求。每个字母代表魔方算法符号中的一个移动,例如“L”意味着顺时针移动左侧。或者“U2”表示将 Upper Side 移动两次,“B'”表示将 Backside 逆时针移动。等等。

问题是不能有两个相同的字母彼此相邻,即使它们在不同的方向也不行。例如,U 不能与 U' 或 U2 等相邻。它必须是一个不同的字母。有时,我的代码会生成两个相邻的相同字母。

这是我的代码:

0 投票
1 回答
1014 浏览

javascript - 魔方加扰算法 - JavaScript

我一直在研究魔方计时器网站,我需要做一个加扰算法。我将讨论加扰算法应该如何工作:每张脸都有自己的字母,它是首字母。例如,如果你想移动正面,你会写“F”。如果你想移动右边的脸,你会写“R”,依此类推。只需注意底面是D,至于向下。所以你有 DURLB F。如果那个字母后面什么都没有,你顺时针转动它。如果有撇号“'”,则逆时针转动。如果有一个 2,你转动它两次。现在的问题是你不能有 2 个相同的字母并排在一起,因为它们会取消(例如“.. U U' ...”与什么都不做一样。到目前为止,我已经在我的算法。当你有一个字母时,问题就来了,然后它正好相反,然后是第一个字母,(例如“.. UD U'...”(表示顺时针向上,顺时针向下,逆时针向上))。我不知道如何检查这些并自动避免它们。这是代码: