¡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 Atravé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 Ccontendrá el número de línea del condicional que es verdadero, y luego se ejecutará esa línea. Al final de cada turno, Cse incrementará.
Existen las condiciones disponibles:
Startes 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 siAse copió durante el último turno.Adebe 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.CDebe 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
Thisdevolverá 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
Ay Bson para su uso personal, Cse usa para determinar qué línea ejecutar en su código y Dse usa como una dirección. Cada valor de se Drefiere a un par cuadrado y de dirección diferente. Eproduce un valor aleatorio cada vez. Dy Ese 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:
Movete moverá 1 casilla hacia adelante en laDdirección th. Si hay un bot allí, no te moverás.Copy(A,B)copiará la variableAaB.Bno puede ser un valor numérico, excepto para un nombre de variable.AyBno puede ser de diferentes tipos. Copiar una línea no copia la condición.Flagno 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, siCes cierto, de lo contrario lleva a caboL2.Ces una condiciónL1yL2debe 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 Startse 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 Ifdeclaraciones 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 Cse 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 Xcantidad cuando sea visto por un oponente . La Cvariable del oponente también será compensada por la misma Xcantidad. Xno 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
Bvalor, 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 divertirseLinecopia solo la acción, no la condición.Único objetivo
¡Te perseguirá y te llenará de banderas!
fuente
Allcondició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
OConnecesita serOCondCongelar bot
Te atrapa en un bucle Incriminando tu propia
Avariable, luego te llena de banderas y pasa a la siguiente víctima.fuente
Imitador
Predice lo que harías, luego lo hace.
fuente
OLineo unaLineLinealrededor del2, yAdd(D,1)en lugar deD+1Leona 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úantrueen momentos en que no hay bot (s) adyacentes. Finalmente,Movey lasCopydirectivas 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
Modifiedcondición en lugar de algunos de losEqualsModifiedcondició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