trackler 2.2.1.59 → 2.2.1.60

Sign up to get free protection for your applications and to get access to all the features.
Files changed (234) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/food-chain/canonical-data.json +31 -23
  4. data/problem-specifications/exercises/house/canonical-data.json +45 -33
  5. data/problem-specifications/exercises/house/description.md +1 -1
  6. data/problem-specifications/exercises/kindergarten-garden/description.md +3 -3
  7. data/problem-specifications/exercises/nucleotide-count/description.md +2 -2
  8. data/problem-specifications/exercises/palindrome-products/description.md +1 -1
  9. data/problem-specifications/exercises/rectangles/description.md +9 -9
  10. data/problem-specifications/exercises/twelve-days/canonical-data.json +171 -0
  11. data/problem-specifications/exercises/two-bucket/description.md +7 -7
  12. data/tracks/c/docs/CONTRIBUTING.md +88 -39
  13. data/tracks/c/exercises/phone-number/test/test_phone_number.c +33 -29
  14. data/tracks/c/exercises/triangle/src/example.c +12 -12
  15. data/tracks/c/exercises/triangle/src/example.h +3 -3
  16. data/tracks/c/exercises/triangle/test/test_triangle.c +16 -16
  17. data/tracks/c/exercises/word-count/src/example.c +12 -3
  18. data/tracks/c/exercises/word-count/src/word_count.h +10 -5
  19. data/tracks/c/exercises/word-count/test/test_word_count.c +248 -58
  20. data/tracks/ceylon/exercises/hamming/source/hamming/HammingTest.ceylon +3 -3
  21. data/tracks/ceylon/exercises/leap/source/leap/LeapTest.ceylon +2 -2
  22. data/tracks/dart/exercises/phone-number/README.md +1 -1
  23. data/tracks/dart/exercises/phone-number/test/phone_number_test.dart +5 -5
  24. data/tracks/gnu-apl/.dockerignore +5 -0
  25. data/tracks/gnu-apl/.travis.yml +9 -4
  26. data/tracks/gnu-apl/Dockerfiles/release.dockerfile +15 -0
  27. data/tracks/gnu-apl/Dockerfiles/svn.dockerfile +22 -0
  28. data/tracks/gnu-apl/README.md +1 -1
  29. data/tracks/gnu-apl/bin/install-apl +26 -0
  30. data/tracks/gnu-apl/test.apl +7 -6
  31. data/tracks/go/docs/TESTS.md +1 -1
  32. data/tracks/haskell/.travis.yml +1 -1
  33. data/tracks/haskell/config.json +9 -0
  34. data/tracks/haskell/exercises/accumulate/stack.yaml +1 -1
  35. data/tracks/haskell/exercises/acronym/package.yaml +1 -1
  36. data/tracks/haskell/exercises/acronym/stack.yaml +1 -1
  37. data/tracks/haskell/exercises/acronym/test/Tests.hs +3 -0
  38. data/tracks/haskell/exercises/all-your-base/stack.yaml +1 -1
  39. data/tracks/haskell/exercises/allergies/stack.yaml +1 -1
  40. data/tracks/haskell/exercises/alphametics/examples/success-standard/src/Alphametics.hs +2 -1
  41. data/tracks/haskell/exercises/alphametics/stack.yaml +1 -1
  42. data/tracks/haskell/exercises/anagram/stack.yaml +1 -1
  43. data/tracks/haskell/exercises/atbash-cipher/stack.yaml +1 -1
  44. data/tracks/haskell/exercises/bank-account/stack.yaml +1 -1
  45. data/tracks/haskell/exercises/beer-song/stack.yaml +1 -1
  46. data/tracks/haskell/exercises/binary-search-tree/stack.yaml +1 -1
  47. data/tracks/haskell/exercises/binary/stack.yaml +1 -1
  48. data/tracks/haskell/exercises/bob/stack.yaml +1 -1
  49. data/tracks/haskell/exercises/bowling/stack.yaml +1 -1
  50. data/tracks/haskell/exercises/bracket-push/stack.yaml +1 -1
  51. data/tracks/haskell/exercises/change/stack.yaml +1 -1
  52. data/tracks/haskell/exercises/clock/stack.yaml +1 -1
  53. data/tracks/haskell/exercises/collatz-conjecture/stack.yaml +1 -1
  54. data/tracks/haskell/exercises/complex-numbers/stack.yaml +1 -1
  55. data/tracks/haskell/exercises/connect/stack.yaml +1 -1
  56. data/tracks/haskell/exercises/crypto-square/package.yaml +1 -1
  57. data/tracks/haskell/exercises/crypto-square/stack.yaml +1 -1
  58. data/tracks/haskell/exercises/crypto-square/test/Tests.hs +9 -5
  59. data/tracks/haskell/exercises/custom-set/package.yaml +1 -1
  60. data/tracks/haskell/exercises/custom-set/stack.yaml +1 -1
  61. data/tracks/haskell/exercises/custom-set/test/Tests.hs +3 -0
  62. data/tracks/haskell/exercises/diamond/stack.yaml +1 -1
  63. data/tracks/haskell/exercises/difference-of-squares/stack.yaml +1 -1
  64. data/tracks/haskell/exercises/dominoes/README.md +3 -3
  65. data/tracks/haskell/exercises/dominoes/stack.yaml +1 -1
  66. data/tracks/haskell/exercises/etl/stack.yaml +1 -1
  67. data/tracks/haskell/exercises/food-chain/stack.yaml +1 -1
  68. data/tracks/haskell/exercises/forth/stack.yaml +1 -1
  69. data/tracks/haskell/exercises/gigasecond/stack.yaml +1 -1
  70. data/tracks/haskell/exercises/go-counting/stack.yaml +1 -1
  71. data/tracks/haskell/exercises/grade-school/stack.yaml +1 -1
  72. data/tracks/haskell/exercises/grains/stack.yaml +1 -1
  73. data/tracks/haskell/exercises/hamming/package.yaml +1 -1
  74. data/tracks/haskell/exercises/hamming/stack.yaml +1 -1
  75. data/tracks/haskell/exercises/hamming/test/Tests.hs +4 -4
  76. data/tracks/haskell/exercises/hello-world/stack.yaml +1 -1
  77. data/tracks/haskell/exercises/hexadecimal/stack.yaml +1 -1
  78. data/tracks/haskell/exercises/house/README.md +1 -1
  79. data/tracks/haskell/exercises/house/stack.yaml +1 -1
  80. data/tracks/haskell/exercises/isbn-verifier/README.md +96 -0
  81. data/tracks/haskell/exercises/isbn-verifier/examples/success-standard/package.yaml +16 -0
  82. data/tracks/haskell/exercises/isbn-verifier/examples/success-standard/src/IsbnVerifier.hs +10 -0
  83. data/tracks/haskell/exercises/isbn-verifier/package.yaml +20 -0
  84. data/tracks/haskell/exercises/isbn-verifier/src/IsbnVerifier.hs +4 -0
  85. data/tracks/haskell/exercises/isbn-verifier/stack.yaml +1 -0
  86. data/tracks/haskell/exercises/isbn-verifier/test/Tests.hs +74 -0
  87. data/tracks/haskell/exercises/isogram/stack.yaml +1 -1
  88. data/tracks/haskell/exercises/kindergarten-garden/README.md +3 -3
  89. data/tracks/haskell/exercises/kindergarten-garden/stack.yaml +1 -1
  90. data/tracks/haskell/exercises/largest-series-product/stack.yaml +1 -1
  91. data/tracks/haskell/exercises/leap/package.yaml +1 -1
  92. data/tracks/haskell/exercises/leap/stack.yaml +1 -1
  93. data/tracks/haskell/exercises/leap/test/Tests.hs +1 -1
  94. data/tracks/haskell/exercises/lens-person/stack.yaml +1 -1
  95. data/tracks/haskell/exercises/linked-list/stack.yaml +1 -1
  96. data/tracks/haskell/exercises/list-ops/stack.yaml +1 -1
  97. data/tracks/haskell/exercises/luhn/stack.yaml +1 -1
  98. data/tracks/haskell/exercises/matrix/stack.yaml +1 -1
  99. data/tracks/haskell/exercises/meetup/stack.yaml +1 -1
  100. data/tracks/haskell/exercises/minesweeper/stack.yaml +1 -1
  101. data/tracks/haskell/exercises/nth-prime/package.yaml +1 -1
  102. data/tracks/haskell/exercises/nth-prime/stack.yaml +1 -1
  103. data/tracks/haskell/exercises/nucleotide-count/README.md +2 -2
  104. data/tracks/haskell/exercises/nucleotide-count/package.yaml +1 -1
  105. data/tracks/haskell/exercises/nucleotide-count/stack.yaml +1 -1
  106. data/tracks/haskell/exercises/nucleotide-count/test/Tests.hs +6 -0
  107. data/tracks/haskell/exercises/ocr-numbers/stack.yaml +1 -1
  108. data/tracks/haskell/exercises/octal/stack.yaml +1 -1
  109. data/tracks/haskell/exercises/palindrome-products/README.md +1 -1
  110. data/tracks/haskell/exercises/palindrome-products/stack.yaml +1 -1
  111. data/tracks/haskell/exercises/pangram/package.yaml +1 -1
  112. data/tracks/haskell/exercises/pangram/stack.yaml +1 -1
  113. data/tracks/haskell/exercises/pangram/test/Tests.hs +6 -2
  114. data/tracks/haskell/exercises/parallel-letter-frequency/stack.yaml +1 -1
  115. data/tracks/haskell/exercises/pascals-triangle/stack.yaml +1 -1
  116. data/tracks/haskell/exercises/perfect-numbers/stack.yaml +1 -1
  117. data/tracks/haskell/exercises/phone-number/README.md +1 -1
  118. data/tracks/haskell/exercises/phone-number/stack.yaml +1 -1
  119. data/tracks/haskell/exercises/pig-latin/stack.yaml +1 -1
  120. data/tracks/haskell/exercises/pov/stack.yaml +1 -1
  121. data/tracks/haskell/exercises/prime-factors/stack.yaml +1 -1
  122. data/tracks/haskell/exercises/pythagorean-triplet/stack.yaml +1 -1
  123. data/tracks/haskell/exercises/queen-attack/stack.yaml +1 -1
  124. data/tracks/haskell/exercises/raindrops/stack.yaml +1 -1
  125. data/tracks/haskell/exercises/rna-transcription/stack.yaml +1 -1
  126. data/tracks/haskell/exercises/robot-name/stack.yaml +1 -1
  127. data/tracks/haskell/exercises/robot-simulator/stack.yaml +1 -1
  128. data/tracks/haskell/exercises/roman-numerals/stack.yaml +1 -1
  129. data/tracks/haskell/exercises/rotational-cipher/stack.yaml +1 -1
  130. data/tracks/haskell/exercises/run-length-encoding/stack.yaml +1 -1
  131. data/tracks/haskell/exercises/saddle-points/stack.yaml +1 -1
  132. data/tracks/haskell/exercises/say/stack.yaml +1 -1
  133. data/tracks/haskell/exercises/scrabble-score/stack.yaml +1 -1
  134. data/tracks/haskell/exercises/secret-handshake/stack.yaml +1 -1
  135. data/tracks/haskell/exercises/series/stack.yaml +1 -1
  136. data/tracks/haskell/exercises/sgf-parsing/stack.yaml +1 -1
  137. data/tracks/haskell/exercises/sieve/stack.yaml +1 -1
  138. data/tracks/haskell/exercises/simple-cipher/stack.yaml +1 -1
  139. data/tracks/haskell/exercises/simple-linked-list/stack.yaml +1 -1
  140. data/tracks/haskell/exercises/space-age/stack.yaml +1 -1
  141. data/tracks/haskell/exercises/spiral-matrix/stack.yaml +1 -1
  142. data/tracks/haskell/exercises/strain/stack.yaml +1 -1
  143. data/tracks/haskell/exercises/sublist/stack.yaml +1 -1
  144. data/tracks/haskell/exercises/sum-of-multiples/stack.yaml +1 -1
  145. data/tracks/haskell/exercises/triangle/stack.yaml +1 -1
  146. data/tracks/haskell/exercises/trinary/stack.yaml +1 -1
  147. data/tracks/haskell/exercises/word-count/stack.yaml +1 -1
  148. data/tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs +6 -5
  149. data/tracks/haskell/exercises/wordy/stack.yaml +1 -1
  150. data/tracks/haskell/exercises/zebra-puzzle/package.yaml +1 -1
  151. data/tracks/haskell/exercises/zebra-puzzle/stack.yaml +1 -1
  152. data/tracks/haskell/exercises/zipper/README.md +1 -1
  153. data/tracks/haskell/exercises/zipper/stack.yaml +1 -1
  154. data/tracks/javascript/.eslintignore +43 -0
  155. data/tracks/javascript/.travis.yml +2 -1
  156. data/tracks/javascript/exercises/bowling/README.md +5 -5
  157. data/tracks/javascript/exercises/crypto-square/example.js +2 -1
  158. data/tracks/javascript/exercises/diffie-hellman/diffie-hellman.spec.js +20 -20
  159. data/tracks/javascript/exercises/diffie-hellman/example.js +10 -10
  160. data/tracks/javascript/exercises/largest-series-product/example.js +2 -1
  161. data/tracks/javascript/exercises/sieve/example.js +5 -2
  162. data/tracks/javascript/package-lock.json +129 -76
  163. data/tracks/javascript/package.json +6 -5
  164. data/tracks/ocaml/config.json +10 -0
  165. data/tracks/ocaml/exercises/hamming/test.ml +3 -3
  166. data/tracks/ocaml/exercises/leap/test.ml +2 -2
  167. data/tracks/ocaml/exercises/pangram/test.ml +3 -3
  168. data/tracks/ocaml/exercises/rectangles/.merlin +5 -0
  169. data/tracks/ocaml/exercises/rectangles/Makefile +11 -0
  170. data/tracks/ocaml/exercises/rectangles/example.ml +30 -0
  171. data/tracks/ocaml/exercises/rectangles/rectangles.mli +1 -0
  172. data/tracks/ocaml/exercises/rectangles/test.ml +72 -0
  173. data/tracks/ocaml/tools/test-generator/templates/ocaml/leap/test.ml +1 -1
  174. data/tracks/ocaml/tools/test-generator/templates/ocaml/rectangles/test.ml +15 -0
  175. data/tracks/pony/README.md +1 -1
  176. data/tracks/pony/exercises/atbash-cipher/example.pony +6 -10
  177. data/tracks/pony/exercises/difference-of-squares/example.pony +3 -7
  178. data/tracks/rust/_test/count-ignores.sh +2 -2
  179. data/tracks/rust/config.json +24 -0
  180. data/tracks/rust/config/maintainers.json +10 -0
  181. data/tracks/rust/exercises/acronym/README.md +0 -1
  182. data/tracks/rust/exercises/all-your-base/README.md +1 -1
  183. data/tracks/rust/exercises/allergies/README.md +0 -1
  184. data/tracks/rust/exercises/alphametics/README.md +2 -2
  185. data/tracks/rust/exercises/atbash-cipher/README.md +2 -1
  186. data/tracks/rust/exercises/beer-song/README.md +1 -1
  187. data/tracks/rust/exercises/bowling/README.md +20 -6
  188. data/tracks/rust/exercises/circular-buffer/README.md +13 -6
  189. data/tracks/rust/exercises/crypto-square/README.md +10 -8
  190. data/tracks/rust/exercises/dominoes/Cargo.toml +1 -1
  191. data/tracks/rust/exercises/etl/README.md +2 -0
  192. data/tracks/rust/exercises/grade-school/README.md +0 -1
  193. data/tracks/rust/exercises/grains/README.md +0 -1
  194. data/tracks/rust/exercises/isbn-verifier/Cargo.lock +4 -0
  195. data/tracks/rust/exercises/isbn-verifier/Cargo.toml +3 -0
  196. data/tracks/rust/exercises/isbn-verifier/README.md +74 -0
  197. data/tracks/rust/exercises/isbn-verifier/example.rs +44 -0
  198. data/tracks/rust/exercises/isbn-verifier/src/lib.rs +4 -0
  199. data/tracks/rust/exercises/isbn-verifier/tests/isbn-verifier.rs +83 -0
  200. data/tracks/rust/exercises/isogram/README.md +3 -2
  201. data/tracks/rust/exercises/leap/README.md +1 -1
  202. data/tracks/rust/exercises/luhn/README.md +7 -7
  203. data/tracks/rust/exercises/nucleotide-count/README.md +8 -22
  204. data/tracks/rust/exercises/ocr-numbers/README.md +5 -5
  205. data/tracks/rust/exercises/pangram/README.md +1 -1
  206. data/tracks/rust/exercises/pascals-triangle/README.md +1 -1
  207. data/tracks/rust/exercises/perfect-numbers/README.md +2 -2
  208. data/tracks/rust/exercises/phone-number/README.md +3 -2
  209. data/tracks/rust/exercises/protein-translation/README.md +4 -5
  210. data/tracks/rust/exercises/proverb/README.md +13 -11
  211. data/tracks/rust/exercises/proverb/example.rs +14 -15
  212. data/tracks/rust/exercises/proverb/tests/proverb.rs +40 -13
  213. data/tracks/rust/exercises/pythagorean-triplet/README.md +3 -3
  214. data/tracks/rust/exercises/queen-attack/README.md +1 -1
  215. data/tracks/rust/exercises/rectangles/README.md +7 -7
  216. data/tracks/rust/exercises/roman-numerals/README.md +1 -1
  217. data/tracks/rust/exercises/rotational-cipher/README.md +2 -1
  218. data/tracks/rust/exercises/run-length-encoding/README.md +4 -4
  219. data/tracks/rust/exercises/scrabble-score/README.md +3 -1
  220. data/tracks/rust/exercises/space-age/README.md +1 -1
  221. data/tracks/rust/exercises/tournament/README.md +5 -5
  222. data/tracks/rust/exercises/triangle/README.md +9 -6
  223. data/tracks/rust/exercises/two-bucket/Cargo.lock +4 -0
  224. data/tracks/rust/exercises/two-bucket/Cargo.toml +3 -0
  225. data/tracks/rust/exercises/two-bucket/README.md +69 -0
  226. data/tracks/rust/exercises/two-bucket/example.rs +129 -0
  227. data/tracks/rust/exercises/two-bucket/src/lib.rs +26 -0
  228. data/tracks/rust/exercises/two-bucket/tests/two-bucket.rs +68 -0
  229. data/tracks/rust/exercises/variable-length-quantity/README.md +6 -7
  230. data/tracks/rust/exercises/word-count/README.md +1 -2
  231. data/tracks/rust/exercises/wordy/README.md +0 -5
  232. metadata +33 -4
  233. data/tracks/go/.github/PULL_REQUEST_TEMPLATE.md +0 -23
  234. data/tracks/ruby/.github/PULL_REQUEST_TEMPLATE.md +0 -40
