テンパズル(10パズル)は、4桁の数字を一桁の数字4つとみなし、これに四則演算などを用いて10を作る遊び。メイクテン(make10)とも呼ばれる。切符の番号や車のナンバープレートなどでの短時間の遊びに利用され、日本経済新聞[要文献特定詳細情報]で渋滞時の時間の潰し方として紹介されたことがある。

一般的なルール

編集

一般的なルールとしては、四則演算のみの使用を許可し、数字の並べ替えも許可されるが、数字の結合は許可されない。一般的なルールの場合、全715通り中552通りの組み合わせ(並べ替えたものを数えると全10000通り中8147通り)で10を作ることができる。解き方を1つでも見つければ正解となるが、使っていない数字があった場合は正解にならない。

(例.) 1358   (解き方の一例)
  (解ければどのような解き方でもよい)

数字は自由に並べ替えてもよいので、例えば「1358」と「5381」は同じ問題となる。

特殊ルール

編集

地方ルールもしくは特殊ルールとして、指数関数や数学の記号(べき乗!(階乗)など)の使用を許可することや、連続した数字をつなげて2桁の数字として扱うなどの応用もある。この場合はさらに10を作ることの出来る組み合わせが増える。大抵は一般的ルールで解けなかった場合にルールの拡張が行われる傾向がある。

(例.) 0123   (指数関数を使った例)
1111   (最初の連続した1を2桁の数字として扱った例)

これらはあくまで特殊ルールであり、この方法でのみ解ける場合に「解ける」とはしない。ちなみに、数字を連結させた場合は、連結させない場合に加えて新たに70通り解ける組み合わせが増える。


逆に作ることの出来る組み合わせを減らす特殊ルールとして、数字の並べ替えを許可しない問題も存在する。この場合はマイナス記号を数字の前に置くことを許すかどうかというサブルールが別途規定されるが、マイナス記号は四則演算ではないためにマイナス記号が許可されないのが一般的である。なお、数字の並べ替えを許可せず、マイナス記号も許可しなかった場合、10000通り中5878通りで10を作ることが出来るが、それぞれの数字の難易度は桁違いに高くなる。

(例.) 1358   (マイナス記号が許可された場合の一例)
  (マイナス記号が許可されない場合、1358の例ではこの方法のみ可能)


他にも、10以外の数字を作ったり、5桁以上の数から10を作ったりするルールも存在する。例えば16を作るルールは10を作るルールに比べて難易度は若干上昇する。5桁以上の数字から10を作る場合、数字の数が増えることにより難易度が大幅に低減する。

その他

編集

ものによって解けるもの、解けないものが存在する上に、コンピュータを使わずに解けないことを証明することが極めて難しいために、出先などで切符やナンバープレートなどで解けそうで解けない番号に当たってしまったときは、非常に歯がゆい思いをすることが多い。解けるかどうかを見分ける一つの方法として、「0を含まない、互いに相異なる4つの数の場合は必ず解ける」ことが知られている。また、演算の途中経過が整数の範囲では解けなくとも、有理数の範囲で解ける問題も複数存在する。

解ける問題に対して難易度を定義するのも難しい問題である。一般的に加法乗法などの交換法則が成立する演算子を利用して解ける場合は解法の種類が多く解きやすい。逆に減法除法など交換法則が成立しない演算子を利用する解法のみでしか解けない問題は一般的に難易度が高く、パズルとして出題される場合は大抵このパターンであるが、難しい問題の中にも加法と乗法のみで解が導き出せる例も存在する。

一般に難易度は「解ける解法が少ない」という形で定義されるが、その場合、一般的なルールでは大抵の人間が直感的に解ける1116が難問に分類されてしまう不具合もあり、画一的な難易度の指標は確立されていない。

コンピュータによる解法

編集

解法自体はそれほど難しくないが、それをコンピュータ上に実装するための方法が難しい。とくに「整数の範囲内では解けないが分数(有理数)の範囲では解ける」ケースが存在する点が難関となる。そのため有理数を計算できる電卓プログラム(Forthを参照のこと)を実装することが要求される。

