Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Barnsley's Fern

Name: Anonymous 2009-06-13 17:31

Minimal Barnsley's Fern (lolwikipedia) in html and javascript:

<html><script>n=u=v=0
function i(){t=document.body.lastChild.getContext('2d')
t.fillStyle='green'
r=Math.random()*99
x=u,y=v
u=x*.85+y/25,v=y*.85-x/25+1.6
if(r<14)u=y/3-x/7,v=x/4+y/4+.4
if(r<7)u=x/5-y/4,v+=1.3
if(r<1)u=0,v=y/6
t.fillRect(50*u+140,525-50*v,1,1)
if(n<2e5)if(n++%99)i()
else setTimeout(i,1)}onload=i</script><canvas height=550></html>


Works on modern browsers (well, ok, works on Firefox and probably Chrome). It's also 348 bytes. Can anyone do better?

Name: FrozenVoid 2009-06-23 13:15

>>80 larger then normal text


________________________________
http://xs135.xs.to/xs135/09042/av922.jpg
orbis terrarum delenda est

Name: THEN NOMAD MEME FAN 2009-06-23 13:22

>>81
larger >> normal next
Makes no sense!

Name: Anonymous 2009-06-23 14:18

>>81
than

url:
data:text/html;charset=utf-8,<canvas height%3D550 onclick%3Dn%3Du%3Dv%3D0%2Ct%3DgetContext('2d')%2Ct.fillStyle%3D'%23070'%3Bi%3Dfunction(){r%3DMath.random()*99%3Br<14%3Fr<1%3F(u%3D0%2Cv/%3D6)%3Av%3Dv/4+u/4+(r<7%3F(u%3Du/5-v/4%2C85)%3A(u%3Dv/3-u/7%2C30))%3Au%3Du*.85+v/25+0*(v%3Dv*.85-u/25+80)%3Bt.fillRect(u+140%2C525-v%2C1%2C1)%3Bn++<2e5%3Fn%2599%3Fi()%3AsetTimeout(i%2C1)%3A1}%3Bi()>

Name: Anonymous 2009-06-23 14:19

>>81
So you're saying first it's larger, then it's normal?

Name: Anonymous 2009-06-23 15:22

>>83
SUPER COOL FERN BRO!

Name: Anonymous 2010-12-17 1:35

Are you GAY?
Are you a NIGGER?
Are you a GAY NIGGER?

If you answered "Yes" to all of the above questions, then GNAA (GAY NIGGER ASSOCIATION OF AMERICA) might be exactly what you've been looking for!

Name: Anonymous 2011-12-04 13:18

Bump for ancient autism

Name: Anonymous 2011-12-04 14:00

>>83
javascript: and data: URIs typed or pasted in the address bar are disabled to prevent social engineering attacks.

Name: Anonymous 2011-12-04 16:25

If Frozen spent as much time optimizing the fern code as he did with quasicrystals we would have fractals at x100 speed and all IFS code would be made obsolete.

Name: Anonymous 2011-12-04 16:37

>>92
I don't get it, how optimizing ten lines of this fern==speeds up fractals?
It doesn't look that optimizable anyway.

Name: Anonymous 2011-12-04 16:40

>>92
Go away.

Name: Anonymous 2011-12-04 18:31

>>94
fuck you antirussian racist piece of shit

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-04 23:55

That fern code is horribly unoptimized, i'll check the formulas later. There are ways to optimize anything >>93

Name: ᴠɪʟᴇ !PRoGN.piPE 2011-12-05 1:21

>>96, >>93
there are ways to optimise anything down to '()

Name: Anonymous 2011-12-05 2:26

>>97
lisp is shit

Name: Anonymous 2011-12-05 3:59

>>98
Doubt you're confident enough to judge.

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-05 6:24

Initial refactoring 485ms(this is fullscreen fern)
<html><head><style>html,body{width:100%;height:100%;margin:0px;}
    </style></head><body><canvas width=550 id='frozenfern'><script>
   const  w=window.innerWidth
   const  h =window.innerHeight
    var canv=document.getElementById('frozenfern');
    var context=canv.getContext("2d");
    canv.width=w ;
    canv.height=h ;

