Winner Nicke (Revolution IV)

Darkness 2003-11-06 15:00:00 UTC
 
Twilight 2003-11-07 15:00:00 UTC
 
Daylight 2003-11-08 15:00:00 UTC
 
Finish 2003-11-13 15:00:00 UTC

MATLAB Golf: Snake - Rules

Introduction

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):
b=length(find(a>0))
A better approach (score = 10):
b=sum(a>0)

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

Scoring

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;
else
    c = 0;
end

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:

    MEX-files
    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: Snake

A "snake" is defined as a sequence of adjacent consecutively increasing integers (incrementing by one) embedded in and twisting through a larger matrix. The sequence can turn north, south, east, or west, but not diagonally. A snake sequence may also be straight.

Given the matrix a, return the longest snake sequence in the variable b. a is an array containing positive integers. b is a column vector containing the linear index of this sequence, beginning with the smallest number in the snake sequence. For example, when

a = [ 14    16    13
      15    15    14
      16    10     9]

create

b = [ 7
      8
      5
      4 ]

Another example is

a = [  1     2     3
       4     7     4
       5     6     5]
b = [ 1
      4
      7
      8
      9
      6
      5 ]

Each matrix will have exactly one snake sequence longer than all others. In addition, a will never be a vector. That is, the smallest dimension of a will always be greater than one.

Note: Linear (or absolute) indexing is a way to index into a 2-D matrix with one number. Linear indexing is column-oriented, so if

 
a = [ 14    16    13
      15    15    14
      16    10     9]
then a(1) is 14, a(4) is 16 and a(8) is 14. To learn more about linear indexing, read this MATLAB Digest article.

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.