Tantangan:
Input: Daftar bilangan bulat positif yang berbeda dalam kisaran .
Keluaran: Bilangan bulat: berapa kali daftar diacak-acak . Untuk daftar, ini berarti daftar ini dibagi menjadi dua bagian, dan bagian ini saling terkait (yaitu mengacak-acak daftar yang [1,2,3,4,5,6,7,8,9,10]
akan dihasilkan sekali [1,6,2,7,3,8,4,9,5,10]
, jadi untuk tantangan ini input [1,6,2,7,3,8,4,9,5,10]
akan menghasilkan 1
).
Aturan tantangan:
- Anda dapat mengasumsikan bahwa daftar hanya akan berisi bilangan bulat positif dalam kisaran (atau jika Anda memilih untuk membuat daftar input yang diindeks 0).
- Anda dapat mengasumsikan semua daftar input akan menjadi daftar acak-acak, atau daftar diurutkan yang tidak dikocok (dalam hal ini hasilnya adalah
0
). - Anda dapat mengasumsikan bahwa daftar input akan mengandung setidaknya tiga nilai.
Contoh langkah demi langkah:
Memasukkan: [1,3,5,7,9,2,4,6,8]
Unshuffling sekali menjadi:, [1,5,9,4,8,3,7,2,6]
karena setiap item bahkan diindeks 0 datang terlebih dahulu [1, ,5, ,9, ,4, ,8]
, dan kemudian semua item 0-diindeks aneh setelah itu [ ,3, ,7, ,2, ,6, ]
.
Daftar ini belum dipesan, jadi kami melanjutkan:
Membatalkan daftar lagi menjadi: [1,9,8,7,6,5,4,3,2]
Sekali lagi menjadi: [1,8,6,4,2,9,7,5,3]
Lalu: [1,6,2,7,3,8,4,9,5]
Dan akhirnya:[1,2,3,4,5,6,7,8,9]
:, yang merupakan daftar yang diurutkan, jadi kita selesai mengacak.
Kami melepas paket aslinya [1,3,5,7,9,2,4,6,8]
lima kali [1,2,3,4,5,6,7,8,9]
, jadi hasilnya adalah5
dalam kasus ini.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah Default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Kasus uji:
Input Output
[1,2,3] 0
[1,2,3,4,5] 0
[1,3,2] 1
[1,6,2,7,3,8,4,9,5,10] 1
[1,3,5,7,2,4,6] 2
[1,8,6,4,2,9,7,5,3,10] 2
[1,9,8,7,6,5,4,3,2,10] 3
[1,5,9,4,8,3,7,2,6,10] 4
[1,3,5,7,9,2,4,6,8] 5
[1,6,11,5,10,4,9,3,8,2,7] 6
[1,10,19,9,18,8,17,7,16,6,15,5,14,4,13,3,12,2,11,20] 10
[1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20] 17
[1,141,32,172,63,203,94,234,125,16,156,47,187,78,218,109,249,140,31,171,62,202,93,233,124,15,155,46,186,77,217,108,248,139,30,170,61,201,92,232,123,14,154,45,185,76,216,107,247,138,29,169,60,200,91,231,122,13,153,44,184,75,215,106,246,137,28,168,59,199,90,230,121,12,152,43,183,74,214,105,245,136,27,167,58,198,89,229,120,11,151,42,182,73,213,104,244,135,26,166,57,197,88,228,119,10,150,41,181,72,212,103,243,134,25,165,56,196,87,227,118,9,149,40,180,71,211,102,242,133,24,164,55,195,86,226,117,8,148,39,179,70,210,101,241,132,23,163,54,194,85,225,116,7,147,38,178,69,209,100,240,131,22,162,53,193,84,224,115,6,146,37,177,68,208,99,239,130,21,161,52,192,83,223,114,5,145,36,176,67,207,98,238,129,20,160,51,191,82,222,113,4,144,35,175,66,206,97,237,128,19,159,50,190,81,221,112,3,143,34,174,65,205,96,236,127,18,158,49,189,80,220,111,2,142,33,173,64,204,95,235,126,17,157,48,188,79,219,110,250]
45
sumber
[1,3,5,7,9,2,4,6,8]
Panjangnya 9, tapi saya akan menambahkan beberapa lagi untuk panjang 7 dan 11 mungkin. EDIT: Menambahkan kasus uji[1,3,5,7,2,4,6] = 2
(panjang 7) dan[1,6,11,5,10,4,9,3,8,2,7] = 6
(panjang 11). Semoga itu bisa membantu.[1,6,2,7,3,8,4,9,5,10]
atau[6,1,7,2,8,3,9,4,10,5]
mungkin. Dalam tantangan saya itu tidak berarti bahwa kartu teratas akan selalu tetap menjadi kartu teratas, jadi itu memang sedikit trik. Saya belum pernah melihat seseorang atau hanya menggunakan riffle-shuffles untuk mengocok setumpuk kartu. Biasanya mereka juga menggunakan jenis shuffle lain di antaranya. Bagaimanapun, sudah terlambat untuk mengubah tantangan sekarang, jadi demi tantangan ini kartu teratas akan selalu tetap menjadi kartu teratas setelah mengacak-acak.Jawaban:
Jelly , 8 byte
Cobalah online!
Bagaimana?
sumber
JavaScript (ES6), 44 byte
Versi lebih pendek disarankan oleh @nwellnhof
Mengharapkan dek dengan kartu 1-diindeks sebagai input.
Cobalah online!
Diberi setumpuk[c0,…,cL−1] dengan panjang L , kami mendefinisikan:
Dan kami mencarin sedemikian rupa sehingga cxn=2 .
JavaScript (ES6),
57 5250 byteMengharapkan dek dengan kartu 0-diindeks sebagai input.
Cobalah online!
Bagaimana?
Karena JS kurang memiliki dukungan asli untuk mengekstraksi irisan array dengan loncatan kustom, mensimulasikan seluruh riffle-shuffle mungkin akan agak mahal (tapi jujur, saya bahkan tidak mencoba). Namun, solusinya juga dapat ditemukan dengan hanya melihat kartu ke-2 dan jumlah total kartu di dek.
Diberi setumpuk panjangL , kode ini mencari n sedemikian rupa sehingga:
di manac2 adalah kartu kedua dan k didefinisikan sebagai:
sumber
Python 2 , 39 byte
Cobalah online!
-4 Terima kasih kepada Jonathan Allan .
sumber
f=lambda x:2!=x[1]and-~f(x[::2]+x[1::2])
!=
bisa saja-
. ;-)x[1]>2
saya kira)R ,
585545 byteCobalah online!
Mensimulasikan proses penyortiran. Input diindeks 1, pengembalian
FALSE
untuk 0.sumber
Perl 6 ,
3432 byte-2 byte terima kasih kepada Jo King
Cobalah online!
Mirip dengan pendekatan Arnauld . Indeks kartu kedua setelah n mengocok adalah
2**n % k
dengan k didefinisikan seperti dalam jawaban Arnauld.sumber
APL (Dyalog Unicode) ,
35262322 byte SBCSCobalah online!
Thanks to Adám for the help, Erik the Outgolfer for -3 and ngn for -1.
The TIO link contains two test cases.
Explanation:
¹
sumber
∧/2≤/⍵
->⍵≡⍳≢⍵
Perl 6,
36 3432 bytes-2 bytes thanks to nwellnhof
Try it online!
Reverse riffle shuffles by sorting by the index modulo 2 until the list is sorted, then returns the length of the sequence.
It's funny, I don't usually try the recursive approach for Perl 6, but this time it ended up shorter than the original.
Explanation:
sumber
05AB1E (legacy), 9 bytes
Try it online!
Explanation
sumber
Å≠
that inspired this challenge. :)Java (JDK), 59 bytes
Try it online!
Works reliably only for arrays with a size less than 31 or solutions with less than 31 iterations. For a more general solution, see the following solution with 63 bytes:
Try it online!
Explanation
In a riffle, the next position is the previous one times two modulo either length if it's odd or length - 1 if it's even.
So I'm iterating over all indices using this formula until I find the value 2 in the array.
Credits
sumber
x.clone()
instead ofA.copyOf(x,l)
.J,
2826 bytes-2 bytes thanks to Jonah!
Try it online!
Inspired be Ven's APL solution.
Explanation:
K (ngn/k), 25 bytes
Thanks to ngn for the advice and for his K interpreter!
Try it online!
sumber
1#@}.(\:2|#\)^:(2<1{])^:a:
for 26 bytesAPL(NARS), chars 49, bytes 98
why use in the deepest loop, one algo that should be nlog(n), when we can use one linear n? just for few bytes more? [⍵≡⍵[⍋⍵] O(nlog n) and the confront each element for see are in order using ∧/¯1↓⍵≤1⌽⍵ O(n)]test:
sumber
Ruby, 42 bytes
Try it online!
How:
Search for number 2 inside the array: if it's in second position, the deck hasn't been shuffled, otherwise check the positions where successive shuffles would put it.
sumber
R,
7072 bytesTry it online!
Now handles the zero shuffle case.
sumber
C (GCC)
6463 bytes-1 byte from nwellnhof
This is a drastically shorter answer based on Arnauld's and Olivier Grégoire's answers. I'll leave my old solution below since it solves the slightly more general problem of decks with cards that are not contiguous.
Try it online
C (GCC) 162 bytes
Try it online
sumber
R, 85 bytes
Try it online.
Explanation
Stupid (brute force) method, much less elegant than following the card #2.
Instead of unshuffling the input
s
we start with a sorted vectoru
that we progressively shuffle until it is identical withs
. This gives warnings (but shuffle counts are still correct) for odd lengths of input due to folding an odd-length vector into a 2-column matrix; in that case, in R, missing data point is filled by recycling of the first element of input.The loop will never terminate if we provide a vector that cannot be unshuffled.
Addendum: you save one byte if unshuffling instead. Unlike the answer above, there is no need to transpose with
t()
, however, ordering isbyrow=TRUE
which is whyT
appears inmatrix()
.R, 84 bytes
Try it online!
sumber
PowerShell,
116 114 108 8478 bytes-24 bytes thanks to Erik the Outgolfer's solution.
-6 bytes thanks to mazzy.
Try it online!
sumber
Wolfram Language (Mathematica), 62 bytes
Try it online!
Explanation
The input list is
a
. It is unriffled and compared with the sorted list until they match.sumber
Red,
877978 bytesTry it online!
sumber
Perl 5
-pa
, 77 bytesTry it online!
sumber
Pyth, 18 bytes
Try it online!
-2 thanks to @Erik the Outgolfer.
The script has two line: the first one defines a function
y
, the second line callsy
with the implicitQ
(evaluated stdin) argument.¹
sumber
PowerShell,
62717066 bytes+9 bytes when Test cases with an even number of elements added.
-1 byte with splatting.
-4 bytes: wrap the expression with
$i
,$j
to a new scope.Try it online!
sumber
Japt,
131110 bytesTaking my shiny, new
, very-work-in-progressinterpreter for a test drive.Try it or run all test cases
sumber
Python 3, 40 bytes
Try it online!
I need to refresh the page more frequently: missed Erik the Outgolfer's edit doing a similar trick =)
sumber