Tugas
Tujuan Anda, jika Anda memilih untuk menerimanya, adalah untuk menulis sebuah program, yang, diberi string input (atau array karakter), menampilkan setiap kemungkinan permutasi dari huruf-huruf dalam string itu. Saya rewel dengan hasil saya, jadi harus diurutkan berdasarkan abjad, tanpa duplikat.
Contoh:
Memasukkan: buzz
Keluaran:
buzz
bzuz
bzzu
ubzz
uzbz
uzzb
zbuz
zbzu
zubz
zuzb
zzbu
zzub
Aturan
- Ini adalah kode-golf sehingga kode terpendek menang.
- Mengejar spasi pada setiap baris apa pun tidak masalah
- Satu baris baru setelah baris terakhir diizinkan (tetapi tidak lebih)
code-golf
string
permutations
Brian Gradin
sumber
sumber
["buzz" "bzuz" "bzzu" "ubzz" "uzbz" "uzzb" "zbuz" "zbzu" "zubz" "zuzb" "zzbu" "zzub"]
?N*
untukp
) :-)Jawaban:
Jelly , 5 byte
Cobalah online!
Penjelasan
sumber
05AB1E ,
43 byteDiperbarui, sejak pembaruan untuk
œ
memecahkan versi lama,yang juga menyimpan byte seperti yang disarankan oleh Magic Octopus Mm .
Cobalah online!
Penjelasan
sumber
œê»
baik untuk non-warisan.œ
sekarang mengembalikan daftar string di keduanya.MATL , 4 byte
Cobalah online!
Penjelasan
sumber
Python 3.5, 79 byte
Fungsi yang mengambil input sebagai daftar karakter dan output dengan mencetak.
Secara rekursif membuat setiap permutasi yang berbeda dengan mengambil setiap karakter berikutnya yang mungkin secara abjad dari karakter yang berbeda yang tersisa, dan menambahkannya ke output yang sedang berlangsung
w
. Kemudian, kami berulang dengan karakter ini dihapus. Setelah input dikosongkan, kami mencetakw
.sumber
CJam , 5 byte
Terima kasih kepada @EriktheOutgolfer untuk koreksi (
q
bukanr
)Cobalah online!
Penjelasan
sumber
Pyth - 5 byte
Cobalah online di sini .
sumber
S
benar-benar dibutuhkan?Haskell, 46 byte
2 byte disimpan berkat nimi
sumber
f=
.J, 19 byte
Kasus cobaan
Penjelasan
Ini adalah kereta 4:
Pada dasarnya:
sumber
[:~.i.@!@#A./:~
akan menghemat beberapa byteJavaScript (Firefox 30+),
129124 byteTidak terlalu buruk untuk bahasa tanpa permutasi bawaan ...
sumber
Python 3.5, 81 byte:
Sungguh ... 81 byte ketika jawaban terpanjang berikutnya adalah 48 byte ... huh . Yah, saya akan mencoba golf ini sebanyak yang saya bisa, tetapi tips golf masih sangat dihargai.
Juga, berikut ini adalah solusi terpendek yang saya dapat dalam Python 2 pada 86 byte :
Rupanya dalam Python 2,
[*...]
mengembalikan aSyntax Error
, dan karenapermutations
kembaliitertools.permutations object at 0x...
, cara terpendek berikutnya (yang saya tahu) mengekstraksi permutasi unik adalah menggunakan di{''.join(i)for i in permutations(f)}
manaf
string input.Akhirnya, perhatikan bahwa keduanya adalah fungsi lambda dan karenanya harus dipanggil dalam format
print(<Function Name>(<Input String>))
.sumber
Mathematica,
3423 byteInput harus berupa daftar karakter.
Penjelasan
Temukan semua permutasi dari input, diurutkan dan bebas duplikat
Cetak satu per satu.
sumber
Brachylog , 9 byte
Cobalah online!
Penjelasan
sumber
Perl 6 ,
4944 byteString sebagai input
Daftar karakter sebagai input
Diperluas
sumber
#perl6
saluran freenode.net .».say
alih - alih.map: *.put
».say
diizinkan untuk melakukannya dalam urutan apa pun, dan pada satu waktu sengaja dilakukan rusak.Brachylog (v2), 5 byte
Cobalah online!
Cari
ᵘ
niquep
ermutations input, so
rt mereka,ᵐ
apẉ
riteln (write dengan newline) lebih array.sumber
Python 3,
7785 byteSekarang macam!
sumber
from itertools import*
sebaliknyaimport itertools as i
. Anda dapat menyimpan byte dengan menggantinyai.permutations
denganpermutations
.{*...}
bukannyaset(...)
menghemat dua byte lagi.PowerShell v3 +, 171 byte
PowerShell v3 memperkenalkan
-Unique
flag padaSort-Object
cmdlet, jadi beberapa byte lebih pendek dari versi v2 di bawah ini, karena kita tidak perluSelect
terlebih dahulu.versi v2, 178 byte:
PowerShell tidak memiliki permutasi bawaan, jadi saya meminjam kode saya dari Prime Factors Buddies dan sedikit mengubahnya untuk digunakan di sini.
Ini pada dasarnya adalah tiga bagian, yang akan saya bahas di bawah ini.
param([char[]]$x)$a,$b=$x;$a=,$a
Mengambil input$x
, melemparkannya sebagaichar
-array, melepas huruf pertama ke dalam$a
dan sisanya ke dalam$b
, dan kemudian menyusun kembali$a
sebagai array dengan koma-operator.while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}
Loop melalui huruf-huruf yang tersisa ($b
), setiap iterasi mengambil huruf berikutnya dan menyimpannya ke dalam$z
dan meninggalkan sisanya di$b
, kemudian array-concatenating ke$a
hasil pengiriman$a
melalui loop sendiri - setiap item$a
(disimpan sementara ke dalam$c
) dilingkarkan miliknya sendiri.length
, dan kemudian$z
dimasukkan ke dalam setiap posisi, termasuk menambahkan dan menambahkan dengan$z$c
dan$c$z
. Misalnya, untuk$c = '12'
dan$z = '3'
, ini akan mengakibatkan'132','312','123'
digabungkan kembali ke$a
.Bagian terakhir
$a|?{$_.length-eq$x.count}|select -u|sort
mengambil setiap elemen$a
dan menggunakanWhere-Object
klausa untuk menyaring hanya mereka yang memiliki panjang yang sama dengan string input, kemudianselect
hanya-u
item unik, dan akhirnyasort
adalah mereka berdasarkan abjad. String yang dihasilkan semuanya ditinggalkan di pipa, dan output melalui implisitWrite-Output
terjadi pada penyelesaian program.sumber
|select -u|sort
ke|sort -u
. Cukup yakin 2,0 tidak memilikinya.JavaScript (ES6), 119 byte
Dimana
\n
mewakili karakter baris baru literal. Port of @ ETHproduksi menjawab untuk menggunakan string, bukan array. Membalikkan output, atau memindahkan baris baru ke awal, menghemat 3 byte.sumber
R, 113 byte
Membaca input dari stdin. Itu
permute
paket diasumsikan untuk diinstal dalam rangka untuk memanggilallPerms
fungsi.Akan menambahkan penjelasan saat saya pulang kerja.
sumber
Java
302300 byteTidak digabungkan & kode uji:
Coba di sini.
Input: uji
Output:
sumber
Racket 82 byte
Tidak Disatukan:
Pengujian:
Ouput:
sumber
Groovy, 69 Bytes
sumber
Ruby, 51 byte
sumber
puts s.chars.permutation().map(&:join).uniq
43 Bytes
tanpa definisi sebelumnya.Sebenarnya , 8 byte
Selamat datang saran bermain golf! Cobalah online!
Tidak melakukanolf
sumber
Pip , 8 byte
7 byte kode, +1 untuk
-n
bendera.Mengambil string sebagai argumen baris perintah. Cobalah online!
Pemindai Pip memecah huruf besar menjadi potongan dua huruf. Jadi kode ini
SS UQ PM a
--ieSortString(UniQue(PerMutations(a)))
, dengana
menjadi baris perintah arg. The-n
bendera memastikan daftar hasil adalah baris baru-dipisahkan. Itu semua yang ada untuk itu.sumber
K (oK) , 14 byte
Larutan:
Cobalah online!
Penjelasan:
Gunakan fungsi permutasi bawaan
prm
,, untuk menghasilkan permutasi panjang input, terapkan permutasi ini ke input, urutkan secara abjad dan kemudian ambil nilai yang berbeda.sumber
Perl 5
-MList::Util=uniq -F
, 68 byteCobalah online!
sumber
Japt v2.0a0
-R
, 5 byteCobalah
sumber
û
adalah metode pusat pas; Saya pikir Anda maksudn
;)sort
di juru bahasa Anda dan mengklik yang pertama saya temukan. Tetapiá
tampaknya memberikan setiap permutasi dalam urutan abjadü
. Saya akan memperbaikinya besok. Permutasi "buzz" kebetulan disortir karena kata itu sendiri - coba saja dengan "zzub", misalnya.n
(lebih mudah untuk mengetik)C ++ (gcc) ,
132128 byteCobalah online!
sumber
Clam , 9 byte
Penjelasan
sumber