Genel değişkenlerde yanlış olan ne?


33

Kod Botları

Özel ve korunan değişkenlerden nefret ederim. Sadece her şeye ve her şeye erişmek istiyorum!

Eğer benim gibiyseniz, o zaman bu zorluk tam size göre!

Diğer botlarla uyum içinde birlikte çalışan bir bot yazın , diğer botlar istediğiniz şeyi yapar. Sen bir programcısın ve işlerin nasıl yürüdüğünü biliyorsun. İşiniz mümkün olduğu kadar çok diğer botları yolunuza dönüştürmektir.

Kod

Botunuzu yazmak için 24 kod satırı olacak. Her turda, her bot sırayla 1 satır yürütür.

Her bot 5 değişkene Akadar depolar E. Ave Bkişisel kullanım içindir, Cyürütmek üzere bir sonraki satırı Dsaklar, geçerli yönü saklar ve Erastgele bir sayıdır. DRastgele bir değerde başlayacak olan hariç, değişkenler 0'dan başlar. Tüm değişkenler sadece 0-23 depolar. Daha büyük veya daha küçük sayılar 24 ile modüle edilecektir.

Bu yazımda, karşınıza çıkan botun karşısına çıkmak için rakibi kullanacağım.

Her satır aşağıdaki 5 komuttan birini içermelidir:

  1. Flaghiç birşey yapmıyor. Bunun dışında kazandığın gibi
  2. Movebotunuzu Dth yönünde hareket ettirir . Bir bot zaten yer kaplarsa, hamle olmaz
  3. Copy Var1 Var2 Var1'in içeriğini Var2'ye kopyalar.
  4. If Condition Line1 Line2 Koşul doğruysa, Satır1'i, Satır2'yi çalıştır
  5. Block Var1 değişkende bir sonraki yazımı engeller

Bir değişken aşağıdaki gibi kullanılabilir:

#Vardeğişkeni satır numarası olarak kullanır. Eğer A17'dir, Copy #8 #Ahat 17 üzerine hat 8 içeriğini kopyalar *Varrakibin değişkeni kullanacağız. Copy 5 *CRakibin Cdeğişkeni 5 Var+Variki değişkeni ekleyecek. Copy D+1 Dbot sağa dönecek

Ne zaman Dbir yönü olarak kullanılmaktadır, [North, East, South, West][D%4]kullanılacak

Bu değiştiriciler zincirlenebilir: Copy *#*C #99. satırda rakibinizin gerçekleştireceği bir sonraki satırı kopyalar. 9. satırda **Drakibinizin rakibinin Ddeğişkenine işaret eder .

Bir Koşul aşağıdaki gibi değerlendirilecektir:

  1. Eğer Var:
    1. Var ise Ayoluyla CVar sıfırdan farklı, başka yanlış ise, bu doğru dönecektir.
    2. Var ise D, Dinci yönünde bir bot varsa doğru olur , aksi takdirde false
    3. Var ise E, E'nin tuhaf olması durumunda true döndürülür, aksi takdirde false
    4. Var bir çizgi ise, bir Bayrak çizgi ise doğru dönecektir.
  2. Eğer Var1=Var2:
    1. Her ikisi de A-Eeşitse ve aynı sayıya eşitse true değerini döndürür
    2. Her ikisi de satırsa, satır türü eşitse true değerini döndürür
  3. Eğer Var1==Var2:
    1. Her ikisi de A-Eeşitse ve aynı sayıya eşitse true değerini döndürür
    2. Her ikisi de satırlarsa ve aynıysa doğru döndürür (Farklı botlardan gelen bayraklar eşit olmaz)

Her bir tipten 50 bot, aşağıdaki şekilde bir toroidal dünyaya yerleştirilecektir:

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

5.000 turluk her oyundan sonra, her bottaki bayraklar sayılır. Bir bot sizin bayrağınızın diğer bayrağından daha fazlasına sahipse, puan kazanırsınız. NBotlar arasında bağ olması durumunda puan verilmez.

10 oyun olacak ve sonunda puanlar toplanacak.

Yan notları

Satır sonu açıklamalarına izin verilir ve //

Mantıklı olmayan bir şey yapmaya çalışmak, bir satıra eklemek gibi hiçbir şey yapmaz

Var olmayan bir botta bir şeyler yapmaya çalışmak hiçbir şey yapmaz

IfHiç bir idam yapılmadan sonsuz bir özgeçmiş sona erecek

If değerini değiştirmez C

BlockBiri ona yazmaya çalışıncaya kadar A süresi dolmaz

Aynı anda birden fazla değişken ve satır engellenebilir

Blockbir değişkeni birden çok kez kullanmak, ikinci blok ifadesi sizin ilkinizden farklı bir kod satırında olduğu sürece birden çok kez engeller

Boşluklara yalnızca argümanlar arasında izin verilir (ve komuttan sonra)

Bir bot 24 çizgiden daha kısaysa, Bayrak çizgilerin geri kalanı olacaktır.

Örnek Program

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

Program burada Python denetleyicim tarafından çalıştırılacak .

Java denetleyicidir burada Öyle hızlı çok daha iyi piton olandan ve görünüyor.

scoreboard:

  1. 6837 $ Kopyala
  2. 3355 Lockheed
  3. 1695 MindControl
  4. 967 Bizans
  5. 959 AttackOrElse
  6. 743 Cadmyllion
  7. 367 Grip
  8. 251 TheCommonCold
  9. 226 Magus
  10. 137 HideBlockAttack
  11. 129 RowBot
  12. 123 FastMoveCloneDodge
  13. 112 FastForwardClone
  14. 96 QuickFreeze
  15. 71 OnarımAndProtect
  16. 96 Süper Dondur
  17. 93 RovingVirus
  18. 80 ForwardClone
  19. 77 FreezeTag
  20. 68 Palimpseste
  21. 62 BlockFreezeAttack
  22. 51 RushAttackDodge
  23. 46 Engelleyici
  24. 40 TurretMaker
  25. 37 taklitçi
  26. 37 Kamikaze
  27. 35 BayrakEnjektör
  28. 33 RandomCopier
  29. 31 Sinsi
  30. 29 HappyAsAClam
  31. 25 NanoVirus
  32. 21 Nullifier
  33. 19 Nanoviris
  34. 17 BoringCopybot
  35. 16 Movebot
  36. 14 Bayrakbot
  37. 13 Nötrleştirici
  38. 12 Kanser
  39. 9 DNAbot
  40. 9 Parazit
  41. 8 MetaInsidious
  42. 8 Rebranding
  43. 8 AdaptiveBot
  44. 8 Üreme Botu
  45. 8 KungFuBot
  46. 5 Hızlı Dondurucu
  47. 4 Saldırgan

