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
fonte
Respostas:
Trapaceiro, Java
Tenta vender nada por dinheiro.
fonte
WarGamer, Java
Após um exame superficial das regras, decidi que a principal jogada vencedora é não jogar. Qualquer pessoa que ofereça venda de ações provavelmente conhece o preço e lucra com a venda. Ele pode ser alternado para oferecer ofertas de "piada" para vender uma ação por inteiro.MAX_VALUE dólares esperando calar a boca e levar meu dinheiro vai morder.
fonte
ShutUpAndTakeMyMoney, Java
Aceita qualquer oferta.
fonte
DumbBot, Java
Use este bot ao criar o seu próprio. Oferece seu estoque secreto a um preço com desconto.
fonte
python_starter, Python 3
Use isso como ponto de partida para qualquer programa python (ou outra linguagem)
Aceita uma oferta aleatória.
Arquivo de comando:
Programa:
fonte
VincentKasuga, Java
Não tenho certeza se meu Java é válido. Por favor revise.
Como funciona
- se você possui todas as ações, pode definir o preço das ações. Você é o único vendedor. 1. Compre todas as ações. 2. Defina o preço de todas as ações como super alto no último tick. 3. LUCRO! - Isso normalmente não é possível porque ...Como funciona, v2
O bot não prevê - ele explora uma falha inerente na estrutura do mercado!Façam
Perguntas frequentes
P: Quem é Vincent Kasuga?
A: Ele comprou todas as cebolas e futuros de cebola nos Estados Unidos. (coloque todos eles em um armazém secreto) Mantive a indústria em resgate - me dê X milhões ou vou definir o preço muito baixo e todos vocês vão à falência.
Mas ele não parou por aí.
Então, ele secretamente encurtou o ETF de cebola (apostou que ele iria cair). Ele vendeu todas as cebolas ao mesmo tempo, entregando-as fisicamente em milhares de caminhões à bolsa de valores. O saco de cebola custa menos que as cebolas. Ele fez milhões novamente. Em suma, o rio Hudson transbordou de cebola.
Ele é uma pessoa real.
O código
"Eu encurralei o mercado de ouro, Sr. Bond!"
fonte
for (offer: offers)
->for (Offer offer: offers)
corneredStockType == null
também não é válido. umint
não pode sernull
.Spammer, Java
Spam no mercado com ações realmente baratas e só compre ações quando o preço for menor que 20. Quando a contagem de ações cair para 1, ele tentará comprar qualquer coisa.
fonte
DartMonkey, Java
(não concorrente: não vai ganhar e eu já tenho outra resposta)
O macaco dardo gosta de jogar coisas ... e há uma grande pilha de paus pontudos ao lado dele. Ele vê papel na parede. Bam! Bam! Bam! Em pouco tempo, o Dart Monkey lançou 80 dardos! Metade dos dardos são vermelhos, e a outra metade é azul, e há números aleatórios neles! Macaco dardo vê um computador ... digita macaco nos números. Macaco dardo gosta de números. Macaco dardo ganha dinheiro com seus dardos ...
Com toda a seriedade, o DartMonkey inicializa uma matriz inteira com um comprimento que é o dobro do número de ações. Ele armazena um número para a quantidade de ações que deseja comprar / vender e um número para o preço das ações. Ele então alterna a venda de ações da matriz e a aceitação de ofertas de acordo com a matriz. Se ele não possui ações da matriz, ele não oferece nada e, se não tiver ofertas oferecidas a ele, não aceita nada.
Esta resposta foi inspirada em @TheNumberOne, que mencionou macacos dardo no chat
fonte
InsideTrader, Java
O InsideTrader apenas olhou em volta e viu que todo mundo estava tentando ser criativo. Mas ele fez algo criativo: faça o que é esperado.
Esse bot compra quando "vale a pena", porque "emprestou" alguns "documentos internos" para "guiar" as "decisões de investimento".
Tarefas pendentes e como ele funciona no código. ;)
O código"
fonte
Error on line 50: modifier private not allowed here Error on line 54: modifier private not allowed here
. Gostaria apenas de remover as classes e estendê-las #Player
WallStreet, Kotlin
Começa vendendo alto e comprando baixo, e muda gradualmente para o que acha que realmente é o preço. Além disso, você pode usar isso como um modelo para criar o seu próprio no kotlin.
Nota: Há um erro aqui que não consigo reproduzir de maneira confiável. Se meu programa falhar ou tiver problemas, faça ping no bate - papo e vincule uma pasta do conteúdo de
submissions/other/WallStreet/log.txt
fonte
command.txt
não precisa do nome do arquivo. Bela postagem!$
funciona apenas com um nome de variável.${}
executa código arbitrário. Basicamente, funciona de qualquer maneira e eu prefiro sem o aparelho.command.txt
:kotlinc
->kotlinc.bat
ekotlin
->kotlin.bat
UncleScrooge, Java
Venda ações a um preço muito alto e compre apenas se o preço for inferior a 100.
fonte
Profiteer, Java
O lucro está nele pelo dinheiro, e ele está sempre contando moedas. Ele faz uma estimativa conservadora de quanto dinheiro ele tem. Ele então compra as ações secretas, se for menor que o valor, ou compra ações baratas. Ele também se lembra de quanto pagou por tudo e sempre faz ofertas acima do preço das ações. Além disso, ele fará ofertas mais altas se tiver menos dinheiro.
Nota: Acho que fiz isso corretamente, mas se o @NathanMerrill não se importasse em procurar no meu código por bugs, seria ótimo
fonte
MaxBot, Java
Este bot tenta obter o máximo lucro de cada transação. Ao vender, coloca o preço de uma ação desconhecida em US $ 300, ao comprar US $ 250.
fonte
BlackMarket, Java
Não há muito a dizer sobre este, visto que essas transações serão ... fora dos gráficos, você pode dizer.
fonte
NotQuiteABanksBestFriend, Python 3
Command.txt:
Sempre tenta vender ações ocultas por mais do que vale a pena.
fonte