Le scénario
Vous vivez dans un pays qui a une élection présidentielle. Chaque électeur obtient une voix et il existe donc un système bipartite bien enraciné. (Les tiers existent, mais obtiennent peu de voix).
Le dernier sondage d'opinion montre que la course est au point mort:
- 49%: Alberto Arbusto
- 49%: Jorge Sangre
- 2%: divers candidats mineurs
Les exigences du programme
Le gouvernement vous a embauché pour écrire une partie du logiciel de décompte des voix. Vous obtiendrez, en entrée standard, une liste non ordonnée des votes d’un bureau de vote, un par ligne, comme ceci:
Alberto Arbusto
Jorge Sangre
Jorge Sangre
Alberto Arbusto
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
Jorge Sangre
Juan Perez
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
…
et, après avoir lu tous les votes, génère un résumé du nombre de votes obtenus par chaque candidat, triés par ordre décroissant selon le nombre de votes, comme suit:
492 Jorge Sangre
484 Alberto Arbusto
18 Juan Perez
6 Mickey Mouse
La partie sournoise
Vous êtes un partisan qui veut voler l'élection de l'un des deux principaux candidats (vous pouvez choisir lequel). Ainsi, votre programme doit délibérément imprimer des comptes de vote incorrects , avec un parti pris systématique pour votre candidat préféré.
Bien sûr, vous devez faire cela de manière à ce qu'une personne consultant votre code ou sa sortie ne reconnaisse probablement pas le comportement incorrect.
...you can choose which one...
Puis-je choisir celui dont le nom est le premier?sort|uniq -c
...Réponses:
Scala
Longue vie à Alberto Arbusto!
Alberto Arbusto devancera presque toujours légèrement Jorge Sangre, à condition que suffisamment de suffrages soient exprimés (~ 10 000). Il n'est pas nécessaire de toucher aux votes eux-mêmes.
Note latérale: Ce code est vaguement basé sur un pool de connexions "personnalisé" que j'ai rencontré sur un projet. Il nous a fallu des semaines pour comprendre pourquoi l'application était constamment en rupture de connexion.
la source
Rubis
Jorge Sangre bénéficiera d'une augmentation substantielle de son nombre de votes (par exemple, 492 votes seront rapportés comme 754). Les votes d'Alberto seront rapportés avec précision.
la source
Frapper
(Est-ce que cela répond aux spécifications?)
Comme toujours, cela nécessite des précautions supplémentaires pour assurer une sortie valide.
uniq -c
préfixe chaque ligne avec le nombre de fois où elle se produit. Cela fait essentiellement tout le travail.Juste au cas où
uniq -c
quelque chose ne va pas, nous trions maintenant sa sortie en fonction du nom des candidats dans l’ordre inverse, puis nous l'exécutonsuniq -f1
(n'imprimez pas les lignes en double, en ignorant le premier champ [le nombre de voix]) pour supprimer les candidats en double. Enfin, nous utilisonssort -gr
le tri dans l'ordre "Numérique général" et "Inversé" (ordre décroissant selon le nombre de votes).la source
C #
Le premier candidat dans le fichier texte gagnera toujours!Cela fera d' Alberto Arbusto le gagnant!
la source
SortedDictionary
va trier les candidats par ordre alphabétique.Dictionary<TK,TV>
classe, telle qu'implémentée , stocke les index dans un tableau de sauvegarde d'éléments réels. UnDictionary<TK,TV>
élément dans lequel aucun élément n'est jamais supprimé énumérera les éléments dans l'ordre dans lequel ils ont été ajoutés; un tel comportement n'est pas spécifié, mais il est en place depuis assez longtemps et je ne m'attendrais pas à ce que MS le change jamais.C
Favorise Jorge Sangre.
Lors des tests avec des fichiers de votes générés aléatoirement, même lorsque Alberto Arbusto reçoit jusqu'à 1,4% de votes supplémentaires (49,7% contre 48,3% pour Jorge Sangre), mon homme, Jorge Sangre, remporte généralement le décompte.
la source
Python
Le décompte des voix favorisera les candidats plus proches de la fin de la liste.
la source
tr | sed | dc
Cela compte mon copain Alberto deux fois à chaque fois.
"Oh -
tr
? Bien, c'est juste nécessaire parce que les ordinateurs ne sont pas très bons en majuscules - mieux s'ils sont tous en minuscules ... Ouais, je sais, les ordinateurs sont fous."SORTIE
Voici une autre version qui donne le vote de Juan Perez à Jorge Sangre:
SORTIE
la source
JavaScript
La dernière personne dans la liste des candidats sera toujours gagnante.
la source