The story this summer is those old style letter substitution puzzles like:
S E N D
+ M O R E
=========
M O N E Y
The task is to figure out what digit each of the letters stands for.
In the above example, if the letter "O" stands for zero, the letter
"M" stands for one, "Y" for two, "E" for 5, "N" for 6, "D" for 7,
"R" for 8, and "S" for 9 - then the substitutions make a valid
addition problem with a correct answer. A solution is given by:
SEND 9567 letter = S E N D M O R Y
+MORE +1085 digit = 9 5 6 7 1 0 8 2
===== =====
MONEY 10652
but you knew all this ... you asked for the details!!!! read on ....
===============================================================================
DEADLINE IS 11:59PM on September 30, 1994 ... give or take a time zone!
===============================================================================
1. Your job is to write a program that takes three character strings as
arguments. For example:
progname SEND MORE MONEY
The program should print out three numbers which result from making
digit substitutions for the letters such that the sum of the first
two numbers equals the third number. For example, the output of:
9567 1085 10652
would be a valid solution for the sample problem. There must be the same
number of digits output as there are letters in the three arguments.
2. Your program will be run ten times, with ten different sets of three
arguments - each set representing a valid addition problem. Scoring
will be conducted as follows:
a) one point for each valid solution (of the ten possible solutions)
that is found. (0 to 10 points)
b) in the event of a tie (likely), the first tiebreaker is computed
by adding the ten sums from the ten problems - highest total
wins. (This rewards large sums where a problem may have more
than one solution. - the "sum" is the third argument)
c) if still tied (likely), the smallest executable wins. Size of the
executable is determined by an "ls -l" of the executable -
which must be contained in a single file. (note that comment
lines will be removed from shell entries before the computation
)
d) if still tied .... nah, no chance!
IMPORTANT: There IS a time constraint - the time constraint will be
applied to the SYSTEM TEST problems (one minute per problem). When
I run the finals, I will apply a less stringent time constraint and
I will be unlikely to disqualify an entry unless it takes longer
than an hour to complete the ten problems. The intent is to keep
the runtimes "reasonable" - not to disqualify entries!!
3. About the problem:
a) Three character strings will be presented to your program
b) Each string will be composed of upper case (A-Z) letters
c) Each string will be at least one letter long
d) Each string will be 25 or fewer letters long
e) No more than 10 different letters will be used in the three strings
f) The three strings WILL represent a valid addition problem
according to the rules of the puzzle - there is no need
to deal with problems which have no solution.
4. About the answer:
a) Three numbers will be output by your program
b) all numbers are base 10
c) the first number plus the second should equal the third number
d) the numbers should result from the substitution of the digits
(0-9) for the letters in the three problem strings
e) each letter represents a single digit (0-9)
f) each letter represents a different digit (0-9)
g) numbers with leading zeroes are NOT valid substitutions for
any of the three strings
5. About your programming:
a) C is the only compilable language acceptable - K&E C is best
since I don't have an ANSI compiler ... sorry 'bout that!
IMPORTANT: submit early so we can be sure there are no
portability problems!!!
b) if you wish to submit a shell program, Bourne, Korn, and csh are
acceptable ... along with the following /bin tools:
awk bc bdiff cat cmp cp csh cut
dc diff diff3 echo ed egrep expr false
fgrep grep head join ksh line ls more
mv nawk paste rm sdiff sed sh sort
split tail tee tr true uniq wc xargs
PATH will be set such that ONLY these will be available -
man pages available on request - but we're talking pretty
standard tools here. (this approach may suit some of you
because of the third tie-breaker, but please beware of the
time constraint on ths system tests - read on!)
c) Temporary files may be created in /tmp, but MUST be removed
when you are done ... creation of files anywhere else is
strictly prohibited.
6. The system testing ....
a) ship me an entry as soon as possible - you can always submit
another entry if you improve your solution ..
b) on receipt of your entry, I'll run my system test to make sure
your program works ... you'll receive the results and
a weekly standing of how you fared against other entries!
c) here are the system test problems:
SEND MORE MONEY
NO WAY BOB
ABCABCABCABCABCABCABC DEFDEFDEFDEFDEFDEFDEF GHIGHIGHIGHIGHIGHIGHI
THE POTM RULES
FIVE FOUR NINE
they all have at least one solution - trust me!
d) your program must solve these five problems in no more than five
minutes ... I will be reasonable, but will not allow you
to go significantly above five minutes (sys+user time as
measured by timex summed over the five system test executions).
Your time will be provided along with your system test run.
7. SENDING ME YOUR ENTRY - PLEASE USE EMAIL!!!
Please email me the source code to me at:
fah@potm.ffast.att.com (preferred)
attmail!hicinbothem (will forward correctly)
IMPORTANT: Please use the following (or equivalent) lines at the
front of the program you mail to me (this will help immeasurably!):
/* POTM ENTRY: entryname (something clever please! */
/* Your Name: First Last */
/* Your email: log@machine.att.com (or whatever) */
/* compilation instructions (if other than "make entryname") */
NOTE: If you submit a shell program, please include these lines
with a leading "#" and indicate which shell to run it under!
These lines will not be included in your program size count.
IMPORTANT: ENTER EARLY - you will receive weekly standings and
you will resolve any portability issues early. You may improve
your entry at any time by simply sending me another entry - so it
pays to enter earlier!
IMPORTANT: AFTER you mail me an entry, I will run a system test on
it and ship you the results - the system test results comprise the
weekly standings.
IMPORTANT: If you don't hear from me within a few days - it may mean
that the mail got screwed up .... please follow up with an inquiry to
attmail!hicinbothem .... hopefully all the bugs are worked out!
Thanks! Looking forward to your entry. If you have any questions, mail 'em
to me - if I answer them I'll include them in the Frequently Asked Questions
(FAQ) list I circulate with the weekly standings!!!
=Fred