A Programming Challenge in Cryptography

(by Eric Collazo) submitted by:

Duncan Chiu (dchiu@dimacs.rutgers.edu



The Problem
Write a program to decode a string of digits and the character "O"', and print the hidden message.
[Ex. Find the hidden message in 84581248O6096095854123337.]

The Private Key
Roman numerals: I = 12, V = 22, X = 24,
Characters: O = smaller, 9 = greater

The Public Key
Assigned Roman numeral value of the letters of alphabet:
A = I, B = II, C = III, D = IV, ..., Z = XXVI

The Rules
1. The last digit(s) U indicates the number of letters in the message.
[Ex. The last digit in the above example is 7]

2. Count U digits preceding the last digit(s). They are used with the remaining digits.
[Ex. The seven digits are 5412333]

3. The remaining digits are divided into either pairs or triples. The first digit of the triple must be either a "9" or an "O." The total number of pairs and triples should equal to the last digit(s) U.
[Ex. 84 58 12 48 O60 960 958]

4. Match the results from Rule #2 and Rule #3 as follows:
[A] 5 4 1 2 3 3 3
[B]84 58 12 48 O60 960 958

Row [Al indicates the number of Roman numerals in the Private Key whose decimal values form the sum directly below it in row [B].
[Ex. In the first set, the 5 Roman numerals ( X X I I I ) whose decimal values ( 24, 24, 12, 12, 12 ) form the sum 84]
The decoded letter is the Roman numeral value in the Public Key. [Ex. XXIII = W]

5. The first character in the triple is used to determine the configuration of the resulting Roman numeral. It is not used as a part of the sum. A "9" indicates a higher Roman numeral value; an "O", the lower value.
[Ex. In the fifth set, O60 means the lower Roman numeral value formed by adding 3 Private Keys whose decimal value sum is 60:
The 3 Roman numerals whose decimal value ( 24, 24, 12 ) form the sum 60 are X
The "O" means that X X I should be decoded as X I X.] The decoded letter is therefore "S".

The Test
Decode the following messages:
1) 704696084O36O583235236
2) O58O36362224462432311227
3) 60124858O36O60934960O583124232339

Code the following message:
This code is phat

The Challenge
Write a program to encode a message with the given rules. It should be easier.

A Double Challenge
Write a program that allows the change of the Private Keys in encoding a message.

A Triple Challenge
Modify the encoding program that is easier to code with your Private and Public Keys but difficult or almost impossible to decode.