Magic Cube加密

问题描述 投票:-1回答:1

我试图解决一个非常好的问题,我找到了一个解决方案,但这更像是静态解决方案。

问题。

立方体有8个角,每个角包含一个角色。例如,字符串“ABCDEFGH”将在多维数据集上表示,如下图所示:

enter image description here

立方体可以向左,向右,向上和向下旋转。

向右旋转将初始字符串“ABCDEFGH”转换为“BFGCAEHD”。

我想知道是否有任何算法或公式可以找到角落里的变化?我通过记录角落的所有变化来解决它。例如,如果A位于位置1,那么如果你改变到右边,它将总是用位置5的E替换它的位置。所以这是一个非常静态的解决方案。此解决方案有效,因为立方体旋转也是静态的,永远不会改变位但是,想知道这是否可以用特定算法解决。谢谢 :)

algorithm cube
1个回答
3
投票

不确定我是否理解正确,但我认为你只需要记下每个案例的排列?比如,如果考虑三种可能的axes of rotation,以及顺时针和逆时针旋转方向,您可以通过六种方式旋转立方体。例如,在Python中你可以这样做:

def permute(s, perm):
    return ''.join(s[i] for i in perm)

def rotate_frontback_cw(cube):
    return permute(cube, [1, 5, 6, 2, 0, 4, 7, 3])

def rotate_frontback_ccw(cube):
    return permute(cube, [4, 0, 3, 7, 5, 1, 2, 6])

def rotate_leftright_cw(cube):
    return permute(cube, [4, 5, 1, 0, 7, 6, 2, 3])

def rotate_leftright_ccw(cube):
    return permute(cube, [3, 2, 6, 7, 0, 1, 5, 4])

def rotate_updown_cw(cube):
    return permute(cube, [1, 2, 3, 0, 5, 6, 7, 4])

def rotate_updown_ccw(cube):
    return permute(cube, [3, 0, 1, 2, 7, 4, 5, 6])

def cube2str(cube):
    a, b, c, d, e, f, g, h = cube
    return (f'   {h}--------{g}\n'
            '  /|       /|\n'
            ' / |      / |\n'
            f'{e}--------{f}  |\n'
            f'|  {d}-----|--{c}\n'
            f'| /      | /\n'
            f'|/       |/\n'
            f'{a}--------{b}')

cube = 'ABCDEFGH'
print('cube')
print(cube2str(cube))
print('rotate_frontback_cw')
print(cube2str(rotate_frontback_cw(cube)))
print('rotate_frontback_ccw')
print(cube2str(rotate_frontback_ccw(cube)))
print('rotate_leftright_cw')
print(cube2str(rotate_leftright_cw(cube)))
print('rotate_leftright_ccw')
print(cube2str(rotate_leftright_ccw(cube)))
print('rotate_updown_cw')
print(cube2str(rotate_updown_cw(cube)))
print('rotate_updown_ccw')
print(cube2str(rotate_updown_ccw(cube)))

这将打印:

cube
   H--------G
  /|       /|
 / |      / |
E--------F  |
|  D-----|--C
| /      | /
|/       |/
A--------B
rotate_frontback_cw
   D--------H
  /|       /|
 / |      / |
A--------E  |
|  C-----|--G
| /      | /
|/       |/
B--------F
rotate_frontback_ccw
   G--------C
  /|       /|
 / |      / |
F--------B  |
|  H-----|--D
| /      | /
|/       |/
E--------A
rotate_leftright_cw
   D--------C
  /|       /|
 / |      / |
H--------G  |
|  A-----|--B
| /      | /
|/       |/
E--------F
rotate_leftright_ccw
   E--------F
  /|       /|
 / |      / |
A--------B  |
|  H-----|--G
| /      | /
|/       |/
D--------C
rotate_updown_cw
   E--------H
  /|       /|
 / |      / |
F--------G  |
|  A-----|--D
| /      | /
|/       |/
B--------C
rotate_updown_ccw
   G--------F
  /|       /|
 / |      / |
H--------E  |
|  C-----|--B
| /      | /
|/       |/
D--------A
© www.soinside.com 2019 - 2024. All rights reserved.