#!/usr/bin/python
# coding=utf-8

# Ausgangsstellung
rows = [ 4, 5, 7, 10, 14 ]

def show_and_check():
  'Stellung anzeigen und prüfen, ob Spiel zu Ende'
  finished = True
  for i, n in enumerate(rows):
    print '%2d: %-s' % (i+1, n*'*')
    if n:
      finished = False
  return finished

def user():
  'Spielerzug abfragen ausführen'
  line = raw_input('Reihe Anzahl: ')
  row, diff = map(int, line.split())
  rows[row-1] -= diff
  print 'Du nimmst %d Stein(e) aus Reihe %d:' % (diff, row)

def computer():
  'Computerzug generieren und ausführen'
  xor = reduce(lambda x,y: x^y, rows, 0)
  if xor:  # Computer kann Gewinnstellung erzielen :)
    # Zug ermitteln, der zur Gewinnstellung (xor==0) führt
    for row, n in enumerate(rows):
      diff = n - (n^xor)
      if diff >= 0:
        break
  else:    # Spieler hat bereits Gewinnstellung :(
    # Zeit schinden: Aus der längsten Reihe 1 Stein wegnehmen
    row = max(range(len(rows)), key = lambda i: rows[i])
    diff = 1
  print 'Ich nehme %d Stein(e) aus Reihe %d:' % (diff, row+1)
  rows[row] -= diff

def main():
  'Gesamtablauf'
  print 'Ausgangsstellung:'
  show_and_check()
  skip = raw_input('Willst du beginnen? (j/n) ') == 'j'
  while True:
    # Ersten Computerzug überspringen, wenn Spieler beginnen möchte
    if not skip:
      computer()
      if show_and_check():
        print 'Ich habe gewonnen :)'
        break
    user()
    if show_and_check():
      print 'Du hast gewonnen :('
      break
    skip = False

main()
