CodeBots 2: diseño dirigido por eventos


11

¡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:

  1. Startes cierto solo en el primer turno. Debe tener esto en su código exactamente una vez
  2. BotAt(N) es cierto si hay un bot en la ubicación definida por N
  3. Equals(A,B) es cierto si A es igual a B. Pueden ser de diferentes tipos, de ser así, no serán iguales.
  4. Modified(A)es cierto si Ase copió durante el último turno. Adebe ser un nombre de variable, una línea o una condición
  5. Any(C1,C2,...) es cierto si alguna de las condiciones es verdadera
  6. None(C1,C2,...) es cierto si ninguna de las condiciones es verdadera
  7. All(C1,C2,...) es cierto si todas las condiciones son verdaderas
  8. Not(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.

  1. A` B` C` D`E
  2. Un número del 0 al 23
  3. This devolverá el número de línea en el que se encuentra actualmente
  4. Add(N1,N2,...) devolverá la suma de todos los valores
  5. Sub(N1,N2) devolverá N1 menos N2
  6. Mult(N1,N2,...) devolverá el producto de todos los valores
  7. Div(N1,N2) devolverá N1 dividido por N2
  8. Mod(N1,N2) devolverá N1 mod N2
  9. OVar(N) aceptará un nombre de variable y devolverá la variable del oponente
  10. Line(N) devolverá la enésima línea en su código
  11. Type(N) devolverá el enésimo tipo de línea en su código (los tipos son los nombres de las acciones)
  12. Cond(N) devolverá la condición en la enésima línea
  13. CondType(N) devolverá el tipo de condición en la enésima línea (los tipos son los nombres de las condiciones)
  14. OLine(N) devolverá la enésima línea en el código de tu oponente
  15. OType(N) devolverá el enésimo tipo de línea en el código de tu oponente
  16. OCond(N) devolverá la condición en la enésima línea
  17. OCondType(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:

  1. Movete moverá 1 casilla hacia adelante en la Ddirección th. Si hay un bot allí, no te moverás.
  2. Copy(A,B)copiará la variable Aa B. Bno puede ser un valor numérico, excepto para un nombre de variable. Ay Bno puede ser de diferentes tipos. Copiar una línea no copia la condición.
  3. Flagno hace nada. El bot con más banderas en su código obtendrá un punto. El bot con más puntos gana.
  4. If(C,L1,L2)llevará a cabo en la línea L1, si Ces cierto, de lo contrario lleva a cabo L2. Ces una condición L1y L2debe 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

  1. 893.9 Borg
  2. 1.3 LazyLioness
  3. 0.9 Defensor
  4. 0.5 abanderado
  5. 0.4 CliqueBot
  6. 0.4 insidioso
  7. 0.3 atacante
  8. 0.3 Gard
  9. 0.3 SingleTarget
  10. 0.2 FreezeBot
  11. 0.2 Centinela
  12. 0.2 en espera
  13. 0.0 AntiInsidious
  14. 0.0 MoveBot
  15. 0.0 CliqueBorg
  16. 0.0 Calculadora
  17. 0.0 TestBot
  18. 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.


Nathan: ¿Puedes ver "Lazy Lioness" para ver si los errores que he denunciado son legítimos (o si solo voy a almorzar)? Sin prisa. Solo asegurándome de estar al tanto de la presentación.
COTO

@COTO Lo siento, las escuelas han estado locas. Trataré de llegar esta noche.
Nathan Merrill

La condición 'Todos' podría hacerse implícita para cualquier lista de condiciones separadas por comas. Haría un poco más fácil leer las entradas.
ccarton

Creo que encontré tu error. Los objetos FuctionParser se utilizan como claves en un HashMap, lo que significa que necesita un método de igualdad adecuado. Esto soluciona el problema con CliqueBot y probablemente Lazy Lioness también. Te envié una solicitud de extracción.
ccarton

@ccarton the HashMap solo memoriza los valores, no se usa para probar la igualdad
Nathan Merrill

Respuestas:


13

Borg

Convierte todos los demás bots en clones de sí mismo. La resistencia es inútil.

Start:Copy(2,A)                               # Cloning will begin at line 2
All(Not(BotAt(D)),Not(Equals(2,A))):Copy(2,A) # Reset A if the opp left before we were done
Not(BotAt(D)):Move
All(Equals(Line(Sub(This,3)),OLine(0)),Equals(Line(Sub(This,2)),OLine(1)),Equals(Line(Sub(This,1)),OLine(2)),Equals(Line(This),OLine(3)),Equals(Line(Add(This,1)),OLine(4)),Equals(Line(Add(This,2)),OLine(5)),Equals(Line(Add(This,3)),OLine(6)),Equals(Line(Add(This,4)),OLine(7)),Equals(Line(Add(This,5)),OLine(8))):Copy(E,D) #  Check if cloning is complete
All(Equals(A,2),Not(Equals(OCond(1),Cond(Add(This,4))))):Copy(Cond(Add(This,4)),OCond(1)) # Copy freeze cond to OLine(1) before cloning starts
All(Equals(A,2),Not(Equals(OLine(1),Line(Add(This,3))))):Copy(Line(Add(This,3)),OLine(1)) # Copy freeze line
Not(Equals(Cond(Add(Sub(This,6),A)),OCond(A))):Copy(Cond(Add(Sub(This,6),A)),OCond(A))    # Copy Cond(A) to OCond(A)
Not(Equals(Line(Add(Sub(This,7),A)),OLine(A))):Copy(Line(Add(Sub(This,7),A)),OLine(A))    # Copy Line(A) to OLine(A)
Equals(A,A):Copy(Add(A,1),A) # Increment A. It will wrap around all 24 lines before the completion check matches

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.


Oye, ¿podemos hablar sobre este bot? chat.stackexchange.com/rooms/17128/…
Nathan Merrill

@Nathan, ¿usaste la última versión de esta entrada en la ejecución más reciente?
ccarton

Estoy sorprendido de que este bot pueda infectar a otros bots con tanto éxito. Me encantaría ver un resumen de cómo funciona.
Sparr

@ccarton no. No me di cuenta de que estaba actualizado. Vuelta a correr.
Nathan Merrill

@Sparr He agregado algunos comentarios. Espero que sea más fácil de seguir. Creo que el bot es tan efectivo debido al efecto exponencial de la clonación. Cada bot que infecta se apaga e infecta a otros. Además, naturalmente intentarán repararse mutuamente cuando reciban daño.
ccarton


3

Calculadora

Este bot no entiende el objetivo de este desafío, por lo que decidió calcular algunos números para el enemigo.

Equals(Mod(OVar(E),5),0):Copy(Add(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),1):Copy(Sub(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),2):Copy(Mult(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),3):Copy(Div(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),4):Copy(Mod(OVar(A),OVar(B)),OVar(D))
Start:Move

¡deberías poner los resultados en OVar(D)no A!
MegaTom

@MegaTom Hecho;)
CommonGuy

3

CliqueBot

Flag
Start: Copy(11,B)
Not(Equals(Line(20),Line(21))): If(Equals(Line(21),Line(22)),Line(7),Line(8))
Not(Equals(Line(21),Line(22))): If(Equals(Line(20),Line(21)),Line(9),Line(10))
All(BotAt(D),Not(Equals(11,OVar(B)))): If(Equals(Line(20),OLine(OVar(C))),Line(10),Line(11))
Any(BotAt(D),Equals(E,B)): Copy(Add(D,1),D)
Equals(1,1): Move
Copy(Line(21),Line(20))
Copy(Line(20),Line(21))
Copy(Line(21),Line(22))
If(Equals(Line(20),OLine(Sub(OVar(C),1))),Line(5),Line(12))
Copy(Line(20),OLine(OVar(C)))
Copy(Line(20),OLine(E))

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.


Creo que encontré el error en el controlador. Le envié una solicitud de extracción. Hasta que él lo acepte, puede probar mi tenedor si lo desea y hacerme saber si funciona para usted.
ccarton

El error se ha corregido en la última versión.
Nathan Merrill

2

Defensor

Start:Copy(0,A)
Copy(0,B)
Flag
Flag
All(Modified(Line(2)),Equals(A,0)):Copy(1,A)
Copy(Line(3),Line(2))
Copy(0,A)
Copy(10,C)
All(Modified(Line(3)),Equals(B,0)):Copy(1,B)
Copy(Line(2),Line(3))
Copy(0,B)
BotAt(D):Copy(Line(2),OLine(E))


2

Agresor

Start:Move
BotAt(D):Copy(Line(Add(Mod(E,6),4)),OLine(E))
Any(BotAt(0),BotAt(1),BotAt(2),BotAt(3)):Move
None(BotAt(0),BotAt(1),BotAt(2),BotAt(3)):Copy(E,D)

BotAt(D):Copy(Line(X),OLine(E))donde la línea X contiene Equals(1,1):Flag... para divertirse
ver

@Sieg Linecopia solo la acción, no la condición.
MegaTom

Mi táctica dominada :(
seequ

2

Único objetivo

Start:Move
All(BotAt(D),Not(Equals(OVar(D),D))): Copy(D,OVar(D))
BotAt(D):Copy(Line(E),OLine(E))
Equals(A,A):Move

¡Te perseguirá y te llenará de banderas!


La Allcondición necesita un)
Nathan Merrill

2

Insidioso

Start:Flag           # comments -->                                                                                 # why move when we can fit another flag here?
Equals(E,0):Copy(Add(D,Sub(Mult(2,Mod(E,2)),1)),D)                                                                  # 1/24 chance to turn left or right
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(Add(This,4))))):Copy(Cond(Add(This,4)),OCond(Sub(OVar(C),1)))    # Copy the freeze condition
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(Add(This,4))))):Copy(Line(Add(This,4)),OLine(Sub(OVar(C),1)))    # Copy the flag-copying line
All(BotAt(D),Not(Equals(OLine(Add(OVar(C),0)),Line(Add(This,Add(4,Mod(E,14))))))):Copy(Line(Add(This,Add(4,Mod(E,14)))),OLine(Add(OVar(C),0))) # copy one of my flags to them
BotAt(D):Copy(Add(D,Sub(Mult(2,Mod(E,2)),1)),D)                                                                     # turn left or right if we've infected our target
Equals(A,A):Move                                                                                                    # move if all else fails, also infection freeze condition
Copy(Line(Add(This,1)),Line(Add(This,Mod(E,22))))                                                                   # infection line 1
Flag                                                                                                                # first of many flags

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.