1
Java sınamaya hazır olduğunda bu konuda her şey olacağım.
Wasmoo

2
Asla Çekirdek savaşı oynamadığınızı varsayıyorum. en.wikipedia.org/wiki/Core_War
matt_black 20

Daha önce oynamamıştım ama bu mücadeleyi yazarken biraz okudum.
Nathan Merrill

Python denetleyicisi için bir düzeltme ekim var ve github'da size geri itmeye çalıştım ... ama izinlerim yok / gerçekten bilmiyorum. Yama, son 8 talimata yazma / atlama erişimine izin vermek için tüm "16" ları "num_lines" ile değiştirir; Ayrıca, "max_flag_count = 0" ifadesini, bazen üçüncü bir bot için iki yönlü bir kravat kazanan declare_flags () 'daki kravat koşulundan da kaldırır.
adipy

1
Bir sonraki savaşın turunun ne zaman gerçekleştirileceği hakkında bir ETA var mı? Aceleye gerek yok. Ben sadece merak ediyorum. Teşekkürler.
COTO

Yanıtlar:


13

Flagbot

Flag

Neden diğer botlar bana kodlarını verecek kadar iyi olacaksa, neden bir şeyler yapmaktan rahatsız olmalısınız?


8

Etiketi Dondur

Move
If D #3 #2
Copy 23 C
Copy 3 C
Copy #23 *#*C
Copy #21 *#*C+1
Copy #22 *#*C+2
Copy #21 *#*C+3
Copy #22 *#*C+4
Copy #21 *#*C+5
Copy #22 *#*C+6
Copy #21 *#*C+7
Copy #22 *#*C+8
Copy #21 *#*C+9
Copy #22 *#*C+10
Copy #21 *#*C+11
Copy #22 *#*C+12
Copy #21 *#*C+13
Copy #22 *#*C+14
Copy D+1 D
Copy 0 C
Flag
Flag
Copy C+23 C

Rakibi bir döngüde yakalayın, bayraklarıyla doldurun, bir sonraki rakibe geçin.


Copy C+23 CBu xD kodunun en kötü amaçlı satırı olmalı.
Cruncher

İlgilenirim. Bu iyileştirilebilir olabilir. Onları bayraklarla doldurmak yerine, kendilerini bayraklarla dolduran bir halka koyabilir misiniz? Yoksa bu senin bayrakların olarak sayılmaz mı?
Cruncher

Bu temiz ve uygulanabilir bir fikir, ama daha karmaşık. Bunu kullanan bir bot yazmalısınız :)
Sparr

2
Son sorunun cevabını biliyor musunuz? Or would that not count as your flags?. Çünkü eğer kendi bayraklarınız olarak sayılmazlarsa, kesinlikle iyi bir çözüm değil
Cruncher,

@Cruncher onlara bayraklarınızdan birini verebilir ve sizinkinden sayılabilecek şekilde kopyalamasını sağlayabilirsiniz.
Sparr

8

Parazit

Neden diğer botları öldürdün? Bu bot rakibin koduna bakar ve sadece bayrakların yerini alır.

Copy 1 A
Copy E D
Block #A
If *#A #C+3 #C
Copy A+A+A+A+A A
Copy C+19 C
Copy #C+4 *#A
Flag
Copy 1 A
Copy E D
Block #A
If *#A #C+3 #C
Copy A+A+A+A+A A
Copy C+19 C
Copy #C+4 *#A
Flag
Copy 1 A
Copy E D
Block #A
If *#A #C+3 #C
Copy A+A+A+A+A A
Copy C+19 C
Copy #C+4 *#A
Flag

8

$ Kopya

Bu bot COTO'nun Lockheed ile aynı tekniklerin çoğunu kullanıyor, bu yüzden utanmadan ödünç alıp geliştireceğim.

Bu, Cblokları kırmak için bir güvenlik açığından yararlanır ve nötrleştiriciyi tersine çevirir. Ayrıca bu nedenle mutlak olarak da yazılmıştır. CDeğişimin eski haline getirilmesi durumunda bunun kırılabileceğini düşünüyorum , ancak değişiklik sabit olduğu sürece, mücadele etmek için yeniden yazılabilir.

Sebep ne olursa olsun, sonunda ilmek eksikliği bu botu çok iyi yaptı.

Block #C+A 
If D #7 #13        //If [enemy] Copy 0 ELSE block
If D #8 #0         //If [enemy] Freeze 0 ELSE block
If D #9 #6         //If [enemy] FreezeCheck ELSE Inc
Move
Copy 0 C
Copy A+5 A          //Inc
Copy 23 *C          //Copy 0
Copy #10 *#*C+23    //FreezeAttack
If *#*C==#10 #11 #5 //FreezeCheck: If [frozen] GOTO Copy Attack ELSE GOTO [1]
Copy C+23 C         //FREEZE
Copy 13 C           //GOTO Copy Attack
Copy 15 C           //Loop Copy Attack
Block #C+A
Copy D+3 *D             //Copy Attack: Spin Enemy
Copy 0 *B               //Set enemy counter (a la COTO)
Copy #*B+0 *#*C+*B+1    //Copy my lines
Copy #*B+1 *#*C+*B+2    //Copy my lines
Copy #*B+2 *#*C+*B+3    //Copy my lines
Copy *B+3 *B            //Inc counter
If *B==0 #19 #12        //Loop check
Copy D+1 D              //Turn myself

