ICFP 2003 Programming Contest Results 101
An anonymous reader writes "The previously reported ICFP Contest has been over for quite some time. The results were announced on August 26, 2003 at the conference in Uppsala, Sweden, yet the contest organizers have yet to publish results. Despite the forgetfulness of the organizers, it is known that this year C++ did well, taking first and second, but not judge's prize. Interestingly, a one-man team consisting of an undergraduate student took first place, followed by a team of highly ranked 'red' TopCoders, with the maintainers of Gwydion Dylan taking judge's prize."
Re:Hey Americans: get a load of the truth! (Score:2)
No it wasn't. British comedies are funny.
Re:Of course (Score:4, Insightful)
Its really a matter of what kind of programming you are doing. FP is all about making algorithms primary and data secondary. There are some applications where this fits. Take, for example, parsers. In writing a parser, you've only got to deal with a few tokens at a time. Try writing a Scheme parser in imperative vs functional style and tell me which one is shorter and cleaner. However, in some applications, data is the only important thing. Take, for example, an OS kernel. In a kernel, most work boils down to finding highly efficient data structures to track certain state, and writing highly efficient algorithms that mutate that state. Functional programming isn't a good fit for this --- its is often very difficult to express algorithms in a pure-functional manner that have the same asymptotic complexity as their imperitive counterparts.
Re:Of course (Score:5, Informative)
FP is all about making algorithms primary and data secondary.
In FP, functions *ARE* data. The main way to distinguish programming languages, or programming paradigms, is by looking at the question: what are the so called "first class citicens?" (fcc)
In "procedureal" languages the fcc's are *NOT* "procedures", its only called procedural because the main "structuring" feature at that time was the procedure.
Functional languages are best set in relation to oo languages (or oo-like languages like Java and hybrids like C++). The most heavyly used fcc's in oo languages are objects. Thats what you create and what you pass around. E.G.: you create an object and pass it via a call to an algorithm.
In functional languages, the things you create are: functions, not objects, not structs. the things you pass around are functions, you *apply* a funcion on some data.
In both cases you still have data, and still you have algorithms.
What makes fuctional languages "inefficient" in some respects is the fact that they in general do not manipulate "state" of some data, but consider data to be read-only and yield an result instead. Suppose the whole kernal memory is the state of a system, a functional "kernal" would compute a complete new kernal state as a value object.
OTOH: functional languages are inherently multi threaded, as they only read access unchangeable data.
Regarding your - hypotetical - question wether a scheme parser written in scheme would be easyer than a standard C/Pascal parser
BTW: its is often very difficult to express algorithms in a pure-functional manner that have the same asymptotic complexity as their imperitive counterparts
This makes no sense to me, either. The asymptotic complexity of a problem has no relation to the programming paradigm you use -- only to your skills in that paradigm.
angel'o'sphere
Re:Of course (Score:3, Insightful)
>>>>>>
"State" probably would be a better word to use here. A procedural language is all about state. You call a procedure, and it modifies some state. If you want to reason about the program, you have to reason about all the state. In a functional program (rather than an imperative program written in a functional language) function application is primary, and state only exists in function parameters and return values. This minimizes the amount of state one has t
Re:Of course (Score:4, Insightful)
Yes, it is. It allows you to both program close to the hardware and on an abstract level. The focus is on efficiency.
But sometimes you want other goals first. In case of concurrent and fault tolerant programming I would rather use Erlang. For GUIs you can hack it together quicker if you rely on Java and its excellent development tools.
It is rather amusing to see the functional programming zealots beaten in their own competiition.
I don't mind. What I mind is that organizer did not officially publish the results. I sent several emails. No reaction. :(
Perhaps the problem posers got tared and feathered after the conference for posing a problem that was more suited to imperative programming. :-)
Now maybe the FP "movement" will go back to relative obscurity where it belongs, and let the real programmers do their jobs.
I hope you mean the F1rst P0st crowd, otherwise I have to consider you being an ignorant idiot.
Regards,
Marc
Godspeed, Andrew Hudson (Score:5, Interesting)
Re:Where's Andrew Hudson's C++ contest entry? (Score:1)
but for the lazy: http://www.cs.utexas.edu/users/ahudson/submit-hud
What about other high performers? (Score:3, Insightful)
A more interesting question might be how many offers have gone to someone who's consistently done well two or three times but never won. By my count, there is at least one such person, looking at the most recent contests.
This year's contest was an interesting problem, and no doubt the winning entry was well done, but there's also an element of brute force involved; look at the hardware Andrew had available. You could make a reasonable argument that this year's winner wasn't decided purely on programming s
Re:What about other high performers? (Score:3, Interesting)
Andrew Hudson has gone to the ACM International Collegiate Programming Contest twice (the maximum allowed) and placed 21st and 27th, done well in local university contests, and is ranked highly on TopCoder. While it is unfortuna
Re:What about other high performers? (Score:2)
I should perhaps clarify. I'm not taking a swipe at Hudson; his achievements are impressive. I'm just pointing out that there are other people who arguably have a better track record in ICFP contests, and pondering how well they might expect to do out of it.
Re:What about other high performers? (Score:2)
Awesome (Score:5, Interesting)
Re:Awesome (Score:2, Insightful)
Dylan, a bit like Python, is a "gateway" language. People start using it, and slowly come to realise what makes lisp great. Then they make the leap to Lisp. Handy
Re:Awesome (Score:4, Interesting)
Re:Awesome (Score:2, Interesting)
Re:Awesome (Score:2)
Re:Awesome (Score:1)
I agree that Lisp's syntax makes many things easy -- stuff that can't be done as elegantly in other languages -- but it's not that old. Google for "M-Expressions"; example links: here [c2.com] and here [stanford.edu].
Re:Awesome (Score:2, Insightful)
Now we don't have 1958 anymore, and writing parsers for high-level languages is no black art anymore. A proper syntax makes code easier to read and to maintain, and laziness on the side of the compiler writer cannot be held up as an argument to make usage of the language harder to the user.
And Dylan introduces a macro system that works much like the Lisp macr
Re:Awesome (Score:2)
Re:Awesome (Score:2)
Since common lisp is a *dynamic* language, you can't have static type checking. Indeed, static type checking is only a meaningful concept when it is possible for the compiler to know the type of every program entity at compile time.
The desire for static type checking betrays a false understaning of the nature of programming - i.e., the i
Re:Awesome (Score:2)
Re:Awesome (Score:2)
That's true and I think very interesting, as I pointed out in my 2001 writeup [hoult.org].
Of course what I didn't know when I wrote that was that our dynamically-typed language (Dylan) ended up in 2nd place that year (and with the Judges' Prize this year).
Also, a team using Erlang won the Lightning Prize in 2001, and a programmer using Python won the Lightning Prize in 2002.
Useful programming challenges (Score:5, Interesting)
While you can learn things from obfuscated code, I think these practical challenges are a lot better for the programming community as a whole.
Finding optimal paths around race tracks and obstacles [utexas.edu] presents a number of challenges which when solved in multiple totally different ways, helps give us new theories and data which we can use to develop new algorithms and theories for use in the real world.
Can anyone recommend any other programming challenges which focus on developing new algorithms which may be useful in other disciplines?
The only example I can think of is the many "robot" fighting challenges, where you write a program for a robot, and it has to destroy the other robots within the battlefield using its own "wits" and no human input. You might remember PC-ROBOTS from the early 90's if you're a real geek ^v^
Re:Useful programming challenges (Score:2, Informative)
The only example I can think of is the many "robot" fighting challenges, where you write a program for a robot, and it has to destroy the other robots within the battlefield using its own "wits" and no human input. You might remember PC-ROBOTS from the early 90's if you're a real geek ^v^
It sounds like you are making reference to robocode [ibm.com], but it's hard to tell since yo
That's great (Score:2, Funny)
Re:That's great (Score:2)
Re:That's great (Score:4, Funny)
His twelve-year-old grandmother....
You gotta give the story an extra "kick"
Non-functional programming languages (Score:5, Interesting)
The prizes were awarded based on answer quality, not performance, which takes away one of C++'s natural advantages over functional languages. Still, I'd like to see a breakdown of entry languages.
Re:Non-functional programming languages (Score:4, Insightful)
Ah well. Those of us with functional inclinations can console ourselves with the knowledge that at least the winning program didn't use COBOL...
Re:Non-functional programming languages (Score:4, Interesting)
In previous years, the majority of the entries were not C or C++. See for instance the 2002 entry list [ogi.edu]. In fact the entry list is interesting in itself to see all the languages people use.
And it's true that there are more C++ programmers, but many of the smart ones probably experiment with other languages. On the other hand no one is programming Haskell now because that's the only thing they learned in school and they want a job somewhere.
2002 ICFP language breakdown (Score:5, Informative)
language entries
java 28
c 24
c++ 22
caml 19
python 15
perl 11
scheme 7
haskell 6
lisp 5
dylan 2
erlang 2
mercury 2
pltbot 2
ruby 2
ada 1
bot! 1
dogs 1
extensions 1
forth 1
icon 1
kylix 1
lspm 1
mhotas 1
pandemonium 1
pps 1
prolog 1
sk 1
smalltalk 1
sml 1
v202 1
Some languages are bogus because of the format of the author's entry, or they used multiple languages.
Re:2002 ICFP language breakdown (Score:1, Interesting)
Re:2002 ICFP language breakdown (Score:2)
Perhaps the size of the task was small enough that C++'s memory difficulties don't occur. If your memory requirements are low enough that you don't need to free memory, you eliminate an important source of wild-goose-chasing that often occur in C++ programs. One crash ca
Re:2002 ICFP language breakdown (Score:2)
However, I find that this industry is filled with people who aren't smart, good, diligent programmers, and I prefer Java for working with such people. Time that I don't spend working out crashes due to their me
Re:2002 ICFP language breakdown (Score:1)
Re:Non-functional programming languages (Score:1)
Re:Non-functional programming languages (Score:1)
Re:What does ICFP stand for? (Score:4, Informative)
wondering (Score:2)
I wonder (because I see no mention of it) how many different languages we used in the contest aside from the standards (C++, C, etc). Recently I've been playing with Ruby which is pretty handy at times, and I swear by python, and expect. Well coming from a sysadmin background I swear by these... Anyone know if languages like these were entered or,, even if others use python and expect on a normal basis, hell even ruby for that matter.
Re:wondering (Score:1)
I think the problem with Python and Ruby are that they are both about 10+ times slower than Ocaml/C++ (to name two lanuages that often do well in the contest) and often running time is heavily weighted in the scoring.
'red' TopCoders (Score:2)
Re:'red' TopCoders (Score:2, Informative)
Re:'red' TopCoders (Score:5, Informative)
I've been participating in TC's programming contests for more than a year. There are weekly contests, each of which take only about 90 minutes of your time. There are no prizes given out for the regular contests any more, but I really enjoy being able to get a nice mental workout, and compare myself to some really elite programmers. Most of the top-ranked coders have done extremely well in other prestigious international math and programming contests. And even if you aren't at the level of the top ranked guys (mostly - I think the highest ranked woman is around 50th or so, it would be nice to see more female participation), it can still be fun to work on improving your rating and other statistics such as submission accuracy. The rating system is modelled after the FIDE system for rating chess players.
There are many other reasons to participate. You can also learn a lot by looking at the submissions by the top ranked coders. If you're looking for a job and do reasonably well, there's a good chance one of the many sponsor companies will be interested in hiring you. And perhaps most of all, TC has two big tournaments each year - the open, and the college invitational. These tournaments usually have a total prize purse of $100,000 or more, and pay out $50,000 or more to the winner.
Finally, to answer your question; the TC ratings brackets are split up into different colours. 'Red' is the highest bracket, and includes anyone with a rating higher than 2199. This corresponds to roughly the top 2% of all rated members.
Access to fast machines required? (Score:4, Informative)
Thus the judges never ran the program on their computers, and in theory could have judged the contest without even looking at source code. To me this seems a bit unfair because the winner could just be the one with the fastest computer, not the best code. I noticed that the first prize team used 16 dual Xeons.
So did anyone here compete? In practice are the results greatly influenced by how much hardware the contestants had access to?
Re:Access to fast machines required? (Score:3, Informative)
So on a 486 or a 16x-Xeon, 3000 ticks is 3000 ticks, doesn't matter how long it took to simulate in real time.
Re:Access to fast machines required? (Score:1)
Re:Access to fast machines required? (Score:1, Informative)
The "idea" that we organizers thought would be the winning one was computer assisted manual driving, and that the task would become writing a GUI for that purpose. Which would have been pretty much CPU-power independent.
Re:Access to fast machines required? (Score:4, Interesting)
I was aiming for manual assisted computer driving. Something like providing the control points and let the computer draw the Bezier spline.
To brute force the general problem I wouldn't dare in the first place.
I wasted most of the time reading and writing stuff between the various formats and to get my simulator implementation running exactly like the official one. Which was probably 1-2 days too much. Coming up with such an optimizing GUI would have taken another 2-3 days for me.So the winners did a good job.
Regards,
Marc
Re:Access to fast machines required? (Score:2, Interesting)
My strategy was to try to use "waypoints" to help guide an optimizing algorithm, but I gave up and just made a manual car simulator (meaning, you manually enter the commands, and my program just shows where the car is and if it's hit a wall yet). With more time, I could easily improve most tracks by at least
Re:Access to fast machines required? (Score:2, Interesting)
The winner noted:
(here [dyndns.org])
He also probably wrote the least amount of code of anyone. (A link to his source is posted in the same forum.)
To be fair, he also took an approach that my team wrote off as una
You know you are out of your depth... (Score:2, Insightful)
I read the dylan entry description and didnt even understand the problem. *smacks head*
ICFP stands for... (Score:1, Informative)
Just in case anyone wants to know without clicking through the fifth link to find a page that actually tells you...
Inrternational Conference On Functional Programmin (Score:3, Interesting)
First prize: $1000, free conference registration for two student team members, and the satisfaction of hearing the judges proclaim your programming language "the programming tool of choice for discriminating hackers."
Second place language gets: "the consolation of hearing us proclaim your programming language "a fine programming tool for many applications." "
So, I want to make sure this is clear: At the International Conference on Functional Programming, the judges had to get up a proclaim that "C++ is the programming tool of choice for discriminating hackers."
I would've loved to be there. Anybody who was at ICFP care to comment?
Re:Inrternational Conference On Functional Program (Score:5, Interesting)
Read this message [google.com] from a recent thread about the subject on news group comp.lang.functional.
Perspective from Judge's Prize team (Score:4, Interesting)
The tracks we did well one were the ones that we were able to hand-drive accurately; the ones we did badly on were the ones where there were simply too many hard turns to make that feasible.
Despite having a whole university lab full of computers we could have hijacked to run our program on, we only used a single computer for the actual optimizing.
Also note that although our automatic optimizer was written in Dylan, the visualizer/racing game program was C++.
If I were going to be controversial I would say that it all just goes to show that humans are better than computers and imperative languages are better than functional ones
Re:Perspective from Judge's Prize team (Score:2)
Oh yes. Too bad there is no Visual Fortran, it would have crushed the competition. :)
See ya next year!