#!/usr/bin/perl -w use Data::Dumper; use strict; # 1. The deck, with all suits ordered King to Ace my @deck = ( 'Kh','Qh','Jh','10h','9h','8h','7h','6h','5h','4h','3h','2h','Ah', 'Kc','Qc','Jc','10c','9c','8c','7c','6c','5c','4c','3c','2c','Ac', 'Kd','Qd','Jd','10d','9d','8d','7d','6d','5d','4d','3d','2d','Ad', 'Ks','Qs','Js','10s','9s','8s','7s','6s','5s','4s','3s','2s','As' ); # 2. Cut the deck in a random place 5 times with the cards in reverse order (bottom up.) srand(time); @deck = reverse @deck; for (my $i=0;$i<5;$i++) { my @slice = splice(@deck,0,rand($#deck + 1)); splice(@deck,$#deck + 1,0,@slice); } # 3. Flip the deck over, and cut 8 more times. @deck = reverse @deck; for (my $i=0;$i<8;$i++) { my @slice = splice(@deck,0,rand($#deck + 1)); splice(@deck,$#deck + 1,0,@slice); } print "Deck after 13 cuts and two reversals:\n" . Data::Dumper->Dump([\@deck]) . "\n"; # 4. Lay the cards out in 13 piles my @piles = (); for (my $i=0;$i<13;$i++) { my @pile = (); push @piles,\@pile; } for (my $j=0;$j<$#deck + 1;$j+=13) { for (my $i=0;$i<13;$i++) { my @pile = @{$piles[$i]}; push @pile,$deck[$j + $i]; $piles[$i] = \@pile; } } # 5. List the piles for (my $i=0;$i<13;$i++) { my @pile = @{$piles[$i]}; print "Pile $i:\n" . Data::Dumper->Dump([\@pile]) . "\n"; } exit;