Trik sulap kartu sulap pertama yang saya pelajari sejak kecil adalah sebagai berikut:
- Memiliki 1 deck kartu di mana pola di bagian belakang tidak simetris secara vertikal.
- Atur semua kartu agar menghadap satu arah.
- Minta seseorang untuk, "mengambil kartu, kartu apa saja, menghafalkannya dan mengembalikannya kepada Anda".
- Lanjutkan untuk memasukkannya ke dalam dek (ke arah yang salah).
- Kocoklah dengan kuat, berikan ilusi bahwa Anda tidak akan tahu di mana kartu mereka.
- Hasilkan kartu mereka dengan takjub.
Trik ini jelas sedikit kurang berkilau di alam sekarang-a-hari, namun itu membuat tantangan yang baik. Tulis sebuah program, yang ketika tidak diberi input, mengeluarkan setumpuk kartu yang dikocok secara acak dengan salah satu kartu, dipilih secara acak, terbalik. Namun, ketika input adalah setumpuk kartu dengan satu kartu terbalik, Anda harus mengeluarkan kartu yang terbalik (dalam urutan yang benar).
Dek Kartu
Setumpuk kartu didefinisikan sebagai:
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS,
2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD,
2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH,
2C,3C,4C,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC]
Kartu didefinisikan sebagai nomornya, lalu huruf pertama dari kartu itu. Kebalikan dari kartu adalah kebalikannya, huruf pertama dari suitnya diikuti oleh angka.
Kartu yang Diambil
Contoh, jika kartu yang kami pilih secara terbalik adalah 4 of Clubs (4C)
, kami akan berakhir dengan (tanpa mengocok, jelas):
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS,
2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD,
2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH,
2C,3C,C4,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC]
The Shuffling
Lalu, setelah mengocok:
[2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D]
Ini adalah output yang valid diberikan input kosong.
Input Dek
Namun, sebaliknya, ketika program kami menerima output di atas sebagai input, seharusnya output 4C
. Artinya, untuk masukan dari:
[2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D]
Anda mengulangi sampai Anda menemukan kartu yang terbalik, dan mengembalikannya, kembali ke keadaan normal. Jadi di sini kita akan menemukan C4
, tahu bahwa C bukan angka, dan kembalikan sebagai 4C
, yang benar.
Aturan
- Anda tidak boleh memuat deck dari sumber eksternal apa pun.
- Input kosong harus menghasilkan dek acak acak dengan 1 kartu acak terbalik.
- Setumpuk kartu dengan 1 kartu terbalik sebagai input akan menghasilkan kartu terbalik.
- Input lain apa pun dapat menghasilkan ledakan llama yang mengendarai segway melalui pipa futuristik.
- Atau yang lainnya, dalam hal ini.
- Baik kartu yang dipilih dan urutan pengocokan harus acak secara acak.
- IE semua kartu memiliki peluang yang sama untuk dipilih untuk dibalik.
- Semua kombinasi kartu memiliki peluang yang sama untuk muncul.
- Anda dapat menggunakan
SHCD
ataushcd
untuk jas, tetapi konsisten:- Jika Anda memilih huruf besar (
SHCD
) Anda juga harus menggunakanTJQKA
. - Jika Anda memilih huruf kecil (
shcd
) Anda juga harus menggunakantjqka
.
- Jika Anda memilih huruf besar (
- Ini adalah kode-golf , pemenangnya adalah byte terendah.
sumber
Jawaban:
Retina ,
616059 byteCobalah online! Sunting: Disimpan
12 byte berkat @MartinEnder. Penjelasan:Hapus semua kartu yang tidak dapat dikembalikan. Ini harus meninggalkan satu kartu terbalik atau tidak ada kartu.
Jika inputnya (sekarang) kosong, buat satu pak kartu.
Pilih satu kartu secara acak dan balikkan (membatalkan kartu tunggal terbalik).
Kocok kartu.
sumber
05AB1E , 29 byte
Cobalah online!
sumber
1
dana
di sana.Y9ŸJ
sebagai9LJ
PowerShell v2 atau lebih baru, 175 byte
Versi panjang:
Pemakaian:
Buat dek acak dan simpan dalam variabel:
Periksa variabel sesuka hati, misalnya
Pipa kembali deck ke skrip:
sumber
Python 2 , 175 byte
Cobalah online! input kosong dilambangkan sebagai
[]
sumber
> <> ,
215193 byteCobalah online!
Mengambil input sebagai kartu yang tidak terpisah, dan menghasilkan yang sama (mis.
KCAC5C6S...
)Untuk membuatnya lebih mudah untuk diuji, inilah versi yang mengambil input sebagai dipisahkan koma dan output sebagai baris baru dipisahkan.
Semua
x0
ini hanyalah upaya untuk membuat generator angka acak semi-seragam. Semakin banyak dari mereka meningkatkan rentang nilai yang mungkin, dan sebaliknya untuk kurang. 10 dari mereka adalah tempat saya menilainya cukup acak.Perhatikan bahwa itu mengikuti aturan dalam hal itu:
Tetapi tidak semua kombinasi yang dikocok adalah output yang mungkin (dan pada kenyataannya, sebagian besar tidak).
sumber
Jelly , 26 byte
Tautan monadik yang menerima daftar daftar karakter (sebuah rintisan 0 kartu atau setumpuk penuh 52 kartu dengan satu kartu dibalik) dan mengembalikan daftar daftar karakter (sebuah rintisan dari 1 kartu terbalik tetapi maju atau penuh -deck dengan satu kartu acak terbalik).
Cobalah online! (footer untuk membuat representasi input dan output cocok - sebagai program penuh kode Jelly Python-evals argumen dan menghancurkan karakter bersama untuk output)
Bagaimana?
sumber
Ẋ
sebelumU
(mungkin saya bisa memperbaiki nol byte sebagai gantinya) tetapi harus melakukannya nanti ...[[number, suit]]
bukan[number, suit]
mewakili satu kartu ketika input tidak kosong.Ruby , 95 (atau 100) byte
Diberikan array kosong sebagai input, mengembalikan dek sebagai array string. Diberikan array yang kosong sebagai input, mengembalikan kartu yang dibalik sebagai array yang berisi string tunggal. Jika kartu yang dibalik diperlukan sebagai string daripada array elemen tunggal yang mengandung string, berikut ini menambah 5 byte: ubah
s-n
ke(s-n)[0]
Cobalah online!
Baris pertama menghasilkan dek standar. Baris kedua rusak sebagai berikut
sumber
Java 8,
275274259 byteInput adalah sebuah String, output adalah sebuah String atau
java.util.List
tergantung pada input.Penjelasan:
Cobalah online.
sumber
Pyth, 45 byte
Mengambil daftar kosong untuk input kosong.
Cobalah online
Penjelasan
sumber
R ,
177171 byteCobalah online!
Diberikan input kosong, (panggilan
f
tanpa input), kami default kel=1
dan dengan demikian membuat permutasi acakm
dari dek. Dengan asumsisample
benar-benar acak, ada probabilitas yang sama dari kartu apa pun yang menjadi yang pertama dalam daftar ini. Jadi kami memodifikasi yang pertama, dan kemudian mengocok lagi, mengembalikan daftar.Membalikkannya, kami mencari kartu yang dimulai dengan salah satu
SDHC
dan membalikkannya.sumber
Python 2 , 135 byte
Cobalah online!
Kartu adalah tupel dari
(value,suit)
Masukan kosong adalah
[]
sumber