exercism/elixir/crypto-square
Danil Negrienko 79f77f009a crypto_square started 2024-08-22 10:12:28 -04:00
..
.exercism crypto_square started 2024-08-22 10:12:28 -04:00
lib crypto_square started 2024-08-22 10:12:28 -04:00
test crypto_square started 2024-08-22 10:12:28 -04:00
.formatter.exs crypto_square started 2024-08-22 10:12:28 -04:00
.gitignore crypto_square started 2024-08-22 10:12:28 -04:00
HELP.md crypto_square started 2024-08-22 10:12:28 -04:00
README.md crypto_square started 2024-08-22 10:12:28 -04:00
mix.exs crypto_square started 2024-08-22 10:12:28 -04:00

README.md

Crypto Square

Welcome to Crypto Square on Exercism's Elixir Track. If you need help running the tests or submitting your code, check out HELP.md.

Instructions

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.

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

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

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.

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:

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

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

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

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

Source

Created by

  • @jimmbraddock

Contributed to by

  • @amencarini
  • @angelikatyborska
  • @Cohen-Carlisle
  • @devonestes
  • @ggpasqualino
  • @lpil
  • @neenjaw
  • @parkerl
  • @sotojuan
  • @waiting-for-dev

Based on

J Dalbey's Programming Practice problems - https://users.csc.calpoly.edu/~jdalbey/103/Projects/ProgrammingPractice.html