Misalkan Anda diberi satu set interval integer yang tidak memotong[a1,b1],[a2,b2],[a3,b3],...,[aN,bN]
. (Di mana [a,b]
himpunan bilangan bulat lebih besar dari atau sama dengan a
dan kurang dari atau sama dengan b
.)
Interval pada indeks X
mencakup bX - aX + 1
nilai. Kami akan memanggil nomor ini cX
.
Mengingat bahwa setiap interval dapat ...
- tidak berubah (tetap sebagai
[aX,bX]
), - meluas ke kanan menuju
+
sisi nomor garis dengancX
(menjadi[aX,bX + cX]
) - atau meluas ke kiri ke
-
sisi nomor garis dengancX
(menjadi[aX - cX,bX]
),
berapakah jumlah nilai maksimum yang dapat dicakup oleh penyatuan semua interval yang diperbarui, mengingat bahwa semuanya masih non-berpotongan?
Tulis fungsi atau program yang mengambil string dari formulir [a1,b1],[a2,b2],[a3,b3],...,[aN,bN]
dan hitung maksimum ini. Jika menulis fungsi, kembalikan nilainya. Jika menulis program lengkap, gunakan stdin untuk input dan cetak nilai ke stdout (atau gunakan alternatif terdekat).
Anda dapat mengasumsikan semua nilai berada dalam batas integer 32-bit bertanda normal dan itu aX
kurang dari atau sama dengan bX
untuk semua indeks X
. Interval mungkin dalam urutan apa pun, mereka tidak selalu selalu meningkat. Mereka harus diberikan sebagai string dalam format di atas. String mungkin kosong, dalam hal ini jawabannya adalah 0.
Pengajuan terpendek dalam byte menang.
Contoh
Jika inputnya adalah [-3,0],[1,2],[4,9]
output akan menjadi 22. Interval tengah tidak memiliki ruang untuk memperluas kedua cara sehingga harus tetap tidak berubah. Interval kiri dan kanan dapat diperpanjang ke [-7,0]
dan [4,15]
masing - masing. Penyatuan [-7,0]
dan [1,2]
dan [4,15]
berisi semua nilai dari -7 hingga 15, kecuali 3. Itu adalah 22 nilai.
sumber
[5,6]
menjadi[3,8]
(untuk jawaban 6), atau bisa adil[5,8]
atau[3,6]
(untuk jawaban 4)?Jawaban:
Haskell, 145 byte
Sampel berjalan:
sumber
R,
282278269247Ini menjadi sangat besar sangat cepat berurusan dengan input string. Saya kira saya bisa bermain golf ini lebih baik, tetapi saat ini kehabisan waktu.
Intinya idenya adalah
Sunting: menyadari Saya awalnya salah menghitung karakter, lalu mengatur ulang beberapa hal untuk mencukur beberapa.
sumber