Liar's Dice es un juego de dados bastante simple. He visto algunas variaciones diferentes de las reglas, pero aquí está la versión con la que estoy más familiarizado:
- Cada jugador comienza con 5d6
- Excepto al contar los dados al final de una ronda, cada jugador puede ver sus propios dados, pero no los de ningún oponente.
- Al comienzo de cualquier ronda, todos los jugadores tiran cualquier dado que tengan actualmente
- Luego, un jugador (generalmente, este es el ganador de la ronda anterior O el jugador a la izquierda del jugador que comenzó la última vez; usaremos el primero para este KotH; con un jugador aleatorio que comienza la primera ronda) adivina cuántos de un número en particular hay en la mesa (UNOS SON SALVAJES)
- Las pujas continúan hacia la derecha, subiendo cada vez (por ejemplo; 3 cinco, 3 seises y 4 dos son más altos que 3 cuatros, pero 3 no lo es; 4 también es más alto, pero pujar por uno probablemente lo pondrá en un desventaja); hasta que cualquier jugador llame mentiroso al jugador que le precede
- En este punto, todos los jugadores revelan sus dados y cuentan el número del último número ofertado en la mesa por completo
- Si el total es menor que la oferta, el jugador que hizo la oferta debe dar un dado al jugador que los llamó mentiroso; de lo contrario, el jugador que llamó al postor mentiroso debe darle un dado al postor (para que el postor gane si hay al menos tantos de ese número como había ofertado, no tiene que haber el número exacto)
- Cuando te quedas sin dados, pierdes
- El último jugador en pie gana
Por ejemplo:
El jugador uno tiene 1,1,2,4,6 El jugador dos tiene 1,2,2,3,5 El jugador tres tiene 1,3,3,4,6 Jugador uno: tres seises. Jugador dos: cuatro dos. Jugador tres: cuatro tres. Jugador uno: cinco dos. Jugador dos: seis dos. Jugador tres: seis tres. Jugador uno: seis cuatro. Jugador dos: ¡Mentiroso! Revelan sus dados y cuentan los que están (porque son salvajes) y los cuatro. Resulta que hay, de hecho, exactamente seis cuatros. Entonces el jugador dos le da al jugador uno un dado. Se vuelven a tirar y el jugador uno comienza la siguiente ronda.
Debes escribir un bot para jugar este juego. Debe implementar la siguiente clase abstracta de Java:
public abstract class Player {
public Player() {}
public String toString() {
return this.getClass().getSimpleName();
}
public abstract String bid(int yourId, int[] diceEachPlayerHas, int[] yourDice, String[] bids);
}
- Debe implementar el método de oferta
- El primer argumento es la posición actual de su bot en el orden de turno, el segundo es una matriz que muestra cuántos dados tiene actualmente cada jugador (incluido usted), el tercero es una matriz que muestra los valores que se muestran actualmente en sus propios dados, y el cuarto es un conjunto de todas las ofertas realizadas desde el inicio de la ronda actual: tendrá una longitud de 0 si realiza la primera oferta de la ronda
- El resultado debe ser una cadena de la forma "cara de número" o la cadena "¡Mentiroso!" llamar mentiroso al postor anterior.
- Si su salida está formateada ilegalmente, será eliminado.
- Puede anular el método toString, pero no es obligatorio. Sin embargo, no puede editarlo de ninguna manera que interfiera con la legibilidad de la salida del controlador.
- Se le permite llamar a cualquier otro método público del controlador, pero no a su método principal.
- Puede leer y editar solo archivos en el directorio en ejecución con el prefijo del nombre de su bot
- No tiene permiso para recibir información de ninguna otra fuente
- Las variables de instancia se restablecen al comienzo de cada nuevo juego, pero no las variables estáticas.
Tanteo
- Se simulará un conjunto de 1,000 juegos, con 3-5 jugadores en cada uno, cada vez que se agregue un bot (tan pronto como se hayan enviado tres o más bots), puntuado como se muestra en la fuente del controlador (en cualquier juego dado, usted obtenga 1 al comienzo de cada uno de sus turnos, 10 cada vez que capture un dado y 1,000 de bonificación si gana); aplicando un límite de 5,000 VUELTAS (no rondas) cada juego.
- Su bot será calificado por su puntaje del último conjunto de juegos; más diez veces su puntaje de voto, si no es negativo. (Es poco probable que este último tenga un efecto significativo en la puntuación)
La fuente del controlador se puede encontrar aquí.
Puntajes a partir del 2015-06-19:
Badnomial: 434,924 + 6x10 = 424,984
Nobody: 282,329 + 6x10 = 282,389
StraightShooter: 265,205 + 5x10 = 265,255
MostlyHonestAbe: 158,958 + 4x10 = 158,998
The Pirate: 157,005 + 1x10 = 157,015
Statistician: 144,012 + 2x10 = 144,032
Fidelio: 49,973 + 2x10 = 49,993
Absurd Bot: 6,831
DrHouse: 2,638 + 3x10 = 2,668
popularity-contest
king-of-the-hill
java
SuperJedi224
fuente
fuente
diceEachPlayerHas[yourId]
= su cuenta de dados, ybids[yourId]
es su primera apuesta (o nula si es su primer turno). ¿Es eso correcto?Respuestas:
Nadie
Intenta adivinar los dados de otros jugadores. Llama a otros mentirosos de bots si no sabe qué hacer.
Editar: se corrigió un problema en el que Nadie pujaba para siempre, nunca llamaba a Mentiroso.
fuente
Badnomial, el bot que toma malas decisiones en función de las distribuciones binomiales: Editar: Se corrigió un error estúpido en los cálculos de probabilidad, ahora representa el siguiente postor, así como el anterior.
Intenta determinar si debe farolear o llamar a Mentiroso basándose en las distribuciones binomiales acumuladas estimadas para sí mismo y las posibilidades de los postores anteriores y siguientes de tener presentes sus dados necesarios.
Básicamente, llama a Mentiroso si el Postor anterior es muy probable que sea un Mentiroso o si siente que tanto él como el próximo Postor mienten más que no.
fuente
Tirador recto
Lo juega derecho y no farolea. También es lo suficientemente ingenuo como para pensar que los demás también lo hacen, por lo que nunca llama mentiroso a menos que la apuesta supere el número total de dados en juego (menos sus propios dados que no coinciden con la oferta).
Para ser un poco más conservador que el número exacto esperado para cada dado, no cuenta sus propios comodines, pero supone que otros tienen una distribución uniforme. Con los cuatro jugadores actuales, él o el MostHonestAbe aparecieron primero cada vez, con puntajes bastante cercanos.
Supongo que la oferta mínima es
2 2
. Si se permite una oferta de un dado (u ofertas), avíseme para que pueda hacer ese cambio.fuente
Mayormente honesto
Abe hace suposiciones conservadoras sobre la muerte del resto de los oponentes, y luego se mantiene honesto hasta que no cree que haya suficientes dados para vencer la oferta actual. En este punto, farolea una vez y luego llama mentiroso la próxima vez.
fuente
Dr. House
¡Todos mienten!
fuente
Fidelio
Este bot sabe que solo su valor más recurrente lo llevará a la victoria, por lo que se queda con él. Asume que hay una porción de los dados de todos que es igual a la suya, si alguien oferta más que esa porción, asume que es un mentiroso.
Espero que haga un buen trabajo :).
fuente
Estadístico
Tienes 1/3 de probabilidad de tener cualquier número que no sea ases. Un tipo me dijo una vez que no revisar tus dados y solo saber las probabilidades puede hacerte ganar este juego. EDITAR: estaba haciendo una oferta demasiado alta. Pero no mejora mucho la puntuación.
fuente
Bot absurdo
Afirma que todos los dados son 6's a menos que no pueda. Si el bot no puede hacer eso, significa que esta es una situación imposible o casi imposible. Debido a esto, llama mentiroso. Tengo curiosidad por saber cuán efectivo será este bot.
fuente
El pirata
Hice algunos bots simples mientras probaba el controlador, y este es el único que realmente es bueno.
Probablemente se mejorará más adelante.
fuente