Untuk tantangan ini, Anda akan membuat fungsi (fungsi Anda mungkin merupakan program lengkap) yang mengambil daftar sebagai input dan mengembalikan permutasi daftar itu. Fungsi Anda harus mematuhi persyaratan berikut.
Itu harus deterministik.
Menyusun fungsi Anda dengan dirinya sendiri beberapa kali variabel harus mampu mendapatkan daftar ke permutasi apa pun.
Ini adalah pertanyaan kode-golf sehingga jawaban akan dinilai dalam byte, dengan lebih sedikit byte yang lebih baik.
Aturan lebih lanjut
Anda dapat mengambil jenis daftar, (
[Integer]
,[String]
,[[Integer]]
) asalkan- Bisa tidak kosong
- Dapat berisi objek yang berbeda dengan setidaknya 16 nilai yang mungkin. (Anda tidak dapat menggunakan Haskell
[()]
dan mengklaim fungsi Anda adalahid
) - Dapat berisi objek duplikat (tanpa set)
Anda dapat menulis program atau fungsi, tetapi harus mematuhi standar IO.
code-golf
permutations
Ad Hoc Garf Hunter
sumber
sumber
S_n
hanya siklus untukn<3
next_permutation
fungsi.Jawaban:
CJam (11 byte)
Demo online menunjukkan siklus penuh untuk daftar empat elemen dengan satu elemen duplikat.
Pembedahan
sumber
Mathematica + Combinatorica (Paket Bawaan) 34 Bytes
19 byte untuk memuat paket dan 15 untuk fungsi.
Pemakaian:
Tanpa built-in, 61 Bytes
Combinatorica seharusnya sepenuhnya dimasukkan ke dalam Mathematica, tapi saya pikir fungsi NextPermutation diabaikan.
sumber
Python 3 , 90 byte
Cobalah online!
sumber
C ++, 42 byte
Operasi yang tepat ini adalah bawaan di C ++.
sumber
#include
?JavaScript (ES6),
145139137134108 byteMenyimpan 25 byte kekalahan berkat @Neil!
Mengambil input sebagai array karakter alfabet. Mengembalikan permutasi berikutnya sebagai array lain.
Bagaimana?
Ini adalah generasi dalam urutan leksikografis yang memproses 4 langkah berikut di setiap iterasi:
Temukan indeks X terbesar sehingga [X] <a [X + 1]
Temukan indeks Y terbesar lebih besar dari X sehingga [Y]> a [X]
Tukar nilai [X] dengan nilai [Y]
Urutkan urutan dari [X + 1] hingga dan termasuk elemen terakhir, dalam urutan leksikografis naik
Contoh:
Demo
Tampilkan cuplikan kode
sumber
v<a[i+1]&&(t=v,x=i)
menghemat satu byte, dan Anda mungkin dapat melakukan lebih banyak penghematan dengan menggunakansplice
duaslice
s.map
juga, untuk 112 byte:a=>(t=x=y=-1,a.map((v,i)=>v<a[i+1]?(t=v,x=i):y=i>x&v>t?i:y),a[x]=a[y],a[y]=t,t=a.splice(++x).sort(),a.concat(t))
a.concat(a.splice(++x).sort())
akan berhasil kalau tidak saya akan mencobanya ...Jelly , 6 byte
Siklus melalui permutasi dalam urutan leksikografis menurun.
Cobalah online!
Bagaimana itu bekerja
sumber
C, 161 byte
Algoritma O (n) aktual.
Contoh penggunaan:
sumber
Python 2 , 154 byte
Cobalah online!
sumber
exec
memberi saya semua jenis kesalahan dalam suatu fungsiJelly , 10 byte
Cobalah online!
Sortir> semua permutasi> temukan input> tambahkan 1> indeks ke dalam "semua permutasi
sumber
Œ¿‘œ?Ṣ
). Saya tidak merasa ingin mencuri karena, yah, algo yang sama.Q
thingy. Anda masih bisa bermain golfṢŒ!Qµi³‘ị
.05AB1E , 7 byte
Cobalah online!
sumber
PHP , 117 byte
Mengambil input / output sebagai daftar string huruf yang lebih rendah
Cobalah online!
sumber