Created
November 22, 2016 12:02
-
-
Save splitline/d99f1828472bdcb8f8faa4dae2d23ed4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <ctype.h> | |
int getRank(int n,char *rank,char card[][3]); | |
int getSuit(int n,char *suit,char card[][3]); | |
int isAKind(int n,char *rank,char card[][3],int *checked); | |
int isFull(char *rank,char card[][3],int *checked); | |
int isFlush(char *suit,char card[][3]); | |
int isStraight(char *rank,char card[][3]); | |
int isFlush(char *suit,char card[][3]); | |
int isPair(char *rank,char card[][3],int *checked); | |
int main(){ | |
char rank[]={"23456789tjqka"},suit[]={"cdhs"},card[5][3]={0}; | |
int checked[5]={0}; | |
while(~scanf("%s%s%s%s%s",card[0],card[1],card[2],card[3],card[4])){ | |
int ic=0,dc=0; | |
for(int i=0;i<5;i++) | |
for(int j=0;j<2;j++) | |
card[i][j]=tolower(card[i][j]); | |
for(int i=0;i<5;i++){ | |
char *f1=strchr(rank,card[i][0]),*f2=strchr(suit,card[i][1]); | |
if(!f1||!f2)ic=1; | |
for(int j=i+1;j<5;j++) | |
if(!strcmp(card[i],card[j]))dc=1; | |
} | |
if(ic && !dc) {printf("Illegal card\n");continue;} | |
if(!ic && dc) {printf("Duplicate card\n");continue;} | |
if(ic && dc) {printf("Illegal and Duplicate cards\n");continue;} | |
for(int i=0;i<5;i++){ | |
for(int j=1;j<5-i;j++){ | |
int tmp1=getRank(j,rank,card)*10+getSuit(j,suit,card); | |
int tmp2=getRank(j-1,rank,card)*10+getSuit(j-1,suit,card); | |
if(tmp1 < tmp2){ | |
char t[3]; | |
strcpy(t,card[j]); | |
strcpy(card[j],card[j-1]); | |
strcpy(card[j-1],t); | |
} | |
} | |
} | |
memset(checked,0,sizeof(checked)); | |
if(isStraight(rank,card)&&isFlush(suit,card))printf("Straight Flush"); | |
else if(memset(checked,0,sizeof(checked))&&isAKind(4,rank,card,checked))printf("Four-Of-A-Kind"); | |
else if(isAKind(3,rank,card,checked)&&isPair(rank,card,checked)) printf("Full House"); | |
else if(isFlush(suit,card))printf("Flush"); | |
else if(isStraight(rank,card))printf("Straight"); | |
else if(memset(checked,0,sizeof(checked))&&isAKind(3,rank,card,checked))printf("Three-Of-A-Kind"); | |
else if(memset(checked,0,sizeof(checked))&&isPair(rank,card,checked)==2)printf("Two Pairs"); | |
else if(memset(checked,0,sizeof(checked))&&isPair(rank,card,checked)==1)printf("Pair"); | |
else printf("High Card"); | |
for(int i=0;i<5;i++)printf(" %s",card[i]); | |
printf("\n"); | |
} | |
return 0; | |
} | |
int getRank(int n,char *rank,char card[][3]){ | |
return strchr(rank,card[n][0])-rank+1; | |
} | |
int getSuit(int n,char *suit,char card[][3]){ | |
return strchr(suit,card[n][1])-suit+1; | |
} | |
int isStraight(char *rank,char card[][3]){ | |
int lastRank; | |
lastRank=getRank(0,rank,card); | |
for(int i=1;i<5;i++){ | |
if(getRank(i,rank,card)-lastRank==1){ | |
if(i==4)return 1; | |
lastRank=getRank(i,rank,card); | |
} | |
else return 0; | |
} | |
} | |
int isAKind(int n,char *rank,char card[][3],int *checked){ | |
int lastRank; | |
for(int i=0;i<=5-n;i++){ | |
lastRank=getRank(i,rank,card); | |
for(int j=i+1;j<i+n;j++){ | |
if(getRank(j,rank,card)==lastRank){ | |
checked[j]=checked[j-1]=1; | |
lastRank=getRank(j,rank,card); | |
if(j==i+n-1)return 1; | |
} | |
else if(i==5-n&&j==i+n-1)return 0; | |
} | |
for(int i=0;i<5;i++)checked[i]=0; | |
} | |
return 0; | |
} | |
int isFlush(char *suit,char card[][3]){ | |
int lastSuit; | |
lastSuit=getSuit(0,suit,card); | |
for(int i=1;i<5;i++){ | |
if(getSuit(i,suit,card)==lastSuit){ | |
if(i==4)return 1; | |
lastSuit=getSuit(i,suit,card); | |
} | |
else return 0; | |
} | |
return 0; | |
} | |
int isPair(char *rank,char card[][3],int *checked){ | |
int lastRank,n=0; | |
for(int i=0;i<5;i++){ | |
if(checked[i]==0){ | |
lastRank=getRank(i,rank,card); | |
n=i; | |
break; | |
} | |
} | |
for(int i=n+1;i<5;i++){ | |
if(checked[i]==0){ | |
if(getRank(i,rank,card)==lastRank){ | |
checked[i]=checked[i-1]=1; | |
return 1+isPair(rank,card,checked); | |
} | |
lastRank=getRank(i,rank,card); | |
} | |
else if(i==4)return 0; | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment