From 723ca3e637c239e38b74f118b5e432bc491f7bce Mon Sep 17 00:00:00 2001 From: Scott Matloff Date: Sat, 19 Aug 2023 17:57:15 -0700 Subject: [PATCH] Did an editing pass on the docs to make them clearer to the reader by moving the examples closer to the text which refers to them. Also changed the suggested function names to be verb-based, rather than noun-based, as that is more common in C# projects. --- .../crypto-square/.docs/instructions.md | 20 +++++++++---------- .../practice/crypto-square/CryptoSquare.cs | 11 +++++++--- 2 files changed, 17 insertions(+), 14 deletions(-) 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."); }