解を得るための手順としては、

  • 「1・2・3・4」から「6・7・8・9」までの順列を生成する(126通りある)。
  • それぞれの数から、組合せを生成する。これは24通りある。
  • 各組合せに対して、Forth 言語として意味のある式(数値四つ+演算子三つの7要素である)をすべて生成する(最初の二つは数字であり、最後のひとつは演算子である)。
  • その式をすべて評価し、解が10と一致するもののみを選ぶ。
  • Forth 式を(括弧)のある式に変換する。

プログラム・アルゴリズムの分野では、逆ポーランド記法後置記法)やスタックの例題として取り上げられることがあるが、プログラミング初級者にはほとんど歯が立たない。「逆ポーランド記法を評価できる仮想的マシンを実装し、そのプログラミング言語を生成するシステムを作る」といった言語処理系想定する方法が有効なので、システムエンジニアに対しては有効な課題である。Java などのオブジェクト志向プログラミング言語ではコンテナクラスもあり扱いやすいが、C 言語のような言語処理系においては、時間・空間計算量などの見積もりが大変であったため、「複数のプログラム間をファイル渡し(または標準入出力渡し)して解決する」という手法もあった。

参考資料

編集

一般的なルールで10を作れる552個の数字の組み合わせ

1. 0019 0025 0028 0037 0046 0055 0115 0118 0119 0124 0125 0126 0127 0128 0129 0133 0135 0136 0137 0138
2. 0139 0145 0146 0147 0149 0155 0156 0159 0169 0179 0189 0199 0223 0224 0225 0226 0227 0228 0229 0234
3. 0235 0237 0238 0239 0244 0245 0246 0247 0248 0249 0255 0256 0257 0258 0259 0266 0267 0268 0278 0288
4. 0289 0334 0337 0339 0346 0347 0349 0355 0356 0357 0358 0367 0368 0377 0378 0379 0446 0449 0455 0456
5. 0458 0459 0466 0467 0468 0469 0477 0488 0555 0556 0557 0558 0559 0568 0569 0578 0579 0669 0679 0688
6. 0779 0789 0889 0899 0999 1114 1115 1116 1117 1118 1119 1123 1124 1125 1126 1127 1128 1129 1133 1134
7. 1135 1136 1137 1138 1139 1144 1145 1146 1147 1148 1149 1155 1156 1157 1158 1166 1167 1168 1189 1199
8. 1222 1223 1224 1225 1226 1227 1228 1229 1233 1234 1235 1236 1237 1238 1239 1244 1245 1246 1247 1248
9. 1249 1255 1256 1257 1258 1259 1266 1267 1268 1269 1277 1278 1279 1288 1289 1299 1333 1334 1335 1336
10. 1337 1338 1339 1344 1345 1346 1347 1348 1349 1355 1356 1357 1358 1359 1366 1367 1368 1369 1377 1378
11. 1379 1388 1389 1445 1446 1447 1448 1449 1455 1456 1457 1458 1459 1466 1467 1468 1469 1477 1478 1479
12. 1488 1489 1555 1556 1557 1558 1559 1566 1567 1568 1569 1577 1578 1579 1588 1589 1599 1668 1669 1678
13. 1679 1688 1689 1778 1779 1788 1789 1799 1888 1889 1899 1999 2222 2223 2224 2225 2226 2227 2228 2229
14. 2233 2234 2235 2236 2237 2238 2239 2244 2245 2246 2247 2248 2249 2255 2256 2258 2259 2266 2267 2268
15. 2269 2277 2278 2279 2288 2289 2299 2333 2334 2335 2336 2337 2338 2339 2344 2345 2346 2347 2348 2349
16. 2355 2356 2357 2358 2359 2366 2367 2368 2369 2377 2378 2379 2388 2389 2399 2444 2445 2446 2447 2448
17. 2449 2455 2456 2457 2458 2459 2466 2467 2468 2469 2477 2478 2479 2488 2489 2499 2555 2556 2557 2558
18. 2559 2566 2567 2568 2569 2577 2578 2579 2588 2589 2599 2666 2667 2668 2669 2677 2678 2679 2688 2689
19. 2699 2777 2778 2779 2788 2789 2799 2888 2889 2899 2999 3333 3334 3335 3336 3337 3338 3339 3344 3345
20. 3346 3347 3348 3349 3355 3356 3357 3358 3359 3366 3367 3368 3369 3377 3378 3379 3388 3389 3399 3445
21. 3446 3447 3448 3449 3455 3456 3457 3458 3459 3466 3467 3468 3469 3477 3478 3479 3488 3489 3499 3555
22. 3556 3557 3558 3559 3566 3567 3568 3569 3577 3578 3579 3588 3589 3599 3666 3667 3668 3677 3678 3679
23. 3688 3689 3699 3777 3778 3788 3789 3799 3888 3889 3899 4445 4446 4447 4448 4449 4455 4456 4457 4458
24. 4466 4467 4468 4469 4478 4479 4488 4489 4499 4555 4556 4557 4559 4566 4567 4568 4569 4577 4578 4579
25. 4588 4589 4599 4666 4667 4668 4669 4677 4678 4679 4688 4689 4699 4777 4778 4779 4788 4789 4799 4888
26. 4889 5555 5556 5557 5558 5559 5566 5567 5568 5569 5577 5578 5579 5588 5589 5599 5666 5667 5669 5677
27. 5678 5679 5688 5689 5699 5777 5778 5779 5789 5888 5889 5999 6668 6669 6678 6679 6688 6689 6699 6779
28. 6788 6789 6799 6889 7778 7779 7889 7899 8888 8889 8999 9999


