Just an implementation problem. Pretty lengthy though.
import java.io.PrintWriter; import java.util.Scanner; import java.util.StringTokenizer; /** * * @author Sanchit M. Bhatnagar * @see http://uhunt.felix-halim.net/id/74004 * */ public class P462 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); PrintWriter out = new PrintWriter(System.out); while (sc.hasNextLine()) { String line = sc.nextLine(); if (line == null) break; if (line.equals("")) continue; StringTokenizer st = new StringTokenizer(line); int sum = 0; Card[] hand = new Card[13]; // Step 1 for (int i = 0; i < 13; i++) { hand[i] = new Card(st.nextToken()); sum += gameCardValue(hand[i]); } // Step 2 for (int i = 0; i < 13; i++) { if (hand[i].isFaceCard() && hand[i].card.charAt(0) == 'K') { char suite = hand[i].card.charAt(1); boolean found = false; for (int j = 0; j < 13; j++) { if (j == i) continue; if (hand[j].card.charAt(1) == suite) { found = true; break; } } if (!found) sum--; } } // Step 3 for (int i = 0; i < 13; i++) { if (hand[i].isFaceCard() && hand[i].card.charAt(0) == 'Q') { char suite = hand[i].card.charAt(1); int count = 0; for (int j = 0; j < 13; j++) { if (j == i) continue; if (hand[j].card.charAt(1) == suite) { count++; } } if (count < 2) sum--; } } // Step 4 for (int i = 0; i < 13; i++) { if (hand[i].isFaceCard() && hand[i].card.charAt(0) == 'J') { char suite = hand[i].card.charAt(1); int count = 0; for (int j = 0; j < 13; j++) { if (j == i) continue; if (hand[j].card.charAt(1) == suite) { count++; } } if (count < 3) sum--; } } // Step 5, 6, 7 int sum567 = 0; int[] suiteCount = new int[4]; for (int i = 0; i < 13; i++) { char suite = hand[i].card.charAt(1); switch (suite) { case 'S': suiteCount[0]++; break; case 'H': suiteCount[1]++; break; case 'D': suiteCount[2]++; break; case 'C': suiteCount[3]++; break; } } for (int i = 0; i < 4; i++) { if (suiteCount[i] == 2) { sum567++; } else if (suiteCount[i] == 1) { sum567 += 2; } else if (suiteCount[i] == 0) { sum567 += 2; } } // IsStopped boolean[] isStopped = new boolean[4]; boolean[][] specialCards = new boolean[4][3]; for (int i = 0; i < 13; i++) { char suite = hand[i].card.charAt(1); switch (suite) { case 'S': if (hand[i].card.charAt(0) == 'A') { specialCards[0][0] = true; isStopped[0] = true; } else if (hand[i].card.charAt(0) == 'K') { specialCards[0][1] = true; if (suiteCount[0] > 1) isStopped[0] = true; } else if (hand[i].card.charAt(0) == 'Q') { if (suiteCount[0] > 2) isStopped[0] = true; specialCards[0][2] = true; } break; case 'H': if (hand[i].card.charAt(0) == 'A') { specialCards[1][0] = true; isStopped[1] = true; } else if (hand[i].card.charAt(0) == 'K') { specialCards[1][1] = true; if (suiteCount[1] > 1) isStopped[1] = true; } else if (hand[i].card.charAt(0) == 'Q') { if (suiteCount[1] > 2) isStopped[1] = true; specialCards[1][2] = true; } break; case 'D': if (hand[i].card.charAt(0) == 'A') { specialCards[2][0] = true; isStopped[2] = true; } else if (hand[i].card.charAt(0) == 'K') { specialCards[2][1] = true; if (suiteCount[2] > 1) isStopped[2] = true; } else if (hand[i].card.charAt(0) == 'Q') { specialCards[2][2] = true; if (suiteCount[2] > 2) isStopped[2] = true; } break; case 'C': if (hand[i].card.charAt(0) == 'A') { specialCards[3][0] = true; isStopped[3] = true; } else if (hand[i].card.charAt(0) == 'K') { specialCards[3][1] = true; if (suiteCount[3] > 1) isStopped[3] = true; } else if (hand[i].card.charAt(0) == 'Q') { specialCards[3][2] = true; if (suiteCount[3] > 2) isStopped[3] = true; } break; } } if (sum + sum567 < 14) { out.println("PASS"); } else if (sum + sum567 > 13) { if (sum > 15 && isStopped[0] && isStopped[1] && isStopped[2] && isStopped[3]) { out.println("BID NO-TRUMP"); } else { int max = -1; int maxIndex = -1; for (int i = 0; i < 4; i++) { if (suiteCount[i] > max) { max = suiteCount[i]; maxIndex = i; } } out.print("BID "); switch (maxIndex) { case 0: out.println("S"); break; case 1: out.println("H"); break; case 2: out.println("D"); break; case 3: out.println("C"); break; } } } } out.close(); sc.close(); } private static int gameCardValue(Card c) { if (c.getCardValue() == 1) return 4; else if (c.getCardValue() == 13) return 3; else if (c.getCardValue() == 12) return 2; else if (c.getCardValue() == 11) return 1; else return 0; } private static class Card { String card; public Card(String card) { int test1 = getSuitIdx(card.charAt(1)); if (test1 == -1) return; int test2 = getNumIdx(card.charAt(0)); if (test2 == -1) return; this.card = card; } public boolean isFaceCard() { return getSuitIdx(card.charAt(1)) != -1; } public int getCardValue() { return getNumIdx(card.charAt(0)); } private int getSuitIdx(char suit) { switch (suit) { case 'H': return 0; case 'S': return 1; case 'D': return 2; case 'C': return 3; } return -1; } private int getNumIdx(char num) { switch (num) { case 'A': return 1; case 'T': return 10; case 'J': return 11; case 'Q': return 12; case 'K': return 13; default: try { int val = Integer.parseInt(num + ""); if (val > 1 && val < 10) return val; return -1; } catch (Exception e) { return -1; } } } } }