## Олимпиада по информатике. Готовимся побеждать!

Открытая группа активность: 4 ч., 5 мин. назад

Группа для тех, кто намеревается побеждать на районных и региональных олимпиадах по информатике.
Здесь можно будет найти олимпиадные задания, задачи повышенной сложности, обсудить оптимальные алгоритмы решений
Памятка для участников олимпиады

Сайт Информатикс – регистрирууемся, решаем, продвигаемся в рейтинге

### Программирование на Python. (записей: 99)

• Кстати о крестиках-ноликах: рабочую реализацию в востребованном формате «капчи» можно заценить тут http://www.it-simple.ru/?p=1767
Материал статьи тоже представляет определённый интерес.

• Код работает корректней работает в какой-то части, ведь крестик не присваивается к номеру ячейки…

```board = [[1, 2, 3, 4, 5, 6, 7, 8, 9], ["X", "O"]]
len(board)
print("_______________")
s = 0

def boardz(board):
for i in range(3):
print("|", board[i * 3], "|", board[i * 3 + 1], "|", board[i * 3 + 2], "|")
print("_______________")

print(boardz(board))

print("Введите числа ячейку, куда вы поставите (Х)")

while s == 0:
if playeranswer < 1 or playeranswer > 9:
print("Введи корректный номер ячейки")
else:
s = 1
if playeranswer > 1 and playeranswer < 9:
for i in range(1, 9):
if board[i] == playeranswer:
else:
while board[playeranswer-1] == board:
print("Эта ячейка уже занята. Выберите другую.")

print(boardz(board))
```
• Ну да. Крестик не садится в нужное место
На допе разбирали работающий простой вариант. Но идти прямым путем Alcaine не желает)

• Нет победы, и пару багов еще присутствует.

```board = [[1, 2, 3, 4, 5, 6, 7, 8, 9,], ["X", 0]]
len(board)
print("_______________")
s = 0
k = 0
turn=0

def boardz(board):
for i in range(3):
print("|", board[i * 3], "|", board[i * 3 + 1], "|", board[i * 3 + 2], "|")
print("_______________")

print(boardz(board))

while turn < 9:
print("Ход первого игрока. Введите номер ячейки, куда вы поставите (Х)")

while s == 0:
if playeranswer < 1 or playeranswer > 9:
print("Введите корректный номер ячейки")
else:
s = 1
s=0
if playeranswer > 0 and playeranswer < 10:
else:
print("Эта ячейка уже занята. Выберите другую.")
print(boardz(board))
turn=turn+1

print("Ход второго игрока. Введите номер ячейки, куда вы поставите (0)")

while k == 0:
if playeranswer1 < 1 or playeranswer1 > 9:
print("Введите корректный номер ячейки")
else:
k = 1
k=0
if playeranswer1 > 0 and playeranswer1 < 10:
else:
while playeranswer1 - 1 == board [playeranswer-1] or playeranswer1 - 1 == board [playeranswer1 - 1]:
print("Эта ячейка уже занята. Выберите другую.")
print(boardz(board))
turn=turn+1
```
• КПД нулевой, результат тоже.

