summaryrefslogtreecommitdiff
path: root/ipl/progs/wshfdemo.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/progs/wshfdemo.icn')
-rw-r--r--ipl/progs/wshfdemo.icn68
1 files changed, 68 insertions, 0 deletions
diff --git a/ipl/progs/wshfdemo.icn b/ipl/progs/wshfdemo.icn
new file mode 100644
index 0000000..3382a4e
--- /dev/null
+++ b/ipl/progs/wshfdemo.icn
@@ -0,0 +1,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
+