1
İyileştirilmiş tasarımınıza boyun eğip, Botlar v. 3 yarışmasında tekrar karşılaşacağım. ;)
COTO 19

Dürüst olmak gerekirse, bunun herkes için bir grup çalışması olduğuna inanıyorum. Bu, model atmak için birkaç bot olmasaydı olmazdı. İlginç bir şekilde, bu botun eklenmesi skorbordun tamamen yeniden düzenlenmesini sağladı; blokaja bağımlı botlar kırılırken, bayrak değiştirmeye bağlı olanları yükseldi.
Wasmoo

Birisi bir yerde, Block'un gerçek davranışını ve bu bot ve Lockheed'in bundan nasıl faydalandığını özetleyebilir mi?
Sparr

Her satır, HappyAsAClam tarafından açıklanan şekilde blok tahakkuk ettirebilir . En önemlisi, yok değil aynı ile adlandırılan bloklar için yığını Cdeğerler. Böylece, Ifburada kullanılan istismar olan bir ifadeden çağrıldığında bir blok istiflenebilir . $ Copy Copy, başarılı olana kadar tekrar tekrar aynı satırda yürüterek blokları (istiridye gibi) kırar ve bu da Lockheed'e göre bir avantaj sağlar.
Wasmoo

7

Lockheed

Bu özel bot savaşına üçüncü (ve muhtemelen nihai) gönderim: kısaca Lockheed Reactor veya "Lockheed".

Block #C+A
If D #C+7 #C+1
Block #C+A
Move
Copy A+5 A
If A==0 #C+12 #C+21
Copy C+17 C
Copy D+3 *D
Copy C+9 C
Copy C+21 C
Copy C+23 C
Copy #C+23 *#*C+2
Copy #C+22 *#*C+1
Copy 0 *A
Copy #*A+C+9 *#*C+*A+1
Copy *A+1 *A
If *A==0 #C+15 #C+17
Copy D+1 D
Copy C+5 C

Özel teşekkür, @ 'Bir değişkeni birden fazla kez engellemek, ikinci blok ifadesi ilkinizden farklı bir kod satırında olduğu sürece birden fazla kez engelleyecektir.' basitçe doğru değil "sömürü. Bunu kapsamlı olarak kullanıyorum.

Ayrıca, rekabeti yönettiği ve simülatörü yayınladığı için Nathan Merill'e teşekkürler. Simülatör, tuning botlarında tamamen paha biçilemez. Kendi gözlerimle simüle etmeseydim buna inanmazdım, ama en kavramsal küçük bot özelliğinin eklenmesi ya da kaldırılması büyük başarı ile kaçırma başarısızlığı arasındaki fark anlamına gelebilir. Bunun iyi bir şey olup olmadığına dair parçalandım.


Bir değişkeni birden çok kez engellemek başarısız olur. Ancak, yalnızca aşağıdakileri engelleyemez: Aynı satırı yürütüyorsunuz ( Ifbu çizgiyi işaret edemezsiniz), Aynı değeri engelliyorsunuz (Tek bir satır, 1-24 satırlarını artan değişkenle engelleyebilir) ve blok henüz piyasaya sürülmedi (birisi bu değişkeni değiştirmeye çalıştı)
Nathan Merrill

OP'deki ifadeye itiraz ediyorum çünkü blok talimatı blok ifadesine değil IP'ye anahtarlanmış. Böylece, tek bir blok ifadesi, tüm talimatlar üzerinde 24 ayrı blok oluşturabilir. Ben "sürece çifti için bir blok (aynı şekilde değiştirilmelidir "ikinci blok deyimi ilk daha farklı bir kod satırında olduğu sürece" OP hükmü belirten göndermek C, <block target>) zaten yürürlüktedir değil". Diğer bir deyişle, blok ifadesinin açık olduğu satır istiflemeyle ilgisi yoktur, ancak blok doğrudan yürütülürse C= blok komut adresi
COTO

1
Bu bot harika! En iyi kavramları bir araya getirir. Bir düşman bulana kadar kendini korur, sonra düşmanı iki kez dondurur ve ters yönde serbest bırakmadan önce bir kopyasını hedefe yükler. Simülasyonlarda, kopyalarından birinin hasar görmüş bir orijinali tamir ettiğini gördüm. VAOV! Harika iş, COTO!
Wasmoo

6

Saldırı Veya Başka

Bizans gibi savunma robotları çok iyi görüyordu, ben de bir savunma robotu yapmaya karar verdim.

Bunun düşmanın bulunup bulunmadığına bağlı olarak iki düzeni vardır.

  • Düşman mevcut değilse, çizgisini 3 tur boyunca engeller ve sonra hareket eder.
  • Düşman varsa, düşman O bayrağı (zayıf çoğaltıcı) kopyalamak neden olur onun bayrağını kopyalama ve kodu kopyalayarak arasında dönüşümlü onu kopyalar onun bayrağı
  • Döngünün sonunda rastgele bir yöne dönüşür ve devam eder.
  • Kodunun çoğu yönü çoğaltılmıştır

