# 3. a)
# Napisati python program koji crta praznu tablu u igri Iks-oks (3x3).
print("a): ")
print("_|_|_")
print("_|_|_")
print(" | | ")

# 3. b) 
# Napisati funkciju koja crta tablu u igri Iks-oks (3x3). 
# Funkcija kao argument prima recnik sa vrednostima polja igre.
prazna_tabla = {(1,1): '_', (1, 2): '_', (1, 3): '_', 
                (2,1): '_', (2, 2): '_', (2, 3): '_',
                (3,1): '_', (3, 2): '_', (3, 3): '_'}

print("b): ")
def crtaj(tabla):
    print("{}|{}|{}".format(tabla[(1,1)], tabla[(1,2)], tabla[(1,3)]))
    print("{}|{}|{}".format(tabla[(2,1)], tabla[(2,2)], tabla[(2,3)]))
    print("{}|{}|{}".format(tabla[(3,1)], tabla[(3,2)], tabla[(3,3)]))

crtaj(prazna_tabla)

primer_tabla = {(1,1): 'o', (1, 2): 'o', (1, 3): 'x', 
                (2,1): 'o', (2, 2): 'x', (2, 3): 'x',
                (3,1): 'x', (3, 2): 'o', (3, 3): 'o'}
crtaj(primer_tabla)

# 3. c) 
# Napisati funkciju koja proverava da li je neko od igraca na tabli
# pobedio u igici ili ne (igraci su oznaceni karakterima 'x' i 'o', 
# prazna polja, karakter '_').

def provera(tabla):
    if tabla[(1,1)] == tabla[(1,2)] == tabla[(1,3)] == 'x' or \
       tabla[(2,1)] == tabla[(2,2)] == tabla[(2,3)] == 'x' or \
       tabla[(3,1)] == tabla[(3,2)] == tabla[(3,3)] == 'x' or \
       tabla[(1,1)] == tabla[(2,1)] == tabla[(3,1)] == 'x' or \
       tabla[(1,2)] == tabla[(2,2)] == tabla[(3,2)] == 'x' or \
       tabla[(1,3)] == tabla[(2,3)] == tabla[(3,3)] == 'x' or \
       tabla[(1,1)] == tabla[(2,2)] == tabla[(3,3)] == 'x' or \
       tabla[(1,3)] == tabla[(2,2)] == tabla[(3,1)] == 'x':
       print('X je pobenik!')

    elif tabla[(1,1)] == tabla[(1,2)] == tabla[(1,3)] == 'o' or \
       tabla[(2,1)] == tabla[(2,2)] == tabla[(2,3)] == 'o' or \
       tabla[(3,1)] == tabla[(3,2)] == tabla[(3,3)] == 'o' or \
       tabla[(1,1)] == tabla[(2,1)] == tabla[(3,1)] == 'o' or \
       tabla[(1,2)] == tabla[(2,2)] == tabla[(3,2)] == 'o' or \
       tabla[(1,3)] == tabla[(2,3)] == tabla[(3,3)] == 'o' or \
       tabla[(1,1)] == tabla[(2,2)] == tabla[(3,3)] == 'o' or \
       tabla[(1,3)] == tabla[(2,2)] == tabla[(3,1)] == 'o':
       print('O je pobenik!')

    else:
        print('Nemamo pobednika!')

def provera_pomoc(tabla, idx1, idx2, idx3, karakter):
    if tabla[idx1] == tabla[idx2] == tabla[idx3] == karakter:
        print("{} je pobednik!".format(karakter))
        exit()

def provera_igrac(tabla, karakter):
    provera_pomoc(tabla, (1,1), (1,2), (1,3), karakter)
    provera_pomoc(tabla, (2,1), (2,2), (2,3), karakter)
    provera_pomoc(tabla, (3,1), (3,2), (3,3), karakter)
    provera_pomoc(tabla, (1,1), (2,1), (3,1), karakter)
    provera_pomoc(tabla, (1,2), (2,2), (3,2), karakter)
    provera_pomoc(tabla, (1,3), (2,3), (3,3), karakter)
    provera_pomoc(tabla, (1,1), (2,2), (3,3), karakter)
    provera_pomoc(tabla, (1,3), (2,2), (3,1), karakter)

def provera2(tabla):
    provera_igrac(tabla, 'x')
    provera_igrac(tabla, 'o')
    print("Nemamo pobednika!")

def napradna_provera_pomoc(tabla, idx, karakter):
    if tabla[idx[0]] == tabla[idx[1]] == tabla[idx[2]] == karakter:
        print("{} je pobednik!".format(karakter))
        exit()

def napredna_provera_igrac(tabla, karakter):
    for i in [1, 2, 3]:
        idx = []
        for j in [1, 2, 3]:
            idx.append((i, j))
        napradna_provera_pomoc(tabla, idx, karakter)

    for j in [1, 2, 3]:
        idx = []
        for i in [1, 2, 3]:
            idx.append((i, j))
        napradna_provera_pomoc(tabla, idx, karakter)

    idx = []
    for i in [1, 2, 3]:
        idx.append((i, j))
    napradna_provera_pomoc(tabla, idx, karakter)

    idx = []
    for i in [1, 2, 3]:
        idx.append((i, j))
    napradna_provera_pomoc(tabla, idx, karakter)

def provera3(tabla):
    napredna_provera_igrac(tabla, 'x')
    napredna_provera_igrac(tabla, 'o')
    print("Nemamo pobednika!")

print("c) ")
#provera(primer_tabla)
#provera2(primer_tabla)
provera3(primer_tabla)