找回密码
 快速注册
搜索
查看: 405|回复: 13

关灯游戏

[复制链接]

3149

主题

8387

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65397
QQ

显示全部楼层

hbghlyj 发表于 2022-2-5 07:32 |阅读模式
本帖最后由 hbghlyj 于 2022-2-11 21:19 编辑 关灯游戏
Here is a fun game, written by Joseph Khoury. The goal is to turn off all the lights. Each time you click on a square, this square, as well as its immediate neighbors, are flipped.

830

主题

4865

回帖

3万

积分

积分
36175

显示全部楼层

isee 发表于 2022-2-5 22:46
又有啥新东西出来了?

3149

主题

8387

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65397
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2022-2-6 00:23
本帖最后由 hbghlyj 于 2022-2-11 21:23 编辑

3149

主题

8387

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65397
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2022-2-6 00:39
回复 2# isee
如何证明不可以把所有的灯关掉呢

830

主题

4865

回帖

3万

积分

积分
36175

显示全部楼层

isee 发表于 2022-2-6 09:08
回复 4# hbghlyj

哈哈哈,勾的是灯?

48

主题

992

回帖

1万

积分

积分
14981
QQ

显示全部楼层

Czhang271828 发表于 2022-2-10 15:22
本帖最后由 Czhang271828 于 2022-2-11 15:49 编辑 昨天看走眼了, 这题和 Riemann-Roch Theorem 似乎没有太大关系. 个人解法如下:

为方便起见, 定义"解决问题"为"把所有 $1$ 变成 $0$". 可通过如下步骤判断有解的充要条件:

Step 1: 可以通过某种显然的方法将最后一横行的所有勾清除, 继而可清除倒数第二横行的勾... 以此类推, 将所有勾移动至第一横行.

方法如下:
$$
\begin{pmatrix}
0&0&1&0&1\\
0&0&1&1&1\\
0&1&1&0&1\\
0&1&\boxed0&0&\boxed1\\
0&0&1&0&1\\
\end{pmatrix}\implies\begin{pmatrix}
0&0&1&0&1\\
0&0&1&1&1\\
0&1&0&0&0\\
0&0&1&0&0\\
0&0&0&0&0\\
\end{pmatrix}.
$$
Step 2: 若存在解, 则求解步骤可交换. 从而可以在点击第一横行的"某些方块"后通过从上到下的递归完整求解. 例如点击左表的 $(1,2)$, $(1,3)$ 后可自然递归求解:
$$
\begin{pmatrix}
1&\boxed1&\boxed1&0&0\\
0&0&0&0&0\\
0&0&0&0&0\\
0&0&0&0&0\\
0&0&0&0&0\\
\end{pmatrix}\implies\begin{pmatrix}
0&1&1&1&0\\
0&\boxed1&\boxed1&\boxed0&0\\
0&0&0&0&0\\
0&0&0&0&0\\
0&0&0&0&0\\
\end{pmatrix}\implies\cdots
$$
Step 3: 看懂规律后, 我们将 Step 1 后的第一横行记作 $0$-$1$ 横向量 $v_0$ (其余横行为 $0$ 向量). 从而有解等价于存在 $0$-$1$ 横向量 $v_1$ 使得第一横行在点击 $v_1$ 对应位置后可以通过自上到下的递归求解.

Step 4: 设 $u=(a\,b\,c\,d\,e)$, 记左平移 $u^+:=(b\,c\,d\,e\,0)$, 右平移 $u^-:=(0\,a\,b\,c\,d)$. 再记 $\Delta^1 u=u^++u^-$, $\Delta^{n+1}u=\Delta(\Delta^n u)$. 此处的加法定义在有限域 $\mathbb F_2$ 上, 即 $0+0=1+1=0$, $1+0=0+1=1$. 再注意到 $^\pm$, $\Delta^k$ 与加减法可交换可结合, 从而有解等价于存在 $v_1$ 使得以下变换成立:
$$
\begin{pmatrix}v_0\\0\\0\\0\\0\end{pmatrix}\implies\begin{pmatrix}v_0+(1+\Delta^1)v_1\\ v_1\\0\\0\\0\end{pmatrix}\implies
$$

$$
\begin{pmatrix}0\\v_1+(1+\Delta^1)[v_0+(1+\Delta^1)v_1]\\v_0+(1+\Delta^1)v_1\\0\\0\end{pmatrix}\implies\cdots\implies \begin{pmatrix}0\\0\\0\\0\\0\\\end{pmatrix}.
$$

