summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Ward <peteraward@gmail.com>2011-05-27 17:06:27 +1000
committerPeter Ward <peteraward@gmail.com>2011-05-27 17:06:27 +1000
commita7500846e6d54f5b7c0f9e26cca63656dbdf3a29 (patch)
tree934ea04ea68f97e8881b45489a28d619330d2023
parente0962ffe58cd43534ebc98ee7e83f70b992855a8 (diff)
Preparation for new process bot.
-rw-r--r--bots.py52
-rwxr-xr-xbots/peter.py83
-rwxr-xr-xbots/peter_smart.py131
-rwxr-xr-xbots/peter_smart2.py135
4 files changed, 0 insertions, 401 deletions
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!"
-