Search
Rekurze
reverse_str.txt:
def reverze(n, s): if n<len(s): print(n) return reverze(n+1,s)+s[n] else: return '' print(reverze(0,'ahoj')) str = '''Babička měla syna a dvě dcery. Nejstarší žila mnoho let ve Vídni u přátel, od nichž se vdala. Druhá dcera šla pak na její místo. Syn řemeslník též byl již samostatným a přiženil se do městského domku. Babička bydlela v pohorské vesničce na slezských hranicích, žila spokojeně v malé chaloupce se starou Bětkou, která byla její vrstevnice a již u rodičů sloužila. Nežila osamotnělá ve své chaloupce; všickni obyvatelé vesničtí byli bratřími jí a sestrami, ona jim byla matkou, rádkyní, bez ní se neskončil ani křest, ani svatba, ani pohřeb. Tu najednou přišel babičce list z Vídně od nejstarší dcery, v němž jí vědomost dávala, že manžel její službu přijal u jedné kněžny, která má velké panství v Čechách, a sice jen několik mil vzdálenosti od pohorské vesničky, kde babička bydlí. Tam že se nyní s rodinou odstěhuje, manžel pak vždy jen přes léto že tam bude, když i paní kněžna se tam zdržuje. Ke konci listu stála vroucí prosba, aby babička k nim se odebrala navždy a živobytí svoje u dcery a vnoučat strávila, kteří se již na ni těší. Babička se rozplakala; nevěděla, co má dělat! Srdce ji táhlo k dceři a k vnoučátkům, jichž neznala ještě, dávný zvyk poutal ji k malé chaloupce a k dobrým přátelům! Ale krev není voda, touha přemohla dávný zvyk, babička se rozmyslila, že pojede. Chaloupku se vším, co v ní, odevzdala staré Bětce s doložením: „Nevím, jak se mi tam líbit bude a jestli přece zde neumřu mezi vámi." Když jednoho dne vozík u chaloupky se zastavil, naložil naň kočí Václav babiččinu malovanou truhlu, kolovrat, bez něhož být nemohla, košík, v němž byla čtyry chocholatá kuřátka, pytlík s dvěma čtverobarevnými koťaty a pak babičku, která pro pláč ani neviděla před sebe. Požehnáním přátel provázena odejela k novému domovu.''' print(reverze(0,str))
nested_sum.py
sez=[1,2,[3,4,5],[[6,7],8],[9,[10]]] def nested_sum(x): soucet=0 for i in x: if type(i) == type([]): s = nested_sum(i) soucet+=s else: soucet+=i print("Soucet",x,"je",soucet) return soucet print(nested_sum(sez))
Hanoiské věže
hanoi.py
tycky = [ [20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1], [], [] ] def hanoi(n, ze, do, pom): if n>0: hanoi(n-1, ze, pom, do) t = tycky[ze].pop() if (len(tycky[do])==0 or tycky[do][-1]>t): tycky[do].append(t) else: print("ERROR - Chyba davame vesti kruh na mensi") print("0=", tycky[0], "1=", tycky[1], "2=", tycky[2]) hanoi(n-1, pom, do, ze) print("0=", tycky[0], "1=", tycky[1], "2=", tycky[2]) hanoi(len(tycky[0]), 0, 2, 1)
Hlavolam
hlavolam pro tisk skladacka.pdf
hlavolam.py
karty=[ [1,0,6,4], [0,4,6,4], [5,0,7,2], [1,5,7,3], [0,5,7,3], [1,5,7,2], [2,4,7,2], [3,1,6,2], [7,5,1,2]] def souhlas(a,b): if a>b: a,b=b,a return (a%2==0) and (a+1==b) pouzit = [0]*9 jaka = [-1]*9 otoc = [0]*9 def pasuje(n, k, o): if (n==0): return True elif (n==1 or n==2): #test vlevo return souhlas(karty[jaka[n-1]][(1-otoc[n-1])%4], karty[k][(3-o)%4]) elif (n==3 or n==6): #test nahore return souhlas(karty[jaka[n-3]][(2-otoc[n-3])%4], karty[k][(0-o)%4]) else: #test vlevo i nahore return souhlas(karty[jaka[n-1]][(1-otoc[n-1])%4], karty[k][(3-o)%4]) and souhlas(karty[jaka[n-3]][(2-otoc[n-3])%4], karty[k][(0-o)%4]) def najdi(n): if (n>=9): for l in range(9): print("Karta",l,"je",jaka[l],"otoceni",otoc[l]) print("-------------------------------------") else: k=0 while (k<9): if pouzit[k]==0: o=0 while (o<4): if pasuje(n,k,o): pouzit[k]=1 otoc[n]=o jaka[n]=k najdi(n+1) pouzit[k]=0 o+=1 k+=1 najdi(0)
hlavolam_animace.py (potřebuje instalované opencv z https://opencv.org/)
Také potřebujete obrázky skládačky ve stejném adresáři, ze kterého python spouštíte parts.tgz
import cv2 import numpy as np import time karty=[ [1,0,6,4], [0,4,6,4], [5,0,7,2], [1,5,7,3], [0,5,7,3], [1,5,7,2], [2,4,7,2], [3,1,6,2], [7,5,1,2]] def souhlas(a,b): if a>b: a,b=b,a return (a%2==0) and (a+1==b) parts=[] for i in range(9): parts.append(cv2.imread("part"+str(i)+".png")) img = np.zeros((3*235, 3*235, 3), np.uint8); def print_img(): img.fill(255) for r in range(3): for s in range(3): if jaka[r*3+s]>=0: i=parts[jaka[r*3+s]] if otoc[r*3+s]==1: i=cv2.rotate(parts[jaka[r*3+s]], cv2.ROTATE_90_CLOCKWISE) elif otoc[r*3+s]==2: i=cv2.rotate(parts[jaka[r*3+s]], cv2.ROTATE_180) elif otoc[r*3+s]==3: i=cv2.rotate(parts[jaka[r*3+s]], cv2.ROTATE_90_COUNTERCLOCKWISE) img[235*r:235*r+i.shape[0],235*s:235*s+i.shape[1]] = i cv2.imshow("Animation", img) cv2.waitKey(10) pouzit = [0]*9 jaka = [-1]*9 otoc = [0]*9 def pasuje(n, k, o): if (n==0): return True elif (n==1 or n==2): #test vlevo return souhlas(karty[jaka[n-1]][(1-otoc[n-1])%4], karty[k][(3-o)%4]) elif (n==3 or n==6): #test nahore return souhlas(karty[jaka[n-3]][(2-otoc[n-3])%4], karty[k][(0-o)%4]) else: #test vlevo i nahore return souhlas(karty[jaka[n-1]][(1-otoc[n-1])%4], karty[k][(3-o)%4]) and souhlas(karty[jaka[n-3]][(2-otoc[n-3])%4], karty[k][(0-o)%4]) def najdi(n): if (n>=9): for l in range(9): print("Karta",l,"je",jaka[l],"otoceni",otoc[l]) print("-------------------------------------") time.sleep(5) else: k=0 while (k<9): if pouzit[k]==0: o=0 while (o<4): if pasuje(n,k,o): pouzit[k]=1 otoc[n]=o jaka[n]=k print_img() najdi(n+1) pouzit[k]=0 jaka[n]=-1 o+=1 k+=1 najdi(0)