# Code Contest Simulator - ccsim A programming game based on RoboCom. # Instructions | Command | Cycles | InstSet | Mobile | Description | Failures | |--------------------|---------------------|---------|--------|-------------------------------------------------------------|----------| | CREATE a, b | 100+50*a+25*b+120*c | 2 | 0 | Create a new pogram with:
instSet a; b banks; c mobile | | | MOVE | 20 | 0 | 1 | Move the program one field | | | DIE | 1 | 0 | 0 | Destroy the program | | | TRANS a, b | 14+1*numOfInst | 1 | 0 | Transfers bank a to bank b in the program in front | | | RTRANS a, b | 14+1*numOfInst | 1 | 0 | Transfers bank afrom program in front to bank b | | | TURN a | 8 | 0 | 0 | Turn by 90°;
Turn right if a >= 0 else left | | | JUMP a | 1 | 0 | 0 | Realtive jump for a instructions | | | AJUMP a | 1 | 0 | 0 | Jump to instruction a in current bank | | | BJUMP a, b | 2 | 0 | 0 | Jump to instruction b in bank a | | | SCAN #a | 8 | 1 | 0 | Scan 1 field in front.
Set a to:
0 if empty;
1 if enemy;
2 if friend | | | FARSCAN #a, #b, c | 10+3*c | 1 | 0 | Scan n fields in front.
Set a to:
0 if empty;
1 if enemy;
2 if friend;
Set b to distance | | | SET #a, b | 2 | 0 | 0 | #a = b | | | ADD #a, b | 2 | 0 | 0 | #a = #a + b | | | SUB #a, b | 2 | 0 | 0 | #a = #a - b | | | MUL #a, b | 2 | 0 | 0 | #a = #a * b | | | DIV #a, b | 2 | 0 | 0 | #a = #a / b | | | MOD #a, b | 2 | 0 | 0 | #a = #a % b | | | MIN #a, b | 2 | 0 | 0 | #a = min(#a, b) | | | MAX #a, b | 2 | 0 | 0 | #a = max(#a, b) | | | RANDOM #a, b, c | 1 | 0 | 0 | #a = b + (rand() % (c - b + 1)) | | | IF a, b | 2 | 0 | 0 | Execute next instruction if a == b else skip it | | | IFN a, b | 2 | 0 | 0 | Execute next instruction if a != b else skip it | | | IFG a, b | 2 | 0 | 0 | Execute next instruction if a > b else skip it | | | IFL a, b | 2 | 0 | 0 | Execute next instruction if a < b else skip it | | | IFGE a, b | 2 | 0 | 0 | Execute next instruction if a >= b else skip it | | | IFLE a, b | 2 | 0 | 0 | Execute next instruction if a <= b else skip it | | | INIT a, b | 2 | 0 | 0 | Start a new task at bank a instruction b | | | BREAK | 1 | 0 | 0 | Stops other tasks, gives current task 100% | | | RESUME | 1 | 0 | 0 | Resume all other tasks suspended by SEIZE | | | SEIZE | 1 | 0 | 0 | Stops other tasks, gives current task 100% until RESUME | | | SLEEP a | 1 | 0 | 0 | Suspend current task a cycles | | | QUIT | 1 | 0 | 0 | Stops current task | | # Failure codes | Code | Description | |------|--------------------------------------------------------------------------------| | ET | Elimination Trigger released | | DH | Data Hunger (Bank 1 empty and executed) | | DZ | Division by zero | | IB | Invalid bank number (e.g. in TRANS or BJUMP) | | IS | Higher Instruction Set required | | MO | Mobility required | | DI | DIE executed | | IP | Invalid parameter (e.g. CREATE x, -1, x) | | UE | No more tasks left in a program (Unemployment) | | ID | Instruction duration too high (i.e. > MaxInstrDur) | # Variables | Variable / Constant | Description | |----------------------|--------------------------------------------------------------------------------------------------------------------| | #1 .. #20 | The twenty all-purpose standard integers. They cannot be accessed by remote programs | | #Pub | Public variable which is accessible from all programs on the field | | #Team | Public variable which is accessible from all own programs on the field | | #Active | Determines if a current program is active (positive values) or not (zero or negative) | | %Active | Determines if a remote program is active (positive values) or not (zero or negative) | | $Banks | The number of banks which the current program has | | %Banks | The number of banks which the remote program has | | $InstrSet | The instruction set which the current program has | | %InstrSet | The instruction set which the remote program has | | $Mobile | Tells if the current program is mobile | | %Mobile | Tells if the remote program is mobile | | $Age | The current program's age in cycles | | %Age | The remote program's age in cycles | | $Own | The number of friendly programs on the board | | $Others | The number of enemy programs on the board | | $Fields | The size of the board | | $ElimTrigger | The elimination trigger setting | | $Generation | The generation of the current program | | $ID | Identifier which is equal for each program of the same team
and initialized to random when the game is started | | $InstrPos | The number of the current instruction (in its bank) | | $Time | The game time in cycles | | $Timeout | The automatic simulation timeout in cycles | | $Tasks | The number of tasks in the current program, incl. sleeping or seized tasks |