#!/usr/bin/env python3 # -*- coding: utf8 -*- import sys board = {} DIRS = [(1,0), (0,1), (1,1), (1, -1)] # Směry, ve kterých můžeme vyhrát def test_direction(origin, dir): """Je symbol na pozici origin součástí nějakých pěti stejných symbolů v řadě, pokud se díváme ve směru dir?""" sym = board[origin] cnt = 1 # Počet stejných symbolů v řadě for sgn in -1, 1: # díváme se "doleva" i "doprava" (nahoru i dolů, …), spočteme pro obě strany, # jak dlouhý je souvislý úsek stejných symbolů for off in range(1, 5+1): pos = origin[0] + sgn * off * dir[0], origin[1] + sgn * off * dir[1] # board.get(pos) se chová podobně jako board[pos], ale pokud # board[pos] neexistuje, vrátí None, místo aby vyhodil výjimku if board.get(pos) == sym: cnt += 1 else: break return cnt >= 5 def test(origin): return any(test_direction(origin, dir) for dir in DIRS) # zavolá test_direction pro každý ze směrů, vrátí True právě když aspoň # jedno z volání vrátí True. Alternativně bychom to samé mohli vyjádřit for # cyklem. N = int(input()) for i in range(N): sym, r, c = input().split() pos = int(r), int(c) # Pozice aktuálního tahu jako uspořádaná dvojice # vstup je korektní, takže na board[pos] nic není board[pos] = sym if test(pos): # Aktuální hráč vyhrál print(sym, i) sys.exit(0) print('NIKDO')