O mercado de ações tem tudo a ver com a velocidade do conhecimento. Ao contrário dos desafios anteriores, o preço atual das ações não é aleatório: é determinado por quem está jogando o jogo. Se você conseguir identificar uma ação com preço abaixo do preço antes de qualquer outra pessoa, então você mesmo escreveu um programa para ganhar dinheiro.
Preço refere-se a quanto as pessoas estão negociando as ações, enquanto Valor refere-se à quantia que as ações valem no final do jogo.
Cada jogador começa com 1000 de cada ação e 0 patrimônio líquido relativo. Cada ação tem um valor secreto, e sua pontuação no final do jogo é(stockValue for each ownedStock) + netWorth
. Seu patrimônio líquido pode ser negativo. Em um jogo com N jogadores, existem N ações.
Passos:
O jogo segue os seguintes passos:
- Você recebe o valor secreto de uma única ação.
- Você faz uma oferta para vender ações X de Y por $ Z
- Todos os jogadores recebem as ofertas e cada um pode escolher um para aceitar
- Todos os jogadores são informados das ofertas aceitas
- Volte ao passo 2
Cada uma das etapas é fornecida em detalhes abaixo:
void secretValue(int stockType, int value)
:- O valor que você aprende não é revelado a nenhum outro jogador.
- O valor está entre
0
e1000
- Valores baixos são mais parecidos com os valores altos (distribuição uniforme ao quadrado)
Offer makeOffer(List<Stock> currentStock)
- Você pode retornar
null
para não fazer nenhuma oferta.
- Você pode retornar
Offer acceptOffer(List<Offer> offers)
- Você pode voltar
null
a aceitar nenhum deles - Se não houver ofertas disponíveis, isso não será chamado
- Se você aceitar, seu patrimônio líquido será reduzido em $ Z (pode ficar negativo) e receberá X de ações em Y. O oposto ocorre com o vendedor.
- Se você aceitar uma oferta, a troca ocorrerá imediatamente e a oferta será removida para que outros jogadores não possam aceitá-la.
- Você pode voltar
void acceptedOffers(List<Offer> offers)
- Inclui suas ofertas aceitas também
Variáveis estáticas ou gravação em arquivos não são permitidas. (Nenhum dado persistente de jogo para jogo) São permitidos candidatos não sérios.
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();
}
Envios não Java:
- Todas as ligações consistem em duas linhas: A primeira linha é a função a ser chamado:
SecretValue
,MakeOffer
,AcceptOffer
,AcceptedOffers
,SetRandom
, e a segunda linha que contém os dados reais. - Os estoques são formatados com um
:
delimitador:stockType:stockAmount
. - As ofertas são formatadas com um
@
delimitador:offer@price
- As listas são formatadas com um
;
delimitador SecretValue
está formatado com um:
delimitador:stockType:value
RandomSeed
é usado para tornar sua submissão determinística. Se o seu envio usar aleatoriedade, use o valor inteiro passado como a semente!- Todas as chamadas de função precisam de uma resposta. Se a resposta for
null
ouvoid
, retorne uma sequência vazia. - Inclua um
command.txt
que forneça os argumentos da linha de comando para executar seu envio
Pontuação
Jogos com 1000 turnos serão executados várias vezes. Os jogadores serão pontuados de acordo com o sistema ELO e emparelhados com jogadores de níveis semelhantes. O jogador com a maior pontuação final no ELO vence! Modifiquei o sistema para que, a cada jogo, as pontuações no ELO sejam atualizadas para cada par de jogadores.
O controlador inclui um AutoDownloader, por isso, começar a sua apresentação com um cabeçalho: Name, Language
. Se o seu envio não estiver em Java, cada bloco de código deve começar com o nome do arquivo. (excluindo o arquivo de comando, que deve ser o primeiro bloco na sua postagem)
Corrida
Existem 2 maneiras de executar este projeto:
Baixe o código fonte, compile e execute. Você pode encontrar a fonte no Github . Corre
git clone --recursive https://github.com/nathanmerrill/StockExchange.git
Faça o download do executável JAR. Os envios devem ser colocados no seu diretório de trabalho atual na
/submissions
pasta Você pode fazer o download apenas do JAR , apenas dos envios ou de ambos
Passe run
para executar o projeto (opção padrão) ou faça o download
download de todos os envios até agora desta pergunta.
Placar
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