2010年8月8日日曜日

十六進乗算表

1985年頃, NTTの電気通信研究所でLispマシンの研究をしていた. そのマシンをELISという. Eは通研 (Electro Communication Laboratories) LISはLispである.

そのプロジェクトで作られた計算機の何台かが, JAIST(北陸先端科学技術大学)にあり, 8月7日から9日にかけて, JAISTでELIS復活祭というイベントが行われた. 20年くらい前の計算機の電源を入れ, もう一度走らせてみようというのである.

同時に多くの発表もあった.

私もLispプログラマなので, お誘いを受け, 参加し, 楽しい時を過している.

そのプロジェクトの最後の時期に TAO/SILENTというのがあり, その発表の時, 当時開発メンバーが十六進法をどう読んでいたかという話題になった. つまりFAB1を「エフエイビーイチ」ではなく, フタブイのように読むのである. これは面白いと思い, 早速(十進の九々に相当する)十六進の乗算表を作ってみた.

まず読み上げ方. 数の次が標準の読み方で, 読みにくい時はかっこ内が使える.

0 レ(オ)
1 イ
2 ニ
3 サ(ミ)
4 ヨ(シ)
5 ゴ
6 ロ(ム)
7 ナ
8 ハ(バヤ)
9 ク
A タ(カ)
B ブ(ボ)
C チャ
D ド
E テ(ケ)
F フ

とりあえず, 十六進数で乗算表を作ると, 次のようになる. 九々も0と1の段がないが, ここでも2の段から始まる. 最初は十六進でもニニガシである. 横に14個並ばないので, 縦長になり過ぎたが.

2204 2306 2408 250A 260C 270E 2810
2912 2A14 2B16 2C18 2D1A 2E1C 2F1E

3206 3309 340C 350F 3612 3715 3818
391B 3A1E 3B21 3C24 3D27 3E2A 3F2D

4208 430C 4410 4514 4618 471C 4820
4924 4A28 4B2C 4C30 4D34 4E38 4F3C

520A 530F 5414 5519 561E 5723 5828
592D 5A32 5B37 5C3C 5D41 5E46 5F4B

620C 6312 6418 651E 6624 672A 6830
6936 6A3C 6B42 6C48 6D4E 6E54 6F5A

720E 7315 741C 7523 762A 7731 7838
793F 7A46 7B4D 7C54 7D5B 7E62 7F69

8210 8318 8420 8528 8630 8738 8840
8948 8A50 8B58 8C60 8D68 8E70 8F78

9212 931B 9424 952D 9636 973F 9848
9951 9A5A 9B63 9C6C 9D75 9E7E 9F87

A214 A31E A428 A532 A63C A746 A850
A95A AA64 AB6E AC78 AD82 AE8C AF96

B216 B321 B42C B537 B642 B74D B858
B963 BA6E BB79 BC84 BD8F BE9A BFA5

C218 C324 C430 C53C C648 C754 C860
C96C CA78 CB84 CC90 CD9C CEA8 CFB4

D21A D327 D434 D541 D64E D75B D868
D975 DA82 DB8F DC9C DDA9 DEB6 DFC3

E21C E32A E438 E546 E654 E762 E870
E97E EA8C EB9A ECA8 EDB6 EEC4 EFD2

F21E F32D F43C F54B F65A F769 F878
F987 FA96 FBA5 FCB4 FDC3 FED2 FFE1

これはこんなプログラムで生成する.

(for-each (lambda (a)
(newline) (newline)
(for-each (lambda (b)
(display (string-append (number->string a 16)
(number->string b 16)
(number->string (quotient (* a b) 16) 16)
(number->string (modulo (* a b) 16) 16) " ")))
(a2b 2 9))
(newline)
(for-each (lambda (b)
(display (string-append (number->string a 16)
(number->string b 16)
(number->string (quotient (* a b) 16) 16)
(number->string (modulo (* a b) 16) 16) " ")))
(a2b 9 16))) (a2b 2 16))

関数 (a2b m n) は, (m m+1 ... n-1) のリストを作る. このプログラムを多少手直しすると, 九々ではなく, フフが得られる. 長い段は途中で折り返してあるので, 要注意.

気づている人もあろうが, 九々では積が1桁の場合, ニニガシのように, 「ガ」を挿入する. 下の表も「ニニガヨ」から始まる.


こんなもの, 使えるだろうか.

ニニガヨ ニサガロ ニヨガハ ニゴガタ ニロガチャ ニナガテ
ニハイレ
ニクイニ ニタイヨ ニブイロ ニチャイハ ニドイタ ニテイチャ
ニフイテ

