Project Euler 230
@see http://projecteuler.net/index.php?section=problems&id=230
♥0 |
Line 74 |
Modified 2009-08-07 04:35:38 |
MIT License
archived:2017-03-30 04:51:19
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/6O37
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.getTimer;
// @see http://projecteuler.net/index.php?section=problems&id=230
public class Euler230 extends Sprite {
private var _tf : TextField;
public function Euler230() {
_tf = new TextField();
_tf.width = 465;
_tf.height = 465;
addChild(_tf);
var s : int = getTimer();
t(solve());
var g : int = getTimer();
t((g - s) + " ms");
}
private function solve() : String
{
var f : Array = fib(80);
// t(f);
var pis : Array = [
"1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679",
"8214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196"
];
var ret : String = "";
for(var i : int = 17;i >= 0;i--){
var d : Number = div100(i);
var m : int = mod100(i);
if(m == 0){
d--;
m = 100;
}
for(var j : int = 0;j < 80 && f[j] <= d;j++);
t(i + "\t" + d + "\t" + j);
for(var k : int = j, l : Number = d;k >= 2;){
if(l >= f[k - 2]){
l -= f[k - 2];
k--;
}else{
k -= 2;
}
}
ret += pis[k].charAt(m - 1);
}
return ret;
}
private function fib(n : int) : Array
{
var ret : Array = [];
var a : Number = 1;
var b : Number = 1;
for(var i : int = 0;i < n;i++){
ret.push(a);
var c : Number= a + b;
a = b; b = c;
}
return ret;
}
private function mod100(x : int) : int
{
var ret : int = 1;
var i : int;
for(i = 0;i < x;i++)ret = (ret * 7) % 100;
return (ret * (127 + 19 * x)) % 100;
}
private function div100(x : int) : Number
{
return Math.floor((127 + 19 * x) / 100 * Math.pow(7, x));
}
private function t(o : *) : void
{
_tf.appendText("" + o + "\n");
}
}
}