flash on 2009-9-3

by uwi
@see http://projecteuler.net/index.php?section=problems&id=
♥0 | Line 57 | Modified 2009-09-03 04:33:23 | MIT License
play

ActionScript3 source code

/**
 * Copyright uwi ( http://wonderfl.net/user/uwi )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/2S9c
 */

package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.getTimer;
    // @see http://projecteuler.net/index.php?section=problems&id=
    public class Euler extends Sprite {
        private var _tf : TextField;
  
        public function Euler() {
            _tf = new TextField();
            _tf.width = 465;
            _tf.height = 465;
            addChild(_tf);
            
            var s : int = getTimer();
            t(solve(10));
            var g : int = getTimer();
            t((g - s) + " ms");
        }
        
        private function solve(M : int) : int
        {
            var base : Array = new Array(M);
            var i : int, j : int;
            for(i = 0;i < M;i++)base[i] = i;
            
            var sum : Number = 0;
            var div : Number = 0;
            for(i = 0;i < 100000;i++){
                var a : Array = base.concat();
                // shuffle
                for(j = 0;j < M - 1;j++){
                    var ind : int = int(Math.random() * (M - j - 1)) + j + 1;
                    var d : int = a[ind];
                    a[ind] = a[j];
                    a[j] = d;
                } 
                
                var used : Array = new Array(M);
                var maxct : int = 0;
                var ct : int = 0;
                for(j = 0;j < M;j++){
                    used[a[j]] = true;
                    if(used[a[j] - 1] && used[a[j] + 1]){
                        ct--;
                    }else if(!used[a[j] - 1] && !used[a[j] + 1]){
                        ct++;
                        if(maxct < ct)maxct = ct;
                    }
                }
                
                sum += maxct;
                div++;
                if((i % 10000) == 0){
                    t(sum / div);
                }
            }
            
            return 0;
        }

	private function t(o : *) : void
	{
            _tf.appendText("" + o + "\n");
	}
    }
}