Ë
    #´˜j½  ã                   óÆ   — d Z ddl­ ddlZ G d„ de«      Z G d„ de«      Zd„ Zd	„ Zd
„ Z	d„ Z
d„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdZdZedk(  r e«       Z e«        yy)a�  

         sorting_animation.py

A minimal sorting algorithm animation:
Sorts a shelf of 10 blocks using insertion
sort, selection sort and quicksort.

Shelves are implemented using builtin lists.

Blocks are turtles with shape "square", but
stretched to rectangles by shapesize()
 ---------------------------------------
       To exit press space button
 ---------------------------------------
é    )Ú*Nc                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚBlockc                 óÐ   — || _         t        j                  | dd¬«       | j                  «        | j	                  |dz  dd«       | j                  d«       | j                  «        y )NÚsquareF)ÚshapeÚvisibleg      ø?é   Úblack)ÚsizeÚTurtleÚ__init__ÚpuÚ	shapesizeÚ	fillcolorÚst)Úselfr   s     ú,lib/python3.12/turtledemo/sorting_animate.pyr   zBlock.__init__   sM   € ØˆŒ	Ü�‰˜ H°eˆÔ<Ø�‰Œ	Ø�‰�t˜c‘z 3¨Ô*Ø�‰�wÔØ�‰�	ó    c                 ó&   — | j                  d«       y )NÚred©r   ©r   s    r   Úglowz
Block.glow    s   € Ø�‰�uÕr   c                 ó&   — | j                  d«       y )Nr   r   r   s    r   ÚunglowzBlock.unglow#   s   € Ø�‰�wÕr   c                 ó8   — dj                  | j                  «      S )NzBlock size: {0})Úformatr   r   s    r   Ú__repr__zBlock.__repr__&   s   € Ø ×'Ñ'¨¯	©	Ó2Ð2r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   © r   r   r   r      s   „ òòò ó3r   r   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚShelfc                 ó    — || _         d| _        y)z.create a shelf. y is y-position of first blockijÿÿÿN)ÚyÚx)r   r'   s     r   r   zShelf.__init__,   s   € àˆŒØˆ�r   c                 óî   — |j                  «       \  }}}|dz  dz  }|j                  | j                  |z   «       |j                  | j                  dt        | «      z  z   «       | j                  |«       y )Nr
   é   é"   )r   Úsetyr'   Úsetxr(   ÚlenÚappend)r   ÚdÚwidthÚ_Úy_offsets        r   Úpushz
Shelf.push1   s]   € Ø—k‘k“m‰ˆˆq�!à˜1‘9˜r‘>ˆØ	�‰ˆt�v‰v˜Ñ Ô!Ø	�‰ˆt�v‰v˜œS ›Y™Ñ&Ô'Ø�‰�A�r   c                 óf   — | |d  D ])  }|j                  «       \  }}|j                  |dz
  «       Œ+ y ©Nr+   ©Úposr-   ©r   ÚiÚbÚxposr2   s        r   Ú_close_gap_from_izShelf._close_gap_from_i9   ó1   € Ø�a�b“ˆAØ—e‘e“g‰GˆD�!Ø�F‰F�4˜"‘9Õñ r   c                 óf   — | |d  D ])  }|j                  «       \  }}|j                  |dz   «       Œ+ y r6   r7   r9   s        r   Ú_open_gap_from_izShelf._open_gap_from_i>   r>   r   c                 ó–   — t         j                  | |«      }|j                  «        |j                  d«       | j	                  |«       |S )NéÈ   )ÚlistÚpopr   r,   r=   )r   Úkeyr;   s      r   rD   z	Shelf.popC   s9   € Ü�H‰H�T˜3ÓˆØ	�‰ŒØ	�‰ˆsŒØ×Ñ˜sÔ#Øˆr   c                 ó*  — | j                  |«       t        j                  | ||«       |j                  | j                  d|z  z   «       |j                  «       \  }}}|dz  dz  }|j                  | j                  |z   «       |j                  «        y )Nr+   r
   r*   )	r@   rC   Úinsertr-   r(   r   r,   r'   r   )r   rE   r;   r1   r2   r3   s         r   rG   zShelf.insertJ   su   € Ø×Ñ˜cÔ"Ü�‰�D˜#˜qÔ!Ø	�‰ˆt�v‰v˜˜S™Ñ Ô!Ø—k‘k“m‰ˆˆq�!à˜1‘9˜r‘>ˆØ	�‰ˆt�v‰v˜Ñ Ô!Ø	�‰�
r   N)	r    r!   r"   r   r4   r=   r@   rD   rG   r#   r   r   r%   r%   *   s    „ òò
òò
ò
ór   r%   c                 ó*  — t        | «      }t        d|«      D ]y  }|}|dkD  rO| |   j                  | |dz
     j                  k  r-|dz
  }|dkD  r#| |   j                  | |dz
     j                  k  rŒ-| j                  || j	                  |«      «       Œ{ y )Né   r   ©r.   Úranger   rG   rD   )ÚshelfÚlengthr:   Úholes       r   ÚisortrO   T   s�   € Ü�‹Z€FÜ�1�fÖˆØˆØ�QŠh˜5 ™8Ÿ=™=¨5°¸±©?×+?Ñ+?Ò?Ø˜!‘8ˆDð �QŠh˜5 ™8Ÿ=™=¨5°¸±©?×+?Ñ+?Ó?à�‰�T˜5Ÿ9™9 Q›<Õ(ð	 ð
 r   c                 ó   — t        | «      }t        d|dz
  «      D ]a  }|}t        |dz   |«      D ]$  }| |   j                  | |   j                  k  sŒ#|}Œ& ||k7  sŒA| j                  || j	                  |«      «       Œc y )Nr   rI   rJ   )rL   rM   ÚjÚiminr:   s        r   ÚssortrS   ]   sx   € Ü�‹Z€FÜ�1�f˜q‘jÖ!ˆØˆÜ�q˜1‘u˜fÖ%ˆAØ�Q‰x�}‰}˜u T™{×/Ñ/Ó/Ø‘ð &ð �1‹9Ø�L‰L˜˜EŸI™I d›OÕ,ñ "r   c                 ó@  — | |   }| j                  || j                  |«      «       |}t        ||«      D ]E  }| |   j                  |j                  k  sŒ | j                  || j                  |«      «       |dz   }ŒG | j                  || j                  |«      «       |S ©NrI   )rG   rD   rK   r   )rL   ÚleftÚrightÚpivot_indexÚpivotÚstore_indexr:   s          r   Ú	partitionr[   g   s‹   € Ø�+Ñ€EØ	‡L�L�˜Ÿ	™	 +Ó.Ô/Ø€KÜ�4˜ÖˆØ�‰8�=‰=˜5Ÿ:™:Ó%Ø�L‰L˜ e§i¡i°£lÔ3Ø%¨™/‰Kð  ð 
‡L�L�˜eŸi™i¨Ó.Ô/ØÐr   c                 óp   — ||k  r1|}t        | |||«      }t        | ||dz
  «       t        | |dz   |«       y y rU   )r[   Úqsort)rL   rV   rW   rX   Úpivot_new_indexs        r   r]   r]   r   sE   € Øˆe‚|ØˆÜ# E¨4°¸ÓDˆÜˆe�T˜?¨QÑ.Ô/Üˆe�_ qÑ(¨%Õ0ð	 r   c                  óº  — t        «        t        «        t        t        d«      «      } t	        j
                  | «       t        | «      D ]f  \  }}t        |t        t        «      «      D ]E  }t        |   j                  |dz   k(  sŒt        j                  |t        j                  |«      «       ŒG Œh t        t        «       t        t        d¬«       t        «        y )Né
   rI   ©Úline)Údisable_keysÚclearrC   rK   ÚrandomÚshuffleÚ	enumerater.   Úsr   rG   rD   Ú	show_textÚinstructions1Úinstructions2Úenable_keys)Útargetr:   ÚtrQ   s       r   Ú	randomizero   y   s�   € Ü„NÜ	„GÜ”%˜“)‹_€FÜ
