Esto se basa en este desafío y en la idea de Geobits / CarpetPython de mejorarlo:
Para este desafío, la distancia entre dos números se mide en un ciclo, por lo que, por ejemplo, la distancia entre 0 y 999 es 1. Esto debería evitar que estrategias como elegir siempre el número más bajo o más alto ganen casi todas las veces. El único otro cambio es que el número más bajo que se puede elegir ahora es 0 en lugar de 1.
Lo resumiré aquí:
- Escriba una función en Java, Python o Ruby que tome tres argumentos:
- la cantidad de rondas jugadas hasta ahora
- la cantidad de jugadores
- los números seleccionados en las rondas anteriores, como una serie de cadenas separadas por espacios
- Debería devolver un número entero de 0 a 999, inclusive
- El puntaje de un programa en cada ronda es la suma de las raíces cuadradas de las distancias a los números que el otro programa eligió.
- El programa con la puntuación más alta después de 100 rondas gana.
- Una respuesta por persona.
El programa de control está aquí:
https://github.com/KSFTmh/src/
Tabla de clasificación
NumberOne, de TheBestOne, está ganando.
- NumberOne - 9700
- NumberOnePlusFourNineNine - 9623
- AncientHistorian - 9425
- FindCampers - 9259
- WowThisGameIsSoDeep - 9069
- Muestra - 9014
- SabotageCampers - 8545
Al parecer, mi sabotaje camper ... er (?) No funciona muy bien.
Aquí están los resultados completos: https://github.com/KSFTmh/src/blob/master/results-3
Creo que esto es lo suficientemente diferente como para no ser un duplicado.
Por cierto, esta es la primera vez que hago una pregunta en Stack Exchange, así que avíseme si estoy haciendo algo mal.
fuente
Respuestas:
Python 2, Sampler
Esta entrada se basa en el mismo código para mantener su distancia, entrada de muestra . Espero que sea mejor aquí donde las ventajas 1 y 999 no existen.
De una lista de lugares, elija el que esté más alejado de los números usados recientemente, ignorando el turno anterior (porque otras entradas pueden predecir en función del turno anterior).
fuente
Number OnePlusFourNineNine, Java
La lógica es realmente simple. A menos que alguien encuentre un algoritmo real que tenga en cuenta los puntajes anteriores, esta respuesta está bastante optimizada.
Ahora que contamos la distancia en un círculo, la distancia máxima de dos puntos puede ser 500. Ahora, si todas las entradas generaran números aleatorios (o pseudoaleatorios basados en algún algoritmo), esta respuesta no habría tenido ninguna ventaja . Pero hay al menos 1 entrada que produce una respuesta constante que es una distancia casi máxima. Esto hace que el puntaje sea a favor de 500 ya que hay una fuente fija de distancia máxima posible en cada ronda :)
fuente
AncientHistorian - Python
Es el mismo algoritmo del anterior, excepto que al calcular los puntajes potenciales utiliza la distancia circular. Como estoy perdiendo horriblemente y no puedo hacer que el controlador se compile, solo estoy probando una nueva estrategia, donde uso lo peor de las rondas anteriores.
fuente
i
es un elemento descores.split(' ')
, lo que significa que es una cadena, no un int.SabotageCampers - Python
Los campistas siguen ganando. Avíseme si tiene alguna sugerencia para esto.
fuente
FindCampers - Python 2
Encuentra a todos los campistas de las últimas 10 rondas y mantente alejado de ellos. Espero que los predictores huyan de mí. Ahora ignoraré mis viejas elecciones.
fuente
Número uno, Java
La primera respuesta Copiado de mi respuesta anterior .
fuente
WowThisGameIsSoDeep, Java
He analizado el juego durante 10 años en un clúster de 1 millón de núcleos y encontré la solución óptima.
fuente
Random.nextInt(int)
.Extrapolador Circilineal, Rubí
fuente
NoMethodError: undefined method `split' for #<Array:0x720f56e2> choose at CircilinearExtrapolator.rb:2
previous_choices
un conjunto de valores como["1 6 500","2 8 503"]
?