The goals of 149s are to:
There are no hard prerequisites for this course, but usually it's good if students have the equivalent of CompSci 100 before taking this course. Some students have had success taking this course and CompSci 100 at the same time. You should be comfortable with mathematical/logical reasoning and be able to write simple programs in Java or C++. Please contact an instructor or TA if you're concerned about whether or not you should enroll.
The class is divided into two sections. Students who have participated in the class before will be placed in one section, while new students will be placed in the other. A highly experienced student may be able to move to the returning section with the permission of the professor. Returning students may attend the new student section if they want a refresher/are not familiar with a particular week's topic.
There will be weekly problem sets based on a specific topic or problem set. Sometimes we may ask you to do a particular problem on the next week's problem set to prepare for lecture. It is expected that every student in the class is capable of looking up and implementing a particular algorithm, possibly with help from a friend, instructor, TA, or other resource.
The new student section will generally involve a lecture/discussion about a specific topic/algorithm, followed by walking through a problem related with the topic. The advanced student section will not be topic-focused; rather, problem sets will involve a large variety of techniques.
One of the main purposes of this class is to prepare you for the annual ACM International Collegiate Programming Competition (ACM-ICPC). Unfortunately, this occurs in November. In its place, we will focus on a different set of contests which require a similar skill set: TopCoder. TopCoder Single Round Matches (SRMs) are individual 1.5 to 2 hour contests which occur every 2 weeks. The format involves writing a method to solve a very specific algorithmic problem. There are two divisions divided at the user rating of 1200, and each division has its own set of 3 problems (easy, medium, and hard) for each contest. Unlike ICPC, the harder the problem, the greater its value. Our goal by the end of the semester is to improve the TopCoder performance of each member of the class.
If there is enough demand, we may hold additional weekend sessions to discuss particularly challenging or interesting problems. Attendance will, of course, be optional.
The competitions are held at varied times and days, so each of you should find several throughout the semester which fit your schedule. We will usually reserve a room in the link for the SRM and go over the problems afterwards. We cannot "add" extra SRMs at the end of the semester so be sure to start doing then early in the semester to ensure you get 3. The full schedule is listed below.
You must submit at least 3 problems each week. Problems are due at 5PM on the day of class and can be submitted via Sakai.
Turning in problems late will reduce the amount credit for problems. If we notice you habitually turning in problems late, expect an email from us. Missing problem lots of problem sets can cause your grade to drop considerably.
If you miss more than four classes, you lose a letter grade in this course. If you feel like class is not working well for you, talk with me and we'll see if we can address your concerns, but don't just stop attending.
We will be announcing a slightly larger programming challenge in the middle of the semester. You will work in groups of 2-3. Details (including exactly what you must do for an A-) will be announced at that time.
With a minimal amount of work, you can get an A- in the course. To get an A or A+, you should:
The criteria for an A or A+ will be determined by the instructor at the end of the course.
Get help! This course is about improving your coding skills, not banging your head against the wall. We highly recommend working with other students or asking instructors/TAs for help. While we would like you to submit your own solutions, do not get stressed if your code is similar to somebody else's.
Anyone is welcome to audit the course. If you are sitting in on a class, we would like you to complete the relevant assigned problem due before that class --- otherwise you may not get much benefit from coming. Also, feel free to attend the scrimmages.