Code Bots
Odio las variables privadas y protegidas. ¡Solo quiero acceder a todo!
Si eres como yo, ¡este desafío es para ti!
Escribe un bot que funcione en armonía con otros bots para que otros hagan lo que quieras. Eres programador y sabes cómo se supone que funcionan las cosas. Su trabajo es convertir tantos bots a su manera como sea posible.
El código
Tendrás 24 líneas de código para escribir tu bot. Cada turno, cada bot ejecutará 1 línea secuencialmente.
Cada bot almacena 5 variables a A
través E
. A
y B
son para uso personal, C
almacena la siguiente línea para ejecutar, D
almacena la dirección actual y E
es un número aleatorio. Las variables comienzan en 0, excepto para D
, que comenzará en un valor aleatorio. Todas las variables solo tienen tienda 0-23. Los números mayores o menores serán modulados por 24.
En esta publicación, usaré al oponente como el bot adyacente al que te enfrentas
Cada línea debe contener uno de los siguientes 5 comandos:
Flag
no hace nada. Excepto que así es como ganasMove
mueve tu bot en laD
dirección th. Si un bot ya ocupa el espacio, no ocurrirá ningún movimientoCopy Var1 Var2
copia el contenido de Var1 en Var2If Condition Line1 Line2
Si la condición es verdadera, ejecuta Line1, de lo contrario Line2Block Var1
bloquea la próxima escritura en una variable
Una variable se puede usar de la siguiente manera:
#Var
usará la variable como un número de línea. Si A
es 17, Copy #8 #A
copiará el contenido de la línea 8 en la línea 17.
*Var
usará la variable de su oponente. Copy 5 *C
configurará la C
variable del oponente para 5
Var+Var
agregar las dos variables. Copy D+1 D
rotará el bot hacia la derecha
Cuando D
se usa como una dirección, [North, East, South, West][D%4]
se usará
Estos modificadores se pueden encadenar: Copy *#*C #9
copiará la siguiente línea que su oponente ejecutará en su propio código en la línea 9. se **D
refiere a la D
variable del oponente .
Una condición se evaluará de la siguiente manera:
- Si
Var
:- Si Var ha
A
terminadoC
, devolverá verdadero si Var es distinto de cero, de lo contrario falso. - Si Var es
D
, devolverá verdadero si hay un bot en laD
dirección th, de lo contrario falso - Si Var es
E
, devolverá verdadero si E es impar, de lo contrario falso - Si Var es una línea, devolverá verdadero si es una línea de bandera
- Si Var ha
- Si
Var1=Var2
:- Devuelve verdadero si ambos son
A-E
, e igual al mismo número - Devuelve verdadero si ambas son líneas y el tipo de línea es igual
- Devuelve verdadero si ambos son
- Si
Var1==Var2
:- Devuelve verdadero si ambos son
A-E
, e igual al mismo número - Devuelve verdadero si ambas son líneas y son idénticas (las banderas de diferentes bots no serán iguales)
- Devuelve verdadero si ambos son
Se colocarán 50 bots de cada tipo en un mundo toroidal con el siguiente patrón:
B...B...B...B...
..B...B...B...B.
B...B...B...B...
..B...B...B...B.
Después de cada juego de 5,000 turnos, se contarán las banderas en cada bot. Obtienes un punto si un bot tiene más de tu bandera que cualquier otro tipo de bandera. Si se trata de un empate entre N
bots, no se otorgan puntos.
Habrá 10 juegos y los puntajes se acumularán al final.
Notas al margen
Los comentarios de fin de línea están permitidos y se denotan con //
Intentar hacer algo que no tiene sentido, como agregar a una línea, no hará nada
Intentar hacer algo en un bot inexistente no hará nada
La recursión infinita en un If
testamento terminará sin que se ejecute ninguna línea.
If
no cambia el valor de C
A Block
no caduca hasta que alguien intente escribirle
Se pueden bloquear varias variables y líneas a la vez
Block
Inventar una variable varias veces se bloqueará varias veces siempre que la segunda instrucción de bloque esté en una línea de código diferente a la primera.
Los espacios solo se permiten entre argumentos (y después del comando)
Si un bot tiene menos de 24 líneas, Flag será el resto de las líneas.
Programa de muestra
Copy 2 C //Skip to the If line
Flag //Where I'm storing my flag
Move //Move in the D'th direction
If D #5 #2 //If there's a bot, copy code, otherwise, move!
Copy #1 *#E //Copy my flag onto a random spot in my bot's code
Copy 2 C //Skip back to the If line
El programa será ejecutado por mi controlador Python aquí .
El controlador Java está aquí. Es rápido y se ve mucho mejor que el de Python.
Marcador:
- 6837 $ Copia
- 3355 Lockheed
- 1695 MindControl
- 967 bizantino
- 959 AttackOrElse
- 743 Cadmyllion
- 367 Influenza
- 251 TheCommonCold
- 226 Magus
- 137 HideBlockAttack
- 129 RowBot
- 123 FastMoveCloneDodge
- 112 FastForwardClone
- 96 QuickFreeze
- 71 RepairAndProtect
- 96 SuperFreeze
- 93 RovingVirus
- 80 ForwardClone
- 77 FreezeTag
- 68 Palimpseste
- 62 BlockFreezeAttack
- 51 RushAttackDodge
- 46 bloqueador
- 40 TurretMaker
- 37 Copycat
- 37 Kamikaze
- 35 FlagInjector
- 33 RandomCopier
- 31 insidioso
- 29 HappyAsAClam
- 25 NanoVirus
- 21 Nulificador
- 19 Nanoviris
- 17 aburrido
- 16 Movebot
- 14 Flagbot
- 13 neutralizador
- 12 cáncer
- 9 DNAbot
- 9 parásito
- 8 MetaInsidious
- 8 Rebranding
- 8 AdaptiveBot
- 8 ReproducciónBot
- 8 KungFuBot
- 5 QuickFreezerbot
- 4 atacante