MENU
28,174

スレッドNo.348

カードマジック?

テーブルで披露されるカードマジックです。
手品師とその助手と、テーブルに集う客のなかから選ばれた1名、計3名がマジックの主役となります。

マジックの開始時点で手品師は目隠しをします。

トランプカード、ジョーカーを含めて53枚を、客にシャッフルしてもらいます。
シャッフルの仕方は特別のものとなります。
53枚のデックのほぼ半分を取りだして表と裏とを全部反転し、 残りの半分と併せてシャッフルします。
リフルシャッフルが便利ですし、ヒンズーシャッフルでも可です。
何回かこのシャッフルを繰り返し、ひとまとめにして表と裏とが混在したデックにします。
客は、このデックから1枚を抜き出して、他の客と助手に表を見せます。
すなわち(たとえばクラブの6などと)共有知とします。無論、手品師はこれを知ることはありません。
これを第一のカードとします。
全く同様にして、客は第二のカードを抜き出します。今度は、スプレッドされた中から裏になっているカードを1枚抜きます。

ここで、残りの51枚のデックを、助手がテーブル上にリボンスプレッドします。表と裏とが混在しています。

客が第一のカードを、リボンスプレッドの任意の位置に、《裏に伏せて》挿入します。
次に、助手が第二のカードを、リボンスプレッドの特定の位置に、(手品師と打ち合わせ済みに)挿入します。
この際には、表と裏のどちらで挿入するかは、手品師と打ち合わせ済みの方法で決められます。

第一と第二のカードが挿入された後、客に、カードの順番を変えないようにしながらリボンスプレッドを
きちんと揃えてデックにしてもらいます。 【きちんと揃えること】を強調します。

この時点で助手には、ロッカーの中に入ってもらいます。

最後に、手品師が目隠しをはずします。
手品師は、デックを再びリボンスプレッドします。
手品師は、(伏せてあるはずの)第一のカードが何であるかを言い当てます。 たとえば、クラブの6などと。

以上が、数理マジックとして成立するということを本日、ネットで知りました。

数日後に元ネタをご案内いたしたく存じます。

マジックのタネがどのようなものであるか、皆さん、お考えになっていただければと。
よくこんなことを考えつくなあと、信じられませんでした。

引用して返信編集・削除(未編集)

質問を3つほど
1;通常ジョーカーは外すことが多いのですが、この場合は53枚にしておく必要がありますか?

2;53枚のデックのほぼ半分を取りだして表と裏とを全部反転し、 残りの半分と併せてシャッフルします。
リフルシャッフルが便利ですし、ヒンズーシャッフルでも可です。
何回かこのシャッフルを繰り返し、・・・・
とありますが、2回目も半分全部をひっくり返してリフルシャッフルしてもいいんですか?

3;リボンスプレッドしたままの状態で、手品師は当てるのですか?
  当然当てるカードは裏向き状態ですよね。

引用して返信編集・削除(編集済: 2022年10月26日 06:57)

書き方が曖昧で申し訳ございませんでした。

その1
>1;通常ジョーカーは外すことが多いのですが、この場合は53枚にしておく必要がありますか?

⇒私の浅白な理解では53枚にする必要はないことかと存じます。
(手元では客がより少ない枚数の中から2枚を抜き、スプレッドしたのちに第一のカードを客が裏向きに
伏せて再度挿入したのちに、助手が第二のカードを更に挿入した場合で、手品師が当てるケースを検討し
たものがあります。可能でした。)

 後日にはWEB上にある元ネタのページのURLをご案内する所存ですが、元ネタでは53枚となって
います。実は、上で書いた、枚数少ないバージョンのものは、私がほぼ力業でやり方を作成したものです
が、実際の演技は(変換表を覚えるなどの負荷があり)かなり大変です。ところが元ネタでは、ちょっと
した暗算能力があればできるようになる【コツ】も併せて書いてありました。練習すればできるかもと思
わせてくれました。

その2
>2回目も半分全部をひっくり返してリフルシャッフルしてもいいんですか?

