Project Euler 265
@see http://projecteuler.net/index.php?section=problems&id=265
♥0 |
Line 55 |
Modified 2009-12-02 03:53:37 |
MIT License
archived:2017-03-30 04:44:35
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/a5z4
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.getTimer;
// @see http://projecteuler.net/index.php?section=problems&id=265
public class Euler265 extends Sprite {
private var _tf : TextField;
public function Euler265() {
_tf = new TextField();
_tf.width = 465;
_tf.height = 465;
addChild(_tf);
var s : int = getTimer();
tr(solve(5));
var g : int = getTimer();
tr((g - s) + " ms");
}
private var _used : Array;
private var _lim : int;
private var _digit : uint;
private var _N : int;
private function solve(N : int) : Number
{
_N = N;
_lim = 1 << N;
_used = new Array(1 << N);
for(var i : int = 0;i < _used.length;i++)_used[i] = 0;
_digit = 0;
_used[0] = 1;
return dfs(1, 0);
}
// d : 深さ
// u : 上位の数(N-1 bit)
private function dfs(d : int, u : uint) : Number
{
if(d == _lim){
// 最後の0を削る
return _digit >>> (_N - 1);
}
var sum : Number = 0;
for(var i : uint = 0;i <= 1;i++){
var v : uint = (u << 1) | i;
if(_used[v] == 0){
_used[v] = 1;
_digit = (_digit << 1) | i;
sum += dfs(d + 1, v & ((_lim - 1) >> 1));
_digit >>>= 1;
_used[v] = 0;
}
}
return sum;
}
private function tr(...o : Array) : void
{
_tf.appendText(o + "\n");
_tf.scrollV = _tf.maxScrollV;
}
}
}