Project Euler 151

by uwi
@see http://projecteuler.net/index.php?section=problems&id=151
♥0 | Line 49 | Modified 2009-07-26 05:07: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/jg8h
 */

package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.getTimer;
    // @see http://projecteuler.net/index.php?section=problems&id=151
    public class Euler151 extends Sprite {
        private var _tf : TextField;
  
        public function Euler151() {
            _tf = new TextField();
            _tf.width = 465;
            _tf.height = 465;
            addChild(_tf);
            
            var s : int = getTimer();
            t(solve());
            var g : int = getTimer();
            t((g - s) + " ms");
        }

        private function solve() : Number
        {
            var env : Array = [0, 1, 0, 0, 0, 0];
            return rec(env, 0) - 2.0;
        }
        
        private function rec(env : Array, d : int) : Number
        {
            if(d == 16){
                return 0;
            }
            
            var sum : int = 0;
            for each(var v : int in env)sum += v;
            var p : Number = sum == 1 ? 1.0 : 0.0;
            for(var i : int = 1;i <= 5;i++){
                if(env[i] == 0)continue;
                var nenv : Array = env.concat();
                nenv[i]--;
                if(i <= 4){
                    for(var j : int = i + 1;j <= 4;j++){
                        nenv[j]++;
                    }
                    nenv[5]++;
                }
                p += env[i] / sum * rec(nenv, d + 1);
            }
            return p;
        }

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