司祭盎圣域开始处四转筒谜题的一般解法

作者 费茨, 2007 七月 26, 00:40:01

« 上一篇主题 - 下一篇主题 »

费茨

3-3司祭盎圣域一进大门,解决一些敌人之后,就会面临第一个谜题,需要将四个转筒转到要求的位置。(具体是不是要跟墙上壁画对应我还有疑问,因为我和小丘的结果相同,但是看起来并没有对应壁画。这个需要求证,但不在本文讨论之列)由于转动一个转筒会带动附近两个,这个问题并不是非常简单。好在关卡中的初始状态和目的状态相差不大,稍微仔细观察应该能得出答案。

本文的目的,则是作一个一般性的讨论,讨论在这种谜题中,如何得到从任一状态到任意另一状态的方法。过程中会用到一些数学知识,但是放心,不会很难。初步计划本贴划分为几个部分,讨论内容所包含的数学成分越来越多。对数学不感兴趣的可以及早停下,而有兴趣的可以一起讨论。
-----------------------------------------------------------------------------------
特解
在游戏中,根据乌鸦所指出的解法,只需要将对角两个转筒各转半圈即可。

-----------------------------------------------------------------------------------
通解

约定:在正式开始之前,先做好约定,以方便描述。

如下图所示,将四个转筒用一个2x2矩阵表示(没学过矩阵的不用怕,使用矩阵只是看起来直观,并不涉及相关具体知识)。左图实际上是就是俯视图。

+---------+
|  o     o  |            [ o   o ]
|             |    --->  [         ]
|  o     o  |            [ o   o ]
|             |
       A
       ||
     入口

然后我们约定,如果将某一个转筒逆时针旋转1/4圈(也即向右),则在矩阵中用1表示;如果旋转半圈,则用2,顺时针旋转1/4圈用3,不动用0。那么,对于任何一对初始状态和目的状态,我们都可以用这个矩阵表示四个转筒各自的变化。例如从游戏中的初始状态到目的状态,如果转筒之间互不影响,则需要把左上角和右下角两个各转半圈,另两个不动,那么用矩阵表示就是:

[2 0]    或   [0 2]
[0 2]          [2 0]

当然用1表示顺时针也是可以的,但是结论也要反过来。这四个数字的实际意义,其实就是要让这个转筒逆时针(或者你可以改成顺时针)转过几个小壁画(转筒上的,相当于1/4圈)。
约定完毕。
---------------------------------------------------
结果:
为方便大家,在这里试着用文字叙述一下解法。

当任何一组四转筒的当前状态,以及我们想要到达的状态都已知的时候,就会得到一组四个数字,0~3之间,分别对应四个转筒如果可以独立转动,需要逆时针(或者顺时针)转动的小壁画数。那么对于这四个中的某一个,如何进行操作呢?

假设选定了某一个,那么我们就用这个转筒以及它旁边会受它影响的两个转筒,所对应的三个数字相加。然后减去2倍的,在对角位置不受影响的那个转筒对应的数字。得到的结果除以3。这个结果可能不是整数,那么就试着给它加上4/3或者8/3,肯定会得到一个整数。在这个数上,加或者减4的整数倍,使得结果是0,1,2,3中的一个。(例如5 -> 1,-2 -> 2等等)

如果结果是0,这个转筒不用动。
如果结果是1,这个转筒要逆时针(或顺时针,总之要跟开始时的假设一致)转1/4圈。
如果结果是2,这个转筒要转半圈。
如果结果是3,这个转筒要顺时针(或逆时针,同上)转1/4圈。

计算和操作的顺序无关紧要。先算任何一个转筒都行。

---------------------------------------------------
解法:

约定中得到的矩阵,实际上就是如果转筒之间毫无影响,从初始状态到目的状态,四个转筒各自需要进行的操作。为了一般化,现在我们在其中替换上字母(也即变量)。注意它们只可能是0,1,2或3。而且,对于具体问题来说,这四个数都是已知的,都是具体的数字。

[x  y]
[w z]

