Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
54
Task/Subtractive-generator/Seed7/subtractive-generator.seed7
Normal file
54
Task/Subtractive-generator/Seed7/subtractive-generator.seed7
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
$ include "seed7_05.s7i";
|
||||
|
||||
const integer: MOD is 1000000000;
|
||||
|
||||
const type: subtractiveGenerator is new struct
|
||||
var array integer: state is [0 .. 54] times 0;
|
||||
var integer: si is 0;
|
||||
var integer: sj is 24;
|
||||
end struct;
|
||||
|
||||
const func integer: subrand (inout subtractiveGenerator: generator) is forward;
|
||||
|
||||
const func subtractiveGenerator: subrandSeed (in var integer: p1) is func
|
||||
result
|
||||
var subtractiveGenerator: generator is subtractiveGenerator.value;
|
||||
local
|
||||
var integer: p2 is 1;
|
||||
var integer: i is 0;
|
||||
var integer: j is 21;
|
||||
begin
|
||||
generator.state[0] := p1 mod MOD;
|
||||
for i range 1 to 54 do
|
||||
generator.state[j] := p2;
|
||||
p2 := (p1 - p2) mod MOD;
|
||||
p1 := generator.state[j];
|
||||
j := (j + 21) mod 55;
|
||||
end for;
|
||||
for i range 1 to 165 do
|
||||
ignore(subrand(generator));
|
||||
end for;
|
||||
end func;
|
||||
|
||||
const func integer: subrand (inout subtractiveGenerator: generator) is func
|
||||
result
|
||||
var integer: subrand is 0;
|
||||
begin
|
||||
if generator.si = generator.sj then
|
||||
generator := subrandSeed(0);
|
||||
end if;
|
||||
generator.si := pred(generator.si) mod 55;
|
||||
generator.sj := pred(generator.sj) mod 55;
|
||||
subrand := (generator.state[generator.si] - generator.state[generator.sj]) mod MOD;
|
||||
generator.state[generator.si] := subrand;
|
||||
end func;
|
||||
|
||||
const proc: main is func
|
||||
local
|
||||
var subtractiveGenerator: gen is subrandSeed(292929);
|
||||
var integer: i is 0;
|
||||
begin
|
||||
for i range 1 to 10 do
|
||||
writeln(subrand(gen));
|
||||
end for;
|
||||
end func;
|
||||
Loading…
Add table
Add a link
Reference in a new issue