Sha256: 3015f847a45218d49b318cec910e206c18e3dee1471bdbfd93527845d9b55eda

Contents?: true

Size: 1.72 KB

Versions: 41

Compression:

Stored size: 1.72 KB

Contents

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 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

```text
"If man was meant to stay on the ground, god would have given us roots."
```

is normalized to:

```text
"ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots"
```

The plaintext should be organized in to a rectangle.  The size of the
rectangle (`r x c`) should be decided by the length of the message,
such that `c >= r` and `c - r <= 1`, where `c` is the number of columns
and `r` is the number of rows.

Our normalized text is 54 characters long, dictating a rectangle with
`c = 8` and `r = 7`:

```text
"ifmanwas"
"meanttos"
"tayonthe"
"groundgo"
"dwouldha"
"vegivenu"
"sroots  "
```

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

The message above is coded 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
cyphertext back in to the original message:

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

Version data entries

41 entries across 41 versions & 1 rubygems

Version Path
trackler-2.2.1.180 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.179 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.178 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.177 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.176 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.175 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.174 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.173 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.172 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.171 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.170 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.169 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.167 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.166 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.165 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.164 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.163 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.162 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.161 problem-specifications/exercises/crypto-square/description.md
trackler-2.2.1.160 problem-specifications/exercises/crypto-square/description.md