计算 4 个立方体的所有可能性

calculates all possibilites of 4 cubes

所以,我有 4 个立方体,每个面都有颜色,颜色可以是橙色、蓝色、红色或绿色

我的 objective 是知道如何在一条直线上定位和旋转立方体,使直线的每个面都有相同的颜色

example example2

立方体之间和线条左右两侧的颜色无关紧要

我已经在 python 中尝试了一些东西,但我什至找不到一种方法来知道如何计算它

如果有人能帮我找到一个程序来获取立方体的颜色并显示解决方案,那就太好了。我主要使用 Python 但如果程序是用其他语言制作的也可以

好吧,让我们先算一下。有四个立方体。每个立方体最多有 24 个不同的方向:首先,面 A 有 6 种选择;其次,面 B 最多有四种选择。如果我们计算 24^4,我们会发现这组四个立方体有 331,776 个不同的方向。我们不妨计划尝试所有这些,因为数量太少了。如果数字更高,我们可能需要更聪明一点,但请耐心等待。

因此,我们将对其进行暴力破解。我们需要以这样一种方式来表示每个立方体,即在给定方向的情况下,我们可以获得正面、背面、顶部和底部的颜色。通过命名面来为这些立方体建模可能会有所帮助。我们可以将它们命名为方向#1,我们可以将其视为默认方向:

  1. 面A/0是立方体的顶部
  2. 面B/1是立方体的正面
  3. 面C/2是立方体的右边
  4. 面D/3是立方体的背面
  5. 面E/4是立方体的左边
  6. 面F/5是立方体的底部

现在,立方体的方向可以被认为是这些面的排列。我们可以尝试编写代码来计算第 N 个排列是什么,或者我们可以列出所有 24 个独特的方向和每个方向的映射:

  1. [0,1,2,3,4,5] ... 身份映射,因为脸 A/1 是默认值

  2. [0,2,3,4,1,5] ... 围绕正垂直轴顺时针旋转 #1 90 度

  3. [0,3,4,1,2,5] ... 绕正垂直轴顺时针旋转 #1 180 度

  4. [0,4,1,2,3,5] ... 绕正垂直轴顺时针旋转 #1 270 度

  5. [1,5,2,0,4,3] ... 围绕正水平轴逆时针旋转 #1 90 度

  6. [1,2,0,4,5,3] ... 绕正垂直轴顺时针旋转 #5 90 度

  7. [1,0,4,5,2,3] ... 绕正垂直轴顺时针旋转 #5 180 度

  8. [1,4,5,2,0,3] ... 绕正垂直轴顺时针旋转 #5 270 度

  9. [2,1,5,3,0,4]

  10. [2,5,3,0,1,4]

  11. [2,3,0,1,5,4]

  12. [2,0,1,5,3,4]

  13. [3,0,2,5,4,1]

  14. [3,2,5,4,0,1]

  15. [3,5,4,0,2,1]

  16. [3,4,0,2,5,1]

  17. [4,1,0,3,5,2]

  18. [4,0,3,5,1,2]

  19. [4,3,5,1,0,2]

  20. [4,5,1,0,3,2]

  21. [5,3,2,1,4,0​​]

  22. [5,2,1,4,3,0]

  23. [5,1,4,3,2,0]

  24. [5,4,3,2,1,0]

现在,我们可以编写一个函数,给定一个方向和一张脸,它会告诉我们颜色:

GetFaceColor(orientation, face)
1. return colors[permutations[orientation][face]]

这里,permutations是上面给出的排列数组的数组,colors是一个数组,其中六个立方体面的颜色指定方向#1。

现在,我们需要做的就是使用四个嵌套循环来检查所有 24^4 种可能性:

FindSolution()
1. for w = 1 to 24 do
2.    for x = 1 to 24 do
3.        for y = 1 to 24 do
4.           for z = 1 to 24 do
5.              if FacesMatch(w, x, y, z, 0)
                and FacesMatch(w, x, y, z, 1)
                and FacesMatch(w, x, y, z, 3)
                and FacesMatch(w, x, y, z, 5)
                then return (w, x, y, z)
6. return null

FacesMatch(or1, or2, or3, or4, face)
1. color1 = cube1.GetFaceColor(or1, face)
2. color2 = cube2.GetFaceColor(or2, face)
3. color3 = cube3.GetFaceColor(or3, face)
4. color4 = cube4.GetFaceColor(or4, face)
5. return color1 = color2 and color2 = color3 and color3 = color4