flash on 2009-9-3
@see http://projecteuler.net/index.php?section=problems&id=
♥0 |
Line 57 |
Modified 2009-09-03 04:33:23 |
MIT License
archived:2017-03-30 04:50:06
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/2S9c
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.getTimer;
// @see http://projecteuler.net/index.php?section=problems&id=
public class Euler extends Sprite {
private var _tf : TextField;
public function Euler() {
_tf = new TextField();
_tf.width = 465;
_tf.height = 465;
addChild(_tf);
var s : int = getTimer();
t(solve(10));
var g : int = getTimer();
t((g - s) + " ms");
}
private function solve(M : int) : int
{
var base : Array = new Array(M);
var i : int, j : int;
for(i = 0;i < M;i++)base[i] = i;
var sum : Number = 0;
var div : Number = 0;
for(i = 0;i < 100000;i++){
var a : Array = base.concat();
// shuffle
for(j = 0;j < M - 1;j++){
var ind : int = int(Math.random() * (M - j - 1)) + j + 1;
var d : int = a[ind];
a[ind] = a[j];
a[j] = d;
}
var used : Array = new Array(M);
var maxct : int = 0;
var ct : int = 0;
for(j = 0;j < M;j++){
used[a[j]] = true;
if(used[a[j] - 1] && used[a[j] + 1]){
ct--;
}else if(!used[a[j] - 1] && !used[a[j] + 1]){
ct++;
if(maxct < ct)maxct = ct;
}
}
sum += maxct;
div++;
if((i % 10000) == 0){
t(sum / div);
}
}
return 0;
}
private function t(o : *) : void
{
_tf.appendText("" + o + "\n");
}
}
}