Terinspirasi oleh skenario kehidupan nyata, yang saya minta jawabannya di sini: /superuser/1312212/writing-a-formula-to-count-how-many-times-each-date- muncul-dalam-a-set-of-date-ran
Diberikan array rentang waktu (atau pasangan mulai-akhir-tanggal), menghasilkan hitungan berapa banyak rentang waktu setiap hari, untuk semua hari dalam rentang total.
Sebagai contoh:
# Start End
1 2001-01-01 2001-01-01
2 2001-01-01 2001-01-03
3 2001-01-01 2001-01-02
4 2001-01-03 2001-01-03
5 2001-01-05 2001-01-05
Mengingat data di atas, hasilnya harus sebagai berikut:
2001-01-01: 3 (Records 1,2,3)
2001-01-02: 2 (Records 2,3)
2001-01-03: 2 (Records 2,4)
2001-01-04: 0
2001-01-05: 1 (Record 5)
Anda hanya perlu menampilkan hitungan untuk setiap hari (agar, diurutkan terlama-terbaru); bukan catatan mana mereka muncul.
Anda dapat mengasumsikan bahwa setiap rentang waktu hanya berisi tanggal, bukan waktu; dan sepanjang hari selalu terwakili.
I / O
Input dapat berupa format apa pun yang mewakili sekumpulan rentang waktu - jadi sekumpulan pasangan waktu, atau kumpulan objek (bawaan) yang berisi tanggal mulai dan berakhir. Tanggal-waktu dibatasi antara 1901 dan 2099, seperti biasa untuk tantangan PPCG.
Anda dapat berasumsi bahwa input sudah disortir sesuka Anda (sebutkan dalam jawaban Anda). Tanggal input termasuk (sehingga rentang mencakup seluruh tanggal mulai dan berakhir).
Anda juga dapat mengasumsikan bahwa, dari dua tanggal dalam rentang tertentu, yang pertama akan lebih tua atau sama dengan yang kedua (yaitu Anda tidak akan memiliki rentang tanggal negatif).
Keluaran adalah larik yang berisi hitungan untuk setiap hari, dari yang terlama hingga yang terbaru dalam input saat diurutkan berdasarkan Tanggal Mulai.
Jadi, output untuk contoh di atas akan menjadi {3,2,2,0,1}
Mungkin saja beberapa hari tidak termasuk dalam rentang waktu apa pun, dalam hal ini 0
ini output untuk tanggal tersebut.
Kriteria Menang
Ini adalah kode-golf, sehingga byte terendah menang. Pengecualian biasa berlaku
Contoh algoritma palsu
For each time range in input
If start is older than current oldest, update current oldest
If end is newer than current newest, update current newest
End For
For each day in range oldest..newest
For each time range
If timerange contains day
add 1 to count for day
End For
Output count array
Algoritme lain untuk mendapatkan hasil yang sama baik-baik saja.
0
harus di kamus? Tampaknya hanya memaksa pengguna untuk beralih dari min(input)
ke max(input)
, yang tampaknya tidak menambahkan apa pun ke inti tantangan (menghitung rentang waktu).