@@ -9,7 +9,7 @@ To begin with, convert a simple binary font to a string containing 0 or 1.
9
9
 
10
10
  The binary font uses pipes and underscores, four rows high and three columns wide.
11
11
 
12
- ```
12
+ ```text
13
13
  _ #
14
14
  | | # zero.
15
15
  |_| #
@@ -18,7 +18,7 @@ The binary font uses pipes and underscores, four rows high and three columns wid
18
18
 
19
19
  Is converted to "0"
20
20
 
21
- ```
21
+ ```text
22
22
  #
23
23
  | # one.
24
24
  | #
@@ -39,7 +39,7 @@ Update your program to recognize multi-character binary strings, replacing garbl
39
39
 
40
40
  Update your program to recognize all numbers 0 through 9, both individually and as part of a larger string.
41
41
 
42
- ```
42
+ ```text
43
43
  _
44
44
  _|
45
45
  |_
@@ -48,7 +48,7 @@ Update your program to recognize all numbers 0 through 9, both individually and
48
48
 
49
49
  Is converted to "2"
50
50
 
51
- ```
51
+ ```text
52
52
  _ _ _ _ _ _ _ _ #
53
53
  | _| _||_||_ |_ ||_||_|| | # decimal numbers.
54
54
  ||_ _| | _||_| ||_| _||_| #
