自习课玩魔方发现的一个问题

2026-04-11 13:181阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

因为刚月考完 实属无聊 想到一个问题 计算 魔方从初始状态开始 F R B’ L’一直循环 回到初始状态 要多少步
由于gpt和claude算出来都是420 于是我们就开始了实践,一共进行了三次都没成功复现

网友解答:
--【壹】--:

这里说的是循环打块,在有限次步骤后回到初始状态


--【贰】--:

魔方本质不就是群论吗 20步之内就可以还原 这叫上帝之数 以前三阶魔方能干15秒 现在已经不会了 只剩下肌肉记忆了xD


--【叁】--:

我们自习课闲的淡疼 两个人盯着一个人操作试了三次都没有成功 奇怪了 但是计算结果都是420次


--【肆】--: 无水硫酸铜:

计算 魔方从初始状态开始 F R B’ L’一直循环 回到初始状态 要多少步

Gemini也说420
image1198×1308 180 KB


--【伍】--:

玩了好多年魔方 现在只剩下肌肉记忆了 CFOP公式字母都快忘完了


--【陆】--:

写Mathematica Wolfram代码来算

(* 1. 定义魔方的54个色块 *) (* 每个色块由其所在小滑块的坐标 (x,y,z) 和所在面的向外法向量构成 *) cubies = Tuples[{-1, 0, 1}, 3]; normals = {{1, 0, 0}, {-1, 0, 0}, {0, 1, 0}, {0, -1, 0}, {0, 0, 1}, {0, 0, -1}}; initialStickers = Flatten[ Table[If[c . n == 1, {c, n}, Nothing], {c, cubies}, {n, normals}], 1 ]; (* 2. 定义单步旋转函数 *) (* 根据右手定则,沿向外的法向量旋转 -Pi/2 对应从外部观察的顺时针旋转 *) (* dir = 1 为顺时针,dir = -1 为逆时针 *) applyMove[stickers_, axis_, dir_] := Module[ {mat = RotationMatrix[-dir * Pi/2, axis]}, Map[ If[#[[1]] . axis == 1, {mat . #[[1]], mat . #[[2]]}, (* 旋转处于该面上的色块及其法向量 *) # ] &, stickers ] ]; (* 3. 定义一次完整的 F R B' L' 复合动作 *) (* F: +z轴面顺时针; R: +x轴面顺时针; B': -z轴面逆时针; L': -x轴面逆时针 *) compositeSequence[stickers_] := Fold[ applyMove[#1, #2[[1]], #2[[2]]] &, stickers, { {{0, 0, 1}, 1}, (* F *) {{1, 0, 0}, 1}, (* R *) {{0, 0, -1}, -1}, (* B' *) {{-1, 0, 0}, -1} (* L' *) } ]; (* 4. 获得执行一次复合动作后的魔方状态 *) nextStickers = compositeSequence[initialStickers]; (* 5. 寻找初始状态到新状态的置换群映射,并计算其阶数(即循环周期) *) perm = FindPermutation[initialStickers, nextStickers]; Print[PermutationOrder[perm]]

结果确实是105×4=420

标签:纯水
问题描述:

因为刚月考完 实属无聊 想到一个问题 计算 魔方从初始状态开始 F R B’ L’一直循环 回到初始状态 要多少步
由于gpt和claude算出来都是420 于是我们就开始了实践,一共进行了三次都没成功复现

网友解答:
--【壹】--:

这里说的是循环打块,在有限次步骤后回到初始状态


--【贰】--:

魔方本质不就是群论吗 20步之内就可以还原 这叫上帝之数 以前三阶魔方能干15秒 现在已经不会了 只剩下肌肉记忆了xD


--【叁】--:

我们自习课闲的淡疼 两个人盯着一个人操作试了三次都没有成功 奇怪了 但是计算结果都是420次


--【肆】--: 无水硫酸铜:

计算 魔方从初始状态开始 F R B’ L’一直循环 回到初始状态 要多少步

Gemini也说420
image1198×1308 180 KB


--【伍】--:

玩了好多年魔方 现在只剩下肌肉记忆了 CFOP公式字母都快忘完了


--【陆】--:

写Mathematica Wolfram代码来算

(* 1. 定义魔方的54个色块 *) (* 每个色块由其所在小滑块的坐标 (x,y,z) 和所在面的向外法向量构成 *) cubies = Tuples[{-1, 0, 1}, 3]; normals = {{1, 0, 0}, {-1, 0, 0}, {0, 1, 0}, {0, -1, 0}, {0, 0, 1}, {0, 0, -1}}; initialStickers = Flatten[ Table[If[c . n == 1, {c, n}, Nothing], {c, cubies}, {n, normals}], 1 ]; (* 2. 定义单步旋转函数 *) (* 根据右手定则,沿向外的法向量旋转 -Pi/2 对应从外部观察的顺时针旋转 *) (* dir = 1 为顺时针,dir = -1 为逆时针 *) applyMove[stickers_, axis_, dir_] := Module[ {mat = RotationMatrix[-dir * Pi/2, axis]}, Map[ If[#[[1]] . axis == 1, {mat . #[[1]], mat . #[[2]]}, (* 旋转处于该面上的色块及其法向量 *) # ] &, stickers ] ]; (* 3. 定义一次完整的 F R B' L' 复合动作 *) (* F: +z轴面顺时针; R: +x轴面顺时针; B': -z轴面逆时针; L': -x轴面逆时针 *) compositeSequence[stickers_] := Fold[ applyMove[#1, #2[[1]], #2[[2]]] &, stickers, { {{0, 0, 1}, 1}, (* F *) {{1, 0, 0}, 1}, (* R *) {{0, 0, -1}, -1}, (* B' *) {{-1, 0, 0}, -1} (* L' *) } ]; (* 4. 获得执行一次复合动作后的魔方状态 *) nextStickers = compositeSequence[initialStickers]; (* 5. 寻找初始状态到新状态的置换群映射,并计算其阶数(即循环周期) *) perm = FindPermutation[initialStickers, nextStickers]; Print[PermutationOrder[perm]]

结果确实是105×4=420

标签:纯水