Ergebnisse - 19. Juli 2014
Der aktuelle King of the Hill ist Mercenary von User Fabigler ! Reichen Sie weiterhin Einträge ein und stoßen Sie ihn von seinem Thron!
Klicken Sie hier, um die Anzeigetafel anzuzeigen.
Programme, die am oder vor dem 19. Juli 2014 eingereicht wurden, wurden berücksichtigt. Alle anderen Einsendungen werden in zukünftigen Versuchen berücksichtigt. Neue Ergebnisse sollten um den 9. August veröffentlicht werden, damit Sie genügend Zeit haben.
Illustriert von Chris Rainbolt, meinem Bruder und einem frisch gebackenen Absolventen des Savannah College of Art and Design
Einführung
Die Engel und Dämonen kämpfen und benutzen wie gewöhnlich die Erde als Schlachtfeld. Die Menschen sitzen in der Mitte fest und werden gezwungen, Partei zu ergreifen. Eine unbekannte neutrale Kraft belohnt diejenigen, die konsequent für die Verliererseite kämpfen.
Das Spiel
Bei jedem Versuch werden Sie pseudozufällig gepaart und anschließend mit 20 bis 30 anderen Einsendungen gemischt. Jeder Versuch besteht aus 1000 Runden. In jeder Runde erhalten Sie eine Eingabe und es wird erwartet, dass Sie eine Ausgabe erzeugen. Ihre Ausgabe wird aufgezeichnet und bewertet. Dieser Vorgang wird 1000 Mal wiederholt.
Eingang
Sie erhalten ein einzelnes Argument, das die vergangenen Stimmen jedes Spielers darstellt. Runden werden durch Komma getrennt. A steht 0
für einen Spieler, der in dieser Runde auf der Seite des Bösen stand. A steht 1
für einen Spieler, der auf der Seite von Gut steht. Innerhalb eines Versuchs werden die Spieler immer in der gleichen Reihenfolge sein. Ihre eigene Stimme wird aufgenommen, aber nicht explizit identifiziert. Zum Beispiel:
101,100,100
In diesem Beispiel wurden drei Runden abgeschlossen und drei Spieler treten gegeneinander an. Spieler eins stand immer auf der Seite des Guten. Spieler zwei war immer auf der Seite des Bösen. Spieler drei wechselte in Runde 1 von Gut zu Böse in Runde 2 und 3. Einer dieser Spieler warst du.
Ausgabe
Java-Einreichungen
- Geben Sie den String zurück,
good
wenn Sie auf der Seite von Good stehen möchten. - Gib den String zurück,
evil
wenn du mit Evil auf der Seite stehen willst.
Nicht-Java-Beiträge
- Geben Sie den String
good
auf stdout aus, wenn Sie auf der Seite von Good stehen möchten. - Geben Sie die Zeichenfolge
evil
auf stdout aus, wenn Sie auf der Seite des Bösen stehen möchten.
Wenn Ihr Programm etwas anderes ausgibt oder zurückgibt, eine Ausnahme auslöst, nicht kompiliert oder länger als eine Sekunde benötigt, um etwas auf diesem Computer auszugeben , wird es disqualifiziert.
Wertung
Die Ergebnisse werden in einer Google Text & Tabellen-Tabelle zur einfachen Anzeige veröffentlicht, sobald ich alle aktuellen Einträge zusammenstellen kann. Keine Sorge, ich werde so lange Tests durchführen, wie ihr Programme einreicht!
- Sie erhalten 3 Punkte, wenn Sie sich in einer Runde mit der Mehrheit abfinden.
- Sie erhalten n - 1 Punkte, wenn Sie in einer Runde auf der Seite der Minderheit stehen, wobei n die Anzahl der aufeinanderfolgenden Male ist, die Sie auf der Seite der Minderheit stehen.
Ihre Punktzahl wird der Median von 5 Versuchen sein. Jeder Versuch besteht aus 1000 Runden.
Liefergegenstände
Nicht-Java-Beiträge
Sie müssen einen eindeutigen Titel, ein Programm und eine Windows-Befehlszeilenzeichenfolge übergeben, mit der Ihr Programm ausgeführt wird. Denken Sie daran, dass ein Argument an diese Zeichenfolge angehängt werden kann. Zum Beispiel:
python Angel.py
- Beachten Sie, dass dieser keine Argumente hat. Das ist die erste Runde! Seien Sie darauf vorbereitet.
python Angel.py 11011,00101,11101,11111,00001,11001,11001
Java-Einreichungen
Sie müssen einen eindeutigen Titel und eine Java-Klasse einreichen, die die unten beschriebene abstrakte Human-Klasse erweitert.
public abstract class Human {
public abstract String takeSides(String history) throws Exception;
}
Testen
Wenn Sie Ihren eigenen Beitrag testen möchten, befolgen Sie die Anweisungen hier .
Zusätzliche Bemerkungen
Sie können so viele verschiedene Beiträge einreichen, wie Sie möchten. Einsendungen, die als Absprachen erscheinen, werden disqualifiziert. Der Autor dieser Herausforderung wird der einzige Richter in dieser Angelegenheit sein.
Bei jedem Aufruf wird eine neue Instanz Ihres Programms oder Ihrer Java-Klasse erstellt. Sie können Informationen beibehalten, indem Sie in eine Datei schreiben. Sie dürfen die Struktur oder das Verhalten von nichts außer Ihrer eigenen Klasse ändern.
Die Spieler werden vor Beginn der Testphase gemischt. Demon und Angel werden an jeder Prüfung teilnehmen. Wenn die Anzahl der Spieler gerade ist, schließt sich auch Petyr Baelish an. Demon kämpft für das Böse, Angel für das Gute und Petyr Baelish wählt eine pseudozufällige Seite.
quelle
Antworten:
Der Söldner
Immer auf der Seite desjenigen, der in der letzten Runde das meiste Geld bezahlt hat.
Unter Berücksichtigung, dass gute Leute statistisch mehr verdienen.
quelle
Hipster, Ruby
Geht einfach mit der Minderheit der letzten Runde, nur weil alles andere Mainstream ist.
Laufen wie
quelle
Petyr Baelish
Man weiß nie, auf wessen Seite Petyr Baelish steht.
Dieser Eintrag wird nur berücksichtigt, wenn die Anzahl der Spieler gerade ist. Dies stellt sicher, dass es immer eine Mehrheit gibt.
quelle
C ++, der Metawissenschaftler
Dieser macht im Wesentlichen dasselbe wie The Scientist, wirkt sich jedoch nicht auf Runden als Ganzes aus, sondern auf die einzelnen Spieler. Es versucht, jedem Spieler separat eine Welle (oder eine konstante Funktion) zuzuordnen, und prognostiziert seinen Zug in der nächsten Runde. Aus der resultierenden Prognose wählt The Meta Scientist, welche Seite eine Mehrheit zu haben scheint.
Wenn Sie Debug-Anweisungen aktivieren möchten, ändern Sie die Zeilenlesung
#if 0
in#if 1
.Kompiliere mit
g++ -O3 -std=c++0x -o MetaScientist MetaScientist.cpp
(du brauchst keine Warnungen, also nein-Wall
) und starte mitMetaScientist.exe
(möglicherweise natürlich auch mit dem Argument). Wenn Sie wirklich nett fragen, kann ich Ihnen eine ausführbare Windows-Datei zur Verfügung stellen.EDIT: Anscheinend lief die Vorgängerversion rund 600 Runden aus. Das sollte das nicht tun. Sein Zeitverbrauch wird von der
#define WINDOW (...)
Leitung gesteuert , mehr ist langsamer, schaut aber weiter zurück.quelle
Engel
Der reinste Spieler von allen.
Programm
Befehl
quelle
Artemis Fowl
In Buch 7, The Atlantis Complex , erkrankte Artemis Fowl an einer psychischen Erkrankung (genannt Atlantis Complex), die ihn zwang, alles in Vielfachen von 5 zu tun (Sprechen, Handeln usw.). Als er es in einem Vielfachen von 5 nicht schaffen konnte, geriet er in Panik. Ich mache im Grunde das: Sehen Sie, ob Gut oder Böse (Vorspannung) durch 5 teilbar ist, wenn beides nicht der Fall ist, dann gerate ich in Panik und sehe, was größer war und laufe mit dieser oder Panik noch weiter und wähle zufällig.
quelle
break;
in deinem vergessenswitch
.Disparnumerophobic
Ungerade Zahlen sind erschreckend.
quelle
Linus, Rubin
Versucht, Analysten zu verwirren, indem immer das Muster gebrochen wird .
Speichern unter
linus.rb
und starten mitruby linus.rb
quelle
Der BackPacker
Bestimmt einen Spieler, der die passende Minderheit am meisten gewählt hat, und wählt seine letzte Stimme.
Der CrowdFollower
Bestimmt einen Spieler, der die passende Mehrheit gewählt hat und wählt seine letzte Stimme.
quelle
goWithMajority = true
und einen wo er istfalse
. Ist das in Ordnung oder muss ich dafür einen zweiten BackPacker hinzufügen?Wahrsager
Dies ist noch in Arbeit. Ich habe es noch nicht getestet. Ich wollte nur sehen, ob das OP denkt, dass es gegen die Regeln verstößt oder nicht.
Die Idee ist, die nächste Runde zu simulieren, indem alle anderen Teilnehmer einige Male ausgeführt werden, um eine Wahrscheinlichkeit für das Ergebnis zu erhalten und entsprechend zu handeln.
quelle
C ++, der Wissenschaftler
Dieser versucht, mit der Geschichte dessen, was die Mehrheit pro Runde gewählt hat
wave
(majority()
gibt der Mehrheit die Wahl in einer Runde), eine Welle an die Daten von Wellenlänge2*period
und Phase anzupassenphase
. Wenn0,1,1,1,0,1,0,1,1,1,0,0,0,1,0
es alsoperiod=3, phase=5
(maxat=={3,5}
) auswählt, werden seine Ergebnisse9 3 11 5 5 3 5 7 9 7 7 7 7 7 7
. Es durchläuft alle möglichen Zeiträume und speichert, wenn für diesen Zeitraum die Punktzahl höher ist als für das aktuelle Maximum,{period,phase}
für welches es aufgetreten ist.Anschließend wird die gefundene Welle in die nächste Runde extrapoliert und die vorhergesagte Mehrheit übernommen.
Kompiliere mit
g++ -O3 -std=c++0x -o Scientist Scientist.cpp
(du brauchst keine Warnungen, also nein-Wall
) und starte mitScientist.exe
(möglicherweise natürlich auch mit dem Argument). Wenn Sie wirklich nett fragen, kann ich Ihnen eine ausführbare Windows-Datei zur Verfügung stellen.Oh, und wage es nicht, mit dem Eingabeformat herumzuspielen. Es wird sonst seltsame Dinge tun.
EDIT: Anscheinend lief die Vorgängerversion rund 600 Runden aus. Das sollte das nicht tun. Sein Zeitverbrauch wird von der
#define WINDOW (...)
Leitung gesteuert , mehr ist langsamer, schaut aber weiter zurück.quelle
Code Runner
Um die Sache interessant zu machen, habe ich ein Skript erstellt, mit dem der Code aus jeder veröffentlichten Antwort automatisch heruntergeladen, bei Bedarf kompiliert und dann alle Lösungen gemäß den Regeln ausgeführt werden. Auf diese Weise können die Leute überprüfen, wie es ihnen geht. Speichern Sie dieses Skript einfach in run_all.py (erfordert BeautifulSoup) und dann:
Ein paar Dinge:
def submission_type(lang)
.CPPSubmission
). Der Sprachtyp wird aus dem Meta-Code-Tag< !-- language: lang-java -- >
abgerufen. Fügen Sie ihn daher hinzu, wenn der Code ausgeführt werden soll. (Entfernen Sie die zusätzlichen Leerzeichen vor und nach dem <>.) UPDATE : Es gibt jetzt einige äußerst grundlegende Schlussfolgerungen, um zu versuchen, die Sprache zu erkennen, wenn sie nicht definiert ist.blacklist.text
automatisch zu zukünftigen Tests hinzugefügt und aus diesen entfernt. Wenn Sie Ihren Code korrigieren, entfernen Sie einfach Ihren Eintrag von der Blacklist und führen Sie ihn erneut ausget
.Derzeit unterstützte Sprachen:
Ohne weiteres:
quelle
Der schöne Geist, Rubin
Trifft seine Entscheidung auf der Grundlage von Mustern von fraglicher Bedeutung in der Bitdarstellung der letzten Runde
Laufen wie
quelle
Gierig, Lua
Ein abergläubisches Programm, das an Zeichen und Wunder glaubt.
starte es mit:
gefolgt von der Eingabe.
quelle
Die Winchesters
Sam und Dean sind gut (die meiste Zeit).
quelle
9:1
das richtige Verhältnis vorliegt? Vielleicht sollten wir Data Mining durchführen und ein genaueres Verhältnis erhalten?9:1
scheint mir inStatistiker
quelle
Math.ceil(Math.random()-Math.random())
dir kannst du auch einfach machenMath.round(Math.random())
.R, ein etwas bayesianischer Bot
Verwenden Sie die Häufigkeitstabelle für jeden Benutzer als vorherige Wahrscheinlichkeit für die Ausgabe anderer Benutzer.
Wird mit
Rscript BayesianBot.R
gefolgt von der Eingabe aufgerufen .Bearbeiten : Nur um zu verdeutlichen, was dies tut, ist hier ein Schritt für Schritt mit der Beispieleingabe:
Dann
result<-
wählt die Linie , die mit jedem Spieler beginnt , nach dem Zufallsprinzip entweder 0 oder 1 aus, wobei diese letzte Tabelle als Gewichtung verwendet wird (dh für Spieler 1 beträgt die Wahrscheinlichkeit, 0 zu wählen, 2/7, 1 5/7 usw.). Es wird ein Ergebnis für jeden Spieler / jede Spalte ausgewählt und schließlich die Zahl zurückgegeben, die am häufigsten vorkommt.quelle
schweizerisch
Bewahrt immer Neutralität. Zum Scheitern verurteilt, niemals zu gewinnen.
quelle
HAL 9000
Bearbeiten: Vielleicht ist dies besser für HAL 9000 geeignet, aber seien Sie vorsichtig! Es ist sehr böse. Ich empfehle
cd
, das Verzeichnis vor dem Ausführen zu leeren.Nicht so offensichtliche Anrufung:
In M $
In * nix
quelle
Wille der Mehrheit
Speichern Sie es als
WotM.py
, führenpython3 WotM.py
von der Eingabe gefolgt aus.Ein einfaches Programm, um zu sehen, wie es funktioniert. Passt zu allem, was die Mehrheit beim letzten Mal gesagt hat, oder auch zufällig.
quelle
Alan Shearer
Wiederholt, was auch immer die Person, neben der er sitzt, gerade gesagt hat. Wenn sich herausstellt, dass die Person falsch liegt, wechselt sie zur nächsten Person und wiederholt stattdessen, was sie sagt.
quelle
lastRound
bevor Sie sie deklarieren. Außerdem haben Sie allen Klammern hinzugefügtString.length
, dies ist jedoch keine Funktion. Können Sie Ihre Einreichung an einen Punkt bringen, an dem sie kompiliert wird?lastRound.length
wird immer noch angesprochen (im ersten if), bevorlastRound
deklariert wird (in diesem if's else). Bitte versuchen Sie, Ihren Code zu kompilieren (und möglicherweise auszuführen), bevor Sie ihn hier einreichen.Später ist Evil, JavaScript ( node.js )
Misst die Zeit zwischen den Ausführungen. Wenn der Zeitunterschied größer ist als beim letzten Mal, muss es böse sein. Ansonsten gut.
Laufen mit:
node laterisevil.js
quelle
Pattern Finder, Python
Sucht nach einem wiederkehrenden Muster, und wenn es eines nicht findet, passt es einfach zur Mehrheit.
renn mit
quelle
Der Turncoat
Der Turncoat glaubt, dass wegen der anderen Kämpfer die Mehrheit nach jeder Runde öfter zwischen Gut und Böse wechselt, als auf der gleichen Seite zu bleiben. So beginnt er die erste Runde, indem er sich willkürlich für gut einsetzt, und wechselt dann jede Runde, um häufiger im siegreichen oder verlorenen Team zu bleiben.
Nachdem ich dies geschrieben hatte, wurde mir klar, dass aufgrund der Einträge, die auf statistischen Analysen basierten, die Mehrheit aufgrund der Dynamik weniger die Seite wechseln würde, wenn mehr Runden abgeschlossen waren. Daher der Lazy Turncoat.
Der faule Mantel
Der Lazy Turncoat startet wie der Turncoat, aber als die Runden vorbei sind, wird er immer fauler, um auf die andere Seite zu wechseln.
quelle
Biograf, Rubin
Mein Versuch eines fast intelligenten Eintrags (ein wirklich intelligenter würde das Testen gegen das Feld erfordern). Geschrieben in Ruby, daher besteht die Möglichkeit, dass dies zu langsam ist, aber auf meinem Rechner dauert es trotzdem 0,11 Sekunden, um die letzte Runde zu berechnen, wenn 40 zufällige Spieler anwesend sind. Ich hoffe, dass es gut genug funktioniert.
Speichern unter
biographer.rb
, Ausführen alsruby biographer.rb
Die Idee ist, dass für jeden Spieler seine Chancen, "gut" zu werden, geschätzt werden, indem sowohl seine eigenen Entscheidungen für die letzten zehn Runden als auch die Gesamtergebnisse betrachtet werden und Beispiele in der Vergangenheit gefunden werden, in denen die gleichen Umstände (ihre Stimmen + insgesamt) vorliegen Ergebnisse) aufgetreten. Es wählt die längste Lookbehind-Länge aus, bis zu 10 Runden, so dass es einen Präzedenzfall gibt, und verwendet diese, um eine Frequenz zu erstellen (angepasst gemäß Laplace-Gesetz der Nachfolge, sodass wir uns nie zu 100% sicher sind).
Anschließend werden einige Simulationen ausgeführt und es wird angezeigt, wie oft Good gewinnt. Wenn die Simulationen größtenteils auf die gleiche Art und Weise verlaufen sind, ist es wahrscheinlich gut, Vorhersagen im Allgemeinen zu treffen, sodass die vorhergesagte Minderheit ausgewählt wird. Wenn es nicht sicher ist, wählt es die vorhergesagte Mehrheit.
quelle
Judas
Judas ist ein wirklich guter Mensch. Schade, dass er die Guten für ein paar Cent verraten wird.
quelle
,
aushistory
, umso mehr, als Rusher das Spiel in Gruppen aufgeteilt wird.Der trügerische Spieler (Python)
Wenn eine Seite mehrmals hintereinander die Mehrheit gewonnen hat, erkennt der Spieler, dass die andere Seite in der nächsten Runde eher die Mehrheit sein wird (richtig?) Und dies beeinflusst seine Stimme. Er strebt die Minderheit an, denn wenn er es einmal in die Minderheit schafft, schafft er es wahrscheinlich mehrmals dorthin (oder?) Und bekommt viele Punkte.
Verwendungszweck
Für die erste Runde:
und danach:
quelle
Zellularer Automat
Hierbei werden herkömmliche Regeln für Conways Spiel des Lebens verwendet, um eine Seite auszuwählen. Zunächst wird aus den vorherigen Abstimmungen ein 2D-Raster erstellt. Dann wird die "Welt" um eine Stufe vorgerückt und die Gesamtzahl der verbleibenden lebenden Zellen berechnet. Ist diese Anzahl größer als die Hälfte der Gesamtzahl der Zellen, wird "gut" gewählt. Ansonsten wird "böse" gewählt.
Bitte verzeihen Sie alle Fehler, dies wurde während meiner Mittagspause zerschlagen. ;)
quelle
Der Ridge Professor
Ich hoffe, die Verwendung von Bibliotheken ist erlaubt. Ich habe keine Lust, dies ohne eine zu tun =)
Die Grundidee ist, für jeden Teilnehmer in den letzten Runden einen Grat-Regressionsklassifikator zu trainieren, wobei die 30 Ergebnisse vor jeder Runde als Merkmale verwendet werden. Ursprünglich beinhaltete es die letzte Runde der Ergebnisse, in der alle Spieler das Ergebnis für jeden Spieler vorhersagten, aber das verkürzte es ziemlich zeitnah, wenn die Anzahl der Teilnehmer größer wurde (etwa 50).
Kompilieren
Speichern Sie den Quellcode in einer Datei namens
ridge_professor.cc
, laden Sie die Eigen- Bibliothek herunter und entpacken Sie den darin enthaltenen Eigen-Ordner in denselben Ordner wie die Quelldatei. Kompilieren mitg++ -I. -O3 -ffast-math -o ridge_professor ridge_professor.cc
.Zu rennen
Rufen Sie ridge_professor.exe auf und geben Sie das gewünschte Argument an.
Frage
Da ich noch nirgendwo einen Kommentar abgeben kann, frage ich hier: Ist es aufgrund der Größenbeschränkung der Argumente unter Windows nicht unmöglich, die resultierenden Binärdateien mit dem gesamten Verlauf nach einigen hundert Umdrehungen aufzurufen? Ich dachte, Sie können nicht mehr als ~ 9000 Zeichen im Argument haben ...
quelle
Crowley
Weil die Winchesters ohne diesen Kerl viel weniger interessant sind. Er steht offensichtlich auf der Seite des Bösen ... es sei denn, es wird benötigt, um sich um ein größeres Übel zu kümmern.
Ich schaue mir die letzten beiden Runden an (bisher 0 Kommas und 1 Komma) und wenn beide das Böse gewinnen lassen, stimme ich gut. Ansonsten stimme ich böse.
quelle