Die Result Generator using Weighted Frequency
♥0 |
Line 132 |
Modified 2009-08-09 21:07:12 |
MIT License
archived:2017-03-10 02:34:59
ActionScript3 source code
/**
* Copyright kto12 ( http://wonderfl.net/user/kto12 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/5y53
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.MouseEvent;
public class FlashTest extends Sprite
{
private var tf:TextField = new TextField();
private var weightArr:Array = [0.4, 0.3, 0.2, 0.1];
private var criteriaArr:Array = new Array();
private var freqArr:Array = new Array();
//total number of iteration to run the test
private var totalIter:int = 1000;
public function FlashTest() {
// setup tf
tf.text = "hello World";
tf.width = 400;
tf.height = 400;
tf.border = true;
addChild(tf);
tf.addEventListener(MouseEvent.CLICK, function():void{runTest();printFreq();});
tf.addEventListener(MouseEvent.MOUSE_OUT, function():void{tf.text="";});
//init for mtd 3
initCriteriaArr();
//get results
runTest();
//print out results
//printOut(calcFreq().toString());
printFreq();
}//end of constructor
private function runTest():void
{
freqArr = new Array();
for(var i:int = 0; i < totalIter; i++)
{
recordFreq(getHit());
}
}
//calc hit according to weight
private function getHit():int
{
return mtd3();
}
private function mtd1():int
{
var id:int;
id = Math.floor(Math.random()*3);
return id;
}
private function mtd2():int
{
var iter:int = weightArr.length - 1;
var id:int;
var randNum:Number = Math.random();
if(randNum < weightArr[0])
{
id = 0;
}
else if(randNum < weightArr[1])
{
id = 1;
}
else
{
id = 2;
}
return id;
}
private function mtd3():int
{
var iter:int = criteriaArr.length;
var id:int;
var randNum:Number = Math.random();
var hit:Boolean = false;
for(var i:int = 0; i < iter; i++)
{
if(randNum < criteriaArr[i])
{
id = i;
hit = true;
break;
}
}
if(!hit)
{
id = iter;
}
return id;
}
private function initCriteriaArr():void
{
var iter:int = weightArr.length - 1;
var value:Number = 0;
for(var i:int = 0; i < iter; i++)
{
value += weightArr[i];
criteriaArr[i] = value;
}
printOut("criteriaArr " + criteriaArr.toString());
}
//calc freq
private function recordFreq(id:int):void
{
if(freqArr[id] == null)
{
freqArr[id] = 1;
}
else
freqArr[id]++;
}
private function calcFreq():Array
{
var arr:Array = new Array();
var iter:int = freqArr.length;
for(var i:int = 0; i < iter; i++)
{
if(freqArr[i] == null)
{
arr[i] = 0;
}
else
arr[i] = freqArr[i]/totalIter;
}
return arr;
}
//print to tf
private function printOut(input:String):void
{
tf.appendText("\n"+input);
}
private function printFreq():void
{
var iter:int = freqArr.length;
var arr:Array = calcFreq();
for(var i:int = 0; i < iter; i++)
{
tf.appendText("\n" + "[" + i + "] - " + arr[i]*100);
}
tf.appendText("\n");
}
}//end of class
}