C'est l'élection! Le domaine dans lequel nous nous trouvons met en œuvre le système de vote appelé ruissellement instantané (parfois appelé vote alternatif ou vote préférentiel ). Chaque électeur classe chaque candidat du plus préféré au moins préféré, marquant un "1" pour son candidat le plus préféré, un "2" pour son deuxième candidat, et ainsi de suite jusqu'à ce que chaque candidat soit numéroté. Je vais laisser ce sympathique koala expliquer le reste:
(Image modifiée de l' original par Patrick Alexander , utilisée sous la licence CC BY-NC-SA 3.0 AU ).
Si vous préférez votre explication du ruissellement instantané sous forme de texte, il y a aussi l'article Wikipedia .
(Remarque: il est également possible, bien que peu probable, qu'il y ait deux candidats ou plus avec le moins de votes. Dans ces situations, choisissez l'un d'eux au hasard à probabilités égales et éliminez-les.)
Dans ce défi, la première ligne d'entrée est une liste de chaînes, qui sont les noms des candidats à l'élection. Dans ces exemples, j'ai utilisé des valeurs délimitées par des tuyaux, mais n'hésitez pas à ajuster le format d'entrée en fonction de votre langue.
The Omitted Anti-neutrino|Placazoa|Alexander the Awesome|Tau Not Two|Semolina Sorcerer
Ensuite, il y a des n
lignes d'entrée qui sont également des listes de chaînes, chacune représentant un seul vote. La première entrée représente la préférence n ° 1, la suivante la préférence n ° 2, etc. Par exemple:
Alexander the Awesome|Semolina Sorcerer|Tau Not Two|Placazoa|The Omitted Anti-neutrino
cela signifierait que ce vote particulier a Alexander comme première préférence, Semolina Sorcerer comme deuxième, Tau Not Two comme troisième, etc. Vous pouvez supposer que chaque vote contiendra chaque candidat et qu'il n'y aura pas de votes blancs ou incomplets.
Compte tenu des votes en entrée, votre programme ou votre fonction devrait ensuite générer le vainqueur de l'élection. Vous pouvez trouver une implémentation de référence non golfée dans Python 3 ici .
Exemples d'entrées et de sorties
Contribution
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Portal Butter|Alexander the Awesome|Dionysius|Red Trainmen
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Portal Butter|Red Trainmen|Alexander the Awesome|Dionysius
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Alexander the Awesome|Red Trainmen|Portal Butter|Dionysius
Red Trainmen|Alexander the Awesome|Dionysius|Portal Butter
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Red Trainmen|Dionysius|Portal Butter|Alexander the Awesome
Alexander the Awesome|Dionysius|Red Trainmen|Portal Butter
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Alexander the Awesome|Red Trainmen|Dionysius|Portal Butter
Production
Alexander the Awesome
Contribution
Depressed Billy|Sighted Citrus|Frosty Fox|Electronic Accident
Frosty Fox|Sighted Citrus|Electronic Accident|Depressed Billy
Frosty Fox|Depressed Billy|Sighted Citrus|Electronic Accident
Depressed Billy|Electronic Accident|Sighted Citrus|Frosty Fox
Depressed Billy|Sighted Citrus|Electronic Accident|Frosty Fox
Depressed Billy|Electronic Accident|Sighted Citrus|Frosty Fox
Electronic Accident|Frosty Fox|Depressed Billy|Sighted Citrus
Sighted Citrus|Frosty Fox|Electronic Accident|Depressed Billy
Frosty Fox|Depressed Billy|Sighted Citrus|Electronic Accident
Sighted Citrus|Electronic Accident|Frosty Fox|Depressed Billy
Frosty Fox|Electronic Accident|Depressed Billy|Sighted Citrus
Sighted Citrus|Frosty Fox|Depressed Billy|Electronic Accident
Production
Sighted Citrus
ou Frosty Fox
(au hasard)
Contribution
Vous pouvez obtenir la dernière entrée définie ici . Il s'agit de l'un des domaines de vote d'une récente élection australienne et compte 63 428 voix.
Production
Ross HART
Réponses:
Pyth - 30 octets
Je vais le refactoriser. Déduit la première ligne du reste de l'entrée.
Suite de tests .
la source
R ,
10199 octetsEssayez-le en ligne!
Prend les données sous forme de matrice, chaque colonne représentant les choix d'un électeur. Fonctionne par récursivité: trouvez un candidat avec un nombre minimal de votes, supprimez toutes les entrées correspondantes dans la matrice, reformatez la matrice et répétez jusqu'à ce que la matrice ne comporte qu'une seule ligne.
Les votes à chaque itération sont calculés en comptant avec
table
les valeurs de la ligne du haut, qui sont les meilleurs choix actuels de chaque électeur. Ceci est mélangésample
pour rompre les liens au hasard.n<-dim(m)-1
donne un vecteur de longueur 2, mais seule la première valeur est utilisée (donc elle est équivalente, mais 1 octet plus court que,n<-nrow(m)-1
). Cette valeur est utilisée deux fois: d'abord elle est comparée à 0 pour vérifier si la dernière itération a été atteinte; deuxièmement, si nous recursons, c'est le nombre de lignes de la nouvelle matrice.la source
Python 2 , 209 octets
Essayez-le en ligne!
Prend la saisie comme une liste de listes de préférences électorales (la ligne d'en-tête n'est pas incluse). La randomisation en cas d'égalité est vexante!
la source
Perl 5
-plF\|
, 155 octetsEssayez-le en ligne!
la source
Python 2 , 200 octets
Essayez-le en ligne!
Utilise l'ID d'objet du tableau comme source de «caractère aléatoire».
Basé sur la réponse de Chas Brown - Je n'ai pas assez de représentants pour commenter!
la source