« 「盗み見できるカメラ」をメーカー別に数えてみた | メイン | ズンドコキヨシ with Excel VBA »

ズンドコキヨシ with 秀丸マクロ

Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから
「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた
そこで、秀丸マクロで作ってみた。
秀丸マクロには、配列がないため文字列の連結で対応した。
また、浮動小数点版の秀丸でないと乱数が使えない。
Windowsが起動してからの経過時間を取得するtickcountという、一見乱数につかえそうなものがあるが、単位がミリ秒であるため、ループ内で使用すると同じ値が連続して帰ってきてしまう。
今回のような用途では、擬似乱数生成器を自分で実装する必要がある。
ここでは、線形合同法を用いた。
また、実装した乱数生成器は偶数と奇数を交互に返すため、このまま利用すると『ズンドコ』を延々に繰り返してしまう。
これを避けるために、10の位を判定に利用している。
$zundoko = "";
#rand = tickcount % 256;
while($zundoko != "ズンズンズンズンドコ") {
    #rand = (129 * #rand + 83) % 256;
    if ((#rand / 10) % 2 == 0) {
        $zd = "ズン";
    } else {
        $zd = "ドコ";
    }
    insert $zd;
    $zundoko = $zundoko + $zd;
    $zundoko = rightstr($zundoko, 20);
}
insert "キ・ヨ・シ!";
秀丸マクロ実行のたびに『ズン』もしくは『ドコ』の出力を一度しか行わないのであれば、乱数代わりにtickcountを利用できる。
ここでは配列代わりに出力済みのテキストを使い、より簡潔に記述している。
if (tickcount % 2 == 0) {
    insert "ズン";
} else {
    insert "ドコ";
}
$str = gettext(x - 20, y, x, y);
if ($str == "ズンズンズンズンドコ") {
    insert "キ・ヨ・シ!";
}
後者のマクロは、秀丸のマクロ登録でこのマクロをキーに割り当てると、『ズン・ズンズン・ズンドコ』のリズムでキーを押しながらマクロを実行できるので、ある意味気持ちいい。
複数人で誰が『キ・ヨ・シ!』を出すのかという『ズンドコゲーム』も可能だ。
成功確率も1/32のためそれなりにエキサイトするのではないか。
関連リンク

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google

タグ クラウド