※個人的でくだらない言い訳です、読み飛ばしていただいてかまいません。
今まで、.comエミュレータやら動物将棋やらのページを立ち上げては途中で断念してきました。(動物将棋については開発言語をHSPに変更して今でも作ってますが…)
そして、懲りもせずに今度はbasicインタプリタのページを作りました。
しかし、今回は今までとはわけが違います。
私はとある公立高校の理数課に通っていますが、理数課では夏から秋にかけて、グループごとに研究をすることになっています。
私は数学のグループですが、情報数学分野として、マインスイーパについて研究することになりました。(詳しい研究内容は省きますが、本気です。)
ただ、研究の内容上コンピュータに大量のマインスイーパのステージをプレイさせる必要があり、どうしてもプログラミングが必要になったのですが、あいにく私しかプログラミングが出来ません。
もちろんグループ単位での研究なので私一人が暴走するわけにもいかず、教科書にも載っているbasicをみんなに教え込む事にしました。
ただし、教科書には行番号が必要な時代のかなり古いタイプのbasicが載っており、そんなbasicのインタプリタを私は知らないので、このさい自分で作ってしまおうと思います。
結論から言えば、私がこれを投げ出すと、グループで研究が出来ない事になるので、きっと今回は意地でも完成させます。
basicインタプリタそのものを書かなくとも、桁数の大きい計算が可能な言語へのトランスレータを書けばいいじゃないか、といった手抜き策を思い付き、色々と調べ、試してみましたがなかなか難しいのでやはりインタプリタを書くという当初の方針に戻ってきました。
現在は「当面の目標」として挙げていた「100 END」が実行できる、ぐらいの機能しかありません。
ただ、実験の協力(指導?)に当たっていただく大学への中間報告が今月中なので、本腰を入れていきたいと思います。
いくらなんでも「実験をするための開発環境すらほとんど整っていません」というわけにもいかないので…。
高校に一人でもプログラミングが出来る先生がいたらなぁ、と思う今日この頃です。
構想を練りつつふと困ったことに気がつきました。
たとえば、縦10マス、横10マスの計100マスのマップに10個の爆弾を配置するとします。
点対称や線対称の事を考えないとすると、そのパターンは、(100*99*98*97*96*95*94*93*92*91)/(10*9*8*7*6*5*4*3*2*1)=17310309456440通りにもなります。
つまり、これから作るbasicはかなり大きな数を扱えないといけないようです。
さらに、よくよく教科書を読んでみると、basicは小数を標準で扱え、割り算の答えは標準で小数で返ってくるようです。
当初は軽い気持ちで作ってしまえ、と思いましたが、案外大変そうです。
結局、配列の複数の要素で一つの変数を表すことに決めました。
つまり、変数を3桁づつに区切り、それぞれを順番に配列に入れようと思います。
変数の計算は、筆算の要領で何とか切り抜けられそうです。
(ただ、割り算だけはかなりめんどくさい事になりそうです。)
小数点以下についても、この仕様の影響で3桁までしか扱えない事にします。
今回の実験では、自作したbasicの上でみんなで作った実験用プログラムを動かして結果を得るという計画なのですが、実験に当たって自作したプログラムの確実性はどうやって証明するのでしょう?
当然、出力されたデータは信じるしかないと思いますが、プログラムにバグがあって出力されたデータがおかしかった場合、研究そのものの意味が無くなるような気がするのですが…。
高校生の遊び程度のプログラムならそんなことは一切気にしませんが、どうやら今回は研究の最期にちょっとした論文のようなものを協力してもらう大学に提出しないといけないようです。
決して大学生が書くような論文ではありませんが、一般的に研究で用いたプログラムにバグが無い事をどのようにして証明しているのか、どなたかご存知でしたら是非お教えください。
一般用コメント一覧