Daha fazla test birkaç önemli kavram gösterdi:

  • "Rastgele dönüş", "Sağa dönüş" den çok daha iyi bir performans sergiledi (alternatifin üzerinde +2700)
  • Blok artışının, A+7diğer artışlardan daha etkili olduğu gösterildi (bir sonraki en iyi +200)
  • "Doğrudan saldırı", "Zayıf kopyalayıcı" dan daha iyi olduğu gösterilmiştir (alternatif üzerine +900)
  • Diğer kombinasyonlardan daha iyi "3-1-2-1" Savunması (sonraki en iyi +200)
  • Yinelenen saldırı, blok ve döngü kodu skorunu iyileştirir (çoğaltılmamışa göre +300)
  • Çoğaltılmış blok artışı puanını iyileştirmez (çoğaltılmış +400'den fazla)

Simülasyonu grafiksel olarak Java UI üzerinden gözlemlemek çok yardımcı oldu. Teşekkür ederim! Aşağıda yeni ve geliştirilmiş kod var. Daha fazla bir şey yapabileceğimi sanmıyorum.

Block #C+A          //Dynamic block for If statements
If D #20 #0
If D #19 #8
If D #20 #23
If D #19 #0
If D #20 #8
If D #19 #23
Copy A+7 A          //Increment dynamic block
Block #C+A          //Dynamic block for If statements
If D #19 #8
If D #20 #0
If D #19 #8
If D #20 #23
If D #19 #8
If D #20 #0
If D #19 #23
Copy E D            //Turn Random
Copy 23 C           //Loop to beginning
Copy 23 C           //Loop to beginning
Copy #22 *#*C+1     //Copy my flag to the enemy's next
Copy #21 *#*C+1     //Copy my flag to the enemy's next
Flag
Flag
Move

Bu bot cidden harika oldu. Ve GUI için açığız.
Nathan Merrill

Performansını önemli ölçüde artıran ikinci bir döngü içerecek şekilde güncelleştirdim. Ayrıca Java’da engellemenin engelleyenin temeline dayandığını fark ettim C. Bu botun dayalı bir döner Bloğu Colduğundan, komutlarının her birinde birden fazla blok tahakkuk ettirilecektir. Bu botu daha da savunmacı yapıyor.
Wasmoo

Anladığım kadarıyla, menşeli talimat başına yalnızca bir blok oluşturulabildiği için yukarıdaki kodunuz herhangi bir talimat için yalnızca tek bir blok oluşturabilir (ve her talimat için tek bir blok oluşturmak tam 24 * 17 tur alacaktır). Anlayışım yanlışsa, "Bir değişkeni birden çok kez engellemek, ikinci blok ifadesi ilkinizden farklı bir kod satırında olduğu sürece birden çok kez engelleyecektir." OP'de değişiklik yapılması gerekiyor, çünkü Wasmoo'nun kodu herhangi bir talimat üzerinde birden fazla blok oluşturabiliyorsa, bu ifade (açıkçası) yanlıştır.
COTO

@COTO: Java simülatörü Ifbir listeye satır başına bir blok ekler ve Conu çağıran değişkeni tuşlar . Dolayısıyla, 1 Blok ve 9 ile Blok ifadesini uygulayan bot, bot, her satır için 10 Blok'a kadar alabilir, (en az 24 * 10 * 10 dönüş alarak) Belki OP, simülasyonu doğru bir şekilde iletmedi.
Wasmoo

Çekirdek konseptini korurken diğer iyileştirme yinelemelerini yansıtmak için kodu tekrar güncelledim. Bunun, Zayıf Çoğaltma'dan Doğrudan Saldırıya ve Çoğaltılmamışa Çoğaltılmışa geçiş gibi her yinelemeyle forumu tıkamaktan daha iyi olacağını düşündüm. Orijinali tekrar basmamı istersen, yapabilirim.
Wasmoo

5

Satır Bot

Move
If D #7 #0
If D #7 #0
If D #7 #0
If D #7 #0
If D #7 #0
Copy 0 C
If D=*D #9 #8     //If they point in a different direction
Copy *D D           //fix that
If #A==*#A #10 #11  //Did we copy line A already?
Copy A+1 A          //If so, A++
Copy #A *#A         //else, copy it!

Bir robot bulana kadar hareket eder.
Bu robotu kendisiyle aynı yöne ayarlayacağım.
Daha sonra kodunu robota kopyalayacağım.
Bu bir satır "Row Bot" Robots yapmalıdır. :)


İki (kolayca düzeltilebilir) sorun var. İlk olarak Ififadelerin büyük harfle yazılması gerekir. İkincisi, =benzerlerinin her iki tarafında da boşluk olmamalıdır D=*D.
PhiNotPi

Bu harika bir fikir.
Sparr

Bir bayrak olmadan kazanamazsınız.
Paŭlo Ebermann

3
@ PaŭloEbermann botları 24 satıra kadar bayraklarla doldurulduğundan, bu botun sonunda 12 tane kapalı bayrak var.
Sparr

5

Süper Dondur

Move                    // start moving!
Block #E
If D #12 #0             // 8 turns of attack or move
If D #12 #0
If D #12 #0
If D #12 #0
If D #12 #0
If D #12 #0
If D #12 #0
If D #12 #0
Copy D+1 D              // change direction
Copy 0 C                // start over
If *#*C==#23 #13 #14    // if opponent is frozen, give them a flag, otherwise freeze them
Copy #C+13 *#E          // give a flag to opponent
Copy #23 *#*C           // copy freeze line to opponent
Flag                    // 8 flags, one per If above
Flag
Flag
Flag
Flag
Flag
Flag
Flag                    
Copy C+23 C             // this line freezes any bot that executes it

Bu bot, çalışana kadar önündeki botu dondurmaya çalışıyor, sonra rastgele çizgilere bir sürü bayrak yazıyor ve 8 tur sonra döner ve başka bir rakibe doğru ilerler.


5

Bizans

Bayrakları ve meta blokları da dahil olmak üzere en hassas komutlar (örneğin kritik blok talimatlarındaki bloklar) üzerinde çok sayıda blok oluşturan yüksek savunma botu.

Ayrıca, öngörülemeyen yollarla sürekli hareket eder ve bayraklarını en iyi çaba temelinde rakipler üzerinde sayısız yere yerleştirir.

Block #A
Block #A+1
Block #A+2
Copy E D
Move
Block #A+3
Block #A+4
Move
Copy #22 *#*C+1
Copy E D
Move
Block #A+5
Block #A+6
Block #A+7
Move
Copy #22 *#23
Block #A+8
Block #A+9
Block #A+10
Copy #22 *#2
Copy A+14 A
Move
Flag
Copy #22 *#*C+12

Nasıl performans göstereceğinden emin değilim, çünkü ben simülasyon yapamam. Ama bir şans vereceğiz. ;)


feragat

Bunu PhiNotPi tarafından koşullu mantığın bedelsiz olduğu konusunda nazikçe bilgilendirilmeden önce yazdım. Ancak, hiç bir zaman çok fazla bot olamayacağı için onu bırakmaya karar verdim.


