Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

必勝７並べ

トランプを使ったゲームに「７並べ」があります。ここではそれを簡単にしたゲームを考えます。１から１３の番号がそれぞれ書かれた１３枚のカードを使って７並べをします。対戦は、２者だけで次のようにゲームを進めます。

「場」に７のカードを置きます。

２者には、残りのカードがランダムに６枚ずつ配布されます。

先手の手持ちのカードのうち、場にあるカードの番号と連続する番号のカードがあれば、そのうちの１枚を場に置きます。プレイヤーはカードが置ける場合には必ず置かなければいけません。無いときに限り、カードを出さずに相手の番になります。

後手も同じ要領で、手持ちのカードを場に置きます。

手順３と４を繰り返して、一方の手持ちのカードがなくなるまで続けます。先に手持ちのカードをすべて場に置けた方が勝者となります。

先手のカードの番号が与えられたとき、後手がどのようにカードを出してきても、先手が勝つ手順が少なくとも一つあるかを判定して出力するプログラムを作成せよ。

Input

入力は以下の形式で与えられる。

N
game1
game2
:
gameN

１行目には、ゲームを行う回数 N (1 ≤ N ≤ 100) が与えられる。続く N 行に、i 回目のゲームの情報 gamei が与えられる。各 gamei は、以下の形式で与えられる。

f1 f2 f3 f4 f5 f6

fj (1 ≤ fj ≤ 13, fj ≠ 7) は先手に配られるカードの番号である。ただし、同じ行に番号が重複して現れることはない（j ≠ k について fj ≠ fk)。

Output

各ゲームについて、後手がどのようにカードを出してきても、先手が勝つ手順が少なくとも一つある場合「yes」、そうでない場合「no」と１行に出力する。

Sample Input 1

5
1 2 3 4 5 6
1 3 5 6 8 4
1 2 3 4 5 8
1 2 4 5 10 11
1 2 3 6 9 11

Sample Output 1

yes
yes
no
yes
no

Solution in JavaScript (judge verdict: Accepted)

var input = require('fs').readFileSync('/dev/stdin', 'utf8');
var arr=input.trim().split("\n");
var n=arr.shift()-0;
arr.forEach(v=>{
   var sente=v.split(" ").map(Number);
   var gote=[];
   for(var i=1;i<=13;i++)gote.push(i);
   gote=gote.filter(x=> !(x==7 || sente.includes(x)));
   var saiki=function(a,b,min,max,sg){
      if(a.length==0)return true;
      else if(b.length==0)return false;
      if(sg==0){
         var cnt=0;
         if(a.includes(min)){
            if(saiki(a.filter(v=> v!=min),b,min-1,max,1))cnt++;
         }
         if(a.includes(max)){
            if(saiki(a.filter(v=> v!=max),b,min,max+1,1))cnt++;
         }
         if(!a.includes(min) && !a.includes(max)){
            if(saiki(a,b,min,max,1))cnt++;
         }
         if(cnt==0)return false;
         else return true;
      }else if(sg==1){
         var cnt=0;
         if(b.includes(min)){
            if(!saiki(a,b.filter(v=> v!=min),min-1,max,0)) cnt++;
          }  
         if(b.includes(max)){
            if(!saiki(a,b.filter(v=> v!=max),min,max+1,0)) cnt++;
         }
         if(!b.includes(min) && !b.includes(max)){
            if(!saiki(a,b,min,max,0))cnt++;
         }
         if(cnt==0)return true;
         else return false;
      }
   };
   
   var flag = saiki(sente,gote,6,8,0,0);
   console.log(flag?"yes":"no");
});