use strict; use warnings; my %cnt; # Generate all possibilities: for my $a1 (0 .. 9) { for my $a2 (0 .. 9) { for my $a3 (0 .. 9) { for my $a4 (0 .. 9) { my @c = sort ($a1, $a2, $a3, $a4); my $s = toStr(@c); $cnt{$s}++; } } } } my $ttl = 0; print < $cnt{$a} } keys %cnt) { $ttl += $cnt{$k}; printf "%5u %6.2f %5u %6.2f <%s>\n", $cnt{$k}, 100*$cnt{$k}/10000.0, $ttl, 100*$ttl/10000.0, $k; } sub toStr { my @c = @_; my @rv = (); for (my $i=1; $i < @c; $i++) { if ($c[$i] != $c[$i-1] && $c[$i] != $c[$i-1]+1) { push @rv, $c[$i]; } } return join(":",@rv); } #### $ perl funky.pl num pct ttl ttl pct offsets to print ----- ------- ----- ------- ---------------- 840 8.40 840 8.40 <7> 830 8.30 1670 16.70 <8> 682 6.82 2352 23.52 <6> 592 5.92 2944 29.44 <> 524 5.24 3468 34.68 <5> 508 5.08 3976 39.76 <9> 408 4.08 4384 43.84 <5:8> 396 3.96 4780 47.80 <6:9> 396 3.96 5176 51.76 <6:8> 366 3.66 5542 55.42 <4> 336 3.36 5878 58.78 <7:9> 312 3.12 6190 61.90 <5:7>