Tentukan urutan panjang prepend-appendn
untuk menjadi permutasi dari angka 1, 2, ..., n
yang dapat dihasilkan oleh prosedur berikut:
Mulai dengan nomornya
1
.Untuk setiap angka dari
2
hinggan
, tempatkan nomor ini ke awal atau akhir urutan (baik tambahkan atau tambahkan , maka nama urutan).
Misalnya, ini adalah cara yang valid untuk menghasilkan urutan panjang tambahan 4 yang ditambahkan:
1
21 [beginning]
213 [end]
2134 [end]
Tugas Anda adalah untuk membangun program atau fungsi yang akan mengambil angka n
dari 3
menjadi 30
sebagai input, dan mencetak atau mengembalikan semua urutan panjang tambahan yang ditambahkan dalam urutan n
leksikografis (jika Anda mengeluarkan string dan bukan daftar, angka di atas 9 akan diwakili sebagai huruf a-u
, untuk menjaga panjang string). Misalnya, ini adalah pesanan untuk n = 4
:
1234 [RRR]
2134 [LRR]
3124 [RLR]
3214 [LLR]
4123 [RRL]
4213 [LRL]
4312 [RLL]
4321 [LLL]
Secara umum, ada 2 n-1 permutasi penambahan-append panjang n
.
Anda tidak boleh menggunakan fungsi penyortiran bawaan dalam bahasa Anda dalam kode Anda. Program terpendek untuk melakukan ini dalam bahasa apa pun menang.
sumber
a-u
. Bisakah kita hanya menampilkan daftar angka?Jawaban:
CJam,
22 20 1917 bytePerluasan kode :
Cara kerjanya :
Ini adalah versi kode debug:
Mari kita lihat cara kerjanya untuk input
3
:Cobalah online di sini
sumber
Haskell, 47 byte
sumber
f n=[[n:x,x++[n]]|x<-f$n-1]>>=id
(menggunakan fungsi concat kode-pegolf>>=id
).f n=[x++[n]|x<-f$n-1]++[n:x|x<-f$n-1]
,f n=map(++[n])(f$n-1)++[n:x|x<-f$n-1]
,f n=map(++[n])(f$n-1)++map(n:)(f$n-1)
,f n=(++[n])#n++(n:)#n;p#i=map p$f$i-1
Python 2, 68
Menghasilkan daftar daftar angka.
Solusi rekursif. Untuk
n==1
, keluaran[[1]]
. Jika tidak, tambahkann
ke awal atau akhir semua(n-1)
-permutasi. Prepending membuat permutasi lebih lambat dari penambahan, sehingga permutasi tetap diurutkan."Boolean"
b
mengkodekan apakah akan meletakkan[n]
pada awal atau akhir. Sebenarnya, kami memindahkan sisa daftarx
dalam ekspresix*b+[n]+x*-b
. Dimasukkanb
sebagai-1
atau1
mari kita gunakan flip dengan meniadakan, karena daftar dikalikan dengan-1
adalah daftar kosong.sumber
Pyth, 19
Cobalah online di sini
Ini adalah program lengkap yang mengambil input dari stdin.
Ini bekerja dengan cara yang mirip dengan solusi xnor, tetapi menghasilkan nilai-nilai yang sedikit rusak, sehingga harus disusun ulang. Apa yang terjadi di setiap tingkat adalah bahwa setiap daftar nilai sebelumnya memiliki nilai baru yang ditambahkan ke akhir dan ke awal dan ini masing-masing dibungkus dalam 2-tuple yang dibungkus bersama dalam daftar. Misalnya, langkah pertama melakukan ini:
Kemudian, daftar tupel ini di-zip (dan kemudian dijumlahkan untuk menghapus daftar terluar). Dalam kasus pertama ini hanya memberikan nilai yang terbuka dari atas, karena hanya ada satu nilai dalam daftar.
Langkah-langkah menampilkan 2-> 3:
sumber
Mathematica,
575449 byteContoh:
sumber
J, 26 byte
Peningkatan 1 byte berkat FUZxxl .
sumber
,.
untuk,"1
satu karakter.Pyth,
34333129Pada dasarnya terjemahan dari xnor 's Python jawaban . Saya masih tidak hebat dengan Pyth, jadi saran perbaikan dipersilahkan.
Menentukan fungsi
y
untuk mengembalikan daftar daftar bilangan bulat.Pembaruan: Disimpan 2 byte berkat FryAmTheEggman .
Penjelasan:
sumber
-b1
bisatb
,[1_1)
bisa,1_1
(namun Anda bisa saja menjatuhkan braket tutup karena Anda hanya perlu menghitung byte yang diperlukan untuk membuat fungsi, meskipun Anda tidak akan dapat memanggilnya tanpa menutupnya), dan Anda tidak perlu membungkusb
daftar karena pyth secara otomatis mengkonversi ke daftar saat menambahkan daftar ke int.[1,-1]
. Saya dapat menyimpan byte ke hardcode sesuatu yang pendek, terutama ketika Anda menyederhanakan logika. Saya mendapatkanL?]]1<b2sCm,+db+bdytb
Pure Bash, 103
Lebih lama dari yang saya harapkan:
sumber
JavaScript (ES6) 73
80Implementasi JavaScript dari solusi bagus @ Optimizer.
Rekursif (73):
Iteratif (74):
Uji di Firefox / konsol FireBug
sumber
Solusi Java saya:
sumber
false
dengan sesuatu seperti5<4
.