bu bot kazanıyor!
justhalf

4

Cadmyllion

“Sadece savaş rotasında bir bot girdim” dedim. "Yavaş botlarla saldırıları önlemek için her birkaç turda bir hareket eder."

"Yavaş botlarla ne demek istiyorsun?" PhiNotPi soruyor.

“Koşullu mantığın uzun zincirlerini değerlendiren sıkışmış botlar” diye cevap veriyorum.

PhiNotPi, "'If', diğer ifadelere yönlendiren ifadeler --- diğerlerini içeren 'if' ifadeleri --- aynı sırayla yürütülür," diyor.

İnternethaber.com "Tatlı montaj kuralları katledildi!" Ağlarım. “Bu fikri kim buldu?”

... ve böylece Cadmyllion'un nasıl ortaya çıktığına dair bir hikaye.

Cadmyllion: Tek bir talimatta sonsuz sayıda koşullu ifadeyi değerlendirmek için gerçeküstü yeteneği mutlu bir şekilde kullanan bot ... koşullu yaptığı her şeyi yaparak.

kod

If D #15 #19
Move
If D #16 #20
Copy D+3 D
Block #A
If D #15 #20
Copy A+1 A
If D #16 #1
Move
If D #15 #19
If D #16 #4
Copy E D
Block #A+12
Copy C+10 C
Flag
If *#0==#14 #17 #21
If *#0==#14 #18 #21
If *#*C+1==#14 #18 #22
Copy *C+11 *C
Block #A+6
Block #A+18
Copy #14 *#0
Copy #23 *#*C+1
Flag

4

Sinsi Meta

Bu bot donuyor ve sonra rakipleri Sparr's Insidious'ın daha az verimli versiyonlarına dönüştürüyor , sırayla rakipleri benim için spam işaretleyen botlara dönüştürüyor. Bu muhtemelen yazdığım en karmaşık bottur ve bu yüzden korkunç bir şey yapmasını bekliyorum, engelleme için yer yoktu ve kodda sadece bir bayrak var. Botları sinsi bir klona dönüştürmek de çok uzun sürüyor.

En büyük zorluk, sinsi klonların kodunu, bottaki konumundan bağımsız olarak çalışacak şekilde yazmaktı. İkinci-son kodu tam olarak dondurmanın bulunduğu yere yapıştırdığımda donma ortadan kalkar, bu tam zamanında rakibi başlatır.

If D #2 #1
Copy 23 C
Copy #8 *#*C // freeze the opponent
Copy 9 A
Copy #A *#A+*C // copy the next line at the appropriate  line
Copy A+1 A
If A==0 #7 #23
Copy 23 C
Copy C+23 C
If D #C+2 #C+23 // the code for the Insidious clone starts here
Copy C+21 C
Copy C+2 C
If D #C+6 #C+22
If D #C+5 #C+22
If D #C+4 #C+20
If D #C+3 #C+19
If D #C+2 #C+18
Copy E D
Copy #C+7 *#*C
Flag
Copy C+3 A
Copy #C+22 #A
Copy A+1 A
Copy C+21 C // And ends here

Bu akıllıca bir fikir. Ancak, herhangi bir Move komutu görmüyorum. Bu ne botunuz ne de spam botunuzun hareket edemeyeceği anlamına mı geliyor?
Wasmoo

Sinsi klonlar, orijinal koddakilere bağlı olarak hareket edebilir, sınırlı alan nedeniyle, 24 satırda bunu mümkün kılmak için oldukça fazla bir işlevsellik atılmak zorunda kaldı. Gerçekten her şeyden çok zihinsel bir egzersizdi.
otorractor

3

Onarım ve Koruma

Bu bot, yeni tamir edilmiş hatları korurken kendi kodunu onarır.

If #A==#A+16 #C+1 #C
Copy #A #A+8
Block #A+8
Copy A+1 A
Copy E D
Move
Copy #C+1 *#*C
Flag
If #A==#A+16 #C+1 #C
Copy #A #A+8
Block #A+8
Copy A+1 A
Copy E D
Move
Copy #C+1 *#*C
Flag
If #A==#A+16 #C+1 #C
Copy #A #A+8
Block #A+8
Copy A+1 A
Copy E D
Move
Copy #C+1 *#*C
Flag

Açıklama:

İlk değeri Aşudur 0ve satırlar 0-23 olarak numaralandırılır. Eğer Ififade çalıştırılmış ve yanlış ise, aynı satırı tekrar çalıştırmayı dener. Kontrolör, bir botun aynı hattı iki kez çalıştırmasına izin vermez, bu yüzden dönüş sona erer ve Carttırılır 1.

Bir sonraki satır, Copy #A #A+8gerçekte Ififadenin değerinden bağımsız olarak gerçekleştirilir . Aradaki fark, eğer doğru ise iki, yanlış ise bir kez idam edilir. Satır #A+8engellenirse (en sonunda gerçekleşirse), aslında kopya ile iki kez gerçekleştirilirse, bir kez gerçekleştirilirken engeli kaldırır. Ardından, yeni kopyalanan satır korumak için engellenir.


Hepinizin botlarını anlamaya çalışıyorum ama sıkışıp kaldım. İlk değeri nedir A? Öyle değil mi 0? Öyleyse ilk satırınız satır 0 ile satır 16'yı karşılaştırır, ancak OP örnek bottan anladığım gibi ilk satır satır 1'dir, değil mi? Ek olarak, yine de ilk satırınızda, #Cbu satırın sonuna atıfta bulunuyorsunuz, bu, Ififadenin yanlış olması durumunda, sonsuz bir döngüde sıkışıp kaldığınız anlamına mı geliyor ?
plannapus

@plannapus Bir açıklama ekledim.
PhiNotPi

3

Neutralizer

Bu bot kurbanını tüm programını yeniden yazarak 0 puan kazandırıyor. Virüs yerleştiğinde, devam eder. Bu, zafere kavurulmuş bir dünya yaklaşımıdır.

