var grid: int[32]; fun main() { var width = getInt(); var height = getInt(); var manCoord: int; var y = 0; do { var x = 0; var coord = (y << 4); drawAddr(coord); do { var ch = getChar(); if (ch == ' ') drawData(0); else if (y == 0 || y == height - 1 || x == 0 || x == width - 1) { drawData(4); ch = '#'; } else if (ch >= '0' && ch <= '9') drawData(8); else if (ch == '<' || ch == '>' || ch == '^' || ch == 'v' || ch == 'X' || ch == 'H') drawData(3); else if (ch == 'M') drawData(12); else if (ch == '+' || ch == '-') drawData(10); else //if (ch == '@') { drawData(9); ch = ' '; manCoord = coord; } grid[coord >> 3] |= @int(ch) << ((coord & 7) << 3); coord++; x++; } while (x < width); y++; } while (y < height); drawSwap(1); var dir = 0; var A = 0; var B = 0; while (true) { var k = getInt(); do { drawAddr(manCoord); var ch = @char((grid[manCoord >> 3] >> ((manCoord & 7) << 3)) & 0xff); if (ch == ' ') { drawData(0); } else if (ch == '<') { drawData(3); dir = 2; } else if (ch == '>') { drawData(3); dir = 0; } else if (ch == '^') { drawData(3); dir = 3; } else if (ch == 'v') { drawData(3); dir = 1; } else if (ch >= '0' && ch <= '9') { drawData(8); A = ch - '0'; } else if (ch == 'M') { drawData(12); B = A; } else if (ch == '+') { drawData(10); A = A + B; } else if (ch == '-') { drawData(10); A = A - B; } else if (ch == 'X') { drawData(3); if (A > 0) dir = (dir + 1) & 3; else if (A < 0) dir = (dir + 3) & 3; } else if (ch == '#') { drawData(4); dir = 4; } else //if (ch == 'H') { drawData(3); dir = 4; } if (dir < 2) { if (dir == 0) { manCoord += 1; } else { manCoord += 16; } } else { if (dir == 2) { manCoord -= 1; } else if (dir == 3) { manCoord -= 16; } } drawAddr(manCoord); drawData(9); k--; } while (k > 0); drawSwap(1); } }