@@ -61,7 +61,7 @@ Is converted to "1234567890"
61
61
 
62
62
  Update your program to handle multiple numbers, one per line. When converting several lines, join the lines with commas.
63
63
 
64
- ```
64
+ ```text
65
65
  _ _
66
66
  | _| _|
67
67
  ||_ _|
@@ -2,7 +2,7 @@
2
2
 
3
3
  Determine if a sentence is a pangram. A pangram (Greek: παν γράμμα, pan gramma,
4
4
  "every letter") is a sentence using every letter of the alphabet at least once.
5
- The best known English pangram is:
5
+ The best known English pangram is:
6
6
  > The quick brown fox jumps over the lazy dog.
7
7
 
8
8
  The alphabet used consists of ASCII letters `a` to `z`, inclusive, and is case
@@ -5,7 +5,7 @@ Compute Pascal's triangle up to a given number of rows.
5
5
  In Pascal's Triangle each number is computed by adding the numbers to
6
6
  the right and left of the current position in the previous row.
7
7
 
8
- ```plain
8
+ ```text
9
9
  1
10
10
  1 1
11
11
  1 2 1
@@ -5,7 +5,7 @@ Nicomachus' (60 - 120 CE) classification scheme for natural numbers.
5
5
 
6
6
  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
7
7
 
