Harvey Mudd College
Computer Science 60
Principles of Computer Science
Spring 2010


Course Information

Section 1:    MW 1-2:30, Beckman B134   Section 2:    TTh 1-2:30, Parsons 1285
Grading:    60% homeworks; 30% exams; 10% participation Prereqs:    CS 5 or come see us...
Languages used:    Scheme, Java, Prolog, and JFLAP
Instructors: Name Office Phone Email AIM Hours
  Bob Keller Olin 1253 x18483 keller at cs MuddProf MW 2:30-4:00
(to 5:30 some days)
  Zach Dodds Olin 1255 x71813 dodds at cs aimless Fri. 2-4:30 in lab

New!    CS 60 practice problems for the final exam...
New!    CS 60 solutions to the above practice problems .
New!    CS 60 final exam study guide for the final exam
You may take the final on your choice of Monday 5/10 at 2pm or Friday 5/14 at 2pm.
There will be a review session (using the practice problems, above, as a starting point) on Sunday 5/9 at 7pm.
Old    CS 60 midterm study guide for the midterm in-class on Wed. and Thu. 3/24 and 3/25.


Brief Overview:     In CS 60, Principles of Computer Science, students will complete a broad, hands-on overview of the science of computer science. In several conceptual areas CS 60's depth prepares students to apply key CS principles to any endeavor or project, with any computational interface or language. After CS 60, both CS majors and non-majors will be able to design, program, test, and evaluate novel computational solutions to problems across CS, mathematics, science, engineering, and other fields.
Here is a link to the complete course syllabus.


Assignments, slides, resources, other links...

Assignments will be posted here; note that assignments are customarily due at 11:59 p.m. on the day indicated. Please submit your files through our web-based submission system.

Your submission password has been reset to the default, but please set it to something memorable!
If you forget the default password, email me at dodds@cs.hmc.edu... .



Assignment 14    Optional, extra-credit assignment: Seam Carving!    Due Sunday, May 9, 2010, by 11:59 pm.



Assignment 13    Fast algorithms via dynamic programming!    Due Sunday, May 2, 2010, by 11:59 pm.



Assignment 12    Uncomputability proofs, run-time analysis, and a bit of review...    Due Sunday, April 25, 2010, by 11:59 pm.

  • Euro reminder:     if you use a Euro, then Hw12 is due by 11:59pm on Monday, April 26.
  • Filenames: You'll submit a few files this week. They are named
    • hw12.txt, hw12.scm, hw12.pl, and hw12.java
  • HW links, slides, etc.:


Assignment 11    Computational Models: FSMs and Turing Machines    Due Sunday, April 18, 2010, by 11:59 pm.

  • Euro reminder:     if you use a Euro, then Hw11 is due by 11:59pm on Monday, April 19.
  • Filenames: You'll submit many small files this week. They are named
    • part1.jff, part2.jff, part3.txt, part4.jff, part5.jff, part6.jff, part7.txt, part8.txt, part9.jff, part10.jff, and optionally excr1.jff, excr2.jff, excr2.txt, and excr3.txt.
  • HW links, slides, etc.:


Assignment 10    Compiler for a Simple Language    Due Sunday, April 11, 2010, by 11:59 pm.
Improved Version.
              extra-credit grammars for hw#10

  • Euro reminder:     if you use a Euro, then Hw10 is due by 11:59pm on Monday, April 12.
  • Filenames: You'll submit a10.pl for this week.
  • HW links:


Assignment 9    Constraint Solving and Backtracking    Due Sunday, April 4, 2010, by 11:59 pm.



Assignment 8    Prolog: yes!    Due Sunday, March 28, 2010, by 11:59 pm.

  • Euro reminder:     if you use a Euro, then Hw8 is due by 11:59pm on Monday, March 29.
  • Filenames: You'll submit at least one file for Hw #8:
    • [Pair or Indiv.]     movies.pl    Starter file: movies.txt - rename to .pl or .pro
    • helper file     movies_db.pl    Starter file: movies_db.txt - rename to .pl or .pro
    • [Pair or indiv. extra!]     lists.pl    Starter file: lists.txt - rename to .pl or .pro
  • HW links:
    • SWI Prolog download page
      Prolog is available for Windows (with a graphical IDE) and Mac OS X and Linux (command-line) from the site linked above.
      Note   For Max OS X, you don't need to worry about xquartz or the developer tools - as far as I can tell, you'll need to run Prolog from the command-line anyway. Do get the version that matches your operating system, however!
  • Lectures 15-16 slides 3/10-3/11 and 3/22-3/23    (6-up version)
  • Prolog Examples:
  • Lectures 17 slides 4/5    (6-up version)


