块面是什么美食(魔方的原理是什么)

块面是什么美食,魔方原理是什么?

(小石头,站在偏数学的角度,来回答这个问题。简单一句话,魔方的原理就是:魔方群在状态集上的作用,具体回答如下:)

魔方群

整体来看,魔方(Rubik’s cube)是一个立方体,一共有六个面 (surface),我们分别用 U(up 上)、D(down 下)、F (front 前)、B(back 后)、L(left 左)、R(right 右)来标识,不妨规定:U 对应 黄(yellow)、D 对应 白(white)、F 对应 蓝(blue)、B 对应 绿(green)、L 对应 橙(orange)、R 对应 红(red)。

令,M = {U, D, F, B, L, R},当 任意面 f ∈ M 朝向我们时,对 f 面 顺时针 旋转 90°, 被定义为 魔方的 基本操作(base operation),同样用 f 面 的 面标识 来表示 这种基本操作。所以 M 也代表 魔方的全部基本操作。

对于,任意 基本操作 g, h ∈ M,gh 称为 g 和 h 的 复合(compose), 表示 先 g 操作 再 h 操作 的复合操作。可以验证,复合满足结合律, 这样以来,以 M 为生成元 在复合操作下会生成一个群 G = (M),称为 魔方群(Rubik‘s cube group)。其中,G 的 幺元,记为 1, 表示 没有进行任何操作的操作。

什么是群?

群就是定义了一种运算 的集合 ,其 满足:

集合对运算封闭,即,对于任意 都有 ( 注意:和乘法运算类似,习惯省略不写 ) ;

运算有分配律,即, 对于任意 都有 ;

有幺元,即,存在 使得 对于 任意 都有 ;

有逆元,即,对于任意 都存在 的逆元 使得 。

什么是 M 生成的群?

数学上定义:包括 M 中元素的 最小的群,为M生成的群,记为 (M)。实际上,可以 对 M 中任意操作 g 和 h 不断的 进行 复合运算,如果得到的新复合操作 gh 不在 M 中,就 gh 添加到 M 里,直到 M 不再增加,这样就得到了 (M)。

同一基本操作 g, 连续四次 复合 就是 对 g 面 顺时针 旋转 360°,这相当于 没有操作,即,

gggg = 1

从而有:

gg³ = 1

也就是说 g³ 就是 g 的逆元 g⁻¹ ,相当于 对 g 面 逆时针 旋转 90°。

另外,由 gggg = 1 还可以得到:

g²g² = 1

这说明 连续两次 复合 g² 的逆元 就是自己,即,顺时针 旋转 180° 相当于 逆时针 旋转 180° 。

魔方状态

三阶魔方被细分为 3 × 3 × 3 = 27 个 立方小块(cubie)。其中,位于 中间核心的 那个 小块 不会受到 魔方操作 的影响到,而对于 每个 面中心的 那个 小块 魔方操作 同样无法改变它的位置,因此 魔方操作 所能 影响到的 小块 为 27 – (1 + 6) = 20 个。

这 20 个 受 魔方操作 作用的 小块,又分为 两类:

位于魔方 8 个角 处的 角(corner)块,它们有3个有效 小面(facet);

位于魔方 12 个棱 处的 棱(edge)块,它们有2个有效 小面;

由于,每个面的 中心块 保持位置不变,因此对于打乱的魔方,可以依照 中心块 来 确定 魔方的各个面 方向。魔方在初始(或 还原)状态下,角块 和 棱块 的每个 小面 和 该小面 所在面 的 中心小块 颜色保持一致。

我们用 角块(或 棱块) 的各小面 颜色所对应的 标识 的小写字母 的组合来标识 角块(或 棱块):

对于 角块,三个小面 x, y, z,有 6 种排列方式,这里 使用 从 u 或 d 开始 的 顺时针 排列方式,即,角块标识 xyz 保证 x = u/d 并且 x →y → z 是顺时针;

对于 棱块,二个小面 x, y, 有 2 种 排列方式,这里 使用 从 u 或 d(f 或 b) 开始 的 排列方式,即,棱块标识 xy 保证 x = u/d/f/b;

根据上面的规则,八个角块分别表示为:ufl, urf, ubr, ulb; dbl, dlf, dfr, drb; 十二个棱块分别表示为:ub, ur, uf, ul; bl, br, fr, fl; db, dr, df, dl

注意:六个中心块 分别表示为:u, d, f, b, l, r,核心块 一般用 o 表示 。

更进一步,对于角块 xyz,我们用 xyz 表示 x 小面,yzx 表示 y 小面,zxy 表示 z 小面,对于棱块 xy ,我们用 xy 表示 x 小面,用 yx 表示 y 小面,于是,我们就得到了 带有标注 的 8 × 3 + 12 × 2 = 48 个 小面。将,全体小面记为 T,则 任意 操作 g ∈ G 就变成了 T 上的 一种 置换(位置变换)。以 F 操作 为例,

观察发现, 小面 fur 经过 F 操作 置换 为 小面 flu,即,F(fur) = flu,另有 F(flu) = fdl、F(fdl) = frd、F(frd) = flu,于是 在 F 操作下,以上 4 个置换 形成了 一个 置换圈:

我们称其为 轮换(cycle),记为 (fur flu fdl frd) 。

参与轮换的 小面 可以是任意多个,值得注意的是:任何一个小面 a 的 轮换 (a) 相当于 不做 置换,有, 1 = () = (a) 。

当然,实际上 F 操作 包含 多个 轮换,将这些轮换 以复合的方式,聚合在一起,就是定义了一个 完整 F 操作:

F = (fur flu fdl frd) (fu fl fd fr)(rfu ufl lfd dfr)(rf uf lf df)(rdf urf luf dlf)

同理,我们可以将 其它魔方操作 定义为 轮换 的复合。

注意:为了方便,我们也可以用 1- 48 的 正整数,来替代 上面 S 中 对小面 的编码。

T 上的所有 置换函数,在函数复合下,组成 置换群 S₄₈。但是,因为 角块的面永远置换不到棱块的面,所以 G 仅仅是 S₄₈ 的子群。

用离散的小面来记录魔方的状态过于粗犷,重新审视魔方,我们会得到如下结果:

每个立方块都是一个整体,在任何魔方的操作下,组成它的小面不会分离;

每个立方块,有两种状态信息:位置 和 方向;

角块 和 棱块 在 魔法操作下 相互独立,即,角块 永远不可能 转到 棱块 上,反之亦然。

基于,以上分析,我们首先, 分别 对 角块 和 棱块 进行定位(location):

角块:ufl = 1, urf = 2, ubr = 3, ulb = 4; dbl = 5, dlf = 6, dfr = 7, drb = 8;

棱块:ub = 1, ur = 2, uf = 3, ul = 4; bl = 5, br = 6, fr = 7, fl = 8; db = 9, dr = 10, df = 11, dl = 12;

令 C = {1, 2, 3, 4, 5, 6, 7, 8}, 这里包含 所有 角块的位置信息,可以很容易将 基本操作 对 角块位置的 改变写成轮换形式:

U = (1 2 3 4),

D = (5 8 7 6),

F = (1 6 7 2),

B = (3 8 5 4),

L = (1 4 5 6),

R = (2 7 8 3)

显然,G 作用在 C 上 是 置换群 S₈ 的子群。

同理,令 E = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12},基本操作对于 棱块 位置的改变写成轮换形式为:

U = (1 4 3 2),

D = (9 10 11 12),

F = (3 8 11 7),

B = (1 6 9 5),

L = (4 5 12 8),

R = (2 7 10 6)

同样,G 作用在 E 上 是 置换群 S₁₂ 的子群。

然后,我们分别对 角块 和 棱块 进行定向(orientation):

角块:u/d 为定向面,xyz = 012;

棱块:u/d/f/b 为定向面,xy = 01;

对于保持 定向 信息,我们只需要定义,定位位置 当前 立方块 的 定向面 对应 的 编号就可以了。而对于 基本操作,对 定向的 改变,我们也只需要 记录,原始状态下,经过 基本操作后,各个 定位位置,的 定向面 对应 的 编号就可以了。如果,原始状态下,即, 定向面的编号为 0,经过某操作,到新位置后,定向面编号为 n,则 原来 定向面的编号为 m,经同样操作,到新位置后,定向面编号就是 (n + m) mod k,对于角块 k = 3,对于 棱块 k = 2。0- 不旋转,1-逆时针旋转,2-顺时针旋转。

令,V = (0, 0, 0, 0, 0, 0, 0, 0) 表示 角块的所有定向,则 基本操作为对角块定向的改变为:

U = (0, 0, 0, 0, 0, 0, 0, 0),

D = (0, 0, 0, 0, 0, 0, 0, 0),

F = (1, 2, 0, 0, 0, 2, 1, 0),

B = (0, 0, 1, 2, 1, 0, 0, 2),

L = (2, 0, 0, 1, 2, 1, 0, 0),

R = (0, 1, 2, 0, 0, 0, 2, 1)

对于每一位来说都是 Z₃ ,总共 8 个 Z₃ 就是 Z₃⁸ ,但是 考虑 在 到 7 个 角块固定的情况下,我们无法 单独 旋转 剩下的那个,因此 G 在 V 上的作用 实际上 是 Z₃⁷。

令,W = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) 表示 棱块的所有定向,则 基本操作为对棱块定向的改变为:

U = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),

D = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),

F = (0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0),

B = (1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0),

L = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),

R = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

同理, G 在 W 上的作用 是 Z₂¹¹。

当以上编号混合在一起使用时,为了区分,分别用 c、e、v、w 作为 角块定位、棱块定位、角块定向、棱块定向 编号的前缀,并将编号写成下标。例如:

F = (c₁ c₆ c₇ c₂) (e₃ e₈ e₁₁ e₇) (v₁, v₂, v₀, v₀, v₀, v₂, v₁, v₀) (w₀, w₀, w₁, w₀, w₀, w₀, w₁, w₁, w₀, w₀, w₁, w₀)

辅助工具

在进行下一步分析之前,我们先编写一点 JavaScript 代码,以帮助我们,对 G 中的 操作进行复合。

魔方状态(state)的 格式为:

state:[[角块定位], [棱块定位], [角块定向], 棱块定向]

声明 魔方初始状态 s₀ 如下:

魔方操作(operation)的 格式为:

[[[角块轮换], …], [[棱块轮换], …], [角块旋转], [棱块旋转]]

基本操作声明如下:

声明,在给定状态上执行魔方操作的函数:

声明,从给定状态中分析出魔方操作的函数:

定义 复合 函数:

为了输出简洁,当所有角块(或,棱块)不发生旋转 时,用一对空括号表示。

最后,我们对基本操作进行必要的扩展:

换位子 和 共轭

对于 任意两个 魔方操作 g,h ∈ G,如果,g 和 h 的复合 满足交换律,则:

gh = hg

等式两边右乘 g⁻¹h⁻¹,有:

ghg⁻¹h⁻¹ = hgg⁻¹h⁻¹ = h1h⁻¹ = hh⁻¹ = 1

如果 不满足交换律,则:

ghg⁻¹h⁻¹ ≠ 1

令,[g, h] = ghg⁻¹h⁻¹,称其为 换位子(commutator)。

一般来说,魔方相对面 ,如: F 和 B,U 和 D,L 和 R 之间是可以交换的,即,

[F, B] = [U, D] = [L, R] = 1

所有,换位子 之间是可以交换的,即:

[[g₁, h₁] [g₂, h₂]] = 1

关于,换位子有 性质1:如果 g 和 h 两种操作,只 共同影响 一个 小块 k,其中 g 为 n → k,h 为 m → k,则有 [g, h] = (k, n, m),[h, g] = (k, m, n)。

例如,若 g = (c₁ c₂ c₃), h = (c₁, c₄ c₅),则 k = c₁, n = c₂, m = c₄,于是有:

即,[g, h] = (c₁ c₂ c₄),[h, g] = (c₁ c₄ c₂)。

性质1推论:如果 g 和 h 两种操作,共同影响 的小块,刚好 在 g 和 h 中 分别 形成 轮换 σ 和 τ,则有 [g, h] = [σ, τ]。

例如:若 g = (c₁ c₂ c₃ c₄)(c₅ c₆), h = (c₁ c₂ c₄ c₃)(c₇ c₈),则 它们的共同影响小块 c₁、c₂、c₃、c₄,分别 在 g 和 h 中,组成轮转 (c₁ c₂ c₃ c₄) 和 (c₁ c₂ c₄ c₃),于是有:

即,[g, h] = [(c₁ c₂ c₃ c₄), (c₁ c₂ c₄ c₃)]。

魔方群中还有另外一种 称为 共轭(conjugate)的复合方式:对于 任何操作 g,h ∈ G,称 ghg⁻¹ 为 h 关于 g 的共轭。

共轭具有 性质2:如果 h = (a b c) 而 g 将 A, B, C 分别映射到 a, b, c,则有 ghg⁻¹ = (A B C)。

例如:若 h = (c₁ c₂ c₃), g = (c₁ c₄)(c₂ c₅)(c₃ c₆),则有:

即,ghg⁻¹ = (c₄ c₅ c₆)。

魔方公式

好了!现在利用上面的知识,就可以开始构造魔方公式了。

寻找角块的换位公式

我们发现 B⁻¹ 关于 R⁻¹ 的 共轭 R⁻¹B⁻¹(R⁻¹)⁻¹ = R⁻¹B⁻¹R:

和 F²:

仅有 c₇ 共同影响,于是它们满足 性质1,有:

即,[R⁻¹B⁻¹R, F²] = R⁻¹B⁻¹R F² (R⁻¹B⁻¹R)⁻¹ (F²)⁻¹ = R⁻¹B⁻¹R F² R⁻¹B⁻¹R F² = (c1, c7, c8)。

注意:因为 (ab)(b⁻¹a⁻¹) = abb⁻¹a⁻¹ = a1a⁻¹ = aa⁻¹ = 1,所以 (ab)⁻¹ = b⁻¹a⁻¹。

这里 c₁, c₇, c₈ 不共面,考虑 R² :

刚好 将 1 ↦ 1, 2 ↦ 8, 3 ↦ 7,于是根据 性质2,有:

开头的 RR RRR = R ,于是最终得到 公式C:

即,

R²[R⁻¹B⁻¹R, F²]R⁻² = RB⁻¹RF²R⁻¹BRF²R² = (c₁ c₂ c₃)

寻找棱块的换位公式

我们定义一种新的操作 M:面对 F 面,顺指针旋转 F 和 B 面之间那个中间的面M。M 操作 只改变棱块:

我们发现 M⁻¹(或 M)与 U²:

共同影响 e₄,因此 根据性质1,[M⁻¹, U²] 构成三轮换:

即,[M⁻¹, U²] = M⁻¹U²MU² = (e₂ e₄ e₁₀)。

其实,M⁻¹ 就相当于 FB⁻¹ 的复合,只不过,在执行 M⁻¹ 后,还做了 R 面朝向了 U 的动作。

这时 执行 U² 相当于 执行 R²,于是翻译为 基本操作 [M⁻¹, U²] = FB⁻¹R²BF⁻¹U²,验证:

最后, 根据 性质2,利用 R²U 将 这个 三轮换,换到同一个面上:

