Das Szenario
Sie leben in einem Land, in dem Präsidentschaftswahlen stattfinden. Jeder Wähler erhält eine Stimme, und deshalb gibt es ein fest verankertes Zweiparteiensystem. (Dritte existieren, bekommen aber kaum Stimmen).
Die jüngste Meinungsumfrage zeigt das Rennen in einer toten Hitze:
- 49%: Alberto Arbusto
- 49%: Jorge Sangre
- 2%: verschiedene minderjährige Kandidaten
Die Programmanforderungen
Sie wurden von der Regierung beauftragt, einen Teil der Stimmzählsoftware zu schreiben. Sie erhalten bei Standardeingabe eine ungeordnete Liste mit den Stimmen eines Bezirks, eine pro Zeile, wie folgt:
Alberto Arbusto
Jorge Sangre
Jorge Sangre
Alberto Arbusto
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
Jorge Sangre
Juan Perez
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
…
und, nachdem es alle Stimmen gelesen hat, gibt es eine Zusammenfassung der Stimmen, die jeder Kandidat erhalten hat, in absteigender Reihenfolge nach der Anzahl der Stimmen, wie folgt:
492 Jorge Sangre
484 Alberto Arbusto
18 Juan Perez
6 Mickey Mouse
Der hinterhältige Teil
Sie sind ein Partisanen-Hacker, der die Wahl für einen der beiden Hauptkandidaten stehlen möchte (Sie können wählen, welcher). Daher muss Ihr Programm absichtlich falsche Stimmenzahlen ausgeben, mit einer systematischen Ausrichtung auf Ihren Lieblingskandidaten.
Natürlich müssen Sie dies so tun, dass eine Person, die sich Ihren Code oder dessen Ausgabe ansieht, das falsche Verhalten wahrscheinlich nicht erkennt.
...you can choose which one...
Kann ich den auswählen, dessen Name der erste ist?sort|uniq -c
...Antworten:
Scala
Es lebe Alberto Arbusto!
Alberto Arbusto wird fast immer etwas vor Jorge Sangre herauskommen, vorausgesetzt, es werden genügend Stimmen abgegeben (~ 10.000). Es besteht keine Notwendigkeit, die Stimmen selbst zu manipulieren.
Randnotiz: Dieser Code basiert lose auf einem "benutzerdefinierten" Verbindungspool, auf den ich in einem Projekt gestoßen bin. Wir haben Wochen gebraucht, um herauszufinden, warum die Anwendung immer keine Verbindungen mehr hatte.
quelle
Rubin
Jorge Sangre wird seine Stimmenzahl erheblich steigern (zum Beispiel werden 492 Stimmen als 754 gemeldet). Alberto Stimmen werden genau berichtet.
quelle
Bash
(Entspricht dies der Spezifikation?)
Wie immer sind zusätzliche Vorsichtsmaßnahmen erforderlich, um eine gültige Ausgabe sicherzustellen.
uniq -c
stellt jeder Zeile die Häufigkeit des Auftretens voran. Dies erledigt im Grunde die ganze Arbeit.Für den Fall,
uniq -c
dass etwas nicht in Ordnung ist, sortieren wir die Ausgabe in umgekehrter Reihenfolge nach den Namen der Kandidaten und führen sie dann durchuniq -f1
(drucken Sie keine doppelten Zeilen aus und ignorieren Sie das erste Feld [die Anzahl der Stimmen]), um doppelte Kandidaten zu entfernen. Zuletztsort -gr
sortieren wir in "General Numeric" und "Reverse" (absteigende Reihenfolge nach Anzahl der Stimmen).quelle
C #
Der erste Kandidat in der Textdatei gewinnt immer!Es wird Alberto Arbusto zum Gewinner machen!
quelle
SortedDictionary
werden die Kandidaten in alphabetischer Reihenfolge sortieren.Dictionary<TK,TV>
implementierten Hash-Tabelle der Klasse werden Indizes in einem Backing-Array von tatsächlichen Elementen gespeichert . A,Dictionary<TK,TV>
aus dem niemals Elemente gelöscht werden, listet die Elemente in der Reihenfolge auf, in der sie hinzugefügt wurden. Ein solches Verhalten ist nicht spezifiziert, aber es ist ausreichend lange vorhanden. Ich würde nicht erwarten, dass MS es jemals ändern wird.C
Begünstigt Jorge Sangre.
Beim Testen mit zufällig generierten Abstimmungsdateien gewinnt normalerweise mein Mann Jorge Sangre, auch wenn Alberto Arbusto bis zu 1,4% mehr der tatsächlichen Stimmen erhält (49,7% gegenüber 48,3% für Jorge Sangre).
quelle
Python
Die Stimmenzahl wird Kandidaten bevorzugen, die näher am Ende der Liste stehen.
quelle
tr | sed | dc
Mein Kumpel Alberto zählt das jedes Mal zweimal.
"Oh -
tr
? Nun, es ist nur notwendig, weil Computer nicht sehr gut mit Großbuchstaben umgehen können - besser, wenn sie alle in Kleinbuchstaben geschrieben sind ... Ja, ich weiß, Computer sind verrückt."AUSGABE
Hier ist eine andere Version, die Juan Perezs Stimme für Jorge Sangre gibt:
AUSGABE
quelle
JavaScript
Die letzte Person in der Kandidatenliste gewinnt immer.
quelle