Tantangan
Diberikan bilangan bulat n ≥ 4 , menghasilkan permutasi bilangan bulat [0, n-1] dengan properti yang tidak memiliki dua bilangan bulat berturut-turut (bilangan bulat dengan selisih mutlak 1) berada di samping satu sama lain.
Contohnya
- 4 → [1, 3, 0, 2]
- 5 → [0, 2, 4, 1, 3]
- 6 → [0, 2, 4, 1, 3, 5]
- 7 → [0, 2, 4, 1, 5, 3, 6]
Anda dapat menggunakan pengindeksan 1 sebagai gantinya (menggunakan bilangan bulat [1, n] alih-alih [0, n-1] ).
Kode Anda harus dijalankan dalam waktu polinomial dalam n , sehingga Anda tidak dapat mencoba semua permutasi dan menguji masing-masing.
[[1,3],[0,2]]
format output yang dapat diterima?Jawaban:
Jelly ,
32 byteMengurutkan bilangan bulat dalam [1, ..., n] oleh LSB mereka.
Cobalah online!
sumber
Þ
semacam stabil, karena itu diterapkan menggunakansorted
fungsi Python , yang dijamin akan stabil .Python 2 , 32 byte
Cobalah online!
sumber
Python 3 ,
40, 38 byteCobalah online!
Ini berjalan dalam
O(n)
waktu.Terima kasih kepada Dennis karena telah menghemat 2 byte!
sumber
Python 2 , 34 byte
Cobalah online!
Python 2 , 40 byte
Cobalah online!
sumber
Haskell, 22 byte
f adalah fungsi dari n yang mengembalikan daftar yang dipesan dengan tepat. Saya menggunakan opsi pengindeksan 1.
sumber
Oktaf , 17 byte
Cobalah online!
Ini menggunakan pendekatan yang sama seperti yang lainnya. Menggabungkan dua vektor, satu dengan semua angka genap dalam rentang inklusif 2 ... x , dan semua angka ganjil dalam rentang inklusif 1 ... x . Sintaksnya harus cukup jelas, jadi saya tidak akan menjelaskannya.
sumber
3
dan di2
samping satu sama lainf(4)
?JavaScript (ES6), 40 byte
Sunting: Disimpan 1 byte berkat @Arnauld.
sumber
Gaia , 2 byte
Cobalah online!
Ini hanya (stabil) ∫ Orts bilangan bulat dalam rentang [1, masukan] oleh mereka pa r ity.
sumber
R ,
393635 byteCobalah online!
sumber
05AB1E , 3 byte
Port jawaban Python DJMcMayhem dan Dennis's Jelly menjawab
Cobalah online!
Bagaimana?
sumber
Japt, 4 byte
Anda juga bisa mengganti
u
denganv
untuk mendapatkan pesanan yang berbeda.Cobalah
Atau, jika kita dapat menggunakan array 2 array:
Cobalah
sumber
4
, sayangnya; Anda dapat memperbaiki yang pertama dengan mengubahu
kev
atauo
keõ
.Mathematica, 50 -> 47 -> 42 byte
Cobalah online!
Terima kasih kepada pengguna202729 untuk menunjukkan potensi pengoptimalan dua kali lipat Bergabung [] dipasang pada Flatten [] dan menggunakan fungsi murni.
Saya ingin menambahkan dua komentar.
1) Cukup mudah untuk membangun permutasi spesifik tanpa penurunan atau peningkatan suksesi untuk n> = 4 seperti yang diminta pada OP.
Ini terdiri dari dua daftar berturut-turut.
Untuk genap n ini adalah:
list1 = (2,4, ..., n / 2)
list2 = (1,3, ..., n / 2-1)
Untuk ganjil dan n kita memiliki:
list1 = (2,4, ..., Lantai [n / 2])
list2 = (1,3, ..., Lantai [n / 2])
Untuk "algoritma" ini, hanya satu keputusan yang harus dibuat (n genap atau ganjil), sisanya hanya menuliskan n angka.
Kemungkinan solusi Mathematica disediakan di bagian atas.
2) Pertanyaan terkait adalah berapa banyak izin seperti itu ada sebagai fungsi dari n.
Mathematica, 124 Bytes
Cobalah online!
Contoh:
Untuk menghitung jumlah permutasi tersebut merupakan masalah standar.
Untuk n = 4 ada 2: {{2,4,1,3}, {3,1,4,2}}
Untuk n = 5 ada 14: {{1,3,5,2,4}, {1,4,2,5,3}, {2,4,1,3,5}, {2,4, 1,5,3}, {2,5,3,1,4}, {3,1,4,2,5}, {3,1,5,2,4}, {3,5,1, 4,2}, {3,5,2,4,1}, {4,1,3,5,2}, {4,2,5,1,3}, {4,2,5,3, 1}, {5,2,4,1,3}, {5,3,1,4,2}}
Jumlah a (n) dari permutasi ini naik dengan cepat: 2, 14, 90, 646, 5242, 47622, 479306, 5296790, 63779034, ...
Untuk n besar rasio a (n) / n! tampaknya mendekati batas 1 / e ^ 2 = 0,135335 ... Saya tidak punya bukti ketat tetapi itu hanya dugaan dari bukti numerik. Anda dapat menguji ini dengan mencoba menjalankan program secara online.
Program di atas (berdasarkan referensi yang diberikan di bawah) menghitung angka-angka ini.
Anda dapat menemukan informasi lebih lanjut dalam urutan yang relevan di OEIS: A002464 . Masalah Hertzsprung: cara untuk mengatur dan tidak menyerang raja di papan xx, dengan 1 di setiap baris dan kolom. Juga jumlah permutasi panjang n tanpa naik atau turunnya suksesi.
sumber
[some text](the_link)
. Adapun tautan "Coba online" khususnya, situs web https://tio.run/ yang dihosting oleh @Dennis kami sendiri berisi tautan ke semua jenis bahasa pemrograman. Bahasa Wolfram (Mathematica) adalah salah satunya. Di bagian atas Anda kemudian dapat mengklik tombol putar untuk menjalankan kode, atau tombol hyperlink untuk menyalin "Coba online." (markup-) tautan. Dan Anda dapat membagi kode Anda menjadi "Kode" yang sebenarnya (kiriman Anda), dengan header / footer opsional untuk (cukup-) mencetak satu atau beberapa testcases.JavaScript (Node.js) , 42 byte
Cobalah online!
JavaScript (Node.js) , 47 byte
Cobalah online!
sumber
Ruby , 27 byte
Cobalah online!
Menggunakan pengindeksan 1
sumber
Spasi , 161 byte
Inilah pengajuan resmi dan tidak diomentari: Coba online!
Cobalah online!
Saya mengorbankan beberapa byte sehingga program akan berjalan tanpa kesalahan, saya percaya bahwa saya bisa kehilangan sekitar 7-8 byte, dan masih akan menampilkan dengan benar, tetapi juga akan menghasilkan pesan kesalahan, dan tidak ada yang menginginkan itu.
Penjelasan Byte Lengkap:
sumber
push_0, read_STDIN_as_int, push_0, retrieve
bisapush_0, duplicate_0, read_STDIN_as_int, retrieve
untuk menyimpan byte. Dan label pertama bisa menjadi kosong denganNSSN
bukanNSSSN
(dan kemudian label kedua bisaNSSSN
; ketigaNSSTN
; dan keempatNSSSSN
). Ini harus menyimpan 8 byte juga. Anda juga dapat menghapus yang pertamaJump_to_third_label
karena Anda sudah memilikiSet_third_label
hak di bawahnya. Total: 140 byte ; (atau dengan komentar: Cobalah online .) -3 byte jika Anda menghapusNNN
keluar.F # (Mono) , 27 byte
Cobalah online!
sumber
Gol> <> , 14 byte
Cobalah online!
Contoh program lengkap & Cara kerjanya
sumber
J , 10 byte
Cobalah online!
Penjelasan:
sumber
Java 8, 56 byte
Pelabuhan @ Neil JavaScript (ES6) jawaban 's .
Cobalah online.
Jawaban 66 byte lama:
Cobalah online.
Penjelasan:
sumber
Ruby, 27 byte
Seperti dalam jawaban ini ,
n
bilangan bulat pertama diurutkan berdasarkan bagian yang paling tidak signifikan.Cobalah online!
sumber