Introduction to Programming Machine Problem III from Spring 1993

### Background

Caesar cyphers are only one form of simple substitution cypher. More generally, substitution cyphers involve replacing any letter with any other letter. For example, consider the following letter substitution table:

```   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
ASjBTkCUlDVmEWnFXoGYpHZqIarJbsKctLduMevNfwOgxPhyQizR

The line below is this line as encrypted using the table above.
YLK edNK JKefQ dx PLdx edNK rx KNbgzwPKs hxdNt PLK PrJeK rJfyK.
```
To encrypt a letter, find it in the top row of the above table and use the corresponding letter from the bottom row. To decrypt a letter, find it in the bottom row and use the corresponding letter from the top row.

### Assignment

Write a program which performs a general substitution cypher. Your program should read the details of the substitution it is to make from a file called key, but other than that, it should operate in the same way as your solution to machine problem II. That is, it should read text from standard input, make the substitutions dictated by the key file, and write the result to standard output.

The Key file should contain exactly two lines of text in the format shown above. The first line should list the characters that are to be changed, and the second line should list the character to be substituted for each of the changed characters. Any character not listed in the first line should remain unchanged.

The first line of the key file should not list any character more than once, but if it does, the substitution given for the last occurance of the duplicated character should be the one that counts. If you encrypt a file, then change the order of the two lines in the key file, your program will then be set up to decrypt the encrypted file!

The file crypt contains English text that was encrypted with the key file in key. Once you compile your program, you should be able to use the information in key to make your own key for decrypting the contents of crypt.