Advertisement
Guest User

Untitled

a guest
Aug 4th, 2015
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.82 KB | None | 0 0
  1. # -*- coding: cp1251 -*-
  2.  
  3. '''
  4. Крестики и Нолики - это игра для двух игроков (Х и О),
  5. которые расставляют эти знаки на 3х3 поле. Игрок, который
  6. сумел разместить три своих знака в любой горизонтали,
  7. вертикали или диагонали -- выигрывает.
  8. Но сейчас мы не будем играть в эту игру. Вы будете судить игру,
  9. и оценивать результат. Вам дан результат игры, и вы должны решить,
  10. кто победил или что это ничья. Ваша функция должна вернуть "X" если
  11. победил Х-игрок и "О" если победил О-игрок. В случае ничьи, результат
  12. должен быть "D".
  13.  
  14. Результаты игры представлены, как список (list) строк, где "X" и "O" - это
  15. отметки игроков и "." - это пустая клетка.
  16.  
  17. Вх. данные: Результат игры, как список (list) строк (str, unicode).
  18. Вых. данные: "X", "O" или "D", как строка (str).
  19.  
  20. Предусловия:
  21. В играх может быть только один победитель или ничья.
  22. len(game_result) == 3
  23. all(len(row) == 3 for row in game_result)
  24.  
  25. Для выполнения этой конструкции число строк == числу столбцов.Пример:(3х3)
  26. print [game_result[i][i] for i in reversed(range(len(game_result)))]
  27.  
  28. '''
  29.  
  30. def checkio(game_result):
  31.  
  32. slash_left = [game_result[i][i] for i in (range(len(game_result)))] # проверка по диагонали
  33. slash_left = ''.join(slash_left)
  34. print 'slash_left', slash_left
  35. print (game_result[1][1])
  36.  
  37. slash_right = game_result[0][2]+game_result[1][1]+game_result[2][0] # проверка по диагонали
  38. slash_right = ''.join(slash_right)
  39. print 'slash_right', slash_right
  40.  
  41. horiz_first = game_result[0] # проверка по горизонтали
  42. print 'horiz_first', horiz_first
  43.  
  44. horiz_second = game_result[1]
  45. print 'horiz_second', horiz_second
  46.  
  47. horiz_third = game_result[2]
  48. print 'horiz_third', horiz_third
  49.  
  50. vert_first = [row[0] for row in game_result] # проверка по вертикали
  51. vert_first = ''.join(vert_first)
  52. print 'vert_first', vert_first
  53.  
  54. vert_second = [row[1] for row in game_result]
  55. vert_second = ''.join(vert_second)
  56. print 'vert_second', vert_second
  57.  
  58. vert_third = [row[2] for row in game_result]
  59. vert_third = ''.join(vert_third)
  60. print 'vert_third', vert_third
  61.  
  62. game = [slash_left, slash_right, horiz_first, horiz_second, horiz_third, vert_first, vert_second, vert_third]
  63. print game
  64. if game:
  65. for z in game:
  66. if z == 'XXX':
  67. return 'X'
  68. break
  69. if z == 'OOO':
  70. return 'O'
  71. break
  72.  
  73. return 'D'
  74.  
  75. #return "D" or "X" or "O"
  76.  
  77. checkio([
  78. u"OXX",
  79. u"XXO",
  80. u"OXX"])
  81.  
  82.  
  83.  
  84.  
  85. def checkio(game_result):
  86. patterns = [] + game_result
  87. size = len(game_result)
  88. for col in range(size):
  89. patterns.append(''.join([game_result[row][col] for row in range(size)]))
  90. patterns.append(''.join([game_result[x][x] for x in range(size)]))
  91. patterns.append(''.join([game_result[x][size - x - 1] for x in range(size)]))
  92. return 'X' if 'XXX' in patterns else 'O' if 'OOO' in patterns else 'D'
  93.  
  94. #speedy
  95.  
  96. def checkio(l, m = ''.join):
  97. c = lambda s: [x[0] for x in s if len(set(x)) == 1 and x[0] != '.'] or 'D'
  98. return m(c(l+map(None, *l)+[m(l)[::4],m(l)[2:-1:2]]))[0]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement