NOBさんの問題をプログラム電卓TI-59で解く
作成日: 2025-03-31
図書館でNOBさん(芦ヶ原伸之)さんの著作を読み漁ってました。
ある問題が紹介されていました。次のような問題です。
直方体の形にキューブを並べる。外に見えるキューブと中にあるキューブの数が同じになる形はどんなものか。
この問題をNOBさんはプログラム電卓であるTI-59で解いたということです。
同じようにプログラム電卓TI-59で解いてみましょう。
このアプリがTI-59のエミュレータとして使えます。

TI-59の簡単な仕様説明
そこそこ普通の電卓です。普通の電卓と異なるのはLRNボタンです。
- LRNボタンでプログラムモードに入る
- キー入力を蓄積する
- LRNボタンで通常モードに戻る
- RSTでプログラムカウンタを0にする
- R/Sで蓄積したキー入力を実行する
という流れでプログラムを実行します。
プログラムを書くのに必要な
- メモリ機能
- ジャンプ機能
- サブルーチン機能
- 比較機能
などがあります。
メモリ機能
1. 42を入力
2. STR 01 を入力 1番メモリに42が保存される
3. CLR を入力
4. RCL 01 を入力 1番メモリから読み出される
5. 42が表示される
ジャンプ機能
ラベルには特殊キーを使えます。
1. 2nd Lbl x² ラベル
2. +1=
3. Pause 1秒程度停止
4. GTO x² ラベルにジャンプ
サブルーチン機能
SBRで飛んで、INV SBRで戻ります
1. SBR 100 行100にサブルーチンジャンプ
2. R/S
100. +1=
101. INV SBR サブルーチン呼び出し元に戻る
比較
特殊なTレジスタとの比較ができます。
1. 42
2. x⇔t 42をTレジスタにいれる
3. 42
4. x=t x² X=Tならばジャンプ
6. 10
5. R/S
6. 2nd Lbl x²
7. 20
8. R/S
問題を解くプログラム
そんな雰囲気なのでざっくりとコードを書いてみましょう。
(000) メインコード。01 02 03メモリにX以下の値を入れて順番に探索
STO 01
2nd Lbl x⇔t
RCL 01
STO 02
2nd Lbl x²
RCL 02
STO 03
2nd Lbl √x
SBR 100
2nd Dsz 3 √x
2nd Dsz 2 x²
2nd Dsz 1 x⇔t
R/S
RST
(100) 計算コード 01 02 03メモリから計算する。
0 x⇔t
( RCL 01 + 2 ) * ( RCL 02 + 2 ) * ( RCL 03 + 2 )
- 2 * RCL 01 * RCL 02 * RCL 03 =
2nd x=t 1/x
INV SBR
2nd Lbl 1/x
SBR 200
INV SBR
(200) 出力コード ドットプリンタに結果を出力する
RCL 01 * 1000000 + RCL 02 * 1000 + RCL 03
2nd Prt
INV SBR
これをぽちぽちとLRNから入力していきます。
そして電卓に30を入力してRST R/S。結構な時間がかかります。電卓上にはCの表示。
しばらくするとドットプリンタに結果が出ます。

良さそうな感じがします。一番上の行(30, 16, 3)を計算してみると、正しそうなことがわかります。
あとは300ぐらいまでの探索をすれば良いんですが、計算が遅すぎて諦めました。
ところで、どうやって解の上界を抑えているのか、わかっていません。1000ぐらいまで調べても追加の解がないので、これ以上なさそうな気はするんですが。
追記:丁寧にやれば上界が求まるみたいです。