[Algoritmi] Gestione Turni Aziendali

ciro.riccio1
Ciao a tutti,
per un progetto di tirocinio, devo creare un App Mobile per la gestione di turni Aziendali.
A questo scopo, come prima cosa mi è stato chiesto di trovare un algoritmo per gestire il seguente caso specifico:

In un azienda di manutenzione ci sono 5 dipendenti. Si lavora tutta la settimana (compreso di sabato e domenica).
Nello specifico, per ogni giorno ci sono 2 turni: mattina (8:00 - 14:00) e pomeriggio (14:00 - 20:00).
Ogni giorno lavorano 2 persone (uno la mattina e uno il pomeriggio).
Dal lunedì al venerdì, ogni dipendente deve aver lavorato una volta la mattina e una volta il pomeriggio in modo ciclico.
Per quanto riguarda il sabato e la domenica, i turni sono sempre gli stessi (mattina e pomeriggio) e l'assegnazione dei turni deve essere sempre ciclica, in modo tale che dopo un tot di settimane si raggiunga lo stesso numero di ore lavorate.

Ho messo su un foglio excel (in allegato) la situazione descritta, verificando che effettivamente si raggiunge la parità dopo 5 settimane.
Leggendo un pò in giro su internet ho capito che per la risoluzione di problemi del genere bisogna usare l'Algoritmo del simplesso.
Sempre cercando in rete, avevo pensato di prendere spunto anche dall'Algoritmo di Berger.
Oppure ancora, avevo pensato di utilizzare la logica di una coda in cui inserire i dipendenti, in modo da ottenere l'effetto ciclico che mi serve.

Sinceramente penso di essere in alto mare ragazzi. Potete aiutarmi?
Grazie in anticipo.

Risposte
vict85
5 e 14 sono coprimi, quale sarebbe il problema ad usare qualcosa come:

AB
CD
EA
BC
DE
AB
CD
EA
...

La parità è ogni 5 settimane. Di fatto ti basta muovere ciclicamente chi avrà il quinto turno e mettere casualmente gli altri 4.

ciro.riccio1
"vict85":
5 e 14 sono coprimi, quale sarebbe il problema ad usare qualcosa come:

AB
CD
EA
BC
DE
AB
CD
EA
...

La parità è ogni 5 settimane. Di fatto ti basta muovere ciclicamente chi avrà il quinto turno e mettere casualmente gli altri 4.


Si, infatti alla fine ho deciso di utilizzare il meccanismo di una coda.
L'ho implementato anche in javascript, penso e spero che così vada bene:

class Lavoratore {
   constructor(nome = "Sconosciuto", cognome = "Sconosciuto") {
      this.nome = nome;
      this.cognome = cognome;
      this.oreMaturate = 0;
      ...
   }
}

class Giorno {
   constructor(giorno = "Sconosciuto") {
      this.giorno = giorno;
      this.turnoMattina = new Lavoratore();
      this.turnoPomeriggio = new Lavoratore();
      ...
   }
}
...

let l1 = new Lavoratore("A");
...
let l5 = new Lavoratore("E");
let Dipendenti = [l1, l2, l3, l4, l5];

let lunedì = new Giorno("Lunedì");
...
let domenica = new Giorno("Domenica");
let Settimana = [lunedì, ..., domenica];

for(let i = 0; i < 5; i++) {
   Settimana.forEach(element => {
      let d1 = Dipendenti.shift();
      let d2 = Dipendenti.shift();

      element.turnoMattina = d1;
      element.turnoMattina = d2;

      d1.oreMaturate += 6;
      d2.oreMaturate += 6;

      Dipendenti.push(d1);
      Dipendenti.push(d2);
   });
}

vict85
:roll: E' un tirocinio. Non dovrebbe esserci qualcuno a seguirti e a consigliarti? Inoltre puoi facilmente controllare che il programma fa quel che vuoi stampando i risultati a video (insomma su una pagina html per esempio). Personalmente non ho mai programmato in javascript.

ciro.riccio1
"vict85":
:roll: E' un tirocinio. Non dovrebbe esserci qualcuno a seguirti e a consigliarti? Inoltre puoi facilmente controllare che il programma fa quel che vuoi stampando i risultati a video (insomma su una pagina html per esempio). Personalmente non ho mai programmato in javascript.


Si, ma il mio tutor aziendale è sempre impegnato :cry:
Comunque si, l'ho anche testato e sembra che faccia quel che deve fare.
L'unica cosa è capire se posso scrivere il codice in meno righe, ma per quello magari proverò a stalkerare il mio tutor :lol:

Grazie dell'aiuto!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.