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

add tp3 (partial

parent 50c59fc9
No related branches found
No related tags found
No related merge requests found
package comsoc
import()
func MajoritySWF(p Profile) (count Count, err error) {
for i,voter := range p {
count[voter[0]] += 1
} // 0-votes alternatives are not included
return count, nil
}
func MajoritySCF(p Profile) (bestAlts []Alternative, err error){
count,_ := MajoritySWF(p)
return maxCount(count), nil
}
package comsoc
import ("errors")
type Alternative int
type Profile [][]Alternative
type Count map[Alternative]int
// renvoie l'indice ou se trouve alt dans prefs
func rank(alt Alternative, prefs []Alternative) int{
for i,v := range prefs {
if alt == v {
return i
}
}
return -1
}
// renvoie vrai ssi alt1 est préférée à alt2
func isPref(alt1, alt2 Alternative, prefs []Alternative) bool {
return rank(alt1, prefs) > rank(alt2, prefs)
}
// renvoie les meilleures alternatives pour un décomtpe donné
func maxCount(count Count) (bestAlts []Alternative) {
max := 0
for _,v := range count {
switch {
case v == max:
bestAlts = append(bestAlts, Alternative(v))
case v > max:
bestAlts = []Alternative{Alternative(v)}
// bestAlts = append(bestAlts, v)
max = v
}
}
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
func checkProfile(prefs Profile) error
// 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
func checkProfileAlternative(prefs Profile, alts []Alternative) error {
for _,voter := range prefs {
if len(voter) != len(alts) {
return errors.New("001: ProfileErrors")
}
check := make(map[Alternative]int)
for _,alt := range voter {
check[alt] += 1
if check[alt] > 1 {
return errors.New("001: ProfileErrors")
}
}
}
return nil
}
//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