Subtractive generator: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (→{{header|Perl 6}}: Fix syntax errors, update) |
|||
Line 1,228: | Line 1,228: | ||
506003769 |
506003769 |
||
380969305</pre> |
380969305</pre> |
||
=={{header|Phix}}== |
|||
{{trans|C#}} |
|||
<lang Phix>sequence state = repeat(0,55) |
|||
integer pos |
|||
constant MAX = 1e9 |
|||
function cap(integer n) |
|||
if n<0 then n += MAX end if |
|||
return n |
|||
end function |
|||
function next() |
|||
pos = mod(pos,55)+1 |
|||
integer temp = cap(state[pos]-state[mod(pos+30,55)+1]) |
|||
state[pos] = temp |
|||
return temp |
|||
end function |
|||
procedure init(integer seed) |
|||
sequence temp = repeat(0,55) |
|||
temp[1] = cap(seed) |
|||
temp[2] = 1 |
|||
for i=3 to 55 do |
|||
temp[i] = cap(temp[i-2]-temp[i-1]) |
|||
end for |
|||
for i=1 to 55 do |
|||
state[i] = temp[mod(34*i,55)+1] |
|||
end for |
|||
pos = 55 |
|||
for i=55 to 219 do |
|||
{} = next() |
|||
end for |
|||
end procedure |
|||
init(292929) |
|||
for i=220 to 222 do |
|||
printf(1,"%d: %d\n",{i,next()}) |
|||
end for</lang> |
|||
{{out}} |
|||
<pre> |
|||
220: 467478574 |
|||
221: 512932792 |
|||
222: 539453717 |
|||
</pre> |
|||
=={{header|PicoLisp}}== |
=={{header|PicoLisp}}== |