Skip to content
Snippets Groups Projects
Commit ab53dcd5 authored by Antoine Kryus's avatar Antoine Kryus
Browse files

add SWFFactory()

parent dee800a4
No related branches found
No related tags found
No related merge requests found
......@@ -22,19 +22,56 @@ func TieBreakFactory(tieBreakAlts []Alternative) func([]Alternative) (Alternativ
}
}
//func SWFFactory(swf1 func (Profile) (Count, error), tieBreak func ([]Alternative) (Alternative, error)) (swf2 func(Profile) (alts []Alternative, err error)) {
// return func(p Profile) (alts Alternative, err error) {
// alts, _ := maxCount(swf1(p))
// alt, _ := tieBreak(alts)
// return alt, nil
// il faut trifouiller le count
// }
//}
func SWFFactory(swf1 func (Profile) (Count, error), tieBreak func ([]Alternative) (Alternative, error)) (swf2 func(Profile) (alts []Alternative, err error)) {
return func(p Profile) (alts []Alternative, err error) {
count, _ := swf1(p)
// winner := -1
for count != nil { // on cherche les maxcount
bestAlts := maxCount(count)
for len(bestAlts) > 1 { // tant qu'on a pas départagé les exaequos
winner,_ := tieBreak(bestAlts)
for i, alt := range bestAlts { // départage de tous les exaequos
if alt == winner {
delete(count, winner)
alts = append(alts, winner)
bestAlts = append(bestAlts[:i], bestAlts[i+1:]...)
break
}
}
}
alts = append(alts, bestAlts[0])
delete(count,bestAlts[0])
// au cas où, une autre ébauche
// # on prend la ou les BestAlts du count
// for i,bestAlt := range(bestAlts) { #
// winner, _ := tieBreak(bestAlts)
// for j,bestAltToDelete := range(bestAlts)
// if besAltToDelete == winner {
// keys[i] = -1 # on exclue le winner de la slice pour le prochain tie break
// alts = append(alts, winner)
// break
// }
// }
}
return alts, nil
}
}
func SCFFactory(scf1 func(Profile) ([]Alternative, error), tieBreak func([]Alternative) (Alternative, error)) (scf2 func(Profile) (alt Alternative, err error)) {
return func(p Profile) (Alternative, error) {
alts, _ := scf1(p)
alt, _ := tieBreak(alts)
alts, errSCF1 := scf1(p)
if errSCF1 != nil {
return -1, errSCF1
}
alt, errTB := tieBreak(alts)
if errTB != nil {
return -1, errTB
}
return alt, nil
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment