RosettaCodeData/Task/Subtractive-generator/Zkl/subtractive-generator-1.zkl
2017-09-25 22:28:19 +02:00

12 lines
413 B
Text

fcn rand_sub(x){
var ring=L(),m=(1e9).toInt();
mod:='wrap(n){ if(n<0) n+m else n };
if(not ring){
seed:=L( (if(vm.numArgs) x else m-1), 1);
foreach n in ([2 .. 54]){ seed.append((seed[n-2]-seed[n-1]):mod(_)) }
foreach n in (55){ ring.append(seed[(34*(n+1))%55]) }
do(220-ring.len()){ self.fcn() } // 165
}
ring.append((ring.pop(0)-ring[-24]):mod(_));
return(ring[-1]);
}