はい。ひっくりかえしてもらいます。好きなだけ繰り返して表と裏とがどんどんと混ざっていくことを
観客たちが体感することを目的とします。

その3
>リボンスプレッドしたままの状態で、手品師は当てるのですか?当然当てるカードは裏向き状態ですよね。

おっしゃる通りです。


他にもご質問がございましたら、お願いいたします。

引用して返信編集・削除(未編集)

カードが53枚のケースにいきなり取り組むのは難しいかもしれませんので、今回の投稿では、カード5枚のミニチュアバージョンで、
なんとか辛うじて可能な種明かしをいたします。ただしこのままでは53枚の場合には使えませんので、あらかじめお詫びいたします。

ジョーカーおよびにスペード、ハート、ダイヤ、クラブの各エース、計5枚に変更してでの手品のやり方です。

まずは別表をごらん頂きます。

――――――
◆別表◆

スペードのA
10000
00110
01001
11010
10111

ハートのA
01000
00101
10110
11001
01111

ダイヤのA
00010
10100
01101
10011
11110

クラブのA
00001
01100
10010
01011
11101

ジョーカー
00100
00011
11000
01110
10101
11111
――――――

5ビットの列を26列ぶん、上の別表のように用意します。
手品師およびに助手はこの別表を丸暗記します。

カードが表なら0、裏なら1と約束しておきます。客が第一のカードをリボンスプレッドに挿入した段階では、
まだ4ビットの列です。

助手は第2のカード、すなわち(適宜0/1を選択した)もう1ビットを、リボンスプレッドのなかの適切な位置に
挿入することで、手品師に、どのカードが第一のカードであったかを伝えます。

たとえば、客の第一のカードがダイヤのAであったとしましょう。
また、第一のカードが挿入された後のリボンスプレッドの様子が次のようであったとしましょう。
0101
助手は別表のなかから
01101を選択します。
0101 のあいだの
01X01
Xであらわした位置に、
1 を挿入すれば
01101
となるからです。助手がロッカーにはいり、手品師が目隠しをはずした段階で、手品師は 01101をみて、
ダイヤのAであったとわかるのです。

任意の第一のカードと、任意の4ビットのリボンスプレッドについて、助手が第二のカード、すなわち
適切に選んだ0または1の1ビットを適切な位置に挿入すれば、 別表に従って助手は手品師に第一の
カードの内容を伝えることができるようになっています。(そのように別表をつくってあります。)

さて、別表暗記方式はカード5枚ではかろうじて出来るかもしれませんけれども、ジョーカーこみの
53枚の場合では事実上不可能です。
膨大な大きさの別表を暗記することなどはとても出来そうにありません。

さて、どうしたらよいのでしょうか……

今回の別表に内在している仕掛けに気がつければ、53枚でもできそうなトリックになるかもしれません。

次回の投稿では、このカードマジックの出典URLをご案内いたします。

引用して返信編集・削除(未編集)

時間があれば、タネ探しを試みているのですが
カードの情報としては表向き(0)か裏向き(1)なのでこれでカードを当てるためには
マーク(4タイプ)で2ビット、数字(1~13)で4ビット計6ビットの識別が必要なんだが、客が行うランダムシャッフル
のために並ぶカードは千差万別なる配列となり、しかも助手が挿入したカードがどれになるのか分からなくなりそうで、
通常ではとても不可能に近い条件に見えます。
これでカードを当てるためには、表向きのカードは対象から外せるのだから、通常約半数の裏向きカードの中に隠れた
(極端な話シャッフルの結果全部のカードが表向きや裏向きになる事って起こり得ませんかね?、それでも当てられる?)
客のカードのマークと数字を、助手が差し込んがカードの位置と、表か裏かの情報から得るしか手は無いと思われる。
当てる人は助手がどこにカードを差し込んでいるのかをどのようにして判断できるのか全くわかりません。
表裏が連続する部分は一括して一枚と解釈しておけば、上から5つ分は例として示してある配列のどれかに当てはまりそうですが
5枚に対してはその解決方法がありそうなので(まだ詳しくは確認してませんが・・・)、その手を使って助手がカードを差し込めば
何とかなるんではと思っています。でも数字の値はどうするのだろう?
なにか排他的論理和と関係あるような気もしますがいまいち構造がわかりません。