8
- - **Perfect**: aliquot sum = number
8
+ - **Perfect**: aliquot sum = number
9
9
  - 6 is a perfect number because (1 + 2 + 3) = 6
10
10
  - 28 is a perfect number because (1 + 2 + 4 + 7 + 14) = 28
11
11
  - **Abundant**: aliquot sum > number
@@ -14,7 +14,7 @@ The Greek mathematician [Nicomachus](https://en.wikipedia.org/wiki/Nicomachus) d
14
14
  - **Deficient**: aliquot sum < number
15
15
  - 8 is a deficient number because (1 + 2 + 4) = 7
16
16
  - Prime numbers are deficient
17
-
17
+
18
18
  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**.
19
19
 
20
20
  ## Rust Installation
@@ -6,11 +6,12 @@ The **North American Numbering Plan (NANP)** is a telephone numbering system use
6
6
 
7
7
  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*.
8
8
 
9
-
10
9
  The format is usually represented as
11
- ```
10
+
11
+ ```text
12
12
  (NXX)-NXX-XXXX
13
13
  ```
14
+
14
15
  where `N` is any digit from 2 through 9 and `X` is any digit from 0 through 9.
15
16
 
16
17
  Your task is to clean up differently formated telephone numbers by removing punctuation and the country code (1) if present.
@@ -10,17 +10,17 @@ Codons: `"AUG", "UUU", "UCU"`
10
10
  => which become a polypeptide with the following sequence =>
11
11
 
12
12
  Protein: `"Methionine", "Phenylalanine", "Serine"`
13
-
13
+
14
14
  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.
15
- However, feel free to expand the list in the test suite to include them all.
15
+ However, feel free to expand the list in the test suite to include them all.
16
16
 
17
- 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.
17
+ 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.
18
18
 
19
19
  All subsequent codons after are ignored, like this:
20
20
 
21
21
  RNA: `"AUGUUUUCUUAAAUG"` =>
22
22
 
23
- Codons: `"AUG", "UUU", "UCU", "UAG", "AUG"` =>
23
+ Codons: `"AUG", "UUU", "UCU", "UAG", "AUG"` =>
24
24
 
25
25
  Protein: `"Methionine", "Phenylalanine", "Serine"`
26
26
 
@@ -39,7 +39,6 @@ UGU, UGC | Cysteine
39
39
  UGG | Tryptophan
40
40
  UAA, UAG, UGA | STOP
41
41
 
42
-
43
42
  Learn more about [protein translation on Wikipedia](http://en.wikipedia.org/wiki/Translation_(biology))
44
43
 
45
44
  ## Rust Installation
@@ -1,16 +1,18 @@
1
1
  # Proverb
2
2
 
3
- For want of a horseshoe nail, a kingdom was lost, or so the saying goes. Output
4
- the full text of this proverbial rhyme:
5
-
6
- > For want of a nail the shoe was lost.
7
- > For want of a shoe the horse was lost.
8
- > For want of a horse the rider was lost.
9
- > For want of a rider the message was lost.
10
- > For want of a message the battle was lost.
11
- > For want of a battle the kingdom was lost.
12
- > And all for the want of a horseshoe nail.
13
-
3
+ For want of a horseshoe nail, a kingdom was lost, or so the saying goes.
4
+
5
+ Output the full text of this proverbial rhyme:
6
+
7
+ ```text
8
+ For want of a nail the shoe was lost.
9
+ For want of a shoe the horse was lost.
10
+ For want of a horse the rider was lost.
11
+ For want of a rider the message was lost.
12
+ For want of a message the battle was lost.
13
+ For want of a battle the kingdom was lost.
14
+ And all for the want of a horseshoe nail.
15
+ ```
14
16
  ## Rust Installation
15
17
 
16
18
  Refer to the [exercism help page][help-page] for Rust installation and learning
@@ -1,17 +1,16 @@
1
- pub fn build_proverb(list: Vec<&str>) -> String {
2
- if list.len() == 0 {
3
- return String::new();
1
+
2
+ pub fn build_proverb(items: Vec<&str>) -> String {
3
+ let mut stanzas = Vec::with_capacity(items.len());
4
+ for index in 0..items.len() {
5
+ if index == items.len() - 1 {
6
+ stanzas.push(format!("And all for the want of a {}.", items[0]));
7
+ } else {
8
+ stanzas.push(format!(
9
+ "For want of a {} the {} was lost.",
10
+ items[index],
11
+ items[index + 1]
12
+ ));
13
+ }
4
14
  }
5
- let mut out: Vec<String> = vec![];
6
- for i in 1..list.len() {
7
- out.push(format!("For want of a {} the {} was lost.", list[i-1], list[i]));
8
- }
9
- let end: String;
10
- if list.len() > 2 {
11
- end = format!("{}{} {}", list[2], list[1], list[0]);
12
- } else {
13
- end = format!("{}", list[0]);
14
- }
15
- out.push(format!("And all for the want of a {}.", end));
16
- out.join("\n")
15
+ stanzas.join("\n")
17
16
  }
@@ -5,8 +5,10 @@ use proverb::build_proverb;
5
5
  #[test]
6
6
  fn test_two_pieces() {
7
7
  let input = vec!["nail", "shoe"];
8
- let expected = vec!["For want of a nail the shoe was lost.",
9
- "And all for the want of a nail."].join("\n");
8
+ let expected = vec![
9
+ "For want of a nail the shoe was lost.",
10
+ "And all for the want of a nail.",
11
+ ].join("\n");
10
12
  assert_eq!(build_proverb(input), expected);
11
13
  }
12
14
 
@@ -15,9 +17,11 @@ fn test_two_pieces() {
15
17
  #[ignore]
16
18
  fn test_three_pieces() {
17
19
  let input = vec!["nail", "shoe", "horse"];
18
- let expected = vec!["For want of a nail the shoe was lost.",
19
- "For want of a shoe the horse was lost.",
20
- "And all for the want of a horseshoe nail."].join("\n");
20
+ let expected = vec![
21
+ "For want of a nail the shoe was lost.",
22
+ "For want of a shoe the horse was lost.",
23
+ "And all for the want of a nail.",
24
+ ].join("\n");
21
25
  assert_eq!(build_proverb(input), expected);
22
26
  }
23
27
 
@@ -40,13 +44,36 @@ fn test_zero_pieces() {
40
44
  #[test]
41
45
  #[ignore]
42
46
  fn test_full() {
43
- let input = vec!["nail", "shoe", "horse", "rider", "message", "battle", "kingdom"];
44
- let expected = vec!["For want of a nail the shoe was lost.",
45
- "For want of a shoe the horse was lost.",
46
- "For want of a horse the rider was lost.",
47
- "For want of a rider the message was lost.",
48
- "For want of a message the battle was lost.",
49
- "For want of a battle the kingdom was lost.",
50
- "And all for the want of a horseshoe nail."].join("\n");
47
+ let input = vec![
48
+ "nail",
49
+ "shoe",
50
+ "horse",
51
+ "rider",
52
+ "message",
53
+ "battle",
54
+ "kingdom",
55
+ ];
56
+ let expected = vec![
57
+ "For want of a nail the shoe was lost.",
58
+ "For want of a shoe the horse was lost.",
59
+ "For want of a horse the rider was lost.",
60
+ "For want of a rider the message was lost.",
61
+ "For want of a message the battle was lost.",
62
+ "For want of a battle the kingdom was lost.",
63
+ "And all for the want of a nail.",
64
+ ].join("\n");
65
+ assert_eq!(build_proverb(input), expected);
66
+ }
67
+
68
+ #[test]
69
+ #[ignore]
70
+ fn test_three_pieces_modernized() {
71
+ let input = vec!["pin", "gun", "soldier", "battle"];
72
+ let expected = vec![
73
+ "For want of a pin the gun was lost.",
74
+ "For want of a gun the soldier was lost.",
75
+ "For want of a soldier the battle was lost.",
76
+ "And all for the want of a pin.",
77
+ ].join("\n");
51
78
  assert_eq!(build_proverb(input), expected);
52
79
  }
@@ -3,13 +3,13 @@
3
3
  A Pythagorean triplet is a set of three natural numbers, {a, b, c}, for
4
4
  which,
5
5
 
6
- ```
6
+ ```text
7
7
  a**2 + b**2 = c**2
8
8
  ```
9
9
 
10
- For example,
10
+ For example,
11
11
 
12
- ```
12
+ ```text
13
13
  3**2 + 4**2 = 9 + 16 = 25 = 5**2.
14
14
  ```
15
15
 
@@ -11,7 +11,7 @@ A chessboard can be represented by an 8 by 8 array.
11
11
  So if you're told the white queen is at (2, 3) and the black queen at
12
12
  (5, 6), then you'd know you've got a set-up like so:
13
13
 
14
- ```plain
14
+ ```text
15
15
  _ _ _ _ _ _ _ _
16
16
  _ _ _ _ _ _ _ _
17
17
  _ _ _ W _ _ _ _
@@ -2,7 +2,7 @@
2
2
 
3
3
  Count the rectangles in an ASCII diagram like the one below.
4
4
 
5
- ```
5
+ ```text
6
6
  +--+
7
7
  ++ |
8
8
  +-++--+
@@ -12,7 +12,7 @@ Count the rectangles in an ASCII diagram like the one below.
12
12
 
13
13
  The above diagram contains 6 rectangles:
14
14
 
15
- ```
15
+ ```text
16
16
 
17
17
 
18
18
  +-----+
@@ -20,7 +20,7 @@ The above diagram contains 6 rectangles:
20
20
  +-----+
21
21
  ```
22
22
 
23
- ```
23
+ ```text
24
24
  +--+
25
25
  | |
26
26
  | |
@@ -28,7 +28,7 @@ The above diagram contains 6 rectangles:
28
28
  +--+
29
29
  ```
30
30
 
31
- ```
31
+ ```text
32
32
  +--+
33
33
  | |
34
34
  +--+
@@ -36,7 +36,7 @@ The above diagram contains 6 rectangles:
36
36
 
37
37
  ```
38
38
 
39
- ```
39
+ ```text
40
40
 
41
41
 
42
42
  +--+
@@ -44,7 +44,7 @@ The above diagram contains 6 rectangles:
44
44
  +--+
45
45
  ```
46
46
 
47
- ```
47
+ ```text
48
48
 
49
49
 
50
50
  +--+
@@ -52,7 +52,7 @@ The above diagram contains 6 rectangles:
52
52
  +--+
53
53
  ```
54
54
 
55
- ```
55
+ ```text
56
56
 
57
57
  ++
58
58
  ++
@@ -14,7 +14,7 @@ The Romans wrote numbers using letters - I, V, X, L, C, D, M. (notice
14
14
  these letters have lots of straight lines and are hence easy to hack
15
15
  into stone tablets).
16
16
 
17
- ```
17
+ ```text
18
18
  1 => I
19
19
  10 => X
20
20
  7 => VII
@@ -13,7 +13,7 @@ The most commonly used rotational cipher is `ROT13`.
13
13
 
14
14
  A `ROT13` on the Latin alphabet would be as follows:
15
15
 
16
- ```plain
16
+ ```text
17
17
  Plain: abcdefghijklmnopqrstuvwxyz
18
18
  Cipher: nopqrstuvwxyzabcdefghijklm
19
19
  ```
@@ -23,6 +23,7 @@ It is stronger than the Atbash cipher because it has 27 possible keys, and 25 us
23
23
  Ciphertext is written out in the same formatting as the input including spaces and punctuation.
24
24
 
25
25
  ## Examples
26
+
26
27
  - ROT5 `omg` gives `trl`
27
28
  - ROT0 `c` gives `c`
28
29
  - ROT26 `Cool` gives `Cool`
@@ -7,20 +7,20 @@ Run-length encoding (RLE) is a simple form of data compression, where runs
7
7
 
8
8
  For example we can represent the original 53 characters with only 13.
9
9
 
10
- ```
10
+ ```text
11
11
  "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB" -> "12WB12W3B24WB"
12
12
  ```
13
13
 
14
14
  RLE allows the original data to be perfectly reconstructed from
15
15
  the compressed data, which makes it a lossless data compression.
16
16
 
17
- ```
17
+ ```text
18
18
  "AABCCCDEEEE" -> "2AB3CD4E" -> "AABCCCDEEEE"
19
19
  ```
20
20
 
21
21
  For simplicity, you can assume that the unencoded string will only contain
22
- the letters A through Z (either lower or upper case) and whitespace. This way
23
- data to be encoded will never contain any numbers and numbers inside data to
22
+ the letters A through Z (either lower or upper case) and whitespace. This way
23
+ data to be encoded will never contain any numbers and numbers inside data to
24
24
  be decoded always represent the count for the following character.
25
25
 
26
26
  ## Rust Installation
@@ -6,7 +6,7 @@ Given a word, compute the scrabble score for that word.
6
6
 
7
7
  You'll need these:
8
8
 
9
- ```plain
9
+ ```text
10
10
  Letter Value
11
11
  A, E, I, O, U, L, N, R, S, T 1
12
12
  D, G 2
@@ -18,6 +18,7 @@ Q, Z 10
18
18
  ```
19
19
 
20
20
  ## Examples
21
+
21
22
  "cabbage" should be scored as worth 14 points:
22
23
 
23
24
  - 3 points for C
@@ -34,6 +35,7 @@ And to total:
34
35
  - = 14
35
36
 
36
37
  ## Extensions
38
+
37
39
  - You can play a double or a triple letter.
38
40
  - You can play a double or a triple word.
39
41
 
@@ -12,7 +12,7 @@ Given an age in seconds, calculate how old someone would be on:
12
12
  - Neptune: orbital period 164.79132 Earth years
13
13
 
14
14
  So if you were told someone were 1,000,000,000 seconds old, you should
15
- be able to say that they're 31 Earth-years old.
15
+ be able to say that they're 31.69 Earth-years old.
16
16
 
17
17
  If you're wondering why Pluto didn't make the cut, go watch [this
18
18
  youtube video](http://www.youtube.com/watch?v=Z_2gbGXzFbs).
@@ -5,7 +5,7 @@ Tally the results of a small football competition.
5
5
  Based on an input file containing which team played against which and what the
6
6
  outcome was, create a file with a table like this:
7
7
 
8
- ```
8
+ ```text
9
9
  Team | MP | W | D | L | P
10
10
  Devastating Donkeys | 3 | 2 | 1 | 0 | 7
11
11
  Allegoric Alaskans | 3 | 2 | 0 | 1 | 6
@@ -31,7 +31,7 @@ Input
31
31
 
32
32
  Your tallying program will receive input that looks like:
33
33
 
34
- ```
34
+ ```text
35
35
  Allegoric Alaskans;Blithering Badgers;win
36
36
  Devastating Donkeys;Courageous Californians;draw
37
37
  Devastating Donkeys;Allegoric Alaskans;win
@@ -42,7 +42,7 @@ Allegoric Alaskans;Courageous Californians;win
42
42
 
43
43
  The result of the match refers to the first team listed. So this line
44
44
 
45
- ```
45
+ ```text
46
46
  Allegoric Alaskans;Blithering Badgers;win
47
47
  ```
48
48
 
@@ -50,7 +50,7 @@ Means that the Allegoric Alaskans beat the Blithering Badgers.
50
50
 
51
51
  This line:
52
52
 
53
- ```
53
+ ```text
54
54
  Courageous Californians;Blithering Badgers;loss
55
55
  ```
56
56
 
@@ -58,7 +58,7 @@ Means that the Blithering Badgers beat the Courageous Californians.
58
58
 
59
59
  And this line:
60
60
 
61
- ```
61
+ ```text
62
62
  Devastating Donkeys;Courageous Californians;draw
63
63
  ```
64
64