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