Dato il punto di partenza, la soluzione è abbastanza semplice. Supponiamo che tu parta dal momento in cui tutti i tempi sono disponibili, quindi la visualizzazione iniziale sarà:
1 gennaio 12:00 - 31 dicembre 23:59
Supponendo che gli orari degli appuntamenti siano in ordine cronologico e non vi sia alcuna sovrapposizione con nessuno di essi (in caso contrario, dovresti essere in grado di creare un algoritmo per correggere l'elenco per te) la soluzione è semplice.
Per ogni slot "non disponibile":
- Prendi l'ultimo slot disponibile e dividerlo in due
- imposta l'ora di inizio del primo slot all'orario di inizio dell'originale
- imposta l'ora di fine del primo slot sull'ora di inizio dello slot "non disponibile"
- imposta l'ora di inizio del secondo slot sull'ora di fine dello slot "non disponibile"
- imposta l'ora di fine del secondo slot sull'ora di fine dell'originale.
Quando avrai finito, avrai una lista di slot disponibili. Ecco un esempio:
La disponibilità originale è 1 gennaio 12:00 - 31 dicembre 23:59
hai i seguenti spazi "non disponibili"
15 gennaio 12:00 - 15 gennaio 23:59
20 gennaio 12:00 - 4 febbraio 9:00
14 febbraio 13:00 - 14 febbraio 17:00
La prima esecuzione dell'algoritmo sarà simile a
Originale 1 gen. 12:00 - 31 dicembre 23:59
Dividi in due
Prime esecuzioni Inizio dell'originale all'inizio di "non disponibile"
1 gen. 12:00 - 15 gennaio 12:00
Seconde esecuzioni Fine di "non disponibile" alla fine dell'originale
15 gennaio 23:59 - 31 dicembre 23:59
Quindi ora hai due slot disponibili
1 gen. 12:00 - 15 gennaio 12:00
15 gennaio 23:59 - 31 dicembre 23:59
Fai le stesse operazioni con i prossimi due e sei a casa libera.
Non dimenticare i casi limite.
Cosa succede quando hai uno spazio disponibile di lunghezza zero essenziale?
Cosa succede quando uno degli "slot non disponibili viene eseguito oltre la fine o prima dell'inizio della finestra?