Assignment 7    The double-ended spamcruncher: Spampede!    Due Friday, March 12, 2010, by 4:59 pm.

  • Filenames: You'll submit at least these files for Hw #7:
    • [Pair or Indiv.]     Maze.java    (The updated Maze class)
    • [Pair or Indiv.]     SpamMaze.java    (The SpamMaze class, derived from Maze!)
    • [Pair or Indiv.]     Spampede.java    (The applet code)
    • Be sure to submit any additional files needed to run your code, too. You can submit them by clicking the "support file" checkbox on the submission site.
    Support files and starter versions of some of these files are available from these links:
  • HW links:
  • Lecture 13 (W/Th slides) 3/3-3/4
  • Lecture 14 (M/T slides) 3/8-3/9


Assignment 6: Spam-sweeping and -seeking!    Due Wednesday, March 3, 2010, by 11:59 pm.

  • Euro reminder:     if you use a Euro, then Hw6 is due by 9:59pm on Thursday, March 4.
  • Filenames: You'll submit (at least) one file for each problem:
    • [Indiv. or pair programming]     Spamsweeper.java    (The Spamsweeper game)
    • [Individual Only!]    Queue.java    (Your closed-list Queue class)
    • [Individual Only!]    Maze.java    (Your maze-solver)
    • (Extra credit): SpamsweeperApplet.zip    (the web version)
    Note that problems 2 and 3 (Queue and Maze) are to be done individually this week.
    Support files and starter versions of some of these files are available from these links:
  • HW links:
  • Lecture 11 (W/Th slides) 2/24-2/25
  • Lecture 12 (M/T slides) 3/1-3/2


