Project Euler 126

by uwi
@see http://projecteuler.net/index.php?section=problems&id=126
♥0 | Line 47 | Modified 2009-08-15 16:46:50 | 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/cC40
 */

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

        // L(a,b,c,d)=2(ab+bc+ca)+4(d-1)(a+b+c)+4(d-1)(d-2)
        // d : depth
        // C(n) = #{(a,b,c,d)|L(a,b,c,d)=n}
        private function solve(M : int) : int
        {
            var max : int = 0;
            var ct : Array = new Array(M / 2);
            for(var i : int = 0;i < M / 2;i++)ct[i] = 0;
            var dsup : int = Math.sqrt((M - 1) / 2);
            for(var d : int = 0;d <= dsup;d++){
                var p : int = 2 * d * (d - 1);
                var asup : int = (M / 2 - 2 * d * d - 1) / 2 / (d + 1);
            for(var a : int = 1;a <= asup;a++){
            for(var b : int = 1;b <= a;b++){
            for(var c : int = 1;c <= b;c++){
                var v : int = a * b + b * c + c * a + 2 * d * (a + b + c) + p;
                if(v < M / 2){
                    ct[v]++;
                }else{
                    break;
                }
            }}}}
            for(i = 0;i < M / 2;i++){
                if(ct[i] == 1000)t("1000!!\t" + (i * 2));
                if(max < ct[i])max = ct[i];
            }
            return max;
        }

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