If D #C+2 #C+3          // A: If [enemy exists] B else C
Copy C+22 C             // GOTO A
If *#*C==#7 #C+4 #C+5   // B: If [enemy was neutralized] D else E
Move                    // C: Move
Copy E D                // D: Turn Randomly
Copy #7 *#*C            // E: Neutralize enemy
Copy C+1 C              // Skip the next line
Copy #C #C+1            // Neutralizing Code [Copy this line to next line]

Karşılaştırma *#*C==#7, rakibin kaymasını doğru ayarlamıyor gibi görünüyor, ancak bot sonunda ilerliyor.


Copy C+1 Ctek bir satır atlamak için gerekli olan tek şey.
Nathan Merrill

2
'Bir sonraki satırı atla', botunuzun devam etmeden önce bayrak talimatlarını uygulamak için 16 tur harcayacağı anlamına gelir. Bunun Copy 23 Cyerine oraya gitmek isteyebilirsiniz , ilk satıra geri dönmek için.
Sparr

'Bir sonraki satırı atla' sadece 'GOTO A' üzerine yazıldığında gerçekleşir. Bu botu “A” nın tekrarlanması, kodun tekrarlanması ve “GOTO A” nın engellenmesi gibi daha saldırgan ve savunmacı hale getirmenin başka yolları da var. Ancak, eğer bu bot hiç etkilenmediyse, yine de hemen hemen ölü.
Wasmoo

3

Sinsi

Move
If D #4 #0
If D #4 #0
Copy 0 C
Copy 4 C
If D #12 #11
If D #12 #11
If D #12 #11
If D #12 #11
If D #12 #11
Copy D+1 D
If D #4 #3
Copy #C+8 *#*C
Flag
Copy C A
Copy #C+22 #A
Copy A+23 A
Copy C+21 C

@Cruncher'dan ilham alan bu bot, diğer botlara küçük bir kod bloğu bulaştırarak diğer botu bu botun bayraklarıyla dolduruyor. Bu botlar daha sonra saldırmak için ördekler oturuyor, ancak başka biri tarafından tekrar enfekte olduklarında çoğunlukla bayraklarımla dolu olacaklar.

Düzenleme: golf yardımı için @PhiNotPi, verimlilik danışmanlığı için @haraççı sayesinde


2k isabet tebrikler!
bjb568

3

Istiridye kadar mutlu

Bu engelleme egzersizidir. Bu kadar önemli ölçüde iyi performans gösterdi$Copy .

İstiridye 22 blok komutuna sahiptir. ÇünküA her döngü kaymıştır, bu döngü içinde farklı çizgileri, her zaman referans alır. Bu, her komutun her satırda blokları istiflemesine izin verir, satır başına 22 blokta maksimuma çıkar. Bu nedenle, tamamen zırhlı istiridye kırmak için, bir satır 22 kez yazmak gerekir.

Örneğin, #10her seferinde döngü boyunca aşağıdaki satırlarla korunacaktır:

  • Döngü 0, A = 0 #10, satır 7 ile korunuyor (7+0+3 = 10)
  • Döngü 1, A = 7 #10satır 0 ile korunuyor (0+7+3 = 10)
  • Döngü 2, A = 14 #10, satır 17 ile korunuyor (17+14+3 = 34 = 10)
  • Döngü 3, A = 21 #10, satır 10 ile korunuyor ( 10+21+3= 34 = 10)

Öyleyse Döngü 3'ün 10. Satırı'ndan sonra #104 kez engellendi.#10 , blokların kırılması için ve hatta hattın üzerine yazılması için 5'inin yapılmasını gerektirdi.

Bloklar kendi anahtarlı olduğunu not Cdeğeri ve olacak olup korunan hattı zaten aynı tarafından engellendi, eğer yığın Cdeğeri. Bu nedenle, her satır için 22 blok oluşturulduktan sonra, bloklar artık istiflenmeyecektir.

Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Copy A+7 A
Flag

3

Zihin kontrolü

Sanırım asla geç değildir?

Block #C+D
If D #2 #0        // Scan for enemy
If *#E==#E #0 #5  // Attack if necessary
Copy D+5 D        // Turn
Copy 22+1 C       // Repeat
Copy 4+1 C        // ATTACK:
Copy #22+1 *#*C   //   Freeze
Copy #17 *#17     //   Upload the DOWNLOADER
Copy #18 *#18     //
Copy #21 *#19     //
Copy D+2 *D       //   FACE ME!!
Copy 17 *C        //   Start download
If E #0 #13
If E #0 #13
Copy 22+1 C
Flag
Flag
Copy *#B+20 #B+20         // DOWNLOADER
If *#B+20==#B+20 *#20 #19 //
Copy 22+1 C               //
Copy 1+B B                //
Copy 16 C                 //
Flag
Copy 23+C C        // FREEZE

MindControl benim programımın bütün programımı rakibe kopyalamak için oldukça zaman alacağı, bu sırada botumun diğer yönlerden saldırılara açık olduğu anlaşılıyor. Peki neden düşmanlarımı tararken rakibimi programımı kopyalamıyorsunuz?

Bir düşman bulduğunda, MindControl kaçışını önlemek için düşmanı derhal dondurur. Sonra indiriciyi rakibe yükler ve kurbanın MindControl'ün programını indirmesine izin verir. İndirici, az sayıda botun kullandığı Bve 24 satırın tamamını indirinceye kadar kullanacağı gerçeğinden faydalanır . İndirici #19, Copy 16 Ctarafından yeniden Copy 23 Cyazıldığında, kurbanın tüm satırları indirdiğini ve yeniden başlatmaya devam edeceği anlamına gelir.

Botumun ilk versiyonları Blocks içermiyor. Ve o kadar savunmasızdı ki hemen hemen her değişiklik sakatlandı. Bu yüzden Wasmoo'nun $ Copy (COTO's Lockheed'i temel alan) temelli blokları eklemeye karar verdim. Bulduğum dezavantajı, orijinal belgenin kopyalardaki hataları düzeltmesinin zor olduğudur. Ama bu sakatlıktan uzak ve puan önemli ölçüde arttı, ben de Blokları sakladım.

