Skip to content
Snippets Groups Projects
Commit e64233c8 authored by Mohamed Fall's avatar Mohamed Fall
Browse files

ispref

parent 71e189fc
No related branches found
No related tags found
No related merge requests found
package comsoc package comsoc
import ("errors") import (
"errors"
)
type Alternative int type Alternative int
type Profile [][]Alternative type Profile [][]Alternative
type Count map[Alternative]int type Count map[Alternative]int
// renvoie l'indice ou se trouve alt dans prefs // renvoie l'indice ou se trouve alt dans prefs
func rank(alt Alternative, prefs []Alternative) int{ func rank(alt Alternative, prefs []Alternative) int {
for i,v := range prefs { for i, v := range prefs {
if alt == v { if alt == v {
return i return i
} }
} }
return -1 return -1
} }
// renvoie vrai ssi alt1 est préférée à alt2 // renvoie vrai ssi alt1 est préférée à alt2
func isPref(alt1, alt2 Alternative, prefs []Alternative) bool { func isPref(alt1, alt2 Alternative, prefs []Alternative) bool {
return rank(alt1, prefs) > rank(alt2, prefs) return rank(alt1, prefs) < rank(alt2, prefs)
} }
// renvoie les meilleures alternatives pour un décomtpe donné // renvoie les meilleures alternatives pour un décomtpe donné
func maxCount(count Count) (bestAlts []Alternative) { func maxCount(count Count) (bestAlts []Alternative) {
max := 0 max := 0
for _,v := range count { for _, v := range count {
switch { switch {
case v == max: case v == max:
bestAlts = append(bestAlts, Alternative(v)) bestAlts = append(bestAlts, Alternative(v))
case v > max: case v > max:
bestAlts = []Alternative{Alternative(v)} bestAlts = []Alternative{Alternative(v)}
// bestAlts = append(bestAlts, v) // bestAlts = append(bestAlts, v)
max = v max = v
} }
} }
return return
} }
// vérifie le profil donné, par ex. qu'ils sont tous complets et que chaque alternative n'apparaît qu'une seule fois par préférences // vérifie le profil donné, par ex. qu'ils sont tous complets et que chaque alternative n'apparaît qu'une seule fois par préférences
...@@ -42,21 +44,21 @@ func maxCount(count Count) (bestAlts []Alternative) { ...@@ -42,21 +44,21 @@ func maxCount(count Count) (bestAlts []Alternative) {
// vérifier que tout le monde a les mêmes alternatives, qu'il n'est pas vide // vérifier que tout le monde a les mêmes alternatives, qu'il n'est pas vide
// vérifie le profil donné, par ex. qu'ils sont tous complets et que chaque alternative de alts apparaît exactement une fois par préférences // vérifie le profil donné, par ex. qu'ils sont tous complets et que chaque alternative de alts apparaît exactement une fois par préférences
func checkProfileAlternative(prefs Profile, alts []Alternative) error { func checkProfileAlternative(prefs Profile, alts []Alternative) error {
for _,voter := range prefs { for _, voter := range prefs {
if len(voter) != len(alts) { if len(voter) != len(alts) {
return errors.New("001: ProfileErrors") return errors.New("001: ProfileErrors")
} }
check := make(map[Alternative]int) check := make(map[Alternative]int)
for _,alt := range voter { for _, alt := range voter {
check[alt] += 1 check[alt] += 1
if check[alt] > 1 { if check[alt] > 1 {
return errors.New("001: ProfileErrors") return errors.New("001: ProfileErrors")
} }
} }
} }
return nil return nil
} }
//jerome.gaigne@hds.utc.fr //jerome.gaigne@hds.utc.fr
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