¡Bienvenido a Code Bots 2!
Has aprendido tu lección desde los últimos Code Bots. Intentaste encontrar más formas de ajustar más acciones en menos líneas, y ahora finalmente lo tienes. Vas a hacer un Code Bot basado en eventos.
Su bot debe constar de 24 líneas. Cada línea sigue uno de los dos formatos:
Condition:Action
o
Action
Su bot también tiene suficiente almacenamiento para almacenar 5 enteros nombrados a A
través E
. Un número entero puede almacenar valores de 0 a 23.
Cada turno, ejecutarás una línea C
, a menos que una de las condiciones sea verdadera. Si es así, entonces C
contendrá el número de línea del condicional que es verdadero, y luego se ejecutará esa línea. Al final de cada turno, C
se incrementará.
Existen las condiciones disponibles:
Start
es cierto solo en el primer turno. Debe tener esto en su código exactamente una vezBotAt(N)
es cierto si hay un bot en la ubicación definida por NEquals(A,B)
es cierto si A es igual a B. Pueden ser de diferentes tipos, de ser así, no serán iguales.Modified(A)
es cierto siA
se copió durante el último turno.A
debe ser un nombre de variable, una línea o una condiciónAny(C1,C2,...)
es cierto si alguna de las condiciones es verdaderaNone(C1,C2,...)
es cierto si ninguna de las condiciones es verdaderaAll(C1,C2,...)
es cierto si todas las condiciones son verdaderasNot(C)
es verdadero si C es falso.C
Debe ser una condición.
Las variables pueden estar en uno de los siguientes formatos. Los primeros 9 son numéricos y se pueden usar cuando se usa N en esta página.
A
`B
`C
`D
`E
- Un número del 0 al 23
This
devolverá el número de línea en el que se encuentra actualmenteAdd(N1,N2,...)
devolverá la suma de todos los valoresSub(N1,N2)
devolverá N1 menos N2Mult(N1,N2,...)
devolverá el producto de todos los valoresDiv(N1,N2)
devolverá N1 dividido por N2Mod(N1,N2)
devolverá N1 mod N2OVar(N)
aceptará un nombre de variable y devolverá la variable del oponenteLine(N)
devolverá la enésima línea en su códigoType(N)
devolverá el enésimo tipo de línea en su código (los tipos son los nombres de las acciones)Cond(N)
devolverá la condición en la enésima líneaCondType(N)
devolverá el tipo de condición en la enésima línea (los tipos son los nombres de las condiciones)OLine(N)
devolverá la enésima línea en el código de tu oponenteOType(N)
devolverá el enésimo tipo de línea en el código de tu oponenteOCond(N)
devolverá la condición en la enésima líneaOCondType(N)
devolverá el tipo de condición en la enésima línea
A
y B
son para su uso personal, C
se usa para determinar qué línea ejecutar en su código y D
se usa como una dirección. Cada valor de se D
refiere a un par cuadrado y de dirección diferente. E
produce un valor aleatorio cada vez. D
y E
se inicializará a un valor aleatorio, de lo contrario 0
.
La dirección utilizada será [North,East,South,West][D%4]
. Tu oponente es el bot en la casilla inmediata en esa dirección.
Hay 4 acciones disponibles para usted:
Move
te moverá 1 casilla hacia adelante en laD
dirección th. Si hay un bot allí, no te moverás.Copy(A,B)
copiará la variableA
aB
.B
no puede ser un valor numérico, excepto para un nombre de variable.A
yB
no puede ser de diferentes tipos. Copiar una línea no copia la condición.Flag
no hace nada. El bot con más banderas en su código obtendrá un punto. El bot con más puntos gana.If(C,L1,L2)
llevará a cabo en la líneaL1
, siC
es cierto, de lo contrario lleva a caboL2
.C
es una condiciónL1
yL2
debe ser líneas.
El panorama
Se colocarán 50 copias de cada bot en el mundo. Tu objetivo es colocar tu bandera en tantos bots como sea posible. Por cada bot que tenga más de su tipo de bandera que cualquier otro tipo de bandera, obtendrá un punto.
Los bots se colocarán de la siguiente manera:
B...B...B...B...
..B...B...B...B.
B...B...B...B...
Se ejecutarán 10 juegos y se promediarán los puntos en todos los juegos, determinando quién es el ganador.
Notas al margen
Si se aplican varias condiciones, la que sigue más immedately Start
se ejecutará
Los bots se empaquetarán estrechamente, pero no comenzarás junto a otro bot. (Técnicamente tendrá el mismo formato que los últimos CodeBots)
Como este desafío no se publicó en el sandbox (para no darle una ventaja a nadie), me reservo el derecho de cambiar pequeños detalles para ser justos o capacidades adicionales. Además, si hay un error en el corredor de CodeBots, lo cambiaré, incluso si un bot dependía de ese error para su éxito. Estoy tratando de ser lo más justo posible.
Las If
declaraciones recursivas no se ejecutarán
Si su bot tiene menos de 24 líneas, las líneas restantes se llenarán con Flag
Recuerde al copiar a su cuenta C
, que C
se incrementa al final de su turno.
El intérprete de CodeBots se puede encontrar aquí . Incluye un archivo .jar para una fácil ejecución. Simplemente agregue su bot a la carpeta de bots
Puntuaciones
- 893.9 Borg
- 1.3 LazyLioness
- 0.9 Defensor
- 0.5 abanderado
- 0.4 CliqueBot
- 0.4 insidioso
- 0.3 atacante
- 0.3 Gard
- 0.3 SingleTarget
- 0.2 FreezeBot
- 0.2 Centinela
- 0.2 en espera
- 0.0 AntiInsidious
- 0.0 MoveBot
- 0.0 CliqueBorg
- 0.0 Calculadora
- 0.0 TestBot
- 0.0 imitador
ACTUALIZAR
Las líneas de código ahora se rotan cuando ves el código de tu oponente. Eso significa que la línea 1 de tu oponente puede ser la línea 14 (o cualquier línea). Un bot tendrá un desplazamiento fijo que compensará sus líneas en X
cantidad cuando sea visto por un oponente . La C
variable del oponente también será compensada por la misma X
cantidad. X
no cambiará dentro del mismo juego, pero cambiará de un juego a otro.
fuente
Respuestas:
Borg
Convierte todos los demás bots en clones de sí mismo. La resistencia es inútil.
Editar: Pequeña corrección para restablecer A si el oponente se mueve antes de que termine con él. No parece afectar el puntaje, pero me hace sentir mejor.
Edición n. ° 2: se agregó una verificación más completa para garantizar que el proceso de clonación se haya completado correctamente (línea 3)
Editar # 3: Actualización para manejar las nuevas compensaciones aleatorias. La dificultad aquí era que los nuevos clones tendrían su código ubicado en compensaciones aleatorias, lo que significa que no conocen la ubicación de sus propias líneas. Eso significa que todas las referencias a mis propias líneas deben ser relativas (a
This
). Los números de línea opuestos pueden ser absolutos ya que de todos modos son aleatorios.fuente
Flagger
Disparar a la luna
Y el resto se llena automáticamente con la bandera.
fuente
Calculadora
Este bot no entiende el objetivo de este desafío, por lo que decidió calcular algunos números para el enemigo.
fuente
OVar(D)
noA
!CliqueBot
Reconoce a los amigos a través de su
B
valor, llena las líneas de todos los demás con banderas. También se esfuerza un poco para preservar la integridad de una de sus propias banderas (esta parte es linda pero probablemente no sea muy útil).Editar: Como era de esperar, parece que hay un error aquí en alguna parte, a juzgar por el puntaje.Sospecho que las líneas están indexadas en 0 y mi código está indexado en 1. Realmente debería haberlo comprobado antes. Se agregó una bandera al principio para aumentar todo.
fuente
Defensor
fuente
MoveBot
fuente
Copy(23,C)
?Agresor
fuente
BotAt(D):Copy(Line(X),OLine(E))
donde la línea X contieneEquals(1,1):Flag
... para divertirseLine
copia solo la acción, no la condición.Único objetivo
¡Te perseguirá y te llenará de banderas!
fuente
All
condición necesita un)
Insidioso
Idea similar al bot del mismo nombre en el concurso anterior. Muévete hasta que golpee otro bot, luego congélalo en un bucle sobrescribiendo su propio código con mis banderas. Esta vez, los bots infectados sobrescriben líneas aleatorias en lugar de líneas secuenciales, haciendo que el proceso de infección sea un poco menos efectivo pero mucho más rápido.
fuente
Line(4)
Se puede simplificar un poco.Add(OVar(C),0)
es lo mismoOVar(C)
yAdd(This,Add(4,Mod(E,14)))
es lo mismo queAdd(This,4,Mod(E,14))
.Gard
Ataca a cualquier robot al lado.
fuente
OCon
necesita serOCond
Congelar bot
Te atrapa en un bucle Incriminando tu propia
A
variable, luego te llena de banderas y pasa a la siguiente víctima.fuente
Imitador
Predice lo que harías, luego lo hace.
fuente
OLine
o unaLine
Line
alrededor del2
, yAdd(D,1)
en lugar deD+1
Leona perezosa
Originalmente solo "Leona", mi primera presentación al concurso obtuvo el título de "perezoso" al no hacer nada literalmente cuando se introdujo en el simulador.
De hecho, su letargo se debe a un error (o posiblemente a mi malentendido del modelo de evento) en el que las condiciones en las primeras tres líneas (una simple verificación de paridad para garantizar que las banderas no se sobrescriban) ocasionalmente, evalúan inexplicablemente
true
, bloquear a Leo en un bucle lemniscate . Varias otras condiciones (particularmente aquellas que dependen de laBotAt()
condición) también se evalúantrue
en momentos en que no hay bot (s) adyacentes. Finalmente,Move
y lasCopy
directivas se ignoran claramente al pasar por el simulador. Dado que mis cadenas lógicas condicionales son algo épicas, hay mucho espacio para errores en mi código y en el simulador. ;)En cualquier caso, presento a Lazy Lioness como un caso de prueba para el diagnóstico de errores o la depuración del simulador, lo que con suerte conducirá a la aparición de la Leona no tan floja que luego puedo simular y refinar como mi primer envío de buena fe a los Bots v2 competencia.
No hace nada
fuente
Modified
condición en lugar de algunos de losEquals
Modified
condición es una invitación para un bucle infinito. Si no puedo usar una verificación de paridad, simplemente eliminaré las líneas por completo. Descubre algo más útil para poner en ellos. ;)centinela
mejora en
Gard
. Golpea bots cercanos con banderas en las primeras 8 líneas. (es decir, todos los más utilizados)fuente
All(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):
CliqueBorg
Intentando combinar la tecnología CliqueBot y Borg para crear un bot que reconozca copias de sí mismo a pesar del desplazamiento de línea. También comienza su proceso de copia en la última línea de código ejecutada en el bot contrario, en lugar de la línea 0, que es más probable que se congele en su lugar, pero también es más probable que resulte en una copia corrupta (de hecho, no estoy seguro que esto incluso funciona, no lo he probado y es bastante complejo).
fuente
Conducir por
Un último intento antes de la fecha límite.
fuente