实际上, 记 $A=\begin{pmatrix}1+\Delta^1&1\\1&0\end{pmatrix}$, 则上述过程为
$$
\begin{pmatrix}v_0\\0\\0\\0\\0\end{pmatrix}\implies\begin{pmatrix}A\binom{v_1}{v_0}\\0\\0\\0\end{pmatrix}\implies\begin{pmatrix}0\\A^2\binom{v_1}{v_0}\\0\\0\end{pmatrix}\implies\cdots\implies\begin{pmatrix}0\\0\\0\\A^4\binom{v_1}{v_0}\end{pmatrix}\implies\begin{pmatrix}0\\0\\0\\0\\0\\\end{pmatrix}.
$$
即 $\begin{pmatrix}1+\Delta^1&1\\1&0\end{pmatrix}^5\begin{pmatrix}v_1\\v_0\end{pmatrix}=\begin{pmatrix}0\\\ast\end{pmatrix}$. 记一族映射 $\{a_k\}_{k\geq 0}$ 满足 $a_0=0$, $a_1=1$, $a_{k+2}=(1+\Delta^1)a_{k+1}+a_k$, 则 $\begin{pmatrix}1+\Delta^1&1\\1&0\end{pmatrix}^5=\begin{pmatrix}a_2&a_1\\a_1&a_0\end{pmatrix}^5=\begin{pmatrix}a_6&a_5\\a_5&a_4\end{pmatrix}$.

Step 5: $\begin{pmatrix}1+\Delta^1&1\\1&0\end{pmatrix}^5\begin{pmatrix}v_1\\v_0\end{pmatrix}=\begin{pmatrix}0\\\ast\end{pmatrix}$ 即 $a_6v_1=a_5v_0$, 即 $\{a_k\}_{k\geq 0}$ 作为矩阵时,  $a_5 v_0$ 包含在 $a_6$ 的列向量空间中.

Step 6: 作为矩阵, $a_0=O_{5\times 5}$, $a_1=I_{5\times 5}$,
$$
\Delta^1=\begin{pmatrix}
0&1&0&0&0\\
1&0&1&0&0\\
0&1&0&1&0\\
0&0&1&0&1\\
0&0&0&1&0\\
\end{pmatrix}.
$$
据递推式 $a_{k+2}=(1+\Delta^1)a_{k+1}+a_k$ 解得
$$
a_5=\begin{pmatrix}
0&0&0&0&1\\
0&0&0&1&0\\
0&0&1&0&0\\
0&1&0&0&0\\
1&0&0&0&0
\end{pmatrix}
,\quad a_6=
\begin{pmatrix}
0&1&1&0&1\\
1&1&1&0&0\\
1&1&0&1&1\\
0&0&1&1&1\\
1&0&1&1&0\\
\end{pmatrix}.
$$
从而 $v_0$ 应属于 $a_5^{-1}a_6$ 的列空间, 即
$$
\mathrm{span}\left\{
\begin{pmatrix}1\\0\\0\\0\\1\end{pmatrix},
\begin{pmatrix}0\\1\\0\\1\\0\end{pmatrix},
\begin{pmatrix}0\\0\\1\\1\\1\end{pmatrix}
\right\}.
$$
从而所有可解情形对应的 $v_0$ 为向量 $\begin{pmatrix}1\\0\\0\\0\\1\end{pmatrix},
\begin{pmatrix}0\\1\\0\\1\\0\end{pmatrix},
\begin{pmatrix}0\\0\\1\\1\\1\end{pmatrix}$ 在 $\mathbb F_2$ 上的线性组合, 共计 $8$ 类.

Step 7: 实际操作如下 (以一楼题目为例, 目标是关掉所有灯):

1. 经 Step 1 得 $\begin{pmatrix}
   1&0&0&0&1\\
   0&0&0&0&0\\
   0&0&0&0&0\\
   0&0&0&0&0\\
   0&0&0&0&0\\
   \end{pmatrix}$.

