CodeBots 2: Event Driven Design


11

Benvenuti in Code Bots 2!

Hai imparato la lezione dagli ultimi Code Bots. Hai provato a trovare più modi per adattare più azioni in meno righe, e ora finalmente ce l'hai. Stai per creare un codice Bot orientato agli eventi.

Il tuo bot deve essere composto da 24 linee. Ogni riga segue uno dei due formati:

Condition:Action

o

Action

Il tuo bot hanno anche spazio di archiviazione sufficiente per memorizzare 5 numeri interi chiamati Aattraverso E. Un numero intero può memorizzare valori da 0 a 23.

Ad ogni turno, eseguirai la linea C, a meno che una delle condizioni non sia vera. In tal caso, Cconterrà quindi il numero di riga del condizionale che è true e quindi tale riga verrà eseguita. Alla fine di ogni turno, Cverrà incrementato.

Ci sono le condizioni disponibili:

  1. Startè vero solo al primo turno. Devi averlo nel tuo codice esattamente una volta
  2. BotAt(N) è vero se esiste un bot nella posizione definita da N
  3. Equals(A,B) è vero se A è uguale a B. Possono essere di tipi diversi, in tal caso, non saranno uguali.
  4. Modified(A)è vero se è Astato copiato durante l'ultimo turno. Adeve essere un nome di variabile, una riga o una condizione
  5. Any(C1,C2,...) è vero se una qualsiasi delle condizioni è vera
  6. None(C1,C2,...) è vero se nessuna delle condizioni è vera
  7. All(C1,C2,...) è vero se tutte le condizioni sono vere
  8. Not(C)è vero se C è falso. Cdeve essere una condizione.

Le variabili possono essere in uno dei seguenti formati. I primi 9 sono numerici e possono essere utilizzati ogni volta che N viene utilizzato in questa pagina.

  1. A, B, C, D,E
  2. Un numero compreso tra 0 e 23
  3. This restituirà il numero di riga in cui si trova attualmente
  4. Add(N1,N2,...) restituirà la somma di tutti i valori
  5. Sub(N1,N2) restituirà N1 meno N2
  6. Mult(N1,N2,...) restituirà il prodotto di tutti i valori
  7. Div(N1,N2) restituirà N1 diviso per N2
  8. Mod(N1,N2) restituirà N1 mod N2
  9. OVar(N) accetterà un nome di variabile e restituirà la variabile dell'avversario
  10. Line(N) restituirà l'ennesima riga nel tuo codice
  11. Type(N) restituirà l'ennesimo tipo di riga nel codice (i tipi sono i nomi delle azioni)
  12. Cond(N) restituirà la condizione sull'ennesima riga
  13. CondType(N) restituirà il tipo di condizione sull'ennesima riga (i tipi sono i nomi delle condizioni)
  14. OLine(N) restituirà l'ennesima riga nel codice del tuo avversario
  15. OType(N) restituirà l'ennesimo tipo di riga nel codice del tuo avversario
  16. OCond(N) restituirà la condizione sull'ennesima riga
  17. OCondType(N) restituirà il tipo di condizione sull'ennesima riga

Ae Bsono per uso personale, Cviene utilizzato per determinare quale riga eseguire nel codice e Dviene utilizzato come direzione. Ogni valore di si Driferisce a una diversa coppia di quadrati e direzioni. Eproduce un valore casuale ogni volta. De Everrà inizializzato su un valore casuale, altrimenti 0.

La direzione utilizzata sarà [North,East,South,West][D%4]. Il tuo avversario è il robot nella casella immediata in quella direzione.

Sono disponibili 4 azioni:

  1. Moveti sposterà di 1 quadrato in avanti nella Ddirezione th. Se c'è un bot lì, non ti sposterai.
  2. Copy(A,B)copierà la variabile Ain B. Bnon può essere un valore numerico, ad eccezione di un nome di variabile. Ae Bnon può essere di diversi tipi. La copia di una riga non copia la condizione.
  3. Flagnon fa nulla. Il bot con il maggior numero di flag nel codice otterrà un punto. Vince il bot con il maggior numero di punti.
  4. If(C,L1,L2)eseguirà la linea L1se Cè vero, altrimenti esegue L2. Cè una condizione L1e L2deve essere linee.

La grande immagine

50 copie di ogni bot verranno posizionate nel mondo. Il tuo obiettivo è quello di ottenere la tua bandiera nel maggior numero possibile di robot. Per ogni bot che ha più del tuo tipo di bandiera di qualsiasi altro tipo di bandiera, ottieni un punto.

I robot saranno posizionati come segue:

B...B...B...B...
..B...B...B...B.
B...B...B...B...

Verranno giocate 10 partite e verranno calcolati i punti in media in tutte le partite, determinando chi è il vincitore.

Note laterali

Se si applicano più condizioni, Startverrà eseguita quella che segue immediatamente

I robot saranno imballati da vicino ma non inizierai a confinare con un altro robot. (Tecnicamente sarà lo stesso formato degli ultimi CodeBot)

Poiché questa sfida non è stata pubblicata nella sandbox (per non dare a nessuno un vantaggio), mi riservo il diritto di modificare piccoli dettagli per correttezza o funzionalità aggiuntive. Inoltre, se c'è un bug nel runner CodeBots, lo cambierò, anche se un bot dipendesse da quel bug per il suo successo. Sto cercando di essere il più equo possibile.

Le Ifdichiarazioni ricorsive non verranno eseguite

Se il tuo bot è più corto di 24 righe, le righe rimanenti verranno riempite Flag

Ricorda quando copi per conto tuo C, che Cviene incrementato alla fine del tuo turno.

L'interprete CodeBots può essere trovato qui . Include un file .jar per una facile esecuzione. Aggiungi semplicemente il tuo bot alla cartella bot

I punteggi

  1. 893,9 Borg
  2. 1.3 LazyLioness
  3. 0.9 Difensore
  4. 0,5 Flagger
  5. 0.4 CliqueBot
  6. 0.4 Insidioso
  7. 0.3 Attaccante
  8. 0.3 Gard
  9. 0.3 SingleTarget
  10. 0.2 FreezeBot
  11. 0.2 Sentinel
  12. 0.2 Driveby
  13. 0.0 AntiInsidious
  14. 0.0 MoveBot
  15. 0.0 CliqueBorg
  16. 0.0 Calcolatrice
  17. 0.0 TestBot
  18. 0.0 Imitatore

AGGIORNARE

Le linee di codice ora vengono ruotate quando visualizzi il codice del tuo avversario. Ciò significa che la linea 1 del tuo avversario può essere la linea 14 (o qualunque altra linea). Un bot avrà un offset fisso che compenserà le sue linee in base Xall'importo se visto da un avversario . Anche la Cvariabile dell'avversario sarà compensata dello stesso Ximporto. Xnon cambierà all'interno dello stesso gioco, ma cambierà da gioco a gioco.


Nathan: Sei in grado di controllare "Lazy Lioness" per vedere se i bug che ho segnalato sono legittimi (o se sono solo a pranzo)? Senza fretta. Assicurati solo di essere consapevole dell'invio.
COTO

@COTO Mi dispiace, le scuole sono state pazze. Proverò ad arrivarci stasera.
Nathan Merrill,

La condizione "Tutto" potrebbe essere resa implicita per qualsiasi elenco di condizioni separato da virgole. Renderebbe più semplice la lettura delle voci.
ccarton,

Penso di aver trovato il tuo bug. Gli oggetti FuctionParser vengono utilizzati come chiavi in ​​una HashMap, il che significa che è necessario un metodo equals adeguato. Questo risolve il problema con CliqueBot e probabilmente anche Lazy Lioness. Ti ho inviato una richiesta pull.
ccarton,

@ccarton the HashMap memorizza solo i valori, non è usato per testare l'uguaglianza
Nathan Merrill

Risposte:


13

Borg

Converte tutti gli altri robot in cloni di se stesso. La resistenza è inutile.

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

Modifica: piccola correzione per resettare A se l'avversario si muove prima che io abbia finito con lui. Non sembra influenzare il punteggio ma mi fa sentire meglio.

Modifica n. 2: aggiunto un controllo più completo per assicurarsi che il processo di clonazione sia stato completato correttamente (riga 3)

Modifica n. 3: aggiorna per gestire i nuovi offset casuali. La difficoltà qui era che i nuovi cloni avrebbero il loro codice situato in offset casuali, il che significa che non conoscono la posizione delle proprie linee. Ciò significa che tutti i riferimenti alle mie linee devono essere relativi (a This). I numeri di riga dell'avversario possono comunque essere assoluti poiché sono casuali comunque.


Ehi, possiamo parlare di questo bot? chat.stackexchange.com/rooms/17128/…
Nathan Merrill

@Nathan, hai utilizzato l'ultima versione di questa voce nella corsa più recente?
ccarton,

Sono sorpreso che questo bot sia in grado di infettare altri robot con tanto successo. Mi piacerebbe vedere una carrellata di come funziona.
Sparr,

@ccarton no. Non mi ero reso conto che fosse aggiornato. Rieseguire.
Nathan Merrill,

@Sparr Ho aggiunto alcuni commenti. Spero che sia più facile da seguire. Penso che il bot sia così efficace a causa dell'effetto esponenziale della clonazione. Ogni bot infetto si spegne e infetta gli altri. Inoltre, cercheranno naturalmente di ripararsi a vicenda quando subiscono danni.
ccarton,


3

Calcolatrice

Questo robot non capisce l'obiettivo di questa sfida, quindi ha deciso di calcolare alcuni numeri per il nemico.

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

dovresti mettere i risultati in OVar(D)no A!
MegaTom,

@MegaTom Done;)
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))

Riconosce gli amici attraverso il loro Bvalore, riempie le linee di tutti gli altri con le bandiere. Va anche oltre per preservare l'integrità di una delle sue bandiere (questa parte è carina ma probabilmente non molto utile).

Modifica: Non sorprende, sembra che ci sia un bug qui da qualche parte, a giudicare dal punteggio.

Sospetto che le righe siano indicizzate 0 e il mio codice sia indicizzato 1. Avrei dovuto verificarlo prima. Aggiunta una bandiera all'inizio per aggiungere tutto.


Penso di aver trovato il bug nel controller. Gli ho inviato una richiesta pull. Fino a quando non lo accetta, puoi provare la mia forchetta se vuoi e fammi sapere se funziona per te.
ccarton,

Il bug è stato corretto nell'ultima versione.
Nathan Merrill,

2

Difensore

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

aggressore

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))dove la riga X contiene Equals(1,1):Flag... per divertimento
vedere il

@Sieg Linecopia solo l'azione, non la condizione.
MegaTom,

La mia tattica sopraffatta :(
vedi il

2

Target singolo

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

Ti caccerà e ti riempirà di bandiere!


La Allcondizione ha bisogno di:)
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

Un'idea simile al bot con lo stesso nome nel concorso precedente. Sposta finché non colpisco un altro bot, quindi congelalo in un ciclo sovrascrivendo il suo codice con le mie bandiere. Questa volta i robot infetti sovrascrivono linee casuali invece di linee sequenziali, rendendo il processo di infezione un po 'meno efficace ma molto più veloce.


Line(4)può essere semplificato un po '. Add(OVar(C),0)è uguale a OVar(C)ed Add(This,Add(4,Mod(E,14)))è uguale a Add(This,4,Mod(E,14)).
MegaTom,

@MegaTom Ho fatto il primo Aggiungi non necessario per allineare le parti logiche delle linee precedenti. Il secondo era dovuto al fatto di non sapere che Aggiungi poteva accettare più parametri. Grazie
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)))

Attacca qualsiasi robot accanto ad esso.


L'ultima riga non può essere copiata da una condizione a una riga.
Nathan Merrill,

@NathanMerrill Stavo solo aggiustando quello ...
MegaTom il

OCondeve essereOCond
Nathan Merrill il

1

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

Ti intrappola in un ciclo Incriminando la tua Avariabile, quindi ti riempie di bandiere e passa alla prossima vittima.


Riga 3: sostituire D + 1 con Aggiungi (D, 1)
Nathan Merrill

Stai assumendo che Start sia sulla riga zero. Ora tutti sono incentivati ​​a mettere il proprio Start sulla linea 2. Questo porterà a una sciocca tendenza all'escalation / reinvio :(
Sparr,

1

Imitatore

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)

Prevede cosa faresti, quindi lo fa.


Sostituisci D + 1 con Aggiungi (D, 1)
Nathan Merrill

Inoltre, non è possibile passare un comando come linea. Devi passare un OLineo unLine
Nathan Merrill il

@NathanMerrill pronto per partire! (Almeno penso che lo sia)
MegaTom,

Questo bot ha davvero messo in difficoltà il mio codice, ma è stata colpa mia, non tua. Ci sono alcuni bug, per favore metti in Linegiro 2e Add(D,1)invece diD+1
Nathan Merrill,

1

Leonessa pigra

Inizialmente solo "Leonessa", la mia prima presentazione al concorso ha guadagnato il titolo "pigro" non facendo letteralmente nulla quando è stato introdotto nel simulatore.

La sua letargia è in realtà dovuta a un bug (o forse al mio malinteso sul modello di eventi) in cui le condizioni nelle prime tre righe (un semplice controllo di parità per garantire che le bandiere non vengano sovrascritte) occasionalmente, inspiegabilmente valutano true, bloccando leo in un ciclo lemniscato . Diverse altre condizioni (in particolare quelle che si basano sulla BotAt()condizione) valutano anche truein momenti in cui non sono presenti bot adiacenti. Infine, Movee Copyle direttive sono chiaramente ignorati quando si passa attraverso il simulatore. Poiché le mie catene logiche condizionali sono in qualche modo epiche, c'è molto spazio per i bug nel mio codice e nel simulatore. ;)

In ogni caso, invio Lazy Lioness come test per la diagnosi degli errori o il debug del simulatore, che si spera porterà all'emergere di Lioness non così pigra che posso quindi simulare e perfezionare come la mia prima presentazione in buona fede ai robot competizione v2.

Non fa niente

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)

Non riesco a vedere un bug, ma nel caso dovessi probabilmente usare la Modifiedcondizione invece di alcuni deiEquals
MegaTom

cliqueBot sembra che abbia lo stesso problema. Penso che sia un bug del compilatore.
Megatom

@MegaTom: la Modifiedcondizione è un invito per un ciclo infinito. Se non riesco a utilizzare un controllo di parità, rimuoverò completamente le righe. Scopri qualcos'altro utile da inserire. ;)
COTO

Penso di aver trovato il bug nel controller. Gli ho inviato una richiesta pull. Fino a quando non lo accetta, puoi provare la mia forchetta se vuoi e fammi sapere se funziona per te.
ccarton,

1

sentinella

improvvisazione su Gard. Colpisce i robot vicini con le bandiere sulle prime 8 linee. (cioè tutti quelli più usati)

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

Penso che tu abbia una parentesi fuori posto nella riga 3. Il primo Not non è chiuso correttamente. Penso che dovrebbe essereAll(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)))

Cercando di combinare la tecnologia CliqueBot e Borg per creare un bot che riconosca le copie di se stesso nonostante l'offset della linea. Avvia anche il suo processo di copia sull'ultima riga di codice eseguita sul bot opposto, piuttosto che sulla riga 0, che ha maggiori probabilità di bloccarlo in posizione ma anche più probabilità di provocare una copia danneggiata (in effetti, non lo sono certo che funziona anche, non l'ho provato ed è piuttosto complesso).


Sostituisci Plus con Add e Minus con Sub
Nathan Merrill

1

driveby

Un ultimo tentativo prima della scadenza.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.