Line(4)Se puede simplificar un poco. Add(OVar(C),0)es lo mismo OVar(C)y Add(This,Add(4,Mod(E,14)))es lo mismo que Add(This,4,Mod(E,14)).
MegaTom

@MegaTom Hice el primer Agregar innecesario para alinear las partes lógicas de las líneas anteriores. El segundo se debió a no saber que Agregar podría tomar múltiples parámetros. Gracias
Sparr

1

Gard

Start: Move
BotAt(D):IF(Equals(Line(7),OLine(C)),Line(6),Line(5))
BotAt(Add(D,1)):Copy(Add(D,1),D)
BotAt(Add(D,2)):Copy(Add(D,2),D)
BotAt(Add(D,3)):Copy(Add(D,3),D)
Copy(Line(7),OLine(OVar(C)))
Copy(Cond(7),OCond(Sub(OVar(C),1)))

Ataca a cualquier robot al lado.


Su última línea no puede copiar de una condición a una línea.
Nathan Merrill

@NathanMerrill Estaba arreglando eso ...
MegaTom

OConnecesita serOCond
Nathan Merrill

1

Congelar bot

Start:Move
All(BotAt(D),Not(Equals(OCond(1),Cond(5)))):Copy(Cond(5),OCond(1))
All(BotAt(D),Not(Equals(OLine(1),Line(6)))):Copy(Line(6),OLine(1))
All(BotAt(D),Equals(Mod(OVar(A),24),0)):Copy(Add(D,1),D)
BotAt(D):Copy(Line(20),OLine(OVar(A)))
Equals(A,A):Move
Copy(Add(A,1),A)

Te atrapa en un bucle Incriminando tu propia Avariable, luego te llena de banderas y pasa a la siguiente víctima.


Línea 3: Reemplace D + 1 con Agregar (D, 1)
Nathan Merrill

Estás asumiendo que Start está en la línea cero. Ahora todos están incentivados para poner su Start en la línea 2. Esto llevará a una tendencia tonta de escalada / reenvío :(
Sparr

1

Imitador

Start:Move
BotAt(D):If(OCond(0),OLine(0),Line(2))
If(OCond(1),OLine(1),Line(3))
If(OCond(2),OLine(2),Line(4))
If(OCond(3),OLine(3),Line(5))
If(OCond(4),OLine(4),Line(6))
If(OCond(5),OLine(5),OLine(OVar(C)))
Not(BotAt(D)):If(BotAt(Add(D,1)),Line(8),Line(0))
Copy(Add(D,1),D)

Predice lo que harías, luego lo hace.


Reemplace D + 1 con Agregar (D, 1)
Nathan Merrill

Además, no puede pasar un comando como una línea. Tienes que pasar en una OLineo unaLine
Nathan Merrill

@NathanMerrill listo para ir! (Al menos eso creo)
MegaTom

Este bot realmente puso mi código en problemas, pero fue mi culpa, no la tuya. Hay algunos errores, por favor ponga Linealrededor del 2, y Add(D,1)en lugar deD+1
Nathan Merrill

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 la BotAt()condición) también se evalúan trueen momentos en que no hay bot (s) adyacentes. Finalmente, Movey las Copydirectivas 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