Assignment 5: Tokenize - Parse - Evaluate!    Due Wednesday, February 24, 2010, by 11:59 pm.

  • Euro reminder:     if you use a Euro, then Hw5 is due by 9:59pm on Thursday, February 25.
  • Filenames: You'll submit a zip file named hw5.zip with at least these five files:
    • Quantity.java    (quantity lists and Unicalc)
    • Tokenizer.java    (the tokenizer)
    • Parser.java    (the parser)
    • Evaluator.java    (the evaluator)
    • OpenList.java    (an OpenList class from Hw#4)
    Starter versions of these files (and a tester named QuantityTester.java) are already in hw5.zip, below:
  • HW links:
  • Lecture 9 (W/Th slides)
  • Lecture 10 (M/T slides)


Assignment 4: Conversational Java!    Due Wednesday, February 17, 2010, by 11:59 pm.



Assignment 3: Unicalc CLI    Due Wednesday, February 10, 2010, by 11:59 pm.

Assignment 2: Unicalc API    Due Wednesday, February 3, 2010, by 11:59 pm.

Assignment 1: Fun with functional programming!    Due Wednesday, January 27, 2010, by 11:59 pm.


Tutoring Schedule

All of these tutoring hours are in the LAC computer lab now, even Fridays 2-4pm.
which will be held in the CS Labs in Beckman B102 and/or Beckman B105.
By time Grader name
Mondays, 8pm-10pm Jeep S.
Mondays, 8pm-10pm Greg Fong
Mondays, 6pm-8pm Dan Halloran
Tuesdays, 9pm-11pm Lilian DeGreef
Tuesdays, 7pm-9pm David Huie
Wednesdays, 9pm-11pm Bonnie Guang
Wednesdays, 8pm-10pm HamsterBob Stewart
Wednesdays, 6pm-8pm Dan Halloran
Wednesdays, 6pm-8pm Steve Matsumoto
Fridays, 2pm-4pm Michael Leece
Saturdays, 1pm-3pm Brianna Blanchard
Saturdays, 1pm-3pm Russell Transue
Saturdays, 2pm-4pm Paul Hobbs
Sundays, 7pm-9pm Tobe Wood
Sundays, 1pm-3pm Sabreen Lakhani
Sundays, 3pm-5pm Eric Aleshire
Sundays, 3pm-5pm Bea Metitiri
Sundays, 3pm-5pm Benson Khau
Sundays, 7pm-9pm Skye Berghel
Sundays, 7pm-10pm Leif Gaebler
Sundays, 8pm-10pm Alexa Keizur
Sundays, 10pm-12am Aaron Gable
Sundays, 10pm-12am Ryan Brewster
Sundays, 10pm-12am Kathryn Lingel
Sundays, 10pm-12am Aaron Gable
  
By grader (first) name Time
Aaron Gable Sundays, 10pm-12am
Alexa Keizur Sundays, 8pm-10pm
Bea Metitiri Sundays, 3pm-5pm
Benson Khau Sundays, 3pm-5pm
Bonnie Guang Wednesdays, 9pm-11pm
Dan Halloran Mondays, 6pm-8pm
Dan Halloran Wednesdays, 6pm-8pm
David Huie Tuesdays, 7pm-9pm
Eric Aleshire Sundays, 3pm-5pm
HamsterBob Stewart Wednesdays, 8pm-10pm
Jeep S. Mondays, 8-10pm
Greg Fong Mondays, 8-10pm
Kathryn Lingel Sundays, 10pm-12am
Leif Gaebler Sundays, 7pm-10pm
Lilian DeGreef Tuesdays, 9pm-11pm
Michael Leece Fridays, 2pm-4pm
Paul Hobbs Saturdays, 2-4pm
Russell Transue Saturday, 1pm-3pm
Ryan Brewster Sundays, 10pm-12am
Sabreen Lakhani Sundays, 1pm-3pm
Skye Berghel Sundays, 7pm-9pm
Steve Matsumoto Wednesdays, 6pm-8pm
Tobe Wood Sundays, 7pm-9pm

Overview Schedule

Days Lecturer Topics
1/19-1/20 [ZD] Introduction to CS 60
1/19-1/20 [BK] Mental Models for Computation and their Importance
Functional Programming
Introduction to the Scheme Language
Functions and Domains
Functions as Associations: assoc
Conditionals: if
Equations vs. Assignment: let, let*
1/25-1/26 [BK] Higher-Order Functions: sort, map, foldl, foldr
Lambda Expressions
Function-Returning Functions
Currying
1/27 Assignment 1 due, 11:59 pm Functional Programming Warm-Up
1/27-1/28 [BK] Recursion
Tail Recursion and Accumulators
Mutual Recursion
McCarthy's Transformation
2/1-2/2 [BK] Unicalc Arithmetic and Database
Unicalc database
2/3 Assignment 2 due, 11:59 pm Unicalc!
2/3-2/4 [BK] Boxes and Pointers vs. Arrays
2/8-2/9 [BK] Language Interpretation
2/10 Assignment 3 due, 11:59 pm Unicalc Command-line Interpreter
2/10-2/11 [ZD] Java: Introduction to object-oriented programming
2/15-2/16 [ZD] Java: Porting, Queues, Grammars
2/17 Assignment 4 due, 11:59 pm Introduction and OpenList in Java
2/17-2/18 [ZD] Java: Parsing and functional thinking in an OO language
2/22-2/23 [ZD] Java: Trees and BFS vs. DFS
2/24 Assignment 5 due, 11:59 pm Unicalc and Unilang parsing in Java
2/24-2/25 [ZD] Java: Interfaces and Inheritance
3/1-3/2 [ZD] Java: Events and graphics
3/3 Assignment 6 due, 11:59 pm Spamseeker/spamsweeper
3/3-3/4 [ZD] Java: Spampede or DESC
3/8-3/9 [BK/ZD] Parallelism; Garbage Collection
3/10-3/11 [BK] Midterm Exam ~ in-class
3/12 Assignment 7 due, 4:59 pm Spampede/DESC Applet
3/15-3/16 Spring breakScheme programming for fun!
3/17-3/18 Spring breakJava programming for fun!
3/21 No assignment due 3/21  
3/22-3/23 [BK] Prolog and Predicate Logic
3/24-3/25 [BK] Unification and Search
3/28 Assignment 8 due, 11:59 pm Using Prolog for Databases
3/29-3/30 [BK]Backtracking and Non-Determinism
3/31-4/1 [BK]Constraint Solving
4/4 Assignment 9 due, 11:59 pm Backtracking and Constraint-Solving
4/5-4/6 [BK] Definite-Clause Grammars and Parsing in Prolog
4/7-4/8 [ZD] Models of computation: DFA
4/11 Assignment 10 due, 11:59 pm Parsing in Prolog
4/12-4/13 [ZD] DFA == NFA == RE
4/14-4/15 [ZD] Turing Machines and JFLAP; Computability
4/18 Assignment 11 due, 11:59 pm JFLAP
4/19-4/20 [ZD] algorithm-efficiency analysis and big-O
4/21-4/22 [ZD] more big-O (i.e., bigger-O!)
4/25 Assignment 12 due, 11:59 pmbig-O and Wally; Uncomputability
4/26-4/27 [ZD] Sorting: the fruit fly of CS
4/28-4/29 [ZD/BK] CS's (and CS60's!) grand challenges
4/29 Assignment 13 due, 4:59 pm Floyd-Warshall Algorithm


 


Draft for Hw#7: