Advertisement
robn

Untitled

Nov 14th, 2011
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 0.83 KB | None | 0 0
  1. #!/usr/bin/env perl
  2.  
  3. use warnings;
  4. use strict;
  5.  
  6. my @data = (1,2,3);
  7. my $trials = 1000000;
  8.  
  9. my %results;
  10.  
  11. my $shuffler = \&shuffle_listutil;
  12. #my $shuffler = \&shuffle_naive;
  13. #my $shuffler = \&shuffle_kfy;
  14.  
  15. for (1..$trials) {
  16.     $results{join '', $shuffler->(@data)}++;
  17. }
  18.  
  19. for my $result (sort keys %results) {
  20.     printf "%10s %.02f%%\n", $result, $results{$result}/$trials*100;
  21. }
  22.  
  23. sub shuffle_listutil {
  24.     require List::Util;
  25.     return List::Util::shuffle(@_);
  26. }
  27.  
  28. sub shuffle_naive {
  29.     my @data = @_;
  30.     for my $i (0..$#data) {
  31.         my $n = int(rand($#data+1));
  32.         my $t = $data[$i]; $data[$i] = $data[$n]; $data[$n] = $t;
  33.     }
  34.     return @data;
  35. }
  36.  
  37. sub shuffle_kfy {
  38.     my @data = @_;
  39.     for my $i (0..$#data) {
  40.         my $n = int(rand($#data-$i+1))+$i;
  41.         my $t = $data[$i]; $data[$i] = $data[$n]; $data[$n] = $t;
  42.     }
  43.     return @data;
  44. }
  45.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement