クイズゲームの問題テーブル(完成)
まだできない - 永字八法の続き。
http://www.eiji8pou.net/download/lcgs.zipが完成品です。
単純実行
ただ単に実行すると、決められたMの値に対してAとBを自動設定して、一週分の乱数を作成してcsvファイルに書き出します。
Mの値を変更するには、00.txtを開いて、7行目
mov %10,875
数値変数%10の値を変更してください。
組み込んで使う場合
51.txtと76.txtが肝です。
numaliasは全て%0をインクリメントしながら使っています。
76.txtは実行されないところに置いてください。
lcgs_setM(引数一つ)
線形合同法のMの値、つまり乱数の幅を指定します。乱数の幅が0からこの値-1までになります。AとBをランダムに設定します。
lcgs_set_start(引数一つ)
初期値を設定します。何も指定しないと0になり、次に発生させる乱数がBと同じになります。
lcgs_get_next(引数一つ)
結果を受け取る数値変数を引数に取ります。現在のA,B,Mを使い、次の数値を計算して返します。
これを実装するために必要だったその他の関数
使ってないのも含みますが……。
- スタック系
- push:数値変数プッシュ
- push2:文字列変数プッシュ
- pop:数値変数ポップ
- pop2:文字列変数ポップ
- スワップ系
- 数学系
- div_mod:数値Aを数値Bで割った結果と余りの両方を返す。
- pow:べき乗。AのB乗を返す。
- shuffle:配列変数とその長さを与えると、配列変数をランダムに並べなおす。
- euclidean:二つの数値をユークリッドの互除法で料理し最大公約数を返す。
- sqrt:平方根を求める。端数切捨て
- sqrt2:平方根を求める。100倍した数値
- 文字列系
- add_num:文字列に数値を文字列化した後で加える。
- reverse:文字列を前後逆順にする(半角のみ)
- chop:与えられた文字列変数の最後の文字を切り落とす。
- 進数系
- num2decimal:数値をn進数に変換して文字列にして返す。
- decimal2num:文字列をn進数に解釈して数値にして返す。
- num2digit:数値を0-9A-Zの文字列に変換する。
- digit2num:文字列0-0A-Zを対応する数値に変換する。
- 素数系
- 素因数分解系
- factorization:数値を素因数分解して内部形式の文字列にする。
- defactorization:内部形式の素因数表記を数値に変換する。
- 時間系
感想
数学の式でさらさらっと簡単に書けることは、エレガントかも知れないが、決して計算しやすいことを意味しない。改めてそう思った次第。