이 과제는 Devadas 교수의 MIT 강의에서 발췌 한 것 입니다. 트릭에 대한 자세한 설명은 링크 된 비디오 또는 이 문서 에서 찾을 수 있습니다 . 간단한 용어로 설명하려고합니다.
이것은 1930 년대에 발명되었으며 "피치 체니의 5 장의 카드 트릭"으로 알려져 있습니다.
트릭은 다음과 같습니다.
- 한 벌의 카드에서 5 개의 무작위 카드가 선택됩니다. 청중과 조수가 그들을 볼 수는 있지만 그렇지 않습니다.
- 당신의 조수 (당신이 연습 한 사람)는 그 카드 중 4 장을 선택하여 특정한 순서로 당신에게 보여줄 것입니다. 숨겨진 카드는 5 개의 카드에서 무작위로 선택되지 않습니다. 어시스턴트는 트릭을 작동시킬 카드를 선택합니다.
- 네 번째 카드가 무엇인지 네 카드에서 수집 할 수있는 정보를 바탕으로 추론합니다.
어떻게?
다음 두 가지 사항을 명심하십시오.
5 개의 무작위 카드를 선택할 때, 최소 2 개의 카드가 동일한 수트 1을 보장합니다 .
아래 이미지는 모든 순위가 2 인 원을 보여줍니다 . 원이기 때문에 J, Q, K, A, 2, 3을 계산할 수 있습니다 (예 : 모듈 식 계산). 숨겨진 카드는 첫 번째 카드와 같은 순위를 가지지 않습니다. 아래에 설명 된 것과 같은 카드입니다. 숨겨진 카드가 첫 번째 카드보다 1에서 6 사이의 순위 (원으로 계산할 때)가되도록 첫 번째 카드와 숨겨진 카드를 선택할 수 있습니다. 첫 번째 카드가 1 이면 숨겨진 카드는 2,3,4,5,6 또는 7 입니다. 첫 번째 카드가 J 이면 숨겨진 카드는 Q, K, A, 2,3 또는 4 입니다.
알고리즘 :
첫 번째 카드 : 이 카드는 숨겨진 카드와 같은 형태입니다. 이 카드는 숨겨진 카드의 순위를 알아낼 때 사용할 기준점이기도합니다.
두 번째, 세 번째 및 네 번째 카드 는 1 ... 6 범위의 값을 디코딩합니다 . 우리는 세 개의 카드 S, M, L (가장 작은 카드, 중간 카드, 가장 큰 카드)을 부를 것입니다. 값은 다음과 같이 인코딩됩니다 (사전 순서).
S M L -> 1
S L M -> 2
M S L -> 3
M L S -> 4
L S M -> 5
L M S -> 6
따라서 첫 번째 카드의 순위가 5 이고 나머지 세 카드의 순위가 4 Q 7 인 경우 ( SLM 주문 ) 마지막 카드의 순위는 5 + 2 = 7 입니다. 에이스가 일관된 한 에이스가 가장 높은 카드인지 가장 낮은 카드인지를 선택할 수 있습니다.
여러 카드가 순위를 공유하면 소송은 C <D <H <S 인 순서를 결정합니다 .
입력 형식 :
4 장의 카드는 H3 (하트 3 개), DK (다이아몬드 킹) 등으로 주어집니다. 대신 입력을 3H 및 KD 와 다르게 선택할 수 있습니다 .
입력은 편리한 형식 일 수 있지만 한 변수의 수트 목록과 다른 변수의 순위 목록을 결합 할 수는 없습니다. 'D5', 'H3' ..
그리고 [['D',5],['H',3] ...
둘 다 OK이지만 'DHCH',[5,3,1,5]
그렇지 않습니다. T를 제외하고 문자 대신 숫자를 사용할 수 없습니다 .
산출
입력과 같은 형식의 숨겨진 카드.
예
연습을 해보자.
Input:
D3 S6 H3 H9
첫 번째 카드는 다이아몬드이기 때문에 숨겨진 카드는 다이아몬드라는 것을 알고 있습니다. 또한 첫 번째 카드의 순위가 3 이므로 순위가 4,5,6,7,8 또는 9 임을 알고 있습니다.
나머지 카드는 6,3,9 ==> M, S, L 로 정렬 되며 값은 3 입니다. 따라서 숨겨진 카드는 다이아몬드의 3 + 3 = 6 이므로 출력은 D6 이어야합니다 .
테스트 사례 :
C3 H6 C6 S2
C9 # The order is LMS (H6 > C6, and 2 < 6). 3+6=9
SQ S4 S3 ST # (ST = S10. Format is optional)
S2 # The order is MSL. 12+3=2
HA CA DA SA
H2 # The order is SML. 14+1=2
이것은 code-golf 이므로 각 언어에서 가장 짧은 솔루션이 승리합니다. 설명이 권장됩니다!
1 4 가지 슈트 ( C 윤활유, D iamonds, H earts 및 S pad)가 있습니다.
2 13 순위 2,3,4,5,6,7,8,9,10, J, Q, K, A가 있습니다. 10 대신 T 를 사용하도록 선택할 수 있습니다 .
92427**3
및 수정은k+7
할 수k+8
: 1 바이트 저장a=>(k='A23456789TJQK'+92427**3)[[[r,s],...x]=a.map((c,i)=>[k.search(c[0])+10,c[1],i]),(r-k[x.sort().map(c=>k=k*2|c[2])|k+8])%13]+s