Post on 11-Jan-2016
IS 313 Today
What's ahead?
I see I'm not the only one loopy around here…
10/7 Lec 5 ~ today, now!
HMC standings!?
10/8 homework 3 due
10/14 Lec 6 ~ "dictionaries"10/15 homework 4 due
10/28 Lec 7 ~ classes & objects11/29 homework 5 due
Strings, lists, and loops ~ beyond 1d !
http://www.asciimation.co.nz/
HMC Fall Break
An image alternative…
############
for row in range(3): print “#”*4
Print 4 rows
Creates line to print
print automaticallyadds a newline
Output
ASCII Art
$$$$
$$$$
$$$$
for row in range(3): print '$'*4
Output
A closer look…
$$$$
$$$$
$$$$
for row in range(3): print '$'*4
Output
No string * !
For this problem, string multiplication
is not allowed.
Without string multiplication…
for row in range(3): for col in range(4): print '$'
Print 3 rows
print 4 chars on each line
nested loops!
Output ?
(columns)
Without string multiplication…
for row in range(3): for col in range(4): print '$',
Print 3 rows
print 4 chars on each line
nested loops!
Output ?
(columns)
Comma suppresses newline
Without string multiplication…
Print 3 rows
print 4 chars on each line
nested loops!
tracking cols and rows!
(columns)
for row in range(3): for col in range(4): print '$', print
Comma suppresses newlineplain print produces newline
$ $ $ $
$ $ $ $
$ $ $ $
Tracking rows and columns
for row in range(3):
for col in range(4): print '$',
$ $ $ $
$ $ $ $
$ $ $ $
Output:
Variations!
for row in range( ):
for col in range( ): print '$',
def rectangle( width, height ): """ prints a rectangle of $ """
"Quiz"
for row in range( 3 ):
for col in range( 7 ):
print ____________,
0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3 4 5 6
Fill in each block of code so that it will print the lines above it.
for row in range( 3 ):
for col in range( 7 ):
print ____________,
0 1 0 1 0 1 01 0 1 0 1 0 10 1 0 1 0 1 0
for row in range( 3 ):
for col in range( 7 ):
print ______________,
0 0 0 0 0 0 01 1 1 1 1 1 12 2 2 2 2 2 2
for row in range( 3 ):
for col in range( 7 ):
print _____________,
0 1 2 3 4 5 61 2 3 4 5 6 72 3 4 5 6 7 8
Beyond boxes…
## ## # ## # # ## # # # ## # # # # #
What code would print this “ASCII triangle” ? with height rows and width columns…
rows1
2
3
4
5
6
cols 2 3 4 5 6 7
1for row in range(1,7):
for col in range( ):
A video alternative ?!?
http://www.asciimation.co.nz/
A simpler web interface…
HTML HyperText Markup Language
<b>and the beautiful</b> <br>
<i>Tower of Pisa</i>
A simpler web interface…
HTML
CGI
HyperText Markup Language
Common Gateway Interface ~ HTML forms
<b>and the beautiful</b> <br>
<i>Tower of Pisa</i>
<form action="test.cgi">
<input type="text" name="message" />
</form>
A simpler web interface…
HTML
CSS AJAXJavascript
CGI
HyperText Markup Language
Common Gateway Interface ~ HTML forms
<b>and the beautiful</b> <br>
<i>Tower of Pisa</i>
<form action="test.cgi">
<input type="text" name="message" />
</form>
Others!
Web resources ~ on the Web
www.w3schools.com
started by
every technology - and acronym - you'd ever want to know…
Tim Berners-Lee
This week…
Get the pure-Python webserver and run it.
Make sure the example "application" works…
Change the example "application" so that you …
web-implement one of the ASCII art problems
• be sure that you take in the inputs you need
Checklist:
• watch out for conversions between ints and strings!
• make small changes and test as you go…
This is not webdesign!
Strings vs. language
strings
language / words / phrases
numbers / bits
ideas / meaning
computers
humans
www.abenteuermedien.de/jabberwock/index.php
Hugh Loebner
How could a computer demonstrate intelligence?
Alan Turing
Turing Test
Confederates
$100,000 Loebner prize for passing the
Turing test, held each year in the
London Museum of
Science
Parsing for real
(S (S (NP Time flies) (VP like (NP an arrow))) , but (S (NP fruit) (VP flies (PP like (NP a banana)))) .)
Time flies like an arrow, but fruit flies like a banana. - Marx
http://www.link.cs.cmu.edu/link/submit-sentence-4.html
"<*time>""time" <*> N NOM SG @SUBJ
"<flies>""fly" <SVO> <SV> V PRES @+FMAINV"fly" N NOM PL @NPHR
"<like>""like" PREP @<NOM
"<an>""an" <Indef> DET CENTRAL ART
"<$2-NL>""<arrow>"
"arrow" N NOM SG @NPHR"<$\,>""<but>"
"but" CC @CC"<fruit_flies>"
"fruit_fly" N NOM PL @NPHR"<like>"
"like" PREP @<NOM"<a>"
"a" <Indef> DET CENTRAL ART"<banana>"
"banana" N NOM SG @<P"<$.>"
http://www.lingsoft.fi/cgi-bin/engcg
I like bananas, too!
parseTree #1
parseTree #2
Some conversations…
Jabb:... Greetings! Jabberwock is at the keyboard.
You:... How are you doing?Jabb:... Everything is running smoothly. And how are you doing?
You:... Pretty well. It's quiet around here this morning.Jabb:... Does that mean you agree?
You:... Agree with what?Jabb:... Sure.
2005 and 2006 winner: Rollo Carpenter's Jabberwacky
Loebner results
2003
2005
no human averaged less than 80
four humans and four machines participated
Some conversations…
You: Hi. you’re the program that won the Loebner competition, right?SID: Albert One was the last winner of the Loebner Contest. I am something else entirely.
You: Impressive. Do you have any areas of particular expertise?
Some conversations…
You: Hi. you’re the program that won the Loebner competition, right?SID: Albert One was the last winner of the Loebner Contest. I am something else entirely.
You: Impressive. Do you have any areas of particular expertise?SID: I appreciate that.
You: Not so impressive. If I ask a question after a statement, do you ignore the question?
Some conversations…
You: Hi. you’re the program that won the Loebner competition, right?SID: Albert One was the last winner of the Loebner Contest. I am something else entirely.
You: Impressive. Do you have any areas of particular expertise?SID: I appreciate that.
You: Not so impressive. If I ask a question after a statement, do you ignore the question?
SID: I am free to do as I please.
You: Wow! Are you talking free will vs. determinism?
Some conversations…
You: Hi. you’re the program that won the Loebner competition, right?SID: Albert One was the last winner of the Loebner Contest. I am something else entirely.
You: Impressive. Do you have any areas of particular expertise?SID: I appreciate that.
You: Not so impressive. If I ask a question after a statement, do you ignore the question?
SID: I am free to do as I please.
You: Wow! Are you talking free will vs. determinism?SID: I don’t think wow am i talking free will vs. determinism, but I can’t
be 100% sure of that.
Computing with language
strings
language / words / phrases
numbers / bits
ideas / meaningopen
questions in AI …
how strings are
represented and stored
computing with language - recognizing English!
(3)
(2)
(1)
Caesar Cipher
'Bzdrzq bhogdq? H oqdedq Bzdrzq rzkzc.''Caesar cipher? I prefer Caesar salad.'
Caesar Cipher: encipher
encipher( 'gv vw dtwvg', 0 )
encipher( 'gv vw dtwvg', 1 )
returns
returns
'gv vw dtwvg'
'hw wx euxwh'
Caesar Cipher: encipher
encipher( 'gv vw dtwvg', 0 )
encipher( 'gv vw dtwvg', 1 )
encipher( 'gv vw dtwvg', 2 )
encipher( 'gv vw dtwvg', 3 )
encipher( 'gv vw dtwvg', 4 )
encipher( 'gv vw dtwvg', 25 )
returns
returns
returns
returns
returns
returns
'gv vw dtwvg'
'hw wx euxwh'
'ix xy fvyxi'
'jy yz gwzyj'
'kz za hxazk'
'fu uv csvuf'
encipher( s , n )should return the string s with each alphabetic
character shifted/wrapped by n places in the
alphabet
. . .
ASCII
American Standard Code for Information
Interchange== low-tech art
form!
__ _ ,___,-'",-=-. __,-- _ _,-'_)_ (""`'-._\ `. _,' __ |,' ,-' __) ,- /. | ,'_,--' | -' _)/ `\ ,',' ,' ,-'_,` : ,' ,-' ,(,-( : ,' ,-' , _ ; / ,-._/`---' / / (____)(----. ) ,' / ( `.__, /\ /, : ;-.___ /__\/| | ,' `--. -,\ | : / \ .__/ \ (__ \ |_ \ ,`-, * / _|,\ \ ,' `-. ,'_,-' \ (_\,-' ,'\")--,'-' __\ \ / // ,'| ,--' `-. `-. `-/ \' | _,' `. `-._ / `--'/ \ -doh!- ,' | \ / | \ ,-' | / / | -'
ASCII
American Standard Code for Information
Interchange== low-tech art
form!
ASCII-betical order:
Homer
min
Marge
$42.42
[:^)]
bart
lisa max
ASCII
ASCII is a table that tells the
computer how to represent characters as
#s
American Standard Code for Information Interchange
chr
ordconvert to number
convert to char.
You know, these
functions kind of look familiar!
ASCII
ASCII is a table that tells the
computer how to represent characters as
bits!
8 bits = 1 byte
The SAME bits represent
integers, if the variable has type int instead of
str
American Standard Code for Information Interchange
type: str
type: int
00101010
00101010
bits
bits
name:
name:
value:
value:
'*'
42
Identical bits are stored in
each variable!The types
determine how to interpret the bits; the names don't matter at all…
chr and ord
chr( n )
ord( c )
Input: an integer in range(255)
Input: a string of one character, c
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZASCII
VALUES
Output: a one-char. string of that ASCII value
Output: an integer, the ASCII value of cCONVERTERS
97 122
65 90
99 101 103 105 107 109 111 113 115 117 119
67 69 71 73 75 77 79 81 83 8785
for i in range(128): print 'i and chr(i) are', i, chr(i)
try this
chr and ord
chr(66) is 'B'
ord('a') is 97
abcdefghijklmnopqrstuvwxyz97 122
65ABCDEFGHIJKLMNOPQRSTUVWXYZ
90
ASCII
VALUES
What is chr( ord('i')+13 )
What is chr( ord('W')+13 ) ?
How can we wrap this
around?
99 101 103 105 107 109 111 113 115 117 119
67 69 71 73 75 77 79 81 83 8785
Rot 13
def adv13( c ): """ rotates c by 13 chars, "wrapping" as needed NON-LETTERS DO NOT CHANGE! """ if 'a' <= c <= 'z': new_ord = ord(c) + 13 if new_ord <= ord('z'):
return chr(new_ord) # no wrapping else:
return
elif
else:
How would you rotate an entire string?
Caesar Cipher: decipher
>>> decipher('Bzdrzq bhogdq? H oqdedq Bzdrzq rzkzc.')'Caesar cipher? I prefer Caesar salad.'
>>> decipher('Hu lkbjhapvu pz doha ylthpuz hmaly dl mvynla '\ 'lclyfaopun dl ohcl slhyulk.')'An education is what remains after we forget everything we have learned.'
But how ?
>>> decipher('gv vw dtwvg')
Caesar Cipher: decipher
>>> decipher('gv vw dtwvg')
Caesar Brutus
Strategy using max:(1) consider all
possible answers(2) give them each a score(3) loop through them all and find the one with the max score!
gv vw dtwvghw wx euxwhix xy fvyxijy yz gwzyjkz za hxazkla ab iybalmb bc jzcbmnc cd kadcnod de lbedope ef mcfepqf fg ndgfqrg gh oehgrsh hi pfihsti ij qgjituj jk rhkjuvk kl silkvwl lm tjmlwxm mn uknmxyn no vlonyzo op wmpozap pq xnqpabq qr yorqbcr rs zpsrcds st aqtsdet tu brutefu uv csvufall 26 possibilities
Score for "Englishness
"?up to you…
Caesar Cipher: decipher
>>> decipher('gv vw dtwvg')'od de lbedo'
Caesar Brutus
Strategy using max:(1) consider all
possible answers(2) give them each a score(3) use our techniques with max
[0, 'cr rs zpsrc'][0, 'gv vw dtwvg'][0, 'jy yz gwzyj'][0, 'mb bc jzcbm'][0, 'qf fg ndgfq'][0, 'wl lm tjmlw'][1, 'bq qr yorqb'][1, 'ds st aqtsd'][1, 'nc cd kadcn'][1, 'vk kl silkv'][1, 'xm mn uknmx'][2, 'ap pq xnqpa'][2, 'hw wx euxwh'][2, 'ix xy fvyxi'][2, 'kz za hxazk'][2, 'rg gh oehgr'][2, 'sh hi pfihs'][2, 'uj jk rhkju'][2, 'yn no vlony'][3, 'fu uv csvuf'][3, 'pe ef mcfep'][3, 'ti ij qgjit'][3, 'zo op wmpoz'][4, 'et tu brute'][4, 'la ab iybal'][4, 'od de lbedo']all 26 possibilities
won't always be correct!
number-of-vowels score
Caesar Cipher: decipher
>>> decipher('gv vw dtwvg')'et tu brute'
Caesar Brutus
Strategy using max:(1) consider all
possible answers(2) give them each a score(3) use our techniques with max
[0.4680, 'jy yz gwzyj'][0.4960, 'mb bc jzcbm'][0.5420, 'uj jk rhkju'][0.5567, 'ix xy fvyxi'][0.5597, 'qf fg ndgfq'][0.5718, 'fu uv csvuf'][0.5753, 'bq qr yorqb'][0.5833, 'kz za hxazk'][0.5859, 'xm mn uknmx'][0.5880, 'gv vw dtwvg'][0.5902, 'vk kl silkv'][0.6110, 'ap pq xnqpa'][0.6304, 'zo op wmpoz'][0.6318, 'wl lm tjmlw'][0.6717, 'cr rs zpsrc'][0.6735, 'hw wx euxwh'][0.6963, 'nc cd kadcn'][0.7153, 'ti ij qgjit'][0.7398, 'la ab iybal'][0.7442, 'yn no vlony'][0.7867, 'pe ef mcfep'][0.7880, 'sh hi pfihs'][0.7918, 'rg gh oehgr'][0.8213, 'ds st aqtsd'][0.8609, 'od de lbedo'][0.9082, 'et tu brute']all 26 possibilities
letter- probability
scorenot always correct,
but better!
The caesar cipher problem offers lots
of freedom…
Think a bit about how you'll approach
it!
Questions / Lab time…
Caesar Cipher: decipher
>>> decipher('Bzdrzq bhogdq? H oqdedq Bzdrzq rzkzc.')'Caesar cipher? I prefer Caesar salad.'
>>> decipher('Hu lkbjhapvu pz doha ylthpuz hmaly dl mvynla '\ 'lclyfaopun dl ohcl slhyulk.')'An education is what remains after we forget everything we have learned.'
But how to do this… ?
>>> decipher('Uifz xpsl ju pvu xjui b qfodjm!')?
>>> decipher('gv vw dtwvg') ?
Caesar Cipher: decipher
>>> decipher('gv vw dtwvg')???
Caesar Brutus
Strategy using max:(1) consider all
possible answers(2) give them each a score(3) use our techniques to get max
gv vw dtwvghw wx euxwhix xy fvyxijy yz gwzyjkz za hxazkla ab iybalmb bc jzcbmnc cd kadcnod de lbedope ef mcfepqf fg ndgfqrg gh oehgrsh hi pfihsti ij qgjituj jk rhkjuvk kl silkvwl lm tjmlwxm mn uknmxyn no vlonyzo op wmpozap pq xnqpabq qr yorqbcr rs zpsrcds st aqtsdet tu brutefu uv csvufall 26 possibilities
Score for "Englishness
"?up to you…
Caesar Cipher: decipher
>>> decipher('gv vw dtwvg')'od de lbedo'
Caesar Brutus
Strategy using max:(1) consider all
possible answers(2) give them each a score(3) use our techniques with max
[0, 'cr rs zpsrc'][0, 'gv vw dtwvg'][0, 'jy yz gwzyj'][0, 'mb bc jzcbm'][0, 'qf fg ndgfq'][0, 'wl lm tjmlw'][1, 'bq qr yorqb'][1, 'ds st aqtsd'][1, 'nc cd kadcn'][1, 'vk kl silkv'][1, 'xm mn uknmx'][2, 'ap pq xnqpa'][2, 'hw wx euxwh'][2, 'ix xy fvyxi'][2, 'kz za hxazk'][2, 'rg gh oehgr'][2, 'sh hi pfihs'][2, 'uj jk rhkju'][2, 'yn no vlony'][3, 'fu uv csvuf'][3, 'pe ef mcfep'][3, 'ti ij qgjit'][3, 'zo op wmpoz'][4, 'et tu brute'][4, 'la ab iybal'][4, 'od de lbedo']all 26 possibilities
Score for "Englishness
"?up to you…
won't always be correct!
Caesar Cipher: decipher
>>> decipher('gv vw dtwvg')'et tu brute'
Caesar Brutus[0.4680, 'jy yz gwzyj'][0.4960, 'mb bc jzcbm'][0.5420, 'uj jk rhkju'][0.5567, 'ix xy fvyxi'][0.5597, 'qf fg ndgfq'][0.5718, 'fu uv csvuf'][0.5753, 'bq qr yorqb'][0.5833, 'kz za hxazk'][0.5859, 'xm mn uknmx'][0.5880, 'gv vw dtwvg'][0.5902, 'vk kl silkv'][0.6110, 'ap pq xnqpa'][0.6304, 'zo op wmpoz'][0.6318, 'wl lm tjmlw'][0.6717, 'cr rs zpsrc'][0.6735, 'hw wx euxwh'][0.6963, 'nc cd kadcn'][0.7153, 'ti ij qgjit'][0.7398, 'la ab iybal'][0.7442, 'yn no vlony'][0.7867, 'pe ef mcfep'][0.7880, 'sh hi pfihs'][0.7918, 'rg gh oehgr'][0.8213, 'ds st aqtsd'][0.8609, 'od de lbedo'][0.9082, 'et tu brute']all 26 possibilities
Score for "Englishness
"?up to you…
Strategy using max:(1) consider all
possible answers(2) give them each a score(3) use our techniques to get max
depends on how you score
…
Caesar Cipher: encipher
encipher( 'gv vw dtwvg' , 0 )
encipher( 'gv vw dtwvg' , 1 )
encipher( 'gv vw dtwvg' , 2 )
encipher( 'gv vw dtwvg' , 3 )
encipher( 'gv vw dtwvg' , 4 )
encipher( 'gv vw dtwvg' , 5 )
encipher( 'gv vw dtwvg' , 25 )
returns
returns
returns
returns
returns
returns
returns
'gv vw dtwvg'
'hw wx euxwh'
'ix xy fvyxi'
'jy yz gwzyj'
'kz za hxazk'
'la ab iybal'
'fu uv csvuf'
encipher( s , n )should return the string s with each alphabetic
character shifted/wrapped by n places in the
alphabet
Brutus won't mind if I use his salary to bring Justin Timberlake to the Colosseum next month...
Historically bad decision #43:
CHR and ORDOrchard Field
CHR and ORDChateauroux
Mutable vs. Immutable data
Changeable types:
dictionary
Unchangeable types:
list
tuple
string
int
float
bool
What's a dictionary?
I guess I'll have to look it up!
x
42
x = 42
Reference vs. Value
Changeable types:
dictionary
Unchangeable types:
list
tuple
string
int
float
bool
LL[0] L[1] L[2]
Reference,Pointer,
id
L = [5,42,'hi']
x5 42 'hi'
42
x = 42
“Pass By Value”
def main() """ calls conform """ print " Welcome to Conformity, Inc. "
fav = 7 conform(fav)
print " My favorite number is", fav
def conform(fav) """ sets input to 42 """ fav = 42 return fav
7
fav
fav
7
“Pass By Value”
def main() """ calls conform """ print " Welcome to Conformity, Inc. "
fav = 7 conform(fav)
print " My favorite number is", fav
def conform(fav) """ sets input to 42 """ fav = 42 return fav
7
fav
fav
PASSBY VALUE
“Pass by value” means that data is copied when sent to a method
42
Passing lists by value…
def main() """ calls conform2 """ print " Welcome to Conformity, Inc. " fav = [ 7, 11 ] conform2(fav) print " My favorite numbers are", fav
def conform2(fav) """ sets all of fav to 42 """ fav[0] = 42 fav[1] = 42
What gets passed by value here?
favL[0] L[1]
5 42
fav
Passing lists by value…
def main() """ calls conform2 """ print " Welcome to Conformity, Inc. " fav = [ 7, 11 ] conform2(fav) print " My favorite numbers are", fav
def conform2(fav) """ sets all of fav to 42 """ fav[0] = 42 fav[1] = 42
favL[0] L[1]
5 42
fav
can change data
elsewhere!
The reference is copied!
The conclusion
You can change the contents of lists in functions that take those lists as input.
Those changes will be visible everywhere.
(actually, lists or any mutable objects)
(immutable objects are safe, however)
Views of the world
Engineers think their equations approximate reality.
Views of the world
Engineers think their equations approximate reality. Physicists think reality approximates their equations.
Views of the world
Engineers think their equations approximate reality. Physicists think reality approximates their equations.
Mathematicians don't care.
Views of the world
Axioms
Definitions
Creating structure from a few simple
facts...
Creating structure from a few simple
actions ...
if/else
while
for
arithmetic operations
variablesarrays
Proof Algorithm
Engineers think their equations approximate reality. Physicists think reality approximates their equations. Mathematicians don't care.
Lists’ flexibility
Lists can hold ANY type of dataA = [ 42., 75., 70. ] 42.0 75.0 70.0
float float floatlistA
they don’t have to be horizontal lists!
42.0
75.0
70.0
double
double
double
listAthey don’t
have to be horizontal lists!
Lists’ flexibility
Lists can hold ANY type of dataA = [ 42., 75., 70. ] 42.0 75.0 70.0
float float floatlistA
Lsits’ flexibility
Lists can hold ANY type of data
42.0 75.0 70.0double double doublelist
A
42 7 -11int int intlist
A
“go” “red” “sox!”
String String StringlistA
2d lists or arrays
Lists can hold ANY type of data -- including lists !
listA
A = [ [1,2,3,4], [5,6], [7,8,9,10,11] ]
listA
2d arrays
list
list
list
A[0]
A[1]
A[2]
Lists can hold ANY type of data -- including lists !
A = [ [1,2,3,4], [5,6], [7,8,9,10,11] ]
listA
Jagged arrays
list
list
list
A[0]
A[1]
A[2]
Lists can hold ANY type of data -- including lists !
A = [ [1,2,3,4], [5,6], [7,8,9,10,11] ]
Rows within 2d arrays need not be the same length…
listA
list
list
list
A[0]
A[1]
A[2]
Lists can hold ANY type of data -- including lists !
A = [ [1,2,3,4], [5,6], [7,8,9,10,11] ]
Rows within 2d arrays need not be the same length…
We will not use jagged arrays
at least in hw 10
Rectangular arrays
listA
list
list
list
A[0]
A[1]
A[2]
How many rows does A have, in general ?How many columns does A have, in general ?
What does each component of A[1][2] mean ?
A[1][2] = 42
A[2][3]
A[0][0]
Creating a 2d array
def create2dArray( width, height ): """ does just that """
A = [] # start with nothing
for row in range( height ):
for col in range( width ):
return A
Displaying a 2d array
import csplot
B = create2dArray( 10, 10 )
csplot.show( B )
B[1][8] = 1 # set this item to 1
csplot.show( B )
Be sure to download the newest version of this file…
nearby coordinates…
Problem 2 -- “Life”
Evolutionary rules
Grid World
• Everything depends on a cell’s eight neighbors
red cells are alive
white cells are empty
• Exactly 3 neighbors give birth to a new, live cell!• Exactly 2 or 3 neighbors keep anexisting cell alive• Any other number of neighbors killthe central cell (or keep it dead)
John Conway
Problem 2 -- Life
Evolutionary rules
Grid World
• Everything depends on a cell’s eight neighbors
red cells are alive
white cells are empty
• Exactly 3 neighbors give birth to a new, live cell!• Exactly 2 or 3 neighbors keep anexisting cell alive• Any other number of neighbors killthe central cell (or keep it dead)
Problem 2 -- Life
Evolutionary rules
Grid World
• Everything depends on a cell’s eight neighbors
red cells are alive
white cells are empty
• Exactly 3 neighbors give birth to a new, live cell!• Exactly 2 or 3 neighbors keep anexisting cell alive• Any other number of neighbors killthe central cell (or keep it dead)
Problem 2 -- Life
Evolutionary rules
Grid World
• Everything depends on a cell’s eight neighbors
red cells are alive
white cells are empty
• Exactly 3 neighbors give birth to a new, live cell!• Exactly 2 or 3 neighbors keep anexisting cell alive• Any other number of neighbors killthe central cell (or keep it dead)
life out there...
Keep going!
Problem 2 -- Creating Life
0 1 2 3 4 50 1 2 3 4 5
0
1
2
3
4
5
0
1
2
3
4
5
B = update( B )
old generation or "board" new generation or "board"
Problem 2 -- Creating Life
0 1 2 3 4 50 1 2 3 4 5
0
1
2
3
4
5
0
1
2
3
4
5
B = update( B )
old generation or "board" new generation or "board"
Problem 2 -- Details
For each generation… • 0 represents an empty cell
• 1 represents a living cell
• outermost edge should always be left empty (even if there are 3 neighbors)
• compute all cells based on their previous neighbors before updating any of them
http://www.math.com/students/wonders/life/life.html
life out there...
B = update( B )
old generation or "board" new generation or "board"
Problem 2 -- to and beyond!
• Are there stable life configurations?
• Are there oscillating life configurations?
• Are there self-propagating life configurations?
"rocks"
"plants"
"animals"
period 3
period 2
Problem 2 -- to and beyond!
• Are there life configurations that expand forever?
• What is the largest amount of the life universe that can be filled with cells?
• How sophisticated can the structures in the life universe be?
Google for GOLLY, Game of Life
• Are all feasible configurations reachable?
Lab & Homework…
import sys
for i in range(4): for j in range(8): sys.stdout.write('#') print
software object representing the screen's standard output
Without extra spaces…
Output
################################
method (function) that prints only its input