CodeBots 2: Olaya Dayalı Tasarım


11

Code Bots 2'ye hoş geldiniz!

Dersinizi son Kod Botlarından beri öğrendiniz. Daha az çizgiye daha fazla eylem sığdırmak için daha fazla yol bulmaya çalıştınız ve şimdi sonunda var. Olaya dayalı bir Kod Botu yapacaksınız.

Botunuz 24 hattan oluşmalıdır. Her satır iki formattan birini takip eder:

Condition:Action

veya

Action

Sizin bot da adlandırılan 5 tamsayılar depolamak için yeterli depolama alanının Aiçinden E. Bir tam sayı, 0 ile 23 arasındaki değerleri saklayabilir.

Her turlu, çizgiyi çalıştırır C, sürece koşullardan biri doğrudur. Eğer öyleyse, o Czaman doğru olan koşulun satır numarasını içerecek ve o satır yürütülecektir. Her turun sonunda Cartırılacaktır.

Mevcut koşullar vardır:

  1. Startsadece ilk dönüşte doğrudur. Bunu tam olarak bir kez kodunuzda bulundurmalısınız
  2. BotAt(N) N tarafından tanımlanan konumda bir bot varsa doğrudur
  3. Equals(A,B) A B'ye eşitse doğrudur. Farklı türler olabilirler, öyleyse eşit olmazlar.
  4. Modified(A)Ason dönüş sırasında kopyalandıysa doğrudur . Adeğişken adı, çizgi veya koşul olmalıdır
  5. Any(C1,C2,...) koşullardan herhangi biri doğruysa doğrudur
  6. None(C1,C2,...) koşullardan hiçbiri doğru değilse doğrudur
  7. All(C1,C2,...) tüm koşullar doğruysa doğrudur
  8. Not(C)C yanlışsa doğrudur. Cbir şart olmalı.

Değişkenler aşağıdaki biçimlerden birinde olabilir. İlk 9 rakamsaldır ve bu sayfada N kullanıldığında kullanılabilir.

  1. A, B, C, D,E
  2. 0'dan 23'e kadar bir sayı
  3. This şu anda bulunduğu satır numarasını döndürür
  4. Add(N1,N2,...) tüm değerlerin toplamını döndürür
  5. Sub(N1,N2) N1 eksi N2 döndürür
  6. Mult(N1,N2,...) tüm değerlerin ürününü döndürür
  7. Div(N1,N2) N1'i N2'ye böler
  8. Mod(N1,N2) N1 mod N2'yi döndürür
  9. OVar(N) değişken adını kabul eder ve rakibin değişkenini döndürür
  10. Line(N) kodunuzdaki N. satırı döndürür
  11. Type(N) kodunuzdaki N. satır türünü döndürür (türler işlemlerin adlarıdır)
  12. Cond(N) N'inci satırdaki koşulu döndürür
  13. CondType(N) Nth satırındaki koşul türünü döndürür (türler koşulların adlarıdır)
  14. OLine(N) rakibinizin kodundaki N. satırı döndürür
  15. OType(N) rakibinizin kodundaki N. satır türünü döndürür
  16. OCond(N) Nth satırındaki koşulu döndürür
  17. OCondType(N) Nth satırındaki koşul türünü döndürür

Ave Bkişisel kullanım için, olan Ckodunuzu çalıştırmak için hangi çizgiyi belirlemek için kullanılır ve Dbir yönü olarak kullanılmaktadır. Her bir değer Dfarklı bir kare ve yön çiftini ifade eder. Eher seferinde rastgele bir değer üretir. Dve Erastgele bir değere sıfırlanır 0.

Kullanılan yön olacaktır [North,East,South,West][D%4]. Rakibiniz bu yönde en yakın karedeki bottur.

Kullanabileceğiniz 4 işlem vardır:

  1. Movesizi Dth yönünde 1 kare ilerletir . Orada bir bot varsa, hareket etmeyeceksin.
  2. Copy(A,B)değişkeni Aolarak kopyalar B. Bdeğişken adı dışında sayısal bir değer olamaz. Ave Bfarklı türlerde olamaz. Satır kopyalandığında koşul kopyalanmaz.
  3. Flaghiç birşey yapmıyor. Kodunuzda en çok bayrak bulunan bot bir puan alır. En çok puana sahip olan kazanır.
  4. If(C,L1,L2)üzerinde çizgi gerçekleştirecek L1eğer Cdoğruysa, değilse gerçekleştirdiği olduğunu L2. CBir durumdur ve L1ve L2çizgiler olmalıdır.

