From a7500846e6d54f5b7c0f9e26cca63656dbdf3a29 Mon Sep 17 00:00:00 2001 From: Peter Ward Date: Fri, 27 May 2011 17:06:27 +1000 Subject: Preparation for new process bot. --- bots.py | 52 -------------------- bots/peter.py | 83 ------------------------------- bots/peter_smart.py | 131 ------------------------------------------------- bots/peter_smart2.py | 135 --------------------------------------------------- 4 files changed, 401 deletions(-) delete mode 100644 bots.py delete mode 100755 bots/peter.py delete mode 100755 bots/peter_smart.py delete mode 100755 bots/peter_smart2.py diff --git a/bots.py b/bots.py deleted file mode 100644 index f3e7cee..0000000 --- a/bots.py +++ /dev/null @@ -1,52 +0,0 @@ -import random - -from common import * - -def right_bot(board, (x, y)): - return 'R' - -def random_bot(board, (x, y)): - return random.choice('UDLR') - -def random_bounds_bot(board, (x, y)): - height = len(board) - width = len(board[0]) - moves = [] - if x > 0: - moves.append('L') - if x < width - 1: - moves.append('R') - if y > 0: - moves.append('U') - if y < height - 1: - moves.append('D') - - move = 'U' - while moves and move not in moves: - move = random_bot(board, (x, y)) - return move - -def random_square_bot(board, (x, y)): - def in_bounds(x, y, w, h): - return x >= 0 and y >= 0 and x < w and y < h - - h = len(board) - w = len(board[0]) - - todo = directions.keys() - - move = random_bot(board, (x, y)) - dx, dy = directions[move] - nx = x + dx - ny = y + dy - - while todo and in_bounds(nx, ny, w, h) and \ - board[ny][nx] not in (Squares.EMPTY, Squares.APPLE): - if move in todo: - todo.remove(move) - move = random_bot(board, (x, y)) - dx, dy = directions[move] - nx = x + dx - ny = y + dy - return move - diff --git a/bots/peter.py b/bots/peter.py deleted file mode 100755 index 72bbc95..0000000 --- a/bots/peter.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env python -"""New and improved bot, OPTIMISED!!""" - -import random -import sys - -EMPTY_TILE = '.' -APPLE_TILE = '*' - -WIDTH, HEIGHT, SNAKE_BODY = raw_input().split() -WIDTH = int(HEIGHT) -HEIGHT = int(HEIGHT) - -SNAKE_BODY = SNAKE_BODY.lower() -SNAKE_HEAD = SNAKE_BODY.upper() - -HEADX = None -HEADY = None - -def get_cell(board, x, y): - if x < 0 or x >= WIDTH or y < 0 or y >= HEIGHT: - raise KeyError, 'out of range.' - return board[y][x] - -BOARD = [] -for y in xrange(HEIGHT): - row = raw_input() - for x, char in enumerate(row): - if char == SNAKE_HEAD: - HEADX = x - HEADY = y - BOARD.append(row) - -md_two = { - (-1, 0, 'l'): ((-2, 0), (-1, 1), (-1, -1)), - (0, -1, 'u'): ((-1, -1), (1, -1), (0, -2)), - (1, 0, 'r'): ((2, 0), (1, 1), (1, -1)), - (0, 1, 'd'): (((0, 2), (-1, 1), (1, 1))), -} - -max_score = 0 -max_moves = [] - -for (dx, dy, move), adj in md_two.items(): - score = 0 - - try: - square = get_cell(BOARD, HEADX + dx, HEADY + dy) - except KeyError: - continue - - if square == APPLE_TILE: - score += 2 - elif square != EMPTY_TILE: - continue # Definitely cannot move here. - - for ddx, ddy in adj: - try: - square = get_cell(BOARD, HEADX + ddx, HEADY + ddy) - except KeyError: - score -= 1 - continue - - if square == APPLE_TILE: - score += 2 - elif square == EMPTY_TILE: - score += 1 - elif square == SNAKE_BODY: - score -= 1 - elif square.isupper(): - score += 3 - - if score == max_score: - max_moves.append(move) - elif score > max_score: - max_score = score - max_moves = [move] - -if max_moves: - print random.choice(max_moves) -else: - print 'U' # Suicide! - diff --git a/bots/peter_smart.py b/bots/peter_smart.py deleted file mode 100755 index b099cdd..0000000 --- a/bots/peter_smart.py +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env python -"""New and improved bot, OPTIMISED!!""" - -import random -import sys - -DEBUG = False - -# Show tracebacks, then pause for debugging. -if DEBUG: - sys_excepthook = sys.excepthook - def excepthook(*args, **kwargs): - sys_excepthook(*args, **kwargs) - import time - time.sleep(10) - sys.excepthook = excepthook - -EMPTY_TILE = '.' -APPLE_TILE = '*' - -WIDTH, HEIGHT, SNAKE_BODY = raw_input().split() -WIDTH = int(WIDTH) -HEIGHT = int(HEIGHT) - -SNAKE_BODY = SNAKE_BODY.lower() -SNAKE_HEAD = SNAKE_BODY.upper() - -HEADX = None -HEADY = None - -SNAKE_LENGTH = 0 - -def get_cell(board, x, y): - if x < 0 or x >= WIDTH or y < 0 or y >= HEIGHT: - raise KeyError, 'out of range.' - return board[y][x] - -BOARD = [] -for y in xrange(HEIGHT): - row = raw_input() - for x, char in enumerate(row): - if char == SNAKE_HEAD: - HEADX = x - HEADY = y - elif char == SNAKE_BODY: - SNAKE_LENGTH += 1 - BOARD.append(row) - -MOVES = ( - (-1, 0, 'l'), - (1, 0, 'r'), - (0, -1, 'u'), - (0, 1, 'd') -) - -def get_score(x, y, n, done=None): - if done is None: - done = set() - - done.add((x, y)) - - score = 0 - explore = False - - # See if the cell exists. - try: - square = get_cell(BOARD, x, y) - except KeyError: - return 0 - - # Give some extra points for getting an apple. - if square == APPLE_TILE: - explore = True - score += 50 - - # Yay - it's empty! - elif square == EMPTY_TILE: - explore = True - score += 10 - - elif square.islower(): - score -= 1 - - if explore and n > 0: - # Explore n-1 cells further. - for dx, dy, move in MOVES: - nx = x + dx - ny = y + dy - - if (nx, ny) in done: - continue - - subscore = get_score(nx, ny, n - 1, done) - score += subscore / 10 - - return score * n - -max_score = None -max_moves = [] - -for dx, dy, move in MOVES: - score = 0 - - x = HEADX + dx - y = HEADY + dy - - n = (SNAKE_LENGTH + 4) / 2 - score = get_score(x, y, n) - -# print 'Score for', move, '=', score - - # Suicide protection squad! - try: - square = get_cell(BOARD, x, y) - except KeyError: - continue - else: - if square not in (APPLE_TILE, EMPTY_TILE): - continue - - if score == max_score: - max_moves.append(move) - elif max_score is None or score > max_score: - max_score = score - max_moves = [move] - -if max_moves: - print random.choice(max_moves) -else: - raise Exception, "No suitable moves found!" - diff --git a/bots/peter_smart2.py b/bots/peter_smart2.py deleted file mode 100755 index 8f431ca..0000000 --- a/bots/peter_smart2.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env python -"""New and improved bot, OPTIMISED!!""" - -import random -import sys - -DEBUG = False - -# Show tracebacks, then pause for debugging. -if DEBUG: - sys_excepthook = sys.excepthook - def excepthook(*args, **kwargs): - sys_excepthook(*args, **kwargs) - import time - time.sleep(10) - sys.excepthook = excepthook - -EMPTY_TILE = '.' -APPLE_TILE = '*' - -WIDTH, HEIGHT, SNAKE_BODY = raw_input().split() -WIDTH = int(WIDTH) -HEIGHT = int(HEIGHT) - -SNAKE_BODY = SNAKE_BODY.lower() -SNAKE_HEAD = SNAKE_BODY.upper() - -HEADX = None -HEADY = None - -SNAKE_LENGTH = 0 - -def get_cell(board, x, y): - if x < 0 or x >= WIDTH or y < 0 or y >= HEIGHT: - raise KeyError, 'out of range.' - return board[y][x] - -BOARD = [] -for y in xrange(HEIGHT): - row = raw_input() - for x, char in enumerate(row): - if char == SNAKE_HEAD: - HEADX = x - HEADY = y - elif char == SNAKE_BODY: - SNAKE_LENGTH += 1 - BOARD.append(row) - -MOVES = ( - (-1, 0, 'l'), - (1, 0, 'r'), - (0, -1, 'u'), - (0, 1, 'd') -) - -def get_score(x, y, n, done=None): - if done is None: - done = set() - - done.add((x, y)) - - score = 0 - explore = False - - # See if the cell exists. - try: - square = get_cell(BOARD, x, y) - except KeyError: - return 0 - - # Give some extra points for getting an apple. - if square == APPLE_TILE: - explore = True - score += 100 - - # Yay - it's empty! - elif square == EMPTY_TILE: - explore = True - score += 50 - - elif square.islower(): - score += 2 - - elif square.isupper(): - score += 1 - - if explore and n > 0: - # Explore n-1 cells further. - for dx, dy, move in MOVES: - nx = x + dx - ny = y + dy - - if (nx, ny) in done: - continue - - subscore = get_score(nx, ny, n - 1, done) - score += subscore / 10 - - return score * n - -max_score = None -max_moves = [] - -for dx, dy, move in MOVES: - score = 0 - - x = HEADX + dx - y = HEADY + dy - - n = (SNAKE_LENGTH + 4) / 2 - n = min([n, 10]) - score = get_score(x, y, n) - -# print 'Score for', move, '=', score - - # Suicide protection squad! - try: - square = get_cell(BOARD, x, y) - except KeyError: - continue - else: - if square not in (APPLE_TILE, EMPTY_TILE): - continue - - if score == max_score: - max_moves.append(move) - elif max_score is None or score > max_score: - max_score = score - max_moves = [move] - -if max_moves: - print random.choice(max_moves) -else: - raise Exception, "No suitable moves found!" - -- cgit v1.2.3