Rebol3 Code Examplex


Generate random numbers without repeating a value

Produce unique random numbers so no value appears more than once.

Rebol [
    title: "Rosetta code: Generate random numbers without repeating a value"
    file:  %Generate_random_numbers_without_repeating_a_value.r3
    url:   https://rosettacode.org/wiki/Generate_random_numbers_without_repeating_a_value
]

generate: function [
    "Generates a block of integers from a to b in random order"
    a [integer!]
    b [integer!]
][
    assert [a < b]
    blk: make block! b - a      ;; pre-allocate exact size
    for i a b 1 [append blk i]  ;; fill with sequential integers
    random blk                  ;; shuffle in place
]

loop 5 [ probe generate 1 20 ]

Output:

[7 8 6 18 13 10 9 1 17 12 16 5 3 15 19 2 14 20 11 4]
[17 8 1 2 18 12 20 7 19 6 13 3 14 9 11 15 16 4 10 5]
[3 19 17 9 5 18 6 15 20 11 1 16 8 10 7 2 14 13 12 4]
[19 16 18 13 14 7 8 15 6 10 3 11 4 5 12 9 17 20 2 1]
[6 10 16 18 7 11 14 17 9 19 5 8 12 4 15 3 13 20 1 2]