配列内の重複を抜き出す超能力
上部スライドバーで総数とランダム値が変えられます。
数値を大きくして、エスパーらしく止まっていく感じをこだわりました。
♥0 |
Line 137 |
Modified 2011-01-06 20:24:39 |
MIT License
archived:2017-03-20 14:40:04
ActionScript3 source code
/**
* Copyright kawamura ( http://wonderfl.net/user/kawamura )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/sOJZ
*/
package {
import com.bit101.components.*;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.utils.*;
import flash.text.TextField;
public class Main extends MovieClip {
//元の数
private var num:Number=11;
//ランダム具合 1 ~ 100
private var ran:Number=90
private var moto_ar:Array;
private var num_slider:HSlider;
private var num_label:Label;
private var random_slider:HSlider;
private var random_label:Label;
private var submit:PushButton;
private var txt:TextField;
public function Main() {
num_slider = new HSlider();
addChild(num_slider);
num_slider.x=110;
num_slider.y=5;
num_slider.width=300
num_slider.maximum=5000;
num_slider.minimum=1;
num_slider.addEventListener(Event.CHANGE, num_sliderChange);
num_slider.value=num;
num_label=new Label();
addChild(num_label)
num_label.x=410;
num_label.y=0;
num_label.text="all : "+String(num-1);
//
random_slider = new HSlider();
addChild(random_slider)
random_slider.x=110;
random_slider.y=20;
random_slider.maximum=99;
random_slider.minimum=0;
random_slider.tick
random_slider.addEventListener(Event.CHANGE, random_sliderChange);
random_slider.value=ran;
random_label=new Label();
addChild(random_label);
random_label.x=210;
random_label.y=15;
random_label.text="random : "+String(ran/100);
//
submit = new PushButton()
addChild(submit);
submit.x=5;
submit.y=5;
submit.label="submit";
submit.addEventListener(MouseEvent.CLICK,cal);
//
txt=new TextField();
txt.border=true;
txt.multiline=true;
txt.wordWrap=true;
addChild(txt);
txt.x=5;
txt.y=35;
txt.width=450;
txt.height=420;
//
addEventListener(Event.ENTER_FRAME,init)
}
private function init(evt:Event):void{
removeEventListener(Event.ENTER_FRAME,init);
cal()
}
private function cal(evt:Event = null):void{
var i:uint;
submit.enabled=false;
moto_ar=[];
for(i=0;i<num;i++){
randomPush(i,moto_ar)
}
moto_ar=Shuffle(moto_ar);
txt.text="0から" + String(num-1) + "までの数字で重複して" +moto_ar.length+ "個はいった配列があります。さらにシャッフルされています。\n";
txt.appendText(moto_ar+"\n");
txt.appendText("高速配列整理!!\n");
txt.scrollV = txt.maxScrollV+txt.bottomScrollV;
var id:int=setTimeout(electric_parade,2000);
}
private function electric_parade(event:Event = null):void{
removeEventListener(Event.ENTER_FRAME,electric_parade);
var _ar:Array=Dublin(moto_ar);
var i:uint;
var l:uint=_ar.length;
for(i=0;i<l;i++){
txt.appendText(String(_ar[i])+"\n");
}
txt.appendText("はいーーっ");
txt.scrollV = txt.maxScrollV
submit.enabled=true;
}
private function randomPush(i:uint,_ar:Array):void{
_ar.push(i);
if(Math.random()<ran/100){
randomPush(i,_ar);
}
}
//Dublinダブリンとはアイルランドの首都です。
private function Dublin(m_ar:Array):Array{
var i:uint;
var r_ar:Array=[];
var l:uint=m_ar.length;
m_ar.sort(Array.NUMERIC)
r_ar.push(m_ar[0]);
for(i=1;i<l;i++){
if(m_ar[i] != r_ar[r_ar.length-1]){
r_ar.push(m_ar[i]);/**/
}
}
return r_ar;
}
private function Shuffle(_ar:Array):Array{
var r_ar:Array=new Array();
var i:uint;
var l:Number=_ar.length;
var math_ar:Array = new Array();
for (i = 0; i<l; i++) {
math_ar.push(i);
}
for (i= 0; i<l; i++) {
var n:Number = Math.floor(Math.random()*math_ar.length);
r_ar.push(_ar[math_ar[n]]);
math_ar.splice(n, 1);
}
return r_ar;
}
private function num_sliderChange(event:Event):void{
num = num_slider.value;
num_label.text="all : "+String(num-1);
}
private function random_sliderChange(event:Event):void{
ran =random_slider.value;
random_label.text="random : "+String(ran/100);
}
}
}