Skip to content

Instantly share code, notes, and snippets.

@dobrakmato
Created March 8, 2019 18:49
Show Gist options
  • Save dobrakmato/07be307e0fd47acfa39158d406a157ac to your computer and use it in GitHub Desktop.
Save dobrakmato/07be307e0fd47acfa39158d406a157ac to your computer and use it in GitHub Desktop.
UTI 3
import turtle
t = turtle.Turtle()
# vypneme okamzite prekreslovanie aby sme nemuseli cakat na pomale korytnacky, ktorym to aj
# na najvyssej rychlosti trva relativne dlho pri zlozitych obrazkoch ako je slovo(10) a pod.
# neskor to zase zapneme aby sme predsalen nieco videli. sice to bude trhane, ale rychle.
turtle.tracer(0)
# prepisuje znak na vela znakov podla pravidiel gramatiky
def phi(e):
if e == '+':
yield '+'
elif e == '-':
yield '-'
elif e == 'F':
yield from ['F'] * 2
elif e == 'f':
yield from ['F', '-', 'f', '+', '+', 'F', '+', '+'] * 3
# rekurzivne generuje slovo podla gramatiky phi
def slovo(n):
if n == 0: # trivialny pripad
yield 'f'
else:
for e in slovo(n - 1):
yield from phi(e)
def kresli(s, krok):
i = 0
for znak in s:
if (i % 100000) == 0: # iba raz za cas prekreslime plochu aby sme predsalen videli ako sa nieco kresli
turtle.tracer(1)
turtle.tracer(0)
i += 1
if znak == 'f':
pass # rest
elif znak == 'F':
t.forward(krok)
elif znak == '+':
t.right(60)
elif znak == '-':
t.left(120)
def prvychkod(m, n, s):
for _ in range(n): # prvych n z generatoru
next(s) # zahod
for _ in range(m): # dalsi m z generator
yield next(s) # generuj
if __name__ == '__main__':
# kresli(slovo(2), 10)
# kresli(slovo(3), 10)
# kresli(slovo(4), 10)
# kresli(slovo(10), 0.3) # musime dat dost male cislo aby sa to zmestilo na obrazovku
kresli(prvychkod(1000, 100000, slovo(15)), 10)
# cakame na uzivatela
turtle.tracer(1)
turtle.done()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment