Search MSO Worldwide

MSO Events Mind Sports Zine Brain Power Play Games Online Community Links
Programming Contests - MSO Worldwide
New Programming Contest Every Month
Programming Contests
Prior Contest Results
Upcoming Contests
14-21 January
11-18 February
11-18 March
8-15 April
Current Contest:
17 December to 7 January

Entry period extended due to winter holidays
and because of the challenge's complexity
Check here for index to all programming contests
Eleventh Computer Programming Tournament
First Prize - $500 (U.S.D.)

Click here to get right to the details of the December Programming Tournament.

The December Programming Tournament started on Sunday 17 December 2000
at 5 pm in London, Noon in New York, and 9 am in California.

A two-hour Programming Chat Session will start four hours later
(9-11 pm London, 4-6 pm New York, and 1-3 pm California)

The Tournament will end three weeks later, at the same time on 7 January 2001.

Join our unmoderated Discussion Mailing List to discuss the contest.

until the December programming contest ends
(at 5 pm in Great Britain on Sunday, 7 January 2001.)

Our countdown timer uses your system's clock
Use this search box to check the time in your country:

Joseph Zbiciak (United States) was our September $500 winner.
Vincent Celier (Canada) was our October $500 winner.

October Tournament - Enter Now - $500 First Prize

Three Ways to Get More Information:

  • Everyone is invited to join our Programming & Contests Chat Session, where you can discuss the current challenge, ask questions, or talk about anything else that has to do with the world of programming and contests in general. The chat will start four hours after the contest starts, and will last for two hours.
  • Use our Discussion Mailing List to ask questions about the programming contest, to discuss the challenge, and to see answers to questions that other entrants might have asked the judges. Please do not discuss specific programming techniques on the Mailing List until after the contest has ended. The list is now unmoderated, which means if you accidentally reveal programming techniques during the contest period, you will be giving advantages to other entrants. John is no longer screening messages. If you're interested in the discussion, but don't want the e-mail, you may set your subscriber preferences so that you can only read the discussion online, at that webpage. Beginning programmers might want to join the discussion list to get hints and strategies.
  • Send discussion comments and questions to <> if you want feedback from other contestants. If you have specific questions for the judges to answer, send your e-mail to <>. If the answer to your question will be of interest to everyone, send it to both addresses. We reserve the right not to answer certain questions while the contest is ongoing.

Crossed Words Solitaire

The challenge this month is to play our solitaire word game. Our word game is similar to games that are sold in stores or playable on the internet, but the board arrangement, moves and scoring methods are definitely different, so be sure to read the rules.

Your program will play the best possible game that it can within the time limit specified. This month, we anticipate that the winner will be chosen based on the quality of the answers rather than by the speed of execution or other elements of the formula. Ties, if any, will be broken using the formula, of course.

Personal Note: Even though the weather channel web site says that today's low will be 25 degrees fahrenheit, it also admitted at 10:30 am that the temperature was 7 degrees. Our local forecasters were predicting a low last night of close to zero degrees with wind chills of 40 below zero. Fortunately, our phones were working again by late yesterday afternoon.

Summary of Details

  • Download one of these Zipped Word Files and extract the contents. All three files are identical except for the line separators used between words.
    • (230K compressed, 779K uncompressed): words separated by carriage returns (013-decimal; &0D-hex)
    • (230K compressed, 779K uncompressed): words separated by line feeds (010-decimal; &0A-hex)
    • (233K compressed, 873K uncompressed): words separated by combined carriage return/line feed (CR/LF)
    Each of these zip files contain 94234 words in 26 files, divided by starting letter. Each file is in alphabetical order, with words separated by the end-of-line (EOL) characters stipulated above. Unlike one of the files that we used in February, every file ends with the EOL character, so be sure to download these replacement files. The uncompressed size of the files includes 94,234 EOL dividers, just in case you need to estimate string storage space for the words in the files. Also, for your information, the longest words in our dictionary are 12 letters long.

    All 78 dictionary data files will be present on the official testing system, so you may use the 26 of your choice. The files will be in the exact form as what you download. These dictionary files contain the only valid words that can be used to fill in the word grid. Plurals and other word variations may only be used if the word appears exactly in that form in the official dictionary file. You may not use any words that do not appear in our files, even if they appear in other dictionaries.
  • Download, extract three files, and use one input file of your choice.
    1. input13.txt: three lines of input separated by Carriage Return (CR=decimal 13)
    2. input10.txt: three lines of input separated by Line Feed (LF=decimal 10)
    3. input1310.txt: three lines of text separated by CR/LF.

    The three files are identical except for the end-of-line characters. We now supply three versions of the file at the suggestion of one contestant, proving that we do occasionally listen to suggestions. Your program will use one of these files as a pool of letters that can be drawn from during the game. Each file contains three lines of text, 66 characters in each line. The final test files will be the same length, but will contain a different "pool" of letters (the same 198 letters randomized into a different order).
  • Download and extract the timing file of your choice, or create your own local copy of that chosen file. This zip file contains two timing files
    • seconds.txt: the number 300 followed by a carriage return then by a line feed (CR/LF).
    • seconds10.txt: the number 300 followed by a line feed only.
    • On your system, the timing file should contain whatever number you estimate to be equivalent to 300 seconds (five minutes) execution time on our 450 mhz Pentium System running Windows 98 or RedHat Linux.
    • Your program should read this value from seconds.txt or seconds10.txt. Do not hard-code the time limit into your program because we may use a different time limit during the final test.
    • As usual, be sure that you check for an expired time limit often enough that your program writes its output file and terminates BEFORE the number of seconds specified in the seconds.txt file.
    • Be sure to program an "escape valve" into your program, a key-combination such as Ctrl+C or Alt+F4 that lets your program exit before the time runs out. If you do not specify an escape method on your entry form, your entry will be disqualified and your program will not be evaluated. It is not required that your escape method also write your output, but you may, if you wish, cause the program to write the output if aborted early.
  • Your program will find the best possible answer to the challenge described on this page, then write your final score, your final word grid, and the sequence of moves (draws from the pool, discards, second draw (if any), words played, extra words formed, word scores) that led to that final answer to an output file named output.txt. Identify the location where each word is created by a system of your choice.

    Most months, we specify an exact format for your output file. However, because this challenge is more complicated than usual, and because we don't want to get bogged down designing an output format in advance, we are allowing each of you to design your own output format as long as you define or explain any abbreviations or shortcuts that you use in the first few lines of output.txt. Output files will be manually scored and compared this month, because we did not want to burden you with an exact output format.
  • The deadline for entries is 7 January 2001. Entries will be accepted up to that date until the same time at which the contest was originally uploaded on the starting date, three weeks after the contest started.

    We have extended the entry period this month so that people on holiday can still enter the contest and to give extra programming time for what might be a more complicated challenge, time to improve your logical algorithms and program performance. If more people enter the contest this time because of this extended entry period, we might make it a semi-permanent improvement, so be sure to tell your friends and ask them to enter, too.

    When there is not a simple answer to a challenge, like in this month's challenge, we believe that a person who enters the contest later in the period has just as much chance to win as someone who enters earlier, possibly a better chance because the extra time gives a programmer time to refine program performance.

Crossed Word Solitaire
Rules of the Game

The Crossed Word Solitaire board is vaguely similar to playing boards of other word games. For example, the Milton Bradley game Scrabble has a 15-by-15 board with a somewhat complicated pattern of double-letter, double-word, triple-letter and triple-word spaces, coloured bonus squares that can only be used once each game, then lose their power if the letters are used again.

Our "board" is 17-by-17 and has a simpler to understand pattern of coloured bonus squares, which retain their power even when the letter on that square is used a second or even a third time. You should be able to determine the pattern of our bonus squares by studying our board. For example, if you were to number the rows and columns from zero to sixteen:

  • the thirteen triple-word squares are at the nine intersections of rows and columns 0, 8 and 16 and at the four intersections of rows and columns 4 and 12.
  • the sixteen double-word squares are at the intersections of rows/columns 2, 6, 10 and 14.
  • the twelve double-letter squares are halfway between the triple-word squares in any row or column that contains triple-word squares.
  • the thirty-two triple-letter squares are in any squares on the main diagonals or on the half-diagonals (diamond pattern) that are not already filled by D, T or 2.
We realize that the colors of the board might be hard for some eyes to distinguish, so the board is repeated below as an HTML table.
T       2       T       2       T
  3           3   3           3  
    D       D       D       D    
      3   3           3   3      
2       T       2       T       2
      3   3           3   3      
    D       D       D       D    
  3           3   3           3  
