Urutan interleaved merupakan penggabungan sewenang-wenang dari sejumlah urutan.
Urutan yang saling terkait dapat dibuat dengan menambahkan elemen ke daftar satu per satu dari beberapa daftar, memilih elemen berikutnya dari beberapa daftar setiap kali. Oleh karena itu, urutan yang disisipkan akan berisi elemen yang persis sama dari semua daftar yang digabungkan, dalam urutan yang konsisten dengan semua daftar.
Satu-satunya interleaving dari 1 daftar adalah daftar yang sama.
Tantangan
Tantangan Anda adalah untuk membuat fungsi / program yang mengambil sejumlah urutan dan hasil sewenang-wenang semua interleavings yang mungkin dari urutan tersebut.
Contohnya
Input: [1, 2], [3, 4]
Output:
[1, 2, 3, 4]
[1, 3, 2, 4]
[1, 3, 4, 2]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 4, 1, 2]
Input: [1, 2, 3, 4, 5]
Output:
[1, 2, 3, 4, 5]
Input: []
Output:
[]
Input: <nothing>
Output:
[]
(also acceptable)
Input: <nothing>
Output: <nothing>
Input: [1, 2, 3], [4, 5]
Output:
[1, 2, 3, 4, 5]
[1, 2, 4, 3, 5]
[1, 2, 4, 5, 3]
[1, 4, 2, 3, 5]
[1, 4, 2, 5, 3]
[1, 4, 5, 2, 3]
[4, 1, 2, 3, 5]
[4, 1, 2, 5, 3]
[4, 1, 5, 2, 3]
[4, 5, 1, 2, 3]
Input: [1, 2], [3, 4], [5, 6]
Output:
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 5, 4, 6]
[1, 2, 3, 5, 6, 4]
[1, 2, 5, 3, 4, 6]
[1, 2, 5, 3, 6, 4]
[1, 2, 5, 6, 3, 4]
[1, 3, 2, 4, 5, 6]
[1, 3, 2, 5, 4, 6]
[1, 3, 2, 5, 6, 4]
[1, 3, 4, 2, 5, 6]
[1, 3, 4, 5, 2, 6]
[1, 3, 4, 5, 6, 2]
[1, 3, 5, 2, 4, 6]
[1, 3, 5, 2, 6, 4]
[1, 3, 5, 4, 2, 6]
[1, 3, 5, 4, 6, 2]
[1, 3, 5, 6, 2, 4]
[1, 3, 5, 6, 4, 2]
[1, 5, 2, 3, 4, 6]
[1, 5, 2, 3, 6, 4]
[1, 5, 2, 6, 3, 4]
[1, 5, 3, 2, 4, 6]
[1, 5, 3, 2, 6, 4]
[1, 5, 3, 4, 2, 6]
[1, 5, 3, 4, 6, 2]
[1, 5, 3, 6, 2, 4]
[1, 5, 3, 6, 4, 2]
[1, 5, 6, 2, 3, 4]
[1, 5, 6, 3, 2, 4]
[1, 5, 6, 3, 4, 2]
[3, 1, 2, 4, 5, 6]
[3, 1, 2, 5, 4, 6]
[3, 1, 2, 5, 6, 4]
[3, 1, 4, 2, 5, 6]
[3, 1, 4, 5, 2, 6]
[3, 1, 4, 5, 6, 2]
[3, 1, 5, 2, 4, 6]
[3, 1, 5, 2, 6, 4]
[3, 1, 5, 4, 2, 6]
[3, 1, 5, 4, 6, 2]
[3, 1, 5, 6, 2, 4]
[3, 1, 5, 6, 4, 2]
[3, 4, 1, 2, 5, 6]
[3, 4, 1, 5, 2, 6]
[3, 4, 1, 5, 6, 2]
[3, 4, 5, 1, 2, 6]
[3, 4, 5, 1, 6, 2]
[3, 4, 5, 6, 1, 2]
[3, 5, 1, 2, 4, 6]
[3, 5, 1, 2, 6, 4]
[3, 5, 1, 4, 2, 6]
[3, 5, 1, 4, 6, 2]
[3, 5, 1, 6, 2, 4]
[3, 5, 1, 6, 4, 2]
[3, 5, 4, 1, 2, 6]
[3, 5, 4, 1, 6, 2]
[3, 5, 4, 6, 1, 2]
[3, 5, 6, 1, 2, 4]
[3, 5, 6, 1, 4, 2]
[3, 5, 6, 4, 1, 2]
[5, 1, 2, 3, 4, 6]
[5, 1, 2, 3, 6, 4]
[5, 1, 2, 6, 3, 4]
[5, 1, 3, 2, 4, 6]
[5, 1, 3, 2, 6, 4]
[5, 1, 3, 4, 2, 6]
[5, 1, 3, 4, 6, 2]
[5, 1, 3, 6, 2, 4]
[5, 1, 3, 6, 4, 2]
[5, 1, 6, 2, 3, 4]
[5, 1, 6, 3, 2, 4]
[5, 1, 6, 3, 4, 2]
[5, 3, 1, 2, 4, 6]
[5, 3, 1, 2, 6, 4]
[5, 3, 1, 4, 2, 6]
[5, 3, 1, 4, 6, 2]
[5, 3, 1, 6, 2, 4]
[5, 3, 1, 6, 4, 2]
[5, 3, 4, 1, 2, 6]
[5, 3, 4, 1, 6, 2]
[5, 3, 4, 6, 1, 2]
[5, 3, 6, 1, 2, 4]
[5, 3, 6, 1, 4, 2]
[5, 3, 6, 4, 1, 2]
[5, 6, 1, 2, 3, 4]
[5, 6, 1, 3, 2, 4]
[5, 6, 1, 3, 4, 2]
[5, 6, 3, 1, 2, 4]
[5, 6, 3, 1, 4, 2]
[5, 6, 3, 4, 1, 2]
Aturan
- Celah standar terlarang
- Input dapat diambil dalam format apa pun yang masuk akal, misalnya daftar daftar, daftar daftar vararg, daftar parameter, dll ... selama tidak jelas di mana daftar mulai dan berakhir.
- Output mungkin dalam format yang masuk akal, selama jelas di mana daftar mulai dan berakhir. Output yang valid termasuk, tetapi tidak terbatas pada:
- stdout, dengan satu daftar per baris
- Daftar daftar
- Sebuah daftar iterator over (dapat diimplementasikan dengan generator jika bahasa Anda memilikinya)
- Urutan interleavings yang dihasilkan tidak masalah, namun, seharusnya tidak ada interleavings berulang.
- Untuk menyederhanakan deteksi berulang, Anda dapat mengasumsikan bahwa semua elemen di semua urutan input adalah unik.
- Jika tidak diberi daftar sebagai input, daftar kosong dan tidak ada output adalah output yang valid.
- Jenis elemen dalam sekuens tidak relevan. (mis. mereka semua bisa menjadi satu jenis atau jenis kesalahan, yang lebih nyaman dalam bahasa Anda)
- Program / fungsi Anda harus dijamin akan berakhir dalam waktu yang terbatas.
- Ini adalah kode-golf , jadi kode terpendek untuk setiap bahasa menang.
[[]]
bukannya[]
ketika kita tidak diberi daftar sebagai masukan?Jawaban:
Haskell ,
847776 byteTerima kasih kepada @Lynn selama 7 byte dan @ user9549915 untuk satu byte!
Cobalah online!
sumber
Python 2 ,
103927978 byteCobalah online!
Atau:
Python 3 , 73 byte
Cobalah online!
-1 dengan mengganti
[x[0]]
denganx[:1]
sesuai xnor-13 byte dengan
mencuri tanpa malu-malumemperluas[b[b==x:]for b in A]
seperti yang disarankan oleh jawaban Neil bukannyaenumerate
pendekatan yang lebih lama .Mengambil daftar daftar
A
sebagai input. Jika semua elemenA
kosong, maka daftar yang dievaluasiif
akan kosong, jadi kami telah mencapai akhir rekursi dan bisaprint
. Kalau tidak, kami memiliki daftar satu atau lebihNone
; dan kami berulang.sumber
[x[0]]
adalahx[:1]
Jelly , 11 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Ruby, 66 byte
Jika tidak ada urutan yang tidak kosong, kembalikan urutan yang kosong. Jika tidak, untuk setiap urutan yang tidak kosong, ulangi dengan elemen pertama yang dihapus kemudian tambahkan ke awal setiap hasil. Implementasi menggunakan asumsi bahwa elemen dijamin unik secara global, jika
a-[b]
tidak berpotensi menghapus lebih dari 1 urutan dari panggilan rekursif. Meskipun dalam refleksi, mungkin itu sebenarnya perilaku yang tepat untuk menghindari duplikat hasilContoh IO:
f[[[1,2],[3,4]]] => [[1, 3, 2, 4], [1, 3, 4, 2], [1, 2, 3, 4], [3, 1, 4, 2], [3, 1, 2, 4], [3, 4, 1, 2]]
sumber
Bahasa Wolfram (Mathematica) ,
767571 byteCobalah online!
Pendekatan naif: temukan semua permutasi yang merupakan selingan input.
Penjelasan
Ratakan
<input>
dan temukan semua permutasi.Temukan semua elemen
x
sedemikian rupa sehingga ...Ganti semua item di kedalaman-2
<input>
dengan posisi masing-masing dix
.Periksa apakah semua daftar kedalaman-1 dipesan (yaitu dalam urutan meningkat).
Implementasi aktual interleaving, 117 byte
Cobalah online!
sumber
Python 2 ,
8784 byteCobalah online! Port jawaban JavaScript saya. Sunting: Disimpan 3 byte berkat @ChasBrown.
sumber
sum(a,[])
denganany(a)
.sum(a,[])
memiliki penggunaan yang bagus dalam beberapa situasi!Haskell , 45 byte
Cobalah online!
Diadaptasi dari jawaban Python Chas Brown .
Ini
max[[]]
adalah trik untuk memberikan kasus dasar[[]]
ketika input hanya berisi[]
elemen. Dalam hal ini, daftar yang digunakan untuk kosong, berulang adalah kosong, danmax[[]][]
memberi[[]]
.Saat berulang, alih-alih secara selektif menjatuhkan elemen pertama dari daftar yang dipilih
h:t
, kami membuat daftar baru dengant
di bagian depan danh:t
memfilter.sumber
JavaScript (Firefox 30-57), 92 byte
sumber
Japt
-Q
, 14 byteMengambil input sebagai array array.
-Q
membuat output mempertahankan notasi array.Coba di sini.
sumber
Scala: (tidak dimaksudkan untuk menjadi minimal, lebih banyak sumber referensi yang jelas)
Cobalah online!
sumber