Boty kodowe
Nienawidzę zmiennych prywatnych i chronionych. Chcę tylko uzyskać dostęp do wszystkiego i wszystkiego!
Jeśli jesteś podobny do mnie, to wyzwanie jest dla Ciebie!
Napisz bota, który współpracuje w harmonii z innymi botami, dzięki czemu inne boty będą robić to, co chcesz. Jesteś programistą i wiesz, jak mają działać. Twoim zadaniem jest konwersja jak największej liczby innych botów na twoje sposoby.
Kod
Będziesz miał 24 linie kodu do napisania swojego bota. W każdej turze każdy bot wykona kolejno 1 linię.
Każdy bot przechowuje 5 zmiennych A
przez E
. A
i B
są do użytku osobistego, C
przechowuje następny wiersz do wykonania, D
zapisuje bieżący kierunek i E
jest liczbą losową. Zmienne zaczynają się od 0, z wyjątkiem D
, które zaczynają się od losowej wartości. Wszystkie zmienne przechowują tylko 0–23. Liczby większe lub mniejsze będą modulowane przez 24.
W tym poście użyję przeciwnika jako sąsiadującego bota, z którym się zmierzysz
Każda linia musi zawierać jedno z następujących 5 poleceń:
Flag
nic nie robi. Z wyjątkiem tego, jak wygrywaszMove
przesuwa twojego bota wD
kierunku th. Jeśli bot już zajmuje to miejsce, nie nastąpi ruchCopy Var1 Var2
kopiuje zawartość Var1 do Var2If Condition Line1 Line2
Jeśli warunek jest spełniony, wykonuje wiersz 1, w przeciwnym razie wiersz 2Block Var1
blokuje następny zapis zmiennej
Zmiennej można użyć w następujący sposób:
#Var
użyje zmiennej jako numeru linii. Jeśli A
jest 17, Copy #8 #A
skopiuje zawartość linii 8 do linii 17.
*Var
użyje zmiennej twojego przeciwnika. Copy 5 *C
ustawi C
zmienną przeciwnika na 5
Var+Var
dodanie dwóch zmiennych. Copy D+1 D
obróci bota w prawo
Gdy D
zostanie użyty jako kierunek, [North, East, South, West][D%4]
zostanie użyty
Te modyfikatory mogą być powiązane: Copy *#*C #9
skopiują kolejną linię, którą przeciwnik wykona do twojego własnego kodu w linii 9. **D
odnosi się do D
zmiennej przeciwnika przeciwnika .
Stan zostanie oceniony w następujący sposób:
- Jeżeli
Var
:- Jeśli Var jest
A
przezC
, zwróci true jeśli Var jest niezerowe, inny fałszywy. - Jeśli Var jest
D
, zwróci true, jeśli w tymD
kierunku jest bot, w przeciwnym razie false - Jeśli Var jest
E
, zwróci true, jeśli E jest nieparzyste, w przeciwnym razie false - Jeśli Var jest linią, zwróci true, jeśli jest linią Flag
- Jeśli Var jest
- Jeżeli
Var1=Var2
:- Zwraca true, jeśli oba są
A-E
i są równe tej samej liczbie - Zwraca true, jeśli oba są liniami, a typ linii jest równy
- Zwraca true, jeśli oba są
- Jeżeli
Var1==Var2
:- Zwraca true, jeśli oba są
A-E
i są równe tej samej liczbie - Zwraca true, jeśli oba są liniami i są identyczne (flagi z różnych botów nie będą równe)
- Zwraca true, jeśli oba są
50 botów każdego typu zostanie umieszczonych w świecie toroidalnym według następującego wzoru:
B...B...B...B...
..B...B...B...B.
B...B...B...B...
..B...B...B...B.
Po każdej grze w 5000 tur, flagi każdego bota zostaną policzone. Dostajesz punkt, jeśli bot ma więcej twojej flagi niż jakikolwiek inny rodzaj flagi. W przypadku remisu między N
botami punkty nie są przyznawane.
Będzie 10 gier, a wyniki zostaną zgromadzone na końcu.
Notatki dodatkowe
Komentarze na końcu linii są dozwolone i są oznaczone symbolem //
Próba zrobienia czegoś, co nie ma sensu, takiego jak dodanie do linii, nic nie da
Próba zrobienia czegoś na nieistniejącym bocie nic nie da
Nieskończona rekurencja w If
testamencie zakończy się bez wykonania linii
If
nie zmienia wartości C
A Block
nie wygasa, dopóki ktoś nie spróbuje do niego napisać
Wiele zmiennych i linii może być blokowanych jednocześnie
Block
wprowadzenie zmiennej wiele razy będzie blokować wiele razy, dopóki druga instrukcja blokowa będzie w innym wierszu kodu niż pierwsza
Spacje są dozwolone tylko między argumentami (i po poleceniu)
Jeśli bot ma mniej niż 24 linie, flaga będzie resztą linii.
Przykładowy 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 będzie prowadzony przez mojego kontrolera Python tutaj .
Kontroler Java jest tutaj Jest szybki i wygląda znacznie lepiej niż Python.
Tablica wyników:
- 6837 $ Kopiuj
- 3355 Lockheed
- 1695 MindControl
- 967 bizantyjskie
- 959 AttackOrElse
- 743 Cadmyllion
- 367 Grypa
- 251 TheCommonCold
- 226 Mag
- 137 HideBlockAttack
- 129 RowBot
- 123 FastMoveCloneDodge
- 112 FastForwardClone
- 96 QuickFreeze
- 71 RepairAndProtect
- 96 SuperFreeze
- 93 RovingVirus
- 80 ForwardClone
- 77 FreezeTag
- 68 Palimpseste
- 62 BlockFreezeAttack
- 51 RushAttackDodge
- 46 Blocker
- 40 TurretMaker
- 37 Copycat
- 37 Kamikaze
- 35 FlagInjector
- 33 RandomCopier
- 31 Podstępny
- 29 HappyAsAClam
- 25 NanoVirus
- 21 Nullifier
- 19 Nanoviris
- 17 BoringCopybot
- 16 Movebot
- 14 Flagbot
- 13 Neutralizator
- 12 Rak
- 9 DNAbot
- 9 Pasożyt
- 8 MetaIndidious
- 8 Zmiana marki
- 8 AdaptiveBot
- 8 ReproducingBot
- 8 KungFuBot
- 5 QuickFreezerbot
- 4 Atakujący