#!/usr/bin/perl
# Table of points
%pts = (RSF => 1000, SF => 200, C4 => 150, C32 => 50, F => 40, S => 30, C3 => 20, C22 => 20, C2 => 15);
# card <=> order
for $r ( qw(A K Q J X
9 8 7 6 5 4 3 2) ) { $dec[$i] = $c = $s . $r;
$enc{$c} = $i ++;
}
}
# input
$_ = <STDIN>;
@card = /([SHDC][AKQJX2-9])/gi;
for $i ( 0 .. 4 ) {
$cod[$i] = $enc{uc $card[$i]}; $keep[$cod[$i]] = $i + 1;
}
$x0 = 0;
for $c1 ( 0 .. 47 ) {
$x1 = $x0 | 32 >> $keep[$c1];
$nr[$c1 % 13] ++;
for $c2 ( $c1 + 1 .. 48 ) {
$x2 = $x1 | 32 >> $keep[$c2];
$nr[$c2 % 13] ++;
for $c3 ( $c2 + 1 .. 49 ) {
$x3 = $x2 | 32 >> $keep[$c3];
$nr[$c3 % 13] ++;
for $c4 ( $c3 + 1 .. 50 ) {
$x4 = $x3 | 32 >> $keep[$c4];
$nr[$c4 % 13] ++;
for $c5 ( $c4 + 1 .. 51 ) {
$x5 = $x4 | 32 >> $keep[$c5];
$nr[$c5 % 13] ++;
$role = (
/^4/ ? C4 :
/^32/ ? C32 :
/^3/ ? C3 :
/^22/ ? C22 :
/^2/ ? C2 : '' );
if( /^1/ ) {
@sr = sort { $a <=> $b } $c1 % 13, $c2 % 13, $c3 % 13, $c4 % 13, $c5 % 13; $role = S if $sr[0] + 4 == $sr[4] or $sr[0] + 9 == $sr[1];
$role .= F
if int($c1 / 13) == int($c5 / 13); $role = RSF if $role eq SF and $sr[4] == 4 ;
}
$p[$x5] += $pts{$role}; $c[$x5] ++;
$nr[$c5 % 13] --;
}
$nr[$c4 % 13] --;
}
$nr[$c3 % 13] --;
}
$nr[$c2 % 13] --;
}
$nr[$c1 % 13] --;
}
$max = 0;
for $i ( 31 .. 62 ) {
$exp[$i] = $exp = $p[$i] / $c[$i];
if( $max < $exp ) { $max = $exp; }
}
for $i ( sort { $exp[$b] <=> $exp[$a] or $a <=> $b } 31 .. 62 ) { $exp = $p[$i] / $c[$i];
printf "%s %s %s %s %s : %7.2fpts %5s = %8d / %7d\n", $i & 16 ? $dec[$cod[0]] : '--',
$i & 8 ? $dec[$cod[1]] : '--',
$i & 4 ? $dec[$cod[2]] : '--',
$i & 2 ? $dec[$cod[3]] : '--',
$i & 1 ? $dec[$cod[4]] : '--',
$exp, ( $max == $exp ? '[MAX]' : '' ), $p[$i], $c[$i] if $c[$i];
}
IyEvdXNyL2Jpbi9wZXJsCgojIFRhYmxlIG9mIHBvaW50cwolcHRzID0gKFJTRiA9PiAxMDAwLCBTRiA9PiAyMDAsIEM0ID0+IDE1MCwgQzMyID0+IDUwLCBGID0+IDQwLCBTID0+IDMwLCBDMyA9PiAyMCwgQzIyID0+IDIwLCBDMiA9PiAxNSk7CgojIGNhcmQgPD0+IG9yZGVyCmZvciAkcyAoIHF3KFMgSCBEIEMpICkgewoJZm9yICRyICggcXcoQSBLIFEgSiBYIDkgOCA3IDYgNSA0IDMgMikgKSB7CgkJJGRlY1skaV0gPSAkYyA9ICRzIC4gJHI7CgkJJGVuY3skY30gPSAkaSArKzsKCX0KfQoKIyBpbnB1dAokXyA9IDxTVERJTj47CkBjYXJkID0gLyhbU0hEQ11bQUtRSlgyLTldKS9naTsKZm9yICRpICggMCAuLiA0ICkgeyAKCSRjb2RbJGldID0gJGVuY3t1YyAkY2FyZFskaV19OwoJJGtlZXBbJGNvZFskaV1dID0gJGkgKyAxOwp9CgokeDAgPSAwOwpmb3IgJGMxICggMCAuLiA0NyApIHsKCSR4MSA9ICR4MCB8IDMyID4+ICRrZWVwWyRjMV07CgkkbnJbJGMxICUgMTNdICsrOwoJZm9yICRjMiAoICRjMSArIDEgLi4gNDggKSB7CgkJJHgyID0gJHgxIHwgMzIgPj4gJGtlZXBbJGMyXTsKCQkkbnJbJGMyICUgMTNdICsrOwoJCWZvciAkYzMgKCAkYzIgKyAxIC4uIDQ5ICkgewoJCQkkeDMgPSAkeDIgfCAzMiA+PiAka2VlcFskYzNdOwoJCQkkbnJbJGMzICUgMTNdICsrOwoJCQlmb3IgJGM0ICggJGMzICsgMSAuLiA1MCApIHsKCQkJCSR4NCA9ICR4MyB8IDMyID4+ICRrZWVwWyRjNF07CgkJCQkkbnJbJGM0ICUgMTNdICsrOwoJCQkJZm9yICRjNSAoICRjNCArIDEgLi4gNTEgKSB7CgkJCQkJJHg1ID0gJHg0IHwgMzIgPj4gJGtlZXBbJGM1XTsKCQkJCQkkbnJbJGM1ICUgMTNdICsrOwoKCQkJCQkkXyA9IGpvaW4gJycsIHNvcnQgeyAkYiA8PT4gJGEgfSBAbnI7CgkJCQkJJHJvbGUgPSAoCgkJCQkJCS9eNC8gID8gQzQgIDoKCQkJCQkJL14zMi8gPyBDMzIgOgoJCQkJCQkvXjMvICA/IEMzICA6CgkJCQkJCS9eMjIvID8gQzIyIDoKCQkJCQkJL14yLyAgPyBDMiAgOiAnJyApOwoJCQkJCWlmKCAvXjEvICkgewoJCQkJCQlAc3IgPSBzb3J0IHsgJGEgPD0+ICRiIH0gJGMxICUgMTMsICRjMiAlIDEzLCAkYzMgJSAxMywgJGM0ICUgMTMsICRjNSAlIDEzOwoJCQkJCQkkcm9sZSAgPSBTICAgaWYgJHNyWzBdICsgNCA9PSAkc3JbNF0gb3IgJHNyWzBdICsgOSAgPT0gJHNyWzFdOwoJCQkJCQkkcm9sZSAuPSBGICAgaWYgaW50KCRjMSAvIDEzKSA9PSBpbnQoJGM1IC8gMTMpOwoJCQkJCQkkcm9sZSAgPSBSU0YgaWYgJHJvbGUgZXEgU0YgYW5kICRzcls0XSA9PSA0IDsKCQkJCQl9CgoJCQkJCSRwWyR4NV0gKz0gJHB0c3skcm9sZX07ICRjWyR4NV0gKys7CgoJCQkJCSRuclskYzUgJSAxM10gLS07CgkJCQl9CgkJCQkkbnJbJGM0ICUgMTNdIC0tOwoJCQl9CgkJCSRuclskYzMgJSAxM10gLS07CgkJfQoJCSRuclskYzIgJSAxM10gLS07Cgl9CgkkbnJbJGMxICUgMTNdIC0tOwp9CgokbWF4ID0gMDsKZm9yICRpICggMzEgLi4gNjIgKSB7CgkkZXhwWyRpXSA9ICRleHAgPSAkcFskaV0gLyAkY1skaV07CglpZiggJG1heCA8ICRleHAgKSB7ICRtYXggPSAkZXhwOyB9IAp9Cgpmb3IgJGkgKCBzb3J0IHsgJGV4cFskYl0gPD0+ICRleHBbJGFdIG9yICRhIDw9PiAkYiB9IDMxIC4uIDYyICkgewoJJGV4cCA9ICRwWyRpXSAvICRjWyRpXTsKCXByaW50ZiAiJXMgJXMgJXMgJXMgJXMgOiAlNy4yZnB0cyAlNXMgPSAlOGQgLyAlN2RcbiIsCgkJJGkgJiAxNiA/ICRkZWNbJGNvZFswXV0gOiAnLS0nLAoJCSRpICYgIDggPyAkZGVjWyRjb2RbMV1dIDogJy0tJywKCQkkaSAmICA0ID8gJGRlY1skY29kWzJdXSA6ICctLScsCgkJJGkgJiAgMiA/ICRkZWNbJGNvZFszXV0gOiAnLS0nLAoJCSRpICYgIDEgPyAkZGVjWyRjb2RbNF1dIDogJy0tJywKCQkkZXhwLCAoICRtYXggPT0gJGV4cCA/ICdbTUFYXScgOiAnJyApLCAkcFskaV0sICRjWyRpXSBpZiAkY1skaV07Cn0K