GÜNCEL

İndirgeni, blokları aşmak için başarılı bir yeniden yazma işlemine kadar indirmeye çalışacak şekilde geliştirdim. Bu, indiriciyi yüklemek için bir tur daha gerektirdiği anlamına gelir ancak bu değişiklikten sonra puanım iki katına çıktı !! Rakamlarla tartışamazsınız.


Başka bir güncelleme. Fark etmiş olabileceğiniz gibi, MindControl, kendisi ve hedefi arasındaki rastgele bir çizgiyi karşılaştırarak hedefe saldırıp saldırmayacağına karar verir. Eşleşirlerse, MindControl hedefin zaten virüslü olduğunu varsayar ve onu yalnız bırakır. (Not: Karşılaştırma için statik bir çizgi kullandım, ancak birçok yanlış pozitif ve olumsuz sonuç verdi) Çok fazla yanlış olumsuz sonuç verdi. Bu yüzden yararlanmaya karar ==ve benzeri bazı önemsiz değişiklikler yapmak C+23için 23+C. Program işlevsel olarak aynıdır ancak gözlerinde farklıdır ==. Artık MindControl, başka bir bottaki herhangi bir çizgiyle aynı çizgiye sahip olmadığı için,% 100 dokunmamış botlara çarpacaktır. Yine, skor önemli ölçüde arttı.


İndirici yeniden geliştirildi. Şimdi daha kısa bir döngüde çalışıyor. (Bu benim puanım ile büyük bir korelasyon var gibi görünüyor)


Yine İyileştirici İndiricisi. Orijinal botun kodunu kullanır, böylece daha hızlı yüklenir. Ayrıca skoru arttırmış gibi görünen 2 rastgele blok eklendi


Asla geç Değil!
Nathan Merrill

BrainWash olarak yeniden adlandırmayı düşünüyorum ...
TwiNight 12:14

Veya BunkerBuster aracılığıyla indirici büst izledikten sonra HappyAsAClam bunker
TwiNight

Öncelikle bir indirme yazılımı yükleme fikrini denemeyi düşünmüştüm, ancak sizin kadar küçük bir şey alamadım. İyi iş! Ben de D'yi roving block delta olarak kullanmaya bayılıyorum; Bir komutu kaydeder ve tasarımınızı hızlandırır. 'Move' komutu olmayan bir botun çok iyi çalışacağına şaşırdım. Simülasyonlar, botların yığılma eğiliminde olduğunu gösteriyor, ancak bunun kazanma stratejisi olacağını bilmiyordum. Ve katılıyorum, istiridye kırma konusunda benzersiz tatmin edici bir şey var.
Wasmoo

@Wasmoo Açıkçası, downloader tasarımı botun sabit kalmasını gerektirir ve botların kümelenmesini sağlar. Büyümek için diğer botlara ulaşan ve özümseyen bir ağacın kökleri olarak düşünmeyi seviyorum. Ama çeviklik, $ Copy ve Lockheed'in beni yenmelerinin neden olduğunu tahmin ediyorum.
TwiNight

2

saldırgan

Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Flag

2

Movebot

Move
Copy 23 C
Flag

Flagbot gibi, ancak tüm bayraklarımızla birlikte gitmek için kod hediyeler kabul ederken dolaşın.


2

Bot çoğaltılması

Bu bot rakibini dondurmaya çalışır ve sonra diğer botu yeniden başlatmadan önce kodunun tamamını o bota kopyalar. Bu, aynı zamanda rakip engelleme kullanıyorsa da çalışmalıdır (yine de her şeyi olduğundan daha yavaş yapmasına rağmen).

If D #23 #22
Copy 23 C
Copy #18 *#*C
Copy #18 *#*C+1
Copy #18 *#*C
Copy #18 *#0
Copy #18 *#0
Copy 0 *C
Copy 0 *C
Copy 1 A
Copy #A *#*A
If D #12 #14
Copy A+1 A
Copy 9 C
Copy 23 C
Flag
Flag
Flag
Copy C+23 C
Copy D+1 D
Flag
If *#*C==#*C #19 #13
Move
If *#*C+1==#*C+1 #21 #13


@NathanMerrill gotcha
overactor

2

yıldız falcısı

Magus, kendiliğinden yayılan bir virüs için basit bir girişimdir. Kendisini diğer botların programlarına kopyalamaya çalışıyor. (Negatif sayıları kaldırmak, durumu düzeltmek, satırları düzeltmek için düzenlenir.)

Block #A
Copy #A *#A
Copy A+1 A
If A #0 #4
Copy 0 *C
Flag
Move
Copy 0 C

Negatif değerlere izin verilmez. Lütfen B için 23 kullanın
Nathan Merrill

Lütfen 23 değil 25 kullanın.
Nathan Merrill

Yanlış anlamadığım sürece, 23 veya 24 numaralı satırları engellememesine veya kopyalamamasına neden olur (not: ilk revizyondan biraz değişmiş, A, B değil 1 ile artırılmıştır)
Isaac

+0 = 24 +1 = 25, -1 = 23. Eğer -1 olmasını istiyorsan, 23 olmalıdır.
Nathan Merrill

Daha önce öyleydi, çünkü sadece 0 ile karşılaştırabileceğinizi düşündüm ('=' kısmını kaçırdım, kaymağını suçluyorum), ama şimdi değişti, böylece A 1'den başlar ve 25'te biter for (int i = 1; i < 25; i++). .
Isaac

1

DNAbot

Flag
Copy 8 D
Copy 16 B
If #D==#B #C+2 #C+3
Block #A
Copy #D #A
If D #7 #15
Copy #23 *#*C
Copy A+1 A
Copy B+1 B
Copy D+1 D
If #D==#B #C+2 #C+3
Block #A
Copy #D #A
If D #7 #15
Move
Copy A+1 A
Copy B+1 B
Copy D+1 D
If #D==#B #C+2 #C+3
Block #A
Copy #D #A
If D #7 #15
Flag

