问题标签 [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.
python - 用python编写的魔方计时器?
我是 cubing 的忠实粉丝,但我使用 Linux 并且找不到任何像样的计时器。我尝试在 python 3 中编写一个,但我已经好几年没有做过了,它一直在绘制随机错误。如果说键盘模块不存在。有人可以帮忙吗。
c++ - A* 算法中魔方的启发式函数 人工智能
所以我试图通过使用 C++ 的不同算法来解决魔方。我已经尝试过迭代深化搜索 (IDS) 并且做对了,但现在我陷入了 A* 算法。我做了一些研究,发现立方体角落和边缘的 3D 曼哈顿距离是为 A* 开发启发式的方法之一,但我不知道它是如何编码的。你们能否帮助或指导我如何开发定义上可接受的功能?
我正在寻找可以帮助我摆脱这个困境的所有建议。谢谢。
c# - 如何操纵由 2D 数组表示的魔方的面以执行面旋转
我正在用 C# 创建一个解决魔方问题的项目。它将魔方的当前状态作为输入,并输出一系列动作以执行使用指定符号解魔方。
Cube 由 6 个长度为 9 的字符串数组组成:
你可以把它想象成一个折叠在一起形成立方体的网。
由于我使用的是控制台应用程序而不是 Windows 窗体应用程序,因此我必须通过将每个面写入彼此下方的控制台来表示立方体。我使用以下方法执行此操作PrintCube()
:
这使得求解立方体的标准输出如下:
目前,我正处于编码可以在立方体上执行的每个不同动作的阶段,但我遇到了障碍。
下面是执行操作的代码:
我正在按顺序对操作进行编码,因此,到目前为止,我只完成了F操作,但我一生都无法弄清楚我在R操作上哪里出错了。
在魔方符号中,我们看到对已解出的立方体的操作R,从白色面朝外,蓝色面朝上,表示以下运动:
握住立方体,白色面朝外,蓝色面朝上。
将红色面顺时针旋转 90 度,使白色面的右侧移到蓝色面上,绿色移到白色上,黄色移到绿色上,蓝色移到黄色上。
执行这两个步骤会导致R操作。
要了解我们需要在代码中做什么才能实现这一点,让我们回到 excel 电子表格。
从白边开始,我们可以看到我们必须改变:
- 白面的索引2、5和 8到绿面的索引2、5 和 8 。
- 蓝脸的索引2、5和 8 分别对应白脸的索引*2、5 和 8*
- 然而,当我们到达黄色面时,由于网络中的面必须“翻转”来连接橙色、蓝色、绿色和红色的面,我们必须更改索引0、3 和 6。这些分别更改为蓝色面上的索引 8、5和 2 。如果您面前有一个立方体,则更容易思考为什么这是真的
- 在绿面上,我们将索引2、5 和 8更改为黄面上的索引 6、3和 0。同样,这是因为我们如何解释网络。
放大 Operation R的代码,我们可以看到我是如何实现这一点的:
我在每一行旁边都有注释,说明发生了变化,其中//258 630
表示由newCubeState
索引2、5 和 8表示的面部分别更改为由CubeState
索引 6、3和 0表示的面部。
从上面的二维数组可以看出,第一个索引表示人脸变为[0] = "WHITE", [1] = "BLUE", [2] = "RED",[3] = "GREEN" , [4] = "橙色", [5] = "黄色"
知道了这一点,我们可以这样解释我的代码:
首先,绿色面上的第 2 个索引成为黄色面上的第 6 个索引。[绿色 -> 黄色]
二、黄脸第0个索引变成蓝脸第8个索引[YELLOW -> BLUE]
第三,蓝脸的第二个索引变成了白脸的第二个索引。[蓝色 -> 白色]
第四,白面的第二个索引变成了绿面的第二个索引。[白色-> 绿色]
请注意,由于某些奇怪的原因,即使它们是完全独立的变量,它似乎会影响CubeState[x,y]
我设置的时间newCubeState[i,j] = CubeState[x, y]
,因此,我需要在更改之前使用索引,这导致需要临时变量tempString
,但是,这不是手头的问题在这里。
第五,绿面上的第 5 个索引变成了黄面上的第 3 个索引。[绿色 -> 黄色]
六、黄面第3个索引变成蓝面第5个索引[YELLOW -> BLUE]
第七,蓝脸的第5个索引变成了白脸的第 5 个索引。[蓝色 -> 白色]
第八,白面的第5个索引变成了绿面的第 5 个索引。[白色-> 绿色]
第九,绿面上的第8 个索引变成了黄面上的第 0个索引。[绿色 -> 黄色]
十、黄面第6个索引变成蓝面第2个索引[YELLOW -> BLUE]
第十一,蓝脸的第8个索引变成了白脸的第8个索引。[蓝色 -> 白色]
第十二,白面的第8个索引变成了绿面的第 8 个索引。[白色-> 绿色]
这应该会产生以下输出:
白 - 白 - 绿
白 - 白 - 绿
白 - 白 - 绿
蓝色 - 蓝色 - 白色
蓝色 - 蓝色 - 白色
蓝色 - 蓝色 - 白色
红 - 红 - 红
红 - 红 - 红
红 - 红 - 红
绿色 - 绿色 - 黄色
绿色 - 绿色 - 黄色
绿色 - 绿色 - 黄色
橙色 - 橙色 - 橙色
橙色 - 橙色 - 橙色
橙色 - 橙色 - 橙色
蓝色 - 黄色 - 黄色
蓝色 - 黄色 - 黄色
蓝色 - 黄色 - 黄色
但是,我们看到情况并非如此:
出于某种奇怪的原因,我们看到第3面的第 8 个索引( GREEN)变成了BLUE而不是YELLOW,以及第5面的第 6 个索引( YELLOW)变成了WHITE而不是BLUE。
我不知道为什么会发生这种情况,我将非常感谢您的帮助。
它不应该引起任何问题,但这是我的RotateFaceRight()
方法:
我的其余代码在这里:
立方体.cs
CubeCenters.cs
CubeOperations.cs
程序.cs
c# - C# 中用于魔方的 7-Riffle Shuffle 算法
对于学校作业,我们需要在 C# 中实现一个 7-Riffle 算法方法,它可以打乱魔方的面。不幸的是,网络上没有足够的资源来展示它应该如何编码。我已经实现了秒表来计算不同魔方大小所需的经过时间。
这段代码适用于洗牌位,但它所花费的时间似乎没有意义,因为它比 Fisher Yates 的更快。
请问有什么帮助吗?
javascript - 吉克立方体 api。从状态配置
我正在制作自己的 android 应用程序,可以帮助解决魔方问题。我买了小米的 Giiker Cube 并研究了 Herbert Kociemba 的两阶段算法。
所以问题从这里开始。对于 Giiker Cube,我查看了下面的 api。但是这个 api 给出了 20 字节数据的多维数据集的状态。 https://github.com/Vexu/SuperCube-API
我还从这里查看了相同的 React 库及其依赖库,以研究该状态到立方体面和移动的转换。但是那个库的解码逻辑对我不起作用。
我也没有使用本机反应。 https://www.npmjs.com/package/react-native-giiker
我需要帮助将 20 字节的立方体状态转换为 Herbert Kociemba 的算法和移动的立方体面
java - 围绕javaFX中的枢轴旋转对象
我正在尝试在 javaFX 中创建一个魔方,我正在努力解决面部的旋转问题。到目前为止,我只是将一张脸中的 9 个立方体添加到一个组中并旋转 90 度以使整个脸以正确的方式旋转,但是这种方法似乎不适用于多次旋转。
相反,我想围绕每个面中心的枢轴点旋转每个立方体。为此,我尝试使用内置在 pivot 参数中的 Rotate 类,但它似乎对旋转没有影响。这是我用来旋转正面的函数的简化版本,其中二维数组 frontFace 包含正面从左上角到右下角的所有立方体:
这会产生以下结果(我已将其旋转 45 度,以便更容易看到):
而我希望它像这样旋转:
这是我第一个使用 javaFX 的项目,任何帮助将不胜感激!到目前为止的完整项目可以在这里找到:
编辑:我被要求包含一个最小的、可重现的示例,所以我试图将问题浓缩到一个希望不会混淆的类中,这里是代码:
这是图像pallete.png,如果您想要颜色,则在代码中使用它,尽管我认为它与问题无关: pallete.png
谢谢。
c - 魔方 Thistlethwaite 算法,检查边缘是否良好
我正在尝试使用 Thistlethwaite 算法在 C 中构建一个魔方求解器。
我将一个多维数据集存储为 6 个uint64_t
整数(面)的数组。
每个面都将 8 种颜色存储为一个字节。
这种结构让我可以使用位操作轻松旋转面部,但我想知道是否应该使用更适合 Thistlethwaite 算法的其他东西。
我遇到的问题是检查子组 G1 <L, R, F, B, U2,D2> 中是否包含多维数据集据我了解,该子组中包含具有正确定向边缘的多维数据集。(见https://www.jaapsch.net/puzzles/thistle.htm)
页面末尾的论文清楚地说明了如何检查边缘是否良好,但我找不到实现它的方法。
我的问题是:如果给定一个加扰的立方体,边缘的方向是否正确,如何检查代码?