Add currently solved exerises from Chapter 16

This commit is contained in:
lolabird 2023-12-20 22:24:30 -07:00
commit 1a90502946
6 changed files with 269 additions and 0 deletions

View file

@ -0,0 +1,37 @@
def setState():
jugA = {"name": "Jug A", "state": 0, "cap": 4}
jugB = {"name": "Jug B", "state": 0, "cap": 3}
target = 2
return fillJug(1, jugA, jugB, target)
def fillJug(rounds, jugA, jugB, target):
pour = 0
if jugA["state"] == target:
print("Target reached")
return
else:
if jugB["state"] == 0:
jugB["state"] += jugB["cap"] #fill jugB
print(rounds, jugA, jugB)
if jugA["state"] == 0:
pour = jugB["state"] - jugA["state"]
else:
pour = jugA["cap"] - jugA["state"]
#fill jugA with the contents of jugB
jugA["state"] += pour
jugB["state"] -= pour
print(rounds, jugA, jugB)
if jugA["state"] == jugA["cap"]:
jugA["state"] = 0 #empty jugA if full
print(rounds, jugA, jugB)
fillJug(rounds + 1, jugA, jugB, target)
setState()

View file

@ -0,0 +1,28 @@
def stackTowers(num):
A = []
B = []
C = []
rounds = 0
for i in range(num):
A.insert(0, i+1)
def hanoi(num, start, aux, end):
nonlocal rounds
if num == 1:
end += [start.pop()]
rounds += 1
print(rounds, A, B, C)
else:
hanoi(num - 1, start, end, aux)
end += [start.pop()]
rounds += 1
print(rounds, A, B, C)
hanoi(num -1, aux, start, end)
hanoi(num, A, B, C)
stackTowers(5)

View file

@ -0,0 +1,55 @@
import turtle
def createLSystem(numIters, axiom):
if numIters == 0:
return axiom
else:
return createLSystem(numIters - 1, processString(axiom))
def processString(oldStr):
newstr = ""
for ch in oldStr:
newstr = newstr + applyRules(ch)
return newstr
def applyRules(ch):
newstr = ""
if ch == 'A':
newstr = '-BF+AFA+FB-' # Rule 1
elif ch == 'B':
newstr = '+AF-BFB-FA+'
else:
newstr = ch # no rules apply so keep the character
return newstr
def drawLsystem(aTurtle, instructions, angle, distance):
for cmd in instructions:
if cmd == 'F':
aTurtle.forward(distance)
elif cmd == '+':
aTurtle.left(angle)
elif cmd == '-':
aTurtle.right(angle)
def main():
inst = createLSystem(4, "A")
t = turtle.Turtle()
wn = turtle.Screen()
t.up()
t.back(200)
t.down()
t.speed(9)
drawLsystem(t, inst, 90, 5)
wn.exitonclick()
main()

View file

@ -0,0 +1,55 @@
import turtle
def createLSystem(numIters, axiom):
if numIters == 0:
return axiom
else:
return createLSystem(numIters - 1, processString(axiom))
def processString(oldStr):
newstr = ""
for ch in oldStr:
newstr = newstr + applyRules(ch)
return newstr
def applyRules(ch):
newstr = ""
if ch == 'F':
newstr = 'F-F++F-F' # Rule 1
else:
newstr = ch # no rules apply so keep the character
return newstr
def drawLsystem(aTurtle, instructions, angle, distance):
for cmd in instructions:
if cmd == 'F':
aTurtle.forward(distance)
elif cmd == 'B':
aTurtle.backward(distance)
elif cmd == '+':
aTurtle.right(angle)
elif cmd == '-':
aTurtle.left(angle)
def main():
inst = createLSystem(4, "F--F--F")
t = turtle.Turtle()
wn = turtle.Screen()
t.up()
t.back(200)
t.down()
t.speed(9)
drawLsystem(t, inst, 60, 5)
wn.exitonclick()
main()

View file

@ -0,0 +1,45 @@
import turtle
import random
def drawTriangle(points,color,myTurtle):
myTurtle.fillcolor(color)
myTurtle.up()
myTurtle.goto(points[0][0],points[0][1])
myTurtle.down()
myTurtle.begin_fill()
myTurtle.goto(points[1][0],points[1][1])
myTurtle.goto(points[2][0],points[2][1])
myTurtle.goto(points[0][0],points[0][1])
myTurtle.end_fill()
def getMid(p1, p2, delta):
return ( (((p1[0]+p2[0]) / 2) + random.uniform(-delta, delta)),
(((p1[1] + p2[1]) / 2) + random.uniform(-delta, delta)))
def fractalMnt(points,degree,myTurtle):
colormap = ['floralwhite','brown','darkgoldenrod','olive','maroon']
drawTriangle(points,colormap[degree],myTurtle)
if degree > 0:
mid1 = getMid(points[0], points[1], 10)
mid2 = getMid(points[0], points[2], 10)
mid3 = getMid(points[1], points[2], 10)
fractalMnt([points[0], mid1, mid2], degree-1, myTurtle)
fractalMnt([points[1], mid1, mid3], degree-1, myTurtle)
fractalMnt([points[2], mid3, mid2], degree-1, myTurtle)
fractalMnt([mid1, mid3, mid2], degree-1, myTurtle)
def main():
myTurtle = turtle.Turtle()
myWin = turtle.Screen()
myPoints = [[-100,-50],[0,100],[100,-50]]
fractalMnt(myPoints,4,myTurtle)
myWin.exitonclick()
main()

View file

@ -0,0 +1,49 @@
import turtle
import random
def color(branchlen, t):
t.pensize(branchlen/5)
if branchlen < 15:
t.color("green")
else:
t.color("brown")
def getAngle():
return random.randrange(15, 46)
def getLen(t):
return random.randrange(5, 15)
def tree(branchLen,t):
if branchLen > 5:
color(branchLen, t)
t.forward(branchLen)
angle = getAngle()
t.right(angle)
tree(branchLen-getLen(t),t)
t.left(angle * 2)
tree(branchLen-getLen(t),t)
t.right(angle)
t.backward(branchLen)
t.color("brown")
def main():
t = turtle.Turtle()
myWin = turtle.Screen()
t.left(90)
t.up()
t.backward(100)
t.down()
t.color("brown")
t.speed(10)
t.pensize(5)
tree(75,t)
myWin.exitonclick()
main()