倒数第2, 3 项合并后,就得到了 公式D:

R²U[M⁻¹, U²]U⁻¹R² = R²UFB⁻¹R²BF⁻¹UR² = (e₁ e₃ e₂)

寻找角块的旋转公式

观察 D² 关于 RF⁻¹ 的共轭 RF⁻¹D²FR⁻¹:

与 U²:

它们,有共同的轮转 (c₁ c₃),于是根据 性质1推论,有:

[U², RF⁻¹D²FR⁻¹] = [(c₁ c₃), (c₁ c₃)] = (c₁ c₃)(c₁ c₃)(c₃ c₁)(c₃ c₁) = (c₁ c₃)1(c₃ c₁) = (c₁ c₃)(c₃ c₁) = 1

这样以来,[U², RF⁻¹D²FR⁻¹] 就没有了位置变换,仅仅剩下的就是旋转:

于是,我们就得到 公式 E:

[U², RF⁻¹D²FR⁻¹] = U²RF⁻¹D²FR⁻¹U²RF⁻¹D²FR⁻¹ = (v₁, v₀, v₂, v₀, v₀, v₀, v₀, v₀);

公式 E 分别 对 c₁ 和 c₃ 进行 逆时针 和 顺时针 旋转。

寻找棱块的旋转公式

M 和 U 分别执行4次会恢复,那么 MU 执行四次,即,(MU)⁴ 是什么呢?

我们神奇的发现:

(MU)⁴ = F⁻¹BLF⁻¹BDF⁻¹BRF⁻¹BU = (w₁, w₁, w₀, w₀, w₀, w₀, w₀, w₀, w₀, w₁, w₀, w₁)

即,(MU)⁴ 只对 e₁, e₂, e₁0, e₁₂ 旋转;

同样,(MU⁻¹)⁴ :

(MU⁻¹)⁴ = F⁻¹BL⁻¹F⁻¹BD⁻¹F⁻¹BR⁻¹F⁻¹BU⁻¹ = (w₀, w₁, w₁, w₀, w₀, w₀, w₀, w₀, w₁, w₀, w₁)

即,(MU⁻¹)⁴ 只对 e₂, e3, e₁0, e₁₂ 旋转;

因为 棱块旋转 2 次就等于没有旋转,于是 (MU)⁴ 和 (MU⁻¹)⁴ 的复合 结果 只对 e₁ 和 e₃ 进行旋转,这就是 公式F:

(MU)⁴(MU⁻¹)⁴ = (w₁,w₀, w₁, w₀, w₀, w₀, w₀, w₀, w₀, w₀, w₀)

可以验证:

暴力搜索

两轮换 称为 对换,在魔方群中 单独的 对换操作,是不可能的 因此 三轮换,成立 公式构造的 关键,除了上面利用 性质1 来 找寻 三轮换 的 方法为,我们还可以用计算机,进行暴力搜索。例如:在 2 个 R,3 个 R⁻¹, 3 个 U, 2 个 U⁻¹ 的全排列中,进行三轮换搜索:

我们得到:

即,R⁻¹U⁻¹RURURU⁻¹R⁻¹U⁻¹ = (e₃ e₄ e₁₀)。然后 根据 性质2,利用 R² 将 这个 三轮换,换到同一个面上:

同样,将开头的 5 个 R 合并,就得到 和 公式D 类似的公式:

RU⁻¹RURURU⁻¹R⁻¹U⁻¹R² = (e₂ e₃ e₄)

对于旋转来说,以上的分析,最少只能的道 两个 角块(或 棱块)的旋转,我们无法做到 仅仅旋转 一个角块(或 棱块)。

上面,给定的公式都保证 角块(或 棱块)的旋转 时,所有小块位置不变,但 实际上,不一定需要这么严格,我们可以允许 与旋转小块同处一个面 内 小块的位置变换。通过暴力搜索,我们得到了公式B:

即,

RUR⁻¹URU²R⁻¹ = (c₁ c₃)(c₂ c₄)(e₁ e₂ e₄)(v₂, v₂, v₀, v₂, v₀, v₀, v₀, v₀);

以及,公式A:

即,

FRUR⁻¹U⁻¹F⁻¹ = (c₁ c₂)(c₃ c₄)(e₁ e₂ e₃)(v₀, v₂, v₁, v₀, v₀, v₀, v₀, v₀)(w₀, w₁, w₁, w₀, w₀, w₀, w₀, w₀, w₀, w₀, w₀, w₀);

公式 AB 都是 只 改变 顶层 位置的 操作。

其实,公式A就是 F[R, U]F⁻¹,其中 [R, U]:

[R, U] 的功效是 (e₁ e₂ e₇) ,即,将 顶层棱块 e₁ e₂ 和 中层 棱块 e₇ 轮换,但副作用 (c₂ c₇) 变动了 底层。不过幸运的是,我们找到了 [F⁻¹, U⁻¹]:

[ F⁻¹, U⁻¹] 的功效 和 [R, U] 类似,而其副作也是 (c₂ c₇)。因为 (c₂ c₇)(c₂ c₇) = 1,所以 [U⁻¹, F⁻¹] 的 刚好可以抵消 [R, U] 的副作用。于是,我们就得到了 公式A的附带公式:

