Le marché boursier est tout au sujet de la vitesse de la connaissance. Contrairement aux défis précédents, le cours actuel n'est pas aléatoire: il est déterminé par ceux qui jouent le jeu. Si vous pouvez identifier un stock sous-évalué avant tout le monde, alors vous vous êtes écrit un programme rentable.
Le prix se réfère à combien les gens échangent le stock, tandis que la valeur se réfère à la valeur du stock à la fin du jeu.
Chaque joueur commence avec 1000 de chaque stock et 0 valeur nette relative. Chaque stock a une valeur secrète, et votre score à la fin du jeu est(stockValue for each ownedStock) + netWorth
. Votre valeur nette peut être négative. Dans une partie à N joueurs, il y a N actions.
Pas:
Le jeu suit les étapes suivantes:
- On vous donne la valeur secrète d'un stock unique.
- Vous faites une offre de vente d'actions X sur Y pour $ Z
- Tous les joueurs reçoivent les offres et chacun peut en choisir une à accepter
- Tous les joueurs sont informés des offres acceptées
- Revenez à l'étape 2
Chacune des étapes est détaillée ci-dessous:
void secretValue(int stockType, int value)
:- La valeur que vous apprenez n'est révélée à aucun autre joueur.
- La valeur est comprise entre
0
et1000
- Les valeurs faibles sont plus susceptibles de se produire que les valeurs élevées (distribution uniforme au carré)
Offer makeOffer(List<Stock> currentStock)
- Vous pouvez revenir
null
pour ne faire aucune offre.
- Vous pouvez revenir
Offer acceptOffer(List<Offer> offers)
- Vous pouvez revenir
null
pour n'en accepter aucun - S'il n'y a pas d'offres disponibles, cela ne sera pas appelé
- Si vous acceptez, votre valeur nette diminue de $ Z (peut devenir négative) et vous recevez X actions Y. L'inverse se produit avec le vendeur.
- Si vous acceptez une offre, l'échange aura lieu immédiatement et l'offre sera supprimée afin qu'aucun joueur supplémentaire ne puisse l'accepter.
- Vous pouvez revenir
void acceptedOffers(List<Offer> offers)
- Comprend également vos offres acceptées
Les variables statiques ou l'écriture dans des fichiers ne sont pas autorisées. (Aucune donnée persistante d'un jeu à l'autre) Les concurrents non sérieux sont autorisés.
Interfaces:
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();
}
Soumissions non Java:
- Tous les appels sont constituées de deux lignes: la première ligne est la fonction appelée:
SecretValue
,MakeOffer
,AcceptOffer
,AcceptedOffers
,SetRandom
, et la seconde ligne contenant les données réelles. - Les stocks sont mis en forme avec un
:
delimiter:stockType:stockAmount
. - Les offres sont formatées avec un
@
délimiteur:offer@price
- Les listes sont formatées avec un
;
délimiteur SecretValue
est formaté avec un:
délimiteur:stockType:value
RandomSeed
est utilisé pour rendre votre soumission déterministe. Si votre soumission utilise l'aléatoire, veuillez utiliser la valeur entière transmise comme graine!- Tous les appels de fonction nécessitent une réponse. Si la réponse est
null
ouvoid
, renvoyez une chaîne vide. - Veuillez inclure un
command.txt
qui donne les arguments de ligne de commande pour exécuter votre soumission
Notation
Les jeux composés de 1000 tours se dérouleront plusieurs fois. Les joueurs seront notés selon le système ELO et jumelés avec des joueurs de niveaux de compétence similaires. Le joueur avec le score ELO final le plus élevé gagne! (J'ai modifié le système pour que chaque jeu, les scores ELO soient mis à jour pour chaque paire de joueurs)
Le contrôleur comprend un AutoDownloader, donc s'il vous plaît commencer votre soumission avec un en- tête: Name, Language
. Si votre soumission n'est pas en Java, chaque bloc de code doit commencer par le nom du fichier. (à l'exclusion du fichier de commandes, qui devrait être le premier bloc de votre message)
Fonctionnement
Il existe 2 façons d'exécuter ce projet:
Téléchargez le code source, compilez et exécutez. Vous pouvez trouver la source sur Github . Courir
git clone --recursive https://github.com/nathanmerrill/StockExchange.git
Téléchargez l'exécutable JAR. Les soumissions doivent être placées dans votre répertoire de travail actuel dans le
/submissions
dossier. Vous pouvez télécharger uniquement le JAR , uniquement les soumissions , ou les deux
Passez run
pour exécuter le projet (option par défaut), ou passez download
pour télécharger toutes les soumissions loin de cette question.
Tableau d'affichage
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