サニガロ ササガク サヨガチャ サゴガフ サロイニ サナイゴ
サハイハ
サクイブ サタイテ サブニイ サチャニヨ サドニナ サテニタ
サフニド

ヨニガハ ヨサガチャ ヨヨイレ ヨゴイヨ ヨロイハ ヨナイチャ
ヨハニレ
ヨクニヨ ヨタニハ ヨブニチャ ヨチャサレ ヨドサヨ ヨテサハ
ヨフサチャ

ゴニガタ ゴサガフ ゴヨイヨ ゴゴイク ゴロイテ ゴナニサ
ゴハニハ
ゴクニド ゴタサニ ゴブサナ ゴチャサチャ ゴドシイ ゴテシロ
ゴフシブ

ロニガチャ ロサイニ ロヨイハ ロゴイテ ロロニヨ ロナニタ
ロハサレ
ロクサロ ロタサチャ ロブシニ ロチャシハ ロドシテ ロテゴヨ
ロフゴタ

ナニガテ ナサイゴ ナヨイチャ ナゴニサ ナロニタ ナナサイ
ナハサハ
ナクサフ ナタシロ ナブシド ナチャゴヨ ナドゴブ ナテロニ
ナフロク

ハニイレ ハサイハ ハヨニレ ハゴニハ ハロサレ ハナサハ
ハハシレ
ハクシハ ハタゴレ ハブゴハ ハチャロレ ハドロハ ハテナレ
ハフナハ

クニイニ クサイブ クヨニヨ クゴニド クロサロ クナサフ
クハシハ
ククゴイ クタゴタ クブロサ クチャロチャ クドナゴ クテナテ
クフハナ

タニイヨ タサイテ タヨニハ タゴサニ タロサチャ タナシロ
タハゴレ
タクゴタ タタロヨ タブロテ タチャナハ タドハニ タテハチャ
タフクロ

ブニイロ ブサニイ ブヨニチャ ブゴサナ ブロシニ ブナシド
ブハゴハ
ブクロサ ブタロテ ブブナク ブチャハヨ ブドハフ ブテクタ
ブフタゴ

チャニイハ チャサニヨ チャヨサレ チャゴサチャ チャロシハ
チャナゴヨ チャハロレ
チャクロチャ チャタナハ チャブハヨ チャチャクレ チャドクチャ
チャテタハ チャフブヨ

ドニイタ ドサニナ ドヨサヨ ドゴシイ ドロシテ ドナゴブ
ドハロハ
ドクナゴ ドタハニ ドブハフ ドチャクチャ ドドタク ドテブロ
ドフチャサ

テニイチャ テサニタ テヨサハ テゴシロ テロゴヨ テナロニ
テハナレ
テクナテ テタハチャ テブクタ テチャタハ テドブロ テテチャヨ
テフドニ

フニイテ フサニド フヨサチャ フゴシブ フロゴタ フナロク
フハナハ
フクハナ フタクロ フブタゴ フチャブヨ フドチャサ フテドニ
フフテイ

この方のプログラムは, 以下の通り.

(define kana0 '
("レ" "イ" "ニ" "サ" "ヨ" "ゴ" "ロ" "ナ"
"ハ" "ク" "タ" "ブ" "チャ" "ド" "テ" "フ"))
(define kana1 '
("ガ" "イ" "ニ" "サ" "シ" "ゴ" "ロ" "ナ"
"ハ" "ク" "タ" "ブ" "チャ" "ド" "テ" "フ"))
(define (foo n)
(display (list-ref kana1 (quotient n 16)))
(display (list-ref kana0 (modulo n 16))))
(define (bar n)
(display (list-ref kana0 n)))

(for-each (lambda (a)
(newline) (newline)
(for-each (lambda (b)
(bar a) (bar b) (foo (* a b)) (display " "))
(a2b 2 9))
(newline)
(for-each (lambda (b)
(bar a) (bar b) (foo (* a b)) (display " "))
(a2b 9 16)))
(a2b 2 16))

1 件のコメント:

正人 さんのコメント...

和田先生、
通研(電気通信研究所)ですが、正式な英語名称は、Electorical Communication Laboratories です。
当時、4通研ありましたので地名をつけて呼ぶ場合は、Laboratory になります。
ちなみに私は1977年入所組みです。所属は、Yokosuka Electorical Communication Laboratory でした。
和田先生も良くご存知の高島さんがデータ通信部の部長で、新井さんがデータ通信方式研究室室長でした。