もどる aの日記

プレイヤーデータプロフィール日記最近の出来事ダンジョンスコア紹介リンク
記事一覧新着ブログ人気ブログ

スラリン島393歩 2014-12-02 02:02 a ★2★ 861 pv
30フロアあるのにこの記録はすごすぎでしょ って思ったので検証

次の条件で、1フロアを13歩以内に行ける確率は約50%
・壁がない
・初期位置と階段の位置はランダム
 ※同じ位置になることはない
・最短距離で階段を目指す
 ※具体的には「まだ行っていない部屋のうち最も近い場所を目指す」という行動を繰り返す
  (2×2マップなので、これが常に最適行動)

ということで、イベントフロアで22歩削られることを考えると、通常フロア28階分を271歩出歩いたことになる。
上の条件のもとで、30フロアを393歩以内に走破できる確率は約33%

実際には
・壁がある(しょうがない)
・装備を整える必要がある
・店が出る(19歩必要なのでロス)
・迷路が出る(萎える)
・ワープ罠で飛ばされる(本格的に萎える)
などなど、困難が山積なので、現実的にはかなり低い数値になりそう。
単純に階段までの最短距離が11歩でも、壁に阻まれて2歩分迂回すれば15歩になってしまうわけで。

例えば28フロア分を平均11歩で進める確率は約1.5%
多分実際にはこの辺りの確率か、もっと低いくらいなんじゃないかなと思ってる。
たった2回でこの記録が出たのは幸運。


以下プログラム
3×3のバージョンを焼き直せばいいかと思ったら、全然別物だったから一から書いた。
RANDOMIZE省略してる手抜き


int main(){
int a[37]={},x[4],t[4],n=0,i,s;
while(n<RAND_MAX){
for(i=0;i<4;i++){x[i]=rand()%19;t[i]=abs(x[i]-9);}
if(!(s=abs(x[0]-x[2])+abs(x[1]-x[3])))continue;
if(((t[0]<=t[1])&&((x[0]<10&&x[2]<10)||(x[0]>9&&x[2]>9))&&((x[1]<10&&x[3]>9)||(x[1]>9&&x[3]<10)))||
((t[0]>t[1])&&((x[1]<10&&x[3]<10)||(x[1]>9&&x[3]>9))&&((x[0]<10&&x[2]>9)||(x[0]>9&&x[2]<10))))s+=((t[0]<=t[1])?(t[0]<t[2])?t[0]:t[2]:(t[1]<t[3])?t[1]:t[3])*2;
a[s]++;n++;
}
for(i=1;i<37;i++)printf("%2d %5d\n",i,a[i]+=a[i-1]);
t[2]=0;
for(n=0;n<10000;n++){
s=0;
for(i=0;i<28;i++){
t[0]=0;t[1]=rand();
while(1)if(t[1]<a[++t[0]])break;s+=t[0];
}
if(s<372)t[2]++;
}
printf("%d\n",t[2]);
}

プレイヤー:
パスワード:
コメント: