Pseudo-random numbers/Middle-square method: Difference between revisions

Added Tcl version
(New post)
(Added Tcl version)
Line 651:
432883
</pre>
 
=={{header|Delphi}}==
{{works with|Delphi|6.0}}
{{libheader|SysUtils,StdCtrls}}
 
 
<syntaxhighlight lang="Delphi">
 
var Seed: int64 = 675248;
 
function MiddleSquareRandom: int64;
var S: string;
begin
S:=IntToStr(Seed * Seed);
while Length(S)<12 do S:='0'+S;
Seed:=StrToInt(MidStr(S, 4, 6));
Result:=Seed;
end;
 
 
procedure ShowMiddleSqrRandom(Memo: TMemo);
var I: integer;
begin
for I:=1 to 5 do
Memo.Lines.Add(IntToStr(MiddleSquareRandom));
end;
 
</syntaxhighlight>
{{out}}
<pre>
959861
333139
981593
524817
432883
Elapsed Time: 5.610 ms.
</pre>
 
 
=={{header|dc}}==
Line 705 ⟶ 667:
global seed .
seed = 675248
procfunc rand . randNum .
strSeed$ = seed
s$ = seed * seed
Line 814 ⟶ 776:
{{out}}
<pre>959861 333139 981593 524817 432883 387691</pre>
 
=={{header|Java}}==
<syntaxhighlight lang="java">
 
public final class MiddleSquareTask {
 
public static void main(String[] aArgs) {
MiddleSquare random = new MiddleSquare(675248);
for ( int i = 0; i < 5; i++ ) {
System.out.println(random.nextInt());
}
}
 
}
 
final class MiddleSquare {
public MiddleSquare(int aSeed) {
final int length = String.valueOf(aSeed).length();
if ( length % 2 == 1 ) {
throw new IllegalArgumentException("Seed must have an even number of digits");
}
state = aSeed;
divisor = (int) Math.pow(10, length / 2);
modulus = (int) Math.pow(10, length);
}
public int nextInt() {
state = ( ( state * state ) / divisor ) % modulus;
return (int) state;
}
private long state;
private final int divisor, modulus;
}
</syntaxhighlight>
{{ out }}
<pre>
959861
333139
981593
524817
432883
</pre>
 
=={{header|jq}}==
Line 911 ⟶ 825:
{{trans|C}}
<syntaxhighlight lang="Scheme">
{def W.fill
{lambda {:v :n}
{if {<= :n 0}
then
else :v{W.fill :v {- :n 1}}}}}
-> W.fill
 
{def W.pad
{lambda {:n :size}
{if {<= {W.length :n} :size}
then :n{W.fill :size {- :size {W.length :n}}}
else {W.slice 0 {- :size {W.length :n}} :n}}}}
-> W.pad
 
{def randoms
{lambda {:s :n}
Line 934 ⟶ 834:
-> randoms
 
{randoms 959861675248 4100}
->
-> 959861 333139 981593 524817 432883
675248 959861 333139 981593 524817 432883 387691 304311 605184 247673 341914 905183 356263 923325 529055 899193 548051 359898 526570 275964 156129 376264 574597 161712 150770 731592 226854 462737 125531 758031 610996 316112 926796 950825 681806 859421 604455 365847 844027 381576 600243 291659 649726 143875 700015 210006 102520 510350 457122 960522 602512 207106 892895 261481 372313 616969 650746 470356 234766 115074 242025 576100 891210 255264 159709 506964 124976 619000 161000 921000 241000 810006 109720 384786 602656 194254 734616 660667 480884 249421 210835 451397 759251 462081 518850 205322 157123 687637 844643 421797 912709 377186 269278 510641 754230 862892 582603 426255 693325 699555 377198
 
</syntaxhighlight>
 
Line 1,190 ⟶ 1,090:
[959861, 333139, 981593, 524817, 432883]
</pre>
 
=={{header|Tcl}}==
<syntaxhighlight lang="tcl">set seed 675248
 
proc rnd {} {
global seed
set s [expr {$seed * $seed}]
while {[string length $s] ne 12} {
set s [string cat 0 $s]
}
set seed [string range $s 3 8]
return $seed
}
 
for {set i 0} {$i < 5} {incr i} {
puts [rnd]
}
</syntaxhighlight>
{{out}}
<pre>959861
333139
981593
524817
432883</pre>
 
=={{header|UNIX Shell}}==
31

edits