2010-08-12 5 views
5

스트레이트 포커 핸드를 계산할 정규식이 있습니까? 내가 좋아하는, 정렬 된 카드를 나타내는 문자열을 사용하고정규식 포커 핸드를 계산하는 정규식?

: 직선 (시퀀스) 값을 계산하는 방법

regexPair = Pattern.compile(".*(\\w)\\1.*#.*"); 
regexTwoPair = Pattern.compile(".*(\\w)\\1.*(\\w)\\2.*#.*"); 
regexThree = Pattern.compile(".*(\\w)\\1\\1.*#.*"); 
regexFour = Pattern.compile(".*(\\w)\\1{3}.*#.*"); 
regexFullHouse = Pattern.compile("((\\w)\\2\\2(\\w)\\3|(\\w)\\4(\\w)\\5\\5)#.*"); 
regexFlush = Pattern.compile(".*#(\\w)\\1{4}"); 

: 자바에서

AAAAK#sssss = 4 aces and a king, all of spades. 
A2345#ddddd = straight flush, all of diamonds. 

, 나는 이러한 정규 표현식에 사용하고 정규식으로?

편집

저도 같은 문제를 해결하기 위해 또 다른 질문을 열고,하지만 짧은 정규식에 문자의 아스키 값, 를 사용하여. 세부 사항 here.

감사합니다.

+11

regexes가 사용 된 것을 보아온 모든 기괴한 것들 중에서, 이것은 두 번째 기괴한 것이되어야합니다 :-) – paxdiablo

+5

정규식을 사용하지 마십시오. –

+2

Very Creative !! – Doug

답변

4

정규 표현식이 내가 이것을 생각한 첫 번째 도구가 아니라는 것을 인정해야합니다. 나는 정렬되지 않은 손으로 그렇게 할 수있는 모든 RE가 동등한 절차 코드보다 훨씬 더 끔찍하고 읽기 쉽다는 것을 거의 보장 할 수 있습니다. 카드를 가정

얼굴 값으로 분류되어 있습니다 (그리고 그들은 당신의 나열 정규 표현식에이 중 하나가 작동하지 않을 다른 것 같다), 당신은 , 당신

2345A|23456|34567|...|9TJQK|TJQKA 
같은 구조를 사용할 수있는 정규식을 사용해야합니다

손의 액면 부분을 감지합니다. 내가 추가 한 것을 제외하고

Royal/straight flush: "(2345A|23456|34567|...|9TJQK|TJQKA)#(\\w)\\1{4}" 
Four of a kind:  ".*(\\w)\\1{3}.*#.*" 
Full house:   "((\\w)\\2\\2(\\w)\\3|(\\w)\\4(\\w)\\5\\5)#.*" 
Flush:    ".*#(\\w)\\1{4}" 
Straight:    "(2345A|23456|34567|...|9TJQK|TJQKA)#.*" 
Three of a kind:  ".*(\\w)\\1\\1.*#.*" 
Two pair:    ".*(\\w)\\1.*(\\w)\\2.*#.*" 
One pair:    ".*(\\w)\\1.*#.*" 
High card:   (none) 

는 기본적으로, 사람들은 당신과 동일 : 나는 "표준"손 here 수집 무엇을, 다음은 감소하는 우선 순위에 확인해야합니다에서 사실

, 로얄/스트레이트 플러시 및 스트레이트. 순서대로 점검하면 손에서 최고의 점수를 얻어야합니다. 그 시점에서 상위 카드에 대한 정규식은 없습니다.이 점수는 유일한 점수입니다.

스틸 휠 (랩 어라운드) 스트레이트는 A2345에서 2345A으로 변경됩니다. 그런 식으로 정렬됩니다.

+0

동의. 위의 정규식을 실행 한 다음 절차 코드를 실행하여 직선을 확인합니다. 꽤 직설적이어야합니다. 문자열을 단계별로 순차적으로 처리해야합니다. – cincodenada

+1

@cincodenada : 그렇습니다. 그렇게 할 수 있습니다. 하지만 때로는 영업 담당자가 특정 방식 (예 : 정규식 만 사용할 수있는 도구/프레임 워크를 사용하는 경우)을 수행해야하는 좋은 이유가 있습니다. 그래서 더 좋은 방법이있을 것이라고 제안 할 것이지만, 나는 그들을 도우려고 노력할 것입니다. 처음에는 아이디어에 굳어지지 않았지만 소스 코드를 작고 우아하게 만들 수 있다는 것을 알 수있었습니다. :-) – paxdiablo

+0

사실, 내가 당신의 대답에 댓글을 달았고, 제 자신을 만들지 않았습니다. 그러나 OP에 의심의 이익을주는 좋은 알림. 감사합니다 :) – cincodenada