Project Euler 117

by uwi forked from Project Euler 116 (diff: 11)
@see http://projecteuler.net/index.php?section=problems&id=117
♥0 | Line 42 | Modified 2009-06-17 19:59:53 | 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/gKIA
 */

// forked from uwi's Project Euler 116
package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.getTimer;
    // @see http://projecteuler.net/index.php?section=problems&id=117
    public class Euler117 extends Sprite {
        private var _tf : TextField;
  
        public function Euler117() {
            _tf = new TextField();
            _tf.width = 465;
            _tf.height = 465;
            addChild(_tf);
            
            var s : int = getTimer();
            _tf.appendText(solve().toString() + "\n");
            var g : int = getTimer();
            _tf.appendText((g - s).toString() + " ms\n");
        }
        
        private var _cache : Array;
        private const N : int = 50;
        
        private function solve() : Number
        {
            _cache = [];
            var sum : Number = 0;
            var i : int = 0;
            
            for(i = 0;i <= N;i++)_cache[i] = -1;
            _cache[0] = 1;
            sum += nReplace(N, [1, 2, 3, 4]);
            return sum;
        }
        
        private function nReplace(n : int, lens : Array) : Number
        {
            if(_cache[n] != -1)return _cache[n];
            
            var sum : Number = 0;
            for each(var len : int in lens){
                if(n >= len){
                    sum += nReplace(n - len, lens);
                }
            }
            _cache[n] = sum;
            return sum;
        }
    }
}