冒险解谜游戏中文网 ChinaAVG

标题: AVG迷题探索(02) [打印本页]

作者: tabris    时间: 2007-8-21 13:55
标题: AVG迷题探索(02)
[attach]6595[/attach]
% u% E8 @* U' H$ W

) N' b0 N8 [) H8 Y: ?
- G' N' Z1 y1 k" u4 J# P* E( G# _2 j

' y& [9 z9 W& F( |+ E4 i  e1 o" R
8 t3 z1 G, z) r$ `        破箱人中的这个迷题颇为有趣,如果我们换个角度来思考,把进入迷题时各灯泡的状态看作一幅图画,而把电源接通后各灯泡的状态也看作一幅图画的话,那么这道迷题也可以当作是一幅“拼图”类型迷题吧~不过这个“拼图”却不是靠“移动”各部分来“拼”成的,而是依靠“旋转”各部分来“拼”成的。
+ Q+ e* @/ l- P5 V* o7 m5 N+ ^        如果各行列的旋转按钮不像现在一般有个指针的话,即使我们能够看到这个拼图的最终状态,我们有把握把它拼好么?恐怕不是每个人都有肯定的回答。
. @$ W: h* C  A3 g( g$ s* l5 t这个迷题的变化真的如此复杂吗?事实上这却是一个最最简单的拼图迷题,为什么?请看下面的分析。
6 @) X  V/ Z2 r        这类迷题和其他拼图迷题的产生方法是一样的,都是在整齐拼图的基础上,由迷题作者通过使用和游戏者一样的操作方式随意变动而产生的。那么先让我们看看迷题作者对这幅拼图的变动产生了什么效果。 , r# \+ h) f# \2 X7 d

( A+ @7 w- a) ]) l
3 H7 _4 |' J9 C% g+ [. E1 b( ?4 G% j4 t
        迷题作者通过点击每一行或列上的旋钮来旋转该行或列的全部方格,因此我们可以用上表来表示全部方格的变化情况。假设全部方格的初始状态为0(即没有经过旋转),然后方格每被旋转一次,它的状态数值就增加1,最后表上的数字就能很清楚的显示出迷题作者对拼图做过什么手脚了。
0 W1 n6 W0 s# O) d# q7 l0 n. s
4 C  ~# j; ?. m" k
* Z0 b( y: h. u, h  E" @3 \: D6 U' W; q! i* N8 u7 _7 R
        例如作者对A列做了两次旋转,对5行做了一次旋转,表格的表示就如上图所示,可以看到行列相交的方格A5因参与了两次调整,故已经旋转3次了。 6 B9 j$ K8 M3 r
        于是,作者就开始对这个表格(也就是迷题本身)做随意的调整了: # b' j* x- \2 F6 {' a! j
$ C  s4 L/ \& K$ J! j: {
2 k5 l9 A- r$ g' t& k3 H, y' z
$ \$ R8 c. a! j9 H5 V$ \* a+ h3 }. t" D
        呵呵~现在简直就是一团糟嘛,作者的任务就完成了,游戏上市,摆在我们面前的就是这“一团糟”的东西,怎么办?
+ Q& N$ I& ?! }2 q        看着上面这些毫无规律的数字当然头痛,但应该记住,上面的数值只表示每个格子经过了几次旋转,但并不代表格子的状态。实际上因为是正方型的格子,所以格子的状态只有4种而已。因此我们可以先通过一些转换,把表示旋转次数的数字变为表示状态的数字,方法是把上图数字对4取模(即与4相除取其余数),于是得出: - O; M& h8 D/ _. T2 e
2 G" f- M  @0 |9 |

& O, k5 Q/ D1 s7 G* h% x" l9 A
        现在的画面好看很多了,每个数字1、2、3、0分别代表该方格处于的不同状态,很显然,我们需要做的就是让全部数字归0,这样就能把拼图复原成初始状态了。所谓“归0”,就是继续旋转数字为“1、2、3”的格子,使其累加转动次数变成4(记住:状态4=状态0)。 : c5 I/ E2 x: r  {$ H/ {

' C1 H5 _) a2 E1 G) A  t      这里介绍一种极其简便的“归0”方法:选定任一行或任一列为目标,先把它全部归零,然后再调节其他的列或行,这样每行/列的旋转次数都不需要超过3次就可以解决问题了。还是以上图为例,假设我们选择先调整E列: 6 {- T1 }7 t2 L+ _4 y- }" H
# |0 r2 ]+ B' ~5 @4 W
0 k  V& f- a% ?4 Y2 M# m9 O
5 F# ^+ {/ i, y7 u- C, `- @
        我们通过点击按钮1两次,使行1的全部方格转动两次,E1的状态即由2转为0(4)了。同理我们通过按动按钮2~8,把E列的全部方格“归0”,
% E) Q$ j( @; I% c- E
* P. ?, a4 M( G- Q7 v5 n- r 1 c3 M; C  e6 w  l; J6 v: j
" v2 \2 m" z; W3 l. u& X% T  X3 I
        看到了,结果很神奇对不对?尽管我们只把注意力放在E列上,可是当把E列全部“归0”后,其他列上的方格居然也自动排列得整整齐齐了。
/ g! C1 _5 |! m: `1 T        剩下的工作就是通过A~H几个按钮,把不为0的列转过来就好了。 % @5 W6 ~. c* b
* ~8 a" r5 j) x! n0 }8 C5 Z& N
        上面的方法可不是碰巧的呀,如果有朋友表示怀疑,说我们是碰运气,那请继续看下面的证明。
. Z% U/ _$ `/ |' a6 _- m, x5 y7 [* c9 H+ D- x
* `% i& _4 X1 ^) }% n8 g
(附上一个excel小程序,各位可用来测试本文内容)
作者: tabris    时间: 2007-8-21 14:00
证明:% f+ p: H  F( Z
7 z9 W: l$ \$ T& _: G) e5 E

" A5 J0 s% w9 t7 x& j1 S  ^  Z7 p* v. k: i: f' x# f& C, X% M
        假设作者在打乱拼图时,对每一列的转动次数为x1~x8,每一行的转动次数为y1~y8,那么每个方格转动的次数可以在上图这样表示出来。和前面的步骤一样,我们对全部方格的转动次数对4取模:7 }4 l, @) R6 [, C3 M1 I- X" {
4 f7 K7 _; Z/ w+ Z: Q

- F* t( Z8 Q( z) O4 i" k
, k# R9 c* \$ F' b* X$ d% t' d& v% `        还是和刚才一样,我们随便选一列,譬如x5列为第一目标进行“归0”。以x5y1格为例,该格子现在的状态是(x5+y1) mod 4,那我们要调整y1多少次呢?设调整次数为Δ1,则:
5 L6 u9 r2 U# _6 P9 a) Z                                               ((x5+y1)mod 4 +Δ1)mod 4 = 09 V; R/ C; U  ]/ d
# I# |5 t# [" p" ^
        因为:2 F. e. o2 I5 b8 s& F
                                                              (x5+y1)mod 4 < 4$ V" T( E  i" [5 m. {0 q
! G4 D8 k7 y; E% n6 i
        所以上面方程可转化为:  y8 m6 Z  P' v
                                                         (x5+y1)mod 4 +Δ1 = 4
2 _' ^0 `' p  w# O) h7 |9 t; z" p7 X. ]1 k' l: J
        所以调节次数Δ1等于:
, K1 X& Q/ K" H* R  K                                                          Δ1 = 4 -(x5+y1)mod 4
6 m3 @7 `  J: b! z( }- ^
. }! l! w& C7 s3 X; `/ [! t        按照方程结果,旋转y1行Δ1次,则y1行全部方格的状态变为(全部列出太长了,截选一个方格来说明):1 D! C* |" ^: ~. e% W: ?
    x1y1方格:
# T/ _  A3 N$ Y$ v  ?6 K4 K                                               (x1+y1) mod 4 + 4 -(x5+y1)mod 40 k- u$ J0 I7 w- q7 C" f/ V& j
, k6 }' `1 a4 N; {. e
        为了表示出方格状态,上式必须再对4取模:* s, N& a. `& Z, w- t1 P5 O% J
                                      ((x1+y1) mod 4 + 4 -(x5+y1)mod 4)mod 4% R% e* i, M4 n6 `6 f* \0 L
6 D& c2 m, B6 L8 G6 u; Q
        简化一下:% O: J) Y* \1 @2 L$ l
                                                        (x1+y1 - x5 - y1) mod 4
9 |0 h* t. c. N3 y; B/ p1 B7 y
- h1 j- E! s9 f6 u        于是x1y1的状态为:
0 `$ N" K: `  }, [+ S# L                                                            (x1 - x5) mod 4
; B4 s! I7 e1 l        + e- [. V2 r9 a. Q9 B2 p
        同理我们可以得到调整后y1行全部方块的状态如下:3 x  \2 z! O" G3 W: `! x' u) m
; Q$ p$ f. v6 y8 K3 y% u) P

* ]. |  [* v3 M& B4 G' r0 l
  E2 Q0 `$ T) V. @/ x同样的方法,我们可以算出y2~y8行的旋转次数Δ2~Δ8,并使整个矩阵的状态变为:: n+ Q, r9 Z1 o
, x6 x4 J% u( H( m

/ v" u8 F, W9 T: U; X3 v7 I, j) \# A& v/ n0 ^9 L  D
        可以清楚看到,现在同一列上的方格都处在同一状态之下,这和我们实例中的结果是一致的。证毕!
: Q1 z0 R% q* ]& h' C& {5 K5 Z$ G& Y4 s( R' r* m5 @
2 @" n/ C; o5 p1 E. d0 e1 U1 K
    好了,这条迷题的分析只能到这里为止,实际上我们分析的只是这一类迷题中格子的旋转规律,通过这种规律总结出一般的方法,使用此方法可以迅速把迷题调节到解决状态,但前提是我们事先知道“解决状态”的图案。
6 h& l7 T! }7 F, @7 O: U    6 H* n" S6 K  |* r! R2 `
    所以,很遗憾,虽然我们找到旋转规律,却仍无法解决破箱人这道迷题,因为刚刚面对时我们跟本不知道“解决状态”是什么样子的。呵呵~我们架起了桥梁,可不知道对岸在哪。这个问题小弟实在还没解决,请高手来指教了!
作者: soring123    时间: 2007-8-21 14:33
我顶  tabris你也忒牛了吧
作者: soring123    时间: 2007-8-21 14:34
学了两年的高等数学都看不懂  我要仔细研究下
作者: 闪光    时间: 2007-8-21 14:45
我的高等数学
" h5 r3 Q+ K/ \- J. k$ Y# S  e" G1 L
3 D3 @; d  X7 Q* ^+ c) o, N
简直没学过
作者: tabris    时间: 2007-8-21 15:13
向soring救助,我贴子里附的excel小程序不能锁定,请你下了看看怎样修改才行。谢谢啦~
作者: vexer    时间: 2007-8-21 15:14
我草[s:15] ~tabris你是搞得越来越虚幻了~
  A0 M/ V0 P! e+ ^5 p8 h感慨完了再慢慢看~~~
作者: tabris    时间: 2007-8-21 15:19
其实可以不看后面的证明的,那个东西我都觉得很烦,把附件下载了点点就完全能够明白什么意思了哦 [s:1]
作者: soring123    时间: 2007-8-21 15:37
晕 完全不会用excel 看得出tabris已经是高手了
作者: tabris    时间: 2007-8-21 15:41
没办法呀~工作需要,每天必用EXCEL,是个宝
作者: soring123    时间: 2007-8-21 15:53
我连简单的加法都不会啊
作者: vexer    时间: 2007-8-21 16:00
引用第10楼soring123于2007-08-21 15:53发表的  :# d5 W' \6 h" q. V% K' j
我连简单的加法都不会啊
你就装吧~~~
作者: soring123    时间: 2007-8-21 16:11
我的意思是在excel里啦 真的啊
作者: enigmastone    时间: 2007-8-21 18:55
最近有本叫《天眼》的小说,里面有很多开锁的内容。
. U5 X. B5 Z# _+ j8 I, v0 k3 h没来得及看。不知道谜题设计的怎么样,有看过的帮忙评价一下。
作者: enigmastone    时间: 2007-8-21 18:56
这帖子真专业,一个字:真好!
- V* A, O) e0 h. g: M(买一送一了) [s:2]
7 m' P. M1 C6 H% ^8 W8 u
# t: S3 Z' X2 E& L' n8 e. g可惜咱。。。
3 u5 f: t3 n; s: r+ t  |$ c, o唉,需要加强学习了
作者: laka    时间: 2007-8-21 21:25
ORZ   tabris你太强了。。。。。。。。。。。。
作者: XYZ    时间: 2007-8-21 21:29
实在是。。。。。。。不是3要写些什么了。。。。我想safecracker的制作者看到这两篇文章要感动的哭了。。。: b  G; K' H  a1 v) ~" M+ E. R
; D$ N1 k' m5 w
可是试试投稿了,真的!
作者: wow    时间: 2007-8-21 23:11
叹为观止阿,研究得很透彻。佩服 [s:28]
作者: 111213    时间: 2007-8-27 04:31
佩服中.......!!
作者: laien607    时间: 2007-9-6 16:13
佩服佩服!!
/ B, F2 o8 H2 C: d能把学习和游戏结合的这么好!
作者: 82593918    时间: 2007-9-21 00:39
引用第13楼enigmastone于2007-08-21 18:55发表的  :2 t4 [  {& P- S) h# T3 D- X
最近有本叫《天眼》的小说,里面有很多开锁的内容。
6 s" ^) F9 N* e! [8 }  I没来得及看。不知道谜题设计的怎么样,有看过的帮忙评价一下。

& w( `6 M% x* @/ `天眼很好看,不过感觉不是在谜题设计上,大概是文字的整体布局,作为小说绝对值得一看,不过似乎太监了
作者: rdrl    时间: 2007-9-22 14:47
MY GOD!!我好崇拜你!!!
作者: catsoup    时间: 2009-5-7 01:13
太专业了 [s:1]
作者: panicice    时间: 2009-5-24 15:54
崇拜的五体投地,绝对经典好文啊!
作者: nanhainan    时间: 2009-6-12 13:32
额....好难呀.
作者: zuoancan    时间: 2009-6-19 10:57
学习了..顺便膜拜下强人
作者: malcolm    时间: 2009-6-24 18:46
这道题目的难度确实就在于没有一个确定解,但是没有确定解也就是说有不止一个解,大家可以通过随机尝试凑出一个解来。
/ k6 U) J: X- c9 `2 Z, n如果真的需要机械求解,那么原来的4状态模型是不够的,必须要导入每个节点的连通性。5 f4 h" \* W0 S$ S# J
即使有了连通属性,我也只能想出遍历求解的办法9 i5 _) G2 g- Q7 c2 H0 Y
嗯,召唤牛人纯数学求解。。。。
作者: mozart    时间: 2009-8-9 23:42
偶刚刚打印好Duncan Adams的遗嘱,兴奋之余发现了这儿。
1 ^4 s0 u8 d6 n  l( G我只是在玩方向盘的时候曾想过矩阵分析,后来一看发现没那必要,只要拿简单的整数代入一个十个未知数、六个方程的方程组看特解即可。3 t. a6 Q9 J8 B9 {9 b' Z
& d) C" O7 M; C$ F
关于这个灯的问题,我第一次看到觉得很绝望。但分析一下发现从左边入手简单许多。运用一下逻辑分析就可以知道一些电流方向。于是我一边聊天一边试出来了。
3 D/ c! Y* [$ }. |- Q
- u& P+ h$ s" e: Z, Q7 r( y1 zlz的分析太强大,我记得mod的时钟运算方法,没想到可以运用于此。有时间一定仔细研读。
作者: mozart    时间: 2009-8-9 23:44
看了一些链接,没有提到http://www.gameboomers.com/wtche ... acker_solutions.htm这个的
, {7 f! L4 K) ]3 U% s% W; V0 q这个英文版的提供简单易行的答案




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2