Büyük resim

Dünyada her botun 50 kopyası yer alacaktır. Amacınız, bayrağınızı mümkün olduğunca çok bota sokmaktır. Diğer bayrak türlerinden daha fazla bayrak türünüz olan her bot için bir puan alırsınız.

Botlar aşağıdaki gibi yerleştirilecektir:

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

10 oyun oynanacak ve kazananın kim olduğunu belirleyerek tüm oyunlarda puan ortalaması alınacaktır.

Yan Notlar

Birden fazla koşul geçerliyse, en yakın takip eden koşul Startyürütülecektir

Botlar yakından paketlenecek, ancak başka bir botu komşu yapmaya başlamayacaksınız. (Teknik olarak son CodeBots ile aynı formatta olacaktır)

Bu meydan okuma kum havuzuna gönderilmediğinden (kimseye avantaj sağlamak için), adalet veya ek yetenekler için küçük ayrıntıları değiştirme hakkını saklıyorum. Ayrıca, CodeBots koşucusunda bir hata varsa, bir bot başarısı için bu hataya bağlı olsa bile, onu değiştireceğim. Mümkün olduğunca adil olmaya çalışıyorum .

Yinelemeli Ififadeler yürütülmez

Botunuz 24 hattan daha kısaysa, kalan hatlar Flag

Kendi kopyalama yapılırken hatırla Cki Csenin dönüşün sonunda artırılır.

CodeBots yorumlayıcısı burada bulunabilir . Kolay yürütme için bir .jar dosyası içerir. Botunuzu bot klasörüne eklemeniz yeterlidir

Skorlar

  1. 893.9 Borg
  2. 1.3 LazyLioness
  3. 0.9 Defans
  4. 0.5 İşaretleyici
  5. 0.4 CliqueBot
  6. 0.4 Sinsi
  7. 0.3 Saldırgan
  8. 0.3 Gard
  9. 0.3 Tek Hedef
  10. 0.2 FreezeBot
  11. 0.2 Sentinel
  12. 0.2 Sürücü
  13. 0.0 Anti-Sinsi
  14. 0.0 MoveBot
  15. 0.0 CliqueBorg
  16. 0.0 Hesap Makinesi
  17. 0.0 TestBot
  18. 0.0 Taklitçi

GÜNCELLEME

Kod satırları artık rakibinizin kodunu görüntülediğinizde döndürülür. Yani rakibinizin 1. çizgisi 14. çizgi (ya da herhangi bir çizgi) olabilir. Bir bot, bir rakip tarafından bakıldığında çizgilerini Xmiktarına göre dengeleyecek sabit bir ofsete sahip olacaktır . Rakibin değişkeni de aynı miktarda dengelenecektir . aynı oyunda değişmeyecek, ancak oyundan oyuna değişecek.CXX


Nathan: Bildirdiğim hataların meşru olup olmadığını (ya da sadece öğle yemeğine çıkıp çıkmadığımı) görmek için "Tembel Dişi Aslan" a bakabilir misin? Acele etme. Sadece gönderimden haberdar olduğunuzdan emin olun.
COTO

@COTO Üzgünüm, okullar deliydi. Bu gece ona ulaşmaya çalışacağım.
Nathan Merrill

'Tümü' koşulu, virgülle ayrılmış herhangi bir koşul listesi için örtük hale getirilebilir. Girişleri okumayı biraz daha kolaylaştıracaktır.
ccarton

Sanırım hatanı buldum. FuctionParser nesneleri bir HashMap içinde anahtar olarak kullanılıyor, bu da uygun bir eşitleme yöntemine ihtiyacınız olduğu anlamına geliyor. Bu, CliqueBot ve muhtemelen Lazy Lioness ile ilgili sorunu çözüyor. Sana bir çekme isteği gönderdim.
ccarton

@Ccarton HashMap yalnızca değerleri hatırlar, eşitliği test etmek için kullanılmaz
Nathan Merrill

Yanıtlar:


13

Borg

Diğer tüm botları kendi klonlarına dönüştürür. Direniş nafile.

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

Düzenleme: Rakip onunla bitmeden önce hareket ederse A'yı sıfırlamak için küçük düzeltme. Skoru etkilemiyor gibi görünüyor ama beni daha iyi hissettiriyor.

