flash on 2010-5-10

by uwi
♥0 | Line 58 | Modified 2010-05-10 15:16:09 | 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/56cZ
 */

package {
    import flash.display.Sprite;
    import flash.text.TextField;

    public class Test extends Sprite {
        private var _tf : TextField;
  
        public function Test() {
            _tf = new TextField();
            _tf.width = 465;
            _tf.height = 465;
            addChild(_tf);

            var N : uint = 28;
            var divs : Vector.<uint> = enumDivs(N);
            divs.sort(Array.NUMERIC);
            
            var len : uint = 1 << divs.length;
            var j : uint, p : uint;
            var sums : Array = new Array(N);
            for(var i : uint = 1;i < len;i++){
            		var sum : uint = 0;
            		for(j = i, p = 0;j > 0;j >>>= 1, p++){
            			if(j & 1)sum += divs[p];
            		}
            		if(sum <= N && !sums[sum-1]){
            			var con : Array = [];
	            		for(j = i, p = 0;j > 0;j >>>= 1, p++){
	            			if(j & 1)con.push(divs[p]);
	            		}
            			sums[sum-1] = con.join("+");
            		}
            }
            
            var f : Boolean = true;
            for(i = 0;i < N;i++){
            		if(sums[i]){
	            		tr((i+1) + "=" + sums[i]);
            		}else{
            			f = false;
            		}
            }
            tr(f);
        }
        
        private function enumDivs(n : uint) : Vector.<uint>
        {
        		var ret : Vector.<uint> = new Vector.<uint>();
        		for(var i : uint = 1;i * i <= n;i++){
        			if(n % i == 0){
        				ret.push(i);
        				if(i * i != n){
        					ret.push(n / i);
        				}
        			}
        		}
        		return ret;
        }

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