create every day - 福野泰介の一日一創

2進数とプログラミングで解く点字

2017/07/27 23:55:00
#IchigoJam #KidsIT 

身の回りに潜む2進数。
エレベーターの階数の隣、駅、公演で見かける点字をプログラミングしてみましょう。
点字 - Wikipedia

6つの点が一塊になっている点字。「⠼」で始まるのは数。
4桁の数を画面に点字で表示するプログラムをつくってみます。


まずは点字で使うキャラクターをIchigoJam文字の中から探します。

FOR I=0 TO 31:?224+I;CHR$(224+I);" ";:NEXT


232が穴なし、232を穴ありとするとちょうど良さそうです。

6つの穴があるかないかは6桁の2進数で表せます。
* 2進数について「じぶんだけのキャラをつくる - はじめてのプログラミング」「指二進数

左上を32の桁、一つ右が16の桁、順にいって右下が1の桁としました。
変数Mに表示したい点字をいれて、座標X、Yに表示するプログラム。

200 FOR I=0 TO 5 210 LC X+I%2,Y+I/2 220 F=M&(32>>I)>0 230 ?CHR$(232+F); 240 NEXT

32の桁から順に穴がある(F=1)か、ない(F=0)かで上から順に表示します。

続く点字が数であることを示す数符「⠼」に続けて「⠚⠁⠃⠉⠙⠑⠋⠛⠓⠊」で0〜9を表します。
上位4bitに収まっているので、それぞれ10進数で、表すことにします。

LET[0],7,8,10,12,13,9,14,15,11,6

例えば、5を表示したいときは、次のプログラムで5の点字が表示されます!

M=[5]<<2:RUN

これらをまとめた、4桁の数を点字にするプログラムがこちら

10 CLS:LC 8,3:?"TENJI NUM" 20 N=1234:X=8:Y=6:GSB 100 30 N=5678:X=8:Y=12:GSB 100 40 N=9000:X=8:Y=18:GSB 100 50 CONT 100 LET[0],7,8,10,12,13,9,14,15,11,6 110 M=23:GSB200:L=1000 120 X=X+3:M=N/L%10:LC X,Y-1:?M 130 M=[M]<<2:GSB200 140 L=L/10:IF L=0 RTN 150 GOTO 120 200 FOR I=0 TO 5 210 LC X+I%2,Y+I/2 220 F=M&(32>>I)>0 230 ?CHR$(232+F) 240 NEXT 250 RTN

カナやアルファベットに対応してゲームにしたり、点字解読プログラムを作ってみたりしてみましょう!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / high-res profile image