def neighbours( x, y, world ):
    """
    Získá počet sousedů dané buňky.

    Parametry:
        x (int)         X-ová souřadnice
        y (int)         Y-ová souřadnice
        world (list)    2D pole s aktuálním stavem.

    Vrací:
        int Počet sousedů buňky na souřadnicích [x;y]
    """

    # Počet sousedů
    count = 0

    # maximální souřadnice na x-ové ose
    x_max = len(world[0])-1
    # maximální souřadnice na y-ové ose
    y_max = len(world)-1

    # Poznámka: Hodí se říct, že souřadnice mají počátek v levém horním rohu.
    # Směrem doprava postupuje souřadnice x a směrem dolů se zvětšuje
    # souřadnice y.
    # Pro získání y-tého řádku: world[y]
    # Pro získání x-tého prvku y-tého řádku: world[y][x]

    # Souřadnice J reprezentuje x-ovou souřadnici a K tu y-ovou.
    for j in range(x-1, x+2):
        for k in range(y-1, y+2):

            # Buňka si nemůže být sama sousedem
            if j == x and k == y:
                continue

            # Snažím se zasahovat do x-ové souřadnice mimo hrací pole
            if j < 0: 
                # len(world[0]) vrátí počet prvků. Protože ale j bude
                # rovno -1 nebo méně (-2), dostanu se tímto vždy na
                # poslední (předposlední) index v rámci řádku
                j = len(world[0])+j

            # Snažím se na x-ové ose zasahovat mimo hrací pole
            if j > x_max:
                # Přetečení zpět na začátek
                j = 0

            if k < 0:
                k = len(world)+k

            if k > y_max:
                k = 0

            # Pokud je na k,l souřadnicích v předchozím kroku 1, přičte se,
            # v opačném případě se nic neděje :)
            count += world[k][j]
    
    return count