nvec ← ##.ripple nvec ⍝ Perfect Ripple Shuffle.
Items from the second and first halves of the argument vector are interleaved in
the result.
More properly called a "riffle" shuffle:
http://en.wikipedia.org/wiki/Shuffling#Riffle
Technical note:
The code shows an innovative use of the grade-up and grade-down primitive funct-
ions:
ripple←{ ⍝ Perfect Ripple Shuffle.
⍵[⍋⍒(⍴⍵)⍴0 1]
}
(muse:
Cumulatively re-applying ripple eventually yields the original argument.
In the case of a 52-vector, ripple must be re-applied 52 times to complete
the cycle but for other length vectors, the cycle is shorter. Here are the
repeat counts for vectors of length 0-99.
10 10⍴ {1⍳⍨(⍳⍵){(⍳⍵)≡⍺ ripple pow ⍳⍵}¨⍵}¨0 to 99
1 1 2 2 4 4 3 3 6 6
10 10 12 12 4 4 8 8 18 18
6 6 11 11 20 20 18 18 28 28
5 5 10 10 12 12 36 36 12 12
20 20 14 14 12 12 23 23 21 21
8 8 52 52 20 20 18 18 58 58
60 60 6 6 12 12 66 66 22 22
35 35 9 9 20 20 30 30 39 39
54 54 82 82 8 8 28 28 11 11
12 12 10 10 36 36 48 48 30 30
Will Robertson supplies this function to compute these numbers directly for
values ⍵>1: the smallest k such that 2^k ≡ 1 (mod n) where n is ⍵ rounded up
to the next odd number.
{n←1+⍵-2|⍵ ⋄ 1⍳⍨(n|×)\n/2}¨ 2 to 32
2 2 4 4 3 3 6 6 10 10 12 12 4 4 8 8 18 18 6 6 11 11 20 20 18 18 28 28 5 5 10
See: Vector 21.3 "Jottings 43: A Rippling Good Yarn!" Norman Thomson.
http://www.vector.org.uk/archive/v213/jot213.htm
See also: http://www.mathscarves.org
)
Examples:
ripple ⍳16 ⍝ 9-16 meshed with 1-8.
9 1 10 2 11 3 12 4 13 5 14 6 15 7 16 8
show←⊃¨∘⊂∘(,'HCDS'∘.,'A23456789XJQK') ⍝ show card(s) no. ⍵.
⍝ Hearts, Clubs, Diamonds, Spades.
⍝ ¯ ¯ ¯ ¯
⍝ Ace 2-9 X(10) Jack Queen King.
⍝ ¯ ¯ ¯ ¯ ¯
show 4 13⍴⍳52 ⍝ show deck in order.
HA H2 H3 H4 H5 H6 H7 H8 H9 HX HJ HQ HK
CA C2 C3 C4 C5 C6 C7 C8 C9 CX CJ CQ CK
DA D2 D3 D4 D5 D6 D7 D8 D9 DX DJ DQ DK
SA S2 S3 S4 S5 S6 S7 S8 S9 SX SJ SQ SK
show 4 13⍴ ripple ⍳52 ⍝ shuffled deck.
DA HA D2 H2 D3 H3 D4 H4 D5 H5 D6 H6 D7
H7 D8 H8 D9 H9 DX HX DJ HJ DQ HQ DK HK
SA CA S2 C2 S3 C3 S4 C4 S5 C5 S6 C6 S7
C7 S8 C8 S9 C9 SX CX SJ CJ SQ CQ SK CK
ripple ripple ⍳16 ⍝ double ripple.
13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4
3 ripple pow ⍳16 ⍝ triple ripple.
15 13 11 9 7 5 3 1 16 14 12 10 8 6 4 2
4 ripple pow ⍳16 ⍝ quadruple ripple reverses.
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
8 ripple pow ⍳16 ⍝ octuple ripple restores.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
See also: pow to
Back to: contents
Back to: Workspaces