Created
March 8, 2019 18:49
-
-
Save dobrakmato/07be307e0fd47acfa39158d406a157ac to your computer and use it in GitHub Desktop.
UTI 3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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