Il mercato azionario è tutto sulla velocità della conoscenza. A differenza delle precedenti sfide, l'attuale prezzo delle azioni non è casuale: è determinato da coloro che giocano. Se riesci a identificare uno stock sotto prezzo prima di chiunque altro, allora ti sei scritto un programma per fare soldi.
Il prezzo si riferisce al numero di persone che stanno negoziando le azioni, mentre Valore si riferisce all'importo che le azioni valgono alla fine del gioco.
Ogni giocatore inizia con 1000 di ogni azione e 0 patrimonio netto relativo. Ogni azione ha un valore segreto e il tuo punteggio alla fine del gioco è(stockValue for each ownedStock) + netWorth
. Il tuo patrimonio netto può essere negativo. In una partita N-player, ci sono N azioni.
passi:
Il gioco segue i seguenti passi:
- Ti viene dato il valore segreto di un singolo titolo.
- Fai un'offerta per vendere azioni X di Y per $ Z
- Tutti i giocatori ricevono le offerte e ognuna può sceglierne una da accettare
- Tutti i giocatori sono informati delle offerte accettate
- Torna al passaggio 2
Ciascuno dei passaggi è riportato in dettaglio di seguito:
void secretValue(int stockType, int value)
:- Il valore che impari non viene rivelato a nessun altro giocatore.
- Il valore è compreso tra
0
e1000
- I valori bassi sono più simili a quelli alti (distribuzione uniforme quadrata)
Offer makeOffer(List<Stock> currentStock)
- Puoi tornare
null
per non fare alcuna offerta.
- Puoi tornare
Offer acceptOffer(List<Offer> offers)
- Puoi tornare
null
ad accettarne nessuno - Se non ci sono offerte disponibili, questo non verrà chiamato
- Se accetti, il tuo patrimonio netto diminuisce di $ Z (può diventare negativo) e ricevere X di azioni Y. Il contrario si verifica con il venditore.
- Se accetti un'offerta, lo scambio avverrà immediatamente e l'offerta verrà rimossa in modo che altri giocatori non possano accettarla.
- Puoi tornare
void acceptedOffers(List<Offer> offers)
- Include anche le offerte accettate
Variabili statiche o scrittura su file non sono consentite. (Nessun dato persistente da un gioco all'altro) Sono consentiti contendenti non gravi.
interfacce:
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();
}
Contributi non Java:
- Tutte le chiamate sono costituiti da due linee: La prima riga è la funzione chiamata:
SecretValue
,MakeOffer
,AcceptOffer
,AcceptedOffers
,SetRandom
, e la seconda riga contenente i dati effettivi. - Le scorte sono formattati con un
:
delimitatore:stockType:stockAmount
. - Le offerte sono formattate con un
@
delimitatore:offer@price
- Gli elenchi sono formattati con un
;
delimitatore SecretValue
è formattato con un:
delimitatore:stockType:value
RandomSeed
è usato per rendere deterministica la tua presentazione. Se il tuo invio utilizza la casualità, utilizza il valore intero passato come seme!- Tutte le chiamate di funzione richiedono una risposta. Se la risposta è
null
ovoid
, restituisce una stringa vuota. - Includere un
command.txt
che fornisce gli argomenti della riga di comando per eseguire l'invio
punteggio
Le partite composte da 1000 turni verranno eseguite più volte. I giocatori verranno segnati secondo il sistema ELO e abbinati a giocatori con livelli di abilità simili. Vince il giocatore con il punteggio ELO finale più alto! (Ho modificato il sistema in modo che ad ogni partita, i punteggi ELO vengano aggiornati per ogni accoppiamento del giocatore)
Il controller include un AutoDownloader, quindi si prega di iniziare la vostra presentazione con un colpo di testa: Name, Language
. Se l'invio non è in Java, ogni blocco di codice dovrebbe iniziare con il nome del file. (escluso il file di comando, che dovrebbe essere il primo blocco nel tuo post)
In esecuzione
Esistono 2 modi per eseguire questo progetto:
Scarica il codice sorgente, compila ed esegui. Puoi trovare la fonte su Github . Correre
git clone --recursive https://github.com/nathanmerrill/StockExchange.git
Scarica l'eseguibile JAR. Gli invii devono essere inseriti nella directory di lavoro corrente nella
/submissions
cartella. Puoi scaricare solo il JAR , solo gli invii o entrambi
Passa run
per eseguire il progetto (opzione predefinita) o passa download
per scaricare tutti gli invii così lontani da questa domanda.
tabellone segnapunti
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