JavaScriptっぽい。

『JavaScriptっぽい。』の更新情報やJavaScriptに関する日記。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告|
  3. トラックバック(-)|
  4. コメント(-)

トランプ3枚当てスクリプト(その5)

本日正解発表分。 今回は重複した回答を削除する機能を実装してみた。


<script type="text/javascript">
/*
*1.3枚とも奇数			
*2.1枚目 > 2枚目 > 3枚目
*3.マークは2種類で赤が多い
*4.3を仕様
*5.1枚目は13

	1.1枚目の記号はランダムで数字は13
	2.1枚目の記号が黒なら2枚目は赤、1枚目が赤なら2枚目はランダム
	3.2枚目の数字は[11,9,7,5,3]のうちのどれか
	4.1枚目と2枚目の記号が同じなら3枚目はそれ以外の記号でランダム
	5.3枚目の記号が4.でない場合、1枚目が黒なら2枚目と同じ、1枚目が赤で2枚目が黒なら1枚目と同じ、両方赤ならハートかダイヤ
	5.3枚目の数字は2枚目が[11,9,7,5]なら3、2枚目が3なら1
*/

Array.prototype.random_num = null;
Array.prototype.random_elm = function(){
	this.random_num = Math.floor ( Math.random() * this.length );
	return this [this.random_num];
}

function choice_card(){
	var mark = ["heart","dia","spade","club"];
	var red_mark = ["heart","dia"];
	var num_ary = [11,9,7,5,3];
	var card = [];

	var first_mark = mark.random_elm();
	var first_num = 13;

	var first_random_num = mark.random_num;
	var first_bool = ( first_mark == "spade" || first_mark == "club" );

	var second_mark = first_bool ? red_mark.random_elm() : mark.random_elm();
	var second_num = num_ary.random_elm();
	
	var second_bool = ( second_mark == "spade" || second_mark == "club" );

	var third_mark;
	if( first_mark == second_mark ) {
		mark.splice( first_random_num , 1 );
		third_mark = mark.random_elm();
	}
	else 	third_mark = first_bool ? second_mark : ( second_bool ? first_mark : red_mark.random_elm() );
	var third_num = ( second_num == 3 ) ? 1 : 3;

	card[0] = first_mark + first_num;
	card[1] = second_mark + second_num;
	card[2] = third_mark + third_num;
	return card.join(",");	
}

var choiced_card = [];
var i , i_max;

for( i = 0 , i_max = 20 ; i < i_max ; i++ ){
	choiced_card[i] = choice_card();
}

var choiced_str = choiced_card.join(",");
var reg_exp;
var str = "";
i = 0;

while(choiced_card[i]){
	reg_exp = new RegExp( choiced_card[i] , "g" );
	if( ( choiced_str.match( reg_exp ) ).length > 1 ) {
		if( str.indexOf( choiced_card[i] ) > -1 ) {
			choiced_card.splice( i , 1 );
			i--;		//spliceするとインデックス番号がずれるのを修正
		}
		str += choiced_card[i];	
	}
	i++;
}

var joint_array = choiced_card.join("<br>");
document.write ( joint_array );

</script>

場合の数を正確に把握するのは面倒なので、出来た回答の配列から重複したものを排除しています。 forループを使うといろいろ問題があるので、whileループにしてみました。

スポンサーサイト
  1. 2005/11/16(水) 23:05:10|
  2. トランプ3枚当て|
  3. トラックバック:0|
  4. コメント:0
<<forループでも大丈夫 | ホーム | トランプ3枚当てスクリプト(その4)>>

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://javascript.blog3.fc2.com/tb.php/21-d532fa38

PUREST

06 | 2017/07 | 08
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

Recent Entries

Recent Comments

Recent Trackbacks

Archives

Category

Links

Search

Recommend

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