配列内の重複を抜き出す超能力

by kawamura
上部スライドバーで総数とランダム値が変えられます。

数値を大きくして、エスパーらしく止まっていく感じをこだわりました。
♥0 | Line 137 | Modified 2011-01-06 20:24:39 | MIT License
play

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);
        }
    }
}