El mercado de valores tiene que ver con la velocidad del conocimiento. A diferencia de los desafíos anteriores, el precio actual de las acciones no es aleatorio: lo determinan quienes juegan el juego. Si puede identificar una acción de bajo precio antes que nadie, entonces ha escrito un programa para hacer dinero.
El precio se refiere a la cantidad de personas que negocian la acción, mientras que el valor se refiere a la cantidad que vale la acción al final del juego.
Cada jugador comienza con 1000 de cada acción y 0 patrimonio neto relativo. Cada acción tiene un valor secreto, y su puntaje al final del juego es(stockValue for each ownedStock) + netWorth
. Su patrimonio neto puede ser negativo. En un juego de N jugadores, hay N acciones.
Pasos:
El juego sigue los siguientes pasos:
- Se le da el valor secreto de una sola acción.
- Usted hace una oferta para vender acciones X de Y por $ Z
- Todos los jugadores reciben las ofertas, y cada uno puede elegir uno para aceptar
- Todos los jugadores están informados de las ofertas aceptadas.
- Regrese al paso 2
Cada uno de los pasos se detalla a continuación:
void secretValue(int stockType, int value)
:- El valor que aprendes no se revela a ningún otro jugador.
- El valor es entre
0
y1000
- Es más probable que ocurran valores bajos que valores altos (distribución uniforme al cuadrado)
Offer makeOffer(List<Stock> currentStock)
- Puede regresar
null
para no hacer ninguna oferta.
- Puede regresar
Offer acceptOffer(List<Offer> offers)
- Puedes volver
null
a aceptar ninguno de ellos - Si no hay ofertas disponibles, esto no se llamará
- Si acepta, su patrimonio neto se reduce en $ Z (puede ser negativo) y recibe X de Y stock. Lo contrario ocurre con el vendedor.
- Si acepta una oferta, el intercambio se realizará de inmediato, y la oferta se eliminará para que jugadores adicionales no puedan aceptarla.
- Puedes volver
void acceptedOffers(List<Offer> offers)
- Incluye sus ofertas aceptadas también
No se permiten variables estáticas o escribir en archivos. (No hay datos persistentes de un juego a otro) Se permiten contendientes no serios.
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();
}
Envíos no Java:
- Todas las llamadas se componen de dos líneas: La primera línea es la función de ser llamado:
SecretValue
,MakeOffer
,AcceptOffer
,AcceptedOffers
,SetRandom
, y la segunda línea que contiene los datos reales. - Las acciones están formateados con un
:
delimitador:stockType:stockAmount
. - Las ofertas están formateadas con un
@
delimitador:offer@price
- Las listas están formateadas con un
;
delimitador SecretValue
está formateado con un:
delimitador:stockType:value
RandomSeed
se utiliza para hacer su presentación determinista. Si su envío usa aleatoriedad, ¡use el valor entero pasado como semilla!- Todas las llamadas a funciones necesitan una respuesta. Si la respuesta es
null
ovoid
, devuelve una cadena vacía. - Incluya uno
command.txt
que proporcione los argumentos de la línea de comando para ejecutar su envío
Tanteo
Los juegos que consisten en 1000 turnos se ejecutarán varias veces. Los jugadores serán puntuados de acuerdo con el sistema ELO y emparejados con jugadores de niveles de habilidad similares. ¡El jugador con el puntaje final más alto de ELO gana! (He modificado el sistema para que cada juego, los puntajes ELO se actualicen para cada pareja de jugadores)
El controlador incluye un AutoDownloader, por lo que tiene que iniciar su presentación con un encabezado: Name, Language
. Si su envío no está en Java, cada bloque de código debe comenzar con el nombre del archivo. (excluyendo el archivo de comando, que debería ser el primer bloque en su publicación)
Corriendo
Hay 2 formas de ejecutar este proyecto:
Descargue el código fuente, compílelo y ejecútelo. Puedes encontrar la fuente en Github . correr
git clone --recursive https://github.com/nathanmerrill/StockExchange.git
Descargue el ejecutable JAR. Las presentaciones deben colocarse en su directorio de trabajo actual en la
/submissions
carpeta. Puede descargar solo el JAR , solo los envíos , o ambos
Pase run
para ejecutar el proyecto (opción predeterminada), o pase download
para descargar todos los envíos hasta ahora de esta pregunta.
Marcador
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
fuente
Respuestas:
Tramposo, Java
Intenta no vender nada por dinero.
fuente
WarGamer, Java
Tras un examen superficial de las reglas, he decidido que el movimiento ganador principal no es jugar. Cualquiera que ofrezca vender acciones probablemente conozca el precio y se beneficiará de la venta. Se puede alternar para que haga ofertas de "broma" para vender una acción por Integer. MAX_VALUE dólares con la esperanza de callarse y tomar mi dinero morderán.
fuente
ShutUpAndTakeMyMoney, Java
Acepta cualquier oferta.
fuente
DumbBot, Java
Use este bot cuando cree el suyo propio. Ofrece sus acciones secretas a un precio con descuento.
fuente
python_starter, Python 3
Use esto como punto de partida para cualquier programa de Python (u otro lenguaje)
Acepta una oferta aleatoria.
Archivo de comandos:
Programa:
fuente
VincentKasuga, Java
No estoy seguro si mi Java es válido. Por favor revise.
Cómo funciona
- si posee todas las acciones, puede establecer el precio de las acciones. Eres el único vendedor. 1. Compre todas las acciones. 2. Establezca el precio de todas las acciones para que sea súper alto en el último tic. 3. BENEFICIOS! - Esto normalmente no es posible porque ...Cómo funciona, v2
El bot no predice: ¡explota una falla inherente en la estructura del mercado!Que hacer
Preguntas más frecuentes
P: ¿Quién es Vincent Kasuga?
R: Compró todas las cebollas y futuros de cebolla en los Estados Unidos. (ponlos a todos en un almacén secreto) Manteniendo la industria en rescate - dame X millones o fijaré el precio muy bajo y todos irán a la bancarrota.
Pero no se detuvo allí.
Luego, cortó en secreto el ETF de cebolla (apuesto a que bajaría). Vendió todas las cebollas al mismo tiempo, entregándolas físicamente en miles de camiones a la bolsa de valores. La bolsa de cebolla cuesta menos que las cebollas. Hizo millones OTRA VEZ. En resumen, el río Hudson se desbordó con cebollas.
El es una persona real.
El código
"¡He arrinconado el Mercado del Oro, Sr. Bond!"
fuente
for (offer: offers)
->for (Offer offer: offers)
corneredStockType == null
Tampoco es válido. unint
no puede sernull
.Spammer, Java
Envíe spam al mercado con acciones realmente baratas, y solo compre acciones cuando el precio sea inferior a 20. Cuando el recuento de acciones caiga a 1, intentará comprar cualquier cosa.
fuente
DartMonkey, Java
(no compite: no ganará y ya tengo otra respuesta)
Al mono dardo le gusta tirar cosas ... y hay una gran pila de palos puntiagudos a su lado. Él ve algo de papel en la pared. Bam! Bam! Bam! En muy poco tiempo, ¡Dart Monkey lanzó 80 dardos! ¡La mitad de los dardos son rojos, y la otra mitad son azules, y hay números aleatorios en ellos! Dart monkey ve una computadora ... dart monkey escribe los números. Al mono dardo le gustan los números. Dart monkey gana dinero con sus dardos ...
Con toda seriedad, DartMonkey inicializa una matriz de enteros que tiene una longitud que es el doble del número de existencias. Almacena un número por la cantidad de acciones que desea comprar / vender, y un número por el precio de las acciones. Luego alterna la venta de acciones de la matriz y la aceptación de ofertas de acuerdo con la matriz. Si no tiene stock de la matriz, no ofrecerá nada, y si no tiene ofertas de la matriz, no aceptará nada.
Esta respuesta fue inspirada por @TheNumberOne, quien mencionó a los monos dardos en el chat
fuente
InsideTrader, Java
InsideTrader solo miró a su alrededor y vio que todos intentaban ser creativos. Pero hizo algo creativo: hacer lo que se espera.
Este bot compra cuando "vale la pena" porque "tomó prestados" algunos "documentos internos" para "guiar" las "decisiones de inversión".
Tareas pendientes y cómo funciona en el código. ;)
El código"
fuente
Error on line 50: modifier private not allowed here Error on line 54: modifier private not allowed here
. Simplemente eliminaría las clases y haría que se extendieraPlayer
WallStreet, Kotlin
Comienza vendiendo alto y comprando bajo y gradualmente cambia a lo que realmente cree que es el precio. Además, puede usar esto como una plantilla para hacer el suyo en kotlin.
Nota: Hay un error aquí que parece que no puedo reproducir de manera confiable. Si mi programa falla o tiene problemas, por favor envíeme un mensaje de correo electrónico en el chat y vincule un paquete de los contenidos de
submissions/other/WallStreet/log.txt
fuente
command.txt
No necesita el nombre del archivo. ¡Buen post!$
solo funciona con un nombre de variable.${}
ejecuta código arbitrario Básicamente, funciona de cualquier manera y prefiero sin las llaves.command.txt
:kotlinc
->kotlinc.bat
ykotlin
->kotlin.bat
UncleScrooge, Java
Venda acciones a un precio realmente alto y solo compre si el precio es inferior a 100.
fuente
Profiteer, Java
El especulador está en esto por el dinero, y siempre cuenta monedas. Él hace una estimación conservadora de cuánto dinero tiene. Luego comprará las acciones secretas, si es inferior al valor, o comprará acciones baratas. También recuerda cuánto ha pagado por todo, y siempre hace ofertas por encima del precio de las acciones. Además, hará ofertas más altas si tiene menos dinero.
Nota: Creo que he hecho esto correctamente, pero si a @NathanMerrill no le importaría revisar mi código en busca de errores, sería genial
fuente
MaxBot, Java
Este bot intenta sacar el máximo provecho de cada transacción. Al vender, pone el precio de una acción desconocida en $ 300, al comprar $ 250.
fuente
BlackMarket, Java
No hay mucho que decir sobre este, ya que estas transacciones estarán ... fuera de los gráficos, se podría decir.
fuente
NotQuiteABanksBestFriend, Python 3
Command.txt:
Siempre trata de vender acciones ocultas por más de lo que vale.
fuente