This is the archived CodeCup 2004 website.
Click here to go to the new CodeCup website.

CodeCup 2004

Technical rules

This section explains how you should write your program. Since the competition is automatically controlled by scripts, it is important that your program works exactly according to these rules.

Sending your program

To enter the contest, you must write a program that is able to play Lucky Words. You can submit the sourcecode of your program on this website. The source code must consist of one single file. The maximum allowed size of the source file is 1,474,560 bytes. We will compile and run your program under Linux.

Input and output

Your program reads input from standard input (normally "the keyboard") and writes output to standard output (normally "the screen"). Your program is started once at the beginning of a game and keeps running until the end of the game.

You should strictly follow the dialogue described in the rules of Lucky Words. Each element of input or output is on a line by itself. The letters to put on the board are always given in upper case, but you may use upper or lower case in your output.
You may assume that all input to your program is completely correct.

Your program may read a list of words from the file words.dat. This file is available in the current directory during the game. Use only lower case letters in the file name (Linux is case sensitive about file names).

When the diagram is completely filled with letters, your program should detect that the game has ended. At this point, you may optionally output the total number of wordpoints (see the Lucky Words rules). Finally, your program should exit.

Programming languages

You may write your program in Pascal, C, C++ or Java. The table below shows exactly which compiler and configuration we are using.

Language   Compiler   Command
Pascal FreePascal 1.0.10   fpc -Sgoh -O1 -Cr-t-
C GNU GCC 2.95.4   gcc -Wall -O2 -lm
C++ GNU GCC 2.95.4   g++ -Wall -O2 -lm
Java Sun JDK 1.3.1   javac -O

Programs written in Pascal are compiled with FreePascal in TurboPascal mode.
FreePascal is a lot like Turbo Pascal, but it is more powerful. You can make an array of a few megabytes size without problems. Please note that the types Integer and Word can not contain numbers larger than 32767, resp. 65536. It is usually better to use the type LongInt.
You can use Read and ReadLn to read from standard input, and WriteLn to write to standard output. After each move written to the output, your program should make a call to Flush(Output); to make sure that any output buffers are written immediately.
Using units in your program is not recommended. They will not help you very much and may cause problems when your program runs in the competition system. It is not possible to use units you have written yourself, since your source code must consist of a single file.

C and C++
Programs written in C or C++ are compiled with GCC, and linked with the standard math library.
You can use scanf() to read from standard input, and printf() to write to standard output. After each move written to the output, your program should call fflush(stdout); to make sure that any output buffers are written immediately.

Programs written in Java are compiled and run with Java JDK 1.3.1.
You can use the object to read from standard input, and System.out to write to standard output. After each move written to the output, your program should call System.out.flush(); to make sure that any output buffers are written immediately.
It is possible to make more than one class for your program, but you will have to put the source for all classes in a single .java file (the compiler will produce multiple .class files anyway). When you do this, you should not declare your classes public, or the compiler will complain about it.
When submitting your Java program on the website, don't forget to enter the exact name of the main class of your program (the class which contains the main method).

Runtime environment

Computer: Pentium 200 Mhz
Memory: 64 MB total, your program can use only 10 MB
Operating system: Linux 2.4 (Debian 3.0)
Time limit: 120 seconds per game

Your program is allowed to use at most 120 seconds per game. We measure only the time that your own program spends to select a move, not the time that your opponent spends to select a move. If your program exceeds the time limit, it loses the game and receives a penalty for irregular loss of a game.

There is no time limit per move, only the time limit per game. So your program could use 115 seconds for the first move, but then it would have to do the rest of the game in 5 seconds. Since a full game consists of exactly 48 moves, you can use on average almost 2.5 seconds per move.
Remember that the CodeCup systems are only 200 Mhz. If your computer at home is much faster, you will have to be extra careful. For example, if your computer at home is 800 Mhz (4 times faster), then your program must use no more than 30 seconds per game on your own computer to still be fast enough on the CodeCup system.

To keep the contest fair, some things are not allowed:

  • Your program should not write any files, and should not read from any files except words.dat.
  • It is not allowed to make network connections of any sort.
  • System dependent tricks like starting other programs or creating extra processes are not allowed.
  • It is not possible to do calculations while it is your opponent's turn to make a move. In other words, your program can not "think in the opponent's time".