diff --git a/exercises/practice/crypto-square/.docs/instructions.md b/exercises/practice/crypto-square/.docs/instructions.md index 6c3826ee55..97311eb936 100644 --- a/exercises/practice/crypto-square/.docs/instructions.md +++ b/exercises/practice/crypto-square/.docs/instructions.md @@ -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." @@ -21,8 +18,8 @@ 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: @@ -30,7 +27,8 @@ If `c` is the number of columns and `r` is the number of rows, then for the rect - 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" @@ -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" @@ -69,3 +66,4 @@ Notice that were we to stack these, we could visually decode the ciphertext back "aohghn " "sseoau " ``` + diff --git a/exercises/practice/crypto-square/CryptoSquare.cs b/exercises/practice/crypto-square/CryptoSquare.cs index 8ba25108e8..d61e4af438 100644 --- a/exercises/practice/crypto-square/CryptoSquare.cs +++ b/exercises/practice/crypto-square/CryptoSquare.cs @@ -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 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 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."); }