二面体组是正方形的对称组,即通过旋转和反射将正方形变换为自身的移动。它由8个元素组成:旋转0、90、180和270度,以及在水平,垂直和两个对角线上的反射。
图片全部来自Larry Riddle的可爱页面。
挑战在于如何构成这些动作:给定两个动作,输出的动作等同于一个接一个地执行它们。例如,先执行第7步再执行第4步,与执行第5步相同。
请注意,将顺序切换为移动4然后移动7将产生移动6。
结果列于下表;这是D 4组的Cayley表。因此,例如,输入端7 ,4应该产生输出5。
挑战
您的目标是在尽可能少的字节中实现此操作,但是除了代码外,您还选择代表移动1到8的标签。标签必须是0到255之间的8个不同数字,或者8个数字代码点代表的3个字节字符。
您的代码将获得所选8个标签中的两个标签,并且必须输出对应于二面体组其组成的标签。
例
假设您已为1到8的动作分别选择了字符C,O,M,P,U,T,E,R。然后,您的代码应实现此表。
给定输入E和P,您应该输出U。您的输入将始终是字母C,O,M,P,U,T,E,R中的两个,并且您的输出应始终是这些字母之一。
用于复制的文本表
1 2 3 4 5 6 7 8
2 3 4 1 8 7 5 6
3 4 1 2 6 5 8 7
4 1 2 3 7 8 6 5
5 7 6 8 1 3 2 4
6 8 5 7 3 1 4 2
7 6 8 5 4 2 1 3
8 5 7 6 2 4 3 1
Your choice of labels doesn't count against your code length.
介意吗?就目前而言,我可以将矩阵硬编码到我的代码中,并声称它不计入我的分数。