Düzenleme # 2: Klonlama işleminin düzgün şekilde tamamlandığından emin olmak için daha eksiksiz bir kontrol eklendi (satır 3)

Düzenleme # 3: Yeni rastgele ofsetleri işlemek için güncelleme. Buradaki zorluk, yeni klonların kodlarının rastgele ofsetlerde bulunmasıydı, yani kendi hatlarının yerlerini bilmiyorlardı. Bu, kendi satırlarıma yapılan tüm referansların göreli (- This) olması gerektiği anlamına gelir . Yine de rastgele oldukları için rakip satır numaraları hala mutlak olabilir.


Hey, bu bot hakkında konuşabilir miyiz? chat.stackexchange.com/rooms/17128/…
Nathan Merrill

@Nathan, bu girişin en son sürümünü en son çalıştırmada kullandınız mı?
ccarton

Bu botun diğer botlara bu kadar başarılı bir şekilde bulaşabildiğine şaşırdım. Nasıl çalıştığına dair bir özet görmek isterim.
Sparr

@ccarton no. Güncellenmiş olduğunu fark etmedim. Yeniden çalıştırmadan.
Nathan Merrill

@Sparr Bazı yorumlar ekledim. Umarım takip etmeyi kolaylaştırır. Botun klonlamanın üstel etkisi nedeniyle çok etkili olduğunu düşünüyorum. Enfekte ettiği her bot dışarı çıkar ve diğerlerine bulaşır. Ayrıca, doğal olarak hasar aldıklarında birbirlerini onarmaya çalışırlar.
ccarton


3

Hesap makinesi

Bu bot bu mücadelenin amacını anlamıyor, bu yüzden düşman için bazı sayılar hesaplamaya karar verdi.

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

sonuçları OVar(D)değil koymak gerekir 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))

Arkadaşlarını kendi Bdeğerleriyle tanır , herkesin çizgilerini bayraklarla doldurur. Ayrıca kendi bayraklarından birinin bütünlüğünü korumak için bir miktar uzar (bu kısım sevimli ama muhtemelen çok yararlı değil).

Düzenleme: Şaşırtıcı olmayan bir şekilde, bir yere burada bir hata var, puanına göre değerlendiriliyor.

Satırların 0 dizinli ve kodumun 1 dizinli olduğundan şüphelen. Gerçekten daha önce kontrol etmeliydim. Başlangıçta her şeyi bire bir çarpmak için bir Bayrak eklendi.


Kontrol cihazında hata bulduğumu düşünüyorum. Ona bir çek talebi gönderdim. Hasta bunu kabul kadar, benim deneyebilirsiniz çatal isterseniz ve sizin için çalıştığını bana bildirin.
ccarton

Hata en son sürümde düzeltildi.
Nathan Merrill

2

savunma oyuncusu

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

saldırgan

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))X satırında Equals(1,1):Flag... eğlence için
seequ

@Sieg Line, koşulu değil, yalnızca eylemi kopyalar.
MegaTom

Benim aşırı güç taktik :(
seequ

2

Tek hedef

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

Seni avlayacak ve bayraklarla dolduracak!


AllDurum bir ihtiyacı)
Nathan Merrill

2

Sinsi

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

Önceki yarışmada aynı isme bot ile benzer bir fikir. Ben başka bir bot vurmak kadar hareket, sonra benim bayrak ile kendi kodu üzerine bir döngü içine dondurmak. Bu kez enfekte botlar, sıralı hatlar yerine rastgele hatların üzerine yazarak enfeksiyon sürecini biraz daha az etkili ama çok daha hızlı hale getirir.


Line(4)biraz basitleştirilebilir. Add(OVar(C),0)ile aynı OVar(C)ve Add(This,Add(4,Mod(E,14)))aynıdır Add(This,4,Mod(E,14)).
MegaTom

@MegaTom Önceki satırların mantıksal bölümlerini hizalamak için ilk gereksiz Ekle'yi yaptım. İkincisi, Add'in birden fazla parametre alabileceğini bilmemesiydi. Teşekkürler
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)))

Yanındaki tüm robotlara saldırır.


Son satırınız bir koşuldan bir satıra kopyalanamaz.
Nathan Merrill

@NathanMerrill Ben sadece bunu tamir ediyordum ...
MegaTom

