1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
############################################################################
#
# File: wshfdemo.icn
#
# Subject: Program to demonstrate weighted shuffle procedure
#
# Author: Erik Eid
#
# Date: May 23, 1994
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# This program is a short demo of the WeightedShuffle procedure. The
# user is first prompted for a random number seed. Then, the user is asked
# to enter a size for the list to be shuffled and what percentage of that
# list to be shuffled. The original and shuffled lists are then displayed.
#
############################################################################
#
# Links: weighted
#
############################################################################
link weighted
procedure main()
local before, after, num, pct, yn, seed
write (center("Weighted Shuffle Demonstration", 80))
repeat {
writes ("Enter random number seed: ")
seed := read()
if seed == "" then break # Use default random seed.
if seed = integer(seed) then
break &random := seed # Use given random seed.
}
repeat {
repeat {
writes ("Size of list to shuffle (1-500)? ")
num := read()
if num = integer(num) then if (0 < num <= 500) then break
}
repeat {
writes ("Shuffle what percentage (0=none, 100=all)? ")
pct := read()
if pct = numeric(pct) then if (0 <= pct <= 100) then break
}
before := list()
every put (before, (1 to num))
write ("\nBefore shuffle:")
DisplayList (before)
after := WeightedShuffle (before, pct)
write ("\nAfter ", pct, "% shuffle:")
DisplayList (after)
writes ("\nDo another [Y/N]? ")
yn := getche()
write("\n")
if not (yn == ("Y" | "y")) then break
}
end
procedure DisplayList (L)
every writes (right(!L, 4))
end
|