NOBさんの問題をプログラム電卓TI-59で解く

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

TI-59の簡単な仕様説明

そこそこ普通の電卓です。普通の電卓と異なるのはLRNボタンです。
  1. LRNボタンでプログラムモードに入る
  1. キー入力を蓄積する
  1. LRNボタンで通常モードに戻る
  1. RSTでプログラムカウンタを0にする
  1. 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 100100にサブルーチンジャンプ
2. R/S
100. +1=
101. INV SBR サブルーチン呼び出し元に戻る

比較

特殊なTレジスタとの比較ができます。
1. 42
2. x⇔t 42Tレジスタにいれる
3. 42
4. x=t x² X=Tならばジャンプ
6. 10
5. R/S
6. 2nd Lbl7. 20
8. R/S

問題を解くプログラム

そんな雰囲気なのでざっくりとコードを書いてみましょう。
(000) メインコード。01 02 03メモリにX以下の値を入れて順番に探索
STO 01
2nd Lbl x⇔t
RCL 01
STO 02
2nd LblRCL 02
STO 03
2nd Lbl √x
SBR 100
2nd Dsz 3 √x
2nd Dsz 22nd 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の表示。
しばらくするとドットプリンタに結果が出ます。
notion image
良さそうな感じがします。一番上の行(30, 16, 3)を計算してみると、正しそうなことがわかります。
32×18×5=288030×16×3=144032\times 18\times 5=2880\\ 30\times 16 \times 3=1440
あとは300ぐらいまでの探索をすれば良いんですが、計算が遅すぎて諦めました。
ところで、どうやって解の上界を抑えているのか、わかっていません。1000ぐらいまで調べても追加の解がないので、これ以上なさそうな気はするんですが。
 
追記:丁寧にやれば上界が求まるみたいです。