fork download
  1. #!/usr/bin/perl
  2.  
  3. # Table of points
  4. %pts = (RSF => 1000, SF => 200, C4 => 150, C32 => 50, F => 40, S => 30, C3 => 20, C22 => 20, C2 => 15);
  5.  
  6. # card <=> order
  7. for $s ( qw(S H D C) ) {
  8. for $r ( qw(A K Q J X 9 8 7 6 5 4 3 2) ) {
  9. $dec[$i] = $c = $s . $r;
  10. $enc{$c} = $i ++;
  11. }
  12. }
  13.  
  14. # input
  15. $_ = <STDIN>;
  16. @card = /([SHDC][AKQJX2-9])/gi;
  17. for $i ( 0 .. 4 ) {
  18. $cod[$i] = $enc{uc $card[$i]};
  19. $keep[$cod[$i]] = $i + 1;
  20. }
  21.  
  22. $x0 = 0;
  23. for $c1 ( 0 .. 47 ) {
  24. $x1 = $x0 | 32 >> $keep[$c1];
  25. $nr[$c1 % 13] ++;
  26. for $c2 ( $c1 + 1 .. 48 ) {
  27. $x2 = $x1 | 32 >> $keep[$c2];
  28. $nr[$c2 % 13] ++;
  29. for $c3 ( $c2 + 1 .. 49 ) {
  30. $x3 = $x2 | 32 >> $keep[$c3];
  31. $nr[$c3 % 13] ++;
  32. for $c4 ( $c3 + 1 .. 50 ) {
  33. $x4 = $x3 | 32 >> $keep[$c4];
  34. $nr[$c4 % 13] ++;
  35. for $c5 ( $c4 + 1 .. 51 ) {
  36. $x5 = $x4 | 32 >> $keep[$c5];
  37. $nr[$c5 % 13] ++;
  38.  
  39. $_ = join '', sort { $b <=> $a } @nr;
  40. $role = (
  41. /^4/ ? C4 :
  42. /^32/ ? C32 :
  43. /^3/ ? C3 :
  44. /^22/ ? C22 :
  45. /^2/ ? C2 : '' );
  46. if( /^1/ ) {
  47. @sr = sort { $a <=> $b } $c1 % 13, $c2 % 13, $c3 % 13, $c4 % 13, $c5 % 13;
  48. $role = S if $sr[0] + 4 == $sr[4] or $sr[0] + 9 == $sr[1];
  49. $role .= F if int($c1 / 13) == int($c5 / 13);
  50. $role = RSF if $role eq SF and $sr[4] == 4 ;
  51. }
  52.  
  53. $p[$x5] += $pts{$role}; $c[$x5] ++;
  54.  
  55. $nr[$c5 % 13] --;
  56. }
  57. $nr[$c4 % 13] --;
  58. }
  59. $nr[$c3 % 13] --;
  60. }
  61. $nr[$c2 % 13] --;
  62. }
  63. $nr[$c1 % 13] --;
  64. }
  65.  
  66. $max = 0;
  67. for $i ( 31 .. 62 ) {
  68. $exp[$i] = $exp = $p[$i] / $c[$i];
  69. if( $max < $exp ) { $max = $exp; }
  70. }
  71.  
  72. for $i ( sort { $exp[$b] <=> $exp[$a] or $a <=> $b } 31 .. 62 ) {
  73. $exp = $p[$i] / $c[$i];
  74. printf "%s %s %s %s %s : %7.2fpts %5s = %8d / %7d\n",
  75. $i & 16 ? $dec[$cod[0]] : '--',
  76. $i & 8 ? $dec[$cod[1]] : '--',
  77. $i & 4 ? $dec[$cod[2]] : '--',
  78. $i & 2 ? $dec[$cod[3]] : '--',
  79. $i & 1 ? $dec[$cod[4]] : '--',
  80. $exp, ( $max == $exp ? '[MAX]' : '' ), $p[$i], $c[$i] if $c[$i];
  81. }
  82.  
Success #stdin #stdout 7.54s 5164KB
stdin
SJ S3 HA H9 D5
stdout
-- -- -- -- D5 :    8.28pts [MAX] =  1477330 /  178365
-- -- -- H9 -- :    8.25pts       =  1472170 /  178365
SJ -- -- -- -- :    8.21pts       =  1465160 /  178365
-- S3 -- -- -- :    8.17pts       =  1457030 /  178365
-- -- HA -- -- :    8.14pts       =  1451940 /  178365
-- -- -- -- -- :    7.96pts       = 12207830 / 1533939
-- -- HA H9 -- :    7.90pts       =   128080 /   16215
SJ S3 -- -- -- :    7.90pts       =   128080 /   16215
SJ -- -- H9 -- :    7.85pts       =   127240 /   16215
-- S3 -- -- D5 :    7.82pts       =   126760 /   16215
-- -- -- H9 D5 :    7.61pts       =   123400 /   16215
SJ -- HA -- -- :    7.61pts       =   123400 /   16215
-- -- HA -- D5 :    7.58pts       =   122920 /   16215
-- S3 HA -- -- :    7.58pts       =   122920 /   16215
-- S3 -- H9 -- :    7.49pts       =   121480 /   16215
SJ -- -- -- D5 :    7.49pts       =   121480 /   16215
-- S3 HA -- D5 :    6.60pts       =     7140 /    1081
-- -- HA H9 D5 :    6.16pts       =     6660 /    1081
-- S3 -- H9 D5 :    6.16pts       =     6660 /    1081
-- S3 HA H9 -- :    6.16pts       =     6660 /    1081
SJ -- -- H9 D5 :    6.16pts       =     6660 /    1081
SJ -- HA -- D5 :    6.16pts       =     6660 /    1081
SJ -- HA H9 -- :    6.16pts       =     6660 /    1081
SJ S3 -- -- D5 :    6.16pts       =     6660 /    1081
SJ S3 -- H9 -- :    6.16pts       =     6660 /    1081
SJ S3 HA -- -- :    6.16pts       =     6660 /    1081
-- S3 HA H9 D5 :    3.83pts       =      180 /      47
SJ -- HA H9 D5 :    3.83pts       =      180 /      47
SJ S3 -- H9 D5 :    3.83pts       =      180 /      47
SJ S3 HA -- D5 :    3.83pts       =      180 /      47
SJ S3 HA H9 -- :    3.83pts       =      180 /      47
SJ S3 HA H9 D5 :    0.00pts       =        0 /       1