From 6b6c7a0ff30070705e4966c906e99c64b449e371 Mon Sep 17 00:00:00 2001 From: Sean Perry Date: Tue, 3 Oct 2017 19:59:02 -0700 Subject: [PATCH 01/16] bowling: Wrap paragraphs The paragraphs rambled without newlines. They are now line wrapped to match the other exercises. https://github.com/exercism/problem-specifications/pull/909 --- exercises/bowling/README.md | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/exercises/bowling/README.md b/exercises/bowling/README.md index e0143f344..ff762f32a 100644 --- a/exercises/bowling/README.md +++ b/exercises/bowling/README.md @@ -8,13 +8,23 @@ of a game of bowling. ## Scoring Bowling -The game consists of 10 frames. A frame is composed of one or two ball throws with 10 pins standing at frame initialization. There are three cases for the tabulation of a frame. +The game consists of 10 frames. A frame is composed of one or two ball +throws with 10 pins standing at frame initialization. There are three +cases for the tabulation of a frame. -* An open frame is where a score of less than 10 is recorded for the frame. In this case the score for the frame is the number of pins knocked down. +* An open frame is where a score of less than 10 is recorded for the + frame. In this case the score for the frame is the number of pins + knocked down. -* A spare is where all ten pins are knocked down after the second throw. The total value of a spare is 10 plus the number of pins knocked down in their next throw. +* A spare is where all ten pins are knocked down after the second + throw. The total value of a spare is 10 plus the number of pins + knocked down in their next throw. -* A strike is where all ten pins are knocked down after the first throw. The total value of a strike is 10 plus the number of pins knocked down in their next two throws. If a strike is immediately followed by a second strike, then we can not total the value of first strike until they throw the ball one more time. +* A strike is where all ten pins are knocked down after the first + throw. The total value of a strike is 10 plus the number of pins + knocked down in their next two throws. If a strike is immediately + followed by a second strike, then we can not total the value of the + first strike until they throw the ball one more time. Here is a three frame example: @@ -30,7 +40,11 @@ Frame 3 is (9 + 0) = 9 This means the current running total is 48. -The tenth frame in the game is a special case. If someone throws a strike or a spare then they get a fill ball. Fill balls exist to calculate the total of the 10th frame. Scoring a strike or spare on the fill ball does not give the player more fill balls. The total value of the 10th frame is the total number of pins knocked down. +The tenth frame in the game is a special case. If someone throws a +strike or a spare then they get a fill ball. Fill balls exist to +calculate the total of the 10th frame. Scoring a strike or spare on +the fill ball does not give the player more fill balls. The total +value of the 10th frame is the total number of pins knocked down. For a tenth frame of X1/ (strike and a spare), the total value is 20. From 0db810cc5efc117d204334845e92d622e00465f3 Mon Sep 17 00:00:00 2001 From: Sean Perry Date: Tue, 3 Oct 2017 19:59:58 -0700 Subject: [PATCH 02/16] bowling: fix some minor grammar There was a missing article 'a' in the beginning. The phrasing "after the throw" is a little confusing. Does this mean either the 2nd or 3rd throws? No, it means they are knocked down by THIS throw. Update accordingly. https://github.com/exercism/problem-specifications/pull/909 --- exercises/bowling/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/exercises/bowling/README.md b/exercises/bowling/README.md index ff762f32a..8975cc9dc 100644 --- a/exercises/bowling/README.md +++ b/exercises/bowling/README.md @@ -2,7 +2,7 @@ Score a bowling game. -Bowling is game where players roll a heavy ball to knock down pins +Bowling is a game where players roll a heavy ball to knock down pins arranged in a triangle. Write code to keep track of the score of a game of bowling. @@ -16,15 +16,15 @@ cases for the tabulation of a frame. frame. In this case the score for the frame is the number of pins knocked down. -* A spare is where all ten pins are knocked down after the second +* A spare is where all ten pins are knocked down by the second throw. The total value of a spare is 10 plus the number of pins knocked down in their next throw. -* A strike is where all ten pins are knocked down after the first +* A strike is where all ten pins are knocked down by the first throw. The total value of a strike is 10 plus the number of pins - knocked down in their next two throws. If a strike is immediately - followed by a second strike, then we can not total the value of the - first strike until they throw the ball one more time. + knocked down in the next two throws. If a strike is immediately + followed by a second strike, then the value of the first strike + cannot be determined until the ball is thrown one more time. Here is a three frame example: From 0b913eb5b6a1e5c0d013d377f9c84be8ed56167d Mon Sep 17 00:00:00 2001 From: Sean Perry Date: Tue, 3 Oct 2017 20:01:29 -0700 Subject: [PATCH 03/16] circular-buffer: Clarify overwrite Overwrite replaces the oldest item in the buffer if the buffer is empty. Otherwise it is just like write. This commit documents what overwrite on a buffer with available space looks like and clarifies what the oldest element is after an overwrite operation succeeds. https://github.com/exercism/problem-specifications/issues/889 https://github.com/exercism/problem-specifications/pull/892 --- exercises/circular-buffer/README.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/exercises/circular-buffer/README.md b/exercises/circular-buffer/README.md index aaeb50bef..005ae8aee 100644 --- a/exercises/circular-buffer/README.md +++ b/exercises/circular-buffer/README.md @@ -31,18 +31,25 @@ If the buffer has 7 elements then it is completely full: When the buffer is full an error will be raised, alerting the client that further writes are blocked until a slot becomes free. -The client can opt to overwrite the oldest data with a forced write. In -this case, two more elements — A & B — are added and they overwrite the -3 & 4: +When the buffer is full, the client can opt to overwrite the oldest +data with a forced write. In this case, two more elements — A & B — +are added and they overwrite the 3 & 4: [6][7][8][9][A][B][5] -Finally, if two elements are now removed then what would be returned is -not 3 & 4 but 5 & 6 because A & B overwrote the 3 & the 4 yielding the -buffer with: +3 & 4 have been replaced by A & B making 5 now the oldest data in the +buffer. Finally, if two elements are removed then what would be +returned is 5 & 6 yielding the buffer: [ ][7][8][9][A][B][ ] +Because there is space available, if the client again uses overwrite +to store C & D then the space where 5 & 6 were stored previously will +be used not the location of 7 & 8. 7 is still the oldest element and +the buffer is once again full. + + [D][7][8][9][A][B][C] + ## Rust Installation Refer to the [exercism help page][help-page] for Rust installation and learning From 978501423d436d3eccba9eec20726071b705947f Mon Sep 17 00:00:00 2001 From: Bo Date: Tue, 3 Oct 2017 20:06:23 -0700 Subject: [PATCH 04/16] nucleotide-count: rewrite description, specify single-stranded https://github.com/exercism/problem-specifications/pull/913 --- exercises/nucleotide-count/README.md | 30 ++++++++-------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/exercises/nucleotide-count/README.md b/exercises/nucleotide-count/README.md index 037765cbd..3bf5ec4aa 100644 --- a/exercises/nucleotide-count/README.md +++ b/exercises/nucleotide-count/README.md @@ -1,30 +1,16 @@ # Nucleotide Count -Given a DNA string, compute how many times each nucleotide occurs in the string. +Given a single stranded DNA string, compute how many times each nucleotide occurs in the string. -DNA is represented by an alphabet of the following symbols: 'A', 'C', -'G', and 'T'. - -Each symbol represents a nucleotide, which is a fancy name for the -particular molecules that happen to make up a large part of DNA. - -Shortest intro to biochemistry EVAR: +The genetic language of every living thing on the planet is DNA. +DNA is a large molecule that is built from an extremely long sequence of individual elements called nucleotides. +4 types exist in DNA and these differ only slightly and can be represented as the following symbols: 'A' for adenine, 'C' for cytosine, 'G' for guanine, and 'T' thymine. +Here is an analogy: - twigs are to birds nests as -- nucleotides are to DNA and RNA as -- amino acids are to proteins as -- sugar is to starch as -- oh crap lipids - -I'm not going to talk about lipids because they're crazy complex. - -So back to nucleotides. - -DNA contains four types of them: adenine (`A`), cytosine (`C`), guanine -(`G`), and thymine (`T`). - -RNA contains a slightly different set of nucleotides, but we don't care -about that for now. +- nucleotides are to DNA as +- legos are to lego houses as +- words are to sentences as... ## Rust Installation From 1a7bec5d0714d1ff934589728fd4f8fa5dec57a5 Mon Sep 17 00:00:00 2001 From: Selina-Jane <31666431+Selina-Jane@users.noreply.github.com> Date: Tue, 3 Oct 2017 20:08:55 -0700 Subject: [PATCH 05/16] protein-translation: there are three terminating codons https://github.com/exercism/problem-specifications/issues/810 https://github.com/exercism/problem-specifications/pull/916 --- exercises/protein-translation/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/protein-translation/README.md b/exercises/protein-translation/README.md index e1ec4ec31..3ac5e96c4 100644 --- a/exercises/protein-translation/README.md +++ b/exercises/protein-translation/README.md @@ -14,7 +14,7 @@ Protein: `"Methionine", "Phenylalanine", "Serine"` There are 64 codons which in turn correspond to 20 amino acids; however, all of the codon sequences and resulting amino acids are not important in this exercise. If it works for one codon, the program should work for all of them. However, feel free to expand the list in the test suite to include them all. -There are also four terminating codons (also known as 'STOP' codons); if any of these codons are encountered (by the ribosome), all translation ends and the protein is terminated. +There are also three terminating codons (also known as 'STOP' codons); if any of these codons are encountered (by the ribosome), all translation ends and the protein is terminated. All subsequent codons after are ignored, like this: From 69a8c347871e1ae53fbacffcaf3f7a8559707eee Mon Sep 17 00:00:00 2001 From: Rafael Cossovan Date: Tue, 3 Oct 2017 20:25:45 -0700 Subject: [PATCH 06/16] Use ```text``` for display regular text https://github.com/github/linguist/blob/master/lib/linguist/languages.yml https://github.com/exercism/problem-specifications/pull/915 --- exercises/atbash-cipher/README.md | 2 +- exercises/beer-song/README.md | 2 +- exercises/crypto-square/README.md | 8 ++++---- exercises/leap/README.md | 2 +- exercises/pascals-triangle/README.md | 2 +- exercises/queen-attack/README.md | 2 +- exercises/rotational-cipher/README.md | 2 +- exercises/scrabble-score/README.md | 2 +- exercises/word-count/README.md | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/exercises/atbash-cipher/README.md b/exercises/atbash-cipher/README.md index 64e59131c..add0753f9 100644 --- a/exercises/atbash-cipher/README.md +++ b/exercises/atbash-cipher/README.md @@ -9,7 +9,7 @@ letter, the second with the second-last, and so on. An Atbash cipher for the Latin alphabet would be as follows: -```plain +```text Plain: abcdefghijklmnopqrstuvwxyz Cipher: zyxwvutsrqponmlkjihgfedcba ``` diff --git a/exercises/beer-song/README.md b/exercises/beer-song/README.md index 0574d915b..7c5607c97 100644 --- a/exercises/beer-song/README.md +++ b/exercises/beer-song/README.md @@ -4,7 +4,7 @@ Produce the lyrics to that beloved classic, that field-trip favorite: 99 Bottles Note that not all verses are identical. -```plain +```text 99 bottles of beer on the wall, 99 bottles of beer. Take one down and pass it around, 98 bottles of beer on the wall. diff --git a/exercises/crypto-square/README.md b/exercises/crypto-square/README.md index 2142420aa..b7813b9a8 100644 --- a/exercises/crypto-square/README.md +++ b/exercises/crypto-square/README.md @@ -26,7 +26,7 @@ and `r` is the number of rows. Our normalized text is 54 characters long, dictating a rectangle with `c = 8` and `r = 7`: -```plain +```text ifmanwas meanttos tayonthe @@ -41,7 +41,7 @@ right. The message above is coded as: -```plain +```text imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau ``` @@ -49,14 +49,14 @@ Output the encoded text in chunks. Phrases that fill perfect squares `(r X r)` should be output in `r`-length chunks separated by spaces. Imperfect squares will have `n` empty spaces. Those spaces should be distributed evenly across the last `n` rows. -```plain +```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: -```plain +```text imtgdvs fearwer mayoogo diff --git a/exercises/leap/README.md b/exercises/leap/README.md index 143cc074d..88e1ec83c 100644 --- a/exercises/leap/README.md +++ b/exercises/leap/README.md @@ -4,7 +4,7 @@ Given a year, report if it is a leap year. The tricky thing here is that a leap year in the Gregorian calendar occurs: -```plain +```text on every year that is evenly divisible by 4 except every year that is evenly divisible by 100 unless the year is also evenly divisible by 400 diff --git a/exercises/pascals-triangle/README.md b/exercises/pascals-triangle/README.md index 1e9c530e5..8ac54bccf 100644 --- a/exercises/pascals-triangle/README.md +++ b/exercises/pascals-triangle/README.md @@ -5,7 +5,7 @@ Compute Pascal's triangle up to a given number of rows. In Pascal's Triangle each number is computed by adding the numbers to the right and left of the current position in the previous row. -```plain +```text 1 1 1 1 2 1 diff --git a/exercises/queen-attack/README.md b/exercises/queen-attack/README.md index 44dc22647..8722d52bd 100644 --- a/exercises/queen-attack/README.md +++ b/exercises/queen-attack/README.md @@ -11,7 +11,7 @@ A chessboard can be represented by an 8 by 8 array. So if you're told the white queen is at (2, 3) and the black queen at (5, 6), then you'd know you've got a set-up like so: -```plain +```text _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ W _ _ _ _ diff --git a/exercises/rotational-cipher/README.md b/exercises/rotational-cipher/README.md index a92412f1d..f55da8f32 100644 --- a/exercises/rotational-cipher/README.md +++ b/exercises/rotational-cipher/README.md @@ -13,7 +13,7 @@ The most commonly used rotational cipher is `ROT13`. A `ROT13` on the Latin alphabet would be as follows: -```plain +```text Plain: abcdefghijklmnopqrstuvwxyz Cipher: nopqrstuvwxyzabcdefghijklm ``` diff --git a/exercises/scrabble-score/README.md b/exercises/scrabble-score/README.md index faf709897..72da9d156 100644 --- a/exercises/scrabble-score/README.md +++ b/exercises/scrabble-score/README.md @@ -6,7 +6,7 @@ Given a word, compute the scrabble score for that word. You'll need these: -```plain +```text Letter Value A, E, I, O, U, L, N, R, S, T 1 D, G 2 diff --git a/exercises/word-count/README.md b/exercises/word-count/README.md index cfa8198eb..2b9fc0bc8 100644 --- a/exercises/word-count/README.md +++ b/exercises/word-count/README.md @@ -4,7 +4,7 @@ Given a phrase, count the occurrences of each word in that phrase. For example for the input `"olly olly in come free"` -```plain +```text olly: 2 in: 1 come: 1 From 0a9d611cdee100c85522c785751edab5dd1666df Mon Sep 17 00:00:00 2001 From: Rafael Cossovan Date: Tue, 3 Oct 2017 20:28:42 -0700 Subject: [PATCH 07/16] Remove some HTML tags laying around https://github.com/exercism/problem-specifications/pull/915 --- exercises/triangle/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/exercises/triangle/README.md b/exercises/triangle/README.md index a50799b76..0cd201baa 100644 --- a/exercises/triangle/README.md +++ b/exercises/triangle/README.md @@ -2,10 +2,12 @@ Determine if a triangle is equilateral, isosceles, or scalene. -An _equilateral_ triangle has all three sides the same length.
+An _equilateral_ triangle has all three sides the same length. + An _isosceles_ triangle has at least two sides the same length. (It is sometimes specified as having exactly two sides the same length, but for the purposes of -this exercise we'll say at least two.)
+this exercise we'll say at least two.) + A _scalene_ triangle has all sides of different lengths. ## Note From 16a30b60d299866fcde5863ac7eb677a35ae9de0 Mon Sep 17 00:00:00 2001 From: Rafael Cossovan Date: Tue, 3 Oct 2017 20:29:49 -0700 Subject: [PATCH 08/16] Ensure exactly one newline at the end of descriptions https://github.com/exercism/problem-specifications/pull/915 --- exercises/acronym/README.md | 1 - exercises/allergies/README.md | 1 - exercises/triangle/README.md | 1 + exercises/word-count/README.md | 1 - exercises/wordy/README.md | 1 - 5 files changed, 1 insertion(+), 4 deletions(-) diff --git a/exercises/acronym/README.md b/exercises/acronym/README.md index fa082a1b9..65d9e41b8 100644 --- a/exercises/acronym/README.md +++ b/exercises/acronym/README.md @@ -7,7 +7,6 @@ Techies love their TLA (Three Letter Acronyms)! Help generate some jargon by writing a program that converts a long name like Portable Network Graphics to its acronym (PNG). - ## Rust Installation Refer to the [exercism help page][help-page] for Rust installation and learning diff --git a/exercises/allergies/README.md b/exercises/allergies/README.md index 6055e53cb..46cae6dce 100644 --- a/exercises/allergies/README.md +++ b/exercises/allergies/README.md @@ -29,7 +29,6 @@ allergens that score 256, 512, 1024, etc.). Your program should ignore those components of the score. For example, if the allergy score is 257, your program should only report the eggs (1) allergy. - ## Rust Installation Refer to the [exercism help page][help-page] for Rust installation and learning diff --git a/exercises/triangle/README.md b/exercises/triangle/README.md index 0cd201baa..a7d335746 100644 --- a/exercises/triangle/README.md +++ b/exercises/triangle/README.md @@ -21,6 +21,7 @@ length of the third side. See [Triangle Inequality](https://en.wikipedia.org/wik The case where the sum of the lengths of two sides _equals_ that of the third is known as a _degenerate_ triangle - it has zero area and looks like a single line. Feel free to add your own code/tests to check for degenerate triangles. + # Triangle in Rust - [Result](https://doc.rust-lang.org/std/result/index.html) diff --git a/exercises/word-count/README.md b/exercises/word-count/README.md index 2b9fc0bc8..6f2982569 100644 --- a/exercises/word-count/README.md +++ b/exercises/word-count/README.md @@ -11,7 +11,6 @@ come: 1 free: 1 ``` - ## Rust Installation Refer to the [exercism help page][help-page] for Rust installation and learning diff --git a/exercises/wordy/README.md b/exercises/wordy/README.md index b3add297a..46e48ba13 100644 --- a/exercises/wordy/README.md +++ b/exercises/wordy/README.md @@ -55,7 +55,6 @@ If you'd like, handle exponentials. 32 - ## Rust Installation Refer to the [exercism help page][help-page] for Rust installation and learning From 28a2bcfd83ce74887288524a7e140d980a11ed89 Mon Sep 17 00:00:00 2001 From: Rafael Cossovan Date: Tue, 3 Oct 2017 20:30:17 -0700 Subject: [PATCH 09/16] Remove extra white spaces at the end of the line https://github.com/exercism/problem-specifications/pull/915 --- exercises/pangram/README.md | 2 +- exercises/perfect-numbers/README.md | 4 ++-- exercises/protein-translation/README.md | 7 +++---- exercises/proverb/README.md | 12 ++++++------ exercises/pythagorean-triplet/README.md | 2 +- exercises/run-length-encoding/README.md | 4 ++-- exercises/triangle/README.md | 8 ++++---- exercises/variable-length-quantity/README.md | 11 +++++------ 8 files changed, 24 insertions(+), 26 deletions(-) diff --git a/exercises/pangram/README.md b/exercises/pangram/README.md index bb6802ae4..6d0b82df3 100644 --- a/exercises/pangram/README.md +++ b/exercises/pangram/README.md @@ -2,7 +2,7 @@ Determine if a sentence is a pangram. A pangram (Greek: παν γράμμα, pan gramma, "every letter") is a sentence using every letter of the alphabet at least once. -The best known English pangram is: +The best known English pangram is: > The quick brown fox jumps over the lazy dog. The alphabet used consists of ASCII letters `a` to `z`, inclusive, and is case diff --git a/exercises/perfect-numbers/README.md b/exercises/perfect-numbers/README.md index 7b9cabb3e..9de92c772 100644 --- a/exercises/perfect-numbers/README.md +++ b/exercises/perfect-numbers/README.md @@ -5,7 +5,7 @@ Nicomachus' (60 - 120 CE) classification scheme for natural numbers. The Greek mathematician [Nicomachus](https://en.wikipedia.org/wiki/Nicomachus) devised a classification scheme for natural numbers, identifying each as belonging uniquely to the categories of **perfect**, **abundant**, or **deficient** based on their [aliquot sum](https://en.wikipedia.org/wiki/Aliquot_sum). The aliquot sum is defined as the sum of the factors of a number not including the number itself. For example, the aliquot sum of 15 is (1 + 3 + 5) = 9 -- **Perfect**: aliquot sum = number +- **Perfect**: aliquot sum = number - 6 is a perfect number because (1 + 2 + 3) = 6 - 28 is a perfect number because (1 + 2 + 4 + 7 + 14) = 28 - **Abundant**: aliquot sum > number @@ -14,7 +14,7 @@ The Greek mathematician [Nicomachus](https://en.wikipedia.org/wiki/Nicomachus) d - **Deficient**: aliquot sum < number - 8 is a deficient number because (1 + 2 + 4) = 7 - Prime numbers are deficient - + Implement a way to determine whether a given number is **perfect**. Depending on your language track, you may also need to implement a way to determine whether a given number is **abundant** or **deficient**. ## Rust Installation diff --git a/exercises/protein-translation/README.md b/exercises/protein-translation/README.md index 3ac5e96c4..9f288ac31 100644 --- a/exercises/protein-translation/README.md +++ b/exercises/protein-translation/README.md @@ -10,9 +10,9 @@ Codons: `"AUG", "UUU", "UCU"` => which become a polypeptide with the following sequence => Protein: `"Methionine", "Phenylalanine", "Serine"` - + There are 64 codons which in turn correspond to 20 amino acids; however, all of the codon sequences and resulting amino acids are not important in this exercise. If it works for one codon, the program should work for all of them. -However, feel free to expand the list in the test suite to include them all. +However, feel free to expand the list in the test suite to include them all. There are also three terminating codons (also known as 'STOP' codons); if any of these codons are encountered (by the ribosome), all translation ends and the protein is terminated. @@ -20,7 +20,7 @@ All subsequent codons after are ignored, like this: RNA: `"AUGUUUUCUUAAAUG"` => -Codons: `"AUG", "UUU", "UCU", "UAG", "AUG"` => +Codons: `"AUG", "UUU", "UCU", "UAG", "AUG"` => Protein: `"Methionine", "Phenylalanine", "Serine"` @@ -39,7 +39,6 @@ UGU, UGC | Cysteine UGG | Tryptophan UAA, UAG, UGA | STOP - Learn more about [protein translation on Wikipedia](http://en.wikipedia.org/wiki/Translation_(biology)) ## Rust Installation diff --git a/exercises/proverb/README.md b/exercises/proverb/README.md index 03a1b8684..68e0ff3f6 100644 --- a/exercises/proverb/README.md +++ b/exercises/proverb/README.md @@ -3,12 +3,12 @@ For want of a horseshoe nail, a kingdom was lost, or so the saying goes. Output the full text of this proverbial rhyme: -> For want of a nail the shoe was lost. -> For want of a shoe the horse was lost. -> For want of a horse the rider was lost. -> For want of a rider the message was lost. -> For want of a message the battle was lost. -> For want of a battle the kingdom was lost. +> For want of a nail the shoe was lost. +> For want of a shoe the horse was lost. +> For want of a horse the rider was lost. +> For want of a rider the message was lost. +> For want of a message the battle was lost. +> For want of a battle the kingdom was lost. > And all for the want of a horseshoe nail. ## Rust Installation diff --git a/exercises/pythagorean-triplet/README.md b/exercises/pythagorean-triplet/README.md index ff19a10c6..f51b29122 100644 --- a/exercises/pythagorean-triplet/README.md +++ b/exercises/pythagorean-triplet/README.md @@ -7,7 +7,7 @@ which, a**2 + b**2 = c**2 ``` -For example, +For example, ``` 3**2 + 4**2 = 9 + 16 = 25 = 5**2. diff --git a/exercises/run-length-encoding/README.md b/exercises/run-length-encoding/README.md index a89288cef..4b3958f2d 100644 --- a/exercises/run-length-encoding/README.md +++ b/exercises/run-length-encoding/README.md @@ -19,8 +19,8 @@ the compressed data, which makes it a lossless data compression. ``` For simplicity, you can assume that the unencoded string will only contain -the letters A through Z (either lower or upper case) and whitespace. This way -data to be encoded will never contain any numbers and numbers inside data to +the letters A through Z (either lower or upper case) and whitespace. This way +data to be encoded will never contain any numbers and numbers inside data to be decoded always represent the count for the following character. ## Rust Installation diff --git a/exercises/triangle/README.md b/exercises/triangle/README.md index a7d335746..3c59c766b 100644 --- a/exercises/triangle/README.md +++ b/exercises/triangle/README.md @@ -12,14 +12,14 @@ A _scalene_ triangle has all sides of different lengths. ## Note -For a shape to be a triangle at all, all sides have to be of length > 0, and -the sum of the lengths of any two sides must be greater than or equal to the +For a shape to be a triangle at all, all sides have to be of length > 0, and +the sum of the lengths of any two sides must be greater than or equal to the length of the third side. See [Triangle Inequality](https://en.wikipedia.org/wiki/Triangle_inequality). ## Dig Deeper -The case where the sum of the lengths of two sides _equals_ that of the -third is known as a _degenerate_ triangle - it has zero area and looks like +The case where the sum of the lengths of two sides _equals_ that of the +third is known as a _degenerate_ triangle - it has zero area and looks like a single line. Feel free to add your own code/tests to check for degenerate triangles. # Triangle in Rust diff --git a/exercises/variable-length-quantity/README.md b/exercises/variable-length-quantity/README.md index 44158decf..3dc18efa3 100644 --- a/exercises/variable-length-quantity/README.md +++ b/exercises/variable-length-quantity/README.md @@ -5,17 +5,16 @@ Implement variable length quantity encoding and decoding. The goal of this exercise is to implement [VLQ](https://en.wikipedia.org/wiki/Variable-length_quantity) encoding/decoding. In short, the goal of this encoding is to encode integer values in a way that would save bytes. -Only the first 7 bits of each byte is significant (right-justified; sort of like an ASCII byte). -So, if you have a 32-bit value, you have to unpack it into a series of 7-bit bytes. -Of course, you will have a variable number of bytes depending upon your integer. +Only the first 7 bits of each byte is significant (right-justified; sort of like an ASCII byte). +So, if you have a 32-bit value, you have to unpack it into a series of 7-bit bytes. +Of course, you will have a variable number of bytes depending upon your integer. To indicate which is the last byte of the series, you leave bit #7 clear. -In all of the preceding bytes, you set bit #7. +In all of the preceding bytes, you set bit #7. -So, if an integer is between `0-127`, it can be represented as one byte. +So, if an integer is between `0-127`, it can be represented as one byte. Although VLQ can deal with numbers of arbitrary sizes, for this exercise we will restrict ourselves to only numbers that fit in a 32-bit unsigned integer. Here are examples of integers as 32-bit values, and the variable length quantities that they translate to: - ``` NUMBER VARIABLE QUANTITY 00000000 00 From 6d583888ee2309c561fd9a79ca4d2db08f973eb6 Mon Sep 17 00:00:00 2001 From: Rafael Cossovan Date: Tue, 3 Oct 2017 20:30:52 -0700 Subject: [PATCH 10/16] Specify language for all code blocks https://github.com/exercism/problem-specifications/pull/915 --- exercises/alphametics/README.md | 4 ++-- exercises/luhn/README.md | 14 +++++++------- exercises/ocr-numbers/README.md | 10 +++++----- exercises/phone-number/README.md | 2 +- exercises/pythagorean-triplet/README.md | 4 ++-- exercises/rectangles/README.md | 14 +++++++------- exercises/roman-numerals/README.md | 2 +- exercises/run-length-encoding/README.md | 4 ++-- exercises/tournament/README.md | 10 +++++----- exercises/variable-length-quantity/README.md | 2 +- 10 files changed, 33 insertions(+), 33 deletions(-) diff --git a/exercises/alphametics/README.md b/exercises/alphametics/README.md index b47f1937f..31eb98886 100644 --- a/exercises/alphametics/README.md +++ b/exercises/alphametics/README.md @@ -7,7 +7,7 @@ letters in words are replaced with numbers. For example `SEND + MORE = MONEY`: -``` +```text S E N D M O R E + ----------- @@ -16,7 +16,7 @@ M O N E Y Replacing these with valid numbers gives: -``` +```text 9 5 6 7 1 0 8 5 + ----------- diff --git a/exercises/luhn/README.md b/exercises/luhn/README.md index 45b3f2604..c2aef9bed 100644 --- a/exercises/luhn/README.md +++ b/exercises/luhn/README.md @@ -18,27 +18,27 @@ are disallowed. ## Example 1: valid credit card number -``` +```text 4539 1488 0343 6467 ``` The first step of the Luhn algorithm is to double every second digit, starting from the right. We will be doubling -``` +```text 4_3_ 1_8_ 0_4_ 6_6_ ``` If doubling the number results in a number greater than 9 then subtract 9 from the product. The results of our doubling: -``` +```text 8569 2478 0383 3437 ``` Then sum all of the digits: -``` +```text 8+5+6+9+2+4+7+8+0+3+8+3+3+4+3+7 = 80 ``` @@ -46,19 +46,19 @@ If the sum is evenly divisible by 10, then the number is valid. This number is v ## Example 2: invalid credit card number -``` +```text 8273 1232 7352 0569 ``` Double the second digits, starting from the right -``` +```text 7253 2262 5312 0539 ``` Sum the digits -``` +```text 7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57 ``` diff --git a/exercises/ocr-numbers/README.md b/exercises/ocr-numbers/README.md index 42a14c7f3..58964a056 100644 --- a/exercises/ocr-numbers/README.md +++ b/exercises/ocr-numbers/README.md @@ -9,7 +9,7 @@ To begin with, convert a simple binary font to a string containing 0 or 1. The binary font uses pipes and underscores, four rows high and three columns wide. -``` +```text _ # | | # zero. |_| # @@ -18,7 +18,7 @@ The binary font uses pipes and underscores, four rows high and three columns wid Is converted to "0" -``` +```text # | # one. | # @@ -39,7 +39,7 @@ Update your program to recognize multi-character binary strings, replacing garbl Update your program to recognize all numbers 0 through 9, both individually and as part of a larger string. -``` +```text _ _| |_ @@ -48,7 +48,7 @@ Update your program to recognize all numbers 0 through 9, both individually and Is converted to "2" -``` +```text _ _ _ _ _ _ _ _ # | _| _||_||_ |_ ||_||_|| | # decimal numbers. ||_ _| | _||_| ||_| _||_| # @@ -61,7 +61,7 @@ Is converted to "1234567890" Update your program to handle multiple numbers, one per line. When converting several lines, join the lines with commas. -``` +```text _ _ | _| _| ||_ _| diff --git a/exercises/phone-number/README.md b/exercises/phone-number/README.md index 5af9074e3..8a663eeed 100644 --- a/exercises/phone-number/README.md +++ b/exercises/phone-number/README.md @@ -8,7 +8,7 @@ NANP numbers are ten-digit numbers consisting of a three-digit Numbering Plan Ar The format is usually represented as -``` +```text (NXX)-NXX-XXXX ``` where `N` is any digit from 2 through 9 and `X` is any digit from 0 through 9. diff --git a/exercises/pythagorean-triplet/README.md b/exercises/pythagorean-triplet/README.md index f51b29122..5f3527e5b 100644 --- a/exercises/pythagorean-triplet/README.md +++ b/exercises/pythagorean-triplet/README.md @@ -3,13 +3,13 @@ A Pythagorean triplet is a set of three natural numbers, {a, b, c}, for which, -``` +```text a**2 + b**2 = c**2 ``` For example, -``` +```text 3**2 + 4**2 = 9 + 16 = 25 = 5**2. ``` diff --git a/exercises/rectangles/README.md b/exercises/rectangles/README.md index 2657e98df..cf9350ff5 100644 --- a/exercises/rectangles/README.md +++ b/exercises/rectangles/README.md @@ -2,7 +2,7 @@ Count the rectangles in an ASCII diagram like the one below. -``` +```text +--+ ++ | +-++--+ @@ -12,7 +12,7 @@ Count the rectangles in an ASCII diagram like the one below. The above diagram contains 6 rectangles: -``` +```text +-----+ @@ -20,7 +20,7 @@ The above diagram contains 6 rectangles: +-----+ ``` -``` +```text +--+ | | | | @@ -28,7 +28,7 @@ The above diagram contains 6 rectangles: +--+ ``` -``` +```text +--+ | | +--+ @@ -36,7 +36,7 @@ The above diagram contains 6 rectangles: ``` -``` +```text +--+ @@ -44,7 +44,7 @@ The above diagram contains 6 rectangles: +--+ ``` -``` +```text +--+ @@ -52,7 +52,7 @@ The above diagram contains 6 rectangles: +--+ ``` -``` +```text ++ ++ diff --git a/exercises/roman-numerals/README.md b/exercises/roman-numerals/README.md index e024134cd..fc6652dd8 100644 --- a/exercises/roman-numerals/README.md +++ b/exercises/roman-numerals/README.md @@ -14,7 +14,7 @@ The Romans wrote numbers using letters - I, V, X, L, C, D, M. (notice these letters have lots of straight lines and are hence easy to hack into stone tablets). -``` +```text 1 => I 10 => X 7 => VII diff --git a/exercises/run-length-encoding/README.md b/exercises/run-length-encoding/README.md index 4b3958f2d..a8b5d587f 100644 --- a/exercises/run-length-encoding/README.md +++ b/exercises/run-length-encoding/README.md @@ -7,14 +7,14 @@ Run-length encoding (RLE) is a simple form of data compression, where runs For example we can represent the original 53 characters with only 13. -``` +```text "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB" -> "12WB12W3B24WB" ``` RLE allows the original data to be perfectly reconstructed from the compressed data, which makes it a lossless data compression. -``` +```text "AABCCCDEEEE" -> "2AB3CD4E" -> "AABCCCDEEEE" ``` diff --git a/exercises/tournament/README.md b/exercises/tournament/README.md index d371e6264..7d8346e28 100644 --- a/exercises/tournament/README.md +++ b/exercises/tournament/README.md @@ -5,7 +5,7 @@ Tally the results of a small football competition. Based on an input file containing which team played against which and what the outcome was, create a file with a table like this: -``` +```text Team | MP | W | D | L | P Devastating Donkeys | 3 | 2 | 1 | 0 | 7 Allegoric Alaskans | 3 | 2 | 0 | 1 | 6 @@ -31,7 +31,7 @@ Input Your tallying program will receive input that looks like: -``` +```text Allegoric Alaskans;Blithering Badgers;win Devastating Donkeys;Courageous Californians;draw Devastating Donkeys;Allegoric Alaskans;win @@ -42,7 +42,7 @@ Allegoric Alaskans;Courageous Californians;win The result of the match refers to the first team listed. So this line -``` +```text Allegoric Alaskans;Blithering Badgers;win ``` @@ -50,7 +50,7 @@ Means that the Allegoric Alaskans beat the Blithering Badgers. This line: -``` +```text Courageous Californians;Blithering Badgers;loss ``` @@ -58,7 +58,7 @@ Means that the Blithering Badgers beat the Courageous Californians. And this line: -``` +```text Devastating Donkeys;Courageous Californians;draw ``` diff --git a/exercises/variable-length-quantity/README.md b/exercises/variable-length-quantity/README.md index 3dc18efa3..8dfa997bd 100644 --- a/exercises/variable-length-quantity/README.md +++ b/exercises/variable-length-quantity/README.md @@ -15,7 +15,7 @@ So, if an integer is between `0-127`, it can be represented as one byte. Although VLQ can deal with numbers of arbitrary sizes, for this exercise we will restrict ourselves to only numbers that fit in a 32-bit unsigned integer. Here are examples of integers as 32-bit values, and the variable length quantities that they translate to: -``` +```text NUMBER VARIABLE QUANTITY 00000000 00 00000040 40 From 42c877e4189cddc458098ea8f169c01148338609 Mon Sep 17 00:00:00 2001 From: Rafael Cossovan Date: Tue, 3 Oct 2017 20:31:31 -0700 Subject: [PATCH 11/16] Reduce consecutive blank lines to one https://github.com/exercism/problem-specifications/pull/915 --- exercises/all-your-base/README.md | 1 - exercises/grade-school/README.md | 1 - exercises/grains/README.md | 1 - exercises/phone-number/README.md | 1 - exercises/wordy/README.md | 4 ---- 5 files changed, 8 deletions(-) diff --git a/exercises/all-your-base/README.md b/exercises/all-your-base/README.md index 6d9454c56..048446964 100644 --- a/exercises/all-your-base/README.md +++ b/exercises/all-your-base/README.md @@ -28,7 +28,6 @@ The number 1120, *in base 3*, means: I think you got the idea! - *Yes. Those three numbers above are exactly the same. Congratulations!* ## Rust Installation diff --git a/exercises/grade-school/README.md b/exercises/grade-school/README.md index 8409e788a..ab6a54e91 100644 --- a/exercises/grade-school/README.md +++ b/exercises/grade-school/README.md @@ -21,7 +21,6 @@ In the end, you should be able to: Note that all our students only have one name. (It's a small town, what do you want?) - ## For bonus points Did you get the tests passing and the code clean? If you want to, these diff --git a/exercises/grains/README.md b/exercises/grains/README.md index a164ea94e..44c817b68 100644 --- a/exercises/grains/README.md +++ b/exercises/grains/README.md @@ -15,7 +15,6 @@ Write code that shows: - how many grains were on each square, and - the total number of grains - ## For bonus points Did you get the tests passing and the code clean? If you want to, these diff --git a/exercises/phone-number/README.md b/exercises/phone-number/README.md index 8a663eeed..74233e755 100644 --- a/exercises/phone-number/README.md +++ b/exercises/phone-number/README.md @@ -6,7 +6,6 @@ The **North American Numbering Plan (NANP)** is a telephone numbering system use NANP numbers are ten-digit numbers consisting of a three-digit Numbering Plan Area code, commonly known as *area code*, followed by a seven-digit local number. The first three digits of the local number represent the *exchange code*, followed by the unique four-digit number which is the *subscriber number*. - The format is usually represented as ```text (NXX)-NXX-XXXX diff --git a/exercises/wordy/README.md b/exercises/wordy/README.md index 46e48ba13..996c0e2c1 100644 --- a/exercises/wordy/README.md +++ b/exercises/wordy/README.md @@ -2,7 +2,6 @@ Parse and evaluate simple math word problems returning the answer as an integer. - ## Iteration 1 — Addition Add two numbers together. @@ -13,7 +12,6 @@ Evaluates to 18. Handle large numbers and negative numbers. - ## Iteration 2 — Subtraction, Multiplication and Division Now, perform the other three operations. @@ -30,7 +28,6 @@ Now, perform the other three operations. 5 - ## Iteration 3 — Multiple Operations Handle a set of operations, in sequence. @@ -46,7 +43,6 @@ left-to-right, _ignoring the typical order of operations._ 15 (i.e. not 9) - ## Bonus — Exponentials If you'd like, handle exponentials. From 68b226beba698a0a9e66b65be5809173d8909566 Mon Sep 17 00:00:00 2001 From: Rafael Cossovan Date: Tue, 3 Oct 2017 20:32:04 -0700 Subject: [PATCH 12/16] Surround headers with blank lines https://github.com/exercism/problem-specifications/pull/915 --- exercises/all-your-base/README.md | 1 + exercises/atbash-cipher/README.md | 1 + exercises/etl/README.md | 2 ++ exercises/rotational-cipher/README.md | 1 + exercises/scrabble-score/README.md | 2 ++ 5 files changed, 7 insertions(+) diff --git a/exercises/all-your-base/README.md b/exercises/all-your-base/README.md index 048446964..78eedb2d2 100644 --- a/exercises/all-your-base/README.md +++ b/exercises/all-your-base/README.md @@ -6,6 +6,7 @@ Implement general base conversion. Given a number in base **a**, represented as a sequence of digits, convert it to base **b**. ## Note + - Try to implement the conversion yourself. Do not use something else to perform the conversion for you. diff --git a/exercises/atbash-cipher/README.md b/exercises/atbash-cipher/README.md index add0753f9..18fe1f0f2 100644 --- a/exercises/atbash-cipher/README.md +++ b/exercises/atbash-cipher/README.md @@ -23,6 +23,7 @@ being 5 letters, and punctuation is excluded. This is to make it harder to guess things based on word boundaries. ## Examples + - Encoding `test` gives `gvhg` - Decoding `gvhg` gives `test` - Decoding `gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt` gives `thequickbrownfoxjumpsoverthelazydog` diff --git a/exercises/etl/README.md b/exercises/etl/README.md index 3227e4523..f6032bc1b 100644 --- a/exercises/etl/README.md +++ b/exercises/etl/README.md @@ -3,6 +3,7 @@ We are going to do the `Transform` step of an Extract-Transform-Load. ### ETL + Extract-Transform-Load (ETL) is a fancy way of saying, "We have some crufty, legacy data over in this system, and now we need it in this shiny new system over here, so we're going to migrate this." @@ -11,6 +12,7 @@ once." That's then typically followed by much forehead slapping and moaning about how stupid we could possibly be.) ### The goal + We're going to extract some scrabble scores from a legacy system. The old system stored a list of letters per score: diff --git a/exercises/rotational-cipher/README.md b/exercises/rotational-cipher/README.md index f55da8f32..6215608ce 100644 --- a/exercises/rotational-cipher/README.md +++ b/exercises/rotational-cipher/README.md @@ -23,6 +23,7 @@ It is stronger than the Atbash cipher because it has 27 possible keys, and 25 us Ciphertext is written out in the same formatting as the input including spaces and punctuation. ## Examples + - ROT5 `omg` gives `trl` - ROT0 `c` gives `c` - ROT26 `Cool` gives `Cool` diff --git a/exercises/scrabble-score/README.md b/exercises/scrabble-score/README.md index 72da9d156..894ade19d 100644 --- a/exercises/scrabble-score/README.md +++ b/exercises/scrabble-score/README.md @@ -18,6 +18,7 @@ Q, Z 10 ``` ## Examples + "cabbage" should be scored as worth 14 points: - 3 points for C @@ -34,6 +35,7 @@ And to total: - = 14 ## Extensions + - You can play a double or a triple letter. - You can play a double or a triple word. From f1f43c30ee740c44889a1eb1790d640ed934e38e Mon Sep 17 00:00:00 2001 From: Rafael Cossovan Date: Tue, 3 Oct 2017 20:32:33 -0700 Subject: [PATCH 13/16] Surround fenced code blocks with blank lines https://github.com/exercism/problem-specifications/pull/915 --- exercises/phone-number/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/exercises/phone-number/README.md b/exercises/phone-number/README.md index 74233e755..2ce23ccdb 100644 --- a/exercises/phone-number/README.md +++ b/exercises/phone-number/README.md @@ -7,9 +7,11 @@ The **North American Numbering Plan (NANP)** is a telephone numbering system use NANP numbers are ten-digit numbers consisting of a three-digit Numbering Plan Area code, commonly known as *area code*, followed by a seven-digit local number. The first three digits of the local number represent the *exchange code*, followed by the unique four-digit number which is the *subscriber number*. The format is usually represented as + ```text (NXX)-NXX-XXXX ``` + where `N` is any digit from 2 through 9 and `X` is any digit from 0 through 9. Your task is to clean up differently formated telephone numbers by removing punctuation and the country code (1) if present. From f41bde00b34a963dc951e33a2d80e76884e5269f Mon Sep 17 00:00:00 2001 From: Rafael Cossovan Date: Tue, 3 Oct 2017 20:33:24 -0700 Subject: [PATCH 14/16] Use triple-backtick, not quote, for multi-line text https://github.com/exercism/problem-specifications/pull/915 --- exercises/proverb/README.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/exercises/proverb/README.md b/exercises/proverb/README.md index 68e0ff3f6..7d12b2e74 100644 --- a/exercises/proverb/README.md +++ b/exercises/proverb/README.md @@ -1,16 +1,18 @@ # Proverb -For want of a horseshoe nail, a kingdom was lost, or so the saying goes. Output -the full text of this proverbial rhyme: - -> For want of a nail the shoe was lost. -> For want of a shoe the horse was lost. -> For want of a horse the rider was lost. -> For want of a rider the message was lost. -> For want of a message the battle was lost. -> For want of a battle the kingdom was lost. -> And all for the want of a horseshoe nail. - +For want of a horseshoe nail, a kingdom was lost, or so the saying goes. + +Output the full text of this proverbial rhyme: + +```text +For want of a nail the shoe was lost. +For want of a shoe the horse was lost. +For want of a horse the rider was lost. +For want of a rider the message was lost. +For want of a message the battle was lost. +For want of a battle the kingdom was lost. +And all for the want of a horseshoe nail. +``` ## Rust Installation Refer to the [exercism help page][help-page] for Rust installation and learning From f9b631b922230c51095581ad744781fca90acfda Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 14 Oct 2017 22:02:34 -0700 Subject: [PATCH 15/16] space-age: Add precision in Earth estimate https://github.com/exercism/problem-specifications/pull/880 https://github.com/exercism/problem-specifications/pull/945 https://github.com/exercism/problem-specifications/pull/946 --- exercises/space-age/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/space-age/README.md b/exercises/space-age/README.md index e643c6443..b0a781bc6 100644 --- a/exercises/space-age/README.md +++ b/exercises/space-age/README.md @@ -12,7 +12,7 @@ Given an age in seconds, calculate how old someone would be on: - Neptune: orbital period 164.79132 Earth years So if you were told someone were 1,000,000,000 seconds old, you should -be able to say that they're 31 Earth-years old. +be able to say that they're 31.69 Earth-years old. If you're wondering why Pluto didn't make the cut, go watch [this youtube video](http://www.youtube.com/watch?v=Z_2gbGXzFbs). From 3dd7e362d7008c6845957890d4803bc7631923b2 Mon Sep 17 00:00:00 2001 From: Nick Holden Date: Sun, 15 Oct 2017 00:48:36 -0700 Subject: [PATCH 16/16] crypto-square: Describe rectangles vs not The final example in the crypto-square description is inconsistent with the [source of the exercise](http://users.csc.calpoly.edu/~jdalbey/103/Projects/ProgrammingPractice.html), the canonical data, and with itself. This change does a few things to correct that: - While the encoding method is called a "square code," we're really dealing with all sorts of rectangles, squares included. The description gets this right up until the last example, and this change clarifies that. - In both the source of the exercise and the canonical data, when a "chunk" is shorter than the length of a row, a blank space is added to the end of that chunk. This change fixes that in the final example. - The copy before the final example says that "spaces should be distributed evenly across the last `n` rows," but it doesn't explain how. This change specifies that the spaces should be added to the end of each chunk. Here's a related discussion: https://github.com/exercism/problem-specifications/issues/356 https://github.com/exercism/problem-specifications/pull/929 --- exercises/crypto-square/README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/exercises/crypto-square/README.md b/exercises/crypto-square/README.md index b7813b9a8..b5b51db49 100644 --- a/exercises/crypto-square/README.md +++ b/exercises/crypto-square/README.md @@ -45,12 +45,14 @@ The message above is coded as: imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau ``` -Output the encoded text in chunks. Phrases that fill perfect squares -`(r X r)` should be output in `r`-length chunks separated by spaces. -Imperfect squares will have `n` empty spaces. Those spaces should be distributed evenly across the last `n` rows. +Output the encoded text in chunks. Phrases that fill perfect rectangles +`(r X c)` should be output `c` chunks of `r` length, separated by spaces. +Phrases that do not fill perfect rectangles will have `n` empty spaces. +Those spaces should be distributed evenly, added to the end of the last +`n` chunks. ```text -imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau +imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau ``` Notice that were we to stack these, we could visually decode the