我正在尝试解决一个非常好的问题,我找到了一个解决方案,但这更像是静态解决方案。
问题。
多维数据集有8个角,每个角包含一个字符。例如,字符串 如下图所示,“ ABCDEFGH”将显示在多维数据集上:
多维数据集可以向左,向右,向上和向下旋转。
此向右旋转将初始字符串“ ABCDEFGH”转换为 “ BFGCAEHD”。
我想知道是否有任何算法或公式可以找出拐角处的变化?我确实通过记录所有转角的变化来解决它。例如,如果A在位置1,那么如果您更改到右侧,它将始终用位置5的E替换它的位置。因此,这是一个非常静态的解决方案。此解决方案有效,因为多维数据集旋转也是静态的,并且永远不会更改位置。但是,想知道是否可以使用特定算法解决。谢谢:)
答案 0 :(得分: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