const green=0xff00ff00
context.fillStyle='green'

const iterations=100
var iter100=4000
const H=h//525;
const L=w/2;//140
const mult=50;//
const xyred=0.85
const a25=1/25;
const a4=1/4;
const a3=1/3;
const a5=1/5;
const a7=1/7;
const a6=1/6
const a20=1/20
const zoom=2.8//1.6
const Hzoom=0.4
const Wzoom=1.3
var n=u=v=r=m=c=x=y=0;
var starttime=Date.now();
//longer syntax to run on old browser
function r99(){return Math.random()*99;}
function rord(){return Math.random()>0.5?1:0;}
    function addtm(str){document.title+=Date.now()-starttime+str;starttime=Date.now()}
rn=Array(iterations);rn[0]=0;var elm
for(i=1;i<7;i++)rn[i]=1;
for(i=7;i<14;i++)rn[i]=2;
for(i=14;i<(iterations+1);i++)rn[i]=3;
rn.sort(rord);
var arrn=Uint32Array(w*h)


onload=function(){
while(iter100--){
rn.sort(rord)
n=iterations;
while(n--){
x=u;
y=v
switch(rn[n]){
case 3:;
u=x*xyred+y*a25;
v=y*xyred-x*a25+zoom;
break;
case 2:;
u=y*a3-x*a7;
v=(x+y)*a4+Hzoom;break;
case 1:;
u=x*a5-y*a4;
v=(x+y)*a4+Hzoom+Wzoom;break;
case 0:;u=0;
v=y*a6;break;
default:;;break;
}

arrn[(((mult*u+L))|0)+((H-mult*v)|0)*w]=green
//context.fillRect(mult*u+L,H-mult*v,1,1)
}};
co={width:w,height:h,data:Uint8ClampedArray(arrn.buffer)};
context.putImageData(co,0,0);
addtm(" ms h:"+h+" w:"+w);
};

</script></body></html>

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-05 6:34

for comparison the 14443ms original 1/4 size fern
<html><script>n=u=v=0;start=Date.now()
function i(){if(n>=2e5)document.title+=Date.now()-start+" ms"
t=document.body.lastChild.getContext('2d')
t.fillStyle='green'
r=Math.random()*99
x=u,y=v
u=x*.85+y/25,v=y*.85-x/25+1.6
if(r<14)u=y/3-x/7,v=x/4+y/4+.4
if(r<7)u=x/5-y/4,v+=1.3
if(r<1)u=0,v=y/6
t.fillRect(50*u+140,525-50*v,1,1)
if(n<2e5)if(n++%99)i()
else setTimeout(i,1)}onload=i

</script><canvas height=550></html>

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-05 6:54

150ms not using sort
<html><head><style>html,body{width:100%;height:100%;margin:0px;}
    </style></head><body><canvas width=550 id='frozenfern'><script>
   const  w=window.innerWidth
   const  h =window.innerHeight
    var canv=document.getElementById('frozenfern');
    var context=canv.getContext("2d");
    canv.width=w ;
    canv.height=h ;

const green=0xff00ff00
context.fillStyle='green'

const iterations=100
var iter100=4000
const H=h//525;
const L=w/2;//140
const mult=50;//
const xyred=0.85
const a25=1/25;
const a4=1/4;
const a3=1/3;
const a5=1/5;
const a7=1/7;
const a6=1/6
const a20=1/20
const zoom=2.8//1.6
const Hzoom=0.4
const Wzoom=1.3
var n=u=v=r=m=c=x=y=0;
var starttime=Date.now();
//longer syntax to run on old browser
function r99(){return Math.random()*99;}
function rord(){return Math.random()>0.5?1:0;}
    function addtm(str){document.title+=Date.now()-starttime+str;starttime=Date.now()}
rn=Array(iterations);rn[0]=0;var elm
for(i=1;i<7;i++)rn[i]=1;
for(i=7;i<14;i++)rn[i]=2;
for(i=14;i<(iterations+1);i++)rn[i]=3;
rn.sort(rord);
var arrn=Uint32Array(w*h)


onload=function(){
while(iter100--){
n=iterations;
while(n--){
x=u;
y=v
switch(rn[(Math.random()*99)|0]){
case 3:;
u=x*xyred+y*a25;
v=y*xyred-x*a25+zoom;
break;
case 2:;
u=y*a3-x*a7;
v=(x+y)*a4+Hzoom;break;
case 1:;
u=x*a5-y*a4;
v=(x+y)*a4+Hzoom+Wzoom;break;
case 0:;u=0;
v=y*a6;break;
default:;;break;
}

arrn[(((mult*u+L))|0)+((H-mult*v)|0)*w]=green
//context.fillRect(mult*u+L,H-mult*v,1,1)
}};
co={width:w,height:h,data:Uint8ClampedArray(arrn.buffer)};
context.putImageData(co,0,0);
addtm(" ms h:"+h+" w:"+w);
};

</script></body></html>

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-05 7:55

134ms faster Random()
<html><head><style>html,body{width:100%;height:100%;margin:0px;}
    </style></head><body><canvas width=550 id='frozenfern'><script>
   const  w=window.innerWidth
   const  h =window.innerHeight
    var canv=document.getElementById('frozenfern');
    var context=canv.getContext("2d");
    canv.width=w ;
    canv.height=h ;

const green=0xff00ff00
context.fillStyle='green'
const rnd=Math.random
const iterations=100
var iter100=4000//2000 too low quality
const H=h//525;
const L=w/2;//140
const mult=50;//
const xyred=0.85
const a25=1/25;
const a4=1/4;
const a3=1/3;
const a5=1/5;
const a7=1/7;
const a6=1/6
const a20=1/20
const zoom=2.8//1.6
const Hzoom=0.4
const Wzoom=1.3
const WHZoom=Wzoom+Hzoom
var n=u=v=r=m=c=x=y=0;
var starttime=Date.now();
//longer syntax to run on old browser
function r99(){return Math.random()*99;}
function rord(){return Math.random()>0.5?1:0;}
    function addtm(str){document.title+=Date.now()-starttime+str;starttime=Date.now()}

var x3 = 123456789, y3 = 362436069, z3 = 521288629, w3 = 88675123,t3=0;
function xor128() {
  t3 = x3 ^ (x3 << 11);
  x3 = y3; y3 = z3; z3 = w3;
w3 = w3 ^ (w3 >> 19) ^ (t3 ^ (t3 >> 8));
  return w3
}

function rxor(){
  t3 = x3 ^ (x3 << 11);
  x3 = y3; y3 = z3; z3 = w3;
  w3 = w3 ^ (w3 >> 19) ^ (t3 ^ (t3 >> 8));
return w3-(99*((w3/99)|0))
}

var arrn=Uint32Array(w*h)
onload=function(){
while(iter100--){
n=iterations;
while(n--){
x=u;
y=v
r=rxor()// rnd()*99;
if(r>=14){
u=x*xyred+y*a25;
v=y*xyred-x*a25+zoom;
}else{
if(r>=7){u=y*a3-x*a7,v=(x+y)*a4+Hzoom;}else{
if(r>=1){u=x*a5-y*a4,v=(x+y)*a4+WHZoom;}else{
u=0,v=y*a6}}}
arrn[(((mult*u+L))|0)+((H-mult*v)|0)*w]=green

}};
var co={width:w,height:h,data:Uint8ClampedArray(arrn.buffer)};
context.putImageData(co,0,0);
addtm(" ms h:"+h+" w:"+w);
};

</script></body></html>

Name: Anonymous 2011-12-05 8:09

Two years and no one has done it in Asm?

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-05 8:14

91ms slightly different fern style(tree-like): >>104 the fern code is from early 90's when IFS algorithms was invented
<html><head><style>html,body{width:100%;height:100%;margin:0px;}
    </style></head><body><canvas width=550 id='frozenfern'><script>
   const  w=window.innerWidth
   const  h =window.innerHeight
    var canv=document.getElementById('frozenfern');
    var context=canv.getContext("2d");
    canv.width=w ;
    canv.height=h ;

