Tulis fungsi yang mengambil satu set integer dan mencetak setiap permutasi set, dan swap dilakukan di antara setiap langkah
Memasukkan
seperangkat bilangan bulat, misalnya (0, 1, 2)
Keluaran
daftar permutasi dan swap dalam format (set) (swap) (set) ...
Kasus cobaan
Input:
(3, 1, 5)
Output:
(3, 1, 5)
(3, 1)
(1, 3, 5)
(3, 5)
(1, 5, 3)
(1, 3)
(3, 5, 1)
(3, 5)
(5, 3, 1)
(3, 1)
(5, 1, 3)
Aturan
- Anda dapat memformat set angka sesuai keinginan Anda.
- Anda dapat melakukan swap dalam urutan apa pun
- Anda dapat mengulangi permutasi dan swap untuk mendapatkan yang baru
- Kode Anda tidak harus benar-benar melakukan swap, output hanya perlu menunjukkan swap apa yang dibuat antara output terakhir Anda dan yang Anda miliki saat ini
- Kode Anda hanya perlu berfungsi untuk set dengan 2 elemen atau lebih
- Set yang Anda berikan tidak akan memiliki elemen berulang (mis. (0, 1, 1, 2) tidak valid)
Ini kode-golf, jadi kode terpendek menang!
code-golf
math
permutations
Billyoyo
sumber
sumber
(3, 1, 4)
atau lebih - membacanya pertama kali saya sangat bingung karena swap pertama0,1
bertukar elemen0,1
tetapi juga indeks0,1
, tetapi kemudian berikutnya swap tidak mengikuti pola itu. Saya juga akan mengarahkan Anda ke Sandbox di mana Anda dapat memposting tantangan dan mendapatkan umpan balik sebelum mempostingnya ke situs utama.Jawaban:
Mathematica, 102 byte
Contohnya
// Kolom untuk hasil yang lebih jelas
sumber
Java,
449426 bytePendekatan kekerasan. Itu terus membuat swap acak sampai semua permutasi yang mungkin terjadi. Ini menggunakan Set representasi string dari array untuk memeriksa berapa banyak negara yang berbeda telah dihasilkan. Untuk n bilangan bulat yang berbeda ada n! = 1 * 2 * 3 * .. * n permutasi yang berbeda.
Memperbarui
Tidak Disatukan:
Pemakaian:
Seperti yang Anda lihat ada banyak swap lebih dari minimum yang diperlukan. Tapi sepertinya berhasil :-D
Sebagai bonus, ia bekerja dengan string juga, yaitu
sumber
Set s=new HashSet();
. Kode Anda dalam metoden
dapat kembali tunggal:static int n(int x){return x==1?1:x*n(x-1);}
. Dan Anda dapat menggantiString z
metode Andao
dengan generik bukan:static<T>void o(T z){System.out.println(z);s.add(z);}
. Semua digabungkan akan turun ke 426 byte .JavaScript (ES6), 186 byte
Catatan: Saya tidak yakin seberapa fleksibel format outputnya, mungkin saya bisa melakukan ini untuk 171 byte:
Bekerja dengan melakukan algoritma Steinhaus – Johnson – Trotter pada array shuffle indeks dan menerjemahkan kembali ke array input. Tidak Disatukan:
sumber
Ruby, 86 byte
sumber
Haskell - 135 byte
keluaran:
Saya menggunakan
permutations
fungsi standar , yang tidak didasarkan pada swap, jadi saya mengambil permutasi permutasi dan menemukan satu yang kebetulan merupakan rantai swap.sumber