现在我们假设,为了实现这个矩阵操作产生的效果,我们需要对左上角的转筒进行的操作为a,或者说,让这个转筒逆时针转过a个小壁画。依次给其他三个标上b,c,d。

[a b]
[c d]

注意,在讨论a,b,c,d的时候,这次四个转筒之间是存在游戏中的那种影响的。因此a,b,c,d就是我们想要的结果,它们也只可能是0,1,2或3。

不管你看懂了没有,我们接下来都可以列方程了。如下方程是显然的:

{x = a + b + c
{y = a + b + d
{w = a + c + d
{z = b + c + d

这个方程正是一个转筒旋转会带动旁边两个转筒的体现。学过线性代数的可以用矩阵,没学过的一样可以求解这个一元方程组。这样可以得到:

{a = x/3 + y/3 + w/3 - 2z/3
{b = x/3 + y/3 - 2w/3 + z/3
{c = x/3 - 2y/3 + w/3 + z/3
{d = -2x/3 + y/3 + w/3 + z/3

注意现在还不一定是最终结果。注意到1/3的存在,abcd不一定是整数,为此,我们需要加入一个调节因子k,使得结果能够凑成整数:

{a' = a + 4k/3
{b' = b + 4k/3
{c' = c + 4k/3
{d' = d + 4k/3

其实只要a'能凑成0~3的整数,b'c'd'也就一定能成为合适的整数。如果得到的整数超出0~3,就求它们除4的余数。注意-1在这种情况下会变成3。现在得到的a'b'c'd'就是可以用于实际操作的结果。

当a'=1时,将左上角的转筒逆时针旋转1/4圈(或者你可以改成顺时针,总之跟开始的假设要一致)
当a'=2时,将左上角的转筒旋转半圈
当a'=3时,将左上角的转筒顺时针旋转1/4圈(同a'注释)
当a'=0时,不动

b'c'd'的处理方法相同。

-----------------------------------------------------------------------------------
例题

不能光说不练。我们来看一道例题。就以游戏中的情形为例。
取前一种情况,显然x=2,y=0,w=0,z=2,那么
{a = 2/3 + 0/3 + 0/3 - 2*2/3 = -2/3
{b = 2/3 + 0/3 - 2*0/3 + 2/3 = 4/3
{c = 2/3 - 2*0/3 + 0/3 + 2/3 = 4/3
{d = - 2*2/3 + 0/3 + 0/3 + 2/3 = -2/3
很容易试出来,当k=2,
{a' = 2
{b' = 4 = 0
{c' = 4 = 0
{d' = 2
那么只要将左上角和右下角的转筒旋转半圈即可。
结果与乌鸦给出的解法完全相同。

-----------------------------------------------------------------------------------
今天先写到这里,等稍后有时间,同时也有必要的时候,会把更详细,同时也更加数学化的过程写到这里。敬请期待。
邓攸无子寻知命,潘岳悼亡犹费词
                          ——唐·元稹《遣悲怀》

八爪鱼

这样子就行了吧......
另外,只要柱子上图案两两相对就行了,不用与墙上相同,但那样应该会增加解谜时间
引用自: 费茨 于 2007 七月 26, 00:40:01
然后我们约定,如果将某一个转筒逆时针旋转1/4圈(也即向右),则在矩阵中用1表示;如果旋转半圈,则用2,顺时针旋转1/4圈用3,不动用0。那么,对于任何一对初始状态和目的状态,我们都可以用这个矩阵表示四个转筒各自的变化。例如从游戏中的初始状态到目的状态,如果转筒之间互不影响,则需要把左上角和右下角两个各转半圈,另两个不动,那么用矩阵表示就是:

[2 0]
[0 2]

当然用1表示顺时针也是可以的,但是结论也要反过来。这四个数字的实际意义,其实就是要让这个转筒逆时针(或者你可以改成顺时针)转过几个小壁画(转筒上的,相当于1/4圈)。
约定完毕。
按我的理论就是将上面矩阵中4个数字弄得一样就行了
所以说应该转左下右上各半圈也可以,你去试试
应某人要求做广告

签名不那么高了,但依然很长
水......给我水......

费茨

这个偶就不管啦...... :wave:

我想要解决的问题是最一般的情况下如何求解。我并没有考虑具体的初始状态和目的状态。我只考虑它们之间的差别。
邓攸无子寻知命,潘岳悼亡犹费词
                          ——唐·元稹《遣悲怀》

八爪鱼

应某人要求做广告

签名不那么高了,但依然很长
水......给我水......

费茨

邓攸无子寻知命,潘岳悼亡犹费词
                          ——唐·元稹《遣悲怀》

费茨

邓攸无子寻知命,潘岳悼亡犹费词
                          ——唐·元稹《遣悲怀》

八爪鱼

应某人要求做广告

签名不那么高了,但依然很长
水......给我水......

TombCrow

不涉及数学,纯粹按照逻辑思维的解法是~~

目的:将底座图案调整为两两对应
现象:转动一个方尖碑,只有对角线那个不转,其他两个都跟着转
观察:进入方尖碑区域时,所有底座图案都是同一朝向。要调整为两两对应的话,一个底座与相邻底座差了半圈(2格)。

PS:虽然写了新的解释,但觉得还是不如原先的清晰,删了~

D   A
C   B

以壁画为参照,A和C的图案本身就在正确的位置上,而B和D的图案都差了半圈。
所以,把B和D各转半圈。转B的时候,A和C也跟着转半圈,D不动,B进入正确位置;转D的时候,B仍然停留在正确位置,而A和C再转半圈,再次回到正确的位置上。此时ABCD全部归位,机关打开。

估计是为了降低解谜难度(增加"蒙对"几率),这个机关并不需要严格按照壁画形象对应,只需要将相同图案调整为两两对应。因此ABCD的设定是随意的。也就是对角线上的两个转半圈就行了,方向随意

这只适用于初始状态,如果转乱了,需要重新思考这些图案的对应。我刚才故意转乱了几次,都是通过逻辑思维解开的,数学N年没碰了......
fz的解法适合任何情况。

TombCrow

这帖子就顶上去吧......
对这个谜题有兴趣的在这里提交解法~~
我看到时候wiki给这玩意另设一页比较好o(∩_∩)o...哈哈

lullaby

其实数学原理是懂啦~~~只是想知道是根据什么墙上或是哪里的提示才知道应该这样转的.

TombCrow


Tomb Raider

#11
偶滴数学不好 :happy9:
过这里时完全是自己蒙的 :laughing11:
忠实的LaraFS

八爪鱼

......搞了一上午,想用Flash做一个演示,失败了,现在正试用VB......
应某人要求做广告

签名不那么高了,但依然很长
水......给我水......

八爪鱼

#13
呼~~
总算被我搞定
发上来一个VB小程序
简单介绍一下
程序中四个圆是四个转桶
  每个圆内有两组数字
    上面一组是将圆桶与墙上壁画对应所需要逆时针转的次数(0为不需再转)
    下面一组是解决过程中转某个圆桶的方向、次数(正数为顺时针,负数为逆时针,0为没转过,转够一圈后计数回0)
  每个圆旁各有两个按钮
    左箭头为逆时针转
    右箭头为顺时针转
当每个圆内上面一组数字相同时迷题解开、程序中央出现Solved字样
解迷过程中任何时候均可按"Reset"重新开始/按"Exit"退出程序

不知还有没有BUG请各位帮忙测试


P.S.我不知道这东西有多大用......

===============编辑后=============
啊,发现一个小问题,修正了,应该还没有人下载过吧......
应某人要求做广告

签名不那么高了,但依然很长
水......给我水......

费茨

八爪鱼你这个程序可以做的更扩展一点啊。

现在这个程序的主要用处,我感觉就是在游戏外重新解一下这个谜题。

所以我的建议有两个。
1. 可以把我的解法放进去,使用者只要输入初状态和末状态就可以马上得到解法。
2. 可以自由设定初始和结束状态。
邓攸无子寻知命,潘岳悼亡犹费词
                          ——唐·元稹《遣悲怀》