转筒谜题

周年纪念 司祭盎圣域(Sanctuary of Scion)(除Wii版)一关开始是的四个转筒,根据壁画的提示,需要将转筒底座上的图案转到两两对应。

1102.jpg

初始状态解法

我们的目的是将转筒底座上的图案转到两两对应。可以发现,转动一个方尖碑的时候,只有对角线那个不转,其他两个都跟着转
进入方尖碑区域时,所有底座图案都是同一朝向,为方便说明,标号如下:

D A
C B

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

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

万能公式

以上是通过逻辑思维,在转筒为初始状态下给出的解法。是否能有一个万能公式,在转筒为任何状态下都能迅速找到答案?

有的~

以下为古墓丽影中文站【费茨】给出的解法:

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

本文的目的,则是作一个一般性的讨论,讨论在这种谜题中,如何得到从任一状态到任意另一状态的方法。过程中会用到一些数学知识,但是放心,不会很难。初步计划本贴划分为几个部分,讨论内容所包含的数学成分越来越多。对数学不感兴趣的可以及早停下,而有兴趣的可以一起讨论。

约定

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

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

然后我们约定,如果将某一个转筒逆时针旋转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'的处理方法相同。

例题

例题1

不能光说不练。我们来看一道例题。就以游戏中的情形为例。
取前一种情况,显然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
那么只要将左上角和右下角的转筒旋转半圈即可。
结果与乌鸦给出的解法完全相同。

例题2

再来一道例题(【八爪鱼】问,【费茨】解)
下面这张图的情况下,解法如下:

{a = 2/3 + 3/3 + 3/3 - 2*2/3 = 4/3
{b = 2/3 + 3/3 - 2*3/3 + 2/3 = 1/3
{c = 2/3 - 2*3/3 + 3/3 + 2/3 = 1/3
{d = - 2*2/3 + 3/3 + 3/3 + 2/3 = 4/3

所以 k=-1

{a' = a - 4/3 = 0
{b' = b - 4/3 = -1 = 3
{c' = c - 4/3 = -1 = 3
{d' = d - 4/3 = 0

所以要把右上和左下角两个反方向(不知道你定的是顺时针是1还是逆时针是1?反正反过来)旋转1/4圈即可。

模拟程序

这里还有个【八爪鱼】制作的谜题模拟程序:点击下载

tra33.jpg

【八爪鱼】程序说明:

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