Attention, je ne vous demande pas de me coder le programme, loin de là, je me demandais juste s'il y avait moyen de réaliser un script ou autre sous excel/tableur un procédé que je vais vous détailler.
Voilà, il y a un planning de gardes à réaliser périodiquement sur une période de 12 semaines, avec 3 catégories de personnes (qu'on appellera 4ème année, 5ème année, 6ème année, soit 4A, 5A et 6A pour faire court). Chaque catégorie contient environ 200 personnes +/- 10 personnes. Ce planning de gardes répond aux conditions suivantes :
- Il y a 4 services, avec chacun leurs horaires de gardes. En gros on a pour chaque semaine : Service 1 : 8 créneaux, Service 2 : 6 créneaux, Service 3 : 2 créneaux, Service 4 : 1 créneau.
- Il y a dans le Service 1 et 2 des gardes dites "chiantes" car elles sont en journée (elles "gâchent" donc la journée de samedi ou dimanche). Il faut donc équilibrer les gardes de telle sorte à ce que les gens en ont le moins possible.
- Il faut un certain nombre de 6A, 5A et 4A dans une même garde (1, 2 et 2 il me semble, à confirmer).
- Chaque personne devant réaliser 30 gardes au cours des 3 ans, sont privilégiés pour l'établissement du planning les 6A, puis les 5A, puis les 4A.
- Les personnes ayant réalisé leur 30 gardes sont enlevés de la liste des étudiants.
- Il y a des périodes où des classes de personnes ne sont pas disponibles du fait de leurs examens. Il faut donc limiter le plus possible les gardes à ce niveau-là.
- Il faut que le facteur aléatoire soit le plus présent possible, à l'exception des règles citées ci-dessus.
En gros il faudrait que le programme/script fasse ceci :
Je regarde la liste des 6A
-> Je regarde et choisis parmi ceux qui ont fait le moins de gardes total (donc inférieur à 30)
-> Parmi eux je regarde ceux qui ont fait le moins de gardes "chiantes"
-> Je choisis au hasard un de ceux-ci
-> Je le place dans un créneau au hasard à la condition que n6A dans le créneau=0. Si n6A dans le créneau=1 je choisis un autre créneau au hasard
-> Je rechoisis un autre 6A parmi ceux qui ont fait le moins de gardes chiantes.
-> Je recommence le procédé jusqu'à ce que le nombre de gardes chiantes soit égal partout ou qu'il y ait le moins de monde possible avec un nombre inférieur de gardes chiantes par rapport aux autres. Ou alors de manière plus simple, jusqu'à ce que tous les créneaux de gardes chiantes soient pris
-> Une fois que c'est fait, je recommence en regardant ceux qui ont fait le moins de gardes total et en les plaçant au hasard dans les créneaux.
-> Je m'arrête une fois que tous les créneaux sont remplis avec un 6A.
Je recommence alors avec les 5A puis les 4A (au besoin on peut faire carrément un autre script pour ça puis recouper les résultats par la suite).
Les résultats sont alors consignés sous forme de tableau.
Pfiou, c'était plus simple dans ma tête
Toujours est-il, y'a-t-il moyen de réaliser un tel script ou existe-t-il un tel outil sous Windows/Linux/BSD/Mac Os X/Peu importe ?
Merci d'avance