我试图解决一个非常好的问题,我找到了一个解决方案,但这更像是静态解决方案。
问题。
立方体有8个角,每个角包含一个角色。例如,字符串“ABCDEFGH”将在多维数据集上表示,如下图所示:
立方体可以向左,向右,向上和向下旋转。
向右旋转将初始字符串“ABCDEFGH”转换为“BFGCAEHD”。
我想知道是否有任何算法或公式可以找到角落里的变化?我通过记录角落的所有变化来解决它。例如,如果A位于位置1,那么如果你改变到右边,它将总是用位置5的E替换它的位置。所以这是一个非常静态的解决方案。此解决方案有效,因为立方体旋转也是静态的,永远不会改变位但是,想知道这是否可以用特定算法解决。谢谢 :)
不确定我是否理解正确,但我认为你只需要记下每个案例的排列?比如,如果考虑三种可能的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