All(Not(Equals(Line(18),Line(21))),Equals(Line(21),Line(22))):Copy(Line(21),Line(18))
All(Not(Equals(Line(21),Line(22))),Equals(Line(22),Line(18))):Copy(Line(22),Line(21))
All(Not(Equals(Line(22),Line(18))),Equals(Line(18),Line(21))):Copy(Line(18),Line(22))
All(Any(BotAt(Add(D,1)),BotAt(Add(D,2)),BotAt(Add(D,3))),Not(BotAt(D))):Move
All(Any(All(BotAt(D),BotAt(Add(D,2))),All(BotAt(D),BotAt(Add(D,1))),All(BotAt(Add(D,1)),BotAt(Add(D,2)))),Not(BotAt(Add(D,3)))):Copy(Add(D,3),D)
Any(All(Any(All(BotAt(D),BotAt(Add(D,2))),All(BotAt(D),BotAt(Add(D,3))),All(BotAt(Add(D,2)),BotAt(Add(D,3)))),Not(BotAt(Add(D,1)))),All(BotAt(Add(D,1)),BotAt(D),Any(Equals(OCond(2),Cond(20)),Equals(OLine(2),Line(19))))):Copy(Add(D,1),D)
All(BotAt(Add(D,3)),BotAt(D),Any(Equals(OCond(2),Cond(20)),Equals(OLine(2),Line(19)))):Copy(Add(D,3),D)
All(BotAt(D),Not(Equals(OCond(2),Cond(20))),Not(Equals(OLine(2),Line(19)))):Copy(Cond(20),OCond(2))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(3),Line(18)))):Copy(Line(18),OLine(3))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(4),Line(21)))):Copy(Line(21),OLine(4))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OCond(0),Cond(22)))):Copy(Cond(22),OCond(0))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(0),Line(17)))):Copy(Line(17),OLine(0))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OCond(1),Cond(21)))):Copy(Cond(21),OCond(1))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(1),Line(20)))):Copy(Line(20),OLine(1))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(2),Line(19)))):Copy(Line(19),OLine(2))
All(BotAt(D),Not(Equals(OCond(2),Cond(20))),Equals(OLine(2),Line(19))):Copy(Add(D,A),D)
Equals(E,1):Copy(Add(A,2),A)
Any(Equals(E,4),Equals(E,8)):Copy(Add(D,E,A),D)
Not(Equals(A,A)):Flag
Not(Equals(A,A)):Copy(Line(3),OLine(E))
Equals(A,A):Move
Any(Equals(E,4),Equals(E,5),Equals(E,6),Equals(E,7),Equals(E,8),Equals(E,9)):Flag
Any(Equals(E,10),Equals(E,11),Equals(E,12),Equals(E,13)):Flag
Start:Copy(1,A)

