sub dealgame ($game-number = 1) {
sub ms-lcg-method($seed = $game-number) { ( 214013 * $seed + 2531011 )ย % 2**31 }
# lazy list of the random sequence
my @ms-lcg = |(&ms-lcg-method ... *).map: * +> 16;
constant CardBlock = '๐ '.ord;
my @deck = gather for flat(1..11,13,14) X+ (48,32...0) -> $off {
take chr CardBlock + $off;
}
my @game = gather while @deck {
@deck[@ms-lcg.shiftย % @deck, @deck-1] .= reverse;
take @deck.pop;
}
say "Game #$game-number";
say @game.splice(0, 8 min +@game) while @game;
}
dealgame;
dealgame 617;
Output:
Game #1
๐ ๐ ๐น ๐ ๐
๐ท ๐ ๐ต
๐ ๐ ๐ฉ ๐ฅ ๐ ๐ ๐พ ๐ณ
๐ข ๐ฎ ๐ ๐ ๐ซ ๐ก ๐ฑ ๐
๐ ๐ ๐ช ๐ฝ ๐ด ๐ ๐ ๐ง
๐ฃ ๐ ๐ค ๐บ ๐ธ ๐ ๐ป ๐
๐ ๐จ ๐ ๐ญ ๐ ๐ ๐ ๐
๐ฆ ๐ ๐ฒ ๐ถ
Game #617
๐ ๐ ๐ ๐ฃ ๐ฅ ๐ ๐ ๐ฑ
๐ ๐ง ๐ ๐ ๐ ๐ธ ๐ก ๐พ
๐บ ๐ ๐ณ ๐ ๐ฆ ๐ ๐ ๐
๐ ๐ต ๐ฉ ๐ ๐จ ๐ท ๐ ๐ซ
๐ ๐ญ ๐ ๐น ๐ ๐ถ ๐ ๐ข
๐ค ๐ช ๐ฒ ๐
๐ ๐ ๐ป ๐ฝ
๐ ๐ฎ ๐ ๐ด