```board = [[1, 2, 3, 4, 5, 6, 7, 8, 9,], ["X", 0]]
len(board)
print("_______________")
s = 0
k = 0
turn=0
z=0
w=0

def boardz(board):
for i in range(3):
print("|", board[i * 3], "|", board[i * 3 + 1], "|", board[i * 3 + 2], "|")
print("_______________")

print(boardz(board))

while turn < 9:
print("Ход первого игрока. Введите номер ячейки, куда вы поставите (Х)")

while s == 0:
if playeranswer < 1 or playeranswer > 9:
print("Введите корректный номер ячейки")
else:
s = 1
s=0
if playeranswer > 0 and playeranswer < 10:
board[playeranswer - 1] = board
while w == 0:
if board[playeranswer - 1] == board:
print("Эта ячейка уже занята. Выберите другую.")
else:
w = 1
w=0
print(boardz(board))
turn=turn+1

print("Ход второго игрока. Введите номер ячейки, куда вы поставите (0)")

while k == 0:
if playeranswer1 < 1 or playeranswer1 > 9:
print("Введите корректный номер ячейки")
else:
k = 1
k=0
if (playeranswer1 > 0 and playeranswer1 < 10):
board[playeranswer1 - 1] = board

while z==0:
if board[playeranswer1 - 1] == board:
print("Эта ячейка уже занята. Выберите другую.")
else:
z=1
z=0
print(boardz(board))
turn=turn+1
```
• ```board = [[1, 2, 3, 4, 5, 6, 7, 8, 9], ["X", 0]]
len(board)
print("_______________")
s=0
k = 0
turn = 0
z = 0
w = 0

def boardz(board):
for i in range(3):
print("|", board[i * 3], "|", board[i * 3 + 1], "|", board[i * 3 + 2], "|")
print("_______________")

print(boardz(board))

while turn < 9:
print("Ход первого игрока. Введите номер ячейки, куда вы поставите (Х)")

while z == 0:
if playeranswer < 1 or playeranswer > 9:
print("Введите корректный номер ячейки")
else:
break
if playeranswer >0 and playeranswer < 10 :
board[playeranswer - 1] = board
for i in range (1,9):
if (board[i]== board) and (board[i]==board[playeranswer-1]) :
while w==0:
print("Эта ячейчка уже занята. Выберите другую.")

else:
w=1
w=0
print(boardz(board))
turn = turn + 1

print("Ход второго игрока. Введите номер ячейки, куда вы поставите (0)")

while k == 0:
if playeranswer1 < 1 or playeranswer1 > 9:
print("Введите корректный номер ячейки")
else:
break
if playeranswer1 >0 and playeranswer1 < 10:
board[playeranswer1 - 1] = board
for i in range (1,9):
if (board[i]== board) and (board[i]==board[playeranswer1-1]) :
while s==0:
print("Эта ячейчка уже занята. Выберите другую.")
else:
s=1
s=0
print(boardz(board))
turn = turn + 1
```
• Нормально. Играть вполне можно если вводить корректные данные)
Поверка корректности ходов пока еще не работает

• Сделал функции для победы.
Выдает ошибку на 37 строчке кода.

```board = [[1, 2, 3, 4, 5, 6, 7, 8, 9], ["X", "O"]]
len(board)
print("_______________")
s = 0
turn = 0
z = 0

def boardz(board):
for i in range(3):
print("|", board[i * 3], "|", board[i * 3 + 1], "|", board[i * 3 + 2], "|")
print("_______________")

def win(board):
combination = ((1, 2, 3), (3, 6, 9), (4, 5, 6), (7, 8, 9), (1, 4, 7), (2, 5, 8)(1, 5, 9), (3, 5, 7))
for playeranswer in combination:
print("Игрок первый выиграл.")

def win1(board):
combination = ((1, 2, 3), (3, 6, 9), (4, 5, 6), (7, 8, 9), (1, 4, 7), (2, 5, 8)(1, 5, 9), (3, 5, 7))
for playeranswer1 in combination:
print("Игрок второй выиграл.")

print(boardz(board))

while turn < 9:
while s == 0:
playeranswer = int(input("Куда поставите" + board + "?: "))
try:
except:
print("Вы ввели текст.")
continue

if playeranswer >= 1 or playeranswer <= 9:
if (str(board[playeranswer - 1] not in board and board)):
board[playeranswer - 1] = board
s = 1
else:
print("Эта ячейка уже занята. Выберите другую.")
else:
print("Введите корректный номер ячейки.")
print(boardz(board))
s = 0
turn = turn + 1
while z == 0:
playeranswer1 = int(input("Куда поставите" + board + "?: "))
try:
except:
print("Вы ввели текст.")
continue
if playeranswer1 >= 1 and playeranswer1 <= 9:
if (str(board[playeranswer1 - 1] not in board and board)):
board[playeranswer1 - 1] = board
z = 1
else:
print("Эта ячейка уже занята. Выберите другую")
else:
print("Введите корректный номер ячейки.")
z = 1
turn = turn + 1
print(boardz(board))
```
• ```board = [1, 2, 3, 4, 5, 6, 7, 8, 9]
len(board)
print("_______________")
s = 0
turn = 0
z = 0

def boardz(board):
for i in range(3):
print("|", board[i * 3], "|", board[i * 3 + 1], "|", board[i * 3 + 2], "|")
print("_______________")

print(boardz(board))

while turn <= 9:
while s == 0:
playeranswer = int(input("Куда поставите Х ?: "))
if playeranswer >= 1 or playeranswer <= 9:
if (str(board[playeranswer - 1]) not in "XO"):
board[playeranswer - 1] = 'X'
s = 1
turn = turn + 1
else:
print("Эта ячейка уже занята. Выберите другую.")
else:
print("Введите корректный номер ячейки.")
print(boardz(board))
s = 0
while z == 0:
playeranswer1 = int(input("Куда поставите O ?: "))
if playeranswer1 >= 1 and playeranswer1 <= 9:
if (str(board[playeranswer1 - 1]) not in "XO"):
board[playeranswer1 - 1] = 'O'
z = 1
turn = turn + 1
else:
print("Эта ячейка уже занята. Выберите другую")
else:
print("Введите корректный номер ячейки.")
z = 0
print(boardz(board))

def win(board):
combination = ((1, 2, 3), (3, 6, 9), (4, 5, 6), (7, 8, 9), (1, 4, 7), (2, 5, 8),(1, 5, 9), (3, 5, 7))
for playeranswer in combination:
else:
return False

def win1(board):
combination = ((1, 2, 3), (3, 6, 9), (4, 5, 6), (7, 8, 9), (1, 4, 7), (2, 5, 8),(1, 5, 9), (3, 5, 7))
for playeranswer1 in combination:
else:
return False

def main(board):
win2=False
while not win2:
if turn>4:
if  win(board):
print("Первый игрок выиграл.")
elif win1(board):
print ("Второй игрок выиграл.")
break
if turn==9:
print("Ничья.")
```
• Уже гораздо лучше. Есть прогресс)
Пока еще игра не завершается корректно сразу после построения выигрышной линии.
Ждем финальную версию варианта для двух игроков.

