+
     Bi2                         R t ^ RI5 ^ RIt ! R R]4      t ! R R]4      tR tR tR	 t	R
 t
R tRR ltR tR tR tR tR tR tR tRtRt]R8X  d   ]! 4       t]! 4        R# R# )a  turtledemo/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()
)*Nc                   8   a  ] tR t^t o R tR tR tR tRtV t	R# )Blockc                    Wn         \        P                  V R RR7       V P                  4        V P	                  VR,          R^4       V P                  R4       V P                  4        R# )squareF)shapevisibleg      ?blackN)sizeTurtle__init__pu	shapesize	fillcolorst)selfr
   s   &&1/usr/lib/python3.14/turtledemo/sorting_animate.pyr   Block.__init__   sK    	He<	tcz3*w	    c                (    V P                  R 4       R# )redNr   r   s   &r   glow
Block.glow   s    ur   c                (    V P                  R 4       R# )r	   Nr   r   s   &r   unglowBlock.unglow   s    wr   c                8    R P                  V P                  4      # )zBlock size: {0})formatr
   r   s   &r   __repr__Block.__repr__    s     ''		22r   )r
   N)
__name__
__module____qualname____firstlineno__r   r   r   r    __static_attributes____classdictcell____classdict__s   @r   r   r      s      3 3r   r   c                   D   a  ] tR t^$t o R tR tR tR tR tR t	Rt
V tR# )	Shelfc                     Wn         RV n        R# )z.create a shelf. y is y-position of first blockNij)yx)r   r-   s   &&r   r   Shelf.__init__&   s    r   c                   VP                  4       w  p pV^,          ^,          pVP                  V P                  V,           4       VP                  V P                  ^"\        V 4      ,          ,           4       V P                  V4       R# )   N)r   setyr-   setxr.   lenappend)r   dwidth_y_offsets   &&   r   push
Shelf.push+   s]    kkmq!19r>	tvv !	tvvSY&'Ar   c                p    WR   F-  pVP                  4       w  r4VP                  V^",
          4       K/  	  R # Nposr3   r   ibxposr8   s   &&   r   _close_gap_from_iShelf._close_gap_from_i3   -    bAeegGDFF4"9 r   c                p    WR   F-  pVP                  4       w  r4VP                  V^",           4       K/  	  R # r=   r>   r@   s   &&   r   _open_gap_from_iShelf._open_gap_from_i8   rF   r   c                    \         P                  W4      pVP                  4        VP                  ^4       V P	                  V4       V# )   )listpopr   r2   rD   )r   keyrB   s   && r   rM   	Shelf.pop=   s7    HHT		ss#r   c                R   V P                  V4       \        P                  WV4       VP                  V P                  ^"V,          ,           4       VP                  4       w  p pV^,          ^,          pVP                  V P                  V,           4       VP                  4        R# )"   N)	rH   rL   insertr3   r.   r   r2   r-   r   )r   rN   rB   r7   r8   r9   s   &&&   r   rR   Shelf.insertD   ss    c"Dq!	tvvS !kkmq!19r>	tvv !	
r   )r.   r-   N)r"   r#   r$   r%   r   r:   rD   rH   rM   rR   r&   r'   r(   s   @r   r+   r+   $   s(     


 r   r+   c                    \        V 4      p\        ^V4       Fe  pTpV^ 8  d:   W,          P                  W^,
          ,          P                  8  d   V^,
          pK@  V P                  W0P	                  V4      4       Kg  	  R#    Nr4   ranger
   rR   rM   )shelflengthrA   holes   &   r   isortr\   N   sc    ZF1fQh58==5?+?+??!8DT99Q<(	 
 r   c                 .   \        V 4      p\        ^ V^,
          4       Fr  pTp\        V^,           V4       F.  pW,          P                  W,          P                  8  g   K,  TpK0  	  W28w  g   KR  V P                  W P	                  V4      4       Kt  	  R# )    NrW   )rY   rZ   jiminrA   s   &    r   ssortra   W   sp    ZF1fqj!q1uf%Ax}}u{/// & 9LLIIdO, "r   c                 V   W,          pV P                  W P                  V4      4       Tp\        W4       FO  pW,          P                  VP                  8  g   K&  V P                  WPP                  V4      4       V^,           pKQ  	  V P                  WPP                  V4      4       V# )rV   )rR   rM   rX   r
   )rY   leftrightpivot_indexpivotstore_indexrA   s   &&&&   r   	partitionrh   a   s    E	LL		+./K48==5::%LLiil3%/K   
LLii./r   c                 ~    W8  d7   Tp\        WW#4      p\        WV^,
          4       \        W^,           V4       R# R# rU   )rh   qsort)rY   rc   rd   re   pivot_new_indexs   &&&  r   rj   rj   l   s;    |#EDe?Q./eq(%0	 r   c                     \        4        \        4        \        \        ^
4      4      p \        P
                  ! V 4       \        V 4       Fs  w  r\        V\        \        4      4       FQ  p\        V,          P                  V^,           8X  g   K(  \        P                  V\        P                  V4      4       KS  	  Ku  	  \        \        4       \        \        ^R7       \        4        R# )
   lineN)disable_keysclearrL   rX   randomshuffle	enumerater4   sr
   rR   rM   	show_textinstructions1instructions2enable_keys)targetrA   tr_   s       r   	randomizer|   s   s    N	G%)_F
NN6&!q#a&!AtyyAE!AEE!H% " " mm!$Mr   c                 Z    ^V,          p\        ^ RV,
          4       \        V RRR7       R# )   center)alignfontNi)Courier   bold)gotowrite)textro   s   &&r   rv   rv      s&    9D4$;	$h%<=r   c                      \        4        \        4        \        R 4       \        \        4       \        4        \        \
        4       \        \        ^R7       \        4        R# )zSelection Sortrn   N)rp   rq   rv   ra   ru   rw   rx   ry    r   r   start_ssortr      8    N	G	!H	Gmm!$Mr   c                      \        4        \        4        \        R 4       \        \        4       \        4        \        \
        4       \        \        ^R7       \        4        R# )zInsertion Sortrn   N)rp   rq   rv   r\   ru   rw   rx   ry   r   r   r   start_isortr      r   r   c                      \        4        \        4        \        R 4       \        \        ^ \        \        4      ^,
          4       \        4        \        \        4       \        \        ^R7       \        4        R# )	Quicksortrn   N)	rp   rq   rv   rj   ru   r4   rw   rx   ry   r   r   r   start_qsortr      sD    N	Gk	!QA
	Gmm!$Mr   c                  n    \        R4      sRp V  F!  p\        P                  \        V4      4       K#  	  R# )rK   Ni8)
   r1      	   rV      rm            )r+   ru   r:   r   )valsrA   s     r   
init_shelfr      s*    dA*D	uQx r   c                  f    \        R R4       \        R R4       \        R R4       \        R R4       R # )Nru   rA   qr)onkeyr   r   r   rp   rp      s*    	$	$	$	$r   c                      \        \        R 4       \        \        R4       \        \        R4       \        \        R4       \        \
        R4       R# )rA   ru   r   r   spaceN)r   r   r   r   r|   byer   r   r   ry   ry      s4    	+s	+s	+s	)S	#wr   c                      \        4       P                  4        \        4        \        4        \	        4        \        \        4       \        \        ^R7       \        4        \        4        R# )rV   rn   	EVENTLOOP)
	getscreenclearscreenhtpenupr   rv   rw   rx   ry   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__turtlerr   r   r   rL   r+   r\   ra   rh   rj   r|   rv   r   r   r   r   rp   ry   r   rw   rx   r"   msgmainloopr   r   r   <module>r      s   
  3F 3((D (T-	1>
 T2Z
&CJ r   