const green=0xff00ff00
context.fillStyle='green'
const rnd=Math.random
const iterations=100
const RW=50//Random walk range
var iter100=2000//2000 too low quality
const H=h//525;
const L=w/2;//140
const mult=50;//
const xyred=0.85
const a25=1/25;
const a4=1/4;
const a3=1/3;
const a5=1/5;
const a7=1/7;
const a6=1/6
const a20=1/20
const zoom=2.8//1.6
const Hzoom=0.4
const Wzoom=1.3
const WHZoom=Wzoom+Hzoom
var n=u=v=r=m=c=x=y=0;
var starttime=Date.now();
//longer syntax to run on old browser
function r99(){return Math.random()*99;}
function rord(){return Math.random()>0.5?1:0;}
    function addtm(str){document.title+=Date.now()-starttime+str;starttime=Date.now()}

var x3 = 123456789, y3 = 362436069, z3 = 521288629, w3 = 88675123,t3=0;
function xor128() {
  t3 = x3 ^ (x3 << 11);
  x3 = y3; y3 = z3; z3 = w3;
w3 = w3 ^ (w3 >> 19) ^ (t3 ^ (t3 >> 8));
  return w3
}

function rxor(){
  t3 = x3 ^ (x3 << 11);
  x3 = y3; y3 = z3; z3 = w3;
  w3 = w3 ^ (w3 >> 19) ^ (t3 ^ (t3 >> 8));
return w3-(RW*((w3/RW)|0))
}

var arrn=Uint32Array(w*h)
onload=function(){
while(iter100--){
n=iterations;
while(n--){
x=u;
y=v
t3 = x3 ^ (x3 << 11);
x3 = y3; y3 = z3; z3 = w3;
w3 = w3 ^ (w3 >> 19) ^ (t3 ^ (t3 >> 8));
r=w3-(RW*((w3/RW)|0))
if(r>=14){
u=x*xyred+y*a25;
v=y*xyred-x*a25+zoom;
}else{
if(r>=7){u=y*a3-x*a7,v=(x+y)*a4+Hzoom;}else{
if(r>=1){u=x*a5-y*a4,v=(x+y)*a4+Wzoom+Hzoom;}else{
u=0,v=y*a6}}}


arrn[(((mult*u+L))|0)+((H-mult*v)|0)*w]=green

}};
var co={width:w,height:h,data:Uint8ClampedArray(arrn.buffer)};
context.putImageData(co,0,0);
addtm(" ms h:"+h+" w:"+w);
};

</script></body></html>

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-05 9:13

87ms minor fix to display
<html><head><style>html,body{width:100%;height:100%;margin:0px;}
    </style></head><body><canvas  id='frozenfern'><script>
   const  w=window.innerWidth
   const  h =window.innerHeight
    var canv=document.getElementById('frozenfern');
    var context=canv.getContext("2d");
    canv.width=w ;
    canv.height=h ;

const green=0xff00ff00
context.fillStyle='green'
const iterations=100
const RW=50//Random walk range
var iter100=2000//Fill Quality(optimal ~4k)
const H=h//525;
const L=w/2;//140
const mult=50;//
const xyred=0.85
const a25=1/25;
const a4=1/4;
const a3=1/3;
const a5=1/5;
const a7=1/7;
const a6=1/6
const a20=1/20
const zoom=2.8//1.6
const Hzoom=0.4
const Wzoom=1.3
const WHZoom=Wzoom+Hzoom
var n=u=v=r=m=c=x=y=0;
var starttime=Date.now();

 function addtm(str){document.title+=Date.now()-starttime+str;starttime=Date.now()}

var x3 = 123456789, y3 = 362436069, z3 = 521288629, w3 = 88675123,t3=0;
function rxor(){
  t3 = x3 ^ (x3 << 11);
  x3 = y3; y3 = z3; z3 = w3;
  w3 = w3 ^ (w3 >> 19) ^ (t3 ^ (t3 >> 8));
return w3-(RW*((w3/RW)|0))
}

