Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
44
Task/Knuth-shuffle/Bc/knuth-shuffle.bc
Normal file
44
Task/Knuth-shuffle/Bc/knuth-shuffle.bc
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
seed = 1 /* seed of the random number generator */
|
||||
scale = 0
|
||||
|
||||
/* Random number from 0 to 32767. */
|
||||
define rand() {
|
||||
/* Formula (from POSIX) for random numbers of low quality. */
|
||||
seed = (seed * 1103515245 + 12345) % 4294967296
|
||||
return ((seed / 65536) % 32768)
|
||||
}
|
||||
|
||||
/* Shuffle the first _count_ elements of shuffle[]. */
|
||||
define shuffle(count) {
|
||||
auto b, i, j, t
|
||||
|
||||
i = count
|
||||
while (i > 0) {
|
||||
/* j = random number in [0, i) */
|
||||
b = 32768 % i /* want rand() >= b */
|
||||
while (1) {
|
||||
j = rand()
|
||||
if (j >= b) break
|
||||
}
|
||||
j = j % i
|
||||
|
||||
/* decrement i, swap shuffle[i] and shuffle[j] */
|
||||
t = shuffle[--i]
|
||||
shuffle[i] = shuffle[j]
|
||||
shuffle[j] = t
|
||||
}
|
||||
}
|
||||
|
||||
/* Test program. */
|
||||
define print_array(count) {
|
||||
auto i
|
||||
for (i = 0; i < count - 1; i++) print shuffle[i], ", "
|
||||
print shuffle[i], "\n"
|
||||
}
|
||||
|
||||
for (i = 0; i < 10; i++) shuffle[i] = 11 * (i + 1)
|
||||
"Original array: "; trash = print_array(10)
|
||||
|
||||
trash = shuffle(10)
|
||||
"Shuffled array: "; trash = print_array(10)
|
||||
quit
|
||||
Loading…
Add table
Add a link
Reference in a new issue