そろそろ解説のほどお願いします。

引用して返信編集・削除(編集済: 2022年11月08日 07:59)

https://mathlog.info/articles/1342

こちらに詳細な解説があります。

全49枚で3回ほど試しましたがいずれも成功しました。そろばん4級なわたしでも、4枚減らせばジユウブンニ実行可能でした。

引用して返信編集・削除(未編集)

Dengan kesaktian Indukmu さん、掲示板に書き込みができるようになったんですね!
おめでとうございます。今後ともよろしくお願いいたします。

引用して返信編集・削除(未編集)

管理人さん、ありがとうございます。
新掲示板になつてからこれまで、代理で投稿をしていただきましたこと、本当にありがとうございました。

いまだネット環境の再構築中です。
ブルートゥースのキーボードがうまくつながらず、入力もままなりません。
全角半角の切り替えもできずしんでいます。

ブックマークが全部とんだので、残念です。

これからも、お邪魔いたします、宜しくお願いいたします。

引用して返信編集・削除(未編集)

VT符号の定義が
数の分割法を与えるもの
自然数nを負でない整数(x1,x2,x3,・・・,xn)で
x1+2*x2+3*x3+・・・+n*xn==n
の方法が何個あるかを対応させるものに似ていて
また異なった構造が発生してくるのが面白いです。

紹介されたリンクで完全には理解していないと思いますが
例えば11枚の表裏が入り混じったカードの配列がどうあれ(2048通りもある)
これにもう一枚のカードを表にするか、裏にするかは自由に選択でき
始めの配列に対して適切な場所にカードを差し込めば(計12枚)、示し合わせた
第三者に必ずカードの配列で1から13の数字のどれかを伝えることができる。
但し何処にカードを表向きか裏向きかを即座に判断し差し込むのは手早い計算と経験を
必要としそうです。

したがって元々の52枚の正規のトランプで表裏が入れ混じったランダムなカードの場合、
客が選んだカードの数字は助手Aがジョーカーをもう一枚追加させ、特にリボンスプレッド
された始めの11枚の表裏の構造をみて、適切な位置に差し込めば助手Bに伝えるはできますが
そのマークまでは伝えられないのではないかと思われます。
マークまで当てるためには正に52枚の配列状況を全部使わないといけなくなり、とても暗算に
頼ることは困難になりそうですが・・・(解決の方向性が違っているかも知れませんが)


マークまで当てられる方法を
1~6までの数字を持つ
マークがD,C,H,S(ダイヤ,クラブ,ハート,スペード)を持つ計24枚の場合について
次の場面での解説をお願いします。

①24枚のカードが表裏ばらばらで配列されている。
②客はこの中の任意のカードを選んで、再びカードを裏向きで返す。
(客にここでシャッフルさせても構わない。もしこれが可能なら入れて下さい。)
③リボンスプレッドされた24枚にもう一枚のジョーカー(ジョーカーには拘らなくても
 通常のカードでもよいと思う。)を助手Aがもち、
 適切な位置に入れる。カードの順番が狂わぬように揃える。
④助手B(②,③の時はその場にいない。)が現れ、25枚のカードの束を
テーブルにリボンスプレッドする。
その配列状況を見て客が選んだカードのマークと数字を当てる。

(追伸)
あれこれ実験してみてやっと理解できました。
この例を行うには24枚のカードを裏表を取り混ぜてまず勝手にシャッフルさせて
リボンスプレッドしてみる。
客にカードを一枚選ばせる。
それをどこでもいいので裏向きで戻させるとそれを更に勝手にシャッフルさせて構わない。
(本人もどこにあるのかわからなくなる。しかし助手Aはカードの名前は知っている。)
再びカードをリボンスプレッドした時、裏向きカードは1、表向きのカードは0で読み
24個の0,1で作られる配列ができる。
例としてこれを
gp > M=vector(24,i,random(2))
%231 = [1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1]
でランダムに構成して置く。
Mの先頭に1を挿入して
gp > Ma=concat([1],M)
%232 = [1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1]
gp > sum(i=1,25,i*Ma[i])%26
%233 = 14
と
Mの最後尾に0を挿入して
gp > Mb=concat(M,[0])
%234 = [1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0]
gp > sum(i=1,25,i*Mb[i])%26
%235 = 2
を計算して置く。

