Project Euler 232

by uwi
@see http://projecteuler.net/index.php?section=problems&id=232
♥0 | Line 50 | Modified 2010-05-05 20:35:00 | 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/a6BV
 */

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

        private function solve(N : uint) : Number
        { 
        		var M : uint = N+1;
        		var p : Array = new Array(M*M);
        		for(var i : uint = 0;i <= N;i++)p[i] = 0;
        		for(var v : uint = 1;v <= N;v++){
        			var tmax : uint = Math.ceil(Math.log(v)/Math.log(2))+1;
        			for(var u : uint = 1;u <= N;u++){
        				var max : Number = -1;
        				var maxt : int = -1;
        				for(var t : uint = 1;t <= tmax;t++){
        					var vm : int = v - (1 << (t-1));
        					var puvt : Number = (
        						(vm <= 0 ? 1 : p[u*M+vm])+
        						(vm <= 0 ? 1 : p[(u-1)*M+vm])+
        						p[(u-1)*M+v]*((1<<t)-1)
        						) / ((1<<t)+1);
//        					if(puvt > max)max = puvt;
        					if(puvt > max){
        						max = puvt;
        						maxt = t;
        					}
        				}
        				p[u*M+v] = max;
        			}
        		}
        		
        		return (p[(N-1)*M+N]+p[N*M+N])/2;
        }

        private function tr(...o : Array) : void
        {
            _tf.appendText(o + "\n");
            _tf.scrollV = _tf.maxScrollV;
        }
    }
}