Trik sulap 5 kartu melibatkan pesulap yang asistennya memberi mereka 4 kartu yang ditunjukkan dan yang tersembunyi, dalam urutan ini, dan pesulap harus menebak yang tersembunyi.
PERINGATAN: Solusi di bawah ini! Tinggalkan sekarang atau manja dengan itu.
Solusinya
Kuncinya di sini adalah bahwa lima kartu diberikan dalam urutan tertentu !
adalah 5 kartu dalam urutan yang diberikan.
adalah nomor kartu dalam (urutan nomor).
, di mana adalah nomor kartu dan adalah bilangan bulat, sama dengan nomor kartu langkah ke kanan dalam , membungkus dengan awal jika perlu.
adalah setelan dalam (urutan pesanan).
, di mana adalah nomor kartu dan adalah jas, menunjukkan kartu dengan nomor kartu dan jas .
, di mana dan adalah kartu, benar jika 's jas adalah ke kiri dari ' s gugatan di , atau pakaian mereka adalah sama dan 's nomor kartu adalah ke kiri dari ' s kartu nomor dalam .
, di mana dan adalah kartu, benar jika salah.
, di mana , dan adalah kartu, adalah indeks permutasi dari urutan ini, yang ditentukan oleh tabel di bawah ini:
Solusi untuk 5-kartu trik sulap adalah masalah adalah:
Tantangan
Sejauh ini baik. Namun, melakukan perhitungan yang ditentukan di atas sudah diminta di sini . Sebaliknya, tantangan Anda adalah, mengingat 5 kartu tanpa urutan tertentu, untuk memesannya dengan benar. Ini berarti bahwa empat kartu pertama dalam output akan mewakili yang kelima. Dengan kata lain, jadilah asisten. Persyaratan:
- .
- (artinya, ini harus dimungkinkan).
Contoh
Mari kita pertimbangkan set 7H,2D,6D,5C,6C
. Pertama-tama, kami mengambil 25 pasangan:
7H,7H 7H,2D 7H,6D 7H,5C 7H,6C
2D,7H 2D,2D 2D,6D 2D,5C 2D,6C
6D,7H 6D,2D 6D,6D 6D,5C 6D,6C
5C,7H 5C,2D 5C,6D 5C,5C 5C,6C
6C,7H 6C,2D 6C,6D 6C,5C 6C,6C
Kemudian, kami jelas menghapus 5 pasang yang berisi kartu yang sama dua kali, mereka tidak ada dalam satu dek:
7H,2D 7H,6D 7H,5C 7H,6C
2D,7H 2D,6D 2D,5C 2D,6C
6D,7H 6D,2D 6D,5C 6D,6C
5C,7H 5C,2D 5C,6D 5C,6C
6C,7H 6C,2D 6C,6D 6C,5C
Setelah itu, karena jas harus sama, setelan yang berbeda pada pasangan adalah tidak-tidak:
2D, 6D 6D, 2D 5C, 6C 6C, 5C
Akhirnya, kami memeriksa apakah mungkin untuk beralih dari kartu pertama ke kartu kedua dengan menambahkan paling banyak 6, menghilangkan setengah dari pasangan yang tersisa:
2D, 6D 5C, 6C
Sekarang kami memiliki pasangan yang valid: 2D,6D
dan 5C,6C
. Kartu pertama dari setiap pasangan adalah kartu 1, sedangkan yang terakhir adalah kartu 5.
Kita akan pergi dengan di 5C,6C
sini untuk kemudahan. Seluruh set adalah 7H,2D,6D,5C,6C
, jadi, mengeluarkan 2 kartu dari pasangan yang kami pilih, kami miliki 7H,2D,6D
. Kartu-kartu ini akan mewakili 6 - 5 = 1
, jadi kami harus memesannya seperti "min, mid, max". 7H > 2D < 6D < 7H
, atau sederhananya 2D < 6D < 7H
, jadi sekarang kita miliki 2D,6D,7H
.
Langkah terakhir adalah menyatukan semua ini, jadi hasilnya adalah 5C,2D,6D,7H,6C
.
Klarifikasi
- Anda dapat menggunakan
10
sebagai gantinyaT
. - Anda dapat menggunakan salah satu
♠♥♦♣
,♤♡♢♧
atau♠♡♢♣
bukanCDHS
, masing-masing. - Ini kode-golf , kode terpendek yang menang.
Uji kasus
Anda dapat mengeluarkan satu atau beberapa solusi valid yang disertakan untuk setiap test case.
8S,TD,5C,QS,TS -> 8S,5C,QS,TD,TS
... 8S,TD,TS,5C,QS
... TS,5C,8S,TD,QS
JD,KH,4S,9D,8S -> 9D,KH,8S,4S,JD
... 4S,JD,KH,9D,8S
4H,4D,TH,KH,2C -> 4H,KH,4D,2C,TH
... TH,4D,2C,4H,KH
... KH,4D,TH,2C,4H
3S,KS,8S,KH,9H -> 9H,8S,KS,3S,KH
... 3S,KS,9H,KH,8S
... 8S,3S,9H,KH,KS
... KS,KH,9H,8S,3S
KH,TS,3C,7H,JD -> 7H,TS,JD,3C,KH
4C,KC,TD,JD,QS -> KC,JD,QS,TD,4C
... TD,4C,KC,QS,JD
AC,5H,8D,6D,8S -> 6D,AC,8S,5H,8D
AS,TC,3S,2H,9C -> 9C,2H,AS,3S,TC
... AS,9C,2H,TC,3S
4C,JS,AS,8H,JC -> JC,JS,AS,8H,4C
... JS,JC,4C,8H,AS
4H,QS,TH,QC,AC -> QC,4H,QS,TH,AC
... 4H,QS,QC,AC,TH
sumber
Jawaban:
Node.js ,
190186180 byteCobalah online!
Bagaimana?
Mengidentifikasi dan membandingkan nomor kartu
Fungsi helperg mengembalikan indeks yang menunjukkan jumlah kartu yang diberikan.
"NS"
Menghasilkan permutasi dari input
Menguji jasnya
Tes jelas pertama adalah memastikan bahwa kartu pertama dan terakhir dari jenis yang sama. Kami menolak permutasi jika mereka tidak sama.
Menguji jarak
Kami menghitung jarak antara nomor kartu pertama dan nomor kartu terakhir dengan:
Tes ini bergantung pada cara
sort()
algoritma Node.js bekerja.sort()
Mari kita pertimbangkan kode berikut:
Sekarang, jika kita lakukan:
Setiap permutasi menghasilkan bitmask unik, yang dipetakan ke jarak unik:
Menyatukan semuanya, kami memiliki tes berikut:
sumber
Python 3 ,
260 248232 byteCobalah online!
-12 byte terima kasih kepada Eric the Outgolfer
-14 byte dengan menghapus daftar pemahaman
sumber
Bersih ,
225220209 byteCobalah online!
Sebagai fungsi tersusun
:: [[Char]] -> [[Char]]
,, dengan beberapa pembantu.Diperluas:
sumber
Ruby , 175 byte
Cobalah online!
Fungsi lambda mengambil array kartu sebagai string
Berkomentar
sumber
Jelly , 41 byte
Tautan monadik yang menerima daftar daftar karakter yang mengembalikan daftar semua pengaturan yang valid dalam format yang sama.
Cobalah online! (footer memformat hasilnya sebagai kisi untuk menghindari cetak smashing implisit seperti yang dilakukan oleh kode Link ketika dijalankan sebagai program lengkap)
Atau lihat test-suite .
Saya memiliki kecurigaan yang menyelinap pendekatan lain akan jauh lebih singkat. Saya harus meninjau kembali tantangan ini nanti!
... hmm, saya punya colekan lain dan mendapat 41 byter lainnya ( tes ):
sumber