Difference between revisions of "Secret Code"

From CompSciWiki
Jump to: navigation, search
Line 25: Line 25:
 
|SideSection=
 
|SideSection=
 
[[Image:Wiki_array02.jpg|center]]
 
[[Image:Wiki_array02.jpg|center]]
<BR>
 
  
 
|Solution=
 
|Solution=

Revision as of 12:47, 6 April 2010

Back to the Program-A-Day homepage

Problem

You have just been given access to a top secret database, however the password has been sent to you by encrypting it in the following string of text:

xmyaartikarosgelptwtjvbldebixgbieivbtoieewt

In order to decipher the password, you will need to:

1) Extract every fourth letter of the string
2) Reverse the order of the extracted letters
3) Shift each letter to the letter three letters ahead in the alphabet
4) Set the cases of the extracted letters so that they alternate between uppercase and lowercase, with the first letter being uppercase.

The solution will require the following components:
1) Three string variables:
- one called "message" to store the string being deciphered
- one called "s" to store the resulting string after extracting every fourth letter
- one called "password" to store the results after Steps 2, 3, and 4
2) The length(), charAt(), and toUpperCase() methods
3) A counter variable
4) String concatenation
5) The mod operator (%)

 

String Methods & Debugging

Wiki array02.jpg

Solution

1. The first step is to declare and initialize the necessary variables. Counter is initialized to 3, which is the index of the fourth letter. This is because we start numbering the string indices at 0, not 1.

String message = "xmyaartikarosgelptwtjvbldebixgbieivbtoieewt";
String s = "";
String password = "";
int counter = 3;

2. The second step is to extract every fourth letter and append it to s using the string concatenation operation. We then increment the counter by 4 to advance to the next letter that we need. This is repeated until the end of the message is reached.

while(counter < message.length)
{
    s += message.charAt(counter);
    counter += 4;
}

3. The counter now needs to be set to the last char in the string, for the reversal stage.

counter = s.length - 1;

4. The next step is to move through the chars in s, in reverse order, and store the chars in forward order in "password".

while(counter >= 0)
{
    password += s.charAt(counter);
    counter--;
}

5. The final section combines the last two steps: shifting each letter ahead by three letters, and alternating the cases between upper and lower case. Counter will already be set to 0 from the previous step, which is what we need. If the counter is even, we set the letter to uppercase, otherwise we leave it in lowercase.

while(counter < password.length)
{
    password(counter) += 3;

    if(counter % 2 == 0)
    {
	password.charAt(counter).toUpperCase();
    }
    counter++;
}

6. Now that we have deciphered the password, display it in a message dialog so we can see what it is. The final output (i.e. the password) should be "HeLlOwOrLd".

JOptionPane.showMessageDialog("The password is: " + password);

Code

Solution Code

Back to the Program-A-Day homepage