Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
30
Task/Knuth-shuffle/SNOBOL4/knuth-shuffle.sno
Normal file
30
Task/Knuth-shuffle/SNOBOL4/knuth-shuffle.sno
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
* Library for random()
|
||||
-include 'Random.sno'
|
||||
|
||||
* # String -> array
|
||||
define('s2a(str,n)i') :(s2a_end)
|
||||
s2a s2a = array(n); str = str ' '
|
||||
sa1 str break(' ') . s2a<i = i + 1> span(' ') = :s(sa1)f(return)
|
||||
s2a_end
|
||||
|
||||
* # Array -> string
|
||||
define('a2s(a)i') :(a2s_end)
|
||||
a2s a2s = a2s a<i = i + 1> ' ' :s(a2s)f(return)
|
||||
a2s_end
|
||||
|
||||
* # Knuth shuffle in-place
|
||||
define('shuffle(a)alen,n,k,tmp') :(shuffle_end)
|
||||
shuffle n = alen = prototype(a);
|
||||
sh1 k = convert(random() * alen,'integer') + 1
|
||||
eq(a<n>,a<k>) :s(sh2)
|
||||
tmp = a<n>; a<n> = a<k>; a<k> = tmp
|
||||
sh2 n = gt(n,1) n - 1 :s(sh1)
|
||||
shuffle = a :(return)
|
||||
shuffle_end
|
||||
|
||||
* # Test and display
|
||||
a = s2a('1 2 3 4 5 6 7 8 9 10',10)
|
||||
output = a2s(a) '->'
|
||||
shuffle(a)
|
||||
output = a2s(a)
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue