Tulis fungsi yang mengambil sebagai input satu set bilangan bulat (bisa berupa daftar, larik atau wadah lain dengan angka yang berbeda), dan menampilkan daftar semua permutasi.
Python (95 karakter) :
p=lambda s:s and sum(map(lambda e:map(lambda p:[e]+p,p(filter(lambda x:x!=e,s))),s),[]) or [[]]
Akan menyenangkan bisa dikalahkan dalam bahasa yang sama, tetapi implementasi dalam bahasa lain lebih dari diterima!
code-golf
combinatorics
permutations
zxul767
sumber
sumber
Python, 52
Input adalah satu set. Output adalah daftar daftar.
Ini lebih pendek dari jawaban yang melakukan semua pekerjaan dengan builtin .
sumber
J, 11 karakter
Pemakaian:
Penjelasan:
i.@!@#
menggunakan tiga kata kerja untuk mengembalikan daftar dari 0 ke (! n) -1 di mana n adalah jumlah item dalam daftar yang diberikan.[
mengembalikan daftar itu sendiri. Dalam contoh yang ditunjukkan itu memberi0 1 2 3 4 5 A. 1 3 5
.A.
mengembalikan satu kemungkinan permutasi dari daftar kedua untuk setiap item dalam daftar pertama (jenis - penjelasan yang tepat diberikan di sini ).sumber
Python - 55 karakter
sumber
Haskell,
4443Pada dasarnya sama dengan solusi ugoren, tetapi Haskell lebih baik dalam hal pemahaman daftar!
Tentu saja bisa juga
30
Pendekatan yang lebih efisien, yang tidak memerlukan perbandingan kesetaraan:
92
Sebagai akibatnya, yang ini juga berfungsi ketika ada elemen duplikat dalam daftar.
sumber
p=Data.List.permutations
. Rasanya seperti selingkuh. Juga,Data.List.permutations
tidak menampilkan permutasi dalam urutan leksikografis.p[]=[[]]
sebagai kasing sebagai gantinya, menghemat dua byte.dalam Q (48)
Penggunaan sampel:
sumber
Ruby - 23 karakter
misalnya
f[[1,2,3]]
keluaran ini .tetapi menggunakan
[].permutation
rasanya seperti curang, jadi:Ruby - 59 karakter
diuji dengan
sumber
f(array) { return array.sort(); }
Python - 58 karakter
Sedikit lebih pendek dari ugoren, dengan mengambil set sebagai input:
sumber
C,
270243239 karakterFungsi P (n, a) mengembalikan pointer ke n! permutasi dari, dikemas satu demi satu dalam satu susunan raksasa.
sumber
<malloc.h> isn't needed (ignore the warnings).
sizeof n` adalah 4 (portabilitas bagus, tetapi lebih pendek lebih baik). Gunakan parameter tambahan sebagai variabel (misp(n,a,N,i)
.).int*p(..)int*a,o;
. Menggunakan variabel global alih-alih parameter dan mengembalikan nilai sering membantu.K, 30 byte
Tidak ada builtin!
sumber
JS -
154146 karakterfunction f(x){var a=[],m;(m=x.length)>1?f(x.slice(1)).map(function(y){for(l=m;l--;a.push(y.slice(0,l).concat(x[0],y.slice(l))));}):a=[x];return a}
Tes:
f([1,2,3,4,5]).map(function(a){return a.join('')}).join('\n')
mengembalikan ini .sumber
R
Karena kita berbicara tentang permutasi, izinkan saya menunjukkan setidaknya satu solusi di R:
sumber
Perl 188
Tidak ada rutinitas perpustakaan, tidak ada rekursi
sumber
Scala 30:
Scala 195, quick'n'dirty, tanpa permutasi dari perpustakaan:
Scala 293, dewasa, jenis iterator aman:
sumber
Python - 50 karakter
sumber
Pyth, 4 byte
Ya, Pyth dibuat setelah tantangan ini diposting dan semuanya. Ini masih sangat keren. : D
Demo langsung.
Membaca dari stdin lebih pendek satu byte:
sumber
JavaScript
143136134123sumber
js function p(s,a="",c="",i,z=[]){
alih-alihjs function p(s,a,c,i,z){if(!z)a=c="",z=[]
Brachylog , 2 byte
Cobalah online!
sumber
Python, 53 byte
sumber
Jelly , 2 byte
Cobalah online!
Yay untuk builtin!
sumber
K (oK) , 3 byte
Larutan
Cobalah online!
Penjelasan:
Ini adalah 3 byte built-in pintas ke berikut built-in 47 fungsi byte:
... yang dapat disingkat menjadi 23 byte jika kita tahu kita mendapatkan daftar int sebagai input:
sumber
Aksioma, 160 byte
ungolfed
Semua ini memanggil satu fungsi perpustakaan yang memberikan permutasi pada indeks (hanya integer sebagai permutasi sebagai permutasi pada [1], permutasi pada [1,2], permutasi pada [1,2,3] dll). Jadi cukup dapatkan set ini indeks dan membangun daftar; Kita harus mencatat bahwa ini tampaknya dikompilasi dengan baik untuk setiap Daftar tipe X
sumber
Japt , 1 byte
Japt penerjemah
Ini terbentur dan tidak memiliki jawaban Japt, jadi saya pikir saya akan melanjutkan dan menambahkan satu.
á
ketika diterapkan ke array dan tanpa argumen apa pun adalah builtin untuk "dapatkan semua permutasi". The-R
bendera yang digunakan di link interpreter hanya memodifikasi bagaimana hasilnya dicetak.sumber
APL (NARS), 39 karakter, 78 byte
uji:
sumber
05AB1E -
21 bytesœ
Input harus berupa array / daftar.
Penjelasan:
Menyimpan satu byte berkat Erik the Outgolfer
sumber