【開催】囚人のジレンマ大会
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGC言語で「囚人」は関数として作ってください。
1000回取引をし、その合計点数が高い囚人が勝ちとなります。
点数表は以下の通りです。
協調同士 3点
裏切り同士 1 点
協調裏切り 5/0点。
最低得点は1000点。最高得点は5000点になります。
関数は戻り値で 0:協調 か 1:裏切り を返します。
以前の取引は result 配列で参照できます。
メイン関数と囚人関数の例を示します。
#include <stdio.h>
int round;
char result_a[1000], result_b[1000];
int prisoner_a(void) /* 最強しっぺ返し君 */
{
if ( round == 1 ) return 0;
if ( result_b[ round - 1 ] == 0 ) return 1; else return 0;
}
int prisoner_b(void) /* 人間不信裏切り君 */
{
return 1;
}
int main(int argc, char *argv[])
{
int a=0,b=0,pa=0,pb=0;
for ( round = 1; round <= 1000; round ++ ) {
a = prisoner_a();
b = prisoner_b();
if ( ( a == 0 ) && ( b ==0 ) ) { pa+=3;pb+=3; } /* 協調:協調 */
if ( ( a == 1 ) && ( b ==0 ) ) { pa+=5;pb+=0; } /* 裏切り:協調 */
if ( ( a == 0 ) && ( b ==1 ) ) { pa+=0;pb+=5; } /* 協調:裏切り */
if ( ( a == 1 ) && ( b ==1 ) ) { pa+=1;pb+=1; } /* 裏切り:裏切り */
result_a[round] = a;
result_b[round] = b;
printf( "Round %d A:%d / B:%d\n",round,a,b);
}
printf("A:%d / B:%d\n\n",pa,pb);
}
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG最強のアルゴリズムが決まってくるような気がするが。
合計点が「対戦相手より高い」事を「勝ち」とするなら
"人間不信裏切り君" が最強だといえるだろうし、
複数の参加者の総当たり戦の合計点によるものとし、
なおかつその参加者に "協調" を行うものがいることが
予想されれば、"最強しっぺ返し君" が最強(?)という事に
なるのでは。
0008名古屋在住・中日ファン
NGNG>最低得点は1000点。最高得点は5000点になります。
最低得点は0点でないの?
0009デフォルトの名無しさん
NGNG複数の参加者の総当たり戦の合計点(7 さんが言ってるやつ)を競うなら
このあたりがそこそこ強かったっす。
勝手に opposit て int 型配列を使ってますが
つまり相手側の履歴です。
int prisoner(){
static int hand = 0; /* 初期は“協調” */
/* 過去,一度でも裏切られたら二度と協調しない */
if (round > 1 && opposit[round - 1])
hand = 1;
return hand;
}
0010デフォルトの名無しさん
NGNGそいつがキングメーカーになってくれてたって話なんだけど
http://darwin.esys.tsukuba.ac.jp/fightsoft/IPD/gameprog-ipd.html
具体的なコード知ってる人いませんかあ?
# でもどうしてこの論文が今更ネット上で読めるですか(泣
#「ゲームプログラミング」買っちゃったっすよ。安くないのに・・
0011デフォルトの名無しさん
NGNG「裏切りは許さない」ってタイプですね。
この戦略は「ゴルゴ13アルゴリズム」と命名させてもらいます。
0012デフォルトの名無しさん
NGNG総当たり戦をやります。
>>8 間違えてました。。。
対しっぺ返し対策は練っておいたほうがいいでしょうね。
int shippe = 0;
if ( round == 1 ) return 1; /* 様子見 */
if ( round == 2 ) return 1;
if ( round == 3 ) return 0;
if ( round == 4 ) return 1;
if ( round == 5 ) return 0;
if ( round == 6 ) return 0;
if ( result_b[1] == 0 )
if ( result_b[2] == 0 )
if ( result_b[3] == 0 )
if ( result_b[4] == 1 )
if ( result_b[5] == 0 )
if ( result_b[6] == 1 )
shippe = 1; /* 相手はしっぺ返しだ! */
if ( shippe == 1 ) return 1;
0013デフォルトの名無しさん
NGNG細かい事だが、もうちょいデータ構造とか
関数の形式をよく考えたほうが良かったのでは?
これだけでは皆、自分勝手なコードを書いてくると思われ。
0014デフォルトの名無しさん
NGNG/*
if ( round == 1 ) return 1; /* 様子見 */
if ( round == 2 ) return 1;
if ( round == 3 ) return 0;
if ( round == 4 ) return 1;
if ( round == 5 ) return 0;
if ( round == 6 ) return 0;
if ( result_b[1] == 0 )
if ( result_b[2] == 0 )
if ( result_b[3] == 0 )
if ( result_b[4] == 1 )
if ( result_b[5] == 0 )
if ( result_b[6] == 1 )
*/
swichって知ってるか?
0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNGint p=0, q=0;
if ( ( result_a[round-1] == 0 ) && { result_b[round-1] == 0) ) p ++;
if ( ( result_a[round-1] == 1 ) && { result_b[round-1] == 0) ) q ++;
if ( p == q ) return 1;
if ( p > q ) return 0;
return ( round % 2 );
>>13 まあ重要なのは戻り値だけなので。でもさすがプログラム版。的な意見。
>>14 コンパイラががんばってくれることを期待。
>>15 勝率は50%になります。
>>16 エレクトリックサンダー並みの荒技ですね。
0018デフォルトの名無しさん
NGNG外部変数を使うプログラムを書かせるのはむちゃだぞ。
判断に必要なデータは全部引数で渡すようにしないと。
13の言うように、ちゃんと関数のインターフェイスを定義するべし。
0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNGお前ら頃し合いしてください
http://pc.2ch.net/test/read.cgi/tech/1013093589/
0021デフォルトの名無しさん
NGNGちゃんとやるならC++かなんかでクラスでアクセス制御するんでしょうけど、
面倒なので。
とりあえず囚人が集まらないと始まらないので、
ぜひご参加ください。ここにソースを書くと、
後の人がそれを見て対策してしまうので、
[email protected]
まで送ってください。スペルは恥ずかしくもミスしました。
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNG最高得点である5000点を狙えるのは人間不信裏切り君しかいません。
ただ、ここで微妙なのは、「協調:協調」で
互いに3点ずつとっていくのが現実的にありえそうな最高得点だ、
ということです。
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNGいまいちなんじゃないか、と思ったり。これでは正直者がバカを見てしまう。
ちなみに「囚人のジレンマ」の場合、最悪のケースは「協調:裏切り」
なのですけど、「裏切り:裏切り」が最悪のケースのゲームは
「チキンゲーム」と言うらしい。です。
そのばあい、より相手の出方を推測しなければなりません。
そっちのほうが面白いかなあ。
0026デフォルトの名無しさん
NGNGint round;
char* res_a;
char* res_b;
}PRISON;
char GetPrisoner(PRISON p);
0027デフォルトの名無しさん
NGNG人間不信裏切り君なら負けないわけだし、
そもそも協調するモチベーションもないし。
自分の敵と協調してどないするっていう…。
本来は敵は警察で囚人同士は敵なわけではないのでしょ?
互いに裏切ってばかりだと警察に捕まっちゃうから
囚人同士で協調する必要があるっていう。
やっぱり集団でやって、目標点数に達して無い奴は脱落、
ただし全部のケースで皆が互いに協調した場合、みんな目標点数には届かない。
もちろん互いに裏切りばかりは論外。
出来るだけ協調して点を稼ぎつつも、裏切り:協調で他の囚人を出し抜く必要もある。
そんな感じでやんないとゲームにならんでしょ。
0028デフォルトの名無しさん
NGNGアクセルロッドのやり方知らんの?
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNGもっと細かい点まで厳密に決めとかないと。
・激しくがいしゅつの、関数インタフェース
・総当たり戦の結果はどう解釈するのか
-> 各対戦で得られた得点を全て合計して順位をきめるのか
-> それとも単に対戦で勝った数できめるのか
(同じ勝ち数が複数あったらどれを優勝にするのかとか)
・エントリーした関数を主催者側が出場拒否にすることはあるのか
ま〜俺だったら最初の数回だけ特定のパターンを返して、それ以降は全て
裏切りを返す関数を作って応募する。アフォくさいから応募しないけど。
もちろん、相手がその「特定のパターン」を出してきたら以後全て協調
する関数も100種類ほど作って応募する。
(パターン認識に不適合なら完全裏切り)
とりあえず一つの区切りとして、>1は>>50位で削除依頼出して来い
0031デフォルトの名無しさん
NGNGその場合、現在の対戦順位みたいなものは発表するわけ?
0032デフォルトの名無しさん
NGNGうまくいかなくてもいいからとりあえず始めない?
対戦に必要なソース修正は1がやるんだよね。(w
前出のコレを読むと、いろいろ議論し始めるとややこしくなりそうな気が。
ていうかその議論が囚人のジレンマ化する罠。
http://darwin.esys.tsukuba.ac.jp/fightsoft/IPD/gameprog-ipd.html
0033デフォルトの名無しさん
NGNG存じ上げてない方のために書くと、戦略(囚人)は、
自分以外のすべての戦略、自分自身、そして「でたらめ君」と総当り戦を行い、
その得点の合計が高い戦略が勝ち、となります。
主催者側が囚人の「アルゴリズム」によって出場を拒否することは無しに
したいと思います。もちろんアルゴリズム以外の部分では拒否することもあると思いますけど。
0034デフォルトの名無しさん
NGNGまずは2個、僕以外の誰かが参加していただいたら、
第一回をやりたいと思います。
>>32 はい、わたくしがいたします。
0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNG僕はウィリアム・パウンドストーンのを。アクセルロッド本は持ってないです。
0037デフォルトの名無しさん
NGNG存じ上げてない方のために書くと、戦略(囚人)は、
自分以外のすべての戦略、自分自身、そして「でたらめ君」と総当り戦を行い、
その得点の合計が高い戦略が勝ち、となります。
主催者側が囚人の「アルゴリズム」によって出場を拒否することは無しに
したいと思います。もちろんアルゴリズム以外の部分では拒否することもあると思いますけど。
で、ルールは?
0038デフォルトの名無しさん
NGNGそれよりどうせ2chでやるのなら、参加者のソースを隠すのではなく、
スレに書き込まれたソースを定期的に>>1がコンパイルし、
それらの総当たりの計算をやってその結果を公表するって方法が
面白いと思うが、どうよ?
確かに後から書き込んだ奴の方が強いだろうが、それはそれで
対策を練るのが面白くなるだろうし。
0039デフォルトの名無しさん
NGNG>>38 そうですね。まずは囚人が集まらないと何も始まらないので、ぜひとも。
そのさい囚人に名前を付けてあげてください。
とりあえず僕は「ヒッキー君」を作りました。
0040デフォルトの名無しさん
NGNGちゃんとした日本語にならない?
5/0とかさぁ・・・。
0041デフォルトの名無しさん
NGNG「囚人のジレンマのコンピュータ・トーナメント」
読んでください。
0042デフォルトの名無しさん
NGNGという気持ちを押さえつつ、説明。
囚人が二人います。囚人は別々の独房に入れられていてお互い話が出来ません。
そんな状況の中で看守から「相手を裏切ったらおまえの刑を軽くしてやる」と誘われます。
ここで囚人には「裏切らない(協調)と「裏切り」の二つの選択肢があります。
お互いに「協調」、この場合互いに相手を裏切らず黙秘した場合、
刑期は二人とも2年になります。
一方が裏切り、もう一方が協調した場合、片方は釈放刑期0年、
もう片方は5年となります。
二人とも裏切った場合、刑期は二人とも4年となります。
今回の場合は点数が高いほうが良しとしてあります。
が、囚人のジレンマの説明。
で、もう一度ルールですけど、ラウンドごとに囚人関数は
「0:協調」か「1:裏切り」の戻り値を返します。
result配列によって、過去相手が出した手を参照することが出来ます。
囚人関数同士で総当たり戦を行い、
いちばん総合得点が多い関数が勝ちです。
以上。
0043デフォルトの名無しさん
NGNG協調 裏切
協調3,3 0,5
裏切5,0 1,1
が標準だ
0045デフォルトの名無しさん
NGNGもしあると状態管理にstatic 変数を使う場合に困ってしまいますが。
0046デフォルトの名無しさん
NGNG逆になぜ困るかが解りません。次スレに static を使った囚人関数
「ヒッキー君」を書きます。
0047デフォルトの名無しさん
NGNG{
static int foo = 0, bar = 0;;
if ( bar = 1 ) {
if ( result_b[round-1] = 0 ) { /* 前回協調したとき相手も協調だったら */
return 1; /* 協調 */
} else {
bar = 0;
return 1; /* じゃなければ引きこもり */
}
}
foo ++;
if ( foo >=10 ) {
foo = 0;
bar = 1;
return 0; /* 10回に1度協調する */
} else { retuen 1; } /* それ以外は引きこもり */
}
0048デフォルトの名無しさん
NGNG今・・・・・・ 大切なことは・・・・相手を信用してみせること・・・
つまり・・・・協調・・・・・!」
アルゴリズムA:「ククク・・・・・ここで、
協調だと・・・・甘い・・・甘すぎる・・・・!
人生(ばっさり後略)」
みたいな囚人のジレンマきぼんぬ。
0049デフォルトの名無しさん
NGNG> for ( round = 1; round <= 1000; round ++ ) {
> result_a[round] = a;
> result_b[round] = b;
こんなことやってるし、
自分が a なのか b なのかわかってないとコード書けないし、
>>1のコードのままだと総当たりやるの大変そうなので
適当に書き直してみました。
こんな感じに書き直して実行してください。
int prisoner_a(int round, int *result_a, int *result_b) /* 最強しっぺ返し君 */
{
if ( round == 0 ) return 0;
if ( result_b[ round - 1 ] == 0 ) return 1; else return 0;
}
int prisoner_b(int round, int *result_a, int *result_b) /* 人間不信裏切り君 */
{
return 1;
}
int hoge(int round, int *own, int *opposite)
{
if ( round == 0 ) return 0;
return (own[round-1] != opposite[round-1]) ? Cooperate : Defect;
}
int random(int round, int *own, int *opposite)
{
return rand()%2;
}
const prisoner_t prisoners[] = {prisoner_a, prisoner_b, hoge, random};
0050デフォルトの名無しさん
NGNG#include <stdlib.h>
#define n_elements(a) (sizeof a / sizeof a[0])
#define ROUND 1000
enum {Cooperate, Defect};
typedef int (*prisoner_t)(int round, int *own_result, int *opposite_result);
const prisoner_t prisoners[] = {};
const int n_prisoners = n_elements(prisoners);
int results[n_elements(prisoners)][n_elements(prisoners)];
void print_result(void);
void match(int ia, int ib)
{
int round, a, b, pa=0, pb=0;
static int result_a[1000], result_b[1000];
for ( round = 0; round < ROUND; round ++ ) {
a = prisoners[ia](round, result_a, result_b);
b = prisoners[ib](round, result_b, result_a);
if ( ( a == 0 ) && ( b ==0 ) ) { pa+=3;pb+=3; } /* 協調:協調 */
if ( ( a == 1 ) && ( b ==0 ) ) { pa+=5;pb+=0; } /* 裏切り:協調 */
if ( ( a == 0 ) && ( b ==1 ) ) { pa+=0;pb+=5; } /* 協調:裏切り */
if ( ( a == 1 ) && ( b ==1 ) ) { pa+=1;pb+=1; } /* 裏切り:裏切り */
result_a[round] = a;
result_b[round] = b;
}
results[ia][ib] = pa;
results[ib][ia] = pb;
}
int main(void)
{
int i, j;
for ( i = 0; i < n_prisoners; i++ )
for ( j = i; j < n_prisoners; j++ )
match(i, j);
print_result();
return 0;
}
0051デフォルトの名無しさん
NGNG{
int i, j, sum;
printf(" ");
for ( j = 0; j < n_prisoners; j++ )
printf("%5d" ,j);
printf(" sum\n");
for ( i = 0; i < n_prisoners; i++ ) {
sum = 0;
printf("%2d", i);
for ( j = 0; j < n_prisoners; j++ ) {
printf("%5d", results[i][j]);
sum += results[i][j];
}
printf("%6d\n", sum);
}
}
005251の半角スペースが消えたので訂正
NGNG{
int i, j, sum;
printf(" ");
for ( j = 0; j < n_prisoners; j++ )
printf("%5d" ,j);
printf(" sum\n");
for ( i = 0; i < n_prisoners; i++ ) {
sum = 0;
printf("%2d", i);
for ( j = 0; j < n_prisoners; j++ ) {
printf("%5d", results[i][j]);
sum += results[i][j];
}
printf("%6d\n", sum);
}
}
0053デフォルトの名無しさん
NGNGと思い始めていた頃でした。多謝。
0054デフォルトの名無しさん
NGNG逆では?
0055デフォルトの名無しさん
NGNGこれじゃあ「ひねくれあまのじゃく君」ですね。失敗失敗。
0056デフォルトの名無しさん
NGNGそれだと人間不信裏切り君にいっぱい点をやるバカが
いっぱいエントリーしてたら人間不信裏切り君が優勝しちゃうよね?
そんなことの無いように予選-決勝にする?
そのへんどうすんのよ?
005730
NGNGそれの対策が
『主催者側が囚人の「アルゴリズム」によって出場を拒否することは無しに
したいと思います。もちろんアルゴリズム以外の部分では拒否することもあると思いますけど。』
ただしこんなあいまいな表現では、主催者側の気分次第(ハンドルがむかつく
とか)で何ら問題のないエントリーも出場拒否される恐れもある諸刃の剣。
0058デフォルトの名無しさん
NGNGとてもよいキャラクタですね。参加者の顔ぶれによってかなり
得点が上下するし優勝する可能性もある。
ところで、最初の return はコメントと逆な気がしますが
どちらでしょう? こちらで試した範囲ではソース通りの
ほうが強いみたいです。
0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNG>>1は責任もって、OOの(以下略
0061デフォルトの名無しさん
NGNGpublic:
char *m_History;
virtual bool GetDilemma();
static int main();
}
以下実装をおながいします。
0062デフォルトの名無しさん
NGNGつかエレガントさを競う必要ないのだし
>>49-52でいいんじゃないのか?
0063デフォルトの名無しさん
NGNG知らないから聞いているんですが何か?
素人は参加しちゃいけないのね。じゃあMLでも立ち上げてやれば?
0064デフォルトの名無しさん
NGNG実際に対戦させる人間の事を考えてみれ。現状だと戦略が2つ提示されたとして、
それを対戦させる為の(>>50のmatch()みたいな)コードを1本書かなくてはならない。
1000件を総当たりさせるときの手間はどうなる事やら・・・
まあ、文句をつけるだけなら誰でも出来るって言われそうなので、一応俺も提案してみる。
int StorategyFoo/*ユニークな名前*/(
int round /* 対戦の順目 */,
const int self[] /* 自分の前回までの行動履歴(round-1個まで)*/,
const int enemy[] /* 敵の前回までの行動履歴(round-1個まで)*/ );
返り値: 0:協調 1:裏切り
*履歴は関数を呼び出す側が書き込むものとする
こんなんであれば、とりあえず不満は出ないのでは?
行動履歴の配列をグローバルで result_a とか result_b とかにすると、
関数側では自分はどちらの配列を使えばいいか判断できないからダメダメだと思うが。
0065デフォルトの名無しさん
NGNGつーか、結構有名な問題だと思うが。<囚人
その程度のことも調べられずに参加しようって方が間違い。
逆ギレするのは勝手だが、素人なりにできる事はあるだろが。
わからなかったらまず調べろ。
0066デフォルトの名無しさん
NGNG>>64 >>49-52 のプログラムがなにやってるのか理解できないのですか?!
0067デフォルトの名無しさん
NGNGとりあえず対戦環境もできたので一つ投稿します。
10, 17 で紹介されていた DOWNING を改良してみました。
名前は DW+ です。
挙動不審なところもあるけどご愛嬌ということで。
/* DOWNING 改良版 DW+ */
#define FIRST_ROUND 0
int prisoner_dwplus(int round, int *result_a, int *result_b) {
static int p,q, flag, count_d;
if ( round == FIRST_ROUND ) {
p=q=0;
flag = 0;
count_d = 0;
return 0; /* オリジナルの欠点を修正 */
}
if ( round > FIRST_ROUND ) {
if ( ( result_b[ round - 1 ] == 0 ) && ( result_a[ round - 1 ] == 0 ) ) {
p++;
} else if ( ( result_b[ round - 1 ] == 1 ) && ( result_a[ round - 1 ] == 0 ) ) {
q++;
}
}
/* 人間不信裏切り君対策 */
if ( flag ) return 1;
if ( ( round > FIRST_ROUND ) && ( round < FIRST_ROUND + 10 ) && ( result_b[ round - 1 ] == 1 ) ) {
count_d++;
if ( ( round == FIRST_ROUND + 9 ) && ( count_d > 8 ) ) flag = -1;
}
/* オリジナルの判定部 */
if ( p == q ) {
return 1;
} else if ( p > q ) {
return 0;
} else {
return round % 2;
}
}
0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNG// しっぺ返し
procedure TRevengePrisoner.Execute;
begin
Cooporate(Turn = 1);
CorD(Enemy[-1]);
end;
// 天邪鬼
procedure TPerversePrisoner;
begin
Defect(Turn = 1);
DorC(Enemy[-1]);
end;
// 寛容(1回まで)
procedure TTrelantPrisoner.Execute;
begin
Cooporate(Turn = 1);
CorD(Enemy[-1] or Enemy[-2]);
end;
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNG今回のエントリーは、
0. 最強しっぺ返し君
1. 人間不信裏切り君
2. ゴルゴ13
3. hoge
4. random
5. DOWNING 改良版 DW+
6. ヒッキー君
の7囚人でした。
0073デフォルトの名無しさん
NGNGhttp://www.geocities.co.jp//SilkRoad-Ocean/5567/prisoner2.c.txt
0074デフォルトの名無しさん
NGNG0 1 2 3 4 5 6 sum
0 3000 999 3000 2667 2498 3000 999 16163
1 1004 1000 1008 5000 3000 1020 1000 13032
2 3000 998 1000 5000 3000 1020 1000 15018
3 2667 0 0 1002 2250 8 0 5927
4 2503 500 500 2250 5000 507 500 11760
5 3000 995 995 4993 2997 3000 995 16975
6 1004 1000 1000 5000 3000 1020 1000 13024
第一回の優勝囚人関数は「DOWNING 改良版 DW+」でした。
2位 最強しっぺ返し君
3位 ゴルゴ13
でした。
最後にもう一度、>>49-52 さんに感謝。
# えーっと、この結果で間違ってないんだよな。
0075DW+
NGNG引きこもったままになるので、下のように変えたほうがいいかも
int golgo13( int round, int *result_a, int *result_b ){ /* ゴルゴ13 */
static int hand = 0; /* 初期は“協調” */
/* 初期化を追加 */
if ( round == FIRST_ROUND ) hand = 0;
/* 過去,一度でも裏切られたら二度と協調しない */
/* 初回ラウンドが0からになったので修正 */
if (round > FIRST_ROUND && result_b[round - 1])
hand = 1;
return hand;
}
0076DW+
NGNGif ( round <= FIRST_ROUND ) hand = 0;
0077DW+
NGNGint golgo13(int round, int *own, int *opposite)
{
static int hand = Cooperate;
if ( round <= FIRST_ROUND ) hand = Cooperate;
else if ( opposite[round-1] == 1 ) hand = Defect;
return hand;
}
0078デフォルトの名無しさん
NGNG1. ヒッキー君の「等価判断」式が「代入」になっている。== が = ってこと。
まあ別にこれはいいのですけど、ヒッキー君同士がたたかうと4991点とれるはずなんですけど、
とれてません。それは static を使っているからで。
ゴルゴ13とDW+もおそらく誤動作しています。
すみません、関数のほうで何とかします。してください。
0079DW+
NGNGは無視できてます。他の戦略も自己対戦の成績が3000点なら普通は問題
ないはず。
ただ今後自己対戦の時に先手と後手で手を変えるような戦略が出てくると
思うのでこの場合は最高点の5000点近く取れますから、これを認めるか
どうかをルールとして決めたほうがいいと思います。
0080デフォルトの名無しさん
NGNGこのスレそのものが囚人のジレンマだな
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG同時に指すんだから先手とか後手とかAとかBなんてナンセンス
自分と相手でコード書けるようにしとけ
0084デフォルトの名無しさん
NGNG0085DW+
NGNG厳密なルールで戦っているわけではないから指摘しただけ。
0086デフォルトの名無しさん
NGNG囚人関数のの引数は
typedef int (*prisoner_t)(int round, int *own_result, int *opposite_result, int who);
となり、最後の引数に int who を追加しました。呼び出すさいには
a = prisoners[ia](round, result_a, result_b, 0);
b = prisoners[ib](round, result_b, result_a, 1);
とするので、関数側で、例えば配列でなんとかしてください。
あと、match 関数の初回で、
prisoners[ia](0, 0, 0, 3);
prisoners[ib](0, 0, 0, 3);
と who に 3 を渡して呼び出します。これをトリガーに初期化してください。
非常に泥臭くてすみません。
0087デフォルトの名無しさん
NGNGint hikkie( int round, int *own, int *opposite, int who ) /* ヒッキー君 */
{
static int foo[2] = { 0, 0 };
if ( who == 3 ) {
foo[ 0 ] = 0;
foo[ 1 ] = 0;
return 0;
}
if ( foo[ who ] == 1 ) {
if ( opposite[ round - 1 ] == 0 ) { /* 前回協調したとき相手も協調だったら */
return 0; /* 協調 */
} else {
foo[ who ] = 0;
return 1; /* じゃなければ引きこもり */
}
}
printf( "%d\n", round % 10 );
if ( ( round % 10 ) == 0 ) {
foo[ who ] = 1;
return 0; /* 10回に1度協調する */
} else { return 1; } /* それ以外は引きこもり */
}
0088デフォルトの名無しさん
NGNG相手は0点なので。
というか、自己対戦で3000点近く取れるようにするのは必須になるでしょう。と。
# あー頭が回ってないなあ。つまらないミスばかりだ。
0089デフォルトの名無しさん
NGNG>相手は0点なので。
ふと思ったんだけどその「相手」って「自己」なわけだから
どっちの点数が採用されるの?
0090DW+
NGNG0091DW+
NGNGよく考えたらこれだとこの対策の実装は必須となり、どの戦略も5000点取るよう
になってしまいますね。相手が自分であることを判定するコストはそれほど
ないので差が出ないと思います。
自己対戦は点数の低い方にしませんか?
自己対戦で 3000点がとれないプログラムはどの道対策は必要ですし。
0092DW+
NGNG0093デフォルトの名無しさん
NGNG自己対戦で相手が0点でも後手の点数が採用されるなら
協調して互いに3000点とるより5000点取らないと意味ないですね。
>>91 いや、相手が自分自身であることを判定するのは
それなりのアルゴリズムが必要なんじゃないでしょうか。
最初の10ラウンドをマジックコードとして、って判定できますけど、
それを偽装囚人も現れるでしょうし。
0094デフォルトの名無しさん
NGNG>>73 のソースだとシードの関係か、
自己対戦の場合0点か5000点になります。で、
int _random(int round, int *own, int *opposite)
{
srand((unsigned)(time(NULL)%(round+1)));
return rand()%2;
}
見たくしてみたんですけど、毎回同じ囚人の総合得点の
結果でも2000点ぐらい差が出ます。こうなると順位が入れ替わってしまうので、
大会をさらに1000回やってその平均、とかなると面倒だなあ、
rand関数使うの禁止、にしようかなあ、とか考えますけどどうでしょうか?
0095デフォルトの名無しさん
NGNGhttp://www.geocities.co.jp//SilkRoad-Ocean/5567/prisoner3.c.txt
第二回大会
0. 最強しっぺ返し君
1. 人間不信裏切り君
2. ゴルゴ13
3. hoge
4. DOWNING 改良版 DW+
5. ヒッキー君
0 1 2 3 4 5 sum
0 3000 999 3000 2667 999 1300 11965
1 1004 1000 1004 5000 1000 1400 10408
2 3000 999 3000 4993 999 1399 14390
3 2667 0 8 1002 0 795 4472
4 1004 1000 1004 5000 1000 1400 10408
5 1300 900 904 4305 900 2982 11291
優勝 ゴルゴ13
2位 最強しっぺ返し君
3位 ヒッキー君
# おそらく。自分の頭の悪さに逝ってきます。。。
0096デフォルトの名無しさん
NGNG0099DW+
NGNG相手の手だけから判定するならそれなりのアルゴリズムが必要ですが、
static変数を使えば少なくとも第2ターンの後手で判定可能になります。
今のルールだと初期化ターンと先手後手の情報が追加されたので
第1ターンの先手で自己対戦であるとわかりますから5000点ゲット可能です。
戦略変更を認めるなら static変数で自分かどうか判定するのを禁止する必要が
あると思います。
ソースの修正とかややこしくなるので、対戦プログラム自体をルールに合うように
改良するまで自己対戦にはこだわらないほうがいいかも。
>最初の10ラウンドをマジックコードとして、って判定できますけど、
>それを偽装囚人も現れるでしょうし。
最終的にはそういう高度な対戦になっていけばいいなと思っています。
1000ターン1マッチでなく、 100ターン * 10マッチみたいな形式なら
相手の出方をデータベース化して後半が本当の勝負みたいなことも
やれるかもしれません。
0100デフォルトの名無しさん
NGNG#ifdef __cplusplus
#define UNDEF(x) int act_##x (int round, const Result& own, const Result& opposite,int who)
#define ALIAS(x,y) Prisoner<act_##x> y(#y)
#define DEF(x) UNDEF(x);ALIAS(x,x);UNDEF(x)
#define PREV (-1)
#else
#define DEF(x) int x (int round, const char* own, const char* opposite, int who )
#define PREV (round-1)
#endif
DEF(lastpoo){ /* 最後っぺ野郎 */
#ifdef ROUND /* 参照可能なら… */
if ( who == 3 ) return 0;
if ( round == ROUND-1 ) return Defect;
#else /* 同じ相手とは連続して戦うことが条件 */
static int p=0, flag=0;
if ( who == 3 ) return 0;
if ( flag < 2 || round < p ) flag++;
if ( flag < 3) p = round;
else if ( round == p ) return Defect;
#endif
/* 実はゴルゴ君 */
if ( round == FIRST_ROUND ) return Cooperate;
return own[PREV] != opposite[PREV] ? Defect: opposite[PREV];
}
0101DW+
NGNGいかん久しぶりに頭使ったのでボケてた。第1ターンの先手、最初から分かるわ。
俺も逝ってくる。
0102100
NGNGもっとすっきり書けるはずなんだね。
とりあえず、int who だけ対処したもので…(^^;
…囚人番号100番、脱走しました!
0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNG面白そうっすね。
>>10 や >>32 で URL を示した論文に書かれてあるコトなんだけど。
# でもこれを戦略に取り入れようとした途端に
# コード書くのが面倒くさくなるという罠。笑い
0106デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNGちゃう。
ターン数が分かってると最後に限って裏切る奴が出てきちゃうから。
囚人ゲームが日常の人間関係を模してるとするなら
最終ターンって地球滅亡の最後の日のことで
それが分かってしまうと一気に日常的じゃなくなってしまう。
プレイはーはあくまで永遠に日常が続くという前提でプレイすべき。
# そういう意味では最初のターンの行動はランダムにしてみるのも良いかも。
# ランダムじゃまずいかな?よくわからん。
0109デフォルトの名無しさん
NGNG例えば最後の10ラウンドだけ裏切るようにしても、
それは全体にはあまり影響ない(合っても最大50点)だし、
他の囚人はその対策すればいいだけ。
0110デフォルトの名無しさん
NGNGみんながこんな例外処理をしなきゃいけないのはちょっとアレやね。
0111デフォルトの名無しさん
NGNG{
if ( round < 999 ) return 0;
return 1;
}
0112デフォルトの名無しさん
NGNGワラタ
0113デフォルトの名無しさん
NGNG傷つけられたプライドは10倍にして返すのよ、
ヤマアラシのジレンマ、でもあたしを見てぇーさん
*/
int aska( int round, int *own, int *opposite, int who )
{
static int foo = 0, bar = 0, coo = 0, AreYouMe = 0;
if ( who == 3 ) { foo ++; return 0; }
if ( foo == 2 ) AreYouMe = 1;
if ( who != 3 ) foo = 0;
if ( AreYouMe == 1 ) return 0; /* 自分とは仲良し。誰もあたしのことを解ってくれない。 */
if ( round == 0 ) return 1; /* 「あんたバカぁ?」と先制攻撃 */
if ( opposite[ round - 1 ] == 0 )
if ( opposite[ round - 2 ] == 0 )
if ( opposite[ round - 3 ] == 0 )
if ( opposite[ round - 4 ] == 0 )
bar = bar + 5; /* 近寄られると反発 */
if ( opposite[ round - 1 ] == 1 )
if ( opposite[ round - 2 ] == 1 )
if ( opposite[ round - 3 ] == 1 )
if ( opposite[ round - 4 ] == 1 )
bar = bar - 20; /* 相手にしてもらえないと「あたしを見てぇ!」 */
if ( opposite[ round - 1 ] == 1 ) bar = bar + 10; /* 敏感に反応。10倍返し */
if ( bar > 0 ) { bar --; return 1; }
return 0;
}
0114デフォルトの名無しさん
NGNGint yhwh( int round, int *own, int *opposite, int who )
{
return(round % 2);
}
0115デフォルトの名無しさん
NGNGやっぱラウンド数はランダムな方法で決めて、各囚人プログラムには
いつゲームが終了するのかわからないようにしないといけないと
思うな。
0116デフォルトの名無しさん
NGNGそれまでの成績とかまでわかるほうが楽しそう。
0117デフォルトの名無しさん
NGNG>>116 相手の特定はシステムで提供するのではなく自身のアルゴリズムで
やったほうが腕の見せ所があるし、成績情報を提供するのはどうかなあ。
0118デフォルトの名無しさん
NGNG>>108 にも書いてるけど、ラウンド数がわかってたら
途中まで協調してきたとして、最後の最後で裏切れば
相手より得点が高くなるわけで、ゲームとしての
選択肢の意味が薄れるというか。
そこらへんは↓の論文をよく読んで欲しい。
http://darwin.esys.tsukuba.ac.jp/fightsoft/IPD/gameprog-ipd.html
0119デフォルトの名無しさん
NGNG0120DW+
NGNGアルゴリズム等は第1回用と同じです。
DOWNING 改良版としていましたが結果的にオリジナルのDOWNINGとは
性格が変わってしまったのでDOWNING 改変版にかえます。
0121DW+
NGNGint prisoner_dwplus(int round, int *own, int *opposite, int who ) /* DOWNING 改変版 DW+ */
{
static int p[2], q[2], flag[2], count_d[2];
/* 初期化ターンの処理 */
if ( who == 3 ) {
p[0] = p[1] = 0;
q[0] = q[1] = 0;
flag[0] = flag[1] =0;
count_d[0] = count_d[1] = 0;
return Cooperate;
}
/* 初回ターンはとりあえず協調 オリジナルはまず裏切りだった */
if ( round <= FIRST_ROUND ) return Cooperate;
/* 相手の出方を観察する */
if ( round > FIRST_ROUND ) {
if ( ( opposite[ round - 1 ] == Cooperate ) && ( own[ round - 1 ] == Cooperate ) ) {
p[who]++;
} else if ( ( opposite[ round - 1 ] == Defect ) && ( own[ round - 1 ] == Cooperate ) ) {
q[who]++;
}
}
/* 人間不信裏切り君に弱くなったので対策 */
if ( flag[who] ) return Defect;
if ( ( round > FIRST_ROUND ) && ( round < FIRST_ROUND + 10 ) && ( opposite[ round - 1 ] == 1 ) ) {
count_d[who]++;
if ( ( round == FIRST_ROUND + 9 ) && ( count_d[who] > 8 ) )
flag[who] = -1; /* 人間不信裏切り君 ハケン!( ̄ー+ ̄)キラーン */
}
/* オリジナルの判定部 */
if ( p[who] == q[who] ) {
return Defect;
} else if ( p[who] > q[who] ) {
return Cooperate;
} else {
return ( (round % 2 ) == 0)? Cooperate : Defect;
}
}
0122いっそ思考過程を表示しちゃうってのはどうよ?
NGNGvoid talk(const char *format, ...);
例:
if ( ( round == FIRST_ROUND + 9 ) && ( count_d[who] > 8 ) ){
talk("人間不信裏切り君 ハケン!( ̄ー+ ̄)キラーン ");
flag[who] = -1;
}
0123デフォルトの名無しさん
NGNGお、それ面白いな。端末で対戦模様を見たらそういうのが
流れるわけね。でも何万回も見たら死ぬかも(笑
0124デフォルトの名無しさん
NGNG/* 普通の人? */
int shomin(int round, int *own, int *opposite, int who )
{
return (round ==0) ? Cooperate:
own[round-1] != opposite[round-1] ? Defect: Cooperate;
}
実は特殊な才能を持ち合わせてるんだなこれが…
0125デフォルトの名無しさん
NGNGそういう意味で、ヒッキー君とアスカ(aska)ちゃんの組合せが面白い。
ヒッキー君が態度を変えるのにあわせて、アスカの感情の起伏が激しい。
最終的な機嫌(barの値)は32。スコア自体は、1963-1638 でヒッキー君の勝ち。
他の対戦者とは大体、±4桁だから相性のよさ?が見て取れる。
ほんとはアスカ同士、最強しっぺ返し君のほうが barの値は小さかったけど、
アスカは自分自身を見分けるし、最強しっぺ返し君とはパターンが一定のやりとりなので、
よりランダム性の高いヒッキー君をベストパートナーに選びました。
# askaのコードは少し手を加えてたので、公式の結果とはいえません。あしからず
0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNG> つまり世界は終末を迎える)は1回きりの対戦と同じだから、そこでは裏切り
> に決まってしまう。すると最終回の一つ手前も裏切るべきで、数学的帰納法に
> より、全回裏切りが適当、となってしまう。
んなこたぁーない。
0128デフォルトの名無しさん
NGNGのは、「自分自身とは対戦しない」ところと
「通信路や得点に」ノイズを入れるところ。
このゲームの本質がぼやけてしまうではないか。
という点では、 aska の自己判断もいまいちだったかも。
あくまで result から判断すべき。か?
0129デフォルトの名無しさん
NGNGノイズを入れるってのはリアリティを高めるためだろうが、
純粋にゲームとして見るならなくてもOKだろうな。
だが、ラウンド数を不定にするのは賛成だ。
0130デフォルトの名無しさん
NGNG例えば Tierra なら賛成だけど、これはシミュレーションじゃないし。
>>129 そのラウンド数を不定にするのはどの範囲で? 1000±300 とか?
0131デフォルトの名無しさん
NGNGしたほうがいいね。実際はそれから類推できないぐらい少ないターン数
ということで。
0132デフォルトの名無しさん
NGNGこの論理が間違い。なぜ裏切りに決まるんだYO!
裏切りだと期待値が3.0、だけど協調でも3.0だYO!
0133デフォルトの名無しさん
NGNG先の論文にもあったが、次のラウンドが存在する確率を設けておいて
ラウンドごとに判定すればいいと思う。確率は0.999ぐらいかな?
この値も不定にするらしいけど。
つまり、どれぐらいラウンドが続くかまったく不明にしておかないと
ラウンド数に依存した囚人ができてしまってつまらないってこと
だろうな。
>>131
不定長配列を作ってもらえばサイズは不定でもかまわないと思うけど、
どうかな?
0134デフォルトの名無しさん
NGNG期待値って言い方が適切かどうか置いておいて、協調の場合の
その「期待値」は1.5だよね?あきらかに裏切り有利。
0135デフォルトの名無しさん
NGNG0136デフォルトの名無しさん
NGNG対戦回数が1000回だとして、
「対戦回数が固定されていることを利用した戦略」例を示して欲しい。
0137デフォルトの名無しさん
NGNG>>111 偽善君 最後だけ仲良くするパターン
0138デフォルトの名無しさん
NGNGちなみに偽善君は最後は「裏切り」。
0139DW+
NGNGゴメン、こちらの勘違い。最後だけいい顔するから偽善だと思った。
>最後だけ数点稼いで何の意味があるのでしょうか?
こちらの手に対して敏感に手を変える相手との対戦ではこちらが裏切ると
相手も裏切り返すので戦争状態になりやすい。こういう相手とは協調して
3点ずつをとるのが一番いい戦術ですよね。しっぺ返し君やゴルゴ13のような
敏感な戦術が上位になるのはある程度予想できるので、上位の戦略同士の
対戦は3点×ラウンド数の引き分けが多いはず。たとえ1点でも上位の相手を
上回れるんだから、必死で勝とうとするならやるしかないと思う。
特にここだとソースを公開しているので、ライバルが最後に裏切るように
なっていれば対抗上こちらも裏切るしかない。あとは>>127 で引用されて
いるのと同じで、ソースを発表するごとに裏切るターンが早くなっていく。
今のところ囚人の個性が豊かでそれほど問題になってないけど。
最終ラウンドの裏切りや対戦相手ごとに戦術を調整するバージョンを作って
みたのでこの後にアップします。
0140137 = DW+
NGNGキャラクタ別の戦略を増やしました。名前はいいのが思いつかない
からとりあえず DW+2 です。
悪乗りして >>122 の思考過程表示を簡易実装して
メッセージを表示します。
askaちゃんから貢いでもらえるのでかなりの得点が出ます。
最終ラウンドにそれまで協調していた相手を裏切ります。
見にくいのでインデントを入れますが、不要なら以後入れません
ので指摘してください。
/* メッセージ表示 */
#define TALKING
void talk( int who, char *mes )
{
#ifdef TALKING
printf("[ %d ] %s\n", who, mes);
#endif
}
0141137 = DW+
NGNG{
static int p[2], q[2], flag[2], count_d[2], poo[2];
/* 初期化ターンの処理 */
if ( who == 3 ) {
int i;
for ( i = 0; i < 2; i++ ) {
p[i]=q[i]=flag[i]= 0;
count_d[i] = 0;
poo[i] = 1;
}
return Cooperate;
}
/* 初回ターンはとりあえず協調 */
if ( round <= FIRST_ROUND ) return Cooperate;
/* 2ターン目以後の処理 */
/* 相手の出方を観察する */
if ( ( opposite[ round - 1 ] == Cooperate ) && ( own[ round - 1 ] == Cooperate ) ) {
p[who]++;
} else if ( ( opposite[ round - 1 ] == Defect ) && ( own[ round - 1 ] == Cooperate ) ) {
q[who]++;
}
/* 前回相手が裏切った場合 */
if ( opposite[ round - 1 ] == Defect ) {
count_d[who]++; /* 裏切りの数をカウント */
if ( flag[who] > 0 ) {
flag[who] = 0; /* 相手を見誤ったときはフラグを戻す。*/
talk(who, "ん?違ったか?" );
}
}
0142137 = DW+
NGNG/* 10ターン戦ったら非協調系キャラクターの分析をする */
if ( round == FIRST_ROUND + 10 ) {
if ( ( count_d[who] == 1 ) && ( opposite[ FIRST_ROUND ] == Defect ) ) {
flag[who] = 0x11; /* アスカ様に予約したフラグ値 */
flag[who] = -1; /* シンクロ率ダウン攻撃 */
poo[who] = 0; /* 女の子に最後っぺは無し */
talk( who, "♯♯♯ アスカのシンクロ率、急速に低下していきます! ♯♯♯" );
} else if ( count_d[who] >= 10 ) {
flag[who] = -1;
talk( who, "人間不信裏切り君 ハケン!( ̄ー+ ̄)キラーン" );
} else if ( ( count_d[who] >= 9 ) && ( opposite[ round - 1 ] == Cooperate ) ) {
flag[who] = 1;
talk( who, "ヒッキー君━━━━━━( °∀ °)━━━━━━キター!!!!");
}
}
/* 最後っぺ野郎くん対策 といいつつ他の囚人にも最後っぺ */
if ( ( round == ROUND + FIRST_ROUND - 1 ) && ( poo[who] != 0 ) ){
switch ( rand() % 3 ) {
case 0: talk( who, "オナラ Pu〜♪ " ); break;
case 1: talk( who, "勝負!" ); break;
default: talk( who, "最後もらい!" );
}
return Defect;
}
/* 態度決定者への反応 */
if ( flag[who] < 0 ) return Defect; /* 人間不信裏切り君ほか */
if ( flag[who] > 0 ) return Cooperate; /* ヒッキー君ほか */
/* 裏切る相手との協調を模索 10ターン目 ヒッキー君対策 */
if ( ( round == FIRST_ROUND + 9 ) && ( count_d[who] >= 9 ) ) return Cooperate;
/* それ以外判定部 */
if ( p[who] == q[who] ) /* 鈍感な相手には裏切り */
return Defect;
else if ( p[who] > q[who] ) /* 敏感な相手とは協調 */
return Cooperate;
else
return ( (round % 2 ) == 0)? Defect : Cooperate; /* 交互に手を変えて様子を探る */
}
0144DW+
NGNG総合得点ではなくて勝点制なら確率で次のラウンドがあるか決めるのも
ありだと思う。
ラウンド数の最大限を知りたいのは、相手によらず出す手が決まっているような
戦略を手間をかけずに作れるメリットがあるので。
0145DW+
NGNG#define SIZE_OF_RND_TABLE (ROUND * 4) /* 余分に作って実際に使う部分の平均値を変動させる */
int _random_table(int round) /* 乱数表 */
{
/* 自分を含めどの相手にも同じパターンの乱数を返す */
/* 自分と対戦するときの得点は平均2.25点から平均2点に下がる */
static int table_maked = 0;
static int rnd_table[ SIZE_OF_RND_TABLE - 1 ];
/* 乱数表初期化 1回だけ実行 */
if (table_maked++ == 0 ) {
int i, tmp, r;
/* 0,1 を交互に入れておく 全体の平均値は0.5になる */
for (i = 0; i < SIZE_OF_RND_TABLE; i++ )
rnd_table[ i ] = i % 2;
/* シャッフル */
for( i= 0; i < ROUND; i++ ) {
tmp = rnd_table[ i ];
rnd_table[ i ] = rnd_table[ r = rand() % SIZE_OF_RND_TABLE ];
rnd_table[ r ] = tmp;
/* まだ乱数に癖があるようなら下を追加する */
/* rand(); rand(); */
}
}
return rnd_table[ round ];
}
0147デフォルトの名無しさん
NGNG今回のエントリーは、
0. 最強しっぺ返し君
1. 人間不信裏切り君
2. ゴルゴ13
3. hoge
4. DOWNING 改変版 DW+
5. DW+2
6. lastpoo
7. ヒッキー君
8. 偽善君
9. アスカ
10. 全痴全脳の神
11. 普通の人?
でした。大会ソースは、
http://www.geocities.co.jp//SilkRoad-Ocean/5567/prisoner3.c.txt
で、結果です。
[ 1 ] オナラ Pu〜♪
[ 1 ] 人間不信裏切り君 ハケン!( ̄ー+ ̄)キラーン
[ 1 ] オナラ Pu〜♪
[ 1 ] 勝負!
[ 1 ] 勝負!
[ 1 ] 勝負!
[ 0 ] オナラ Pu〜♪
[ 1 ] 最後もらい!
[ 0 ] オナラ Pu〜♪
[ 0 ] ヒッキー君━━━━━━( °∀ °)━━━━━━キター!!!!
[ 0 ] 最後もらい!
[ 0 ] 勝負!
[ 0 ] ♯♯♯ アスカのシンクロ率、急速に低下していきます! ♯♯♯
[ 0 ] 最後もらい!
[ 0 ] 最後もらい!
0 1 2 3 4 5 6 7 8 9 10 11 sum
0 3000 999 3000 2667 3000 2997 2997 1300 2997 2058 2498 3000 30513
1 1004 1000 1004 5000 1020 1024 3996 1400 4996 4988 3000 3000 31432
2 3000 999 3000 4993 3000 2997 2997 1399 2997 4995 2997 3000 36374
3 2667 0 8 1002 8 8 3496 795 3996 3995 2250 8 18233
4 3000 995 3000 4993 3000 2997 2997 1395 2997 4993 2997 3000 36364
5 3002 994 3002 4993 3002 2998 2998 2979 2998 4993 2997 3002 37958
6 3002 251 3002 1716 3002 2998 2998 1155 2998 3009 1626 3002 28759
7 1300 900 904 4305 920 2999 3670 2982 3015 3014 2900 2997 29906
8 3002 1 3002 1501 3002 2998 2998 2975 2998 2999 1501 3002 29979
9 2063 3 5 1505 8 8 2984 2974 2999 3000 1500 3000 20049
10 2503 500 507 2250 507 507 3496 900 3996 4000 2000 2250 23416
11 3000 500 3000 4993 3000 2997 2997 2957 2997 3000 2250 3000 34691
0148デフォルトの名無しさん
NGNG2位 ゴルゴ13
3位 DOWNING 改変版 DW+
でした。
0149DW+
NGNG>>98 で 乱数の初期化を入れろって書いたけどしてありますね。
大変失礼しました。
勘違いで書いているところ他にもあるなぁきっと。
今朝、教育テレビのイタリア語会話を見てたら
Sbagliando s'impara. - 人は間違えながら学ぶ(失敗は成功のもと)
っていってたけど、自分の場合ぜんぜん学んでないな。
0151デフォルトの名無しさん
NGNG使わない方向で。と。なるべく囚人関数の中で自己完結していただけると、
楽です。僕が。
0152デフォルトの名無しさん
NGNGhttp://www.geocities.co.jp//SilkRoad-Ocean/5567/prisoner4.c.txt
0153デフォルトの名無しさん
NGNGclass Prisoner{
virtual int decide()=0;
virtual void notify(int result)=0;
}
------------------------------------
while(1){
a=prisoner_a->decide();
b=prisoner_b->decide();
prisoner_a->notify(b);
prisoner_b->notify(a);
if ( ( a == 0 ) && ( b ==0 ) ) { pa+=3;pb+=3; } /* 協調:協調 */
if ( ( a == 1 ) && ( b ==0 ) ) { pa+=5;pb+=0; } /* 裏切り:協調 */
if ( ( a == 0 ) && ( b ==1 ) ) { pa+=0;pb+=5; } /* 協調:裏切り */
if ( ( a == 1 ) && ( b ==1 ) ) { pa+=1;pb+=1; } /* 裏切り:裏切り */
}
こんな感じで・・・
0154デフォルトの名無しさん
NGNG“大会”自体が何回か繰り返される場合,大会の成績によって
個体数を増減するのが簡単になるっすね。
より本格的になってきた感じ。
ってことで,しっぺ返しクラス。
class TitForTat: public Prisoner {
int _hand;
public:
TitForTat(){ _hand = Cooperate; } // 初期は協力
int decide() { return _hand; }
void notify(int result){ _hand = result; } // 相手の真似をする
};
0155デフォルトの名無しさん
NGNGclass Golgo13 : public Prisoner {
int _hand;
public:
Golgo13(){ _hand = Cooerate; } // 初期は協力
int decide(){ return _hand; }
void notify(int result) {
if (result == Defect) _hand = Defect;
} // 一度でも裏切られると,もう協力しない
};
0156デフォルトの名無しさん
NGNG自分の名前も持てると結果の表示が楽だね。
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG基本的に anti-OO なのでクラスは読めても設計できないし、
別にクラスでやる意味なさそうに思うけど、
勉強のためにいいかなあ、とあたし個人は思うのですけど、
どうでしょう?
0160デフォルトの名無しさん
NGNGオーバーライドで共通インタフェイスがつかえたりするんで
いいかなとも思ったが、C++でやる意味もあまり無いかなとも思った。
0161153
NGNG名前が衝突する可能性がほぼ0になりますよ。
class Prisoner{
virtual int decide()=0;
virtual void notify(int result)=0;
virtual char* getName()=0;
}
こんな感じですかね?
0162デフォルトの名無しさん
NGNG- #define DEF(x) int x (int round, const char* own, const char* opposite, int who )
+ #define DEF(x) int x (int round, int* own, int* opposite, int who )
そのまま取り込んでもらえるとは思ってなかったので、放置しちゃってました。スマソ…
ROUND定数に関しては、お騒がせしてしまったようですが、
例えばこんな囚人はどうでしょう。
int halfandhalf( int round, int*, int*, int who ) /* 弐重人格者 */
{
static int flag = 0;
if ( who == 3 ) {
flag = flag >= 2 ? 1: flag +1;
return 0;
}
if ( flag == 2 ) { return who; }
if ( round == 0 ) { flag = 0; }
return ( round <= ROUND/2 ) ? Cooperate: Defect;
}
0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNG>>163誤爆?
0165デフォルトの名無しさん
NGNG0166デフォルトの名無しさん
NGNG>>囚人関数
int func_name(int round, int *own, int *opposite, int who);
int round:現在のラウンド数
int *own:これまでの自分の手
int *opposite:これまでの相手の手
int who:個人ID(?)
返り値:0=協調,1=裏切り(※必須)
>>サービスファンクション
void talk( int who, char *mes ); // 自分のキャラに発言させる
int who:個人ID
char *mes:発言内容
返り値:無し
int _random_table(int round); // 乱数取得
int round:ラウンド数
返り値:乱数
0167デフォルトの名無しさん
NGNGAttitude func_name(int round, int *own, int *opposite, int who);
してくれ。見にくい。
0168デフォルトの名無しさん
NGNGなんかこう、意外な戦略が強い、みたいなのはでてこないでしょうか。
0169赤木先生
NGNG0170デフォルトの名無しさん
NGNGおじさん怒っちゃうぞ!!
0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNGそれじゃあ、すごくわかりずらいと思うな。
やっぱC++でちゃんとやろうよ
talkは_talkとかにして
talkで使いたい人が、ヘッダで読み込めばOK
ヘッダにわけわからないdefineとか使うのはダメ
まあ、理想はSystemクラスだけど。
プリプロセッサを使うのはあまりよくないという事なので。
ところで、乱数なんてのは独自に作ればいいと思うのですが・・・
多数公開されてますし
0174デフォルトの名無しさん
NGNG166の乱数は本来は囚人なんだけど乱数(0,1)取得としても使えるので
サービスファンクションとして取り上げたんじゃないかな
1の使ってる処理系だと乱数がうまく機能しないらしい
0175デフォルトの名無しさん
NGNG(´-`).。oO(なんでこんなにさがってるんだろ。。。)
0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNGいいスレだが閉鎖的。
0178デフォルトの名無しさん
NGNG閉鎖的かな。。。。
確かにほぼCオンリーなんでC知らない人は参加しずらいだろうけど。。。
0179デフォルトの名無しさん
NGNG初めの方読めばわかるけど平気で人追い出してみたりとかね。
ネタはいいが性格は悪い。
0180デフォルトの名無しさん
NGNGあははは、爆笑
いえてる
0181デフォルトの名無しさん
NGNG0182デフォルトの名無しさん
NGNG#もちろんバルタザールは裏切ります。最後に。
int magi( int round, int *own, int *opposite, int who )
{
int foo;
foo =
casper( int round, int *own, int *opposite, int who ) +
melchior( int round, int *own, int *opposite, int who ) +
balthasar( int round, int *own, int *opposite, int who );
if ( foo > 1 ) return 1; else return 0;
}
int casper( int round, int *own, int *opposite, int who ) /* 科学者としての私 */
{
}
int melchior( int round, int *own, int *opposite, int who ) /* 母親としての私 */
{
}
int balthasar( int round, int *own, int *opposite, int who ) /* 女としての私 */
{
}
0183デフォルトの名無しさん
NGNGMAGIは多数決システムと聞くが。
0184デフォルトの名無しさん
NGNG0185デフォルトの名無しさん
NGNG「総理!こんな簡単なソースも読めない若者がム板に増えています!
円周率を3として教えたゆとり教育の弊害ではないでしょうか!総理!」
0186デフォルトの名無しさん
NGNG> if( foo > 1 )
っての
if ( foo >= 2 )
のがよかったかもな。可読性では。
0187デフォルトの名無しさん
NGNGふつーに使うと乱数なので毎回結果が違うので、
大会自体を1000回位まわして平均をとらなきゃな、
と悶々としていたところです。
次回の大会から「でたらめ君」を復活させます。
DW+さんありがとう。
0188デフォルトの名無しさん
NGNG0189172=154
NGNGプログラムって何のプログラムですか?
乱数生成のですか?
>どの相手にも同じ乱数で相手する乱数表戦略を作ってみた。
線形合同法はシードが同じなら、いつでも同じなんですよね・・・
stdlibの乱数は線形合同法ですね。
で、145の意味はわかってますが何か?
しかも、数学的に何の意味もない事もわかってますが何か?
整数から、{0,1}への写像を定義して、
整数側からランダムに要素を選ぶ事にどんな意味があるのか教えていただければ
幸いです。
排他的というより、知らないものは見ないって感じですか?
統計データをファイルから読み込ませたプログラムを作ろうと思った
のですが、C++でクラス化しないということなので、
もうやめます。
0190デフォルトの名無しさん
NGNG頭よくて?も性格悪いと人間的にダメ。
0191デフォルトの名無しさん
NGNGテーブルを作って誰もが同じ乱数列を使うことに意味があるんだYO!
君超勘違い君。
君もC++使えないからって。子供みたいだね。君に誰も頼んでもいないしね。
0192189
NGNGだから、シードが同じなら、同じ乱数列だって言ってんだろ。
>君もC++使えないからって。子供みたいだね。君に誰も頼んでもいないしね。
捨て台詞はくなよ、見苦しい。
まあ、C++使えないからじゃなくて、
向上心が無いから、つまんねって感じ。
Cでやるにも、もっと良いコーディング方法あると思うけど・・・
ちなみに、みなさん文系の人だと思うので、
理系なら誰でもわかるような事だとは思いますが、書いておきますと(既出かも?)
皆さんが作ってる囚人には2パターンあります。
一つは初めから手が決まっているもの。
二つ目は、相手の手に応じて手が決まるものです。
ランダムに協力と裏切りを選択するものも一つ目に含まれます。
ただ、ランダムなものは少し特殊で、どのような戦略をとっても、
勝ち負けの確立は5分5分になります。(確立分布による、と書く方が適切かも)
要するにランダムなものに対して戦略を立てても無駄なわけです。
じゃんけんに戦略なんて物が存在しないのと同じ事です。
すべての囚人が1つ目のパターン、すなわち最初から手が決まっている場合、
そのパターンが何かわかっていれば、それらのどの囚人よりも強い囚人は
計算で容易に求める事が出来ます。
そういうわけで、手の内を公開しつつこのゲームをする場合、
パターン1に当てはまる囚人は作ってもほとんど意味はありません。
おもしろいのは二つ目ですね。
そして二つ目のパターンに属する囚人の特徴を検証するために
パターン1を使うのは無難な方法ですね。
ただ、こっちも結局は・・・それほど意味を持たないんですね。
一回事の意思決定が完全に独立なため、結局は期待値に即した値しか
得られないのです。
要するに統計より確率分布を計算して、手を決める囚人が平均的に強い、という事は
計算から簡単にもとまってしまうんですね。
ゲーム理論(ドラマとかも)について思う事は、
あまりにもモデルが単純すぎて、解析結果として何も得られない
悲しい学問だなー、と。
反論があればどうぞ。当方、ゲーム理論の専門家じゃないので
専門用語はなるべく避ける方向でよろしく。
0193デフォルトの名無しさん
NGNGint magi( int round, int *own, int *opposite, int who )
{
int m = 0, b = 0, c = 0;
char opinion[ 2 ][ 6 ] = { "賛成", "否認" };
m = melchior( round, own, opposite, who );
b = balthasar( round, own, opposite, who );
c = casper( round, own, opposite, who );
/* printf( "MELCHIOR1 %s: BALTHASAR2 %s: CASPER3 %s\n", &opinion[ m ], &opinion[ b ], &opinion[ c ] ); */
if ( ( m + b + c ) > 1 ) return 1; else return 0;
}
0194デフォルトの名無しさん
NGNGint melchior( int round, int *own, int *opposite, int who ) /* 科学者としての私 */
{
/* 定量的に判断 */
static int c[ 2 ] = { 0, 0 }, d[ 2 ] = { 0, 0 };
if ( who == 3 ) {
c[ 0 ] = 0;
c[ 1 ] = 0;
d[ 0 ] = 0;
d[ 1 ] = 0;
return 0;
}
if ( round == 0 ) return 0;
if ( opposite[ round - 1 ] == 0 ) c[ who ] ++; else d[ who ] ++;
if ( c[ who ] >= d[ who ] ) return 0; else return 0;
}
int balthasar( int round, int *own, int *opposite, int who ) /* 母親としての私 */
{
/* 現実的に判断 */
if ( round == 0 ) return 0;
if ( ( opposite[ round - 1 ] == 0 ) && ( own[ round - 1 ] == 0 ) ) return 0; else return 1;
}
int casper( int round, int *own, int *opposite, int who ) /* 女としての私 */
{
/* 秋の空 */
if ( round == 0 ) return 0;
if ( round == 1 ) return 1;
if ( round == 999 ) return 1;
if ( opposite[ round - 1 ] == 1 )
if ( opposite[ round - 2 ] == 1 )
return 0; else return 1;
return 0;
}
0195デフォルトの名無しさん
NGNG- if ( c[ who ] >= d[ who ] ) return 0; else return 0;
+ if ( c[ who ] >= d[ who ] ) return 0; else return 1;
そこそこは行くけどトップにはなれない。というか DWシリーズ強すぎ。
やはり個別対応をするべきか?
0196DW+
NGNG>>145 は囚人で、基本的に自分や他の人が作った囚人の評価用です。
>>94 あたりで、でたらめ君が欠場になったのと、>>144 の関連で
あらかじめ出す手を決めてしまう戦略の例を出したかったので発表
しました。
こちらの手が丸見えですから、サービスファンクションになったのは
びっくりしました。
でも、要は使い方次第だし、丸見えであるのを利用する囚人が出て
くればここで議論になると思ったので、その時は指摘しなかったのです。
私の発言の至らなさから皆さんに不快な思いをさせてしまったことを
お詫びします。
0197デフォルトの名無しさん
NGNG参加したいヤシは参加して、したくないヤシは参加しなければよい。
とりあえず言語はCで、その他言語、C++(クラス化)等でいい案があるならまずソースを出せと。
で、皆がそっちのいいと思うなら自然にそっちに逝くだろうと。
■囚人のジレンマについての説明は、>>42
■関数形式については、>>166 (乱数導入については1に任せる)
っていうか、1はまだいるのか?(ワラ
■エントリー囚人 =======================================
最強しっぺ返し君 >>49
人間不信裏切り君 >>49
ゴルゴ13 >>77
hoge >>49
random >>49
ヒッキー君 >>87
偽善君 >>111
アスカ >>113
全痴全脳の神 >>114
普通の人? >>124
DW+2 >>141-142
MAGI >>193-195
0198デフォルトの名無しさん
NGNGポリシー的にコテハン使ってないけど、
MAGI書いたのは1ですよー。アスカも。
で、ここら辺で考察なんですけど、強い囚人は確実に
3000近くと5000近くをとってますね。まあそうなんですけど。
もうちょっとばらけないかなあ、と思ってみたり。
というかTfT別に強くないじゃん。
0199デフォルトの名無しさん
NGNG俺も好きだ
0200デフォルトの名無しさん
NGNG>>42の一行目でいきなり煽られて不快。
0201デフォルトの名無しさん
NGNGワラ。それは無視しる!
0202デフォルトの名無しさん
NGNG// われは全痴全脳の神
int yhwh(int round, int *own, int *opposite, int who){
int i,a=0,b=0;
for (i=0;i<round-1;i++){
if (*opposite == 1){ a++; }
else{ b++; }
oppositte++;
}
if (a>b){
_talk(who,"神の裁き!!");
return 1;
}
else{
_talk(who,"汝に祝福あれ!");
return 0;
}
}
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNG独立事象に対してなぜに解析を?と問い詰めていいでしょうか?
0205デフォルトの名無しさん
NGNG乱数を使ってる囚人はでたらめ君だけだ。
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNGおまけ
int devil (int round, int *own, int *opposite, int who ) {
static int me = 0, ent = sizeof ( results ) / sizeof ( results [0] ) ;
int i, j ;
if ( who == 3 ) {
if ( --ent == 0 ) {
ent = sizeof ( results ) / sizeof ( results [0] ) ;
while ( prisoners [ me ] != devil ) me++ ;
for ( i = 0 ; i < ent ; i++ ) {
for ( j = 0 ; j < ent ; j++ ) {
results [i][j] = ROUND ; } }
for ( i = 0 ; i < ent ; i++ ) {
results [i][me] = 0 ;
results [me][i] = ROUND * 5 ; } } }
return 1 ; }
0208デフォルトの名無しさん
NGNGいいじゃんC++Builder5用だって。俺も何冊か持ってるが、そのままほとんど
使えるよ。CLXについてはさすがに載ってないけどね。
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNG{
vector<Lengthen *> show_order;
// 好きな順に登録
show_order.push_back(new Name("(´д`;;)"));
show_order.push_back(new Age(14));
show_order.push_back(new Gendor(Gendor::Male));
show_order.push_back(new End);
// ヘッダ
for_each(show_order.begin(), show_order.end(), bind2nd(mem_fun1(&Lengthen::puttitle), &cout));
// データ
for_each(show_order.begin(), show_order.end(), bind2nd(mem_fun1(&Lengthen::putdata), &cout));
}
残りは推測しる
0211デフォルトの名無しさん
NGNGif ( round != 0 ) {
own [round - 1] = Cooperate ;
}
if ( round > 1 ) {
own [round - 2] = Defect ;
}
return Defect ;
}
0212デフォルトの名無しさん
NGNGよろしくお願いします。
int newbee(int round, int *own, int *opposite, int who){
int i;
double reliability;
for(i=0,reliability=0;i<round;i++){
if(opposite[i]==Cooperate)reliability+=power(3,i);
else reliability-=power(3,i);
}
if(reliability>0)Defect;
else Cooperate;
}
int oldbee(int round, int *own, int *opposite, int who){
int i;
double reliability;
for(i=0,reliability=0;i<round;i++){
if(opposite[i]==Cooperate)reliability+=power(3,i);
else reliability-=power(3,i);
}
if(reliability>0)Cooperate;
else Defect;
}
whoは何に使うのですか?
0213デフォルトの名無しさん
NGNGTForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
function calc : String ;
private
{ Private 宣言 }
public
{ Public 宣言 }
i , j : integer ;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function calc : String ;
begin
result := IntToStr(i + j);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
i := 1 ;
j := 2 ;
Memo1.Lines.Add(calc);
end;
end.
0214
NGNG{
exit(1);
}
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNG0217デフォルトの名無しさん
NGNG{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_ALTDRAG , WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // 作成に失敗
}
//ここから追加
TBBUTTON button[5];
for(int i = 0 ; i < 5 ; i++){
button[i].fsState = TBSTATE_ENABLED;
button[i].fsStyle = TBSTYLE_CHECKGROUP;
button[i].iBitmap = 0;
button[i].idCommand = m_wndToolBar.GetItemID(10);
button[i].iString = 0;
}
CToolBarCtrl &ToolBarCtrl = m_wndToolBar.GetToolBarCtrl();
ToolBarCtrl.AddButtons(5,button);
//ここまで
0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG俺が見る限りでは、>>189 の方が蹴散らされて
今頃は枕を涙で濡らしていると思われ。
つーか、お前 >>189 だろ。(w
グダグダ言う前に強いアルゴリズムをうpしれ。
そうすれば皆、話を聞いてくれるぞ。
0220デフォルトの名無しさん
NGNG同意、Socketでお互い接続して戦えるみたいな。
0221デフォルトの名無しさん
NGNGUnix用でよければネットワーク対戦用のプログラム書きます。が。
あ、こっちでサーバ作って立てればいいのですね。
0222デフォルトの名無しさん
NGNGそれかアプロダ作って好きな相手といつでも戦える方が便利かも。
gcc使える人限定になりそうだけど。
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNGすんまへん。どなたか引継ぎを。
0226デフォルトの名無しさん
NGNGこんなスレ潰してしまえ。
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNG{
private:
char result[1000];
public:
char Decide(void);
char GetResult(int);
};
0229デフォルトの名無しさん
NGNG{
return rand()%2;
}
Shujin::GetResult(int n)
{
return result[n];
}
0230デフォルトの名無しさん
NGNGenum {RSLT_CONFESS, RSLT_BETRAY};
0231デフォルトの名無しさん
NGNGで、何なの?(w
0232デフォルトの名無しさん
NGNG>Unix用でよければネットワーク対戦用のプログラム書きます。が。
この人には無理だよ。
やっぱ、文系ってアホだな・・・
0233デフォルトの名無しさん
NGNG死んだスレageるあなたの方がアホです。
VBスレはもう飽きたのかい?
0234デフォルトの名無しさん
NGNG誤爆?
全部Cだぞ
0235デフォルトの名無しさん
NGNGif ( round != 0 ) {
own [round - 1] = Cooperate ;
}
if ( round > 1 ) {
own [round - 2] = Defect ;
}
return Defect ;
}
0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNG0238デフォルトの名無しさん
NGNGコンテストは既にあった。
発展性がない事に誰もが気づいたので、もうやってない。
TFT(しっぺ返し)をあたかも自分が作ったように載せてるバカは
どこのバカだ?
0239デフォルトの名無しさん
NGNG0240*
NGNGもうすぐできる。
0241デフォルトの名無しさん
NGNGゲームの仕様を書いてくれ。
囚人のジレンマ並にクソだったら、殺すけど。
02421
NGNGそれ自体は面白かったんだけど、囚人のジレンマが面白くなかった。
自由度が2しかないものね。協調か裏切りかの。
なんかモデル化して面白いものあるかなあ。株とか?
0243たれ
NGNGぐぐるでこのスレ発見しました。
こっちでも9つほどのプログラムを対戦させてみましたが、やっぱしゴルゴ13
(当方では「謝罪と賠償を求めるニダくん」と呼んでいるが)はわりと強いみた
いです。
0244デフォルトの名無しさん
NGNG0245たれ
NGNG0246デフォルトの名無しさん
NGNG0247たれ
NGNG0248*
NGNGtera風のゲーム。主人公はアメーバ。
n×mの升目をつくり、その中で、
・上下左右どこかに移動する
・自分以外との接触が起きたら、戦うか回避するかを決める
・ある条件下で細胞分裂可能
みたいなかんじ。できればWinのDLL使って、自由にAIを参加・削除
できるようにしたい。
0249デフォルトの名無しさん
NGNGあー、俺も作った事ある。
AI側のインターフェースを相当上手く作らないと、
AI側の実装がきつい。
テラリウムのやり方は、俺のよりは優れてるな。
でも、やっぱり醜い。
で、AI側の実装がきつかったから、3種類くらい作ってすぐ止めてしまった。
まあ、動かすと面白い事は確か。
環境の実装のコツは、がちがちのOOで作る事。
OOできる人間以外は、たぶん複雑すぎて作れないと思う。
嘘だと思った人は、挑戦してみるといい。
それと、テラでいうscanに相当するものは、
おそらく全検索する以外に方法はない。
そして、これが生物の数の上限を決めてしまう。
生物のデータを参照する場合は、コピーを参照させなきゃいけなかったりするし、
生物間の通信を断つために、リフレクションでstaticメソッドの有無を調べなきゃいけなかったり
すごく大変だけど、OOできれいに記述できるので気分はいい。
http://pc.2ch.net/test/read.cgi/tech/1022502611/l50
こんなのもある
0250*
NGNGとりあえずいけるとこまでCでがんばってるけど、、、
やっぱデータ隠蔽とかに限界がある。。
OOにすると初心者が近寄れなくなる。。
0251デフォルトの名無しさん
NGNGVBなんかでもDLL作れるんだろ?そういう意味では門戸が広くなるし。
あとは面白そうなゲームシステムに期待。囚人のジレンマの時は
参加してなかったので面白そうになれば参加したいぞ。
0252デフォルトの名無しさん
NGNGんなこたーない
テラリウムは簡単だろ?
OOは使う側は初心者でいいんだが、
作る側は上級者である必要がある。
そもそも初心者に参加してもらうって姿勢は間違ってると思うぞ。
http://pc.2ch.net/test/read.cgi/tech/1022502611/l50
これなんて、まともにできる奴は日本に300人くらいしかいないだろう。
もちろん俺は手も足も出ない。
0253デフォルトの名無しさん
NGNGもうちょっと低レベルな初心者にも参加できたらな。。。と考えている。
で、独自形式のスクリプトにしてしまえばGUIでスクリプト作成するものとか
も作れるんで、PCをゲームにしか使ってないようなユーザにも手を出せるかな
と思ったんだが、パーサとか余分なもんを実装しないといかん。。。
いい方法ないかな。。。
0254たれ
NGNG0255www
NGNG/*てすとくん*/
if(round<4)return 0;
if(opposite[round-1]=1 || (opposite[round-2]=1 && opposite[round-3]){
return 1;
else
return 0;
}
}
0256www
NGNG0257www
NGNG0258デフォルトの名無しさん
NGNGもう終わったけど、なんか用?
0259デフォルトの名無しさん
NGNG思いつきだけど表計算みたいなのはどう?
一列×回数行にする。
記述だけならテキスト・エディタでもできるし、
関数の実装は追々やっていけばいい。
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNGいまいち意味不明。
詳解キボンヌ
0262デフォルトの名無しさん
NGNG026370
NGNG思いっきり記述を簡略化させれば簡単に覚えらるかも。
>>70みたいにif文省略するとかなりすっきりするよ。
0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNG0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNG0270デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNG┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃○┃●┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃●┃○┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┗━┻━┻━┻━┻━┻━┻━┻━┛
0275デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNG0280デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNG┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃○┃●┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃●┃○┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┗━┻━┻━┻━┻━┻━┻━┻━┛
どうぞ
0282デフォルトの名無しさん
NGNG┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃○┃●┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃●┃○┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┗━┻━┻━┻━┻━┻━┻━┻━┛
一行足りなかったやんけ
0283デフォルトの名無しさん
NGNG0284神の一手
NGNG┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃○┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃○┃●┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃●┃○┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┗━┻━┻━┻━┻━┻━┻━┻━┛
0285デフォルトの名無しさん
NGNG┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃○┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃●┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃○┃●┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃●┃○┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┗━┻━┻━┻━┻━┻━┻━┻━┛
0286デフォルトの名無しさん
NGNG┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃○┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃○┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃○┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃○┃●┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃●┃○┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┗━┻━┻━┻━┻━┻━┻━┻━┛
0287
NGNG┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃○┃●┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃●┃○┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃香┃桂┃銀┃金┃金┃銀┃桂┃香┃
┗━┻━┻━┻━┻━┻━┻━┻━┛
02881
NGNG自己複製と世代進化が絡むのがいいな。Tierra もどきでも作ってみる?
0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG0292デフォルトの名無しさん
NGNGどんどん有利になることは周知だと思うんだが。
自分の手が確率的にしか伝わらないようなノイズ環境化では
tft が最強とは限らないことも知られてるんじゃないの?
ttp://citeseer.nj.nec.com/cs?q=%22iterated+prisoner%27s+dilemma%22+and+noise&submit=Search+Documents
0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNG0295デフォルトの名無しさん
NGNG0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNG0298デフォルトの名無しさん
NGNG0299IP記録実験
NGNGhttp://qb.2ch.net/test/read.cgi/accuse/1042013605/
1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG馬鹿ども死ねよ
0303デフォルトの名無しさん
NGNG次はどこの時代かな
0304デフォルトの名無しさん
NGNG何が変わるんですか。
0305デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0306デフォルトの名無しさん
NGNG相手がその程度で、わざわざ内容証明や令状とって訴えに来るような粘着君なら、狂犬にでも噛まれたと思って諦めれ。
0307デフォルトの名無しさん
NGNG誰でもみれる様になるの?
0308デフォルトの名無しさん
NGNG>荒らしとか犯罪のためなの?
そす。
246 名前:心得をよく読みましょう[] 投稿日:03/01/08 17:52 ID:BH998yxV
>ひろゆき
俺のお気に入りのスレとか荒されてるんだがそういうのにも有効?
257 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:53 ID:rLfxQ17l
>>246
いずれは。
301 名前:心得をよく読みましょう[] 投稿日:03/01/08 17:57 ID:zbarv++q
>ひろゆき
2ch閉鎖って考えたことある?
310 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:58 ID:rLfxQ17l
>>301
ラウンジが重いですとかいちいち電話してくる人がいたとき。
0309デフォルトの名無しさん
NGNG>datの書いた内容とIPが対になってることを証明すんのもめんどくさいもんな。
そゆことです。
114 名前:心得をよく読みましょう[] 投稿日:03/01/08 17:34 ID:ZxrhkN5z
幼女をレイプします
119 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:35 ID:rLfxQ17l
>>114
携帯電話からご苦労様です。
139 名前: ◆FruitsMIpE [sage] 投稿日:03/01/08 17:38 ID:s/ESWpsO
「携帯から」とか公開しないでほすぃ。。
150 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:40 ID:rLfxQ17l
>>114みたいなことを書いたらそうなりますです。>139さん
170 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:42 ID:rLfxQ17l
負荷が高そうなサーバにも入れて見ます。
217 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:49 ID:rLfxQ17l
一定期間でログは消しますです。
0310デフォルトの名無しさん
NGNG新スレ立ててくだサーい
これ以上の復旧は無いです。残念ながら、
0311デフォルトの名無しさん
NGNG法律は必要最小限のことしか決められんよ、あとはルールまかせだ。
0312デフォルトの名無しさん
NGNG迂闊にもワラタ
0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNG御社がスポンサーをしているラジオ番組で
『2chの書き込みをあまり真に受けて騒ぐのもどうか…』
などというコメントが出されていましたが、
現在行われている損害賠償請求訴訟への影響などを考えても好ましくないと思われますが…
なんていうような内容の投書をするヤツが出そうな予感
0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNGラウンジとかは任意ID。メル欄に文字入れるとIDが???になる
パソコン一般板などはIDすらない
0319デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNG0323デフォルトの名無しさん
NGNG0324デフォルトの名無しさん
NGNGなどと言ってみる。
0325デフォルトの名無しさん
NGNG<血液型A型の一般的な特徴>(見せかけの優しさ・もっともらしさ(偽善)に騙されるな!)
●とにかく気が小さい(神経質、臆病、二言目には「世間」、了見が狭い)
●他人に異常に干渉する(しかも好戦的・ファイト満々でキモイ)
●自尊心が異常に強く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようとする
(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際にはたいてい、内面的・実質的に負けている)
●「常識、常識」と口うるさいが、実はA型の常識はピントがズレまくっている(日本の常識は世界の非常識)
●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者に弱く、弱い者には強い)
●あら探しだけは名人級(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす)
●基本的に悲観主義でマイナス思考に支配されているため、性格がうっとうしい(根暗)
●一人では何もできない(群れでしか行動できないヘタレ)
●少数派の異質、異文化を排斥する(差別主義者、狭量)
●集団によるいじめのパイオニア&天才(陰湿&陰険)
●悪口、陰口が大好き(A型が3人寄れば他人の悪口、裏表が激しい)
●他人からどう見られているか、体裁をいつも気にしている(「世間体命」、「〜みたい」とよく言う)
●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度も言う、知障)
●表面上意気投合しているようでも、腹は各自バラバラで融通が利かず、頑固(本当は個性・アク強い)
●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う)
●自ら好んでストイックな生活をし、ストレスを溜めておきながら、他人に猛烈に嫉妬する(不合理な馬鹿)
●執念深く、粘着でしつこい(「一生恨みます」タイプ)
●自分に甘く他人に厳しい(自分のことは棚に上げてまず他人を責める。しかも冷酷)
●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(他人をけなして相対的に自分の立場を引き上げようとする等)
それと、O♀はエコヒイキきつくて、冷酷だからな。
A♂の異質排除×O♀の冷酷=差別・いじめ とあいなる。
0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNG同じくネラーの後輩がしつこく、2ちゃん話に誘ってくる。
それも周りに人がたくさんいるときに。
鬱だ。
なぜアイツは、人の多いところで 2ちゃん話をしたがるのだろう。。。
0329デフォルトの名無しさん
NGNG/ /
/ 二)てヽ
\ ニ) ノ
/ /
/ /
( < /\
\ \//\\
( ・∀・) ヘミ )
/ /\\
_/ / //
(⌒ __/ //
) | ( \
( 丿 ヽO∞
∞O
0330デフォルトの名無しさん
NGNG匿名掲示板の悪弊をできる限り削減するのがひろゆきに期待されることでしょうな。
その意味でも、反論がなければ削除、ってのは正しいと思います。
正しいことと正しくないことがごちゃまぜー(正しいことの方が多いけど)。
0331デフォルトの名無しさん
NGNGlive/tmpとかwww2とかが一定以下に下がらないのはなぜですか。
0332山崎渉
NGNG0333デフォルトの名無しさん
NGNG0万円の損害賠償などを求めた訴訟の控訴審判決が25日、東京高裁であった。
久保内卓亞裁判長は400万円の支払いと書き込みの削除を命じた一審・東京地裁判決を支持し、管理人側の控訴を棄却した。
問題となったのは、昨年1月以降、2ちゃんねるの「ペット大好き掲示板」内に匿名で書き込まれた「ヤブ医者」「動物実験」などの発言。
久保内裁判長は、一審判決と同様に「匿名の発言について、被害者が責任追及することは不可能だ。削除できるのは管理人だけであり、他人
の名誉を棄損する発言が書き込まれたときは、管理人には直ちに削除する義務がある」と述べた。 (14:56)
http://www.asahi.com/national/update/1225/027.html
高裁でも負けたみたいだが、どうするよ?
>まえスレ:http://qb.2ch.net/test/read.cgi/accuse/1041007818/
0334山崎渉
NGNG0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNG論文にしますので,ここには書きません.
0337not 1
NGNG最初に、全ての出場者に0点の得点が与えられます
次に↓の勝負を総当りで行い、最終的に
得点が一番大きかったものを勝者とします
勝負方法
対戦者同士に100点ずつを与え、それを両者の持ち点とします
次に、両者が持ち点以下の点数を出して勝負します
その結果、小さい点数を出した方が負けです
勝負終了後、勝負の結果にかかわらず(引き分けを含む)
持ち点から勝負に使用した点数が引かれます
また、この勝負に2回負けた方の持ち点は0点になります
以上の勝負を繰り返し、どちらかの持ち点が0点になるまで続けます
最後に、両者の残っている持ち点が得点に加算されます
以上ですが、出来れば、Win上でコンパイル&実行出来るソースであれば
何でもOKにしたいのですが、さすがに最初からでは無理があるので
当面はC,C++オンリーの関数としてやりたいと思います
関数の呼び出し方法等は、暫く反応を見てから考えます
と、こんな所ですが、どうでしょうか?
では、また明日来ます
0338山崎渉
NGNG0339337
NGNG0340デフォルトの名無しさん
NGNG03411
NGNG0342デフォルトの名無しさん
NGNG状況:とあるスレが999逝ってます。2人で1000とり合戦中
書き込むタイミングが同じだと0点づつ、違ったら早い方+1点、遅い方−1点。
タイミングは適当にいくつか決める(早い、そこそこ、遅いの3つとか)
0343デフォルトの名無しさん
NGNG0344デフォルトの名無しさん
NGNG0345デフォルトの名無しさん
NGNG0346デフォルトの名無しさん
NGNG漏れもDAT落ちしそうなの気になってたんだよね。
でも、まぁいいかと思ってほっといたんだけど。
0347山崎渉
NGNG0348山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0349デフォルトの名無しさん
NGNGは既出でつか?
03511
NGNG0352デフォルトの名無しさん
NGNG「PGのジレンマ大会」とかどうですかね?
責任のなすりあいと良心の呵責を関数化します。
0353デフォルトの名無しさん
NGNGこんなのはどうよ?
0354デフォルトの名無しさん
NGNG0355山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNG0358山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0359デフォルトの名無しさん
NGNG0360山崎 渉
NGNG0361山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0362山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0363<
NGNG0364あぼーん
NGNG0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNG$nakata->pass($takahara);
0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNG0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNG0373デフォルトの名無しさん
NGNG目的・勝利条件:
・じゃんけんゲームに勝ち、借金を返済する事。(カイジの場合、700万ぐらい?)
・ゲームを終了した時点で★を3つ守り抜くこと。
・ジャンケンカードを全て消費すること。
初期条件:
・元金ゼロ(カイジの場合、借金700万だから参加者も同条件がいいかな?)
・各一人に★は3つ。
・ただし親元から借金で1000万まで借りられる。(30歳以上は500万まで)
・金を親元から借りた場合、利子が発生する。(でも今回いらない?)
・ジャンケンカード12枚(スートはランダム。)
・ジャンケンカードの全体の枚数は参加者の数で変動する。(参加者×12)
基本ルール
・二人同士の相手を決め、自分の★を1つずつ出し合い、じゃんけんを行う。
じゃんけんをする際、ジャンケンカードを1枚ずつ消費する。
勝者は賭けた★を2つ手に入れることができる。
敗者は賭けた★を1つ失う。
その他ルール
・★やジャンケンカードは参加者同士でトレードが行える。(初期条件の金が影響)
・★は親元が回収する場合、1個300万円。ただし初期条件の★3個は差し引かれる。
こんな感じです。
ルールに抜けあったら補足してください。
結構むずかしそうな・・・。
漫画もう一度読み直してこようかな。
0374デフォルトの名無しさん
NGNGその他:
・全体の残りカード枚数と、そのグー・チョキ・パーの内訳は
電光掲示板で誰でも知ることができる。
・他人同士のジャンケン勝負は、観察することができる。(記録し、傾向を知ることができる)
ゲームオーバーの条件:
・ゲーム中に★を全てなくした者。
・ゲーム終了時に★が3個に満たなかった者。
・ゲーム中にジャンケンカードを全て使い切れなかった者。
ゲーム終了時:
・余った★は親元が1つ300万円で買い取ってくれる。
・ただしその前に参加者同士でトレード可能。(★3個に満たない参加者の救済処置。当然相場が動く)
0375デフォルトの名無しさん
NGNGゲーム中、各参加者は2分毎に以下の行動を選択することができる。
a)相手を募集し、ジャンケン勝負
b)相手を募集し、★やカードをトレード
c)なにもしない。
ただし、a)、b)で相手が募集できなかったらc)と同じ。
つまり、ゲーム中n時間x30通りの行動ができる。
0376デフォルトの名無しさん
NGNGそれに勝てるようにチューニングする。
これだと最初にソース出した方が不利だし、参加者は減るだろう。
ソース非公開でも参加できる方がいいのではないか。
0377デフォルトの名無しさん
NGNG私はこの三週間ずっと「チョキ」をだしてきました。
チョキチョキチョキときたから、もうチョキがない
@@@ などという読みはそれほど間違ってなんかいない。
@゜д゜) ○ .しかし、一歩間違えるとそこがスキとなる。
(つ つ│ 正しいとなると人はとたんに疑わなくなる。
(_)_) まして、その理で勝ってきたとなればなおさらだ。
理ある故に無防備・・・・・・
必ず殺せる・・・・!
それじゃあ星はもらっていく。悪く思うな・・・
さて、次回は
「タラちゃん 船井に騙される」
「カツオ 『グー』を買い占める」
「波平 別室行き」
の3本です。
0378デフォルトの名無しさん
NGNG0379デフォルトの名無しさん
NGNG>目的・勝利条件
を満たした時点で、すぐに上がることができるわけだから、
利子はあった方が良いと思う。
さもないと全員1000万借りることになるし。
マンガのゲーム時間て何時間だっけ?
2時間とか、たしかそんなに掛からなかった筈。
ゲーム喫茶に置いてあるかな
0380デフォルトの名無しさん
NGNG貸し付けは100万単位で下限は100万、限度は1000万。
かならず100万以上は借りなければならない。
貸し付け金の金利は利率1.5%の10分複利。
0381デフォルトの名無しさん
NGNGまずは対戦の場がないとな
0382デフォルトの名無しさん
NGNG実行するフレームワーク作ればいいんじゃないの。
■ このスレッドは過去ログ倉庫に格納されています