ROZMER = 5 # V zmysle, ze sachovnica ma rozmery 5x5 policok POKUSY = 5 # Pocet pokusov na vyhladanie riesenia class Uzol(): """ Definuje uzol v strome. Inak povedane stav. """ def __init__(self, policko, rodic=None, predkovia=set()): self.rodic = rodic self.policko = policko self.obsadene = predkovia.copy() self.obsadene.add(policko) def generuj_cesty(self): """ Vygeneruje mnozinu s moznymi polickami, kam sa moze kon pohnut. """ cesty = set() stlpec, riadok = self.vrat_poziciu() # hore vpravo x = stlpec + 1 y = riadok - 2 policko = self.vrat_policko(x, y) if policko is not None: cesty.add((x, y)) # hore vlavo x = stlpec - 1 y = riadok - 2 if self.vrat_policko(x, y) is not None: cesty.add((x, y)) # dole vpravo x = stlpec + 1 y = riadok + 2 if self.vrat_policko(x, y) is not None: cesty.add((x, y)) # dole vlavo x = stlpec - 1 y = riadok + 2 if self.vrat_policko(x, y) is not None: cesty.add((x, y)) # vpravo hore x = stlpec + 2 y = riadok - 1 if self.vrat_policko(x, y) is not None: cesty.add((x, y)) # vpravo dole x = stlpec + 2 y = riadok + 1 if self.vrat_policko(x, y) is not None: cesty.add((x, y)) # vlavo hore x = stlpec - 2 y = riadok - 1 if self.vrat_policko(x, y) is not None: cesty.add((x, y)) # vlavo dole x = stlpec - 2 y = riadok + 1 if self.vrat_policko(x, y) is not None: cesty.add((x, y)) cesty -= self.obsadene # to iste ako cesty.difference_update(self.obsadene) # je to odcitanie mnozin return cesty def vrat_poziciu(self): """ Vypocita poziciu na sachovnici na zaklade policka. Napr. policko 21 pri rozmere 5x5, vrati x = 1, y = 5 """ x = self.policko % ROZMER y = self.policko // ROZMER + 1 print("x = {}, y = {}".format(x, y)) return x, y def skontroluj_policko(self, x, y): """ Skontroluje, ci je policko v sachovnici. """ if (0 < x <= ROZMER) and (0 < y <= ROZMER): return True else: return False def vrat_policko(self, x, y): """ Vrati policko na zaklade x,y. Kontroluje spravnost policka. """ if self.skontroluj_policko(x, y): policko = (y - 1) * ROZMER policko += x return policko else: return None if __name__ == '__main__': print('Funguje to') u = Uzol(21, predkovia = set((3,4))) u.vrat_poziciu() print(u.generuj_cesty())
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question