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