Introduction to Competitive Programming 211
chrisjrn writes "Last year, I unexpectedly found myself entered in the Australian Computer Programming Competition, and somehow did well in it. As a result I decided to write a guide as an introduction, for high school-level students (and others, I suppose,) into the world of programming competitively based on my experience, and how to go about successfully competing in competitions." Article looks like a good start, I'm sure Slashdot readers can add many more tidbits of wisdom.
Programing out of Necessity (Score:2, Insightful)
Re:Programing out of Necessity (Score:5, Insightful)
Re:Programing out of Necessity (Score:5, Insightful)
My last job had a total of three programmers, and we all worked on different areas of the system, and only towards what was the eventual end of my employment there (I left for a much better job) did we actually interact and connect some of the pieces together.
You're right though, in a team situation, things can be done so much faster if you've got a team leader who can recognize skills and traits and assign tasks accordingly. But not every company will have a team of that many people on everything.
Even at my current job, where we have a very large development team, there are still individual jobs to get done, and there are other jobs that require a team of 3-4 or even collaboration between two or three whole departments.
And that's my $0.02 ;o)
Re:Programing out of Necessity (Score:3, Insightful)
Of course, you're correct in that a lot of modern engineering tasks (software or any other kind) are complex beyond any single person's abilities, no matter how much of a genius they may be. And yes, teamwork is the way. However, i
Good Public Relations (Score:5, Insightful)
All in all, good PR.
- dshaw
Re:Good Public Relations (Score:2, Interesting)
I've done college level programming contests, and the atmosphere was always "ok, be prepared, but this is for fun" We had a free lodging, free travel, and free food for the entire weekend. It was cool. Did we win? God no, we came in 12th IIRC, but it was a fun learning experience.
Some tips I remember:
1. Know who's good at what. We could only let 1 person from our 4 man group
Re:Good Public Relations (Score:3, Funny)
Hot college chicks running the contests always helped encourage me.
Code before competition (Score:5, Interesting)
Re:Code before competition (Score:2, Insightful)
Re:Code before competition (Score:3, Insightful)
Re:Code before competition (Score:4, Informative)
Re:Code before competition (Score:3, Insightful)
Re:Code before competition (Score:2, Informative)
Re:Code before competition (Score:2, Informative)
If you're in college still, ICPC = "International Collegiate Programming Contest." The site seems down at the moment, but it's usually at http://acm.baylor.edu/acmicpc [baylor.edu] or http://icpc.baylor.edu/icpc/ [baylor.edu]
Re:Code before competition (Score:3, Interesting)
Re:Code before competition (Score:3, Informative)
I learned about it only because my school's chapter of the ACM always participated. The division I'm in covers the mcuh of the west coast of the US and the west coast of Canada. There were over 100 teams last year. It really sucks to be in the same division as
Re:Code before competition (Score:2)
Re:Top Coder.... (Score:2)
TopCoder runs algorithm competitions weekly. The top 5 algorithm coders in TC are:
SnapDragon - A Canadian
Petr - A Russian
Tomek - A Pole
Eryx - Another Pole
Misof - A Slovakian
Too bad TC hasn't figured out that its best coders aren't US citizens. Why, those people might get kicked out!
Re:Code before competition (Score:2)
Ok, this creeped me out just very slightly... How does it come about that this site is hosted at a baylor.edu domain? I'm sitting in my dorm room on Baylor's campus right now... Are there other sites hosted at other universities, or is Baylor just special somehow? I never had the impression that our CS dept was really much good (physics is my business).......
If you include hardware... (Score:2)
Robot Table Tennis is simple enough - build a machine that is capable of hitting a table tennis ball over the net, either from a serve or from a return. (The umpire serves.)
The Micromouse Tournament is also simple. Build a machine capable of solving a maze and navigating to the centre in the shortest possible time. In order to be competitive, these days, you've got to have a micromou
Re:Code before competition (Score:4, Informative)
Could become a representative for Great Britian to the International Olympiad of Informatics [win.tue.nl] next summer, to be held in Mexico.
If you're in northern Ireland, you'd compete in the Irish Schools' Programming Competition [compapp.dcu.ie].
You can also compete in online contests such as USA Computer Olympiad [usaco.org] (operated in the USA, but open to everyone), or a quick google search will yield more.
Re:Code before competition (Score:2, Informative)
Other competition formats (Score:3, Informative)
Re:Bogus Template (Score:2)
Should read:
What the hell is <strings.h>
Shouldn't he #include cstdlib and cstring instead of stdlib.h and string.h (assuming that's what the typo was), not to mention including <string>
Re:Code before competition (Score:2)
Sure, then they throw a Carmichael number in the data set, and you're screwed...
Big Competitions not Mentioned In TFA (Score:5, Informative)
- TopCoder: http://www.topcoder.com/tc [topcoder.com] (weekly matches, yearly competition with large cash prize, also hosts the Google Code Jam (http://google.com/codejam) [google.com]).
Good Info... (Score:4, Funny)
Needs more Caffeine.
Why? (Score:3, Insightful)
My university had a team, I went to one meeting and realised how stupid and hokey it was. Half of it was an intellectual circle-jerk and the other half was some practicing. All too l4m3.
Re:Why? (Score:5, Insightful)
Re:Why? (Score:2, Interesting)
If you're nervous, scared of your skills, etc: nothing's better then just straight immersion. You can't get too anxious if you're just *doing* it. You have to jump in with both your feet and start, or else you'll never get anywhere.
It's really great for those of us who are scared of a particular domain, of not understanding problems, and all in all it really does help in solidifying domain ideas and promoting learning.
A good
Re:Why? (Score:2)
Of course, it's not for everyone, and I know people who are gurus in computers and tech in general yet clueless in these competitions, and OTOH I know some people whose computer literac
Re:Why? (Score:2)
The only competitive programming that matters is solve a problem no one else has solved. You have your whole life to do it, you may begin....wait for it....now.
Re:Why? (Score:2)
My university had a team, I went to one meeting and realised how stupid and hokey it was. Half of it was an intellectual circle-jerk and the other half was some practicing. All too l4m3.
Why is "football" so great? I'm not trying to troll, but is this for some lack
Competitive high school programming teams ... (Score:5, Funny)
Re:Competitive high school programming teams ... (Score:3, Funny)
You think that's scary? Wait till you go to anime conventions!
Here's a BIG Hint... (Score:3, Interesting)
My school participated in a competition once, and we didn't do too well. One of our teams coming in hung over and running on two hours of sleep probably didn't help.
Re:Here's a BIG Hint... (Score:2)
TopCoder (Score:5, Interesting)
Want to get involved with some competitive programming, right now?
TopCoder [topcoder.com] is always looking for more members. The algorithm compeitions only take a few hours, and can pay good money. Plus discussion of the algorithms afterwards with the other members can be quite enlightening.
They also do design and development competitions, which take a bit longer, but pay a lot better. You can also pick up cash by being a reviewer for these compeitions, if you pick up enough "scratch" in the compeitions themselves.
You get individually rated on each of the 3 competitions and TC also provides some measure of employment services.
Back when algorithm competitions always paid, I earned my 1/2 of rent through them. After I graduated from college I paid my bills through a combination of design / development / reviewing. Now I work for TopCoder as a salaried employee.
Check it out, and look me up. My member handle is the same as my /. handle, just without the spaces.
TopCoder can be very rewarding. I hope every programmer that reads this at least looks at the website.
Re:TopCoder (Score:2)
Re:TopCoder (Score:2)
The next "Single Round Match" is Fri Sept 9.
Run the applet, log in, and try some of the practice rooms.
Too bad the Google Code Jam, and TopCoder Open competitions are already well on their way...
Re:TopCoder (Score:2)
over the age of 18, apparently. I have an account with them but I couldn't figure out what to do with it since a bunch of the activities require you to be 18 or older.
Normally I wouldn't complain (TopCoder sounds great, why else would I have registered?), but the article was about high school programming competitions. In fact, the SEARCC that he mentioned has a requirement of being under 18.
Why I like competitive programming. (Score:5, Interesting)
Re:Why I like competitive programming. (Score:2)
Re:Why I like competitive programming. (Score:2)
Re:Why I like competitive programming. (Score:2)
Texas Competitions (Score:2, Interesting)
My school had a great computer club with a enthusiastic sponsor that went to local prog
Real World competitive programming. (Score:5, Interesting)
Re:Real World competitive programming. (Score:2)
I would say that Ruby is at least as good a bet as C# there. There may be a lot of libraries for C#, but Ruby is definitely the more concise and flexible language, and it's almost trivial to extend with C code if you need extra speed or low-level OS functionality.
I don't have first hand experience with ASP.NET or Rails, but from the comments I hear, ASP.NET is not awfully intuitive nor
Make sure you know the IDE (Score:2, Informative)
Not a 'great' guide, but good points (Score:3, Funny)
ICFP (Score:4, Informative)
The winners to the 2005 ICFP contest are set to be announced this month (Sep 27th). Here're a couple of slashdot threads about it:
http://developers.slashdot.org/article.pl?sid=05/
http://it.slashdot.org/article.pl?sid=05/06/26/00
My experience with topcoder (Score:5, Interesting)
The problems I encountered there (which I solved in java) were far more difficult than the stuff I do at work (as a PHP/Javascript/MySQL lead web dev). One of the Google Code Jam problems was a real brain twister:
Two rocks are dropped in a pond, and create square ripples. For example, a rock of weight 8 is dropped at a point -- at time zero, it creates a ripple of height 8 at the point it was dropped. at time zero, it creates a 3x3 square ripple of height 7, like so:
The problem: given these rules, find the highest ripple height given the locations, drop times and weights of two stones. (If two ripples overlap, the height is equal to the sum of their heights - i.e. if a height 3 and height 4 ripple both occupy the same point, the height at that point is then 7)
The solution 90% of us tried was to simply brute force the problem, creating an array, and updating the array over and over again, comparing the ripple heights to the previous max. The maximum area we were supposed to check was 2000 x 2000 -- so the brute force method timed out (there's a pretty short execution time limit).
The correct solution was to consider time as a third dimension; each rock creates a 4 sided pyramid. Then you only need to check 3 points, which can be done with simple equations: the 'peak' of each pyramid (the height of which happens to be the weight of the corresponding rock) and the intersection of the two pyramids.
Did I mention that there were 4 problems, of which this was the second, all of which had to be solved in a grand total of 90 minutes? And that your score decreases every minute you spend on a problem?
Yeah... TopCoder's rough. And no, custom pre-written libraries won't win this for you -- but they will save you a little time.
Re:My experience with topcoder (Score:4, Interesting)
Um... those "professional" contestants would have already solved a similar task like you've just mentioned 10 times before... The "libraries" are basically hard-wired into their brains.
I despise those competitions that put too much restraint on time given to solve the tasks. To get "good" at it, you have to grind through hundreds (if not thousands) of problems to the extent that when you see the tasks in the competition, you can immediately relate: "aha! this is almost identical the XXX that I solved a year ago!". I'd describe these people as "solution generating machines". And the time and effort spent to train to that state is a total waste of human resources, IMHO.
It's like playing chess with a 5 second time limit for every move...
And yes, I had been involved in these competitions for years. (A few local/national competitions and the IOI 2003, I wonder if there are any slashdotters who was also there...
Re:My experience with topcoder (Score:2)
Being able to take what you've learned (experience), apply it to new situations in new combinations, and to see the relationships and patterns involved, quicker and better than others.
Re:My experience with topcoder (Score:2)
And these "experts" are "experts in solving algorithmic problems in 30 minutes", yet an intelligent person well versed in algorithms etc would be able to solve them in a few hours without all those mindless grinding that they do.
I don't doubt that there are people who could become "experts in solving algorithmic problems in 30 minutes" without all that grinding, but from what I've seen this wo
Re:My experience with topcoder (Score:2)
At least an expert topcoder user can write you a string parser that works the first time. I'm currently working with a programmer for whom that'd be a massive improvement.
In fact, even more, major companies (Google, for one!) are actually using TopCod
Re:My experience with topcoder (Score:2)
Now...let's say that stone 1 (weight 12) was dropped at t=3 after stone 0 (weight 15), 20 units away from stone 0. So you subtract 3 from 20, and find the midpoint of the remaining distance o
Re:My experience with topcoder (Score:2)
Yes. You have to be a little careful of odd/even distances, and because the proper metric is not Euclidean distance but whichever is longer of the x and y axis distances, and of potential non-intersection (consider e.g. two stones dropped in the same location at different times), but your basic idea is sound. Anyone who tried to simulate to solve this missed the spirit of these competitions---they're really about mathematical modeling more than computer programming.
Re:My experience with topcoder (Score:2)
Yeah, but the math makes the efficiency. Most people were brute forcing it, when there was a much faster way. That's what good programming is all about, right? Finding out how to apply your knowledge (mathematics, obscure functions, previous experience or whatever else) to making a program more elegant and efficient is what good programming is all about.
To me, a true programming
My experience (Score:5, Funny)
So I'm a hot shot junior programmer, ready to take on my assignment. Here was the problem: "You have a number of cities mapped on an x,y grid. A travelling salesman wants to find the shortest route between the cities. Calculate the shortest route." We had two hours or something.
I'd never heard of this problem before.
So I was like, "Hey, no problem. This is eeeeeasy." So I went off in my youthful exuberance with a blank piece of paper, figuring out how to solve it. Hmmm. That idea was good -- except it wouldn't work for this one case. How about this idea -- nope, that one will hang up on this other case.
Minutes ticked away as I sweated the problem. There HAD to be a solution to this. Half an hour, then an hour -- I'm growing desperate. What the hell? This problem is freaking hard. Finally I'm like, "screw it" and threw something together at the last minute. We ended up losing because I spent too much time thinking about it.
I still think it was goddamn unfair to give an UNSOLVED PROBLEM in a programming contest for high school students. I'm still pissed about it to this day. Grrr. :D
I encountered this when i was about 12 (Score:2)
Re:My experience (Score:2)
I still think it was goddamn unfair to give an UNSOLVED PROBLEM in a programming contest for high school students.
Not sure if I'm being pedantic or not, but the problem, as you stated it, is neither NP nor unsolved. The shortest distance between two points is solvable in better than factorial time.
Re:My experience (Score:2)
1) Compute the list of all possible tours.
2) Select the shortest tour.
Granted, there's no efficient way to solve the problem, but that's not the same as unsolvable. In fact TSP is proved to be NP-complete, so there are lots of translations to other solved problems available.
Re:My experience (Score:2)
Re:My experience (Score:2, Funny)
Now please don't ask me about those neuronal networks theories. My knowledge of neuronal networks does not go any further than the travelling salesman problem because I found out a while ago that there is now way I will ever need to know more about it, and still I could use it to impress my dates or the mouth-breather in the adjacent cubicle.
Now if you are skilled in the field of analytical behaviorism you could guess
Re:TSP (Score:2)
Bastards. :)
My experience (Score:2)
If you're into programming in your spare time, the competitions against other local highschools are embarrasingly easy. I think out of about 13 competitions, my team easily won 1st place in 10 of
Re:My experience (Score:2)
Re:My experience (Score:2)
Don't be too smart when brute force will do (Score:2, Insightful)
In 2004, my team won the eliminations in New Zealand and we went on to the ICPC World Finals in Prague. Up to the finals, we were expected to write clever programs using efficient algorithms that ran blazingly fast. Then, at the finals, it was all about hacking up crude semi-brute-force approaches that didn't work efficiently at all but got the job done. We were by far not the only team to do badly because at the finals because it took us hours to figure out that the clever algorithms we were coming up with
Re:Don't be too smart when brute force will do (Score:2)
I think there's general consensus among the coaches that the 2005 problem set was more appealing. It had brain teasers and algorithms. The top 4 teams were struggling with 3 different problems in the last hour. The winner, Shangai, happened to be the ones who figured out the
A Very Usefull Article (Score:2, Interesting)
Programming Competitions? - Booooooooo! (Score:2, Insightful)
Re:Programming Competitions? - Booooooooo! (Score:2)
Good stuff... (Score:2)
Some more tips (Score:2, Interesting)
Anway - some tips:
1. Read the question extremely closely before you start. It is frustrating to miss an important detail *after* you've written a lot of code.
2. Plan carefully before you start. One of my team members was very talented at finding approaches that would work without problems. The other two members of our team could then implement them reliably. You cannot waste time
Problem solving is key (Score:3, Insightful)
The best way to practice for a programming competition is to treat it like a math competition. If you can think of efficient solutions and apply them quickly, you will do well. Remember that a lot of these competitions have runtime limits (usually 2-3 seconds on a predetermied isolated machine), so coding up the simplest solution won't always work.
Practice is also very important. Try ACSL [acsl.org], there are some sample problems available there, practice doing them and time yourself!
Also, for those who say that programming competitions are useless, they have no clue what they are talking about. What sets you apart in real-world development involves thinking up efficient solutions to difficult problems. Making the code easy to maintain and expand is just a simple step up when you do development in the industry.
Rounders (Score:2, Insightful)
Corewars - competitive programming since 1984 (Score:2)
Let your programs fight each other while surreptitiously learning about assembly language.
www.corewar.info
Recently competed in the UNSW ProgComp (Score:4, Interesting)
Although I think the article fails to mention the organisation of 'computer time'. The Australian Computer Programming Competition and the ProgComp both allow three members in a team, but only one computer between the three of them. This means that you have to organise the priority and the division of problems amongst your teammates. Also, learning to code on paper is another important skill, as you won't have access to a keyboard the whole time. Therefore, having access to a printer is extremely helpful as you can just print and debug your code.
Due to the nature of some languages, they restrict languages like Java and Python in the bigger competitions (IOI, ACPC) due to the large amount of standard libraries they get to play with. For example, I wasted half an hour coding Task 4 [unsw.edu.au] before I realised we could switch languages halfway through the competition and got it done in 15 lines with Python with regex.
Finally, you do not need to have a team that consists entirely of programmers. In our team (for this year), we had two programmers, one to do the algorithmic ones (my friend, who represented Australia in the International Informatics and returned with a bronze medal), one to do the string-based ones (me), and another person to solve the problems by hand. Although, due to ProgComp deciding to have less algorithmic questions, my friend was only able to use his skill effectively on one question and the rest were split up between us. We had our third team member solve Task 3 though, and just coded a small program to decode it using the supplied decryption matrix.
I won't be able to compete in high school competitions anymore as it is my final year, but I wish the rest of you, who are still able to compete, luck.
Re:Recently competed in the UNSW ProgComp (Score:2)
Large version here [blogcadre.com].
I Once Found Myself in the ACM (Score:2)
My opinion is this... (Score:2)
If the competions gave these as options, there really wouldn't be
a competition. It would be a battle of who can figure which routines
to use in which order... Or in other words it would be a slaughtering
of people using any other language by people using the C++/STL/BOOST combo.
Re:My opinion is this... (Score:2)
nothing to see here, move along (Score:2)
From the article/post:
which may be the overstatement of the posting year.For those who don't want to go read the article, here's the summary:
Regional ACM competitions (Score:2, Interesting)
1. Know your environment. The competitions I've been to give you some time on the computers before the competition to get to know the environment, compiler, IDE, etc. Make good use of it. If they have Eclipse, what version of Java, gcc, pascal, etc. Know the editor you are going to use. Do they have emacs, vi, etc? Knowing your environment will greatly reduce your write-compile-te
Write some software instead (Score:3, Insightful)
That said, I think "undiscovered developers wanting to get a break" should spend most of their time writing some useful software or web application instead. You get more experience than just solving puzzles at breakneck speed. Writing a good piece of software or site that your interviewer has used goes further than anything short of a personal recommendation. When people use your software and are impressed with your skillz, work comes to you. Plus, you could end up founding a software business that makes you a millionare.
There are a lot of opportunities out there.
Tips (Score:5, Informative)
Some of the major facets that we coach:
1. Easiest problems first. Appropriately applying a concept from computer science itself, the goal of a contest is to maximize your throughput. Since easy problems are worth as much as hard ones, effort should be made to discern which problems are easiest (as opposed to most interesting!).
2. Team roles. Back when contests had four people to a team, we had two people as "bangers" (i.e. people who sit at the terminal and quickly compose solutions to the easier problems) and two were "software engineers", who sat away from the terminal and worked on paper. Note that after the first hour or two of the competition, EVERYONE is a software engineer.
3. Specialize. In addition to roles, team members would typically have a specialty. Some people are good at algorithms; others at text processing; others at math problems, etc... This should all be worked out during practice to the point where every member of the team should be able to read a problem set and immediately tell who on the team will likely end up working on each problem.
4. Do as much work away from the terminal as possible. Since you only have one terminal (in the ACM contests), it should be considered a scarce resource. Priority should be placed on entering new code; if you are debugging and someone has written out new code that's ready to enter, take a printout of your program and let the other person on. An exception is made when the person debugging feels they are within five minutes of a solution.
5. Test extensively. This is the difference between a good team and a great team, in our experience. It is extremely tempting to submit your code once your program produces the correct output for the sample data. But it is not worth a failed submission.
6. Consistency. We didn't mandate particular coding conventions, but we did mandate that team members at least HAVE coding conventions. E.g. array names -- are they the plural or singular form of the word (node[i] vs. nodes[i])? Similarly for variables that keep count, method names, etc. Recalling such things while typing wastes valuable minutes.
7. Have practices that are genuine contest simulations. We even went so far as to shine lights in team member's faces and make lots of distracting noises, to simulate contest environments. On occasion we would even intentionally make mistakes in the problem sets and judging, just to prepare people for that (since it ALWAYS happens in the actual competition!).
There were others, but I can't give away all our secrets! Well, okay, maybe I just don't remember them all.
In our experience, it's the teams that consider contests to be all about "hacking" or "typing fast" that typically do very poorly. Those that apply good coding practices, and are consistent and organized are the ones that come out on top.
Coding Competitions Reward Bad Practice (Score:3, Insightful)
They reward you for coding fast, hacking out make-shift solutions (i.e. Code that could never pass QA), and the given problems are too narrow to be representative of a real programming problem. You can ignore things like portability issues, standards compliance, elegance, orthogonality, modularity and maintainability.
Real programming skills, the things that really set the master programmers apart, play absolutely no role. Namely: Source control and documentation. Most types of "competitive science" won't work well. At least the type where you can't build your project ahead of time. You're going to get the same quality work out of "speed programming" that you'll get out of "speed chemistry". Wouldn't that be fun? Get a room full of chemists together with a bunch of components and tell them to mix real fast, no time for measuring!
That's my take on the whole Competitive Coding atmosphere.
Collaborative Programming (Score:2, Informative)
That is why I value Google Summer of Code so much; because it forces students to work together with ones they do not know: they learn the social part of programming. This is what most programmers lack; including me of course. Or else I would not be reading and contributing to this very
As if we need more competition in society... (Score:2)
Re:wow, another new low... (Score:5, Insightful)
If you're not interested, don't read it. Some of us do find it interesting, either because we're programmers or because we like to compete. Slashdot carries many articles on different topics, making it more interesting for more people. If all you want is stories that interest you, and don't want any others posted, why don't you found your own site, so that you have the final editorial say?
Re:wow, another new low... (Score:2)
> have the final editorial say?
I've been thinking (fantastizing) of this for quite some time lately.
I mean, I come to slashdot to read the comments, not to see what the lame editors have to say. All they do is clicking the "approve" button from the submissions they get, and god knows what they do with their spare time. Quoth the famous saying "I could replace you (editors) with a very small shell script.".
It would be great if somebody with a big pipe and
Re:cooperating like code chickens (Score:2, Funny)
Re:cooperating like code chickens (Score:2)
However, because of the higher-than-normal body temperature, my cerebral cortex is operating much more efficiently than it ordinarily does. I can the
Back in my day we didn't pick our language (Score:2)
Ah, but in college when I went in 1980, it was in Algol, as only math dweebs used Pascal, and then it became C.
I agree about perl - both elegant and powerful, and it's a true test of programming. But I still hate the fact it treats zero (0) values as nulls - have to alter database
Re:Ontario Highschool Fun (Score:2)
Treat all of the sides as 2D planes, with the top (ie planes "up") facing inside the volume. If the point is on the top-side of all planes, it's inside. If it is below one, then it's outside.
bool pointInsidePlane {
foreach plane {
if( point is below the plane )
return false;
Re:Ontario Highschool Fun (Score:2)
That's half the solution. You still need to know how to determine which side of the plane a point is on. While this is possible with high-school math, this is generally only taught at the end of the high school career. Lower levels are more concerned by the false "fact" that negative numbers don't exist.
(This is al
Solution (Score:2)
In vector maths, one of the most useful operators is the dot product. It is useful because it has both an algebraic and a geometric formulation. The algebraic formulation is that (a,b,c).(d,e,f) = (ad,be,cf) - this allows you to calculate the damn thing on a computer. The geometric formulation is that, for two vectors X and Y, X.Y = |X| |Y| cos
Re:I think there should be 3 styles of coding (Score:2)
That said, TopCoder (as mentioned elsewhere) also have the design/development competitions, where you code real commercial code. I wouldn't keep doing that without the chance of payments, though. "Algorithmic" competitions, on the other hand, are fun in their own right.