#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11162510 use warnings; use Time::HiRes qw( time ); use List::AllUtils qw( shuffle ); my @stock = shuffle split //, 'A23456789TJQK' x 4; my $ninecardlist = join '', splice @stock, 0, 9; my $start = time; while( @stock > 1 ) { print "$ninecardlist\n"; my ($left, $right) = splice @stock, 0, 2; $ninecardlist =~ s/(.)(.*?)\1/ print "play $left & $right over $1's\n"; "$left$2$right"/e or last; } @stock > 1 or print "$ninecardlist\n"; print @stock < 2 ? "Succeeded in consuming the entire deck.\n" : "Failed to consume the entire deck.\n"; printf "%d passes in %d microseconds\n", 52 - @stock, (time - $start) * 1e6;