An der Börse dreht sich alles um die Geschwindigkeit des Wissens. Im Gegensatz zu früheren Herausforderungen ist der aktuelle Aktienkurs nicht zufällig: Er wird von den Spielern bestimmt. Wenn Sie eine unterbewertete Aktie vor allen anderen identifizieren können, haben Sie sich selbst ein Geldverdienen-Programm geschrieben.
Der Preis bezieht sich auf die Menge, für die die Aktien gehandelt werden, während sich der Wert auf den Betrag bezieht, den die Aktie am Ende des Spiels wert ist.
Jeder Spieler beginnt mit 1000 von jeder Aktie und 0 relativem Nettowert. Jede Aktie hat einen geheimen Wert und Ihre Punktzahl am Ende des Spiels ist(stockValue for each ownedStock) + netWorth
. Ihr Nettovermögen kann negativ sein. In einem N-Spieler-Spiel gibt es N Aktien.
Schritte:
Das Spiel folgt den folgenden Schritten:
- Sie erhalten den geheimen Wert einer einzelnen Aktie.
- Sie machen ein Angebot, X von Y Aktien für $ Z zu verkaufen
- Alle Spieler erhalten die Angebote und jeder kann eines zur Annahme auswählen
- Alle Spieler werden über akzeptierte Angebote informiert
- Fahren Sie mit Schritt 2 fort
Jeder der Schritte wird nachstehend ausführlich beschrieben:
void secretValue(int stockType, int value)
:- Der Wert, den Sie lernen, wird keinem anderen Spieler mitgeteilt.
- Der Wert liegt zwischen
0
und1000
- Niedrige Werte treten eher auf als hohe (quadratische Gleichverteilung)
Offer makeOffer(List<Stock> currentStock)
- Sie können zurückkehren
null
, um kein Angebot zu machen.
- Sie können zurückkehren
Offer acceptOffer(List<Offer> offers)
- Sie können zurückkehren
null
, um keine von ihnen zu akzeptieren - Wenn keine Angebote verfügbar sind, wird dies nicht aufgerufen
- Wenn Sie akzeptieren, sinkt Ihr Nettovermögen um $ Z (kann negativ werden) und Sie erhalten X von Y Aktien. Das Gegenteil tritt beim Verkäufer ein.
- Wenn Sie ein Angebot annehmen, erfolgt der Umtausch sofort und das Angebot wird entfernt, sodass weitere Spieler es nicht annehmen können.
- Sie können zurückkehren
void acceptedOffers(List<Offer> offers)
- Beinhaltet auch Ihre akzeptierten Angebote
Statische Variablen oder das Schreiben in Dateien sind nicht zulässig. (Keine dauerhaften Daten von Spiel zu Spiel) Nicht ernsthafte Konkurrenten sind erlaubt.
Schnittstellen:
public final class Stock {
public Stock(int stockType, int amount);
public int getType();
public int getAmount();
public Stock minus(Stock other);
public Stock plus(Stock other);
public Stock minus(int amount);
public Stock plus(int amount);
public Stock setAmount(int amount);
}
public class Offer {
public Offer(Stock offer, int payment);
public Stock getOffer();
public int getPayment();
}
Nicht-Java-Beiträge:
- Alle Anrufe bestehen aus zwei Leitungen: Die erste Linie ist die Funktion aufgerufen wird:
SecretValue
,MakeOffer
,AcceptOffer
,AcceptedOffers
,SetRandom
, und die zweite Linie die eigentlichen Daten enthält. - Die Aktien werden mit einem formatierten
:
Begrenzer:stockType:stockAmount
. - Angebote werden mit einem
@
Trennzeichen formatiert :offer@price
- Listen werden mit einem
;
Trennzeichen formatiert SecretValue
ist mit einem:
Trennzeichen formatiert :stockType:value
RandomSeed
wird verwendet, um Ihre Einreichung deterministisch zu machen. Wenn Ihre Einsendung Zufälligkeit verwendet, verwenden Sie bitte den als Startwert übergebenen Integer-Wert!- Alle Funktionsaufrufe benötigen eine Antwort. Wenn die Antwort
null
oder istvoid
, geben Sie eine leere Zeichenfolge zurück. - Fügen Sie ein hinzu
command.txt
, das die Befehlszeilenargumente für die Ausführung Ihrer Übermittlung enthält
Wertung
Spiele mit 1000 Runden werden mehrmals gespielt. Die Spieler werden nach dem ELO-System gewertet und mit Spielern mit ähnlichen Fähigkeiten gepaart. Der Spieler mit der höchsten endgültigen ELO-Punktzahl gewinnt! (Ich habe das System so modifiziert, dass bei jedem Spiel die ELO-Punkte für jedes Spielerpaar aktualisiert werden.)
Der Controller enthält einen Autodownloader, so wenden Sie sich bitte Ihre Vorlage mit einem Header beginnen: Name, Language
. Wenn Ihre Übermittlung nicht in Java erfolgt, sollte jeder Codeblock mit dem Namen der Datei beginnen. (Ausgenommen die Befehlsdatei, die der erste Block in Ihrem Beitrag sein sollte)
Laufen
Es gibt zwei Möglichkeiten, dieses Projekt auszuführen:
Laden Sie den Quellcode herunter, kompilieren Sie ihn und starten Sie ihn. Die Quelle finden Sie auf Github . Lauf
git clone --recursive https://github.com/nathanmerrill/StockExchange.git
Laden Sie die ausführbare JAR-Datei herunter. Die Beiträge sollten in Ihrem aktuellen Arbeitsverzeichnis im
/submissions
Ordner abgelegt werden . Sie können nur die JAR , nur die Einreichungen oder beides herunterladen
Melden Sie sich an run
, um das Projekt auszuführen (Standardoption), oder melden Sie sich an download
, um alle Einsendungen herunterzuladen, die bisher von dieser Frage betroffen waren.
Anzeigetafel
1. 1308.1220497323848 Cheater
2. 1242.0333695640356 InsideTrader
3. 1158.3662658295411 UncleScrooge
4. 1113.8344000358493 BlackMarket
5. 1051.8370015258993 DartMonkey
6. 983.0545446731494 WarGamer
7. 939.457423938002 Spammer
8. 901.4372529538886 DumbBot
9. 859.0519326039137 ShutUpAndTakeMyMoney
10. 852.9448222849587 VincentKasuga
11. 718.2112067329083 Profiteer
quelle
Antworten:
Betrüger, Java
Versucht, nichts für Geld zu verkaufen.
quelle
WarGamer, Java
Nach einer oberflächlichen Prüfung der Regeln habe ich entschieden, dass der primäre Gewinnzug nicht darin besteht, zu spielen. Jeder, der Aktien zum Verkauf anbietet, kennt wahrscheinlich den Preis und wird vom Verkauf profitieren. Es kann umgeschaltet werden, so dass es "Scherz" -Angebote zum Verkauf einer Aktie für Integer macht.
quelle
ShutUpAndTakeMyMoney, Java
Es nimmt jedes Angebot an.
quelle
DumbBot, Java
Verwenden Sie diesen Bot, wenn Sie Ihren eigenen erstellen. Bietet seinen geheimen Bestand zu einem reduzierten Preis an.
quelle
python_starter, Python 3
Verwenden Sie dies als Ausgangspunkt für alle Python- (oder andere Sprach-) Programme
Nimmt ein zufälliges Angebot an.
Befehlsdatei:
Programm:
quelle
VincentKasuga, Java
Ich bin mir nicht sicher, ob mein Java gültig ist. Lesen Sie bitte.
Wie es funktioniert
- Wenn Sie alle Aktien besitzen, können Sie den Kurs der Aktie festlegen. Sie sind der einzige Verkäufer. 1. Kaufen Sie alle Aktien. 2. Stellen Sie den Kurs aller Aktien so ein, dass sie beim letzten Tick super hoch sind. 3. GEWINN! - Das ist normalerweise nicht möglich, weil ...Wie es funktioniert, v2
Der Bot sagt es nicht voraus - er nutzt einen inhärenten Fehler in der Struktur des Marktes aus!Machen
FAQ
F: Wer ist Vincent Kasuga?
A: Er hat alle Zwiebeln und Zwiebel-Futures in den USA gekauft. (alle in ein geheimes Lagerhaus stecken) Die Branche wird freigelassen - gib mir X Millionen, oder ich setze den Preis auf ein himmelhohes Niveau, und du wirst alle bankrott gehen.
Aber er hörte dort nicht auf.
Dann schloss er heimlich den Zwiebel-ETF kurz (wetten, dass er sinken würde). Er verkaufte alle Zwiebeln auf einmal und lieferte sie physisch in Tausenden von Lastwagen an die Börse. Der Zwiebelbeutel kostet weniger als die Zwiebeln. Er hat WIEDER Millionen gemacht. Kurz, der Hudson River war voller Zwiebeln.
Er ist eine echte Person.
Der Code
"Ich habe den Goldmarkt in die Enge getrieben, Mr. Bond!"
quelle
for (offer: offers)
->for (Offer offer: offers)
corneredStockType == null
ist auch nicht gültig. einint
kann nicht seinnull
.Spammer, Java
Spammen Sie den Markt mit wirklich billigen Aktien und kaufen Sie Aktien nur, wenn der Preis unter 20 liegt. Wenn die Aktienanzahl auf 1 fällt, wird versucht, etwas zu kaufen.
quelle
DartMonkey, Java
(Nicht konkurrierend: Es wird nicht gewinnen und ich habe bereits eine andere Antwort)
Dart Affe mag es Dinge zu werfen ... und es gibt einen großen Haufen spitzer Stöcke neben ihm. Er sieht etwas Papier an der Wand. Bam! Bam! Bam! In kürzester Zeit hat Dart Monkey 80 Darts geworfen! Die Hälfte der Pfeile ist rot und die andere Hälfte ist blau und es sind Zufallszahlen darauf! Dart Monkey sieht einen Computer ... Dart Monkey gibt die Zahlen ein. Pfeilaffe mag Zahlen. Dart Affe verdient etwas Geld mit seinen Darts ...
Im Ernstfall initialisiert DartMonkey ein ganzzahliges Array mit einer Länge, die doppelt so lang ist wie die Anzahl der Aktien. Er speichert eine Zahl für die Menge an Aktien, die er kaufen / verkaufen möchte, und eine Zahl für den Preis der Aktie. Anschließend verkauft er abwechselnd Aktien aus dem Array und nimmt Angebote entsprechend dem Array an. Wenn er keine Vorräte aus dem Array hat, wird er nichts anbieten, und wenn er keine Angebote aus dem Array hat, wird er nichts annehmen.
Diese Antwort wurde von @TheNumberOne inspiriert, der im Chat Dart-Affen erwähnte
quelle
InsideTrader, Java
InsideTrader schaute sich nur um und bemerkte, dass jeder versuchte kreativ zu sein. Aber er hat etwas Kreatives getan: das tun, was erwartet wird.
Dieser Bot kauft, wenn es sich "lohnt", weil er einige "interne Dokumente" "geliehen" hat, um "Investitionsentscheidungen" zu "leiten".
To-Do und wie es im Code funktioniert. ;)
Der Code"
quelle
Error on line 50: modifier private not allowed here Error on line 54: modifier private not allowed here
. Ich würde nur die Klassen entfernen und es verlängern lassenPlayer
Wall Street, Kotlin
Beginnt mit einem hohen und einem niedrigen Kaufpreis und wechselt allmählich zu dem, was der Preis für richtig hält. Sie können dies auch als Vorlage verwenden, um Ihre eigenen in Kotlin zu erstellen.
Hinweis: Es gibt hier einen Fehler, den ich scheinbar nicht zuverlässig reproduzieren kann. Wenn mein Programm abstürzt oder Probleme hat, pinge mich bitte im Chat an und verlinke ein Pastebin des Inhalts von
submissions/other/WallStreet/log.txt
quelle
command.txt
braucht den Dateinamen nicht. Netter Post!$
funktioniert nur mit einem Variablennamen.${}
führt beliebigen Code aus. Grundsätzlich funktioniert es so oder so und ich bevorzuge ohne die Klammern.command.txt
:kotlinc
->kotlinc.bat
undkotlin
->kotlin.bat
UncleScrooge, Java
Verkaufen Sie Aktien zu einem wirklich hohen Preis und kaufen Sie nur, wenn der Preis unter 100 liegt.
quelle
Profiteur, Java
Profiteur ist für das Geld dabei, und er zählt immer Münzen. Er schätzt konservativ, wie viel Geld er hat. Er kauft dann die geheimen Aktien, wenn sie unter dem Wert liegen, oder kauft billige Aktien. Er merkt sich auch, wie viel er für alles bezahlt hat und macht immer Angebote, die über dem Aktienkurs liegen. Außerdem macht er höhere Angebote, wenn er weniger Geld hat.
Hinweis: Ich denke, ich habe das richtig gemacht, aber wenn es @ NathanMerrill nichts ausmacht, meinen Code nach Fehlern zu durchsuchen, wäre das großartig
quelle
MaxBot, Java
Dieser Bot versucht, aus jeder Transaktion den größten Gewinn zu machen. Beim Verkauf liegt der Preis einer unbekannten Aktie bei 300 USD, beim Kauf bei 250 USD.
quelle
BlackMarket, Java
Dazu gibt es nicht viel zu sagen, da diese Transaktionen ... außerhalb der Charts liegen werden, könnte man sagen.
quelle
NotQuiteABanksBestFriend, Python 3
Command.txt:
Versucht immer, versteckte Aktien für mehr zu verkaufen, als es wert ist.
quelle