🔦💡 关灯挑战!💡🔦你能在几步之内关掉所有的灯吗?

231 天前
 AlexJesus
https://kuakua.app/zh/games/lightsoff
你能在几步之内关掉所有的灯吗?🔲⬛ 经典益智游戏来了!🧩 你需要多少步才能通关?😎

点击方块,关灯,看看你是否能打破自己的最佳时间!🕹️ 准备好接受挑战了吗?👀
2022 次点击
所在节点    分享发现
22 条回复
pigf
231 天前
我这智商有点玩不转
lxdlam
231 天前
在 GF(2) 域上解线性方程组。
zihuyishi
231 天前
我写了一个深搜,算的 13 步能跑完,不知道对不对
```golang
package main

import "fmt"

const N = 5

type Status [N][N]bool

func (s Status) Click(x, y int) Status {
s[x][y] = !s[x][y]
if x > 0 {
s[x-1][y] = !s[x-1][y]
}
if x < N-1 {
s[x+1][y] = !s[x+1][y]
}
if y > 0 {
s[x][y-1] = !s[x][y-1]
}
if y < N-1 {
s[x][y+1] = !s[x][y+1]
}
return s
}

func (s Status) IsAllOn() bool {
for i := 0; i < N; i++ {
for j := 0; j < N; j++ {
if !s[i][j] {
return false
}
}
}
return true
}

func (s Status) Hash() int64 {
h := int64(0)
for i := 0; i < N; i++ {
for j := 0; j < N; j++ {
h = h * 2
if s[i][j] {
h += 1
}
}
}
return h
}

type Node struct {
Status Status
Step int
}

func search(s Status) (int, bool) {
searched := make(map[int64]bool)
queue := make([]Node, 0)
queue = append(queue, Node{Status: s, Step: 0})
searched[s.Hash()] = true
for len(queue) > 0 {
cur := queue[0]
queue = queue[1:]
if cur.Status.IsAllOn() {
return cur.Step, true
}
for i := 0; i < N; i++ {
for j := 0; j < N; j++ {
next := cur.Status.Click(i, j)
if next.IsAllOn() {
return cur.Step + 1, true
}
if !searched[next.Hash()] {
queue = append(queue, Node{Status: next, Step: cur.Step + 1})
searched[next.Hash()] = true
}
}
}
}
return 0, false
}

func main() {
s := Status{
{false, true, false, false, false},
{true, true, true, false, false},
{false, true, false, true, false},
{false, false, true, true, true},
{false, false, false, true, false},
}
step, ok := search(s)
fmt.Println(step, ok)
}
```
zihuyishi
231 天前
@zihuyishi 额,不好意思说错了,是广搜,纯暴力跑。
AlexJesus
231 天前

哈哈,我也只能用自己的脑子试着玩。之前在前面也卡很久。
@pigf #1
AlexJesus
231 天前
@zihuyishi #3 何不食肉糜。哈哈哈。这个就是来自己开发一下脑力的,用暴力就失去意义啦。
AlexJesus
231 天前
@lxdlam #2 我还需要加强数理应用学习😄
Kaciras
231 天前
小学的时候玩过好多 Flash 版的,一个经验是先搞到对称,后续也对称操作。
mozhizhu
231 天前
我以为是:“小爱同学,关掉所有的灯”
qinxi
230 天前
@mozhizhu #9 一样, 我以为几步的步是脚步的步.
AlexJesus
230 天前
@qinxi #10 那看来我这个中英文翻译还得改,哈哈,有好的建议吗
AlexJesus
230 天前
@Kaciras #8 嗯嗯
Yanlongli
230 天前
最好能保持当前关卡,每次重新开始都要从头再来
AlexJesus
230 天前
@Yanlongli #13 好主意,这一定是老挑战者的好建议了!
zwzwzwzwzxt
230 天前
好玩,爱玩,就是这第 28 关要咋过
![]( )
lthero
230 天前
@zwzwzwzwzxt #15 无解
lthero
230 天前
第 28 关似乎无解?
lthero
230 天前
@zwzwzwzwzxt #15 尝试在 GF(2)域上解线性方程组,其它关都有最优解,第 28 关无解;
AlexJesus
229 天前
@lthero #18 遇到高手了👍我排查一下
zwzwzwzwzxt
229 天前
@lthero 我就说程序跑出来咋还剩一个 😭

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1105084

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX