Resultados - 19 de julio de 2014
¡El actual Rey de la Colina es Mercenario por el usuario Fabigler ! ¡Sigue enviando entradas y sácalo de su trono!
Haga clic aquí para ver el marcador.
Se incluyeron los programas presentados el 19 de julio de 2014 o antes. Todas las demás presentaciones se incluirán en futuros ensayos. Los nuevos resultados deben publicarse alrededor del 9 de agosto, de modo que tenga mucho tiempo.
Ilustrado por Chris Rainbolt, mi hermano y un recién graduado de Savannah College of Art and Design
Introducción
Los ángeles y los demonios luchan y, como siempre, usan la tierra como campo de batalla. Los humanos están atrapados en el medio y se ven obligados a tomar partido. Una fuerza neutral desconocida recompensa a aquellos que constantemente luchan por el bando perdedor.
El juego
En cada prueba, se emparejará pseudoaleatoriamente y luego se barajará con entre 20 y 30 envíos más. Cada prueba constará de 1000 rondas. Cada ronda, se le pasará una entrada y se espera que produzca salida. Su salida será registrada y calificada. Este proceso se repetirá 1000 veces.
Entrada
Recibirá un único argumento que representa los votos pasados de cada jugador. Las rondas están delimitadas por comas. A 0
representa a un jugador que se puso del lado de Evil en esa ronda. A 1
representa a un jugador que se puso del lado del Bien. Dentro de una prueba, los jugadores siempre estarán en el mismo orden. Se incluirá su propio voto, pero no se identificará explícitamente. Por ejemplo:
101,100,100
En este ejemplo, se han completado tres rondas y tres jugadores están compitiendo. El jugador uno siempre se puso del lado del bien. El jugador dos siempre se puso del lado del Mal. El jugador tres cambió de Bueno en la ronda 1 al Mal en las rondas 2 y 3. Uno de esos jugadores fuiste tú.
Salida
Envíos de Java
- Devuelve la cadena
good
si quieres ponerte del lado de Good. - Devuelve la cadena
evil
si quieres ponerte del lado de Evil.
Envíos no Java
- Envíe la cadena
good
a stdout si desea ponerse del lado de Good. - Salida de la cadena
evil
a stdout si desea ponerse del lado de Evil.
Si su programa genera o devuelve algo más, genera una excepción, no se compila o tarda más de un segundo en generar algo en esta máquina exacta , entonces será descalificado.
Puntuación
Los puntajes se publicarán en una hoja de cálculo de documentos de Google para una fácil visualización tan pronto como pueda compilar todas las entradas actuales. No se preocupe, ¡seguiré ejecutando pruebas durante el tiempo que ustedes sigan enviando programas!
- Recibe 3 puntos por ponerse del lado de la mayoría durante una ronda.
- Usted recibe n - 1 puntos por ponerse del lado de la minoría durante una ronda, donde n es el número de veces consecutivas que se puso del lado de la minoría.
Su puntaje será la mediana de 5 ensayos. Cada prueba consta de 1000 rondas.
Entregables
Envíos no Java
Debe enviar un título único, un programa y una cadena de línea de comandos de Windows que ejecutará su programa. Recuerde que se puede agregar un argumento a esa cadena. Por ejemplo:
python Angel.py
- Tenga en cuenta que este no tiene argumentos. Esta es la primera ronda! Prepárate para esto.
python Angel.py 11011,00101,11101,11111,00001,11001,11001
Envíos de Java
Debe enviar un título único y una clase Java que amplíe la clase humana abstracta escrita a continuación.
public abstract class Human {
public abstract String takeSides(String history) throws Exception;
}
Pruebas
Si desea probar su propia presentación, siga las instrucciones aquí .
Notas adicionales
Puede enviar tantas presentaciones diferentes como desee. Las presentaciones que parecen estar coludiendo serán descalificadas. El autor de este desafío será el único juez en ese asunto.
Se creará una nueva instancia de su programa o clase Java cada vez que se solicite. Puede conservar la información escribiendo en un archivo. No puede modificar la estructura o el comportamiento de nada, excepto su propia clase.
Los jugadores serán barajados antes de que comience la prueba. Demon y Angel participarán en cada prueba. Si el número de jugadores es par, Petyr Baelish también se unirá. Demon lucha por Evil, Angel for Good y Petyr Baelish elige un lado pseudoaleatorio.
fuente
Respuestas:
El mercenario
Siempre se alinea con el que pagó más dinero la última ronda.
Teniendo en cuenta que las buenas personas ganan estadísticamente más.
fuente
Hipster, Ruby
Simplemente va con la minoría de la última ronda, solo porque todo lo demás es convencional.
Corre como
fuente
Petyr Baelish
Nunca se sabe de qué lado está Petyr Baelish.
Esta entrada solo se incluirá si el número de jugadores es par. Esto asegura que siempre habrá una mayoría.
fuente
C ++, el metacientífico
Este hace esencialmente lo mismo que The Scientist, pero no opera en rondas en su conjunto sino en jugadores individuales. Intenta asignar una ola (o una función constante) a cada jugador por separado y predice su movimiento en la siguiente ronda. A partir de la predicción redonda resultante, The Meta Scientist elige el lado que parece tener una mayoría.
Si desea activar las declaraciones de depuración, cambie la lectura de la línea
#if 0
a#if 1
.Compile con
g++ -O3 -std=c++0x -o MetaScientist MetaScientist.cpp
(no necesita advertencias, así que no-Wall
) y ejecute conMetaScientist.exe
(posiblemente incluyendo el argumento, por supuesto). Si preguntas muy bien, puedo proporcionarte un ejecutable de Windows.EDITAR: Al parecer, la versión anterior se quedó sin tiempo alrededor de 600 rondas en el juego. Esto no debería hacer eso. Su consumo de tiempo está controlado por la
#define WINDOW (...)
línea, más es más lento pero mira más atrás.fuente
Ángel
El jugador más puro de todos.
Programa
Mando
fuente
Artemis Fowl
En el Libro 7, The Atlantis Complex , Artemis Fowl contrajo una enfermedad psicológica (llamada Atlantis complex) que lo obligó a hacer todo en múltiplos de 5 (hablar, acciones, etc.). Cuando no pudo hacerlo en un múltiplo de 5, entró en pánico. Básicamente hago eso: ver si el bien o el mal (sesgo intencional) es divisible por 5, si ninguno lo es, entonces me asusto y veo cuál fue mayor y corro con eso o me asusto aún más y elijo al azar.
fuente
break;
en tuswitch
.Disparnumerofóbico
Los números impares son aterradores.
fuente
Linus, Ruby
Busca confundir a los analistas rompiendo siempre el patrón .
Guardar como
linus.rb
y correr conruby linus.rb
fuente
El mochilero
Determina a un jugador que ha elegido la minoría correspondiente más y elige su último voto.
La multitudSeguidor
Determina a un jugador que ha elegido la mayoría coincidente y elige su último voto.
fuente
goWithMajority = true
y otra donde estáfalse
. ¿Está bien, o necesito agregar un segundo BackPacker para esto?Adivino
Esto sigue siendo un trabajo en progreso. Aún no lo he probado. Solo quería ver si el OP cree que rompe las reglas o no.
La idea es simular la siguiente ronda ejecutando a todos los demás participantes varias veces para obtener una probabilidad del resultado y actuar en consecuencia.
fuente
C ++, el científico
Éste intenta, con el historial de lo que la mayoría eligió por ronda
wave
(majority()
da la opción de la mayoría en una ronda), ajustar una onda a los datos, de longitud de onda2*period
y fasephase
. Por lo tanto, dado0,1,1,1,0,1,0,1,1,1,0,0,0,1,0
que seleccionaperiod=3, phase=5
(maxat=={3,5}
): sus puntajes se vuelven9 3 11 5 5 3 5 7 9 7 7 7 7 7 7
. Se repite en todos los períodos posibles y si, para ese período, el puntaje es más alto que el máximo actual, almacena{period,phase}
para lo que ocurrió.Luego extrapola la onda encontrada a la siguiente ronda y toma la mayoría pronosticada.
Compile con
g++ -O3 -std=c++0x -o Scientist Scientist.cpp
(no necesita advertencias, así que no-Wall
) y ejecute conScientist.exe
(posiblemente incluyendo el argumento, por supuesto). Si preguntas muy bien, puedo proporcionarte un ejecutable de Windows.Ah, y no te atrevas a jugar con el formato de entrada. Hará cosas extrañas de lo contrario.
EDITAR: Al parecer, la versión anterior se quedó sin tiempo alrededor de 600 rondas en el juego. Esto no debería hacer eso. Su consumo de tiempo está controlado por la
#define WINDOW (...)
línea, más es más lento pero mira más atrás.fuente
Code Runner
Entonces, para hacer las cosas interesantes, creé un script para descargar automáticamente el código de cada respuesta publicada, compilarlo si es necesario y luego ejecutar todas las soluciones de acuerdo con las reglas. De esta manera, las personas pueden verificar cómo les va. Simplemente guarde este script en run_all.py (requiere BeautifulSoup) y luego:
Unas pocas cosas:
def submission_type(lang)
.CPPSubmission
). El tipo de idioma se toma de la etiqueta del metacódigo< !-- language: lang-java -- >
, así que asegúrese de agregarlo si desea que se ejecute su código (Elimine los espacios adicionales antes y después de <>). ACTUALIZACIÓN : ahora hay una inferencia extremadamente básica para tratar de detectar el idioma si no está definido.blacklist.text
y se eliminará de las futuras pruebas automáticamente. Si corrige su código, simplemente elimine su entrada de la lista negra y vuelva a ejecutarlaget
,Idiomas admitidos actualmente:
Sin más preámbulos:
fuente
La mente hermosa, rubí
Toma su decisión basándose en patrones de importancia cuestionable en la representación de bits de la última ronda
Corre como
fuente
Piusticioso, Lua
Un programa supersticioso que cree en signos y maravillas.
ejecutarlo con:
seguido de la entrada.
fuente
Los winchesters
Sam y Dean son buenos (la mayoría de las veces).
fuente
9:1
es la proporción correcta? ¿Quizás deberíamos hacer un poco de minería de datos y obtener una relación más precisa?9:1
parece bien;)Estadístico
fuente
Math.ceil(Math.random()-Math.random())
usted también puede hacer soloMath.round(Math.random())
.R, un bot algo bayesiano
Use la tabla de frecuencias para cada usuario como la probabilidad previa de la salida de otros usuarios.
Se invoca usando
Rscript BayesianBot.R
seguido de la entrada.Editar : solo para aclarar lo que está haciendo, aquí hay un paso a paso con la entrada de ejemplo:
Luego, la línea que comienza por
result<-
, para cada jugador, elige aleatoriamente 0 o 1 usando esta última tabla como pesos (es decir, para el jugador 1, la probabilidad de elegir 0 es 2/7, de elegir 1 5/7, etc.). Elige un resultado para cada jugador / columna y finalmente devuelve el número que terminó siendo el más común.fuente
suizo
Siempre mantiene la neutralidad. Condenado a nunca ganar.
fuente
HAL 9000
Editar: tal vez esto sea más adecuado para HAL 9000, ¡pero tenga cuidado! Es muy malvado Recomiendo
cd
vaciar el directorio antes de ejecutarlo.Invocación no tan obvia:
En M $
En * nix
fuente
Voluntad de la mayoría
Guárdelo como
WotM.py
, ejecute comopython3 WotM.py
seguido por la entrada.Un programa simple, solo para ver cómo funcionará. Va con lo que la mayoría dijo la última vez, o al azar.
fuente
Alan Shearer
Repite cualquier cosa que la persona con la que está sentado acaba de decir. Si la persona resulta estar equivocada, pasa a la siguiente persona y repite lo que dice en su lugar.
fuente
lastRound
incluso antes de declararla. Además, agregó paréntesis a todos sus,String.length
pero no es una función. ¿Puedes hacer que tu envío llegue a un punto donde se compile?lastRound.length
todavía se accede (en el primer if) antes delastRound
declararse (en ese if if else). Intente compilar (y tal vez ejecutar) su código antes de enviarlo aquí.Más tarde es Evil, JavaScript ( node.js )
Mide la cantidad de tiempo entre ejecuciones. Si la diferencia horaria es mayor que la última vez, debe ser malvada. De lo contrario, bien.
Corre con:
node laterisevil.js
fuente
Buscador de patrones, Python
Busca un patrón recurrente, y si no puede encontrar uno, simplemente va con la mayoría.
corre con
fuente
El chaquetón
El Turncoat cree que debido a los otros combatientes hasta ahora, la mayoría alternará después de cada ronda entre el bien y el mal con más frecuencia de lo que se queda del mismo lado. Por lo tanto, comienza la primera ronda alineándose arbitrariamente con el bien, luego alterna cada ronda en un intento de permanecer en el equipo ganador o perdedor la mayoría de las veces.
Después de escribir esto, me di cuenta de que debido a las entradas basadas en el análisis estadístico, el impulso haría que la mayoría cambiara de lado menos a medida que se completaran más rondas. Por lo tanto, el Lazy Turncoat.
The Lazy Turncoat
El Lazy Turncoat comienza como el Turncoat, pero a medida que pasan las rondas, se vuelve más y más perezoso para cambiar al otro lado.
fuente
Biógrafo, rubí
Mi intento de una entrada casi inteligente (una realmente inteligente requeriría pruebas contra el campo). Escrito en Ruby, por lo que existe la posibilidad de que esto sea demasiado lento, pero en mi máquina de todos modos esto toma .11 segundos para calcular la última ronda cuando hay 40 jugadores aleatorios, así que espero que funcione lo suficientemente bien.
guardar como
biographer.rb
, ejecutar comoruby biographer.rb
La idea es que, para cada jugador, calcule sus posibilidades de elegir "bueno" al observar sus propias elecciones para las últimas diez rondas y los resultados generales, y encontrar instancias en el pasado donde las circunstancias idénticas (sus votos + total resultados) ocurridos. Elige la longitud de mirada más larga, hasta 10 rondas, de modo que haya algún precedente, y la usa para crear una frecuencia (ajustada de acuerdo con la Ley de Sucesión de Laplace, para que nunca tengamos el 100% de confianza en nadie).
Luego ejecuta algunas simulaciones y ve con qué frecuencia Good gana. Si las simulaciones resultaron principalmente de la misma manera, entonces probablemente va a hacer una buena predicción en general, por lo que elige a la minoría pronosticada. Si no tiene confianza, elige la mayoría prevista.
fuente
Judas
Judas es una muy buena persona. Es una pena que traicione a los buenos por unos centavos.
fuente
,
cabo dehistory
, más aún cuando Rusher va a dividir el juego en grupo.El jugador fallazgo (Python)
Si un lado ha ganado mayoría varias veces seguidas, el jugador se da cuenta de que es más probable que el otro lado sea la mayoría en la próxima ronda (¿verdad?) Y esto influye en su voto. Apunta a la minoría, porque si se convierte en minoría una vez, es probable que llegue allí varias veces (¿verdad?) Y obtenga muchos puntos.
Uso
Para la primera ronda:
y luego:
fuente
Autómata celular
Esto usa reglas convencionales para Conway's Game of Life para elegir un bando. Primero, se crea una cuadrícula 2D a partir de los votos anteriores. Luego, el "mundo" avanza una etapa y se calcula el número total de células vivas restantes. Si este número es mayor que la mitad del número total de celdas, se elige "bueno". De lo contrario, se elige "mal".
Perdone cualquier error, esto se rompió durante la hora del almuerzo. ;)
fuente
The Ridge Professor
Espero que el uso de bibliotecas esté permitido, no tenga ganas de hacerlo sin one =)
La idea básica es entrenar un clasificador de regresión de cresta para cada participante en las últimas rondas, utilizando los 30 resultados antes de cada ronda como características. Originalmente incluía la última ronda de resultados para todos los jugadores para predecir el resultado para cada jugador también, pero eso fue bastante corto para cuando el número de participantes aumenta (por ejemplo, 50 más o menos).
Compilar
Guarde el código fuente en un archivo llamado
ridge_professor.cc
, descargue la biblioteca Eigen y descomprima la carpeta Eigen que se encuentra dentro de la misma carpeta que el archivo fuente. Compilar cong++ -I. -O3 -ffast-math -o ridge_professor ridge_professor.cc
.Correr
llame a ridge_professor.exe y proporcione el argumento según sea necesario.
Pregunta
Como todavía no puedo comentar en ninguna parte, preguntaré aquí: ¿el límite de tamaño del argumento en Windows no hace posible llamar a los binarios resultantes con el historial completo a unos pocos cientos de vueltas? Pensé que no puedes tener más de ~ 9000 caracteres en la discusión ...
fuente
Crowley
Porque los Winchesters son mucho menos interesantes sin este tipo. Obviamente se pone del lado del mal ... a menos que sea necesario para cuidar un mal mayor.
Miro los últimos dos turnos (0 comas hasta ahora y 1 coma hasta ahora) y si ambos dejan que gane el mal, yo voto bien. De lo contrario, voto el mal.
fuente