Burada bir cevap istediğim gerçek hayat senaryosundan esinlenerek: /superuser/1312212/writing-a-formula-to-count-how-many-times-each-date- görünür-in-a-set-of-tarih-ran
Bir dizi zaman aralığı (veya başlangıç tarihi-bitiş tarihi çiftleri) göz önüne alındığında, toplam aralıktaki tüm günler için her gün kaç zaman aralığını kapsadığının bir sayımını alın.
Örneğin:
# 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
Yukarıdaki veriler göz önüne alındığında, sonuçlar aşağıdaki gibi olmalıdır:
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)
Sadece her gün için sayıları çıkarmanız gerekir (sırayla, en eski-en yeni sıralanır); hangi kayıtlarda göründüklerini değil.
Her zaman aralığının zaman değil yalnızca tarih içerdiğini varsayabilirsiniz; ve böylece bütün günler daima temsil edilir.
I / O
Girdi , bir zaman aralıklarını temsil eden herhangi bir format olabilir - bu nedenle ya bir çift zaman kümesi ya da başlangıç ve bitiş tarihleri içeren (yerleşik) nesneler koleksiyonu. Tarih saatleri, PPCG zorlukları için normal olduğu gibi 1901 ve 2099 arasında sınırlıdır.
Girişin istediğiniz gibi önceden sıralandığını varsayabilirsiniz (cevabınızda belirtin). Giriş tarihleri kapsayıcıdır (bu nedenle aralık başlangıç ve bitiş tarihlerinin tamamını içerir).
Herhangi bir aralıktaki iki tarih arasında birincinin ikinciden daha eski veya ona eşit olacağını varsayabilirsiniz (yani, negatif bir tarih aralığınız olmaz).
Çıktı , Başlangıç Tarihine göre sıralandığında, her gün için sayıyı içeren en eski ile en yeni arasındaki sayıyı içeren bir dizidir.
Yani, yukarıdaki örneğin çıktısı {3,2,2,0,1}
Bazı günlerin herhangi bir zaman aralığına dahil edilmemesi mümkündür, bu durumda 0o tarih için çıktı alınabilir .
Kazanma Kriterleri
Bu kod golf, bu yüzden en düşük bayt kazanır. Genel istisnalar geçerlidir
Yalancı algoritma örneği
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
Aynı sonuca ulaşmak için diğer algoritmalar iyidir.
0sözlükte olması gerektiğini sorabilir miyim ? Sadece gelen yineleme için kullanıcı zorlamak için görünür min(input)için max(input)meydan (bilgisayar zaman geçişleri) özüne bir şey eklemek görünmüyor hangi.