[R, U] [ F⁻¹, U⁻¹] 和 [ F⁻¹, U⁻¹] [R, U]

功效分别是 (e₁ e₂ e₇ e₄ e₃) 和 (e₁ e₂ e₃ e₄ e₇),即,将顶层的 四个棱块 与 中层 的 棱块 e₇ 轮转。

在魔方数学原理的指导下,通过这种计算机暴力搜索的方式,我们还可以找到很多有用的公式,目前紧紧OLL公式就有 57 个,而更多的复杂公式几百上千。

众所周知的 ”七步公式还原法“(层先法) 就包括了从这些公式中选出来的 一组基础公式(包括上面提到的 公式ABCD)。(七步公式还原法,已经有条友在回答中详细介绍过了,我这里就不累述了。)

不知不觉,已经写了 5千余字了。关于魔法群还有很多更深入的内容,例如:上帝数 等,由于篇幅有限,这里不能一一展开,以后有机会再说。

(小石头,数学水平有限,出错在所难免,希望各位老师和同学批评指正。)

(补充 2019/10/30)

我将辅助工具的代码放在这里,以便想要自己试验的条友复制粘贴。

运行环境:chrome 浏览器;

文件名:rc.html,包含代码:

<script>const s0 = [[1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; const U = [[[1, 2, 3, 4]],[[1, 4, 3, 2]], [0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];const D = [[[5, 8, 7, 6]],[[9, 10, 11, 12]],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];const F = [[[1, 6, 7, 2]],[[3, 8, 11, 7]], [1, 2, 0, 0, 0, 2, 1, 0],[0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0]]; const B = [[[3, 8, 5, 4]],[[1, 6, 9, 5]], [0, 0, 1, 2, 1, 0, 0, 2],[1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0]];const L = [[[1, 4, 5, 6]],[[4, 5, 12, 8]], [2, 0, 0, 1, 2, 1, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];const R = [[[2, 7, 8, 3]],[[2, 7, 10, 6]], [0, 1, 2, 0, 0, 0, 2, 1],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];function perform(state, … operations) { for(var g of operations) { var newstate = [g[0].reduce((l, c) => permute(l, c), state[0]), g[1].reduce((l, c) => permute(l, c), state[1])]; newstate[2] = turn(state[0], state[2], newstate[0], g[2], 3); newstate[3] = turn(state[1], state[3], newstate[1], g[3], 2); state = newstate; } return state;}function permute(location, cycle) { var newlocation = Array.from(location); for(var i = 0; i < cycle.length – 1; i++) { newlocation[cycle[i] – 1] = newlocation[cycle[i+1] – 1]; } newlocation[cycle[cycle.length – 1] – 1] = location[cycle[0] – 1]; return newlocation ;}function turn(oldlocation, oldorientation, newlocation, spin, mod) { var neworientation = []; for (var i = 0; i < newlocation.length; i++) { var j = oldlocation.indexOf(newlocation[i]); neworientation[i] = (oldorientation[j] + spin[i]) % mod; } return neworientation;}function parse(state) { return [parse_cycle(state[0]), parse_cycle(state[1]), Array.from(state[2]), Array.from(state[3]) ];}function parse_cycle(location) { var flags = [], cycles = []; for (var i = 0; i < location.length; i ++) { if (i + 1 != location[i] && !flags[i]) { var cycle = [i + 1, location[i]], j = location[i] – 1; while(true) { flags[j] = 1; if (location[j] == i + 1) break; cycle.push(location[j]); j = location[j] – 1; } cycles.push(cycle); } } return cycles;}function compose(… operations) { return parse(perform(s0, … operations));}const str = arr => arr.reduce((s, x) => s + (x[0] instanceof Array ? ‘[(‘ + x.map(y => y.join(‘ ‘)).join(‘)(‘) + ‘)]’ : (x.length == 0 ? ‘[]’ : ‘(‘ + x.join() + ‘)’)), ”) .replace(‘(0,0,0,0,0,0,0,0)’, ‘()’) .replace(‘(0,0,0,0,0,0,0,0,0,0,0,0)’, ‘()’);const c = (… ops) => str(compose(… ops)); const UU = compose(U, U), UUU = compose(U, U, U);const DD = compose(D, D), DDD = compose(D, D, D);const FF = compose(F, F), FFF = compose(F, F, F);const BB = compose(B, B), BBB = compose(B, B, B);const LL = compose(L, L), LLL = compose(L, L, L);const RR = compose(R, R), RRR = compose(R, R, R);const cycle = (… x) => [[x], [], s0[2], s0[3]];const M = [[],[[2,4,12,10]],[0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1]];const MMM = compose(M, M, M);function perm(arr, callback, index){ var swap = (a, i, j, t) => (t = a[i], a[i] = a[j], a[j] = t); index = index || 0; if (index < arr.length) { for (var j = index; j < arr.length; j++) { swap(arr, index, j); if (perm(arr, callback, index + 1)) return true; swap(arr, index, j); } } else { return callback(arr); }}</script>

文件名:rc2.html,包含代码:

<script>function perm(arr, callback, index){ var swap = (a, i, j, t) => (t = a[i], a[i] = a[j], a[j] = t); index = index || 0; if (index < arr.length) { for (var j = index; j < arr.length; j++) { swap(arr, index, j); if (perm(arr, callback, index + 1)) return true; swap(arr, index, j); } } else { return callback(arr); }}R._tag = “R”; RRR._tag = “R⁻¹”; U._tag = “U”, UUU._tag = “U⁻¹”;perm([RRR, UUU, R, U, RRR, UUU, R, U, R, UUU], x => { var g = compose(… x); console.log(“+”); if (g[0].length == 0 && g[1].length == 1 && g[1][0].length == 3 && g[2].toString() == s0[2].toString() && g[3].toString() == s0[3].toString()) { console.log(x.reduce((y, z) => y + z._tag, “”)); return true; }});</script>

块面是什么美食(魔方的原理是什么)

颗粒面粉适合做油条吗?

我认为不合适。 首先,我们先来了解一下颗粒面粉的定义,“颗粒” 是外在特征,粉才是本质,实际上颗粒面粉属于高筋面粉,目前市场上颗粒粉主要有精致级和特一级两种,以精致级为主。 做油条有三种面粉可以选择。一、高筋面粉 高筋面粉是蛋白质含量在百分之11.5%以上,蛋白质含量高,所以筋度强,而且它具有活性表面光滑,手抓不容易成团,适合做有嚼感的面包和面条(如果非要做也可以,油条的弹性是满足了,可是口感确差一点)二、中筋面粉 做出来的面团网络丰富,持气性好,所以用它来做油条,在油炸的过程中,会变得又大又不会破,外脆内软,非常的蓬松好吃。(推荐用赞)三、低筋面粉 低筋面粉又称蛋糕粉,是蛋白质8.5%下的面粉,通常用来做蛋糕、饼干、小西点。(低筋面粉做出来的油条软塌塌的,口感不好,还很油腻) 最后这个问题就回答完了,现在疫情期间,在家闲着也是闲着,不如全家一起动员,来尝试做一下油条,又可以体会到欢乐也可以得到美食[灵光一闪] 在附送一份油条做法1、首先在盆中放500克的面粉,4克小苏打,4克双效泡打粉,1勺盐,打入一个笨鸡蛋,用筷子先把鸡蛋搅散,和所有的材料混合在一起,再加280毫升的温水边倒边搅拌,搅拌成面絮状之后倒入20毫升的油2、然后揉成面团,在面团的上面再涂抹一些油,然后盖上盖子,密封醒发一夜3、醒发好的面团千万不要揉搓,直接按压成长条,再切成均匀的长条4、把两个长条对折在一起,用筷子在中间压一下,再拿着两头扭几圈5、不需要二次醒发,下到5成热的油锅中,开中小火慢慢炸,炸至的过程中要给油条翻一下面,使其受热均匀6、炸至两面金黄,就可以捞出控油出锅了7、这样做油条简单,快速,而且炸出的油条根根都很蓬松,气孔非常的明显,比外面买的还好吃,自己做的也很有成就感,吃着也放心

手抓饼和面要不要放油?

手抓饼的做法:

手抓饼是很受人们喜欢的人气美食,起源于台湾的葱抓饼,后来传到内地。手抓饼的特点是圈圈环绕,千层百叠且层如薄纸。尤其是刚烤好的饼子,外层金黄酥脆,内层柔软白嫩,用手抓之,薄薄面丝相连,散发着浓郁诱人的葱香,让人吃得欲罢不能。接下来的教程中,会详细介绍怎么做薄又脆,千层百叠的手抓饼。

主料:面粉500克

配料:香葱5根,葱油小半碗,盐2茶匙,五香粉半茶匙,面粉2大勺

1、备好所有材料。

2、面粉加入少许的盐搅拌下,再加入分次的加入冷水,热水搅拌均匀。

3、然后拿到案板上使劲的揉搓几分钟。

4、第一次揉搓出的面团是不光滑并很粗糙的。

5、这时候开始进行第一次的醒发,就是盖上湿布,醒个10分钟。(这步是为了让面团松弛松弛)

6、拿出来后再次的揉搓几分钟,然后时候就可以看见面团已经开始呈光滑状了。(这时候再一次的醒发10分钟,是为了使面团能够更好的光滑,松软)。

7、这次拿出来后再次的好好揉搓下,再均匀的分割成5个面团,(当然面团也可以分的更大些,或更小些。)

8、在案板上刷一层薄薄的油,擀圆。

9、然后叠起来或单独放起来。(如果是叠起来一定要保证保证每层都刷油了,以防粘连起来)。

10、盖上保鲜膜,醒发个10分钟。

11、准备调料部分,先把葱切碎备好,葱油备好。

12、把调料都混合一起倒入碗中。

13、使劲的搅拌下,以使盐,五香粉,面粉搅拌开。

14、面团醒好后拿出来,在案板上从一头,轻轻的使劲的拽开来,已达到面团的最大程度。(这步就看你面团和的程度和醒发的程度了,如果这两样都做得好的话,那这步拉伸就不是问题那)。

15、面团拉伸的程度能出手膜是最好的。(话说当时这步的手膜立即让我让我想到了做吐司要达到手膜,让我想试试这种做法能不能用在做面包上呢,或许有空我可以实验下那)。

16、刷上一层调料汁。(当然这汁不能多了,如果刷的多了在后面的卷和烙的时候会出很多的油的)。

17、从一头一层一层的叠起来。

18、直到叠完为止。

19、再从一头边拉伸面团边卷起来。

20、直到全卷完为止。

21、往下摁扁稍醒个几分钟,然后擀圆。

22、放入锅中煎制。

23、直到两面呈金黄色为止。

24、再趁热用筷子挑开饼,就能形成一层层的饼丝了。

手抓饼的制作小窍门:

1、要想吃层层叠叠的手抓饼,那面团就很重要了,首先是面要用热水和冷水掺着用,因为这个做的话能保证面团会保持一种柔软度,为后面的拉伸工作做了很大帮忙,而且还有面团在最开始的时候要和的不软不硬是最恰当,最后是面团要多揉几次,多醒几次,以保证面团能够最大程度的拉伸开。

2、手抓饼怎么能少了葱油和葱花呢,这两个都是必备的呀,有了这两个那这个饼离好吃就近了些,之所以说近了些,还因为这饼还少不了五香粉和面粉,五香粉是增加口感的。如果有自制的万能葱油,那饼的味道就会更好吃一些了。

3、做这个饼的时候最好是能在家里的大理石板上或光滑的板上操作,因为这样在拉伸面面团的时候会方便很多。

4、最后说的是这款手抓饼是酥脆型的而不是那种柔软十足的市面上的手抓饼。

以上就是怎么自制手抓饼的详细做法过程及美味的小窍门,相信大家很容易就能学会了。做好的手抓饼可搭配鸡蛋,培根,蔬菜等辅料,老少皆宜。而且深受大家的喜欢。自制手抓饼的做法,营养又美味。

一日之计在于晨,好的早餐对于一天的开始来说,是相当重要的一环,可以让你精神百倍的投入到工作中去。

因为手抓饼的做法快捷,吃起来方便,所以很多人都把手抓饼当早餐来吃,但是大多数人吃手抓饼都是在外面早餐店上买的,很少有人会自己做,可能都觉得做手抓饼太麻烦,今天我就教大家做手抓饼,不仅做法简单,而且还干净卫生。

1、玻璃碗里面加入面粉加一小勺的盐,适量的玉米食用油,然后往里面加冷水,搅拌成没有干粉的面絮状,直接上手揉面5分钟揉成光滑不粘手的面团。

2、然后盖上玻璃碗醒面30分钟,面谈型号抽成长条,然后用刀切成大小一致的小剂子。

3、 把面团揉搓圆,然后用刀切条,从里面往外,搓成长条,然后再卷成圆饼收口放在下面按成饼状,用擀面杖擀薄。

4、锅里面加油烧热,把饼皮放进去中火慢烙,烙饼的过程中要多翻面,面油干了,要记得添加油,因为手抓饼也是很吸油的。

5、烙到两面金黄酥脆,就打入一个鸡蛋上去,用铲子捣碎。把鸡蛋煎定型之后翻面把鸡蛋煎熟出锅。

6 火腿肠切成长条状,厚薄可自己把握,在锅中煎一会,然后把火腿肠放在饼上。

也可以将火腿肠切成小块儿状,和鸡蛋一起搅拌一下,在煎饼时倒在饼面上。

7、酱用的是买来的番茄沙司,也可以买甜面酱或者辣酱。这个需要根据个人的口味来添加,饼出锅后酌量挤上一些。

8、为了增加饼的口感,可以放入绿豆芽和炒熟的土豆丝。

手抓饼的做法其实还有很多种,不想自己做饼的可以在超市里或某宝上买现成的,

大家有没有兴趣来自己动手做一做呢?

千层百叠【手抓饼】

材料

【面团材料】:面粉 200g、温水130g左右

【配料】:葱花、盐、五香粉、香麻油

做法

1. 面粉倒入大碗,温水缓缓倒入,边倒边用筷子往一个方向搅拌成雪片状,用手揉成光滑面团。

2. 揉好的面团,盖上湿布醒30分钟左右。

3. 切好的葱花放小碗里,用一点点盐、一小撮五香粉和一汤匙香麻油拌匀腌制。

4. 案板上撒些面粉,把面团揉一会儿,然后擀开成薄的大片(越薄越好)。

5. 在面片上均匀涂上腌制好的葱花。

6. 用刀在面饼上切间隔0.5cm宽的细条(记得两端各留一公分不要切断)。

7. 用手从一端开始卷起来成长条状。

8. 把长条从一端卷起,边卷边拉伸。

9. 全部卷起来成一个面团。

10. 用擀面杖把面团擀薄。

11. 锅烧热放入一茶匙食用油,把饼放入用中小火煎。

12. 煎好一面翻面,煎到两面金黄后,用筷子把饼从中间挑松即可。

小诀窍

1. 面团揉的湿软一些比较好。

2. 步骤4中的面饼要擀的尽量薄,这样成品做出来层次多,好吃也好看,但是步骤10中的面饼不要擀太薄,有点厚度比较好。折好的面饼我这图示里面是擀的偏薄的,成品口感稍脆硬,如果你喜欢松松的口感,那么折好后擀面饼时动作不要太用力,成品会松软许多。

3. 煎好后的饼,用双手从两边轻轻向内拍打挤压,或以筷子挑松。

椒盐手抓饼

材料

A:面粉100克,沸水50克,

B:面粉100克,盐2克,温水(50度)60克,

辅料:葱油,椒盐,芝麻

做法

1. 将A材料中的沸水冲入面粉中,揉成烫面团.

2. 将B材料的面粉和盐混合均匀,加入温水,和成面团.

3. 将A面团和B面团混合,揉制过程中分次地加入少许水,用拳头将两个面团轧制均匀成柔软的面团,饧发30分钟.

4. 饧发好的面团分成两等份,取一份,擀开成长方形的薄面片,淋上葱油,涂抹均匀,再均匀撒上椒盐和芝麻.

5. 将面片从一端开始,层层叠起后,将层次面朝上,从一端盘起,边盘边横向轻轻抻长,最后收成圆形.用擀面杖轻轻擀薄成饼坯.

6. 平底锅小火加热,倒入适量油,油热后,放入饼坯,盖上锅盖,一面烙好后,翻面,再烙至两面都金黄.

7. 打开锅盖,用两个锅铲轻轻将饼铲松,下手抓散即可.

葱香手抓饼

材料

材料A:面粉150克,开水80克

材料B:面粉150克,盐4克,温水90克

辅料:葱花,芝麻,油渣(切碎)

做法

1、将材料A中的开水冲入面粉中,揉成烫面团。

2、将材料B的面粉和盐混合均匀,加入温水和成面团。

3、步骤(1)和步骤(2)面团混合,揉制过程中分次地加入少许水,用拳头将两个面团混合成非常柔软的面团,醒半个小时。

4、醒好的面团分成四等份,取一份,擀开成长方形的薄面片,撒上葱花、芝麻、碎油渣。

5、将面片从一端开始,象折纸扇子那样层层叠起,将层次面朝上,从一端盘起,边盘边横向轻轻拽长,最后收成圆形。

6、饼擀薄(面很软,我是用手轻轻按开,然后用擀面杖推平)后 ,平底锅小火加热,倒入适量油(最好兑点荤油),油热后放入饼,一面烙好后,翻面再烙至两面金黄即可。

山西手抓饼

材料

面粉250克,热水(100度)100ml,冷水50ml,食用油50ml,葱花,食盐3克

做法

1.【手抓饼面粉的和制方法】

2.将面粉放入和面盆中,徐徐分次倒入少许热水

3.用筷子将面粉搅拌成雪花状的小絮片

4.再分次徐徐倒入少许冷水,用筷子将冷水与絮状的小片充分搅拌混合

5.用手将搅拌好的絮片,揉合在一起

6.揉成光滑的面团

7.盖上湿布,放在一边饧制30分钟~1小时

8.【山西手抓饼的制作过程】

9.将饧好的面团放在案板上,用刀分成大小均匀的两等份,每份约125克

10.取其中一等份,用手将面团稍微揉成圆形光滑面剂子,然后用擀面杖将面团擀大擀开擀薄,成厚度约为1毫米的大薄面片

11.在面片上均匀的抹一层食用油

12.上面分散均匀的撒少许食盐

13.均匀的撒一些葱花

14.用手将面片的一角轻轻提起

15.将提起的那一角向面片的中央折回,并用手轻轻的压一压

16.然后将那一角再拉回到原位置,重复6、7、8三个步骤,将其余的三个角也如此压一遍

17.将将面皮向中间对折

18.将对折后的面皮翻个面

19.将面皮向上翻折,可以发现面皮形成了如扇子形状的长条状

20.用双手向两边拉面条,使其撑长至原长度的1.5倍左右,并用手指稍将面皮压扁些

21.从面条的一端将面皮卷起,注意卷紧些

22.一直卷到另一端,将另一端面皮压在面饼卷下,将有葱花的切面朝上放置

23.盖上保鲜膜,静置10分钟左右,使面卷松弛

24.去掉保鲜膜,用手掌心将面卷压扁,成面饼卷

25.加盖保鲜膜,静置10分钟左右,使面饼卷松弛

26.去掉保鲜膜,用擀面杖轻轻将面饼卷擀薄约0.4CM左右

27.将平底锅放在火上烧热

28.用厨房用纸蘸少许食用油,均匀的抹在锅底

29.将擀薄的面饼放入锅中,用中小火烙制

30.烙到底部变硬,饼可以自由旋转时,将饼翻面

31.用铲子请轻轻的抵住饼面,将饼来回的在锅里移动摩擦转动三圈

32.如此反复21、22、23三个步骤,将饼翻三次面,转动9圈直至面饼两面都煎成金黄色即可。

喜欢我的点个关注微笑

樱花号文章内容来源于网络,只做分享,不修改内容中任何文字。发布者:小樱,本文标题:块面是什么美食(魔方的原理是什么),本文地址:https://www.yinghuahao.net/archives/37775,转载请注明出处!

Like (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小樱小樱
Previous 2023-02-27
Next 2023-02-27

相关推荐

发表回复

Please Login to Comment