summaryrefslogtreecommitdiff
path: root/ipl/progs/wshfdemo.icn
blob: 3382a4e4be7b3aa6bfa9df9b9bbfa872d5315c01 (plain)
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