CCC '04 J4 - Simple Encryption

View as PDF

Points: 5
Time limit: 2.0s
Memory limit: 64M

Problem type
Allowed languages
Ada, Assembly, Awk, Brain****, C, C#, C++, COBOL, CommonLisp, D, Dart, F#, Forth, Fortran, Go, Groovy, Haskell, Intercal, Java, JS, Kotlin, Lisp, Lua, Nim, ObjC, OCaml, Octave, Pascal, Perl, PHP, Pike, Prolog, Python, Racket, Ruby, Rust, Scala, Scheme, Sed, Swift, TCL, Text, Turing, VB, Zig
Canadian Computing Competition: 2004 Stage 1, Junior #4

One of the simplest ways of coding a message is to do a letter shift.

For example, if you shift the letters in the original message by then A in your original message becomes F in the coded message. (B G, C H, …, T Y, U Z, V A, …, Z E). To decode the message, you simply need to shift back by the same number.

A slightly trickier encryption uses a keyword to determine the amount of the shift. Suppose you were using a keyword ACT. To encode the message, you take the original message, remove everything but the alphabetic characters, and form the message into a block that has the same width as the keyword. Here is a sample message to encrypt:

BANANA & PEEL

The blocked version of the message is shown below with the keyword ACT as a header.

 A C T B A N A N A P E E L

Now, the message is encoded using a letter shift. However, this time it is not a uniform shift, it will depend upon the keyword letter at the top of the column. If the letter at the top of the column is an A, then the letters in that column are not shifted. If the letter is a B, then the letter in that column shift by , and so on. In the example, the letters in the third column will shift by since the T is the th letter of the alphabet.

The encoded message is:

 A C T B C G A P T P G X L

You will write a program that will accept a keyword and a string to be encoded. The keyword will never have more than characters. The message will always be given in all upper case characters.

Input Specification

The first line of input consists of the keyword. The second line of the input is the message to be encoded. The keyword length will never exceed characters. The total message length also will never exceed characters.

Output Specification

Output the encoded message on a single line.

Sample Input 1

ACT
BANANA & PEEL

Sample Output 1

BCGAPTPGXL

Sample Input 2

TRICKY
I LOVE PROGRAMMING!

Sample Output 2

BCWXONKFOTKKFZVI

CCC problem statements in large part from the PEG OJ

• commented on July 7, 2020, 12:41 p.m. edit 2

The letter-number mappings, as a Python dictionary:

{1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E', 6: 'F', 7: 'G', 8: 'H', 9: 'I', 10: 'J', 11: 'K', 12: 'L', 13: 'M', 14: 'N', 15: 'O', 16: 'P', 17: 'Q', 18: 'R', 19: 'S', 20: 'T', 21: 'U', 22: 'V', 23: 'W', 24: 'X', 25: 'Y', 26: 'Z', 'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9, 'J': 10, 'K': 11, 'L': 12, 'M': 13, 'N': 14, 'O': 15, 'P': 16, 'Q': 17, 'R': 18, 'S': 19, 'T': 20, 'U': 21, 'V': 22, 'W': 23, 'X': 24, 'Y': 25, 'Z': 26}
• commented on April 29, 2020, 8:17 p.m.

if i have completed this problem, how can i check other people's submissions?

• commented on April 30, 2020, 5:43 p.m.

Click on all submissions or best submissions. Choose one, click view and then view source.

• commented on Jan. 10, 2020, 2:11 p.m.

Remember ascii values are a thing.

• commented on June 1, 2016, 9:21 p.m.

If the letter at the top of the column is an "A", the the letters in that column are not shifted.

(As pointed out by d on his profile page)

• commented on June 1, 2016, 9:50 p.m.

Thank you for noticing, and thanks to d as well. The problem description has been fixed.

remove everthing but the alphabetic characters

• commented on Jan. 2, 2016, 2:28 a.m.

The sample input contains a blank line between the two lines of input; the actual input does not.

• commented on Jan. 2, 2016, 12:10 p.m.

Thank you for noticing, sample inputs have been fixed.