Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Did an editing pass on the docs to make them clearer to the reader by… #2168

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 9 additions & 11 deletions exercises/practice/crypto-square/.docs/instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,9 @@ Implement the classic method for composing secret messages called a square code.

Given an English text, output the encoded version of that text.

First, the input is normalized: the spaces and punctuation are removed from the English text and the message is down-cased.
First, the input is normalized: the spaces and punctuation are removed from the English text and the message is downcased.

Then, the normalized characters are broken into rows.
These rows can be regarded as forming a rectangle when printed with intervening newlines.

For example, the sentence
For example, the sentence:

```text
"If man was meant to stay on the ground, god would have given us roots."
Expand All @@ -21,16 +18,17 @@ is normalized to:
"ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots"
```

The plaintext should be organized into a rectangle as square as possible.
The size of the rectangle should be decided by the length of the message.
The normalized characters are then broken into rows of the same length, forming a rectangle which is as square as possible.
The size of the rectangle is determined by the length of the message, as well as the rules below.

If `c` is the number of columns and `r` is the number of rows, then for the rectangle `r` x `c` find the smallest possible integer `c` such that:

- `r * c >= length of message`,
- and `c >= r`,
- and `c - r <= 1`.

Our normalized text is 54 characters long, dictating a rectangle with `c = 8` and `r = 7`:
Our normalized text is 54 characters long, dictating a rectangle with `c = 8` and `r = 7`.
Since the split text must form a rectangle, fill any missing characters with spaces, as demonstrated in the last line below:

```text
"ifmanwas"
Expand All @@ -44,20 +42,19 @@ Our normalized text is 54 characters long, dictating a rectangle with `c = 8` an

The coded message is obtained by reading down the columns going left to right.

The message above is coded as:
The message above is encoded as:

```text
"imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau"
```

Output the encoded text in chunks that fill perfect rectangles `(r X c)`, with `c` chunks of `r` length, separated by spaces.
For phrases that are `n` characters short of the perfect rectangle, pad each of the last `n` chunks with a single trailing space.

```text
"imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau "
```

Notice that were we to stack these, we could visually decode the ciphertext back in to the original message:
Notice that if were we to stack these chunks, we could visually decode the ciphertext back in to the original message:

```text
"imtgdvs"
Expand All @@ -69,3 +66,4 @@ Notice that were we to stack these, we could visually decode the ciphertext back
"aohghn "
"sseoau "
```

11 changes: 8 additions & 3 deletions exercises/practice/crypto-square/CryptoSquare.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,22 @@

public static class CryptoSquare
{
public static string NormalizedPlaintext(string plaintext)
public static string NormalizePlaintext(string plaintext)
{
throw new NotImplementedException("You need to implement this function.");
}

public static IEnumerable<string> PlaintextSegments(string plaintext)
public static (int rows, int columns) CalculateRequiredDimensions(string plaintext)
{
throw new NotImplementedException("You need to implement this function.");
}

public static string Encoded(string plaintext)
public static IEnumerable<string> GeneratePlaintextSegments(string plaintext)
{
throw new NotImplementedException("You need to implement this function.");
}

public static string Encode(string plaintext)
{
throw new NotImplementedException("You need to implement this function.");
}
Expand Down