2. 由 $a_5v_0=a_6v_1$​, 得
   $$
   \begin{pmatrix}
   1\\0\\0\\0\\1
   \end{pmatrix}=\begin{pmatrix}
   0&1&1&0&1\\
   1&1&1&0&0\\
   1&1&0&1&1\\
   0&0&1&1&1\\
   1&0&1&1&0\\
   \end{pmatrix} v_1
   $$
   观察得 $a_6$ 矩阵中前两列相加即为 $a_5v_0$, 从而取 $v_1=(1\,1\,0\,0\,0)$.

3. 在$\begin{pmatrix}
   1&0&0&0&1\\
   0&0&0&0&0\\
   0&0&0&0&0\\
   0&0&0&0&0\\
   0&0&0&0&0\\
   \end{pmatrix}$ 中点击 $(1,1)$, $(1,2)$ 中元素, 再从上到下地消元即可.

判断与解决 $n\times n$ 情形的计算步骤是 $n^3+O(n^2)$, 其中所有加减乘除运算都是 $\mathbb F_2^n$ 上的, 因此跑起来不慢.
无钱佮歹看、无样佮歹生、无汉草佮无文采、无学历佮无能力、无高度无速度无力度共闲无代志。(闽南话)
口号:疼惜生命,远离内卷。

48

主题

992

回帖

1万

积分

积分
14981
QQ

显示全部楼层

Czhang271828 发表于 2022-2-11 15:55
回复 6# Czhang271828

大一点的灯阵游戏规则为何?

3149

主题

8387

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65397
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2022-2-11 21:16
本帖最后由 hbghlyj 于 2022-2-11 23:30 编辑 回复 7# Czhang271828
我觉得规则应该是:
如果右边1格和下边1格均未勾选且当前格子被勾选,则把当前格子取消勾选,再把右边1格和下边1格勾选;
如果右边1格和下边1格中至少有1个被勾选,或者当前格子未被勾选,则无法操作..




用按位异或 ^ 数据交换
如果想实现两个数互换,但是不想新建变量,可以用异或 ^

let a = 5
let b = 6
a ^= b // 3
b ^= a // 5
a ^= b // 6

"异或"是mod 2加法,用这个可以快速理解上面的三步操作:
a^=b以后,a是原先的a+b
b^=a以后,b是b+(a+b)也就是原先的a
a^=b以后,a是(a+b)+a也就是原先的b

3149

主题

8387

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65397
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2022-2-11 21:25
下面两个游戏的初始状态不同但规则相同:

3149

主题

8387

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65397
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2022-2-11 21:33

48

主题

992

回帖

1万

积分

积分
14981
QQ

显示全部楼层

Czhang271828 发表于 2022-2-11 22:03
本帖最后由 Czhang271828 于 2022-2-11 22:26 编辑 糊了一个随机生成玩玩...代码比较垃圾. 鉴于上面的列向量空间是三维的, 有解的概率自然为 $\dfrac{2^3}{2^5}=\dfrac{1}{4}$...

无钱佮歹看、无样佮歹生、无汉草佮无文采、无学历佮无能力、无高度无速度无力度共闲无代志。(闽南话)
口号:疼惜生命,远离内卷。

48

主题

992

回帖

1万

积分

积分
14981
QQ

显示全部楼层

Czhang271828 发表于 2022-2-11 22:20
回复 6# Czhang271828

看了一些论文, 最优算法如下:
① 经过 Step 1, 得 $v_0$.
② 在全 $0$ 的情形下仅点击 $(n,m)$ 处 (相邻数字因此改变), 从下到上递归后, 记录第一横行的状态 $u_m$.
③ 判断 $v_0$ 是否属于 $\{u_k\}_{k=1}^n$ 生成的向量空间. 此处相当于解一个 $Ax=b$ 的 $n$ 维方程, 该步骤的复杂度决定了求解整个问题的复杂度, 大概为 $n^{2.373}$ (参考 Optimized CW-like algorithms).

48

主题

992

回帖

1万

积分

积分
14981
QQ

显示全部楼层

Czhang271828 发表于 2022-2-12 13:20
回复 1# hbghlyj


可以玩玩 Simon Tatham's Puzzles,  直接进官网即可, 开源的 (C语言).

或者
  1. sudo apt-get install sgt-puzzles
复制代码
.

830

主题

4865

回帖

3万

积分

积分
36175

显示全部楼层

isee 发表于 2022-2-12 19:41
回复 13# Czhang271828


linux 也来了~

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 18:20

Powered by Discuz!

× 快速回复 返回顶部 返回列表