diff options
Diffstat (limited to 'ipl/progs/wshfdemo.icn')
-rw-r--r-- | ipl/progs/wshfdemo.icn | 68 |
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 + |