[Risolto] Algoritmo per decidere se un giorno e in un'interv

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

[Risolto] Algoritmo per decidere se un giorno e in un'interv

Messaggio da SuperStep »

Salve,

Ho determinati oggetti 'Giorni' che sono dei specifici giorni della settimana
  • * lunedi
    * martedi
    * mercoledi
    * giovedi
    * venerdi
    * sabato
    * domenica
adesso ho degli intervalli che vanno da un giorno all'altro e dura meno di una settimana, esempio:

Codice: Seleziona tutto

I1 = {start: lunedi, end: giovedi};
I2 = {start: sabato, end: martedi};
adesso ho dei punti che sono in un determinato giorno:

Codice: Seleziona tutto

P1 = {day: domenica}
P2 = {day: mercoledi}
P3 = {day: lunedi}
adesso devo stabilire che:
P1 Appartiene ad I2
P2 Appartiene ad I1
P3 Appartiene ad I2 & I1

Non riesco a scrivere un metodo che mi faccia questo calcolo... Sembra abbastanza banale ma non riesco a vederla dal punto giusto.

Come implementereste voi l'argoritmo?
Ultima modifica di SuperStep il lunedì 4 maggio 2015, 6:09, modificato 1 volta in totale.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
Claudio_F
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1463
Iscrizione: lunedì 28 maggio 2012, 18:49
Desktop: Mate/Gnome
Distribuzione: Ubu22.04

Re: Algoritmo per decidere se un giorno e in un'intervallo

Messaggio da Claudio_F »

Se i giorni fossero associabili ad un valore (lunedì=0 domenica=6) basterebbe fare un conteggio in modulo 7:

Codice: Seleziona tutto

int in_interval(int start; int stop; int n) {
    for (; ; start = (start + 1) % 7) {
        if (n == start) return 1;
        if (start == stop): return 0;
    }
}
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Algoritmo per decidere se un giorno e in un'intervallo

Messaggio da SuperStep »

ottima soluzione @claudio_F!

provo ad implementare questa!
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Algoritmo per decidere se un giorno e in un'intervallo

Messaggio da SuperStep »

ok, allora ho risolto secondo la logica di claudio ma in un'altro modo:

ho due funzioni che mi restituiscono il giorno precedente ed il giorno successivo, questo e il codice (il linguaggio e php)

Codice: Seleziona tutto

public static function inInterval($dayStart, $dayStop, $day) {
        
        if (
            !self::isDay($dayStart) ||
            !self::isDay($dayStop)  ||
            !self::isDay($day)
        ) return null;
        
        $dayPointer = self::previousDay($dayStart);
        
        do {
            
            $dayPointer = self::nextDay($dayPointer);
            
            if($dayPointer == $day) return true;
            
        } while($dayPointer != $dayStop);
        
        return false;
    }
   
[Edit]

Ovviamente il successivo della domenica e' il lunedi' ed il precedente del lunedi' e' la domenica.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti