Tugas ini diambil dari kuliah MIT oleh Prof. Devadas bernama You can read mind . Penjelasan terperinci tentang trik ini dapat ditemukan di video yang ditautkan, atau dalam dokumen ini . Saya akan mencoba menjelaskannya secara lebih sederhana.
Ternyata ini diciptakan pada tahun 1930-an, dan dikenal sebagai "Trik Lima Kartu Fitch Cheney" .
Caranya seperti ini:
- Lima kartu acak dipilih dari setumpuk kartu. Penonton dan asisten Anda dapat melihat mereka, tetapi Anda tidak melihatnya.
- Asisten Anda (dengan siapa Anda telah berlatih) akan memilih empat kartu itu dan menunjukkannya kepada Anda dalam urutan tertentu. Perhatikan bahwa kartu yang tersembunyi tidak diambil secara acak dari 5 kartu. Asisten mengambil kartu yang akan membuat trik bekerja.
- Anda akan menyimpulkan, berdasarkan informasi yang Anda dapat kumpulkan dari empat kartu apa kartu kelima itu.
Bagaimana?
Ingatlah dua hal berikut:
Saat memilih 5 kartu acak, Anda dijamin bahwa setidaknya dua kartu memiliki jenis kartu yang sama 1 .
Gambar di bawah ini menunjukkan lingkaran dengan semua peringkat 2 . Karena itu lingkaran, dimungkinkan untuk menghitung: J, Q, K, A, 2, 3 (yaitu penghitungan modular). Anda dijamin bahwa kartu yang disembunyikan tidak memiliki peringkat yang sama dengan yang pertama, karena mereka akan memiliki kartu yang sama (dijelaskan di bawah). Selalu dimungkinkan untuk memilih kartu pertama dan kartu tersembunyi sedemikian rupa sehingga kartu tersembunyi berada di antara peringkat 1 dan 6 lebih tinggi daripada yang pertama (saat menghitung dalam lingkaran). Jika kartu pertama adalah 1 , maka kartu yang disembunyikan adalah 2,3,4,5,6 atau 7 . Jika kartu pertama adalah J , maka kartu yang disembunyikan adalah Q, K, A, 2,3 atau 4 dan seterusnya.
Algoritma:
Kartu pertama: Kartu ini memiliki jenis yang sama dengan kartu tersembunyi. Kartu tersebut juga akan menjadi titik referensi yang akan Anda gunakan ketika mencari tahu peringkat kartu yang tersembunyi.
Kartu ke-2, ke-3 dan ke-4 menerjemahkan nilai dalam rentang inklusif 1 ... 6 . Kami akan memanggil tiga kartu S, M, L (kartu terkecil, kartu tengah, kartu terbesar). Nilai-nilai akan dikodekan seperti ini (urutan leksikografis):
S M L -> 1
S L M -> 2
M S L -> 3
M L S -> 4
L S M -> 5
L M S -> 6
Jadi, jika peringkat kartu pertama adalah 5 , dan tiga kartu sisanya memiliki peringkat 4 Q 7 (mereka memesan SLM ), maka kartu terakhir memiliki peringkat 5 + 2 = 7 . Anda dapat memilih apakah kartu as harus merupakan kartu tertinggi atau terendah, asalkan konsisten.
Jika beberapa kartu berbagi peringkat, maka suit akan menentukan urutan, di mana C <D <H <S .
Masukkan format:
Keempat kartu akan diberikan sebagai H3 (tiga hati), DK (Raja berlian) dan sebagainya. Anda dapat memilih untuk mengambil input sebaliknya sebagai 3H dan KD sebagai gantinya.
Masukan bisa dalam format apa pun yang mudah, tetapi Anda tidak dapat menggabungkan daftar pakaian dalam satu variabel dan daftar peringkat di yang lain. 'D5', 'H3' ..
dan [['D',5],['H',3] ...
keduanya OK, tetapi 'DHCH',[5,3,1,5]
tidak. Anda tidak dapat menggunakan angka alih-alih huruf, kecuali untuk T .
Keluaran
Kartu tersembunyi, dalam format yang sama dengan input.
Contoh
Mari kita lakukan langkah-langkah:
Input:
D3 S6 H3 H9
Kita tahu kartu yang disembunyikan adalah berlian, karena kartu pertama adalah berlian. Kita juga tahu bahwa peringkatnya adalah 4,5,6,7,8 atau 9 karena peringkat kartu pertama adalah 3 .
Kartu yang tersisa dipesan 6,3,9 ==> M, S, L , yang mengkodekan nilai 3 . Karenanya, kartu tersembunyi adalah 3 + 3 = 6 berlian, sehingga hasilnya harus D6 .
Kasus uji:
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
Ini adalah kode-golf , sehingga solusi terpendek dalam setiap bahasa menang. Penjelasan didorong!
1 Ada empat setelan ( C lubs, D iamonds, H earts dan S pades).
2 Ada 13 jajaran, 2,3,4,5,6,7,8,9,10, J, Q, K, A . Anda dapat memilih untuk menggunakan T daripada 10 .
92427**3
dan modifikasik+7
untukk+8
menghemat 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