Diberikan daftar interval, lakukan penyatuannya, dan kurangi tumpang tindih. Itu berarti, bagian yang tumpang tindih berkurang. ( [a, b] U [c, d] = [a, d]
jika b > c
) Dengan asumsi semua a <b dalam semua interval [a, b]
. Menerapkan sebagai fungsi dari daftar interval input -> daftar interval output. Kode terpendek menang. Anda tidak dapat menggunakan perpustakaan yang ada.
Klarifikasi:
- Interval terbuka dan tertutup tidak dibedakan.
- Interval untuk bilangan real, bukan bilangan bulat. (
[2, 3], [4, 5] -> [2, 3], [4, 5]
) - Tidak perlu mengurutkan interval output
- Urutan jika input tidak masalah
- Input ilegal hanya di
[a, b]
manab >= a
, tidak ada hubungannya dengan urutan interval input dan jumlah interval input. - Anda tidak perlu menampilkan pesan kesalahan pada perilaku yang tidak terdefinisi
Contoh (dengan garis angka)
[2, 4], [7, 9] --> [2, 4], [7, 9]
234
789
-> 234 789
[1, 5], [2, 10] --> [1, 10] (overlapping [2, 5] reduced)
12345
234567890
-> 1234567890
[2, 4], [3, 6], [8, 9] -> [2, 6], [8, 9]
234
3456
89
-> 23456 89
[4, 2], [2, 2] -> (undefined behavior: against the assumption)
Jawaban:
GolfScript, 32
[[2 4] [3 5]]
Program uji penuh:
Doa contoh:
sumber
Haskell (103)
Saya pikir, itu terlalu bertele-tele untuk Haskell. Terima kasih kepada Hoa Long Tam untuk fungsinya menyortir.
Dalam Haskell, sebuah intervall dari
a
keb
dilambangkan dengan[a..b]
. Notasi saya sangat mirip dengan notasi matematika. Gunakan seperti ini:sumber
Ok, ini 250 karakter saya.
Fungsi ini mengambil array int, dan beroperasi di situ in-situ. Array diakhiri oleh 0, dan interval dapat diberikan dalam urutan apa pun.
Output sampel:
Program sampel:
sumber
perform the union of them
harus mengarah ke(1,11) (13,18)
, bukan?([a, b] U [c, d] = [a, d] if b > c)
. Dan dalam hal ini, bahkan (1, 5) (5, 6) tidak akan digabungkan.and
kurangi tumpang tindih - bukanif they overlap
. OK -that means ...
titik - titik berikut lagi di arah yang berlawanan.Python, 100 karakter
menghasilkan
Mengambil semua titik akhir interval, menghilangkan semua yang benar-benar di dalam interval lain, menyatukan & mengurutkannya, dan memasangkannya.
sumber
Haskell, 55 karakter
Jika input tidak disortir, maka 88 karakter:
Tes berjalan:
Saya berasumsi bahwa "tidak dapat menggunakan pustaka yang ada" menghalangi impor
List
dan panggilansort
. Jika itu legal, versi yang tidak disortir hanya 71 karakter.sumber
List
dari paketHaskell98
akan cukup IMHO.Scala, 272 karakter
Pemakaian:
Membuat array dan menyisipkan 1 untuk setiap interval dimulai dan -1 untuk setiap akhir interval. Kemudian langkah-langkah melalui array menambahkan nilai-nilai ke penghitung menghasilkan awal setiap kali penghitung langkah dari 0 ke 1 dan berakhir ketika langkah dari 1 ke 0. Mungkin rumit tidak perlu.
Keluaran:
sumber
Perl
(146)(92)(90)bermain golf hingga 90 karakter, secara kreatif menggunakan mesin regex
contoh penggunaan:
mari kita jelaskan kode ini sedikit.
subrutin ini menerima larik arrayref, masing-masing menunjuk ke larik yang mengandung dua elemen, mulai dan akhir interval:
([2, 4], [3, 6], [8, 9])
untuk setiap aref, kami menghasilkan array elemen dari pertama hingga terakhir
($_->[0] .. $_->[1])
. maka kita menggunakan peta untuk mengatur elemen-elemen dari indeks tersebut di @ h ke 1.setelah ini,
@h
akan berisi yang (untuk interval) atau undefs, digambarkan di bawah ini sebagai tanda hubung untuk kejelasan.selanjutnya kita membangun string dari @h, menambahkan 0 untuk mengganti undefs dengan sesuatu yang lebih berguna (undef + 0 = 0).
$w .= $_+0 for @h;
$ w mengandung
011111011
sekarang.saatnya untuk sedikit menyalahgunakan mesin regex.
push @r, ($-[0], $+[0]-1) while $w=~/1+/g;
setelah pertandingan yang berhasil, array @ - dan @ + masing-masing berisi posisi awal dan akhir dari setiap pertandingan; Elemen 0 digunakan untuk seluruh pertandingan, pertama untuk $ 1, kedua untuk $ 2 dan seterusnya.
$+[0]
sebenarnya berisi posisi char pertama yang tidak cocok, jadi kita harus mengurangi satu.@r
mengandung(2, 6, 8, 9)
sekarang.@r
untuk membuat pengembalian sub
@r
.sumber
[2,3],[4,5]
hasil bilangan real2 5
Scala
305279 karakter tanpa doa:doa:
sumber
Brachylog , 12 byte
Cobalah online!
Solusi deklaratif yang menyenangkan, mengambil input sebagai daftar daftar melalui variabel input dan mengeluarkan daftar daftar melalui variabel output.
sumber
Clojure, 138 byte
Ini lebih pendek menjadi 119 byte jika input lebih fleksibel, yaitu daftar titik awal interval DAN daftar titik akhir interval:
Harus ada cara yang lebih baik.
sumber
Japt , 18 byte
Ini terasa terlalu lama. I / O sebagai diurutkan, array interval 2D.
Cobalah
sumber
Perl 5
-MList::Util=max -n
, 89 byteCobalah online!
sumber