Problem:
Problem C: ラミー

あなたの友達は最近 UT-Rummy というカードゲームを思いついた．

このゲームで使うカードには赤・緑・青のいずれかの色と1から9までのいずれかの番号が
つけられている．
このゲームのプレイヤーはそれぞれ9枚の手札を持ち，
自分のターンに手札から1枚選んで捨てて，
代わりに山札から1枚引いてくるということを繰り返す．
このように順番にターンを進めていき，
最初に手持ちのカードに3枚ずつ3つの「セット」を作ったプレイヤーが勝ちとなる．
セットとは，同じ色の3枚のカードからなる組で，すべて同じ数を持っているか
連番をなしているもののことを言う．
連番に関しては，番号の巡回は認められない．
例えば，7, 8, 9は連番であるが 9, 1, 2は連番ではない．

あなたの友達はこのゲームをコンピュータゲームとして売り出すという計画を立てて，
その一環としてあなたに勝利条件の判定部分を作成して欲しいと頼んできた．
あなたの仕事は，手札が勝利条件を満たしているかどうかを判定する
プログラムを書くことである．

Input

入力の1行目にはデータセット数を表す数 T
(0 < T ≤ 50) が与えられる．
この行に引き続き T 個のデータセットが与えられる．

各データセットは2行からなり，
1行目には i 番目
(i = 1, 2, ..., 9)
のカードの数字 ni
がそれぞれスペースで区切られて与えられ，
2行目には i 番目のカードの色を表す文字
ci
がそれぞれスペースで区切られて与えられる．
カードの数字
ni
は 1 ≤ ni ≤ 9
を満たす整数であり，
カードの色 ci
はそれぞれ “R”, “G”,
“B”
のいずれかの文字である．

1つのデータセット内に色と数字がともに同じカードが5枚以上出現することはない．

Output

各データセットにつき，勝利条件を満たしていれば
“1”，
そうでなければ “0” と出力せよ．

Sample Input

5
1 2 3 3 4 5 7 7 7
R R R R R R G G G
1 2 2 3 4 4 4 4 5
R R R R R R R R R
1 2 3 4 4 4 5 5 5
R R B R R R R R R
1 1 1 3 4 5 6 6 6
R R B G G G R R R
2 2 2 3 3 3 1 1 1
R G B R G B R G B

Output for the Sample Input

1
0
0
0
1

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.*;
import java.io.*;

class Set{
    int num=0;
    int color=0; 

    static boolean sameNum(Set num1, Set num2, Set num3){
        if((num1.num == num2.num) && (num2.num == num3.num) && (num3.num == num1.num)){
            return true;
        }else{
            return false;
        }
    }

    static boolean serialNum(Set num1, Set num2, Set num3){
        if((num2.num - num1.num == 1) && (num3.num - num2.num == 1)){
            return true;
        }else{
            return false;
        }
    }

    static boolean sameColor(Set cl1, Set cl2, Set cl3){
        if((cl1.color == cl2.color) && (cl2.color == cl3.color) && (cl3.color == cl1.color)){
            return true;
        }else{
            return false;
        }
    }

    public static boolean alternateColor(Set cl1, Set cl2, Set cl3){
        if((cl1.color != cl2.color) && (cl2.color != cl3.color) && (cl3.color != cl1.color)){
            return true;
        }else{
            return false;
        }
    }
} //end_of_Set

public class Main{
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt(); //number_of_data-set

    for(int i=0;i<n;i++){
      int[] num = new int[9];
      for(int j=0;j<9;j++){
        num[j] = sc.nextInt();
      }
      sc.nextLine();
      String line = sc.nextLine();
      String[] ch= line.split(" ");
      int[] color = new int[9];
      for(int l=0;l<9;l++){
        switch(ch[l]){
          case "R": color[l] = 1;
                    break;
          case "G": color[l] = 2;
                    break;
          case "B": color[l] = 3;
                    break;
          default : break;
        }
      }
      
      Set[] set1 = new Set[3];
      Set[] set2 = new Set[3];
      Set[] set3 = new Set[3];
      for(int j=0;j<3;j++){
          set1[j] = new Set(); 
          set1[j].num = num[j]; 
          set1[j].color = color[j];
      }
      for(int j=0;j<3;j++){
          set2[j] = new Set();
          set2[j].num = num[j+3];
          set2[j].color = color[j+3];
      }
      for(int j=0;j<3;j++){
          set3[j] = new Set();
          set3[j].num = num[j+6];
          set3[j].color = color[j+6];
      }

      int accept = 0;
      Set check1 = new Set();
      Set check2 = new Set();
      Set check3 = new Set();
      if(check1.sameNum(set1[0],set1[1],set1[2])){
          if(check1.alternateColor(set1[0],set1[1],set1[2])){
             accept++;
          }else{
             System.out.println(0);
             continue;
          }
      }
      else if(check1.serialNum(set1[0],set1[1],set1[2])){
          if(check1.sameColor(set1[0],set1[1],set1[2])){
             accept++;
          }else{
            System.out.println(0);
            continue; 
          }
      }
      else{
        System.out.println(0);
        continue;
      }
      
      if(check2.sameNum(set2[0],set2[1],set2[2])){
          if(check2.alternateColor(set2[0],set2[1],set2[2])){
             accept++;
          }else{
             System.out.println(0);
             continue;
          }
      }
      else if(check2.serialNum(set2[0],set2[1],set2[2])){
          if(check2.sameColor(set2[0],set2[1],set2[2])){
             accept++;
          }else{
            System.out.println(0);
            continue; 
          }
      }
      else{
        System.out.println(0);
        continue;
      }

      if(check3.sameNum(set3[0],set3[1],set3[2])){
          if(check3.alternateColor(set3[0],set3[1],set3[2])){
             accept++;
          }else{
             System.out.println(0);
             continue;
          }
      }
      else if(check3.serialNum(set3[0],set3[1],set3[2])){
          if(check3.sameColor(set3[0],set3[1],set3[2])){
             accept++;
          }else{
            System.out.println(0);
            continue; 
          }
      }
      else{
        System.out.println(0);
        continue;
      }

    System.out.println(1);
    }//end_of_while
  }//end_of_main
}//end_of_Rummy