forked from: Project Euler 165(unsolved)
forked from Project Euler 165 (diff: 1)
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/kfvq
*/
// forked from uwi's Project Euler 165(unsolved)
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.getTimer;
import flash.utils.Dictionary;
// @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();
tr(solve(5000));
var g : int = getTimer();
tr((g - s) + " ms");
}
private function solve(M : int) : Number
{
var t : Array = [];
var s : Number = 290797;
var i : int, j : int;
for(i = 0;i < 20000;i++){
s = (s * s) % 50515093;
t.push(s % 500);
}
var ar : Array = [];
/*
for(i = 0;i < M;i++){
for(j = i + 1;j < M;j++){
var ins : Array = intersect(
t[i<<2], t[(i<<2)+1], t[(i<<2)+2], t[(i<<2)+3],
t[j<<2], t[(j<<2)+1], t[(j<<2)+2], t[(j<<2)+3]
);
if(ins != null){
ar.push(ins);
}
}
}
*/
for(i = 0;i < 3000000;i++)ar.push([Math.random(), Math.random()]);
tr(ar.length);
ar.sortOn(["0", "1"], Array.NUMERIC);
var ct : int = 1;
var start : int = 0;
var same : Array = [];
for(i = 1;i < ar.length;i++){
if(ar[i][0] - ar[i - 1][0] > 0.00000001 ||
ar[i][1] - ar[i - 1][1] > 0.00000001
){
start = i;
ct++;
}else{
if(start == i - 1)same.push(ar[i-1]);
same.push(ar[i]);
// tr(i, ar[i - 1][0], ar[i][0]);
}
}
/*
same.sortOn("1", Array.NUMERIC);
var start2 : int = 0;
var same2 : Array = [];
for(i = 1;i < same.length;i++){
if(same[i][0] - same[i - 1][1] > 0.00000001){
start2 = i;
}else{
if(start2 == i - 1)same2.push(same[i-1]);
same2.push(same[i]);
}
}
var f : Array = new Array(same2.length);
for(i = 0;i < same2.length;i++){
for(j = i + 1;j < same2.length;j++){
if(
(same2[i][2]-same2[j][2])*same2[i][7]*same2[j][7]+
same2[i][3]*same2[i][6]*same2[j][7]-
same2[j][3]*same2[j][6]*same2[i][7]
){
f[i] = true;
f[j] = true;
}
}
}
var ctt : int = 0;
for each(var ff : Boolean in f){
if(ff)ctt++;
}
tr(ctt);
*/
tr(ar.length);
tr(same.length);
// tr(same2.length);
// tr(same2.join('\n'));
return ct;
}
private function intersect(x1s : int, y1s : int, x1g : int, y1g : int, x2s : int, y2s : int, x2g : int, y2g : int) : Array
{
var x1d : int = x1g - x1s;
var y1d : int = y1g - y1s;
var x2d : int = x2g - x2s;
var y2d : int = y2g - y2s;
var D : int = x1d * -y2d - y1d * -x2d;
if(D == 0)return null;
var Ut : int = (-y2d * (x2s - x1s) + x2d * (y2s - y1s));
var Uu : int = (-y1d * (x2s - x1s) + x1d * (y2s - y1s));
if(D > 0){
if(Ut <= 0 || Ut >= D)return null;
if(Uu <= 0 || Uu >= D)return null;
}else{
if(Ut >= 0 || Ut <= D)return null;
if(Uu >= 0 || Uu <= D)return null;
}
var t : Number = Ut / D;
var u : Number = Uu / D;
// return [x1s+x1d*Ut/D, y1s+y1d*Ut/D, x1s, x1d, y1s, y1d, Ut, D];
return [x1s+x1d*Ut/D, y1s+y1d*Ut/D];//, x1s, x1d, y1s, y1d, Ut, D];
}
private function tr(...o : Array) : void
{
_tf.appendText(o + "\n");
}
}
}