OCon olması gerekir OCond
Nathan Merrill

1

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

Sizi bir döngüde yakalar Kendi Adeğişkeninizi suçluyor , sonra sizi bayraklarla dolduruyor ve bir sonraki kurbana geçiyor.


Satır 3: Lütfen D + 1'i Add (D, 1) ile değiştirin
Nathan Merrill

Start'ın sıfır satırında olduğunu varsayıyorsunuz. Şimdi herkes hattı 2. Bu :( saçma yükseltme / yeniden gönderim eğilimine kurşun gidiyor kendi Başlat koymak düşülerek geriye
Sparr

1

kopyacı

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)

Ne yapacağınızı tahmin eder, sonra yapar.


Lütfen D + 1'i Add (D, 1) ile değiştirin
Nathan Merrill

Ayrıca, bir komutu satır olarak iletemezsiniz. Ya bir OLineya da bir geçmek zorundasınızLine
Nathan Merrill

@NathanMerrill gitmeye hazır! (En azından öyle olduğunu düşünüyorum)
MegaTom

Bu bot gerçekten kodumu bazı sorunlardan geçirdi, ama bu benim hatamdı, senin değil. Birkaç hata var, lütfen Lineetrafına koyun 2ve Add(D,1)yerineD+1
Nathan Merrill

1

Tembel Dişi Aslan

Başlangıçta sadece "Lioness", yarışmaya ilk gönderim simülatörde tanıtıldığında hiçbir şey yapmadan "tembel" unvanını kazandı.

Onun uyuşukluğu aslında ilk üç satırdaki koşulların (bayrakların üzerine yazılmadığından emin olmak için basit bir parite kontrolü) zaman zaman, açık bir şekilde değerlendirmek true, bir lemniscate döngüsünde leo kilitlemek . Birkaç başka koşul (özellikle koşula bağlı olanlar BotAt()) true, bitişik botların olmadığı zamanlarda da değerlendirilir . Son olarak, Moveve Copysimülatör ilerlerken hangi direktifler açıkça göz ardı edilir. Koşullu mantık zincirlerim biraz destansı olduğu için kodumdaki hatalar için bolca yer var ve simülatörde . ;)

Her halükarda, Lazy Lioness'i hata teşhisi veya simülatör hata ayıklaması için bir test örneği olarak sunuyorum, bu da umarım tembel olmayan Lioness'in ortaya çıkmasına neden olacak ve daha sonra Botlara ilk iyi niyetli sunumum olarak rafine edebilirim. v2 yarışması.

Hiçbir Şey Yapmaz

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)

Ben bir hata göremiyorum, ama muhtemelen Modifiedbazı yerine koşul kullanmanız gerekirEquals
MegaTom

cliqueBot da aynı sorunu yaşıyor gibi görünüyor. Bence bir derleyici hatası.
MegaTom

@MegaTom: ModifiedKoşul, sonsuz bir döngü için bir davettir. Eşlik kontrolünü kullanamazsam, çizgileri tamamen kaldıracağım. Bunları koymak için başka bir şey bul. ;)
COTO 10:14

Kontrol cihazında hata bulduğumu düşünüyorum. Ona bir çek talebi gönderdim. Hasta bunu kabul kadar, benim deneyebilirsiniz çatal isterseniz ve sizin için çalıştığını bana bildirin.
ccarton

1

nöbetçi

üzerinde gelişme Gard. İlk 8 satırda bayraklarla yakındaki botlara vurur. (yani en çok kullanılanlar)

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

Sanırım 3. hatta yanlış yerleştirilmiş bir braketiniz var. Bence öyle olmalıAll(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)))

Çizgi ofsetine rağmen kendi kopyalarını tanıyan bir bot oluşturmak için CliqueBot ve Borg teknolojisini birleştirmeye çalışıyor. Aynı zamanda kopyalama işlemini, 0 satırından ziyade karşı bot üzerindeki son yürütülen kod satırında başlatır, bu da yerine donması daha olasıdır, ancak aynı zamanda bozuk bir kopyaya neden olma olasılığı daha yüksektir (aslında, Bu bile işe yarıyor, ben test etmedim ve oldukça karmaşık).


Lütfen Plus'ı Ekle ve Eksi ile değiştirin
Nathan Merrill

1

Arabayla geçmek

Son başvuru tarihinden önce son bir deneme.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.