Nhiệm vụ được lấy từ một bài giảng của MIT bởi Giáo sư Devadas có tên Bạn có thể đọc được suy nghĩ . Một lời giải thích chi tiết về thủ thuật có thể được tìm thấy trong video được liên kết hoặc trong tài liệu này . Tôi sẽ cố gắng giải thích nó bằng những thuật ngữ đơn giản hơn.
Hóa ra điều này đã được phát minh vào những năm 1930, và được gọi là "Thủ thuật năm lá bài của Fitch Cheney" .
Thủ thuật như thế này:
- Năm thẻ ngẫu nhiên được chọn từ một cỗ bài. Khán giả và trợ lý của bạn có thể nhìn thấy họ, nhưng bạn thì không.
- Trợ lý của bạn (người mà bạn đã thực hành) sẽ chọn bốn trong số những thẻ đó và đưa chúng cho bạn theo một thứ tự cụ thể. Lưu ý rằng thẻ ẩn không được chọn ngẫu nhiên trong số 5 thẻ. Các trợ lý chọn một / thẻ sẽ làm cho thủ thuật hoạt động.
- Bạn sẽ suy luận, dựa trên thông tin bạn có thể thu thập từ bốn thẻ, thẻ thứ năm là gì.
Làm sao?
Hãy ghi nhớ hai điểm sau đây:
Khi chọn 5 thẻ ngẫu nhiên, bạn được đảm bảo rằng ít nhất hai thẻ có cùng một bộ 1 .
Hình ảnh dưới đây cho thấy một vòng tròn với tất cả các cấp bậc 2 . Vì nó là một hình tròn, nên có thể đếm: J, Q, K, A, 2, 3 (tức là đếm mô-đun). Bạn được đảm bảo rằng thẻ ẩn không có cùng thứ hạng với thẻ đầu tiên, vì chúng sẽ có cùng một bộ (giải thích bên dưới). Bạn luôn có thể chọn thẻ đầu tiên và các thẻ ẩn sao cho thẻ ẩn cao hơn từ 1 đến 6 bậc so với thẻ đầu tiên (khi tính theo vòng tròn). Nếu thẻ đầu tiên là 1 , thì thẻ ẩn sẽ là 2,3,4,5,6 hoặc 7 . Nếu thẻ đầu tiên là J , thì thẻ ẩn sẽ là Q, K, A, 2,3 hoặc 4 , v.v.
Thuật toán:
Thẻ đầu tiên: Thẻ này sẽ có cùng bộ đồ với thẻ ẩn. Thẻ cũng sẽ là điểm tham chiếu bạn sẽ sử dụng khi tìm ra thứ hạng của thẻ ẩn.
Thẻ thứ 2, 3 và 4 giải mã một giá trị trong phạm vi bao gồm 1 ... 6 . Chúng tôi sẽ gọi ba thẻ S, M, L (thẻ nhỏ nhất, thẻ giữa, thẻ lớn nhất). Các giá trị sẽ được mã hóa như thế này (thứ tự từ điển):
S M L -> 1
S L M -> 2
M S L -> 3
M L S -> 4
L S M -> 5
L M S -> 6
Vì vậy, nếu thứ hạng của thẻ đầu tiên là 5 và ba thẻ còn lại có thứ hạng 4 Q 7 (chúng được đặt hàng SLM ), thì thẻ cuối cùng có thứ hạng 5 + 2 = 7 . Bạn có thể chọn nếu ace nên là thẻ cao nhất hoặc thấp nhất, miễn là nó phù hợp.
Nếu một vài thẻ chia sẻ thứ hạng, thì bộ đồ sẽ xác định thứ tự, trong đó C <D <H <S .
Định dạng đầu vào:
Bốn thẻ sẽ được trao là H3 (ba trái tim), DK (Vua kim cương), v.v. Thay vào đó, bạn có thể chọn đầu vào theo cách khác là 3H và KD .
Đầu vào có thể ở bất kỳ định dạng thuận tiện nào, nhưng bạn không thể kết hợp danh sách các bộ quần áo trong một biến và danh sách xếp hạng trong một biến khác. 'D5', 'H3' ..
và [['D',5],['H',3] ...
cả hai đều ổn, nhưng 'DHCH',[5,3,1,5]
không phải. Bạn không thể sử dụng số thay vì chữ cái, ngoại trừ T .
Đầu ra
Thẻ ẩn, có cùng định dạng với đầu vào.
Thí dụ
Hãy làm một hướng dẫn:
Input:
D3 S6 H3 H9
Chúng ta biết thẻ ẩn là kim cương, vì thẻ đầu tiên là kim cương. Chúng tôi cũng biết rằng thứ hạng là 4,5,6,7,8 hoặc 9 vì thứ hạng của thẻ đầu tiên là 3 .
Các thẻ còn lại được đặt hàng 6,3,9 ==> M, S, L , mã hóa giá trị 3 . Do đó, thẻ ẩn là 3 + 3 = 6 kim cương, do đó đầu ra phải là D6 .
Các trường hợp thử nghiệm:
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
Đây là môn đánh gôn , vì vậy giải pháp ngắn nhất trong mỗi ngôn ngữ sẽ thắng. Giải thích được khuyến khích!
1 Có bốn bộ quần áo ( C lubs, D iamonds, H earts và S pades).
2 Có 13 bậc, 2,3,4,5,6,7,8,9,10, J, Q, K, A . Bạn có thể chọn sử dụng T thay vì 10 .
92427**3
và sửa đổik+7
đểk+8
tiết kiệm 1 byte: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