お知恵を貸してください。ASP (Active Server Pages)にて、データベース上にある問題をシャッフルして出そうと思っています。Randomizeだと同じ問題が2度でてしまうと思うのですが、何かよい方法はありますでしょうか。PHPにはshaffleがあると思いますが、aspではうまくできません。ご教示ください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:spyglass No.1

回答回数455ベストアンサー獲得回数29

ポイント160pt

http://www.hatena.ne.jp/1131187666#

人力検索はてな - お知恵を貸してください。ASP (Active Server Pages)にて、データベース上にある問題をシャッフルして出そうと思っています。Randomizeだと同じ問題が2度でてしまうと思う..

URLはダミーです。


考え方として参考になればと思います。

出題した問題にはフラグを立てて再度出題に出たときは読み飛ばしてはいかがでしょうか?

フラグはIPアドレス等にすれば他の方が見に来られても「同一ユーザではない」と判断出来ると思います。


検討違いならすみません。

id:qwu10076

ありがとうございました。できれば「出題済み」のフラグをDBに書き込まないようにしたいとは思っていたのですが(回答者が増えるとDBが重くなるので。)ただし、この方法も一案ですね。

2005/11/07 18:04:20
id:tailliar No.2

回答回数109ベストアンサー獲得回数0

ポイント160pt

ASPの言語は何をお使いでしょうか?

ほとんどの場合VBか、.NETならVB.NETかC#.NETをお使いだと思いますが、いずれにしてもまず乱数の初期化を行っていますでしょうか?Datetime.Now なんかで初期化するのが常套手段です。

DBから取ってくる際に・・・なら、例えばまずレコード数を取得しておいて、0<x and x<レコードカウント の値を乱数で取得、なんらかの固定値でORDER BYしたものからRANK(x)でとってやるとか色々方法はありそうです。

id:qwu10076

ありがとうございました。「残りの問題数」でランダム化をするんですね。それをRANKで取ってくるんですね。助かりました。

2005/11/07 18:05:51
id:masshie No.3

回答回数57ベストアンサー獲得回数1

ポイント160pt

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]

id:qwu10076

ありがとうございました。たすかりました。

2005/11/07 18:06:13
id:B-Trumpet No.4

回答回数1ベストアンサー獲得回数0

ポイント160pt

http://www.hatena.ne.jp/1131187666

人力検索はてな - お知恵を貸してください。ASP (Active Server Pages)にて、データベース上にある問題をシャッフルして出そうと思っています。Randomizeだと同じ問題が2度でてしまうと思う..

URLはダミーです


問題の順序をあらわすフィールドを追加し、処理の最初(最初に問題を出す時になるでしょうか)にそれをASPでシャッフルしてはどうでしょう。

配列に問題のindexをいれてある程度の回数SWAPしたら適度に混ざると思います。

id:qwu10076

ありがとうございました。

2005/11/09 00:15:17

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません