Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.71 KB | None | 0 0
  1. /**
  2.    * Permet de trouver le prochain groupe de Slice ayant moins de `maxDelta` de différence entre son premier et dernier élément.
  3.    * Par défaut, `maxDelta` vaut 36, ce qui correspond à une fenêtre de 3 heures (180' / 5').
  4.    *
  5.    * @param slices   Les slices dont on veut récupérer le prochain groupe
  6.    * @param maxDelta La différence maximale entre le premier et dernier Slice du groupe
  7.    * @return Un groupe de Slice ayant une différence maximale de `maxDelta` entre le premier et dernier élément du groupe.
  8.    */
  9.   def nextSliceGroup(slices: List[Long], maxDelta: Long = 36): List[Long] = {
  10.     def nextSliceGroupeInner(slices: List[Long], delta: Long, start_slice: Long): List[Long] = {
  11.       if (slices.isEmpty || slices.head - start_slice > delta) List()
  12.       else slices.head :: nextSliceGroupeInner(slices.tail, delta, start_slice)
  13.     }
  14.  
  15.     nextSliceGroupeInner(slices, maxDelta, slices.head)
  16.   }
  17.  
  18.   /**
  19.    * Créé une liste 2D de groupes de Slice ayant moins de `maxDelta` de différence entre leur premier et dernier élément.
  20.    *
  21.    * @param slices   Les slices dont on veut récupérer la liste de groupes
  22.    * @param maxDelta la différence maximale entre le premier dernier Slice de chaque groupe
  23.    * @return Une liste de groupe de Slice ayant une différence maximale de `maxDelta` entre leur premier et dernier éléments.
  24.    */
  25.   def sliceGroups(slices: List[Long], maxDelta: Long = 36): List[List[Long]] = {
  26.     def sliceGroupsInner(slices: List[Long]): List[List[Long]] = {
  27.       if (slices.isEmpty) List()
  28.       else {
  29.         val group = nextSliceGroup(slices, maxDelta)
  30.         group :: sliceGroupsInner(slices.diff(group))
  31.       }
  32.     }
  33.  
  34.     sliceGroupsInner(slices)
  35.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement