전투 경기장의 모든 봇은 갑자기 머리가 망가졌으며 아무도 그 이유를 설명 할 수 없습니다. 그러나 Brainfuck이 더 이상 이해하는 유일한 언어이지만, 그들이 여전히 싸울 수있는 한 누가 신경 써야합니다.
마지막 제출 이후 오랜 시간이 지났으므로 마침내 BrainFuckedBotsForBattling의 우승자를 발표 했습니다.
스코어 보드
| Owner | Bot Score |
|--------------------|-------------------------------|
| LymiaAluysia | NyurokiMagicalFantasy - 600 |
| Sylwester | LethalLokeV2.1 - 585 |
| weston | MickeyV4 - 584 |
| Sp3000 | YandereBot - 538 |
| Comintern | CounterPunch - 512 |
| Sylwester | BurlyBalderV3 - 507 |
| LymiaAluysia | NestDarwin - 493 |
| IstvanChung | Bigger - 493 |
| Manu | DecoyMaster - 489 |
| archaephyrryx | Wut - 478 |
| DLosc | LightfootPlodder - 475 |
| archaephyrryx | 99BottlesOfBats - 461 |
| Sylwester | TerribleThorV2 - 458 |
| MikaLammi | WallE2.0 - 443 |
| Mikescher | MultiVAC - 441 |
| archaephyrryx | Twitcher - 439 |
| Timtech | MetalDetector - 438 |
| AndoDaan | BeatYouMate - 433 |
| csarchon | TheWallmaster - 427 |
| Sparr | SeeSawRush - 412 |
| archaephyrryx | Stitcher - 406 |
| PhiNotPi | RandomOscillator - 403 |
| ccarton | AnybodyThere - 398 |
| Comintern | 2BotsOneCup - 392 |
| kaine | SternBot - 387 |
| PhiNotPi | EvoBot2 - 385 |
| PhiNotPi | EvoBot1 - 381 |
| Brilliand | TimedAttack - 373 |
| Sylwester | ReluctantRanV2 - 373 |
| AndoDaan | PrimesAndWonders - 359 |
| Nax | TruthBot - 357 |
| DLosc | Plodder - 356 |
| weston | FastTrapClearBot - 345 |
| MikaLammi | PolarBearMkII - 340 |
| Sp3000 | ParanoidBot - 336 |
| Moop | Alternator - 319 |
| TestBot | FastClearBot - 302 |
| icedvariables | PyBot - 293 |
| TestBot | DecoyBot - 293 |
| kaine | BestOffense - 291 |
| Geobits | Backtracker - 289 |
| bornSwift | ScribeBot - 280 |
| IngoBuerk | Geronimo - 268 |
| flawr | CropCircleBot - 239 |
| plannapus | CleanUpOnAisleSix - 233 |
| frederick | ConBot - 230 |
| frederick | 128Bot - 222 |
| AndoDaan | EndTitled - 219 |
| PhiNotPi | CloakingDeviceBot - 215 |
| AndoDaan | GetOffMate - 206 |
| DLosc | ScaredyBot - 205 |
| isaacg | CleverAndDetermined - 202 |
| PhiNotPi | CantTouchThis - 202 |
| Moop | StubbornBot - 174 |
| Cruncher | StallBot - 168 |
| IngoBuerk | Gambler - 157 |
| BetaDecay | RussianRoulette - 129 |
| flawr | DoNothingBot - 123 |
| SebastianLamerichs | Dumbot - 115 |
| mmphilips | PacifistBot - 112 |
| SeanD | DontUnderstand - 92 |
| proudHaskeller | PatientBot - 83 |
| frederick | Dumberbot - 70 |
| flawr | MetaJSRandomBot - 68 |
| Darkgamma | TheRetard - 61 |
| BetaDecay | Roomba - 61 |
| BetaDecay | PrussianRoulette - 31 |
| frederick | Dumbestbot - 0 |
최종 점수 2014 년 9 월 10 일
EDIT6 : 극단적 인 크기와 런타임으로 인해 로그가 삭제되었습니다. 의 줄을 주석 해제하여 직접 생성 할 수 있습니다 RunThisTournament.py
.
EDIT5 : 컨트롤러에 약어 처리를 구현 했으며 더 이상 런타임이 더 이상 없습니다. 이것은 숫자와 괄호가 더 이상 주석으로 취급되지 않는 부작용이 있습니다. 주석이 달린 버전을 제공하려는 경우에도 여전히 사용할 수 있지만 주석 처리 되지 않은 코드 버전 이있는 경우 매우 유용 하므로 주석을 수동으로 제거 할 필요가 없습니다. 감사!
EDIT4 : 토너먼트가 인기있는 네트워크 질문에서 제거되어 제목이 변경되었습니다. 이것을 지적 해 주신 @Geobits에게 감사드립니다!
EDIT3 : 예기치 않은 결과로 인해 bf 프로그램에서 제거 된 주석이 수정되었습니다. 의견을 삭제하는 데 문제가있는 사람은보고 해주세요.
EDIT2 : 컴퓨터가 느리게 작동하기 때문에 시간 제한을 100000 사이클에서 10000 사이클로 줄였습니다. 어쨌든 누군가가이 시점을 넘어서서 실행중인 게임의 결과를 돌린 것은 아닙니다.
EDIT1 : 인터프리터가 주석이 달린 프로그램의 숫자를 무시하지 않는 변환 스크립트의 버그가 수정되었습니다.
기술
이것은이다 브레인 퍽의 영감 대회 BF 마상 창 시합 . 두 개의 봇 (Brainfuck 프로그램)은 메모리 테이프로 표시되는 경기장에서 서로 싸우고 있습니다. 각 셀은 -127에서 128까지의 값을 보유하고 한계에서 랩핑 할 수 있습니다 (따라서 128 + 1 = -127).
유효한 지침은 일반적인 Brainfuck과 유사합니다. 즉,
+ : Increment cell at your pointer's location by 1
- : Decrement cell at your pointer's location by 1
> : Move your memory pointer by 1 cell towards the enemy flag
< : Move your memory pointer by 1 cell away from the enemy flag
[ : Jump behind the matching ']'-bracket if the cell at your pointer's location equals 0
] : Jump behind the matching '['-bracket if the cell at your pointer's location is not 0
. : Do nothing
경기장의 크기는 10 ~ 30 개이며, 각 전투마다 의사 무작위로 선택됩니다. 양쪽 끝에는 초기 값이 128 인 '플래그'가 있으며 다른 모든 셀은 0이됩니다. 봇의 목표는 적들이 자신의 깃발을 0으로 만들기 전에 2 번 연속 주기로 적의 깃발을 0으로 만드는 것입니다.
각 봇은 자신의 관점에서 셀 [0] 인 자체 플래그에서 시작합니다. 상대는 테이프의 다른쪽에 있습니다.
[ 128 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 128 ]
^ ^
my bot other bot
두 봇 모두 동시에 작업을 수행하는데, 이는 한 주기로 간주됩니다. 게임은 10000 회주기 후 또는 승리 조건 중 하나에 도달하자마자 종료됩니다. 프로그램 중 하나가 종료되면 게임이 끝날 때까지 무언가를 중단하지만 여전히 이길 수 있습니다.
승리 조건
봇은 다음 조건 중 하나에서 승리합니다.
- 적보다 먼저 적의 깃발이 제로화됩니다
- 당신의 적이 테이프에서 자신의 포인터를 움직입니다 (
>
플래그 또는<
자신의 실행) - 당신의 깃발의 가치는 10000주기 후에 상대방의 깃발의 가치보다 0에서 더 멀다
규칙
게시물에는 봇 이름과 코드가 포함되어야합니다.
- 다음 약어 구문을 사용하여 코드를 더 읽기 쉽게 만들 수 있습니다.
- 이 예
(+)*4
와 동일++++
이 어떤 명령의 유효 괄호 탁월한 브래킷 제외한 루프 로직은 약어 로직과 충돌하기 때문이다.[-[-[-
대신에 사용하십시오([-)*3
- 이 예
- 약어
+-><[].
이외의 다른 모든 문자 는 주석이므로 무시됩니다.()*
규칙을 따르지 않는 봇은 토너먼트에서 제외됩니다.
- 기본 Brainfuck 만 허용되며 절차 또는 산술 연산을 지원하는 다른 변형은 허용되지 않습니다.
- 봇의 소스 코드는 대괄호를 포함하지 않아야합니다
기본 전략 에 대해 알리지 만 자신의 봇에 다른 코드를 사용 하지 마십시오 .
채점
봇의 점수는 다른 모든 봇과의 승리 횟수에 의해 결정됩니다. 2 개의 봇 사이의 조우는 서로 다른 메모리 테이프 길이를 가진 10 개의 일치로 구성되며, 조우 당 최대 10 점을 얻습니다. 무승부는이 경기에서 점수가 없습니다.
제어 프로그램
github에서 전투 프로그램 의 전체 로그와 함께 제어 프로그램 을 찾을 수 있습니다 . 리더 보드가 생성되면 여기에 리더 보드가 게시됩니다.
리포지토리를 복제하여 다른 사람과 직접 봇을 시도하십시오. python Arena.py yourbot.bf otherbot.bf
경기를 진행하는 데 사용 합니다. 명령 행 플래그 -m
및을 사용 하여 조건을 수정할 수 있습니다 -t
. 터미널이 ANSI 이스케이프 시퀀스를 지원하지 않으면 --no-color
플래그를 사용하여 컬러 출력을 비활성화하십시오.
봇 예제
FastClearBot.bf
(>)*9 Since the tape length is at least 10, the first 9 cells can be easily ignored
([ Find a non-zero cell
+++ Increment at first, since it could be a decoy
[-] Set the cell to zero
]> Move on to the next cell
)*21 Repeat this 21 times
DecoyBot.bf
>(+)*10 Set up a large defense in front of your flag
>(-)*10 Set up another one with different polarity
(>+>-)*3 Create some small decoys
(>[-] Move on and set the next cell to zero
. Wait one round, in case it is the enemy's flag
)*21 Repeat this 21 times
FastClearBot는 작은 디코이를 피할 수는 있지만 큰 디코이를 피할 수 없기 때문에 DecoyBot는 테이프 길이가 10보다 큰 모든 매치에서 승리합니다. FastClearBot이 DecoyBot에 대해 이길 수있는 유일한 상황은 상대방이 큰 미끼를 만들기 전에 적의 깃발에 닿을 수있을 정도로 빠를 때입니다.