以下は、一般的なルールで10を作れない163個の数字の組み合わせ。

1. 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009
2. 0011 0012 0013 0014 0015 0016 0017 0018 0022 0023
3. 0024 0026 0027 0029 0033 0034 0035 0036 0038 0039
4. 0044 0045 0047 0048 0049 0056 0057 0058 0059 0066
5. 0067 0068 0069 0077 0078 0079 0088 0089 0099 0111
6. 0112 0113 0114 0116 0117 0122 0123 0134 0144 0148
7. 0157 0158 0166 0167 0168 0177 0178 0188 0222 0233
8. 0236 0269 0277 0279 0299 0333 0335 0336 0338 0344
9. 0345 0348 0359 0366 0369 0388 0389 0399 0444 0445
10. 0447 0448 0457 0478 0479 0489 0499 0566 0567 0577
11. 0588 0589 0599 0666 0667 0668 0677 0678 0689 0699
12. 0777 0778 0788 0799 0888 1111 1112 1113 1122 1159
13. 1169 1177 1178 1179 1188 1399 1444 1499 1666 1667
14. 1677 1699 1777 2257 3444 3669 3779 3999 4444 4459
15. 4477 4558 4899 4999 5668 5788 5799 5899 6666 6667
16. 6677 6777 6778 6888 6899 6999 7777 7788 7789 7799
17. 7888 7999 8899


以下は、一般的なルールでは10を作れないが、数字を連結させるルールでは10を作れる70個の数字の組み合わせ

1. 0001 0011 0012 0013 0014 0015 0016 0017 0018 0022
2. 0023 0033 0034 0044 0045 0056 0066 0067 0077 0078
3. 0088 0089 0099 0111 0112 0122 0123 0134 0144 0158
4. 0166 0167 0177 0178 0188 0236 0279 0336 0345 0369
5. 0448 0457 0589 1111 1112 1122 1159 1177 1178 1188
6. 1444 1666 1777 2257 3444 3669 3779 4444 4459 4477
7. 6666 6667 6677 6777 7777 7788 7789 7799 7888 8899

関連項目

編集