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