ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ Afc@sddlZddlZddlZddlZdd dYZdZdZdZdZe dkrej endS( iNt LifeBoardcBsPeZdZeddZdZdZdZedZ dZ RS(sEncapsulates a Life board Attributes: X,Y : horizontal and vertical size of the board state : dictionary mapping (x,y) to 0 or 1 Methods: display(update_board) -- If update_board is true, compute the next generation. Then display the state of the board and refresh the screen. erase() -- clear the entire board makeRandom() -- fill the board randomly set(y,x) -- set the given cell to Live; doesn't refresh the screen toggle(y,x) -- change the given cell from live to dead, or vice versa, and refresh the screen display t*cCs i|_||_|jj\}}|d|dd|_|_||_|jjd|jdd}|jjdd||jj|jdd|xUtd|jD]A}|jjd|dd|jjd||jddqW|jj dS(sCreate a new LifeBoard instance. scr -- curses screen object to use for display char -- character used to render live cells (default: '*') iit+t-it|N( tstatetscrtgetmaxyxtXtYtchartcleartaddstrtrangetrefresh(tselfRR R Rt border_linety((s(/usr/lib64/python2.7/Demo/curses/life.pyt__init__)s    %cCsc|dks6|j|ks6|dks6|j|krLtd||fnd|j||ftboardtxpostypostc((s(/usr/lib64/python2.7/Demo/curses/life.pytkeyloopsd                      "  " cCst|dS(N(RM(R4((s(/usr/lib64/python2.7/Demo/curses/life.pytmainst__main__(( R+tstringt tracebackRBRR6R7RMRNR-twrapper(((s(/usr/lib64/python2.7/Demo/curses/life.pyts$ n   ?