2013年04月01日

「N6XBasicCheckerFlag」のネタばらし

「N6XBasicCheckerFlag」はいかがだったでしょうか?
もうエイプリルフールも終わりだし、まさかダウンロードした上にホントにプログラムなんか読み込ませたりして、あまつさえメッセージをコンプしてしまうような変態暇人はいないと思うので、ここでネタばらしをしておきたいと思います。

どのメッセージを出すかを決定する要因は、基本的には使っている式とステートメントの使用頻度です。
N6XBasicChecker構文解析ライブラリspiritには、予め定義した構文ルールに入力テキストがヒットした場合に実行する処理を記述することができる、セマンティックアクションと呼ばれる仕組みがあります。
このセマンティックアクションで、IF文、GOTO文、論理式など、使用頻度とプログラミングスキルの相関が高そうな文の使われた回数をカウントしています。
GOTO文を例に取ると、

//GOTO文
//PC-6000Techknowによると、「g o t o」でも通るため、トークンを分ける
StringRule st_goto
= L("g") >> L("o") >> L("t") >> L("o") >
linenumber[phx::bind(&ParserStatus::registerReferredLineNumber, ref(status), _1)]
[ref(status.countGoto_)++];

最後の[ref(status.countGoto_)++]がセマンティックアクションです。
「GOTO(行番号)」という字句にヒットした際に、statusという構文解析の状態を管理しているオブジェクト中のcountGoto_というメンバ変数をインクリメントすることでGOTO文の数をカウントしています。

それでは全メッセージとその出現条件を見て行きましょう。ぶっちゃけコード書くよりコメントを考えるほうが大変でしたorz

┏□■C■H■E■C■K■E■R■□■□■□■□■┓
┃■□■□■□■□■□■□■□■F■L■A■G■□┃
┃編:論理式が多用されていますね。        ┃
┃Dr.D:うむ、うまく使えば処理も速くなるし、 ┃
┃リストも短くなる。だからといってゲームが面白く ┃
┃なるとは限らんのだが。             ┃
┃つぐ美:もう、Dr.はいつも一言多いんだから。 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━┛
プログラムリスト中の、論理式の使用回数が3回を超えると出ます。
STICK(0)の値と論理式の組み合わせでキャラクタの移動をしているプログラムは大抵出ます。


┏□■C■H■E■C■K■E■R■□■□■□■□■┓
┃■□■□■□■□■□■□■□■F■L■A■G■□┃
┃編:ノーマルキャラクタゲームですね。      ┃
┃Dr.D:PC−6001はグラフィックが遅いので┃
┃しかたないじゃろう。しかし工夫次第で味のある  ┃
┃キャラクターを作ることができるぞ!       ┃
┃影:訓練次第で「大」でもカワイコちゃんに見えて ┃
┃くるぞ!                    ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━┛
リスト中で使われているグラフィック文字が5種を超えると出ます。
「P6はグラフィックが遅いから」というのは86年頃のDr.の口癖でこれが非常にムカツイたのでどうしても言わせたかったのです。w


┏□■C■H■E■C■K■E■R■□■□■□■□■┓
┃■□■□■□■□■□■□■□■F■L■A■G■□┃
┃Dr.D:編君!なんだねこのプログラムは!?  ┃
┃編:GOTO文が多すぎで読みにくいですね。   ┃
┃Dr.D:こういうスパゲッティプログラムは   ┃
┃フローチャートを描いて流れを見直すべきじゃ。  ┃
┃影:カレーチャーハン?             ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━┛
GOTO文の使用回数が15回を超えると出ます。
15回というしきい値は厳しいかもしれませんが、このくらいにしておかないとなかなか引っかかってくれないんですよ…。


┏□■C■H■E■C■K■E■R■□■□■□■□■┓
┃■□■□■□■□■□■□■□■F■L■A■G■□┃
┃Dr.D:IF文が多すぎじゃな。        ┃
┃編:見通しが悪いし、打ち込みも面倒ですね。   ┃
┃Dr.D:こういうプログラムはON〜GOTOや ┃
┃論理式を使えないか検討すべきじゃろう。     ┃
┃編:わかりましたか?              ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━┛
同じく、IF文の使用回数が15回を超えると出ます。


┏□■C■H■E■C■K■E■R■□■□■□■□■┓
┃■□■□■□■□■□■□■□■F■L■A■G■□┃
┃Dr.D:これは長い、長すぎるっ・・!     ┃
┃編:これではちょっと本誌には載せられませんね。 ┃
┃機会があればプログラム大全集2に載るかもですが。┃
┃影:さ、仕事はそれくらいにしてラーメンライスでも┃
┃食べに行きましょう!              ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━┛
ステップ数が250を超えると出ます。
PiOの掲載作品を読み込ませるとあっさり出ます。


┏□■C■H■E■C■K■E■R■□■□■□■□■┓
┃■□■□■□■□■□■□■□■F■L■A■G■□┃
┃編:・・・                   ┃
┃Dr.D:取り立てて特徴のないプログラムじゃのう┃
┃編君、最近P6の投稿は元気がないんじゃないかね?┃
┃編:このままではランダムコーナー行きですよ!  ┃
┃つぐ美:みなさんの投稿を待ってます!      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━┛
上記のいずれにも当てはまらなかった場合に出ます。
これを見てしまったキミはP6をランダムコーナー行きから救うために早くプログラムを完成させて投稿するんだ!(どこに?)
ちなみに複数の条件にヒットした場合、メッセージはその中からランダムで選ばれます。

最後に、みなさんの目標である、「明日のSTAR PROGRAMMER」の勇姿を紹介してお別れです。
それではどうぞ!
STARPROGRAMMER.jpg
posted by eighttails at 22:49| Comment(0) | N6XBasicChecker | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: