gpt4 book ai didi

language-agnostic - 如何表示魔方

转载 作者:行者123 更新时间:2023-12-05 00:35:07 25 4
gpt4 key购买 nike

我想知道我们如何在 mathematica 中设计一个魔方。这可能吗?我们如何使用它。我们如何决定立方体的 6 个面上的较小立方体的不同分隔。

最佳答案

您问的是如何定义数据结构。您的选择是任意的,只要您定义的操作正确工作。例如,您可以表示一个立方体,如:

newCube[] := {
{red, red, red, red, red, red, red, red, red},
{orange, orange, orange, orange, orange, orange, orange, orange, orange},
{yellow, yellow, yellow, yellow, yellow, yellow, yellow, yellow, yellow},
{green, green, green, green, green, green, green, green, green},
{indigo, indigo, indigo, indigo, indigo, indigo, indigo, indigo, indigo},
{purple, purple, purple, purple, purple, purple, purple, purple, purple}
}

然后,您可以定义一个扭曲(和可选的反扭曲)操作,每个移动一个(3 个轴,每个轴扭曲 3 层,扭曲 2 个方向;或者 6 个轴,每个轴扭曲 3 层),或者两个旋转操作和扭曲,并假设您可以组合这些操作以生成类似 inverseRotate[simpleTwist[rotate[cube], ...], ...] 的效果。 .

要找出您需要的代码,您必须拥有从您的表示到真实对象的映射。也许最好展示一个硬币的例子,它要么是正面要么是反面:
newCoin[] := {heads}

flipCoin[coin_] := {If[coin[[0]]==heads, tails, heads]}

如果用基本数据结构(如列表)表示对象并不容易,这可能会更加复杂。你甚至可以用矩阵来表示你的立方体,比如:
newCube[] := {
/red, red, red\ /orange, orange, orange\
|red, red, red| |orange, orange, orange|
\red, red, red/, \orange, orange, orange/, ...
}

但是矩阵拼接在一起的方式不容易表示。所以他们在列表中的排序是任意的。

如果您仍然感到困惑,您可以这样做:

给你表示中的每个槽一个任意数字(最坏的情况,你将它们标记为 0 到 53,但你可以更优雅)。然后用一个真正的魔方,在每个面上写下这些数字。然后当你做手术时,写下他们的新职位。这称为 排列 那个特定的允许移动/扭曲会导致你的半群数据结构。如前所述,其中有很多(18 个),您必须将它们全部写下来。然后你可以有类似的东西:
newCube[] := {0,1,2, 3,4,5, 6,7,8, ...53}

permutations = {
{12,15,0, 3,4,5, 6,7,8, ...}, (*figure these out yourself*)
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . }
}

twistCube[cube_, moveNumber_] := Permute[
cube,
FindPermutation[permutations[[moveNumber]]]
]

您可以使用计算机科学技巧来优化它,而不是每次都调用 FindPermutation,使 permutations = FindPermutation /@ {...}

关于language-agnostic - 如何表示魔方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9762162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com