Urutan De Bruijn menarik: Urutan siklik terpendek yang berisi semua kemungkinan urutan alfabet tertentu dengan panjang tertentu. Misalnya, jika kami mempertimbangkan alfabet A, B, C dan panjang 3, output yang mungkin adalah:
AAABBBCCCABCACCBBAACBCBABAC
Anda akan melihat bahwa setiap kemungkinan urutan 3-karakter dengan menggunakan huruf A
, B
dan C
berada di sana.
Tantangan Anda adalah untuk menghasilkan urutan De Bruijn dalam karakter sesedikit mungkin. Fungsi Anda harus mengambil dua parameter, bilangan bulat yang mewakili panjang urutan, dan daftar yang berisi alfabet. Output Anda harus menjadi urutan dalam formulir daftar.
Anda dapat mengasumsikan bahwa setiap item dalam alfabet berbeda.
Contoh generator dapat ditemukan di sini
Celah standar berlaku
code-golf
combinatorics
Nathan Merrill
sumber
sumber
Jawaban:
Pyth, 31 byte
Ini adalah konversi langsung dari algoritma yang digunakan dalam jawaban CJam saya . Selamat datang di golf!
Kode ini mendefinisikan fungsi
g
yang mengambil dua argumen, string daftar karakter dan nomor.Contoh penggunaan:
Keluaran:
Perluasan kode:
Coba di sini
sumber
CJam,
52 4948 byteIni sangat lama. Ini bisa bermain golf banyak, mengambil tips dari terjemahan Pyth.
Inputnya seperti
yaitu - String daftar karakter dan panjangnya.
dan output adalah string De Bruijn
Cobalah online di sini
sumber
CJam,
5249 byteBerikut adalah pendekatan berbeda dalam CJam:
Mengambil input seperti ini:
dan menghasilkan karya Lyndon seperti
Coba di sini.
Ini memanfaatkan hubungan dengan kata-kata Lyndon . Ini menghasilkan semua kata-kata Lyndon dengan panjang n dalam urutan leksikografis (seperti yang diuraikan dalam artikel Wikipedia), lalu menjatuhkan kata-kata yang panjangnya tidak dibagi n . Ini sudah menghasilkan urutan De Bruijn, tapi karena saya menghasilkan kata-kata Lyndon sebagai string angka, saya juga perlu mengganti yang dengan huruf yang sesuai di akhir.
Untuk alasan bermain golf, saya menganggap huruf-huruf selanjutnya dalam alfabet memiliki urutan leksikografis yang lebih rendah.
sumber
JavaScript (ES6) 143
Menggunakan kata-kata Lyndon, seperti aswer Martin, hanya 3 kali panjang ...
Uji di konsol FireFox / FireBug
Keluaran
sumber
Python 2, 114 byte
Saya tidak terlalu yakin bagaimana cara bermain golf, karena pendekatan saya.
Cobalah online
Tidak Disatukan:
Kode ini adalah modifikasi sepele dari solusi saya ke tantangan yang lebih baru.
Satu-satunya alasan
[:1-n]
yang diperlukan adalah karena urutannya termasuk pembungkus.sumber
Powershell,
16496 byte-68 byte dengan -match
O($n*2^n)
generator bukan rekursifO(n*log(n))
Skrip tidak diuji & tes:
Keluaran:
Lihat juga: Satu Dering untuk mengatur semuanya. Satu String berisi semuanya
sumber