var arrn=Uint32Array(w*h)
while(iter100--){
n=iterations;
while(n--){
x=u;
y=v
t3 = x3 ^ (x3 << 11);
x3 = y3;
y3 = z3;
z3 = w3;
w3 = w3 ^ (w3 >> 19) ^ (t3 ^ (t3 >> 8));
r=w3-(RW*((w3/RW)|0))
if(r>=14){
u=x*xyred+y*a25;
v=y*xyred-x*a25+zoom;
}else{
if(r>=7){u=y*a3-x*a7,v=(x+y)*a4+Hzoom;}else{
if(r>=1){u=x*a5-y*a4,v=(x+y)*a4+Wzoom+Hzoom;}else{
u=0,v=y*a6}}}
arrn[(((mult*u+L))|0)+((H-mult*v)|0)*w]=green

}};

context.putImageData({width:w,height:h,data:Uint8ClampedArray(arrn.buffer)},0,0);
document.title+=Date.now()-starttime+" ms"



</script></body></html>

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-05 9:52

83ms divide in random removed.
<html><head><style>html,body{width:100%;height:100%;margin:0px;}
    </style></head><body><canvas  id='frozenfern'><script>

   const  w=window.innerWidth
   const  h =window.innerHeight
    var canv=document.getElementById('frozenfern');
    var context=canv.getContext("2d");
    canv.width=w ;
    canv.height=h ;

const green=0xff00ff00
const iterations=100
const RW=50//Random walk range
var iter100=2000//Fill Quality(optimal ~4k)
const H=h//525;
const L=w/2;//140
const mult=50;//
const xyred=0.85
const a25=1/25;
const a4=1/4;
const a3=1/3;
const a5=1/5;
const a7=1/7;
const a6=1/6
const a20=1/20
const zoom=2.8//1.6
const Hzoom=0.4
const Wzoom=1.3
const WHZoom=Wzoom+Hzoom
var n=u=v=r=m=c=x=y=0;
var starttime=Date.now();

function addtm(str){document.title+=Date.now()-starttime+str;starttime=Date.now()}

var x3 = 123456789, y3 = 362436069, z3 = 521288629, w3 = 88675123,t3=0;
function rxor(){
  t3 = x3 ^ (x3 << 11);
  x3 = y3; y3 = z3; z3 = w3;
  w3 = w3 ^ (w3 >> 19) ^ (t3 ^ (t3 >> 8));
return w3-(RW*((w3/RW)|0))
}

var arrn=Uint32Array(w*h)
while(iter100--){
n=iterations;
while(n--){
x=u;
y=v
t3 = x3 ^ (x3 << 11);
x3 = y3;
y3 = z3;
z3 = w3;
w3 = w3 ^ (w3 >> 19) ^ (t3 ^ (t3 >> 8));
r=(w3&255)>>2


if(r>13){
u=x*xyred+y*a25;
v=y*xyred-x*a25+zoom;
}else{
if(r>6){u=y*a3-x*a7;
v=(x+y)*a4+Hzoom;}else{
if(r>0){
u=x*a5-y*a4;
v=(x+y)*a4+Wzoom+Hzoom;}else{
u=0;v=y*a6}}}

arrn[(((mult*u+L))|0)+((H-mult*v)|0)*w]=green

}};

context.putImageData({width:w,height:h,data:Uint8ClampedArray(arrn.buffer)},0,0);
document.title+=Date.now()-starttime+" ms"



</script></body></html>

Name: Anonymous 2011-12-05 16:24

>>107
I get 333ms, what computer/OS/browser are you doing your tests on?

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-05 23:11

>>108
Athlon II x2 240/Windows XP/Firefox 11.0a1(2011-12-03)

Name: Anonymous 2011-12-05 23:44

>>111
wow amazing triples bro

Name: Anonymous 2011-12-06 0:12

check 'em

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-06 5:12

The key seems to be making the random function deterministic.
I'm trying to convert it to some predictable sequence thats as fast as random one.

Name: Anonymous 2011-12-06 5:30

>>112
So javascript random is nondeterministic? OMG THEY DID IT

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-06 5:46

>>113
For all purposes Math.random()
1.won't get any predictable sequence
2.its way slower than using xorshift PRNG

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-06 5:55

The >>1 fern is non-deterministic : it create different fern each time its loaded
the recent bunch of fern are using xorshift and are deterministic:its the same fern all time