No puedo ver un error, pero en caso de que probablemente deba usar la Modifiedcondición en lugar de algunos de losEquals
MegaTom

Parece que cliqueBot tiene el mismo problema. Creo que es un error del compilador.
MegaTom

@MegaTom: la Modifiedcondició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. ;)
COTO

Creo que encontré el error en el controlador. Le envié una solicitud de extracción. Hasta que él lo acepte, puede probar mi tenedor si lo desea y hacerme saber si funciona para usted.
ccarton

1

centinela

mejora en Gard. Golpea bots cercanos con banderas en las primeras 8 líneas. (es decir, todos los más utilizados)

flag
flag
Start:Copy(11,B)
All(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):If(Equals(OVar(D),Add(D,2)),Line(7),Line(8))
BotAt(Add(D,1)):Copy(Add(D,1),D)
BotAt(Add(D,2)):Copy(Add(D,2),D)
BotAt(Add(D,3)):Copy(Add(D,3),D)
copy(D,OVar(D))
copy(Line(Mod(E,2)),OLine(Mod(E,8)))
Not(Equals(Line(0),Line(1))):copy(Line(Add(9,Mod(E,16))),Line(Mod(E,2)))

Creo que tiene un soporte fuera de lugar en la línea 3. El primer Not no está cerrado correctamente. Creo que debería serAll(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):
ccarton

1

CliqueBorg

Flag
BotAt(D): Copy(Line(Sub(This,1)),OLine(E))
Equals(1,1): Copy(Line(Sub(This,2)),Line(Add(This,Mod(E,21))))
Start: Move
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(3)))):Copy(Line(3),OLine(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(3)))):Copy(Cond(3),OCond(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),2)),Line(2)))):Copy(Line(2),OLine(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),2)),Cond(2)))):Copy(Cond(2),OCond(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),3)),Line(1)))):Copy(Line(1),OLine(Sub(OVar(C),3)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),3)),Cond(4)))):Copy(Cond(4),OCond(Sub(OVar(C),3)))

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).


Reemplace Plus con Add y Minus con Sub
Nathan Merrill

1

Conducir por

Un último intento antes de la fecha límite.

Flag
Flag
BotAt(D):Copy(Line(Sub(This,1)),OLine(E))
Equals(1,1):Copy(Line(Sub(This,2)),Line(Add(This,Mod(E,21))))
Start:Move
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(3)))):Copy(Line(3),OLine(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(3)))):Copy(Cond(3),OCond(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),2)),Line(2)))):Copy(Line(2),OLine(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),2)),Cond(2)))):Copy(Cond(2),OCond(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),3)),Line(1)))):Copy(Line(1),OLine(Sub(OVar(C),3)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),3)),Cond(4)))):Copy(Cond(4),OCond(Sub(OVar(C),3)))
BotAt(D):Copy(Add(D,1),D)
Equals(1,1):Move
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.