そして2人の助手A,Bは数字とカードの名前を
D;1,2,3,4,5,6を1,2,3,4,5,6
C;1,2,3,4,5,6を7,8,9,10,11,12
H:1,2,3,4,5,6を13,14,15,16,17,18
S:1,2,3,4,5,6を19,20,21,22,23,24
と対応させておく。
もし客のカードがD6ならこのカードのコードは6なので上の2つの数14と2では2がより近いので
はじめの配列Mに対し0の数字を右端から入れて行くとき、異なる配列ができるものを考えると
M=[1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1] に対し
M2=[1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0]
M3=[1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1]
M4=[1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1]
M5=[1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1]
M6=[1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1]
と作られていき、このM6が
gp > sum(i=1,25,i*M6[i])%26
%237 = 6
と確かにコード値6を作れる。
即ち助手Aはもう一枚のカードを表向きにMの配列の後ろから9と10番目の間に挿入する作業をすればよい。

次に客のカードがH5ならコード数は17であるので14に近くなる。
そこで1の数字をMの配列で左端から右側へ入れて行くことをやっていくと数字が一つずつ増加する。
M=[1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1]
M14=[1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1]
M15=[1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1]
M16=[1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1]
M17=[1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1]
これでsum(i=1,25,i*M17[i])%26
%239 = 17
が復元される。

注意点で0や1の数字をずらしながら構成していくときそれから構成するVT(23)の符号がトランプのコード値
を越えてしまうこともある。(25,26≡0 (mod 26))
この値が当てはまる配列は飛ばすことになるので、カード挿入時それを考慮しておくこと。

この原理はトランプ数が正規の52枚でも通用するので、表裏混在のカードで、客のカードを1~52の数字に対応させておき
この配列に対し助手Aはジョーカーを使い適切な位置に表向き(0)か裏向き(1)の状態でカードを挿入すれば
このカードの配列Maから
sum(i=1,53,i*Ma[i])%54で1~52の数字を必ず作り出すことが、どんな初期配列からでも可能となる。
暗算でこれらの仕組みを処理するには練習、練習ですね。

引用して返信編集・削除(編集済: 2022年11月13日 20:52)

https://mathlog.info/articles/1342
上の参考資料とはほんの少々味付けが違いますが。

重みベクトルとの内積をここではL値と呼ぶこととします。

助手と手品師はともに1回だけ内積の計算をすることとなります。

ミニマムな5枚のトイモデルで例示します。

助手がみた符号が
1010
だとしましょう。

L値は 4 です。

味付けが異なりますが。
カウントアップ系とカウントダウン系とを
私なら用意します。mod 6 で。

◆カウントアップ系
1010
の右端に 0 をつける。
L値は変わらず 4 のまま。

記法を変えます。
所与の4枚については、0または1の代りに、oとiとを使います。5枚目のカードについては
0と1とを使います。挿入位置の変化とL値の変化が視認しやすいようにです。

またL値とビット列とを並べて書くことにします。

4:ioio の右端に0を追加。
4:ioio0

この0を右から左にスライドしていき、
iをまたぎこす都度に、L値をカウントアップします。L値の定義がうまいことになっていますのでこれが可能です。

4:ioio
------
4:ioio0
5:io0io
0:0ioio
これ以上またぎこせません。

◆カウントダウン系
oioiの右端に 1 を追加すると、L値はひとつ減ります。以後 1 を左にスライドしていきoをまたぎこす都度に、L値をカウントダウンします。

4:ioio
------
3:ioio1
2:io1io
1:1ioio
これ以上またぎこせません。

参考資料ではカウントアップのみを使っていますが。

引用して返信編集・削除(未編集)

トランプ一式でのマジックをコンピュータ上で再現してみました。
コードはPARI/GPです。

