スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

解決したああああああああああああ( ゚∀゚)o彡゜

                                 ,.へ
  ___                             ム  i
 「 ヒ_i〉                            ゝ 〈
 ト ノ                           iニ(()
 i  {              ____           |  ヽ
 i  i           /__,  , ‐-\           i   }
 |   i         /(●)   ( ● )\       {、  λ
 ト-┤.      /    (__人__)    \    ,ノ  ̄ ,!
 i   ゝ、_     |     ´ ̄`       | ,. '´ハ   ,!
. ヽ、    `` 、,__\              /" \  ヽ/
   \ノ ノ   ハ ̄r/:::r―--―/::7   ノ    /
       ヽ.      ヽ::〈; . '::. :' |::/   /   ,. "
        `ー 、    \ヽ::. ;:::|/     r'"
     / ̄二二二二二二二二二二二二二二二二ヽ
     | 答 |     コ ロ ン ビ ア       │|
     \_二二二二二二二二二二二二二二二二ノ


「レア度指定ランダム」の質問について
四季さんのコメントで完全解決しましたww


プログラムを組むのは2時間程

興味を持たれた方は是非見てください(゜∀゚()


まずは、普通のランダム画像表示のソースです。
<script language="JavaScript">
var img = new Array();

img[0] = "1つ目の画像URL";
img[1] = "2つ目の画像URL";
img[2] = "3つ目の画像URL";
img[3] = "4つ目の画像URL";

/* 以降同じように増やしてください */

var ran = Math.floor(Math.random() * img.length);
document.write('<img src=',img[ran],' border="0">');
</script>


以下、レア度指定版のソースです。
オレンジ色・・・追加・変更した部分
赤色・・・自由に変更できる部分
緑色・・・コメントアウト
<script language="JavaScript">
var img = new Array();
var rare = new Array();
var imgmax = 4; //画像の総数
var raremax = 10; //レア度の最大値

for(i=0;i<imgmax;i++) rare[i] = raremax; //全てのレア度を最大値に設定

//imgに画像を、rareにレア度を設定(※ 1が一番出にくい)
//レア度の設定は任意です。
//※ レア度の数字には、”(ダブルクォーテーション)を付けないでください。

img[0] = "1つ目の画像URL";
img[1] = "2つ目の画像URL";
img[2] = "3つ目の画像URL";
rare[2] = 1; //例として、3つ目の画像レア度を1に設定しています。
img[3] = "4つ目の画像URL";
rare[3] = 5; //上と同様

/* 以降同じように増やしてください */

//※ 以下、改変いりません。
left=0;
right=imgmax-1;
while(left!=right){
var lsum = 0;
var rsum = 0;
var mid=Math.floor((left+right)/2);

for(j=left;j<=mid;j++) lsum+=rare[j];
for(k=mid+1;k<=right;k++) rsum+=rare[k];

var se = Math.floor(Math.random() * (lsum+rsum));
if(se<lsum) right=mid;
else left = mid+1;
}
//出力
document.write('<img src=',img[left],' border="0">');
</script>


img[n]の画像に対して、
rare[n]でレア度を設定できる感じのプログラムです。



for文で回すと綺麗に分かれましたOh!Yeah!!


一応for文での出力を書き出しておきます。
条件 ・imgmax = 4
    ・raremax = 10
    ・rare[1] = 5
    ・rare[2] = 2
    ・rare[3] = 1

-------出力ここから-------
img[0]は 5507 回
img[1]は 2840 回
img[2]は 1087 回
img[3]は 566 回
img[4]は 0 回
-------出力ここまで-------


img[4]が0回ですし、
「rare[0]=10、rare[1]=5 なので、img[1]はimg[0]の2倍出にくい」
という期待にも応えてるようで、
その他もいい感じで、、、

なかなか綺麗になっていますね( ゚∀゚)o彡゜

↓実際にここでスクリプトを実行できます。
レア度指定ランダムの確認



とりあえず達成感すごいWW

四季さんには本当に感謝です( ゚∀゚)o彡゜


なるほどな~って納得していただけたら嬉しいです(゜∀゚()



それじゃあ
モヤモヤも晴れたので



じゃあのOh!Yeah!!

プログラム,fc2,burogu,blog,ブログ,C言語,java,スクリプト,script,パソコン,PC,プログラミング,理系,program,質問,ランダム,確率
スポンサーサイト

コメント

四季 解決おめでとうございます!

解決おめでとうございます!

お力になれたみたいでよかったです。
自分はCを独学で軽くやってるだけで、
真面目にアルゴリズム系の勉強とかはしたことなくて、
詳しい人からしたら当り前の知識なんじゃないかと思いつつ書き込みました。

といいつつ、ぶっちゃけると、
理系はやっぱ問題みると考えちゃいますよね。
それとなにより、猫の画像がかわいすぎてw
素通りできなかったっていうのが本音です。

奇数の問題とか、ループの回し方とかちょっと大変だったかと思います。
お疲れ様でした!

四季 あ・・・

連投すみません。

奇数の問題は、Math.floor関数のおかげでさっくり解決するんですねw
お恥ずかしい・・・

こぅ >四季さん

自分は頭がかたいです(´_`。)
少し考え込むと頭がパンクします( ゚∀゚)o彡゜

コメントを見て思い出したんですが、
四季さんのアイディア(二分していく方法)は、クイックソートのやり方に結構似てます。
1年前に勉強したことなのに、すでに記憶から消し去られてました(-ω-`。)


Math.floorの件ですが、
切り捨てで正しく処理されるのかを考えて考えて。。。
結構考えた挙句、「(多分)大丈夫だろ!」ということで切り捨てにしました(゜∀゚()

それよりも、for文やif文のところを、「<=」にするか「<」にするかで1時間も考えました(´_`。)


このブログに載せてるようなjavascriptは、
大体がC言語に毛が生えた程度のものなので、
とても簡単で楽しいものです( ゚∀゚)o彡゜
一般のjavaはこれよりも冗長で綺麗なプログラムを書かなくてはいけません。

このレベルのjavaだと全然経験のない方でもできると思うので、
是非勉強してみてください!

名無し

配列imgにurlを入れるところは
img.push("http://hoge.com")
みたいにpushで入れておいて

imgmaxは指定しないでimg.lengthでimgmaxと同等の値が取り出せるはずです。

imgに値を追加したけどimgmax増やすの忘れてたってミスが無くなります

こぅ >名無しさん

ご指摘ありがとうございます!

ですが、これはあえて最初に指定しているもので

imgmaxをimg.lengthに置き換えるとすると
for(i=0;i<img.length;i++) rare[i] = raremax;
  この文が反映されません。
  この文はrare[]指定の前に置くべきものです。
  img[]とrare[]は一緒に設定していきたいので、img.lengthが使えません。
  後ろに置いて、if文でrare[]の有無を判定するのもありですが・・。

また、img.pushでURLを入れるとすると
img.push("3つ目の画像URL");
 rare[2] = 1;
 img.push("4つ目の画像URL");
 rare[3] = 5;

  rare[]を指定する際に、どの番号かわかりづらくなります。

といった理由です。

ご指摘はとてもありがたいです。
ですが今回は、このプログラムの意図としてこのようにしていますので、
その点を納得していただけたら嬉しいです。

今回のご指摘は、今後作成するプログラムの参考にさせていただきます(ノ゚ο゚)ノ

コメントの投稿

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

まとめteみた.【解決したああああああああああああ( ゚∀゚)o彡゜】

,.へ___ムi「ヒ_i〉ゝ〈トノiニ(()i{____|ヽii/__,,‐-\i}|i/(●)(●)\{、λト−┤./(__人__)\,ノ ̄,!iゝ、_|´ ̄`|,.
今日のこぅくん
テニスと映画とプログラムが好きです
頑張るぞー( ゚∀゚)o彡゜
リンク先の更新!
プロフィール

こぅです(゜∀゚()
REDSTONEの青鯖にいます。
ギルドラオス共和国に所属。

引退してます。

九州住みの大学生です(  ̄^ ̄)ゝ

・Twitter: koukunRS
・Skype: yamadashi_skype
・Discord: kou#9204
・Gmail: koukun0120@...



赤石( ゚∀゚)o彡゜
リンク
いつもより余計に回っております


こっそり
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。