To add :stick
moveto :stick
Forward 10 PenDown
onedisc :working
SetY -50
Make :stick Sentence :working :disc
End

To discs :small :large
If :small > :large [SetY -50 Stop]
Forward 10 PenDown
onedisc :large
discs :small :large - 1
End

To eliminate :stick
moveto :stick
Make "working First :disc
PenDown PENERASE
onedisc :working
SetY -50
Make :stick ButFirst :disc
End

To hanoi :num :from :middle :goal
If :num = 0 [Stop]
hanoi :num - 1 :from :goal :middle
move.one :from :goal
hanoi :num - 1 :middle :from :goal
End

To move.one :from :to
Make "Count :Count + 1
eliminate :from
add :to
End

To moveto :stick
PenUp
SetX ( ButFirst :stick ) * 80 - 160
Make "disc Thing :stick
SetY 10 * ( Count :disc ) - 50
End

To onedisc :size
If First Pen = "PENDOWN [SetPenColour :size]
Make "size :size * :fact
SetPenWidth 8 Left 90 Forward :size Back :size * 2 Forward :size Right 90 SetPenWidth 1
If First Pen = "PENERASE [SetPenColour 1 PenDown Forward 4 Back 8 Forward 4]
PenUp
End

To platform :Pos
Right 90 SetX XCor - 30
Repeat 2 [Forward 60 Right 90 Forward 10 Right 90]
PenUp SetPos Sentence XCor + 5 YCor - 5
PenDown Fill PenUp SetPos :Pos SetHeading 0
End

To sequence :n
If :n = 1 [Output [1]]
Output Sentence sequence :n - 1 :n
End

To start :n
If (Or :n > 15 :n < 1) [ClearText Print [The number of discs must be between 1 and 15] Stop]
ClearScreen ClearText SetPenWidth 1
Make "num :n
If :num > 7 [Make "fact 2] [Make "fact 4]
ClearScreen HideTurtle
3sticks
discs 1 :num
Wait "100
Make "Count 0
Make "s2 []
Make "s3 []
Make "s1 sequence :num
hanoi :num "s1 "s2 "s3
( Print [Number of movements:] :Count )
End

To stick
PenDown Forward 160 Back 160
platform Pos
End

To 3sticks
SetPenColour 1 PenUp
SetY -50 stick
SetX 80 stick
SetX -80 stick
;SetStyle "TIMES SetStyleSize [1 1]
Right 90 PenUp SetPos [-115 120] PenDown GraphicsWrite [Towers of Hanoi]
SetStyleSize [0.5 0.5]
PenUp SetPos [-100 -80] PenDown GraphicsWrite "From
PenUp SetPos [-20 -80] PenDown GraphicsWrite "Middle
PenUp SetPos [60 -80] PenDown GraphicsWrite "Goal
Left 90 PenUp SetPos [-80 -50]
End

start 7