T       2       T       2       T
  3           3   3           3  
    D       D       D       D    
      3   3           3   3      
2       T       2       T       2
      3   3           3   3      
    D       D       D       D    
  3           3   3           3  
T       2       T       2       T

  • Any letters in a word that are placed onto blank squares are scored at their individual point value as defined in the table below.
  • 2 stands for double-letter. Any letter placed onto a double-letter square, or which was already on that bonus square, has its point value doubled before the word score is summed.
  • 3 stands for triple-letter. Any letter placed onto a triple-letter square, or which was already on that bonus square, has its point value tripled before the word score is summed.
  • Sum the point values of all letters in the word, whether single, doubled or tripled, to get the standard word score.
  • D stands for double-word. The standard word score of any word that includes a letter covering such a square is doubled. If a word covers two double-word squares, the value of that word is quadrupled (doubled twice). If a word covers three double-word squares, the value of that word is octupled (doubled thrice).
  • T stands for triple-word. The standard word score of any word that includes a letter covering such a square is tripled. If a word covers two triple-word squares, the value of that word is tripled twice.
  • Unlike the Milton Bradley's Scrabble, the bonus squares in our version of the game affect every word formed with letters on those squares, not just the first word formed with letters on those spaces.
  • To determine the score for a word,
    1. Look up the point value of each letter in the word.
    2. Double the point value of each letter, if any, that is on a double-letter square.
    3. Triple the point value of each letter, if any, that is on a triple-letter square.
    4. Add up the point values of all letters in the word.
    5. Double the word score as many times as there are double-word squares covered by letters in the word.
    6. Triple the word score as many times as there are triple-word squares covered by letters in the word.
    7. Add bonus score, if any, to that score. Bonus scores are not doubled or tripled.
      • 50 point bonus if you play 7 letters in one move to create a word of 7 or more letters.
      • 100 point bonus if you play 8 letters in one move to create a word of 8 or more letters.
      • If you have any questions about scoring, you may e-mail an example of how your program scores a particular word with details of what squares each letter is on, to the judges at Or better yet send your question to the programming mailing list, where not only will John and Chris see the question, but others might see it and answer your question even quicker.
  • Remember that doubling or tripling of letters or words, applies to all such letters in a word, even if you had previously used the power of that square in a prior word. Another difference between our game and most similar games is that you choose how many tiles to draw in one move, but you may never have more than eight tiles in your "hand". You may have as few as one, or as many as eight, letters in your hand.
Each letter has a point value that was determined by studying the dictionary files. We counted how many there are of each letter in our dictionary, then used those counts to determine how many of each letter we would include in the "game" and how many points each letter would be worth. Your program does not need to know how many of each letter is in the dictionary or how many of each "tile" are in the three drawing piles. The quantities are presented just in case you are interested. However, your program will need to know how much each letter is worth when used in one or more words.

Letter Frequency Quantity Point Value
Q 1280 1 9
J 1560 1 9
X 2093 2 8
Z 2789 2 8
V 6630 3 8
W 7643 3 7
K 8470 4 7
F 10177 4 7
Y 10454 5 6
B 14517 5 6
H 16013 6 6
M 18679 6 5
P 19352 7 5
G 23306 7 5
U 24113 8 4
C 24352 8 4
D 28472 9 4
L 36518 9 3
T 40175 10 3
O 40237 11 3
N 42939 12 2
R 49151 13 2
A 52152 14 2
I 55594 15 1
S 66684 16 1
E 81239 17 1

Making your Moves

There are three lines of data in the input file (the three files are identical, so it doesn't matter which file you choose to use). Each line of data is a "pile" of letters that you may draw from during your move. You must draw however many tiles you need from the beginning of only one line of data at a time. In other words, if you need eight tiles, you must draw all eight tiles from the left end of one pile. If a pile contains fewer than eight letters, you may only draw up to that number of letters from that pile.


At the start of each move, your program should draw at least one, but no more than eight letters, from the left end of one row of data only. These letters, plus any letters left over after a prior move, make your new "hand". After your draw, your hand must contain eight or fewer letters. If you already have one or more letters in your hand after the previous move, you are not required to draw new letters. In some cases, you may be able to play a new word with letters already in your hand. But even if you don't need new letters that round, you might prefer to draw a few letters just for the advantage of being able to draw a few letters from one pile this round, and a few from another pile on the next round.

STEP TWO (optional)

Your program may, after the draw, optionally, discard one or more of the letters that are in your hand, whether just drawn or left in your hand after the previous move. The single point value of all letters discarded must be deducted from the total score so far. Any letters discarded may not be used later in the game, they are discarded and are no longer available.

If you discard one or more letters from your hand, you may, if you wish, go back to STEP ONE, or you may continue forward to STEP THREE. If you discard all of the letters from your hand, you must go back to STEP ONE. If you do repeat STEP ONE after a STEP TWO discard, you do not necessarily need to draw from the same pile again. You may choose any of the three piles for the next "draw" as long as all letters drawn in the new "draw" are from the same pile.


Use one or more letters from your hand to form one new word (of two or more letters) in any one row or column. After the first word, all subsequent words must either extend, touch, or cross a word already on the board. All words must read from left-to-right or from top-to-bottom, just like in most word board games. Words may not be placed backward. When you write the individual words to the output file, please identify the row or column that the word is placed into, using some logical method that makes sense to you.


Score the word, and any other words that may have been created in the same move by the methods explained below. You may NOT score one letter words at any time. Any two or more letters that touch after any move must be valid words.

Keep repeating STEP ONE through STEP FOUR until you choose to stop, which will usually be when you have no valid moves left.

Your program may, of course, keep playing the game over and over again, until it finds the best possible answer (within the time limit). At that time, your program should write that best answer along with all the directions to create that answer, with scores for each word created, formed, and for each set of letters discarded, to the output file.


If it is the first move, your program should create a word from two or more of the letters in your "hand" to create one word. That word must be placed horizontally into one row or vertically into one column on the board. You may place that first word into any one row or column on the board.

If this is a second or later move, you must create a new word on the board that either extends a previous word, crosses one or more previous words, or both. All letters placed on the board in one move must be placed in one column or one row on the board, and must form one complete word. At least one letter in your new word must touch at least one letter that is already on the board, either by adding to an existing word, or crossing an existing word, or both. If your move results in two or more letters touching in any other direction, those touching letters must also make valid words as listed in our dictionary.

You may repeat words if it is beneficial to you to do so. We will not require the words to be all different. (And if I miss one of the sentences that said otherwise earlier, this sentence takes priority because I'm going back to make some of the directions simpler, and because I realized that it would be easy to create the same two-letter word twice with the play of one letter.)

You can make a new word by adding one or more letters to an existing word on the board. For example, assuming that each of these words are in our dictionary, assuming that the draw piles are in the right order to allow these moves, and ignoring the bonus squares for the moment, your first moves could be:

  1. Play A & N to make the word AN for 6 points
  2. Add the letters P & L to make the word PLAN for 14 points
  3. Add the letter E to make PLANE for 15 points
  4. Add the letters A, I & R to make AIRPLANE for 20 points

You can make a new word by using one or more existing letters on the board, and adding one or more letters from your hand to make one new word that appears entirely in one column or one row on the board. If such a word placement results in other words being created perpendicularly to the word you just created, you must also score those words. All groups of two or more touching letters in any row or column must make a valid word after every move.

For example, based on the same assumptions above, if the word CAT is already in the middle row of your board, you could:

  1. play N below A to make AN for 6 points
  2. play O to the right of N to form NO for 5 points and score TO for 6 points
  3. play the letter T, H, I, R & D with the T to the right of the word NO so that you spell THIRD spelling down and NOT spelling across. Score both words.

It is very important that you remember ... after each of your moves, all touching letters must form valid words. Any solution that results in an invalid word being created at any stage in the output will be disqualified.

If you play seven letters from your hand to create a new word of seven or more letters on the board, you score 50 bonus points (even if there is a letter left over in your hand).

If you play eight letters from your hand to create a new word of eight or more letters, you score 100 bonus points.

These bonus numbers are in addition to the scores made by making all words made on that move. This bonus score is not doubled or tripled, even if those spaces are covered by letters in that word.


The first line of your output should be the total score achieved by your program (just write the number).

The next part of your output file should display your finished 17-by-17 Crossed Word board in whatever format you choose to write it. Please use periods or similar characters to show blank spaces on your board. You only need to provide the actual letters and blanks. You do not need to show the various bonus spaces.

The third part (optional) is the explanation that you feel a stranger would need to understand the rest of the document.

Other than the first two output requirements, the rest of our suggestions for output are merely meant to be general guidelines. You may adapt our suggestions to create any explanatory technique of your choice, just as long as your output file contains all directions that you think would be required for a stranger to read the file and understand what your program did. For example, you don't need to output the entire board after each move if you define a system in advance for showing each move that you make.

We are not requiring a specific output format because we don't want to make the task more complicated than it already is. If someone in your family can understand your output file without your explaining it to them, we should be able to understand your output file.

You could show you are drawing letters by preceding the letters that you draw with the number of the pool (1, 2 or 3) that you draw from; or you could simply write it out in English:

      Draw 'ATC' from pool 2

Show that you are discarding letters by preceding the letters with a minus sign; and show the loss of score; or as above, explain it in words of your choice:

      -QX -17
      Discard Q and X and lose 17 points

Show that you are placing a word onto the board by identifying the row or column number where that word is being created, followed by the word and the number of points scored; or just use a method of your choice to explain it:

      R8 - CAT = 9
      Put "CAT" in eighth row for 9 points.
      Play "CAT" horizontally in eighth row at fifth column for 9 points.
      Play CAT in column G row 8 going across
      {G8a} CAT=9

Show any extra words that were formed on the same move by putting those words in parentheses, followed by the score; or by any method of your choice:

      (NO) = 5
      This move also formed the word "NO" for 5 points

As mentioned above, you may choose whether you wish to show the board after each move, or not. If you feel that your system of explanation makes the extra boards unnecessary, you do not have to include them. If you choose to include them, can use use whatever method you choose. As far as defining where you place each word, you may just identify the row or column that the word was placed into, or you could even create a "spreadsheet-like" method of identifying rows and columns, and give the (x,y) coordinate of the first space in the new word along with (a) for across or (d) for down. As mentioned above, you may use any system that you believe will be understandable to a total stranger. If it is easier, you may output the entire board after each move, using . to show empty squares.

You do not have to identify specific bonus squares used, unless you wish to. It is sufficient if you simply account for those bonuses when you give the total. For example, if you scored a triple word on CAT, it would be enough to simply identify that you got 12 points for CAT in that location.

Again, you may use any method to explain your moves as long as it makes sense to you, and as long as you think it will make sense to a stranger without verbal explanation from you, but please use the first few lines of your output file to explain it.

We are trying to be flexible on the output format because we don't want to confuse things by being too specific. Instead of trying to automate the judging this month, we will actually manually verify each answer, starting with the entrant whose program claims to have found the largest score, and continuing down until we find a verified winner that has a higher score than any other claimed score (I hope that makes sense). Once we identify the winner, we reserve the right to simply give credit to all other entrants as having their unverified scores. All ties will be broken by applying the standard formula, which has been rewritten slightly in order to deemphasize programming time.

Since we are going to manually verify the output files, we ask that you manually verify your sample output file. By doing so, you might find some mistakes that you might have missed otherwise. Since we are deemphasizing the programming time, please don't be in a hurry to submit. Be sure to check your output file for errors before you submit. In fact, we recommend that you manually test your output file for validity before submission.

Other Mundane Details

You now have enough detail to get you started, but as usual, there are some mundane details discussed below. Some are well known to past entrants, but a quick review never hurts, especially for newer entrants.

Remember, one difference between our contests and some of the other contests is the fact that our regular scoring formula might allow a person who didn't have the fastest program to still win in some of our contests. However, other months, a program's SPEED and a programmer's INTUITION might be more of a consideration.

Entrant programs will be ranked first by the answer found, ranked according to the sum total of the scores of all moves during the game.

Remaining ties, if any, will be broken by the standard ranking formula we almost always use (see below). As always, we reserve the right not to compare all programs if it will not make a difference in first place.

Other details and information:

Time Limits

There is a time limit for program execution on your system and on our system. This time limit will be stored as the only item of data in a file named seconds.txt on our testing system. This number is the maximum number of seconds (60 seconds = one minute) that your program is allowed to run on our testing system (a 450 mhz Pentium system running Windows or Linux). This file will be stored in the same directory as the input files and your program file when we execute your program.

On your system, use a whole number time limit which you estimate to be equivalent to 300 seconds on our testing system. If you guess your system to be three times as slow as ours, use a number that is three times as high during your tests.

Check your program's elapsed time as often as required to avoid exceeding the time limit. If you are checking the time limit every 50 milliseconds, then your program should terminate if it detects that there is less than 50 milliseconds left before the time limit will expire. You may, of course, end in less than the required time, in the hopes that it will give you a better position in the final rating formula.

How to evaluate elapsed time during program execution?

There is discussion in the Mailing List archive about how to calculate elapsed time. Just read some of the messages that were posted during prior contests, or you may ask that question on the Mailing List itself, and someone will answer. (It is our experience that we have a fantastic set of contestants who always like to help each other).
Test your program for what you estimate to be equivalent to 300 seconds on our official testing system, which is a 450 mhz Pentium system running Windows 98 and Red Hat Linux 6.1. Your program should automatically write the BEST answer and terminate before the time limit is reached.

One submission per person! Why?

The reason for this rule is best described by this quote that was e-mailed from one judge to another during one of the early contests:

"Part of the dilemma of the contest is working out when to submit your single entry possible for the month."

In other words, as with prior contests, you must decide whether programming speed is more important than thoroughness, etc. If you believe that later in the week, you can tweak three extra answers out during your period of execution, you should decide which will help you most, the faster speed, or the faster programming. Sometimes it can make a difference in the standings.

Program Input:

Program input will be stored in the files defined in the contest description. The filenames will be all in lower case. Required files will be in the same directory as your program executable when officially tested. Data files, when required, will be specified in the challenge description. When your program executes, it will read the input from these files and solve the challenge. When we provide more than one copy of the same input file, you may decide which file to use for input.


We have not supplied sample input this month. Please manually verify your output file on your first tests to see if your program logic works logically.

The official input files are compressed. Download the zip file and use your uncompression utility to extract the required files.

Be sure that all files reside in the same directory as your executable.

Screen Display

The screen's display should be limited to one, or a few, lines of output. Before your program ends execution, it may display the best answer found on the video screen, and, if you wish, it may display the total time that your program executed. However, this time display is optional as we will use an independent timing routine to generate your total execution time on our system, so you do not need to display elapsed time.

It is VERY important that your program not exceed the time limit specified, except as described in the contest description.

If your program might run longer than 60 seconds, we ask that, at least once per minute or more often if you prefer, your screen display some kind of activity indicator, so that we know the computer has not locked up. For example, when appropriate, you might display the elapsed time with the best answer found so far.

See rule 11 in the full rules document for more information.

Do not clear the screen during program execution. If we run your program three times, we want to see all three execution results on the screen after the third program exits.

Why do you repeat yourself so much?

Every month, someone does not notice something in our contest description. We let ourselves repeat different parts of the description in the hopes that it will reduce the errors that might be made in entrant submissions.

Input and Output:

You may NOT alter the contents or the name of the input file, except to correct obvious errors. For example, if we accidentally upload a file as "INPUT.TXT", we would obviously expect that you would rename the file to "input.txt" (yes, we did that one month). Your program must be able to run on our input file in its given form under its given name.

Be sure to test your program. Manually check your answers, when appropriate. You may not resubmit later if you find mistakes in an earlier version of the output, so please be careful.

Be sure that your program submits answers in the format that is described in the contest description.

Since your program must provide an answer before the time limit expires, be sure to write your answer to the output file before your program terminates.

  • Your output file should be stored in the default directory, the same directory that contains your executable program, the input file and the timing file. Though we doubt that temporary files will be needed, you may use one temporary file, which, if used, should be in the default directory.
  • Your output file should be named "output.txt" (lower case)
  • Your output file should contain the best answer as defined by this document. one line to give the best total score, followed by the final crossed word grid, followed by the directions, step by step, to get that answer.
  • Your system's standard "End of Line" delimiter should be used after each line of output. If your system only uses the <LF> (line feed = decimal 010 = hex &h0A) to end each line of output, and if it will not delay your entry or reduce your execution speed to do so, please use the <CR> instead (Carriage Return = decimal 013 = hex &h0D).

Rating the entrant programs

  1. We will run all entrant programs for the same length of time on our official "final" input data, except for any programs that it is obvious that we do not need to run. (For example, if the provided output file has major errors, or if we know that a program has no chance of coming out high in the rankings based on the entrant's entry information.)
  2. We will manually verify as many entrant output files as necessary to choose first place, or the first few places. After first place is definitely verified, we may choose to use lower entrant scores as reported by the computer programs, without further verification.
  3. Any tied entrants will be ranked by the formula that is explained below.

Special Notes:

  • Entrants are reminded that they are required to use standard components of the standard versions of their compilers, like include files that were delivered as part of the compiler when it was released. No files or other "include" components that came from non-standard outside sources may be used, because other programmers with the same standard compiler would not have access to those components. Even if an include file is available free to all from an alternate source, you may not use it unless it is packaged WITH your compiler. Otherwise, we'd have to assume that some entrants would not have that access.
  • Please make sure that your program releases all memory and resources back to the operating system when your program is done running. We run a similar timing program twice to check that the system is clear.


Entrant programs will be disqualified:

  • if program execution time exceeds the execution time limit stored in "seconds.txt" file.
  • if output file is not provided as specified or is not understandable.
  • if an acceptable escape method is not specified on the web entry form. Acceptable escape methods include ALT+F4 or CTRL+BREAK, but you may specify another. The method MUST be listed on the web entry form. As long as your program terminates on time, we won't need it, but we have had programs in the past that kept going, and going, and going, so we will continue to ask for an escape valve, even when we do not plan to use it. An escape method must return control of the system to the computer operating system within two seconds after the key is pressed. (In other words, it does not have to react instantaneously, but should react as soon as possible. If an escape method is not specified on the entry form, the entrant's program will not be judged or executed.
  • if your program does not release all system resources before returning control to the operating system. (We will run an identical program before and after execution to test operation speed, before and after).

The official Rating Formula
for breaking ties

= (Your programming time / fastest programming time / 5)
+ (Your execution time / fastest execution time)
+ (Your program size / smallest program size)

Note that we are dividing the first index by 5, in order to make the other two index elements more important.

NOTE: This month, we are calculating "program size" to be the size of your EXECUTABLE CODE.

[ Back to Top ]

Entry Form

Please fill out the form below to enter and check here for contest rules.

All fields are required except those marked (optional)

(After you submit your entry, you might want to make a copy of the next page, and e-mail that copy to yourself for your records.

First and Last Name:

State or Province (if applicable) AND Country:
(if possible, please try to limit this descriptor to two or three words)

E-mail Address:

Permissions: By entering this contest, you are giving us permission to:
  • post your e-mail address on our results page, and/or
  • post your source code on, by our choice.

Size of Executable Code: bytes
(note that this month, we are asking for the size of your EXECUTABLE CODE, the code that is run in order to get the answers. If we also have to run a second program in order to make your program run, add the size of that program to the size of your submitted executable. For example, if we have to run JAVA.EXE in order to execute your class file, your executable size will be the sum of those two sizes.)

Programming Language & version:

Your operating system, computer speed and version #:
(Windows 95, 98, NT, 2000, Red Hat Linux 5, 6.1, Unix, etc.)

Your Best Score:
including all bonuses added in

Escape Valve:
(a required keystroke, such as CTRL+BREAK, that will let us abort your program without having to restart the computer ... if you program a special key, you can write an output file before exiting.

Program Output (from "output.txt"):
If your output file exceeds 10K in size, submit the first 10,000 bytes, but don't truncate the last line. If you are worried that your browser might break long lines, or if the file is excessively large, e-mail a copy of your output.txt file to <> and to <> (archive address).

Source Code:

Submit your executable:

  1. Click here and e-mail your executable code to
    Use this subject: MSOworld10 [your e-address] [windows/linux/dos/mac/???]
    Click here to send a second copy to our archive address. (This is just in case there might be a mail delay at one address, we will still get it at the other address).
  2. Make sure that your program is named as described below.
  3. Attach your executable file to the message, or if you cannot send attached files, convert your file to BASE64 and copy it into the message area of your message.
  4. Send your e-mail to with a carbon copy to

Two VERY IMPORTANT REMINDERS about executable files

  • You must e-mail your executable file BEFORE you click SUBMIT below (both e-mail and entry are date stamped by the MSO mail server).
  • your executable file should be named as described in the rules with YOUR actual e-mail address as part of the name.
    • Windows executable: your-e-address@domain.exe
    • Windows command:
    • Linux: your-e-address@domain.linux
    • Other: your-e-address@domain.other

      If your program is executed by any other method other than simply typing the name of the program, be sure to supply directions with your attached file.

Comments about this contest and suggestions for future contests: (optional, but deeply appreciated)
Also, your commented source code may be included here if you wish.

[ Back to Top ]