‡N�N�6ÔÜ˜&Ö!‰ˆˆ1Ü�qœ#œa›&Ö!ˆAÜ�‰t�y‰y˜A ™EÓ!Ü—‘˜œAŸE™E !›HÕ%ñ "ð "ô ŒmÔÜŒm !Õ$Ü…Mr   c                 óH   — d|z  }t        dd|z
  «       t        | dd¬«       y )Nr*   r   iÿÿÿÚcenter)ÚCourieré   Úbold)ÚalignÚfont)ÚgotoÚwrite)Útextrb   s     r   ri   ri   †   s&   € Ø�‰9€DÜˆˆ4�$‰;ÔÜ	ˆ$�hÐ%<Ö=r   c                  óÈ   — t        «        t        «        t        d«       t        t        «       t        «        t        t
        «       t        t        d¬«       t        «        y )NzSelection SortrI   ra   )rc   rd   ri   rS   rh   rj   rk   rl   r#   r   r   Ústart_ssortr{   ‹   ó8   € Ü„NÜ	„GÜÐÔÜ	Œ!„HÜ	„GÜŒmÔÜŒm !Õ$Ü…Mr   c                  óÈ   — t        «        t        «        t        d«       t        t        «       t        «        t        t
        «       t        t        d¬«       t        «        y )NzInsertion SortrI   ra   )rc   rd   ri   rO   rh   rj   rk   rl   r#   r   r   Ústart_isortr~   •   r|   r   c                  óì   — t        «        t        «        t        d«       t        t        dt        t        «      dz
  «       t        «        t        t        «       t        t        d¬«       t        «        y )NÚ	Quicksortr   rI   ra   )	rc   rd   ri   r]   rh   r.   rj   rk   rl   r#   r   r   Ústart_qsortr�   Ÿ   sD   € Ü„NÜ	„GÜˆkÔÜ	Œ!ˆQ””A“˜‘
ÔÜ	„GÜŒmÔÜŒm !Õ$Ü…Mr   c                  óh   — t        d«      ad} | D ]   }t        j                  t        |«      «       Œ" y )Ni8ÿÿÿ)
é   r
   é   é	   rI   é   r`   é   é   é   )r%   rh   r4   r   )Úvalsr:   s     r   Ú
init_shelfr‹   ©   s*   € äˆd‹€AØ*€DÛˆÜ	�‰Œu�Q‹xÕñ r   c                  ód   — t        d d«       t        d d«       t        d d«       t        d d«       y )Nrh   r:   ÚqÚr)Úonkeyr#   r   r   rc   rc   °   s*   € Ü	ˆ$�ÔÜ	ˆ$�ÔÜ	ˆ$�ÔÜ	ˆ$�Õr   c                  ó¤   — t        t        d«       t        t        d«       t        t        d«       t        t        d«       t        t
        d«       y )Nr:   rh   r�   rŽ   Úspace)r�   r~   r{   r�   ro   Úbyer#   r   r   rl   rl   ¶   s4   € Ü	Œ+�sÔÜ	Œ+�sÔÜ	Œ+�sÔÜ	Œ)�SÔÜ	Œ#ˆwÕr   c                  óØ   — t        «       j                  «        t        «        t        «        t	        «        t        t        «       t        t        d¬«       t        «        t        «        y)NrI   ra   Ú	EVENTLOOP)
Ú	getscreenÚclearscreenÚhtÚpenupr‹   ri   rj   rk   rl   Úlistenr#   r   r   Úmainrš   ½   s=   € ÜƒK×ÑÔÜ„DŒ%Œ'Ü„LÜŒmÔÜŒm !Õ$Ü„MÜ
„HØr   zApress i for insertion sort, s for selection sort, q for quicksortz spacebar to quit, r to randomizeÚ__main__)r   )Ú__doc__Úturtlere   r   r   rC   r%   rO   rS   r[   r]   ro   ri   r{   r~   r�   r‹   rc   rl   rš   rj   rk   r    ÚmsgÚmainloopr#   r   r   Ú<module>r       s’   ðñô  Û ô3ˆFô 3ô((ˆDô (òTò-ò	ò1òó>ò
òòòòòòð T€Ø2€àˆZÒÙ
‹&€CÙ…Jð r   