Winner Per Rutquist (PCode)

2003-11-04 16:00:00 UTC

2003-11-05 16:00:00 UTC

2003-11-06 16:00:00 UTC

2003-11-11 16:00:00 UTC

# MATLAB Golf: Encryption - 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
Benchmark commands such as tic, toc, and flops

## Challenge: Encryption

Given a plaintext message a and a code word b, generate the coded message c with a transposition cipher. The plaintext will be lowercase chars with spaces. Spaces should be left untouched. So when

a = 'message text'
b = 'math'

apply the code word to the length of the message and then encode using a simple transposition cipher for each letter in the plaintext as determined by the corresponding letter in the code word. A transposition cipher is a simple rotation and wrap. The "a" cipher maps a -> a, or no change at all. The "b" cipher maps a -> b, b -> c, and so on. The "n" cipher is the equivalent of a rot13 encryption.

plaintext : message text
code word : mathmathmath

m cipher  : yqeemsq fqjf
a cipher  : message text
t cipher  : fxlltzx mxqm
h cipher  : tlzzhnl alea

encoded   : yelzmgx feqa

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.