#include using namespace std; char rank[5]; char suit[5]; int score; int numOfModifications = 0; int lastRule = 0; int getScore(int i) { char c = rank[i]; if (c == '1') return 10; if (c == 'J') return 10; if (c == 'Q') return 10; if (c == 'K') return 10; if (c == 'A') return 10; return c - '0'; } void rule1() { score += 1; for(int i = 0; i < 5; i++) { if (rank[i] == 'J') { score += getScore(0); } } numOfModifications++; lastRule = 1; } void rule2() { score *= 2; numOfModifications++; lastRule = 2; } void rule3() { char theSuits[5] = "DHCS"; for(int i = 0; i < 5; i++) { if (i == 4) { score *= 2; numOfModifications++; lastRule = 3; break; } bool hasSuit = false; for(int j = 0; j < 5; j++) { if (suit[j] == theSuits[i]) { hasSuit = true; break; } } if (!hasSuit) { break; } } } void rule4() { int blackCount = 0; int redCount = 0; for(int i = 0; i < 5; i++) { switch(suit[i]) { case 'D': case 'H': redCount++; break; case 'C': case 'S': blackCount++; break; } } if (redCount > blackCount) { score += redCount - blackCount; } else { score += blackCount - redCount; } if (redCount != blackCount) { lastRule = 4; numOfModifications++; } } void rule5() { if (score % 2 == 0) { int tmp = score; for (int i = 1; i <= (tmp + 1) / 2; i++) { if (tmp % i == 0) { score += i; } } if (tmp != 1) { score += tmp; } numOfModifications++; lastRule = 5; } } void rule6() { int sevenRankCount = 0; for(int i = 0; i < 5; i++) { if (rank[i] == '7') { sevenRankCount++; } } if (sevenRankCount == 4) { score -= 121; numOfModifications++; lastRule = 6; } } void rule7() { if (score >= 0) { int lowestScore = 10; for(int i = 0; i < 5; i++) { if (getScore(i) < lowestScore) { lowestScore = getScore(i); } } score += lowestScore; numOfModifications++; lastRule = 7; } } void rule8() { if (score < 0) { score *= -1; numOfModifications++; lastRule = 8; } } void rule9() { int diamondSuitCount = 0; for(int i = 0; i < 5; i++) { if (suit[i] == 'D') { diamondSuitCount++; } } if (diamondSuitCount >= 3) { score++; char tmpRank[5]; for (int i = 0; i < 5; i++) { if (rank[i] == '2') { tmpRank[i] = '5'; continue; } if (rank[i] == '5') { tmpRank[i] = '2'; continue; } if (rank[i] == '6') { tmpRank[i] = '9'; continue; } if (rank[i] == '9') { tmpRank[i] = '6'; continue; } tmpRank[i] = rank[i]; } for (int i = 0; i < 5; i++) { rank[i] = tmpRank[i]; } numOfModifications++; lastRule = 9; } } void rule10() { bool hasStraight = false; int counts[14]; for (int i = 0; i < 14; i++) { counts[i] = 0; } for (int i = 0; i < 5; i++) { char c = rank[i]; if (c == '1') { counts[9] += 1; continue; } if (c == 'J') { counts[10] += 1; continue; } if (c == 'Q') { counts[11] += 1; continue; } if (c == 'K') { counts[12] += 1; continue; } if (c == 'A') { counts[0] += 1; counts[13] += 1; continue; } counts[c - '1'] += 1; } for (int i = 0; i < 10; i++) { if (counts[i] == 0) continue; hasStraight = true; for (int j = 0; j < 5; j++) { if (counts[i + j] != 1) { hasStraight = false; break; } } break; } if (hasStraight) { int aceCount = 0; for(int i = 0; i < 5; i++) { if (rank[i] == 'A') { aceCount++; } } score += 5 * aceCount; numOfModifications++; lastRule = 10; } } void rule11() { if (numOfModifications > 8) { int tmp = score; while (tmp > 0) { if (tmp % 2) { score++; } tmp = tmp / 2; } lastRule = 11; } } void rule12() { bool hasTwoRank = false; for(int i = 0; i < 5; i++) { if (rank[i] == '2') { hasTwoRank = true; break; } } if (hasTwoRank) { switch(lastRule) { case 1: rule1(); break; case 2: rule2(); break; case 3: rule3(); break; case 4: rule4(); break; case 5: rule5(); break; case 6: rule6(); break; case 7: rule7(); break; case 8: rule8(); break; case 9: rule9(); break; case 10: rule10(); break; case 11: rule11(); break; } } } void rule13() { bool hasTwoRank = false; for(int i = 0; i < 5; i++) { if (rank[i] == '2') { hasTwoRank = true; break; } } if (hasTwoRank) { score *=2; } } void computeScore() { // Init score = 0; for(int i = 0; i < 5; i++) { score += getScore(i); } // 1 rule1(); rule2(); rule3(); rule4(); rule5(); rule6(); rule7(); rule8(); rule9(); rule10(); rule11(); rule12(); rule13(); } int main() { for (int i = 0; i < 5; i++){ scanf(" %c%c", rank + i, suit + i); if (suit[i] == '0') { scanf("%c", suit + i); } } computeScore(); printf("%d\n", score); return 0; }