During the week-end that started on 17th of November I attended
NWERC 2007 as a coach for the
University College Dublin team O'Team: Rashid Bhamjee, Eugene Kenny,
and Kirill Ignatiev.
Before the story, here's the blurb I sent to the students about
this contest, in case you are not familiar with it.
The ACM ICPC is the oldest (1977) and one of the most prestigious
algorithmic programing contests for college students. Approximately
1750 universities participate each year. This year's UCD team is:
Eugene Kenny, Rashid Bhamjee, Kirill Ignatiev, and coach Radu Grigore.
To the best of our knowledge this is the first time Ireland is
represented!
The contest has two phases: regionals and the world finals. NWERC is
the North-West European region, which includes Belgium, Denmark,
Finland, Great Britain, Sweden, Ireland, Iceland, Luxembourg, The
Netherlands, Norway, and West Germany.
The main sponsor of the event is IBM. On Saturday, contestants will go
on a city tour (Utrecht), will attend a talk describing the Google
File System, and will have a Google dinner. The complete program is
available online.
On Friday evening we landed in Eindhoven, took a taxi to the train
station, a train to Utrecht, and a bus to the University of Utrecht.
We arrived 20 minutes before the registration closed. In fact, while
I was solving e "Google brainteaser" I was told that
the security guy wants to go home so I should turn off the
computer. I got two questions wrong as far as I can tell, and there
weren't many.
There I met Mihn Dihn, a.k.a.
Minny.
and he introduced me to other topcoders:
starfrog,
hungson175 (a.k.a. "The Healer"),
jthread,
Johan.de.Ruiter,
and a few others. Mihn and Son invited us to play pool. Eventually
Kirill and I decided not to go. Eugene and Rashid went to town
until around 2am, then they tried to solve Rubik's cube and
chatted for a couple of hours. At 7am we woke up because Saturday
was a busy day. In the morning we attended a talk of
ASML. These guys supply lots
of the equipment used during the
litography phase of building
integrated circuits. The presentation was good. Although
I don't like analogies to much you have to love this one:
To get an idea of the scale we are working on I should tell
you that we can print the map of Netherlads in 30 seconds, where
each pixel represents an area the size of this microphone I'm
speaking into. Then it went on to illustrate other challenges
faced by programmers. These fall in two categories:
- Software has to deal with everything that goes wrong in the
other departaments.
- The time needed to develop each new generation of the product
grows exponentially and this can't continue.
Here is an example of a problem in the first category: If a
laser beam goes thru a lens it gets hot and its optic properties
change with temperature. These changes must be predicted (there
is simply not enough time to measure) and adjustments done in
real time, such as applying mechanical torque on the lens.
As for the second problem, they think that the root cause is
that the program is written in C. So the solution is to use
higher level languages. In particular, they are collaborating
with people in academia on automatically refactoring the existent
codebase into something that unweaves aspects. Their
vocabulary didn't even mention the words "high-level
language" in fact, only "aspects". I'm yet
unconvinced by the magical power of aspects to reduce interactions
between pieces of code that are concerned with different things.
But using MATLAB instead of C for numerical calculations sounds
like a good idea, and I understand that error-recovery should
be implemented in both MATLAB and C and it's not clear how to
do it, hence you can label it as research in aspect oriented
programming.
After that they presented the
system used for judging and we had a test session. The problems
were very easy, as expected. Here is an example: It is hard to
solve integer equations algebraically and sometimes it's better to
try a numeric solution. Consider the equation
xp+yp=zp. You must write a
program that is given a nonnegative value p, less than 109.
If there is a solution with 0<x,y,z<10100 then you
should print such a solution; otherwise print "none".
Next comes the Utrecht walk, with a guide. I never had a guided
tour of
anything. It was nice. They have a big church in
the middle that was partly destroyed by a tornado. In fact,
they have lots of churches and they also have something against
churches. At least the guide did. They also have modern architecture,
such as some university buildings, the mayor's house, and a
strange tall metal house built on an 3 by 5 meters area at the
corner of a street.
We then got back after having lunch (the sandwiches that
Optiver provided were not
enough for us. There we had a Google talk about the
Google File System.
The talk was quite entertaining but with not enough technical
meat for my taste. If you read the paper you'll know basically
all that we've been told (except the promises that our gmail
is safely copied on many computers that Google engineers can
access — that is, without the funny parts).
During the evening we played Mafia. I was killed during
the second half of the game but I'm happy because I was able to
take one of the mobsters with me while I was still a ghost. Before
this we took a picture with lots of TopCoders (I believe that
grotmol
was the highest rated of us.) The picture is blurry, but I'll
post it here once I manage to come to school once without forgetting
the camera home. (It's harder than it sounds!)
At half past ten the honest citizens triumphed and we went to sleep.
Sunday was the fun day. I was quite nervous, maybe even more
than my team. Anyway, they had this nice surprise for the coaches
that they gave us computers and the ability to compete realtime.
After I solved the easy problem I spent some time thinking about
problem G (something with summits and a height map) and failed
to solve it. There were at least three easy problems that
could be solved: assemble, containers, and
towerparking. O'Team only solved towerparking,
beating five teams on time. That is an OK result for the first
participation. My mistake: I focused too much on solving problems
and not enough on their coding skills and on an emphasis on
writing correct solutions.
Immediately after the end of the contest we had to hurry back
to Eindhoven to catch a plane. I'll ask the three members of O'Team 2007
to guest blog with their thoughts about the contest.
In other news Mikolas, I, and Michal
(sorry for the accents guys) got invited to submit a paper about
reachability analysis for annotated code to a journal on software
engineering. Here are some things we did or we plan to do for that
paper:
- implement it in Boogie which is good for debugging the
axioms of VerifiedC (Michal took care of this since he is
now at
Microsoft Research),
- implement it in Freeboogie (I'll do this),
- a better analysis of the algorithm used (see my previous posts that
already hint at interesting links with standard problems such as
building optimal alphabetic binary trees),
- make the ESC/Java
implementation handle body-less methods (this was the number one
request after the presentation at SAVCBS; we want to try at least
three ways of doing it, one of which makes a cute use of
counterexamples provided by the theorem prover Simplify),
- a better case study (we said in a few places that "we don't
quite know what went wrong"), and
- better error reporting
(give error traces a la Rustan, and guess categories of problems,
such as "loop unrolling").