Name: Anonymous 2011-12-06 5:56

>>113
So javascript random is nondeterministic? OMG THEY DID IT
Soooo can we use javascript to emulate Nondeterministic Touring Machines and solve NP-complete problems in polynomial time? Infinite compression, here I come!

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-06 5:58

Name: F r o z e n V o i d !!mJCwdV5J0Xy2A21 2011-12-06 6:31

90ms version with new leaf functions: makes the code simpler.
<html><head><style>html,body{width:100%;height:100%;margin:0px;}
    </style></head><body><canvas  id='frozenfern'><script>

   const  w=window.innerWidth
   const  h =window.innerHeight
const M=w>h?w:h
    var canv=document.getElementById('frozenfern');
    var context=canv.getContext("2d");
    canv.width=w ;
    canv.height=h ;
var DEBUG=1;
function d(x){if(!DEBUG)return;if(typeof(x)==Array){document.body.innerHTML+=(x.join(","))}else{document.body.innerHTML+=(x.toString())}}
const green=0xff00ff00
const blue=0xffff0000
const red=0xff0000ff
//const iterations=100
const RW=100//Random walk range
var iter100=2000//00//Fill Quality(optimal ~4k)
const H=h//525;
const L=w/2;//140
const mult=50;//
const xyred=0.85
const a25=1/25;
const a4=1/4;
const a3=1/3;
const a5=1/5;
const a7=1/7;
const a6=1/6
const a20=1/20
const zoom=2.8//1.6
const Hzoom=0.4
const Wzoom=1.3
const WHzoom=Wzoom+Hzoom
var starttime=Date.now();
function addtm(str){document.title+=Date.now()-starttime+str;starttime=Date.now()}
var rands=Uint32Array(5);
var x3 =rands[0]= 123456789, y3 = rands[1]= 362436069, z3 =rands[2]=  521288629, w3 =rands[3]=  88675123,t3=rands[4];
var n=u=v=r=m=c=x=y=0;
var j=[]
//Stem 1/100
function stem(){
x=u;y=v;u=0;v=y*a6;
arrn[L+(     ((mult*u))|0   )+(H-(mult*v)|0)*w]=green;}
//xorshift rnd
function r63(){
t3 = x3 ^ (x3 << 11);
x3 = y3;
y3 = z3;
z3 = w3;
w3 = w3 ^ (w3 >> 19) ^ (t3 ^ (t3 >> 8));
return w3&63}
//LeafSet
function setleafD(){x=u;y=v;
u=x*xyred+y*a25;v=y*xyred-x*a25+zoom;
arrn[L+(     ((mult*u))|0   )+(H-(mult*v)|0)*w]=green;}
function setleafW(){x=u;y=v;
u=x*a5-y*a4,v=(x+y)*a4+WHzoom;
arrn[L+(     ((mult*u))|0   )+(H-(mult*v)|0)*w]=blue;}
function setleafH(){x=u;y=v;
u=y*a3-x*a7,v=(x+y)*a4+Hzoom;
arrn[L+(     ((mult*u))|0   )+(H-(mult*v)|0)*w]=red;}
//Leaf
function leaf(){
var t;stem();
for(t=0;t<RW;t++){r=r63();
if((r&1)|(r&3)){setleafD();}else{if(r&7){setleafW()}else{setleafH()}}}}
//Main
var arrn=Uint32Array(w*h)
var co={width:w,height:h,data:Uint8ClampedArray(arrn.buffer)}
while(iter100--){leaf();};context.putImageData(co,0,0);
document.title+=Date.now()-starttime+" ms"
</script></body></html>

Name: Anonymous 2011-12-06 7:56

Name: Anonymous 2011-12-06 8:05

>>117
An algorithm that solves a problem in nondeterministic polynomial time can run in polynomial time or exponential time depending on the choices it makes during execution.
So if it makes the right choices, it can solve NP-complete problems in polynomial time! Just like infinite compression can compress data infinitely if it happens to be representable in a right way! Javascript is the most awesome language ever, I bet LISP can't be used for solving NP-complete problems!

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List