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
la source
Réponses:
Tricheur, Java
Essaie de ne rien vendre pour de l'argent.
la source
WarGamer, Java
Après un examen superficiel des règles, j'ai décidé que le coup gagnant principal n'est pas de jouer. Quiconque propose de vendre des actions connaît probablement le prix et profitera de la vente. Il peut être basculé de sorte qu'il fera des offres de "blague" pour vendre un stock pour Integer.MAX_VALUE dollars en espérant la fermer et prendre mon argent mordra.
la source
ShutUpAndTakeMyMoney, Java
Il accepte toute offre.
la source
DumbBot, Java
Utilisez ce bot lors de la création du vôtre. Offre son stock secret à un prix réduit.
la source
python_starter, Python 3
Utilisez-le comme point de départ pour tous les programmes python (ou autre langage)
Accepte une offre aléatoire.
Fichier de commande:
Programme:
la source
VincentKasuga, Java
Je ne sais pas si mon Java est valide. S'il-vous-plaît évaluez.
Comment ça marche
- si vous possédez tous les stocks, vous pouvez définir le prix du stock. Vous êtes le seul vendeur. 1. Achetez tous les stocks. 2. Définissez le prix de tous les stocks pour être super élevé au dernier tick. 3. PROFIT! - Ce n'est normalement pas possible car ...Comment ça marche, v2
Le bot ne prédit pas - il exploite une faille inhérente à la structure du marché!Faire
FAQ
Q: Qui est Vincent Kasuga?
R: Il a acheté tous les oignons et les oignons à terme aux États-Unis. (mettez-les tous dans un entrepôt secret) Tenez l'industrie contre rançon - donnez-moi X millions ou je fixerai le prix au plus bas et vous ferez tous faillite.
Mais il ne s'est pas arrêté là.
Puis, il a secrètement court-circuité l'ETF de l'oignon (en pariant qu'il allait baisser). Il a vendu tous les oignons en même temps, les livrant physiquement dans des milliers de camions à la bourse. Le sac d'oignon coûte moins cher que les oignons. Il a fait des millions ENCORE. Bref, la rivière Hudson débordait d'oignons.
C'est une vraie personne.
Le code
"J'ai acculé le marché de l'or, M. Bond!"
la source
for (offer: offers)
->for (Offer offer: offers)
corneredStockType == null
n'est pas non plus valide. unint
ne peut pas êtrenull
.Spammeur, Java
Spam sur le marché avec des actions vraiment bon marché, et n'achetez des actions que lorsque le prix est inférieur à 20. Lorsque le nombre de stocks tombe à 1, il essaiera d'acheter n'importe quoi.
la source
DartMonkey, Java
(non compétitif: il ne gagnera pas et j'ai déjà une autre réponse)
Le singe Dart aime lancer des choses ... et il y a un gros tas de bâtons pointus à côté de lui. Il voit du papier sur le mur. Bam! Bam! Bam! En un rien de temps, Dart Monkey a lancé 80 fléchettes! La moitié des fléchettes sont rouges et l'autre moitié est bleue, et il y a des nombres aléatoires dessus! Dart monkey voit un ordinateur ... dart monkey tape les chiffres. Le singe Dart aime les chiffres. Dart monkey gagne de l'argent avec ses fléchettes ...
Sérieusement, DartMonkey initialise un tableau d'entiers dont la longueur est le double du nombre de stocks. Il stocke un numéro pour la quantité de stock qu'il veut acheter / vendre, et un numéro pour le prix du stock. Il alterne ensuite la vente des actions de la gamme et l'acceptation des offres en fonction de la gamme. S'il n'a pas de stock dans le tableau, il n'offrira rien, et s'il n'a aucune offre qui lui a été donnée dans le tableau, il n'acceptera rien.
Cette réponse a été inspirée par @TheNumberOne, qui a mentionné les singes fléchettes dans le chat
la source
InsideTrader, Java
InsideTrader a juste regardé autour de lui et a vu que tout le monde essayait d'être créatif. Mais il a fait quelque chose de créatif: faire ce qui est attendu.
Ce bot achète quand cela "en vaut la peine" car il a "emprunté" certains "documents internes" pour "guider" les "décisions d'investissement".
À faire et comment cela fonctionne dans le code. ;)
Le code"
la source
Error on line 50: modifier private not allowed here Error on line 54: modifier private not allowed here
. Je supprimerais simplement les cours et le ferais prolongerPlayer
WallStreet, Kotlin
Commence par vendre haut et acheter bas et passe progressivement à ce qu'il pense que le prix est vraiment. Vous pouvez également l'utiliser comme modèle pour créer le vôtre dans kotlin.
Remarque: il y a un bogue ici que je n'arrive pas à reproduire de manière fiable. Si mon programme tombe en panne ou rencontre des problèmes, veuillez me cingler dans le chat et lier une boîte à pâte du contenu
submissions/other/WallStreet/log.txt
la source
command.txt
n'a pas besoin du nom de fichier. Belle publication!$
ne fonctionne qu'avec un nom de variable.${}
exécute du code arbitraire. Fondamentalement, cela fonctionne de toute façon et je préfère sans les accolades.command.txt
:kotlinc
->kotlinc.bat
etkotlin
->kotlin.bat
UncleScrooge, Java
Vendez des actions à un prix vraiment élevé et n'achetez que si le prix est inférieur à 100.
la source
Profiteer, Java
Le profiteur est là pour l'argent, et il compte toujours les pièces. Il fait une estimation prudente de combien d'argent il a. Il achètera alors le stock secret, s'il est inférieur à la valeur, ou achètera du stock bon marché. Il se souvient également du montant qu'il a payé pour tout et fait toujours des offres supérieures au cours de l'action. De plus, il fera des offres plus élevées s'il a moins d'argent.
Remarque: Je pense que je l'ai fait correctement, mais si @NathanMerrill ne me dérange pas d'écraser mon code pour les bogues, ce serait bien
la source
MaxBot, Java
Ce bot essaie de tirer le meilleur parti de chaque transaction. Lors de la vente, met le prix d'un stock inconnu à 300 $, lors de l'achat de 250 $.
la source
BlackMarket, Java
Pas grand chose à dire à propos de celui-ci, vu que ces transactions seront ... hors des graphiques, pourriez-vous dire.
la source
NotQuiteABanksBestFriend, Python 3
Command.txt:
Essaie toujours de vendre des actions cachées pour plus que ce qu'il vaut.
la source