1.世界に昔からある「油分け算」
油分け算。
有名なパズルですよね。
こ〜んな感じの問題文で、解くために油をあっちこっちに移しまくるアレです。
3升枡と7升枡を使って、この油を1斗桶に5升、7升枡に5升入れたい。
どうやれば良いか?
油分け算は古くからありました。
日本だと、吉田光由の著書『塵劫記』が有名ですね。
上述の問題が当時の言葉遣いで書かれています。
塵劫記は日常生活に必要な計算法を網羅している算術書ですが、「継子立て」や「ねずみ算」などのお遊びの面も兼ね備えています。
塵劫記の人気っぷりは凄まじく、塵劫記の一部を取り入れて『○○塵劫記』と名の付いた異本が何百種類も刊行されたという!
本家は本家で版を重ね、ベストセラーになった代物です。
西洋だと、さらに歴史を遡ります。
いくつか存在するようですが、その一例として16世紀に発表された「タルタリアの問題」があります。
タルタリアはその当時に活躍していた数学者です。が、これは「どもり」という意味の通称で、本名はニコロ・フォンタナ。3次方程式の解法を巡るあの「カルダノとの対立」でも有名な人物ですね。
そのタルタリアの問題を紹介しましょう。
ただ、当時の問題文には聞き慣れない言葉があるので、少しアレンジしてご紹介。
3オンスと5オンスの容器を使って、この液体を4オンスずつに分けたい。
さぁ、どうする?
油分け算の由来については、論文『油分け問題の由来と解法の進化における文化的意義に関する一考察』(PDFファイル) に詳しく記載されています。
興味があれば読んでみてください。
さて。
こういう油分け算、実は、ある「有名な物」にも使われていたのはご存じでしょうか?
あのブルース・ウィリスも油分け算をやっていたのさ!
と言っても、映画『ダイ・ハード3』のワンシーンだけどね。
なんと、ストーリーの中に油分け算のシーンが出てくるんです。
ま、実際は油じゃなくて水だから、「水汲み問題」と言う方が正しいかな?
そばにあったトランクを開けると、時限爆弾が作動してしまった。
爆弾を解除するには、2つの容器を使って水を正確に4ガロン量らなくてはならない。
刻々と制限時間が差し迫る中、残り数秒というところで2人は解除に成功する。
劇中では、マクレーンが3ガロン容器に水を3分の1入れようとして、ゼウスに窘められていましたね。
もちろん、3+1=4 なんて反則です😅
ダイ・ハード愛好家の方々には、爆弾解除シーンの映像が脳裏によみがえったかもしれません。
ダイ・ハード3のあのシーンは、タルタリア問題の一種と言えますね。
噴水が8ガロン容器の代わりを務めるというだけで、本質は同じです。
マクレーン刑事が挑戦したこの水汲み問題、実は、画期的な方法が存在します。
その方法をこれから紹介しようと思います。
2.解くカギはビリヤードにあった
まずは、正解手順を示しましょう。
次の通りです。
[ ] の中の数字は、左側が3ガロン容器に入っている水量、右側が5ガロン容器に入っている水量を表しています。
- 噴水から3ガロン容器へ水を注ぐ。[3, 0]
- 3ガロン容器から5ガロン容器へ水を移す。[0, 3]
- 噴水から3ガロン容器へ水を注ぐ。[3, 3]
- 3ガロン容器から5ガロン容器へ水を移す。[1, 5]
- 5ガロン容器の水を噴水へ戻す。[1, 0]
- 3ガロン容器から5ガロン容器へ水を移す。[0, 1]
- 噴水から3ガロン容器へ水を注ぐ。[3, 1]
- 3ガロン容器から5ガロン容器へ水を移す。[0, 4]
水汲み問題を解く時は、とにかく試行錯誤を繰り返すことでしょう。
最短手数にこだわるなら、一手ごとに水量を記録してその変遷を図や表にするでしょう。
まぁ何にせよ、手間はかかっちゃいますよね。
もし頭を使わずにできるスバラシイ方法があれば嬉しいけれど、そんなムシのいい話はあるんかな?
実は、あるんです!
ビリヤード台を使って解決できるんです。
ただ、実物の台ではなくて、図2-1 みたいに 60°にひしゃげてるんですけどね😅
このビリヤード台、3×5サイズの平行四辺形です。
3ガロンと5ガロンの容量にちなんでいます。
このビリヤード台には3方向の線が格子状のように引かれ、小さな正三角形に分割されていますね。
この区分けによって、外周部分には [0, 0] から [3, 5] までの水量目盛りが振られます。
上述の手順 1.〜8. では [ ] 内に各容器の水量も書きましたが、実は、水量の変遷がわかれば手順を復元できます。
だから、手順説明をすべて省いて、変遷だけ並べましょう。
- [0, 0] → [3, 0] → [0, 3] → [3, 3] → [1, 5] → [1, 0] → [0, 1] → [3, 1] → [0, 4]
そして、ビリヤードの手球を [0, 0] に置いて、この変遷に従って手球を動かしてみましょう!
まず、最初の一手で水量は [0, 0] から [3, 0] に変化しますね。
手球も [3, 0] に動かしましょう。
[3, 0] → [0, 3] → [3, 3] → [1, 5] → [1, 0] まで途中経過。
手球はビリヤード台の縁にコンコンぶつかりながら転がっていく。
最後の手順まで進むと手球は [0, 4] に到達し、5ガロン容器に4ガロンの水が入った。
手球の通ったルートはそのまま正解手順を表しているわけですね。
このビリヤードの方法、一体何が凄いのか?
それは……、
手球の進み方が現実のビリヤードとまったく同じなんです。
皆さんは反射の性質をもちろんご存じでしょう。
現実のビリヤード台で球をキューで撞けば、球は四方の縁を等角度で反射しながら転がりますよね。
上図の矢印はその性質に従ったルート取りになっているんです。
キレイに「入射角=反射角」を保ちながら手球がコンコンコンコン跳ね返りまくるのさ!
このことから、果たしてどういう結果が得られるのか?
実は、こんなことが言えてしまうんです。
- [0, 0] の位置に手球を置き、そこから縁に沿って右上方向へ思いっきり手球を撞いてやる。
たったそれだけで、水汲み問題が解けてしまう!
水汲み手順をいちいち覚えなくてもいい。
水量をいちいち把握しなくてもいい。
水量の変遷をいちいち記録しなくてもいい。
ただただビリヤード台の縁に沿って力任せに手球をブッ放せばいい。
水汲み問題はパズルではなく、ただの作業ゲームだった!?
マジか😅
んなバカな😅
……衝撃的な結果でしたね。
球を撞けば勝手に正解。脳筋プレイ上等! ……になってしまった。
ところで。
この水汲み問題には別解があります。
[0, 0] は下端の縁にもあって、[0, 0] から右方向に球を撞いても [0, 4] に到達するんです。
実際にやってみましょうか。
手順を復元すると……、
- 噴水から5ガロン容器に水を注ぐ。[0, 5]
- 5ガロン容器から3ガロン容器へ水を移す。[3, 2]
- 3ガロン容器の水を噴水へ戻す。[0, 2]
- 5ガロン容器から3ガロン容器へ水を移す。[2, 0]
- 噴水から5ガロン容器に水を注ぐ。[2, 5]
- 5ガロン容器から3ガロン容器へ水を移す。[3, 4]
- 3ガロン容器の水を噴水へ戻す。[0, 4]
たしかに4ガロンができた!
これも正解なんですね。
ちなみに、これはダイ・ハード3で実際に行われたであろう手順です。
事なきを得てガッチリ手を握り合った時の2人の顔ったらもう!😊
結局、この水汲み問題(油分け算)の解決方法は、次の形に集約されます。
- 60°にひしゃげたビリヤード台を用意する。そのサイズは2つの容器の容量と同じ。
その後、[0, 0] に手球を置いて、どちらかの縁に沿って手球を撞くだけで勝手に正解が得られる。
このビリヤード方法は、M. C. K. Tweedie によって1939年に発見されました。
そして、この方法は一般的な形に拡張されています。
- \(p\) ガロン, \(q\) ガロンの2つの容器(\(p\) と \(q\) は互いに素)と噴水がある。
この時、ひしゃげたビリヤード台を利用することで、任意の \(n\) ガロン \((1 \leqq n \lt p+q)\) の水を量ることが可能である。
「任意の \(n\) ガロンを量れる」という部分がまた秀逸ですよね。
これは、3×5サイズの例で概要を理解できます。
既に2つの正解ルートを見つけましたっけ。それを重ねてみましょう。
おぉ! なんかキレイに組み合わさったぞ!
そう。実は、内部の格子線をすべて1回ずつ通っているんです。
当然、[3, 5] 以外の外周目盛りもすべて通過しています。
だから、水汲み作業の途中で1ガロン〜7ガロンの水量をどこかで経験するわけなんですね。
いや〜すごい!
この一般形のおかげで、どんな水汲み問題も機械的に解けるようになった。
それだけでなく、2つの容器の容量を(互いに素を保ちながら)自由に変えて、さまざまな問題をいくらでも作れるようにもなった。
容器2つの水汲み問題はバリエーションを無限に増やせる。
しかし、どれもこれもビリヤードで機械的に解けてしまう。
なんて底が深くて浅いパズルなんだ!😅
あ、そうそう。
『塵劫記』の油分け算もビリヤード化してみましょうか!
問題文はセクション1の冒頭にあります。
一例はこんな感じ。
3.解くカギは不定方程式にもあった
ビリヤードほど画期的ではないけれど、解く方法はもう1つあります。
それも紹介しましょう。
その前にちょいと前準備。
前セクションで挙げた正解手順の内容を調べてみましょう。
その中にある各操作を分類してみると、実はたった3種類しかないことがわかります。
- 空っぽの容器を噴水で満杯にする。
- 満杯の容器の水を噴水に全部戻す。
- 一方の容器が空になる/他方の容器が満杯になる のどちらかに到達するまで、容器から容器へ水を移す。
a. を行うと、2つの容器の総水量が増えますね。b. だと減ります。
c. だと総水量は変わりません。
ということは、ある水量を作りたいなら a. と b. の2つを駆使することになるでしょう。
正確に言うと、「操作 a. b. のみで総水量を調節する。ただし、a. b. を正しく実行できるように操作 c. を間に挟む」という形で水汲み作業が行われます。
操作 a. b. をまとめて 水量操作 と呼ぶことにしましょう。
前準備はこれで終わり。
さて。
若い方々は、高校数学Aで不定方程式を習ったことと思います。
「\(ax+by=1\)」みたいな式、ありましたっけ。やれ特殊解だ何だとゴチャゴチャやって整数解 \(x\), \(y\) を求めましたね。
前セクションの3ガロンと5ガロンにちなんで、不定方程式とその整数解を1つ書いてみます。
- 不定方程式 3x+5y=4 の整数解の1つに x=3, y=-1 がある。
当然ですが、これは 3×3+5×(-1)=4 が成り立つことを意味しますよね。
この等式、水汲み問題ではどういう意味を持つんでしょう?
それは、「次の水量操作をすべて実行すれば4ガロンの水ができあがる」ということなんです。
- 空っぽの3ガロン容器を噴水で満杯にする。(3回)
- 満杯の5ガロン容器の水を噴水に全部戻す。(1回)
水量操作は全部で4つ。
それを頭の片隅に置きながら、あらためて前セクションの正解手順(ダイ・ハード3じゃない方)を見てみましょうか。
- 噴水から3ガロン容器へ水を注ぐ。[3, 0]
- 3ガロン容器から5ガロン容器へ水を移す。[0, 3]
- 噴水から3ガロン容器へ水を注ぐ。[3, 3]
- 3ガロン容器から5ガロン容器へ水を移す。[1, 5]
- 5ガロン容器の水を噴水へ戻す。[1, 0]
- 3ガロン容器から5ガロン容器へ水を移す。[0, 1]
- 噴水から3ガロン容器へ水を注ぐ。[3, 1]
- 3ガロン容器から5ガロン容器へ水を移す。[0, 4]
なんと4つ全部入ってる!
この4つの水量操作が正解へと導いていたんですね。
なお、手順 2. 4. 6. を間に挟んだおかげで水量操作 3. 5. 7. は正しく実行できています。
不定方程式は水汲み問題の本質部分だと言えます。
水量操作という形で整数解がそのまま正解へと導くからです。
整数解が見つかるということは、水汲み問題が解決するということと同じなんですね。
そういう理由から、実は、容器の個数は関係ありません。
容器が3つでも不定方程式で同じように解決できるんです。
実際にやってみましょうか。
今、この3つの容器を使って、7ガロンの水を量りたい。
さぁ、どうする?
これは、不定方程式 6x+10y+15z=7 を立てればOK!
その整数解を1つ見つければ良し。
なんとか探すと、次のような解を得ます。
- 方程式 6x+10y+15z=7 の整数解の1つに x=2, y=-2, z=1 がある。
- 空っぽの6ガロン容器を噴水で満杯にする。(2回)
- 満杯の10ガロン容器の水を噴水に全部戻す。(2回)
- 空っぽの15ガロン容器を噴水で満杯にする。(1回)
必要な水量操作は全部で5つ。
正解の一例はこの通り。
- 噴水から6ガロン容器へ水を注ぐ。[6, 0, 0]
- 6ガロン容器から10ガロン容器へ水を移す。[0, 6, 0]
- 噴水から6ガロン容器へ水を注ぐ。[6, 6, 0]
- 6ガロン容器から10ガロン容器へ水を移す。[2, 10, 0]
- 10ガロン容器の水を噴水へ戻す。[2, 0, 0]
- 噴水から15ガロン容器へ水を注ぐ。[2, 0, 15]
- 15ガロン容器から10ガロン容器へ水を移す。[2, 10, 5]
- 10ガロン容器の水を噴水へ戻す。[2, 0, 5]
- 6ガロン容器から15ガロン容器へ水を移す。[0, 0, 7]
見事に解けました😄
容器の容量が互いに素であれば、容器が何個あろうとも不定方程式で解決できます。
水汲み作業の定理はさらに一般化されていて、こんなことが成り立っています。
- 互いに素である容量 \(V_1,\ V_2,\ \cdots,\ V_k\) を持つ \(k\) 個の容器、そして噴水がある。
この時、任意の \(n\ (0 \leqq n \leqq V_1+V_2+\cdots+V_k)\) に対して、\(n\) 単位の水を量ることができる。
さっきの6, 10, 15ガロンの場合だと、0ガロン〜31ガロンの32通りすべてを量ることができるというわけですね。
やっぱり「任意のn単位を量れる」というのが秀逸です。
素晴らしい😃
ただ、残念ながら、不定方程式は使い勝手が悪いという欠点がある。
変数の個数が多くなるにつれて、解く手間がねずみ算式に増えていく。
3x+5y=4 ならまだマシだけど、6x+10y+15z=7 の解探しなんて結構骨が折れますもんね。
しかも、ただ見つけりゃいいというわけではなく、どの解もなるべく0に近い値でないと後で泣きを見る😭
お手軽とは言いにくいけれど、水汲み問題に対して不定方程式は大きな力になります。
解探しを厭わないくらい数遊びの好きな方々なら、使ってみるのも良いでしょう。
最適な整数解を探す作業も、それはそれで一種のパズルと言えます。
参考・参照
- 張忠任/陳幼竹 著, 『油分け問題の由来と解法の進化における文化的意義に関する一考察』,
https://hamada.u-shimane.ac.jp/research/32kiyou/10sogo/seisaku43.data/03tyou_Chen.pdf, (参照 2023. 4.12) - 佐藤健一 著, 丸善出版,『塵劫記を読みとく百科』, 2021
- T.S.マイケル 著, 佐藤かおり/佐藤宏樹 訳, 青土社,『離散数学パズルの冒険』(第1刷), 2012
更新履歴
- 2023. 4.19.
- 新規公開。