AOJ2175 Whist

問題リンク Whist

  • 概要

トランプのホイストを、南北チームと東西チームに分かれて行う。切り札の柄と、4人のカードの出し方が与えられるので勝利チームとその得点を答えよ。親は西にいる人なので、一番最初の台札は北の人が出す。

  • 解法

Wikiのルールを読みその通りに実装します。カードは、切り札の柄 > 台札の柄 > その他 の順でランク比較をすればいいです。得点は6を引いたものを出力するようです。

  • ソース
import java.util.Scanner;

//Whist
public class AOJ2175 {

	int f(char s){
		return s=='A'?14:s=='K'?13:s=='Q'?12:s=='J'?11:s=='T'?10:s-'0';
	}
	
	void run(){
		Scanner sc = new Scanner(System.in);
		for(;;){
			char t = sc.next().charAt(0);
			if(t=='#')break;
			String[][] c = new String[4][13];
			for(int i=0;i<4;i++)for(int j=0;j<13;j++)c[i][j]=sc.next();
			int[] p = new int[2];
			int w = 0;
			for(int j=0;j<13;j++){
				String r = c[w][j];
				int m = w;
				for(int i=0;i<4;i++){
					if(i==w)continue;
					String v = c[i][j];
					if(r.charAt(1)==t){
						if(v.charAt(1)!=t)continue;
						if(f(r.charAt(0))<f(v.charAt(0))){
							m = i; r = v; continue;
						}
					}
					else if(v.charAt(1)==t){
						m = i; r = v;
					}
					else if(v.charAt(1)==r.charAt(1)&&f(r.charAt(0))<f(v.charAt(0))){
						m = i; r = v;
					}
				}
				p[m%2]++; w = m;
			}
			if(p[0]<p[1])System.out.println("EW "+(p[1]-6));
			else System.out.println("NS "+(p[0]-6));
		}
	}
	
	public static void main(String[] args) {
		new AOJ2175().run();
	}
}