ポーカーの役を判定する関数

超簡単なテストしかしていない
役の表現が英語として正しいかさえ調べていない

```js:実行結果

judge5(["2s", "Ks", "Qs", "9s", "3s"]);
"K & Q & 9 & 3 & 2 FLUSH"
judge5(["2s", "2d", "Qs", "9s", "3s"]);
"2 ONE PAIR + Q + 9 + 3 Kicker"
judge5(["Tc", "Ts", "Th", "Td", "9c"]);
"T QUAD + 9 Kicker"
judge5(["Tc", "Ts", "3h", "9s", "9c"]);
"T & 9 TWO PAIR + 3 Kicker"
judge5(["Tc", "Ts", "Th", "9s", "9c"]);
"T High 9 Low FULL HOUSE"
judge5(["2s", "Ts", "Qs", "9s", "3s"]);
"Q & T & 9 & 3 & 2 FLUSH"
judge5(["2s", "2h", "3s", "4s", "5s"]);
"2 ONE PAIR + 5 + 4 + 3 Kicker"
judge5(["2s", "3h", "4s", "6s", "5s"]);
"6 High STRAIGHT"
judge5(["2s", "3h", "2d", "3s", "5s"]);
"3 & 2 TWO PAIR + 5 Kicker"
judge5(["As", "Qs", "Js", "Ts", "Ks"]);
"A High STRAIGHT FLUSH"
judge5(["As", "Ad", "Js", "Ts", "Ah"]);
"A TRIPLE + J + T Kicker"
judge5(["As", "Jd", "9s", "5s", "3h"]);
"HIGH CARD A + J + 9 + 5 + 3 Kicker"


```






```js:judge5.js

function judge5(input){
	// 手を変換
	var hand = [];
	for(var c in input){
		hand.push(convertCard(input[c]));
	}

	var isFlush = true;
	var isStraight = false;
	var haveQuad = false;
	var haveTriple = false;
	var havePair = false;
	var highCard = false;


	// フラッシュ判定
	for(var c in hand){
		if(hand[0][1] != hand[c][1]){
			isFlush = false;
			break;
		}
	}

	// ストレート判定
	var map = [];
	for(var i = 1; i <= 14; i++) map[i] = 0;
	for(var c in hand){
		map[hand[c][0]]++;
	}
	map[14] = map[1];
	for(var i = 14; i >= 5; i--){
		isStraight = i;
		for(var j = 0; j < 5; j++){
			if(!map[i-j]){
				isStraight = false;
				break;
			}
		}

		if(isStraight !== false) break;
	}

	// 枚数判定
	for(var i = 14; i > 1; i--){
		switch(map[i]){
			case 4:
				haveQuad = i;
				break;
			case 3:
				haveTriple = i;
				break;
			case 2:
				if(havePair === false) havePair = [];
				havePair.push(i);
				break;
			case 1:
				if(highCard === false) highCard = [];
				highCard.push(i);
				break;
		}
	}

	if(isFlush && isStraight){
		return ''+convertNum2Str(isStraight)+' High STRAIGHT FLUSH';
	}
	else if(haveQuad !== false){
		return ''+convertNum2Str(haveQuad)+' QUAD + '+highCard[0]+' Kicker';
	}
	else if(haveTriple !== false && havePair !== false){
		return ''+convertNum2Str(haveTriple)+' High '+convertNum2Str(havePair[0])+' Low FULL HOUSE';
	}
	else if(isFlush !== false){
		return ''+convertNum2Str(highCard[0])+' & '+convertNum2Str(highCard[1])+' & '+convertNum2Str(highCard[2])+' & '+convertNum2Str(highCard[3])+' & '+convertNum2Str(highCard[4])+' FLUSH';
	}
	else if(isStraight !== false){
		return ''+convertNum2Str(isStraight)+' High STRAIGHT';
	}
	else if(haveTriple !== false){
		return ''+convertNum2Str(haveTriple)+' TRIPLE + '+convertNum2Str(highCard[0])+' + '+convertNum2Str(highCard[1])+' Kicker';
	}
	else if(havePair !== false && havePair.length == 2){
		return ''+convertNum2Str(havePair[0])+' & '+convertNum2Str(havePair[1])+' TWO PAIR + '+convertNum2Str(highCard[0])+' Kicker';
	}
	else if(havePair !== false && havePair.length == 1){
		return ''+convertNum2Str(havePair[0])+' ONE PAIR + '+convertNum2Str(highCard[0])+' + '+convertNum2Str(highCard[1])+' + '+convertNum2Str(highCard[2])+' Kicker';
	}
	else{
		return 'HIGH CARD '+convertNum2Str(highCard[0])+' + '+convertNum2Str(highCard[1])+' + '+convertNum2Str(highCard[2])+' + '+convertNum2Str(highCard[3])+' + '+convertNum2Str(highCard[4])+' Kicker';
	}
}

function convertCard(card){
	// 数値に変換
	var num = convertStr2Num(card.substr(0, 1));


	var suit = card.substr(1, 1);

	return [num, suit];
}

function convertStr2Num(str){
	switch (str){
		case "A":
			str = 1;
			break;
		case "T":
			str = 10;
			break;
		case "J":
			str = 11;
			break;
		case "Q":
			str = 12;
			break;
		case "K":
			str = 13;
			break;
		default:
			str = Number(str);
			break;
	}

	return str;
}

function convertNum2Str(num){
	switch (num){
		case 1:
			num = 'A';
			break;
		case 14:
			num = 'A';
			break;
		case 10:
			num = 'T';
			break;
		case 11:
			num = 'J';
			break;
		case 12:
			num = 'Q';
			break;
		case 13:
			num = 'K';
			break;
	}

	return num;
}


```