CS 3110 (formerly CS 312) is the third programming course in the Cornell Computer Science curriculum. The goal of the course is to help students become excellent programmers and software designers who can design and implement software that is elegant, efficient, and correct, and whose code can be maintained and reused. CS 3110 covers a broad set of topics, including: alternative programming paradigms, especially functional and concurrent programming; writing and using specifications; modular programming and data abstraction; reasoning about program correctness; reasoning about system performance; and useful and efficient data structures and algorithms.
The course has often held a tournament at the end of the semester, in which student groups compete to produce the best program, usually one that played a game. This competition is not been a part of the official coursework, but students have nevertheless worked hard to win.
Many of the games have involved teams of robots running a program written in a concurrent programming language, called variously RCL or CL. In an earlier programming assignment, the students made the interpreter for the concurrent programming language work.
Two teams fight for control of an area using steam-powered robots with a variety of weapons and abilities. The winning team was Kenneth Chu and Jun Hui Erh.
In this game, two steam-powered robot teams try in real time to capture each
other's flag. Robots control their acceleration around the board, using a
variable solar energy flux to recharge boiler pressure. Mines can be dropped
to temporarily disable unwary robots that get too close. Robots are programmed
using the CL language, which was made entirely functional this semester.
A mailbox abstraction was introduced for communication between robot
threads. The tournament was won by Lucas Waye and Ryan Musa.
[
Problem set handout]
[
CL language fall 2008]
The game was a robot version of the board game Abalone, in which each piece was a separate bot. Bots could push the opponents around and off the board if they coordinated with each other. The winning bot team was by Jerzy Hausknecht.
(click to expand)
A two dimensional version of Quidditch. Teams of 5 try and score the quaffle in the goal and track down the snitch. The winning bot (named Tony) was written by Scott Rogoff and Rick Ducott.
(click to expand)The game was 20,000 λ's under the Sea, in which two underwater teams of squids and whales tried to collect as much treasure as possible. Teams could spend treasure to buy more bots. Squids could squirt ink to temporarily immobilize opponents. Whales could eat squid but had to surface to breathe. The winning team was Mohan Zhang and Vincent Chan.
[ Problem set handout] [Java-based game viewer]
(click to expand)
As in Spring 2003, the goal was to implement a set of robots using
RCL. This time the robots played a capture-the-flag game. The robots
were actually robotic sharks packing lasers that they could use to shoot
at each other. The board contained a maze that the robots had to find
their way through. Picking up star powerups enabled the team to add more robots.
The winning team was Justin Pease and Elliot Bäck.
[Problem
set handout]
The goal was to implement a team of robots that could play a
soccer-like game called "Lambda Ball". In addition to the
ball, which robots could carry or kick, powerups would randomly appear
on the board, enabling teams to create more robots or to go into
overload mode. The board was a hexagonal grid with an interesting
coordinate system. Robots were implemented in a special "Robot
Control Language" programming language (RCL).
In a previous problem set, student groups had finished the
implementation of the RCL interpreter. The winning team was Sanjeev
Kapur and Ian Hall.
[Problem
set handout]
The tournament game was the board game Pente. The goal was to produce
a Pente player. Strong competitors implemented search algorithms that
used alpha-beta pruning to search several moves ahead. The winning team
was Oren Yeshua and Asher Walkover.
[Problem
set handout]