Project Euler 2
forked from Project Euler 1 (diff: 57)
@see http://projecteuler.net/index.php?section=problems&id=2
ActionScript3 source code
/**
* Copyright potix2 ( http://wonderfl.net/user/potix2 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/yFRo
*/
// forked from potix2's PE001
//@see http://projecteuler.net/index.php?section=problems&id=2
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.events.Event;
public class PE002 extends Sprite {
private function main():void {
setToTable(1, 0);
setToTable(2, 1);
var sum:Number = 0;
var i:int = 1;
var f:int = fib(1);
while(f < 4000000) {
i++;
f = fib(i);
if ( f % 2 == 0 ) {
log('*' + f);
sum += f;
}
else {
log(' ' + f);
}
}
log('sum=' + sum);
}
private function fib(n:int):int {
if ( existsToTable(n) ) {
return getFromTable(n);
}
else {
var ret:int = fib(n - 1) + fib(n - 2);
setToTable(n, ret);
return ret;
}
}
// setup
private var _console:TextField;
private var _table:Object;
public function PE002() {
addEventListener(Event.ADDED_TO_STAGE, init);
initTable();
}
private function initTable():void {
_table = new Object();
}
private function existsToTable(key:int):Boolean {
return _table.hasOwnProperty(key);
}
private function getFromTable(key:int):int {
if ( existsToTable(key) ){
return _table[key] as int;
}
else {
return undefined;
}
}
private function setToTable(key:int, val:int):void {
_table[key] = val;
}
private function init(event:Event):void {
_console = new TextField();
_console.multiline = true;
_console.selectable = true;
_console.autoSize = TextFieldAutoSize.LEFT;
addChild(_console);
main();
}
private function log(msg:String):void {
_console.appendText("\n" + msg);
}
private function dumpVector(v:Vector.<int>):void {
v.forEach(function (item:int, index:uint, vect:Vector.<int>):void {
this.log(item);
}, this);
}
}
}
class VectorUtil {
public static function range(min:int, max:int):Vector.<int> {
var ret:Vector.<int> = new Vector.<int>(max - min + 1);
var i:int = 0;
while(i + min <= max ) {
ret[i] = min + i;
i++;
}
return ret;
}
}
