X_SCORE = 10 O_SCORE = -10 BLANK_SCORE = 1 class Node: def __init__(self, value): self.value = value self.score = -1 class Counter: def __init__(self): self.score = 0 def add(self, value): if value == 'x': self.score += X_SCORE elif value == 'o': self.score += O_SCORE elif value == '_': self.score += BLANK_SCORE else: raise ValueError(value) def get_score(self): return abs(self.score) class Board: def __init__(self, l=None): nodes = {} row_counter = [Counter() for _ in xrange(len(l))] column_counter = [Counter() for _ in xrange(len(l[0]))] diagonal_counter_right, diagonal_counter_left = Counter(), Counter() for row_num, row in enumerate(l): for column_num, value in enumerate(row): nodes[(row_num, column_num)] = Node(value) row_counter[row_num].add(value) column_counter[column_num].add(value) if row_num == column_num: diagonal_counter_right.add(value) if row_num + column_num == len(l) - 1: diagonal_counter_left.add(value) for row_num in xrange(len(l)): row_count = row_counter[row_num] for column_num in xrange(len(l[0])): if l[row_num][column_num] != '_': continue column_count = column_counter[column_num] score = 0 score += row_count.get_score() + column_count.get_score() if row_num == column_num: score += diagonal_counter_right.get_score() if row_num + column_num == len(l) - 1: score += diagonal_counter_left.get_score() nodes[(row_num, column_num)].score = score self.nodes = nodes def to_output(self): nodes = self.nodes board = '' for row_num in xrange(3): board += '|'.join([nodes[(row_num, column_num)].value for column_num in xrange(3)]) + '\n' return board def from_input(): return Board([raw_input().split('|') for _ in xrange(3)]) def main(): while True: board = from_input() best_node = None best_node_score = -1 for k, v in board.nodes.iteritems(): if v.score > best_node_score: best_node = k best_node_score = v.score if not best_node: break board.nodes[best_node].value = 'x' print board.to_output() if __name__ == '__main__': main()
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question