• После 5 хода автоматическая победа. Баг.

```board = [1, 2, 3, 4, 5, 6, 7, 8, 9]
len(board)
print("_______________")

def boardz(board):
for i in range(3):
print("|", board[i * 3], "|", board[i * 3 + 1], "|", board[i * 3 + 2], "|")
print("_______________")

print(boardz(board))

def chose(result):
vr=False
while not vr:
playeranswer = int(input("Куда поставите " + result + " ?"))
if playeranswer >= 1 or playeranswer <= 9:
if (str(board[playeranswer - 1]) not in "XO"):
board[playeranswer - 1] = result
vr = True
else:
print("Эта ячейка уже занята. Выберите другую.")
else:
print("Введите корректный номер ячейки.")

def win(board):
combination = ((1, 2, 3), (3, 6, 9), (4, 5, 6), (7, 8, 9), (1, 4, 7), (2, 5, 8),(1, 5, 9), (3, 5, 7))
for playeranswer in combination:
else:
return False

def main(board):
turn=0
win2=False
while not win2:
print(boardz(board))
if turn%2==0:
chose("X")
else:
chose("O")
turn=turn+1
if turn>4:
if turn%2==1:
if win:
print(win,"Первый игрок выиграл")
break
elif turn%2==0:
if win:
print(win,"Второй игрок выиграл")
break

if turn==9:
print("Ничья.")
break
print(boardz(board))
main(board)
```
• Готовая игра «крестики-нолики» на двоих игроков.

```board = list(range(1,10))

def boardz(board):
print ("_____________")
for i in range(3):
print ("|", board[0+i*3], "|", board[1+i*3], "|", board[2+i*3], "|")
print ("_____________")

def chose(result):
vr=False
while not vr:
playeranswer = int(input("Куда поставите " + result + " ?"))
if playeranswer >= 1 and playeranswer <= 9:
if (str(board[playeranswer - 1]) not in "XO"):
board[playeranswer - 1] = result
vr = True
else:
print("Эта ячейка уже занята. Выберите другую.")
else:
print("Введите корректный номер ячейки.")

def win(board):
combination = ((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))
for together in combination:
if board[together] == board[together] == board[together]:
return board[together]
return False

def main(board):
turn=0
win1 = False
while not win1:
boardz(board)
if turn % 2 == 0:
chose("X")
else:
chose("O")
turn=turn+1
if turn > 4:
if win(board):
print (win(board), "выиграл!")
break
if turn == 9:
print ("Ничья!")
break
boardz(board)

main(board)
```
• Таки еще остались недоработки
При вводе некорректного номера ячейки – крах

• С прошлого года код так и не исправлен)
А баг ведь исправляется легко. В одном месте всего надо вместо «ИЛИ» поставить «И»

• Исправлено!!