CGIでビンゴゲーム(biglobeの「ただのビンゴ」みたいなやつ)を作りたいのですが、カードの生成方法で悩んでいます。カードの番号の並びが、だぶらないように、登録者へ配布(ページへ表示)するには、どうしたらよいでしょうか?
CGIで生成したビンゴカードの数字の並びが、すでに配布済みのカードとだぶっていないかどうか、一から調べると、登録者が多い場合、処理が重くなってしまいます。
何か効率のいい方法がありましたら、教えてください。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

この問題、一般人には厳しいですね。


考え方としては、「あらかじめカードを作成しておき、それを一枚ずつ出す」というので正解だと思います。

で、カードの重複しない作成ですが、ビンゴカードが5×5で真中がフリーの24の数字とします(本当は1行目は1~20までの数字とか決まりがあるんだと思うけど、よく知らないので無視します)。
○99の数字から24個を抽出
○24個をランダムに並べる(順列)
という手続きだと思います。

順列を作るプログラムは参考URLを参照していただくとして、問題は組合せですね。ちょっとサンプルが発見できませんでした。
ちょっとアルゴリズムに詳しい人なら、簡単に書けるような気がするんですが、私には無理です。すみません。

なんかヒントになるといいのですが。

参考URL:http://www2.tech-unet.ocn.ne.jp/PerlMania2nd/per …
    • good
    • 2

 補足見ました。


 ダブりのない完全乱数を自動的に生成するのは、コンピュータが「計算機」である以上、実質不可能です。
 コンピュータに任せられないのであれば自分で作るしかありません。

 ですがある程度、でよければ、ランダムシードと呼ばれる数値をこちら側で制御してあげればOKです。
 ランダムシードはPerlでは、関数srandに渡す値のことです。関数srandは、関数randから返ってくるランダム値の値の順番を初期化します。
 ですから、以前使用したランダムシードを二度と使わないようにすれば、同じ順序のランダムがもう一度発生することはありません。
 通常は

  srand(time);

 で充分ですが、これで足りないのであればこちら側でランダムシードに渡す順序をファイルか何かに格納しておけばいいでしょう。

 なお、それでも不安だということであれば、1つ1つ比較するしかありません(チェックサム方式でよければそれも1つの手ですが)。
    • good
    • 0

 通常、重複のない複数の乱数を発生する場合は、次のようなルーチンを組みます。



 for ( $i = 0; $i < 10; $i++ ) {
retry:
  $table[$i] = int(rand(100));
  for ( $j = 0; $j < $i; $j++ ) {
   if ( $table[$i] == $table[$j] ) {
    goto retry;
   }
  }
 }

 こうすれば、配列変数@table[1..10]に重複のない0~99の数字を入れることができます。
 また、CGIの場合、この数字を保存したり他の利用者と共有するにはファイルを使います。

 その昔、コンピュータがまだ8ビットだった頃からこの手法を使っていましたが、これで重くなったという話は聞いたことがありません(^_^;

 ですからこの方法で特に問題ないと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
今回、質問しているのは、番号の重複というより、番号の並びの重複を避ける方法が知りたいのです。(質問がわかりづらくてすみませんでした。)
乱数を利用して、番号の並びを変えても、必ず並びが重複しない!とは言い切れませんし…。
なにか良い方法がありましたら、よろしくお願いいたします。

お礼日時:2001/01/15 11:00

種を与えて乱数使えばよいのでは?


それなら他の人とだぶらないでしょう。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。
乱数を利用して、番号の並びを変えても、同じ並びのカードができないとは言い切れないですし…。(やっぱり、多少のだぶりは仕方ないのかな?)
なにか良い方法(アルゴリズム)がありましたらよろしくお願いします。

お礼日時:2001/01/15 10:45

作り置きしてあるカードをダブらないように配付するのは別に負荷なんかかからないように思うのですが、どんなもんでしょう?

    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。
確かにあらかじめカードを作っておけば、番号の並びがだぶらないカードを配布する事はできるのですが、その肝心の「番号の並びがだぶらないカード」を作る方法がよくわからないので、困っています…。
乱数を利用して、番号の並びを変えても、同じ並びのカードができないとは言い切れないですし…。(やっぱり、多少のだぶりは仕方ないのかな?)
なにか良い方法(アルゴリズム)がありましたらよろしくお願いします。

お礼日時:2001/01/15 10:46

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q制作したCGIをウマく宣伝するにはorオススメのCGI配布サイト

友人が以前、なかなかグッドなCGIを制作しました。2つあるのですが、1つはシェアウェアで、もう一つはフリーです。これらを、宣伝して広く皆に作ってもらいたいと願っていますが、どのように広めていったらいいでしょうか?
いくつかのCGI配布サイトやHP素材サイトに登録したのですが、どこも死んでいてかなり長い間放置されて反映してないようです。
手っ取り早くとは言いませんが、上手な宣伝の仕方、もしくは効果的な配布サイトご存知の方がいましたら、教えてください。
ちなみに、ベクターには登録申請中だそうです。

Aベストアンサー

地道ですがやっぱりCGIのリンク集に登録しておくのがよいのではないでしょうか?
既に登録済みかもしれませんが、それなりに印象のよいのは

CGI-ZOO
http://www.i-say.net/cgi/

夢幻
http://www.yumemaboroshi.net/

あたりでしょうか?
後者(夢幻)はSEO対策にも力をいれていて登録しておけばgoogle等の検索エンジンからのヒットも多少は見込めそうです。

Qbiglobe cgi

私は プロバイダーがBIGLOBE で ホームページビルダーで
ささやかなホームページによる通販をすでに数年経営しています。
最近 cgi の知識をかじり始めているのですが

 「 cgi のファイルを biglobeサーバー内において
   biglobeから 呼び出さないと使えない 」
という回答までは 聞きましたが

 残念ながら この後半の言葉の意味がわかりません。どうすれば 動くということなのでしょうか??
 よろしくお願いします。

Aベストアンサー

これだけですとわかりにくい説明ですよね。推測になりますが…。

ホームページを開設しているページがBIGLOBEで無い場合
いきなりそのページからCGIへのリンクをしても見ることができない

という意味じゃないかなと思いました。(そういうサーバはよくありますし)
http://xxx.yyy.zzz/aaa.htmlから
http://www**.biglobe.ne.jp/~ホームページアカウント/xxxxx.cgiへと
いきなりCGIへリンクしても駄目という意味なのでは?

ワンクッションおいてhttp://xxx.yyy.zzz/aaa.htmlから
http://www**.biglobe.ne.jp/~ホームページアカウント/index.htmlへリンクし
http://www**.biglobe.ne.jp/~ホームページアカウント/xxxxx.cgiだと可能だとか。自信はありませんが。

QMK_GIFのCGI配布先

現在「MK_GIF」の掲示板をレンタルしています。
顔絵が表示される掲示板です!!
今度レンタルではなく、CGIを直接、設置しようと考えているのですが、
元のCGIの配布先がわかりません。検索して調べてもわかりませんでした。
この掲示板を改造して配布してるサイトでもいいです。どなたがわかるかた教えてください!!

Aベストアンサー

残念ながらma-cha-さんのご希望は叶いそうにありません。

まず、オリジナルを作成、配布していたテクノウィン商会のサイトは閉鎖されているようです。
http://www2a.biglobe.ne.jp/~yama/
また、CGI 利用規定に「改造の有無にかかわらず、ソフトウェアの販売、再配布、無断利用によるレンタルはしてはならない。」などとありますので、第三者からの入手の道も断たれています。

QBIGLOBEのCGI設置について(www1*サーバ)

独自ドメインを持つ、法人サイトを制作しているのですが、
ビッグローブでの、CGI設置に手こづっています。

質問なのですが、

CGIを設置するディレクトリー名に条件はあるのでしょうか?

ディレクトリー内に配置するファイルの種類には制限があるのでしょうか?

CGIを呼び出す際のアドレスには特殊なルールがあるのでしょうか?

parlのパスは #!/usr/local/bin/perl を利用していますが間違っているのでしょうか。

以上、当方で思い当たる問題点をあげてみたのですが、どこが問題なのか困っています。

正規サポートよりもこちらの方が回答が適切で早いと思い質問させていただきました。
よろしくお願いします。

Aベストアンサー

BIGLOBEでは、自作CGIの使用が出来ないようです。
(参考URLの「制限事項」参照)

ですので、他にサーバを借りて設置するしかないと思います。
商用には余り明るくないので、申し訳ないですがどのサーバが良いか、までは回答することが出来ません。

参考URL:http://office.biglobe.ne.jp/service/office/homepage/spec.html

Q会員登録&登録データ検索閲覧CGIを作成するには?

ホームページ中級者を目指し、そろそろCGIとやらに挑戦してみたくなりました。特に会員登録してもらったデータを色々な条件で検索して閲覧できるようなものを、無料CGIを設置するのではなく自作してみたいです。どういったホームページ又は書籍が参考になるか教えて下さい。よろしくお願いします。

Aベストアンサー

これが素晴らしい、と言い切れる書籍は存在しませんから、
何冊か手元に必要になります。


#最終的に手元にほしい本

定番ですが、ラクダ本はあった方がいいでしょう。
一読すれば理解が深まります。

プログラミングPerl
http://www.oreilly.co.jp/BOOK/pperl3v1/

その他オライリー関連の本では、
「クックブック」も定番です。


#初心者/中級者向け

Perl&CGI言語リファレンスblackbook

この本は私が個人的に気に入っている本です。
有名だというわけではありません。

ラクダ本を読むレベルになれば物足りなく感じますが、
全般的にはいい本だと思います。


10日でおぼえる Perl /CGI入門教室

CGI作成の初心者向けの本としては
比較的良くまとまった本だと思います。

ただし、文体にかなり好き嫌いがわかれると思います。


Perlという言語はソースコードの記述の自由度がかなり高いですから、
逆にそれが災いして読みにくいコードでも許容されてしまうことが多々あります。

本によって記述はかなり違いますから、
それが自分にあうかどうか、
それがいいソースコードなのかどうかは、
あくまで自分で判断していくより他ありません。

結果として自分で気に入ったを探していく必要があります。


#use strict;
#さえ使わないソースコードのなんて多いこと・・。

これが素晴らしい、と言い切れる書籍は存在しませんから、
何冊か手元に必要になります。


#最終的に手元にほしい本

定番ですが、ラクダ本はあった方がいいでしょう。
一読すれば理解が深まります。

プログラミングPerl
http://www.oreilly.co.jp/BOOK/pperl3v1/

その他オライリー関連の本では、
「クックブック」も定番です。


#初心者/中級者向け

Perl&CGI言語リファレンスblackbook

この本は私が個人的に気に入っている本です。
有名だというわけではありません。

ラクダ本を読...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報