Winner Claus Still (FSec4)

Darkness 2003-11-05 10:00:00 UTC
Twilight 2003-11-06 10:00:00 UTC
Daylight 2003-11-07 10:00:00 UTC
Finish 2003-11-12 10:00:00 UTC

MATLAB Golf: Infection - Rules


The objective in the game of golf is to reach the hole with the fewest strokes. In MATLAB golf, the objective is to go from one variable (the tee) to another (the hole) with the fewest keystrokes.

Example: How many positive elements in vector a?

One approach (score = 19):
A better approach (score = 10):

The winner is the contestant who solves the problem with the fewest characters.


An entry's score is determined by counting the total number of characters. The shortest entry that passes the test suite wins. If two entries use the same number of characters, the first one submitted is the winner. There are three important exceptions to the character-counting rule. You are not penalized for using spaces, newlines, or semicolons (this corresponds to ASCII 10, 13, 32, and 59). Because of this, we encourage you to make liberal use of them in order to keep your code as readable as possible.

Notice that the following pieces of code both do the same thing and have the same score. Please use the second approach.

b=ones(a);b(:)=4;if numel(b)>10 c=10;else c=0;end
b = ones(a);
b(:) = 4;
if numel(b) > 10
    c = 10;
    c = 0;

Ranking is "king of the hill" style. In order to move into first place, your entry must be shorter than the current leader. If it is, your entry takes over first place. The entry that was bumped out of first place moves into second place, the entry that was in second place moves into third, and so on.

Even if your entry is longer than the current leader, we encourage you to submit it if your approach is novel. The diversity adds to the fun, and it may provide inspiration to someone else who can then make further improvements. In addition, we reserve the right to give out extra prizes for originality when the contest has closed, so your quirky but slightly longer entry may bring you fame.

Warning! MATLAB Golf can lead to obfuscated code and may cause headaches and dizziness. Conscientious coders may want to avoid staring at contest code for prolonged periods of time. The authors of this contest make no claims about the merits of potentially dangerous coding tricks revealed herein.

The test suites represent the final word: if it passes the test suite, then it's a legal entry, even if a more comprehensive test suite might plausibly have failed the same entry.

Keep in mind that MATLAB Golf is a game.

Execution Time

There is no penalty for execution time, but an entry can't take more than a couple minutes to run through our test suite. This shouldn't be an issue for the complexity of the problems in this contest.

Collaboration and editing existing entries

Once an entry has been submitted, it cannot be changed. However, any entry can be viewed, edited, and resubmitted as a new entry. You are free to view and modify any entries in the queue. The contest server maintains a history for each modified entry. If your modification of an existing entry improves its score, then you are the "author" for the purpose of determining the winners of this contest. We encourage you to examine and optimize existing entries.

We also encourage you to discuss your solutions and strategies with others. You can do this by posting to the comp.soft-sys.matlab thread that we've started from our newsreader (see the link for "Message board" on the right).

Fine Print

The allowable functions are those contained in the basic MATLAB package available in $MATLAB/toolbox/matlab, where $MATLAB is the root MATLAB directory. Functions from other toolboxes will not be available. Entries will be tested against MATLAB version 6.5 (R13).

The following are prohibited:

    Java commands or object creation
    eval, feval, etc.
    Shell escape such as !, dos, unix
    Handle Graphics commands
    ActiveX commands
    File I/O commands
    Debugging commands
    Printing commands
    Simulink commands
    Benchmark commands such as tic, toc, and flops

Challenge: Infection

A computer virus makes its way through the firewall and infects the computer of exactly one person at a company. The next hour, the virus spreads to all the people who share at least one letter in their names (no names have spaces) with the infected person. Every hour the virus spreads in a similar way, infecting people who have common letters with those already infected. After three hours, which employees will be infected? The virus is case-insensitive.

Given a list of people employed in a company

a = {'Anne', 'Bob', 'Alan', 'Michael', 'Lucy', 'Gus'}

and the index to the first infected person

b = 1

then Anne (who is a{1}) starts off with the virus, and she gives it to Alan and Michael after an hour. An hour later they both give the virus to Lucy, and an hour after that, she gives it to Gus. So the complete list of infected employees after three hours is

c = [ 1 3 4 5 6 ]

Your answer c must be sorted in numerically ascending order. If b had been 2 in the case above, the answer would have been

c = [ 2 ]

Bob gets the disease, but does not pass it along to anyone else, since the letters B and O do not appear in any of the other names.

About named visibility periods

Contests are divided into segments where some or all of the scores and code may be hidden for some users. Here are the segments for this contest:

  • Darkness - You can't see the code or scores for any of the entries.
  • Twilight - You can see scores but no code.
  • Daylight - You can see scores and code for all entries.
  • Finish - Contest end time.