http://www.hatena.ne.jp/1131187666#
人力検索はてな - お知恵を貸してください。ASP (Active Server Pages)にて、データベース上にある問題をシャッフルして出そうと思っています。Randomizeだと同じ問題が2度でてしまうと思う..
URLはダミーです。
考え方として参考になればと思います。
出題した問題にはフラグを立てて再度出題に出たときは読み飛ばしてはいかがでしょうか?
フラグはIPアドレス等にすれば他の方が見に来られても「同一ユーザではない」と判断出来ると思います。
検討違いならすみません。
http://www.site-cooler.com/tips/asp_random.htm
[ASP] 乱数を生成する
ASPの言語は何をお使いでしょうか?
ほとんどの場合VBか、.NETならVB.NETかC#.NETをお使いだと思いますが、いずれにしてもまず乱数の初期化を行っていますでしょうか?Datetime.Now なんかで初期化するのが常套手段です。
DBから取ってくる際に・・・なら、例えばまずレコード数を取得しておいて、0<x and x<レコードカウント の値を乱数で取得、なんらかの固定値でORDER BYしたものからRANK(x)でとってやるとか色々方法はありそうです。
ありがとうございました。「残りの問題数」でランダム化をするんですね。それをRANKで取ってくるんですね。助かりました。
ASPについてはまったく知りませんが、m個の要素からn個をランダムに抜き出すアルゴリズムを示します。
1) r=1..m に対して、a[r]=r という配列をつくります。
2) 十分大きい回数 i (およそmの2倍以上)だけ、1..mのあいだの2個の乱数 x, yを発生させ、a[x]とa[y]の値を入れ替えます
( tmp=a[x] ; a[x]=a[y] ; a[y]=tmp )
3) a[1] .. a[n] を取り出し、問題番号とします。
図説:
(1) a=[1,2,3,4,5,6,7,8]
(2) a=[5,3,6,1,8,7,2,4]
(3) a=[5,3,6,1,8]
ありがとうございました。たすかりました。
http://www.hatena.ne.jp/1131187666
人力検索はてな - お知恵を貸してください。ASP (Active Server Pages)にて、データベース上にある問題をシャッフルして出そうと思っています。Randomizeだと同じ問題が2度でてしまうと思う..
URLはダミーです
問題の順序をあらわすフィールドを追加し、処理の最初(最初に問題を出す時になるでしょうか)にそれをASPでシャッフルしてはどうでしょう。
配列に問題のindexをいれてある程度の回数SWAPしたら適度に混ざると思います。
ありがとうございました。
ありがとうございました。できれば「出題済み」のフラグをDBに書き込まないようにしたいとは思っていたのですが(回答者が増えるとDBが重くなるので。)ただし、この方法も一案ですね。