M=vector(52,i,random(2));表裏混在のシャッフル後の設定です。
VT=sum(i=1,52,i*M[i])%54
end=if(VT>52,end=VT-54,VT)
top=(end+vecsum(M)+1)%54
onemax=vecsum(M)
zeromax=52-vecsum(M)
L=List(M)

(実行部)
M=vector(52,i,random(2))
[0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1,
0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0]

gp > VT=sum(i=1,52,i*M[i])%54
%425 = 3
gp > end=if(VT>52,end=VT-54,VT)
%426 = 3 ----------->Mの配列の最後尾に0を追加した符号長53のVT符号は剰余3を構成する。
gp > top=(end+vecsum(M)+1)%54
%427 = 28 ------------>Mの配列の最前列に1を追加した符号長53のVT符号は剰余28を構成する。
gp > onemax=vecsum(M)
%428 = 24  ------------>Mに含まれる1の個数。
gp > zeromax=52-vecsum(M)
%429 = 28 ------------>Mに含まれる0の個数。
gp > L=List(M); 1,0数字の挿入や削除がやり易いのでリスト形式にしました。

Search0(k)={t=0;}for(i=1,#L,if(L[i]==0,t++;\
if(t==k && t<=52-vecsum(M),print((top+t)%54";"i+1))));リスト中の0の存在位置の調査です。(裏向きカードの挿入位置も)
*-->右の数字:Mの配列の何処にジョーカーカードを裏向きに挿入したらよいか。
左の数字:差し込んだ後の符号長53のVT符号での剰余の値(=客の選んだトランプのコード値)
gp > for(k=0,zeromax,Search0(k)
29;2
30;3
31;4
32;6
33;9
34;10
35;12
36;13
37;14
38;15
39;16
40;18
41;21
42;23
43;24
44;25
45;28
46;31
47;34 *
48;36
49;37
50;39
51;40
52;42
53;46
0;49
1;51
2;53 *

*印の確認
gp > listinsert(L,1,34);Vec(L) -->1の数字をLの34の位置に挿入します。
%487 =
[0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1,
0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0]
gp > sum(i=1,53,i*L[i])%54
%488 = 47
*必ず初期状態に戻しておくこと。!!
listpop(L,34); -->34の位置にある要素を削除します。

その後次の作業
gp > listinsert(L,1,53);Vec(L)
%509 =
[0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1,
0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1]
gp > sum(i=1,53,i*L[i])%54
%510 = 2
listpop(L,53);

-------------------------------------------------------------------------

Search1(k)={t=0;}forstep(i=52,1,-1,if(L[i]==1,t++;\
if(t==k && t<=onemax,print((end+t)%54";"i)))) ;リスト中の1の位置を調査します。(表向きカードの挿入位置も)
*-->右の数字:Mの配列の何処にジョーカーカードを表向きに挿入したらよいか。
左の数字:差し込んだ後の符号長53のVT符号での剰余の値
gp > for(k=0,onemax,Search1(k))
4;51
5;49
6;47
7;46
8;44
9;43
10;42
11;40
12;37
13;34
14;32
15;31
16;29
17;28
18;26
19;25
20;21 *
21;19
22;18
23;16
24;10
25;7
26;6 *
27;4

*印部分の確認
gp > listinsert(L,0,21);Vec(L)
%493 =
[0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1,
1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0]
gp > sum(i=1,53,i*L[i])%54
%494 = 20
listpop(L,21);L

gp > listinsert(L,0,6);Vec(L)
%519 =
[0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1,
1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0]
gp > sum(i=1,53,i*L[i])%54
%520 = 26
listpop(L,6);L

計算上トランプにない数字53,54(≡0 ;mod (54))が出てくる時が起こるので、それを除外しながら考えなければ
ならないところが面倒でした。
これでたぶん、あらゆる初期条件でも何処にカードを表か裏かを判断して挿入するかが分かってくると思います。

#考えられないような現象を起こせるもんですね! 感激しました。

引用して返信編集・削除(編集済: 2022年11月15日 06:02)

このスレッドに返信

ロケットBBS

Page Top