Fisher-Yatesアルゴリズムでシャッフル
♥0 |
Line 81 |
Modified 2010-01-07 10:36:10 |
MIT License
archived:2017-03-20 15:41:35
ActionScript3 source code
/**
* Copyright takimo ( http://wonderfl.net/user/takimo )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/mFWO
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.MouseEvent;
import flash.text.TextFormat;
public class FisherYatesTest extends Sprite {
private var _debug:TextField;
public function FisherYatesTest() {
_debug = new TextField();
_debug.text = " ";
var format:TextFormat = new TextFormat();
format.font = '_等幅';
format.size = 10;
_debug.height = 400;
_debug.width = 400;
_debug.border = true;
_debug.text = "どのくらいバラけるかのテスト、画面をクリックすると再度シャッフルされます。\n";
_debug.setTextFormat(format);
this.addChild(_debug);
_debug.appendText("");
start();
stage.addEventListener(MouseEvent.CLICK, stage_clickHandler);
}
public function start():void
{
var results:Array = new Array();
var array:Array = [0,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];
var loop:int = 30;
for(var h:int = 0;h < loop; h++)
{
results[h] = [];
for(var g:int = 0;g < array.length; g++)
{
results[h][g] = 0;
}
}
for (var i:int = 0; i < loop; i++)
{
var shuffle:Array = ArrayUtils.shuffle(array);
for (var j:int = 0; j < shuffle.length; j++)
{
var number:int = shuffle[j];
results[j][number]++;
}
}
for (var k:int = 0; k < results.length; k++)
{
var tmp:Array = results[k];
for (var l:int = 0; l < tmp.length; l++)
if(tmp[l])
_debug.appendText("■");
else
_debug.appendText("□");
_debug.appendText("\n");
}
}
public function stage_clickHandler(event:MouseEvent):void
{
_debug.text = "\n";
start();
}
}
}
class ArrayUtils
{
public static function shuffle(array:Array):Array
{
var result:Array = array.concat();
var i:int = result.length;
var j:int;
var tmp:Object;
while (i)
{
j = Math.floor(Math.random() * i);
tmp = result[--i];
result[i] = result[j];
result[j] = tmp;
}
return result;
}
}