Bu bot, hareket ederken ve saldırırken kendi kodunu onarır.




1

Hızlı dondurucu

Rakibinin yanında idam edilecek olan bayrakların bayraklarını kopyalamaya çalışır, saldırı yapacak düşman yoksa hareket eder.

Block #13
Block #14
If D #13 #14
If D #13 #14
If D #13 #14
If D #13 #14   
If D #13 #14
If D #13 #14
If D #13 #14
If D #13 #14
If D #13 #14
If D #13 #14   
Copy 23 C
If E #15 #16
Move
Copy #23 *#*C
Copy D+1 D

İlk iki satır geçersiz. # 13 ve # 14’e ihtiyaçları var
Nathan Merrill,

1

Blok, Don, Saldırı

Block #A        // start block loop
Copy A+1 A      // loop A from 0 to 23
If A #3 #4      
Copy 23 C       // repeat block loop
Copy 5 C        // exit block loop to attack/move loop
Move
If D #11 #5     // attack or move
Copy A+1 A      // loop A from 0 to 23
If A #9 #10
Copy 5 C        // repeat attack/move loop
Copy 23 C       // exit attack/move loop to block loop
Copy 11 C       // start of attack routine
Copy #23 *#*C   // freeze opponent
Copy #19 *#E    // copy flag to opponent
Copy #20 *#E    // copy flag to opponent
Copy #21 *#E    // copy flag to opponent
Copy #22 *#E    // copy flag to opponent
Copy D+1 D      // change direction
Copy 5 C        // repeat attack/move loop
Flag
Flag
Flag
Flag
Copy C+23 C     // freeze instruction, for copying

24 çizginin tümünü engeller, ardından 24 kez ya hareket eder ya da saldırır, sonra tekrar eder. Saldırı, rakibi dondurmayı denemeyi, ardından dört bayrağı rastgele konumlara kopyalamayı ve ardından dönmeyi içerir.


1

Gizle, Engelle, Saldırı

Bu bot, Blok Freeze Saldırısı'na dayanıyor. Daha Iffazla bayrak ekmeme izin verecek şekilde daha kompakt hale getirmek için bazı ifadelerin yerleşimini değiştirdim . Ben de bir oyunun başında kaçmak için biraz zaman kazanmak için kaçtı.

Copy D+1 D
Move           //buy some time by moving to a more secure location
Block #A+2
Copy A+1 A
If A #11 #17
Copy #23 *#E
Copy #22 *#E
Copy #21 *#E
Copy #20 *#E
Copy #19 *#E
Copy D+1 D
Copy 1 C
Move
If D #14 #15
Copy 3 C
Copy 11 C
Copy #18 *#*C
If D #16 #15
Copy C+23 C
Flag
Flag
Flag
Flag
Flag

1

Roving Virus

If D #6 #16
Move
Copy 23 C
Flag
Flag
Flag
Copy 6 C
Copy A+23 A
Copy #A *#A                     //clone previous line to enemy
Copy 23 *C                      //freeze enemy
If A #6 #16                     //loop or turn then continue
Copy 0 *C                       //reboot enemy
Copy 23 C                       //start moving again
Flag
Flag
Flag
Copy D+1 D                      //turn
Flag
Flag
Flag
Flag
Flag
Flag
Copy 22 C                       //freeze instruction

Bu bot bir düşman bulana kadar dolaşır, sonra onları dondurur, kodlarının hepsini kendi koduyla değiştirir, çözer, sonra tekrar dolaşır.


1

Soğuk algınlığı

Hemen hemen sizi enfekte eder ve etrafa yayarsınız. PhiNotPi's Parasite'ye dayanarak, soğuk algınlığı bayraklarını sizinkilerinize kopyalayabiliyorsa neredeyse anında kontrol eder. Yapamazsa, rastgele bir değeri engeller. Rakip yoksa biraz hareket eder.

Block #22
If D #8 #5
If D #8 #5
If D #8 #5
Copy 23 C
If E #6 #7
Copy D+1 D
Move
If *#E=#22 #15 #9
If *#E+1=#22 #16 #10
If *#E+2=#22 #17 #11
If *#E+3=#22 #18 #12
If *#E+4=#22 #19 #13
If *#E+5=#22 #20 #14
If *#E+6=#22 #21 #23
Copy #22 *#E
Copy #22 *#E+1
Copy #22 *#E+2
Copy #22 *#E+3
Copy #22 *#E+4
Copy #22 *#E+5
Copy #22 *#E+6
Flag
Block #E

1

Grip

Bu, biraz artan hızda (Soğuk Paramı temel alan) Soğuk algınlığı ile yakından ilgilidir.

Move
Block #23
If D #8 #0
If D #8 #0
If D #8 #0
If D #8 #7
Copy 0 C
Copy D+1 D
If *#E #9 #10
Copy #23 *#E
If *#E+1 #11 #12
Copy #23 *#E+1
If *#E+2 #13 #14
Copy #23 *#E+2
If *#E+3 #15 #16
Copy #23 *#E+3
If *#E+4 #17 #18
Copy #23 *#E+4
If *#E+5 #19 #20
Copy #23 *#E+5
If *#E+6 #21 #22
Copy #23 *#E+6
Block #E
Flag

Bunun ne gibi bir fark yaratacağını görmek için sabırsızlanıyorum. 5. satırdaki # 5 ise sonsuz bir döngüye neden olacak ve bu # 7'lerin de istediğiniz gibi olma olasılığı düşük.
otorractor

@overactor Teşekkürler, bunlar ekstra bir satıra eklenerek oluşturulan hatalardı.
PhiNotPi

Acıyı hiç biliyor muyum.
otorractor

1

rebranding

Move
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
Copy 0 C
If *#E=#14 #11 #9
If *#E==#14 #13 #12
Copy D+1 D
Copy #14 *#E
Flag

Bu bot, düşman botlarındaki bayrakları rastgele bulmaya ve başarıyı tespit ettikten sonra geri çevirerek dost bayraklarla değiştirmeye çalışıyor. Yengeç botundan esinlenilmiştir.

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.