在前面的三篇文章中,我们完成了约瑟夫问题数学部分的解析,相信已经令数学爱好者们大呼过瘾,让魔术爱好者们一头雾水了,相关内容请戳:
约瑟夫问题与魔术(三)——终极数学推导
约瑟夫问题与魔术(二)——数学结构解析
约瑟夫问题与魔术(一)——数学模型求解
接下来,我们换换脑子,来看看,这样一个独特的数学结构到底可以怎样应用在我们心爱的魔术中。
其实啊,数学部分的解析证明那么精彩,在魔术里面使用的时候看中的点可又不一样了。本质上,约瑟夫的过程可以帮助我们选到一张特定位置的牌,前提是整叠牌的张数和跳过周期,相位,也是给定的。而这个过程本身,可以交给观众来执行,看起来甚至有那么一点不可预测,随机的意思。但是这背后的规律的把握,正是我们比观众多掌握的信息,由此可以把一个本来是个预测或者感应的魔术效果,强化成一个观众自己发现的巧合。这种发生在观众自己手里的效果显然加强了不少,而约瑟夫过程起的作用恰是锦上添花,但核心还是前面的常函数,恒等式和通信函数本身。当然,从表演层面看,这类数学类操作的引入制造的神奇和带来的冗余之间需要有个很好的平衡,比如当张数过多的时候,需要引入一些故事来消磨这里面的无聊感;还可以尝试把这个原理和其他的魔术方法或数学原理多重组合,以达到意想不到的1 1 > 2效果。
从本篇开始,我会介绍陆陆续续在近10多年里搜寻到的我所接触过的和约瑟夫问题相关的魔术,并加以改进,欢迎欣赏。今天是第一个魔术。
10张牌的巧合
视频1 10张牌的巧合
历史溯源
这个魔术可追溯原版的年代有些久远了,依稀记得是我小学时候畅游在各种魔术书籍,教学带时候留下的印象。那时候也不知道这叫什么约瑟夫问题,只记得这是个不错的展示牌的方法。没记错的话,第一次学到应该是在张德鑫老师的《图说魔术入门》里面,然后在一次奥数课上,长沙梓园大厦创新学校蔡老师班上的课,坐在第8组第一排的黄金角落位置,拿着牌偷偷地完成了实验,然后还立马和同桌菜哥表演了出来,让他大吃一惊。
原版可能还包括一些其他步骤,但主体没记错的话就是使得观众的选牌被放置在整叠一共10张牌的第5张。然后根据约瑟夫原理,f(10, 2) = 4。注意这里的4是0开始编号的实际上是5,即为所求。到我想写约瑟夫系列的时候捡起这个魔术,显然不太满意这直白的表演,于是开启了改造之路。
改进思路与结果
我想,控制一张牌到中间特定位置的话,通过索引常量或魔术手法方法都不难。但是同时还要10张牌,所受的限制其实就有点多了。那有没有别的策略,能一方面扩大可选区域,再通过一些比如软限制等方法,让选择落在扩大的区域内呢?
先来看可选区域扩大。我们知道,如果是相位为1的k = 2的约瑟夫过程,有f'(10, 2) = 3,也就是可以得到原来过程的前1张。而选择哪种约瑟夫过程,这个观众是无感的,哪样都是个有点奇怪但又精密的过程,哪样也都合理和不合理,就看你怎么表演了(这种多条表演路径的方法在魔术里称为multi-outs)。
现在也只有4,5两个位置可以任选,这离10张牌的10个位置差距还很远,这点自由度并还不能带来什么真正的效果上能随意插入的效果。此时,一个很直接的想法就是,扑克牌如果翻过来数(和做一次Reverse操作的效果相同,但它的实现是直接改变了所有相邻前后关系的方向,而前者只是数的时候倒过来了,属于外部观察和行为的变化,并非扑克牌本身的属性,却可以起到相同的作用),相当于倒序,那么编号4,5就变成了7和6。这下厉害了,恰好还连续,4~7这4个连续的范围都搞定了,因此,只要观众插入位置距离顶部或底部至少3张就可以了。
最后我们需要看看,怎么用魔术方法让观众以“随便选择位置”的印象而实际是给定了范围的结果。而作为魔术设计,一定要每一步都天衣无缝才行。如果真的放在了1,2,3,8,9,10这6个位置怎么办?当然可以通过一些台词的引导来完成,比如先发个两张,再喊停,最后3张直接一次性落下去来隐性软控制。但是,借着这里的特殊性,我又找到了别的方法来硬核控制。
直观上看,取了任意不在4~7范围内的牌,如果在这个环上不断做模10加4以内的加法或减法,其结果不可能跨过一个长度为4的范围,比如4~7。举例来说,如果取10,那么每次减一个4以内的数,当它跨过4~7以前,一定曾经落在这个区间内过,而魔术师选择在那一刻停下选择即可(又是魔术师暗中决定了分支路径的multi-outs方法)。而且,选牌位置距离该区间最近点的最大有向距离才6(4 - 8 == 6(mod 10)),如果你可以灵活调整数牌的方向,那最大距离就只有3了,即4 - 1 = 10 - 7 = 3。因此,这个过程在没有连续两次都是1的情况下,不会超过2次,就能移动到正确的区间范围内。
后来我还有了一个想法,这个平移的数值范围能不能扩大到10以内?有了确定的选择和距离区间的长度以后,再找到合适的方案来执行,比如COAT,比如单纯的数牌或切牌等等,其中COAT有个很好的常量性质还可以保证数值过大时候的over-coat不对原结果产生影响。具体怎么实现,先留给大家来思考。
数学推导
下面,我们用数学语言来具体描述一下上述谈到的性质:
设数列{an}的每一项ai取自1:M的整数,取任意大小为M的连续范围S:(S M - 1),S >= 1。{Sn}是{an}的前n项和数列,若存在i < j,使得Si < S,Sj > S M - 1,则必存在k,有Sk in S:(S M - 1)。
其实这是一个很显然的结论。你想象有一只青蛙,每一步只能最多跳M级台阶,现在前面有一条有M级台阶宽的小溪,那么不管它怎么安排跳跃过程,都是跳不过这条河的。
证明的话,可以用反证法。由原假设,我们取i_max = argmax(i, Si < S),j_min = argmin(j, Sj > S M - 1),假设保证了这里有解,且i <= i_max < j_min <= j, S(j_min) - S(i_max) > M
假设k不存在,那么i_max 1 = j_min,否则,取k in [i_max 1, j_min - 1]就有解。但是当j_min - i_max = 1的时候,S(j_min) - S(i_max) = a(j_min) <= M,这与反证假设矛盾。故原命题得证。
在扑克牌上,这些加减法就对应切牌(cut)或者数牌(count),只不过是模加法罢了,但需要的性质显然是一样满足的,推导也几乎一样。不同的是,结论可以强化为,每走过一个周期的长度,就一定至少进入过那个范围1次,这个点在这个魔术里还没用到。
在这个魔术的设定里,观众选择的位置距离这个范围最大距离也就是3,我们通过正还是反数牌决定加减,再通过数值大小决定数牌次数,最后控制在特定位置以后,通过翻转和初始相位调整的约瑟夫过程,去构造最后那个必然出现的结果。
结束语
如果按照三类数学原理中的常函数,恒等式和通信编码函数来分类,本魔术应该是通信编码函数的过程。我们识别了观众的动作,并把它转化为了后续不同的行动。但是,由于这里的不同动作的每一项,观众都无从判断是否足够特殊和有信息量,感觉就像是预设的流程一样,使得最后构造出的这个常数位置,效果变化为巧合的同时,过程中看不出任何和前面观众选择有联系的通信函数。原因是,一方面,数观众放置在第几张,是一个暗通信,本就很隐蔽;另外,对此通信的编码处理,也通过上述跳蛙原理和约瑟夫过程来包装得完全找不到函数构造的逻辑。只要不重复表演,这几乎就是个不可能复现的奇迹,就像,只传递过一次的密码一样,无从破译。
这便是数学和魔术结合的美。
下一篇要讲解的魔术,先睹为快:
视频2 自我匹配的奇迹