Code Bots
Eu odeio variáveis privadas e protegidas. Eu só quero acessar tudo e qualquer coisa!
Se você é como eu, então este desafio é para você!
Escreva um bot que funcione em harmonia com outros bots e faça com que outros façam o que quiser. Você é um programador e sabe como as coisas devem funcionar. Seu trabalho é converter o maior número possível de bots para os seus caminhos.
O código
Você terá 24 linhas de código para escrever seu bot. A cada turno, cada bot executará 1 linha sequencialmente.
Cada bot armazena 5 variáveis A
através E
. A
e B
são para uso pessoal, C
armazena a próxima linha a ser executada, D
armazena a direção atual e E
é um número aleatório. As variáveis começam em 0, exceto D
, que começará com um valor aleatório. Todas as variáveis têm apenas o armazenamento de 0 a 23. Números maiores ou menores serão modulados por 24.
Neste post, usarei o oponente para ser o bot adjacente que você está enfrentando
Cada linha deve conter um dos 5 comandos a seguir:
Flag
faz nada. Exceto que é como você ganhaMove
move seu bot naD
direção th. Se um bot já ocupa o espaço, nenhum movimento aconteceráCopy Var1 Var2
copia o conteúdo de Var1 para Var2If Condition Line1 Line2
Se Condição for verdadeira, executa Linha1, caso contrário Linha2Block Var1
bloqueia a próxima gravação em uma variável
Uma variável pode ser usada da seguinte maneira:
#Var
usará a variável como um número de linha. Se A
for 17, Copy #8 #A
copiará o conteúdo da linha 8 para a linha 17.
*Var
usará a variável do seu oponente. Copy 5 *C
irá definir a C
variável do oponente para 5
Var+Var
adicionar as duas variáveis. Copy D+1 D
girará o bot para a direita
Quando D
é usado como uma direção, [North, East, South, West][D%4]
será usado
Esses modificadores podem ser encadeados: Copy *#*C #9
copiará a próxima linha que seu oponente executará em seu próprio código na linha 9. **D
refere-se à D
variável do oponente de seu oponente .
Uma condição será avaliada da seguinte forma:
- Se
Var
:- Se Var é
A
atravésC
, ele irá retornar true se Var é diferente de zero, o mais falso. - Se Var for
D
, ele retornará true se houver um bot naD
direção th, caso contrário false - Se Var for
E
, retornará true se E for ímpar, caso contrário false - Se Var for uma linha, retornará true se for uma linha Flag.
- Se Var é
- Se
Var1=Var2
:- Retorna verdadeiro se ambos são
A-E
e é igual ao mesmo número - Retorna true se ambas são linhas e o tipo de linha é igual
- Retorna verdadeiro se ambos são
- Se
Var1==Var2
:- Retorna verdadeiro se ambos são
A-E
e é igual ao mesmo número - Retorna true se ambas são linhas e são idênticas (sinalizadores de bots diferentes não serão iguais)
- Retorna verdadeiro se ambos são
50 bots de cada tipo serão colocados em um mundo toroidal no seguinte padrão:
B...B...B...B...
..B...B...B...B.
B...B...B...B...
..B...B...B...B.
Após cada jogo de 5.000 turnos, as bandeiras de cada bot serão contadas. Você ganha um ponto se um bot tem mais sua bandeira do que qualquer outro tipo de bandeira. Se houver empate entre os N
bots, nenhum ponto será dado.
Serão 10 jogos e as pontuações serão acumuladas no final.
Notas laterais
Comentários de fim de linha são permitidos e são indicados com //
Tentar fazer algo que não faz sentido, como adicionar a uma linha, não fará nada
Tentar fazer algo em um bot inexistente não fará nada
A recursão infinita em um If
terminará sem que nenhuma linha seja executada
If
não altera o valor de C
A Block
não expira até que alguém tente escrever nele
Várias variáveis e linhas podem ser bloqueadas ao mesmo tempo
Block
A execução de uma variável várias vezes bloqueará várias vezes, desde que a segunda instrução de bloco esteja em uma linha de código diferente da sua primeira
Espaços são permitidos apenas entre argumentos (e após o comando)
Se um bot for menor que 24 linhas, Flag será o restante das linhas.
Programa de amostra
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
O programa será executado pelo meu controlador Python aqui .
O controlador Java está aqui É rápido e parece muito melhor que o python.
Placar:
- 6837 $ Copiar
- 3355 Lockheed
- 1695 MindControl
- 967 Bizantino
- 959 AttackOrElse
- 743 Cadmyllion
- 367 Gripe
- 251 TheCommonCold
- 226 Magus
- 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 Bloqueador
- 40 TurretMaker
- 37 Copycat
- 37 Kamikaze
- 35 FlagInjector
- 33 RandomCopier
- 31 insidioso
- 29 HappyAsAClam
- 25 NanoVirus
- 21 Nullifier
- 19 Nanoviris
- 17 BoringCopybot
- 16 Movebot
- 14 Flagbot
- 13 Neutralizador
- 12 Câncer
- 9 DNAbot
- 9 Parasita
- 8 MetaInsidious
- 8 Rebranding
- 8 AdaptiveBot
- 8 ReproduzindoBot
- 8 KungFuBot
- 5 QuickFreezerbot
- 4 Atacante