Rebol3 Code Examplex


Deal cards for FreeCell

Distribute cards into the standard FreeCell layout.

Rebol [
    title: "Rosetta code: Deal cards for FreeCell"
    file:  %Deal_cards_for_FreeCell.r3
    url:   https://rosettacode.org/wiki/Deal_cards_for_FreeCell
]

deal-FreeCell: function/with [
    "Deal a FreeCell game by number"
    num [integer!]
][
    deck: copy ordered-deck
    state: num ; seed the MSLCG
    print ["^/Game:" as-green num]
    len: length? deck
    while [len > 0] [
        ;; pick random remaining card and swap to end
        choice: rng % len + 1
        swap (at deck choice) (at deck len)
        prin [" " take/last deck]
        -- len
        if 4 == mod len 8 [prin "^/"]
    ]
    print ""
][
    ordered-deck: []
    foreach r "A23456789TJQK" [foreach s "♣♦♥♠" [ append ordered-deck ajoin [r s] ] ]
    ;; Microsoft linear congruential generator
    state: 0
    rng: does [
        state: (state * 214013 + 2531011) & 0#7fffffff
        state >> 16
    ]
]

deal-FreeCell 1
deal-FreeCell 617
deal-FreeCell 1 + random 32000