二面体群D_4是正方形的对称群,即通过旋转和反射将正方形变换成自身的运动。它由8个元素组成:旋转0、90、180和270度,并在水平、垂直和两个对角线轴上反射。

这些图片都是拉里·里德尔( Larry )的这可爱的一页。
这个挑战是关于组合这些动作:给定两个动作,输出相当于一个接一个地完成的动作。例如,做移动7和移动4与执行移动5是一样的。

请注意,将顺序切换到移动4,然后移动7则会产生移动6。
结果如下表所示;这是组凯莱表的D_4。因此,例如,输入7, 4应该产生输出5。
\begin{array}{*{20}{c}} {} & {\begin{array}{*{20}{c}} 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 \\ 2 \\ 3 \\ 4 \\ 5 \\ 6 \\ 7 \\ 8 \\ \end{array} } & {\boxed{\begin{array}{*{20}{c}} 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\\ \end{array} }} \\ \end{array}
挑战
您的目标是以尽可能少的字节实现此操作,但是除了代码之外,you还选择了表示移动1到8的标签。标签必须是从0到255之间的8个不同的数字,或者它们的代码点所代表的8个单字节字符。
您的代码将从所选的8中得到两个标签,并且必须输出对应于它们在二面体组D_4中的组合的标签。
示例
假设您选择了移动1到8的字符C、O、M、P、U、T、E、R。然后,您的代码应该实现这个表。
\begin{array}{*{20}{c}} {} & {\begin{array}{*{20}{c}} \, C \, & \, O \, & M \, & P \, & U \, & \, T \, & \, E \, & R \, \\ \end{array} } \\ {\begin{array}{*{20}{c}} C \\ O \\ M \\ P \\ U \\ T \\ E \\ R \\ \end{array} } & {\boxed{\begin{array}{*{20}{c}} C & O & M & P & U & T & E & R \\ O & M & P & C & R & E & U & T\\ M & P & C & O & T & U & R & E\\ P & C & O & M & E & R & T & U\\ U & E & T & R & C & M & O & P\\ T & R & U & E & M & C & P & O\\ E & T & R & U & P & O & C & M\\ R & U & E & T & O & P & M & C\\ \end{array} }} \\ \end{array}
给定输入E和P,你应该输出U,你的输入总是两个字母C,O,M,P,U,T,E,R,你的输出应该总是这些字母中的一个。
用于复制的<#>Text表
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发布于 2019-05-04 09:17:48
->a,b{a+b*~0**a&7}不毛之地
->a,b{ (a+b*(-1)**a) % 8}
# for operator precedence reasons,
#-1 is represented as ~0 in the golfed version 使用下列编码号0至7
按照本机代码的顺序:
Native Effect Codes per
Code Question
0 rotate 0 anticlockwise 1C
1 / flip in y=x 7E
2 /| rotate 90 anticlockwise 2O
3 /|/ flip in x axis 5U
4 /|/| rotate 180 anticlockwise 3M
5 /|/|/ flip in y=-x 8R
6 /|/|/| rotate 270 anticlockwise 4P
7 /|/|/|/ flip in y axis 6T按问题顺序排列
Native Effect Codes per
Code Question
0 rotate 0 anticlockwise 1C
2 /| rotate 90 anticlockwise 2O
4 /|/| rotate 180 anticlockwise 3M
6 /|/|/| rotate 270 anticlockwise 4P
3 /|/ flip in x axis 5U
7 /|/|/|/ flip in y axis 6T
1 / flip in y=x 7E
5 /|/|/ flip in y=-x 8R解释
/表示行中的翻转,y=x和|表示y轴上的翻转。
可以通过交替地翻转这两条线来生成组D4的任何对称性,例如,/和|给出/|,这是逆时针旋转90度。
连续翻转的总数为算术操作提供了非常方便的表示。
如果第一步是旋转,我们可以简单地添加翻转数:
Rotate 90 degrees + Rotate 180 degrees = Rotate 270 degrees
/| /|/| /|/|/|
Rotate 90 degress + Flip in y=x = Flip in x axis
/| / /|/如果第一步是反射,我们发现我们有一些相同的反射/和|符号相邻。由于反射是自反的,我们可以一个一个地抵消这些翻转。所以我们需要从另一个动作减去一个动作
Flip in x axis + Flip in y=x = Rotate 90 degrees
/|/ / /|/ / (cancels to) /|
Flip in x axis + Rotate 90 degrees = Flip in y=x
/|/ /| /|/ /| (cancels to ) / 发布于 2019-05-04 07:30:08
使用整数0, 5, 2, 7, 1, 3, 6, 4作为标签。
BitXor[##,2Mod[#,2]⌊#2/4⌋]&二面体群D_4同构于场\mathbb{F}_2上的三级单位矩阵群:
D_4 \cong U(3,2) := \left\{\begin{pmatrix} 1 & a & b \\ 0 & 1 & c \\ 0 & 0 & 1 \end{pmatrix} \mid a,b,c \in \mathbb{F}_2\right\}.
我们有
\begin{pmatrix} 1 & a_1 & b_1 \\ 0 & 1 & c_1 \\ 0 & 0 & 1 \end{pmatrix} \cdot \begin{pmatrix} 1 & a_2 & b_2 \\ 0 & 1 & c_2 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} 1 & a_1+a_2 & b_1+b_2+a_1c_2 \\ 0 & 1 & c_1+c_2 \\ 0 & 0 & 1 \end{pmatrix},
可以很容易地按位操作编写。
发布于 2019-05-04 05:06:41
⌊#/4^IntegerDigits[#2,4,4]⌋~Mod~4~FromDigits~4&使用标签{228, 57, 78, 147, 27, 177, 198, 108}。
这些是基4中的{3210, 0321, 1032, 2103, 0123, 2301, 3012, 1230},幸运的是,256=4^4。
较低级别的实现,也是51字节。
Sum[4^i⌊#/4^⌊#2/4^i⌋~Mod~4⌋~Mod~4,{i,0,3}]&https://codegolf.stackexchange.com/questions/185140
复制相似问题