From 6bf36c9e55d9f5c586f016ba668ac7c9bd645019 Mon Sep 17 00:00:00 2001 From: Gabrielle van de Vijver <gabrielle.van-de-vijver@etu.utc.fr> Date: Thu, 5 Oct 2023 15:31:56 +0200 Subject: [PATCH] SWFFactory sans gestion d'erreurs --- comsoc/TieBreak.go | 58 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 7 deletions(-) diff --git a/comsoc/TieBreak.go b/comsoc/TieBreak.go index 341f73b..6e1d47d 100644 --- a/comsoc/TieBreak.go +++ b/comsoc/TieBreak.go @@ -19,16 +19,60 @@ func Test_tieBreakFactory(){ fmt.Println("Ordre strict :", orderedAlts) lambda:=TieBreakFactory(orderedAlts) bestAlts := []Alternative{3,6} - fmt.Println("Premières alternatives à départager :", bestAlts) + fmt.Println("Premières alternatives, à départager :", bestAlts) bestAlt,_ := lambda(bestAlts) fmt.Println("Première alternative :", bestAlt) } -// func SWFFactory(func swf(p Profile) (Count, error), func ([]Alternative) (Alternative, error)) (func(Profile) ([]Alternative, error)){ +func SWFFactory(swf func (Profile) (Count, error), tb func([]Alternative) (Alternative, error)) (func(Profile) ([]Alternative, error)){ - -// return func ([]Alternative) (Alternative, error) { -// return orderedAlts[0],nil -// } -// } + return func(p Profile) ([]Alternative, error){ + //récupération du décompte + count,_ := swf(p) + //préparation de la sortie + var sorted_alts []Alternative + + //PARCOURS DU DECOMPTE + for len(count) > 0{ + //On prend les meilleures alternatives (avant tie break) + bestAlts := maxCount(count) + //On supprime les meilleures alternatives du décompte + for alt := range bestAlts{ + delete(count, Alternative(alt)) + } + //Départage + for len(bestAlts) > 0{ + bestAlt,_ := tb(bestAlts) + //ajout de la meilleure alternative post-tie break + sorted_alts = append(sorted_alts, bestAlt) + //suppression de l'alternative dans bestAlts + indice := rank(bestAlt, bestAlts) + bestAlts=append(bestAlts[:indice], bestAlts[indice+1:]...) + //suppression de l'alternativ dans le compte + delete(count, Alternative(bestAlt)) + } + } + return sorted_alts,nil + } +} + +func Test_sWFFactory(){ + //Définition de l'Ordre strict + orderedAlts := []Alternative{8,9,6,1,3,2} + fmt.Println("Ordre strict :", orderedAlts) + + //Construction d'un profil avec alternatives ex aequo + profil := make([][]Alternative, 2) + profil[0] = []Alternative{1, 2, 3,4,5,6} + profil[1] = []Alternative{3, 2, 1,4,5,6} + fmt.Println("Profil :", profil) + + //Construction de la fonction Tie Break + lambda:=TieBreakFactory(orderedAlts) + //Construction de la Social Welfare Factory à partir de la fonction swf + la fonction de TieBreak + mu := SWFFactory(BordaSWF,lambda) + //Construction d'une fonction + sorted_alts,_ := mu(profil) + fmt.Println("Alternatives strictement ordonnées selon la méthode de Borda :", sorted_alts) +} //func SCFFactory(func scf(p Profile) ([]Alternative, error), func ([]Alternative) (Alternative, error)) (func(Profile) (Alternative, error)) -- GitLab