trackler 2.2.0.3 → 2.2.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (463) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/list-ops/canonical-data.json +27 -11
  4. data/problem-specifications/exercises/rotational-cipher/canonical-data.json +8 -8
  5. data/tracks/clojure/config.json +240 -63
  6. data/tracks/cpp/CMakeLists.txt +1 -0
  7. data/tracks/cpp/config.json +8 -0
  8. data/tracks/cpp/exercises/bracket-push/CMakeLists.txt +52 -0
  9. data/tracks/cpp/exercises/bracket-push/bracket_push_test.cpp +75 -0
  10. data/tracks/cpp/exercises/bracket-push/example.cpp +28 -0
  11. data/tracks/cpp/exercises/bracket-push/example.h +13 -0
  12. data/tracks/ecmascript/config.json +235 -71
  13. data/tracks/ecmascript/config/exercise_readme.go.tmpl +16 -0
  14. data/tracks/ecmascript/exercises/accumulate/README.md +65 -0
  15. data/tracks/ecmascript/exercises/acronym/README.md +45 -0
  16. data/tracks/ecmascript/exercises/all-your-base/README.md +65 -0
  17. data/tracks/ecmascript/exercises/allergies/README.md +67 -0
  18. data/tracks/ecmascript/exercises/alphametics/README.md +65 -0
  19. data/tracks/ecmascript/exercises/anagram/README.md +43 -0
  20. data/tracks/ecmascript/exercises/atbash-cipher/README.md +64 -0
  21. data/tracks/ecmascript/exercises/beer-song/README.md +357 -0
  22. data/tracks/ecmascript/exercises/binary-search-tree/README.md +90 -0
  23. data/tracks/ecmascript/exercises/binary-search/README.md +71 -0
  24. data/tracks/ecmascript/exercises/binary/README.md +65 -0
  25. data/tracks/ecmascript/exercises/bob/README.md +48 -0
  26. data/tracks/ecmascript/exercises/bracket-push/README.md +40 -0
  27. data/tracks/ecmascript/exercises/circular-buffer/README.md +80 -0
  28. data/tracks/ecmascript/exercises/clock/README.md +43 -0
  29. data/tracks/ecmascript/exercises/connect/README.md +64 -0
  30. data/tracks/ecmascript/exercises/crypto-square/README.md +104 -0
  31. data/tracks/ecmascript/exercises/custom-set/README.md +41 -0
  32. data/tracks/ecmascript/exercises/diamond/README.md +89 -0
  33. data/tracks/ecmascript/exercises/difference-of-squares/README.md +49 -0
  34. data/tracks/ecmascript/exercises/diffie-hellman/README.md +74 -0
  35. data/tracks/ecmascript/exercises/etl/README.md +81 -0
  36. data/tracks/ecmascript/exercises/flatten-array/README.md +48 -0
  37. data/tracks/ecmascript/exercises/food-chain/README.md +100 -0
  38. data/tracks/ecmascript/exercises/gigasecond/README.md +41 -0
  39. data/tracks/ecmascript/exercises/grade-school/README.md +72 -0
  40. data/tracks/ecmascript/exercises/grains/README.md +64 -0
  41. data/tracks/ecmascript/exercises/hamming/README.md +72 -0
  42. data/tracks/ecmascript/exercises/hello-world/README.md +51 -0
  43. data/tracks/ecmascript/exercises/hexadecimal/README.md +44 -0
  44. data/tracks/ecmascript/exercises/isogram/README.md +49 -0
  45. data/tracks/ecmascript/exercises/kindergarten-garden/README.md +96 -0
  46. data/tracks/ecmascript/exercises/largest-series-product/README.md +50 -0
  47. data/tracks/ecmascript/exercises/leap/README.md +63 -0
  48. data/tracks/ecmascript/exercises/linked-list/README.md +64 -0
  49. data/tracks/ecmascript/exercises/list-ops/README.md +40 -0
  50. data/tracks/ecmascript/exercises/luhn/README.md +101 -0
  51. data/tracks/ecmascript/exercises/matrix/README.md +75 -0
  52. data/tracks/ecmascript/exercises/meetup/README.md +60 -0
  53. data/tracks/ecmascript/exercises/minesweeper/README.md +60 -0
  54. data/tracks/ecmascript/exercises/nth-prime/README.md +45 -0
  55. data/tracks/ecmascript/exercises/ocr-numbers/README.md +115 -0
  56. data/tracks/ecmascript/exercises/octal/README.md +79 -0
  57. data/tracks/ecmascript/exercises/palindrome-products/README.md +70 -0
  58. data/tracks/ecmascript/exercises/pangram/README.md +45 -0
  59. data/tracks/ecmascript/exercises/pascals-triangle/README.md +51 -0
  60. data/tracks/ecmascript/exercises/perfect-numbers/README.md +54 -0
  61. data/tracks/ecmascript/exercises/phone-number/README.md +64 -0
  62. data/tracks/ecmascript/exercises/pig-latin/README.md +54 -0
  63. data/tracks/ecmascript/exercises/prime-factors/README.md +66 -0
  64. data/tracks/ecmascript/exercises/pythagorean-triplet/README.md +54 -0
  65. data/tracks/ecmascript/exercises/queen-attack/README.md +63 -0
  66. data/tracks/ecmascript/exercises/raindrops/README.md +54 -0
  67. data/tracks/ecmascript/exercises/rna-transcription/README.md +55 -0
  68. data/tracks/ecmascript/exercises/robot-name/README.md +52 -0
  69. data/tracks/ecmascript/exercises/robot-simulator/README.md +64 -0
  70. data/tracks/ecmascript/exercises/roman-numerals/README.md +79 -0
  71. data/tracks/ecmascript/exercises/saddle-points/README.md +63 -0
  72. data/tracks/ecmascript/exercises/say/README.md +99 -0
  73. data/tracks/ecmascript/exercises/scrabble-score/README.md +74 -0
  74. data/tracks/ecmascript/exercises/secret-handshake/README.md +65 -0
  75. data/tracks/ecmascript/exercises/series/README.md +57 -0
  76. data/tracks/ecmascript/exercises/sieve/README.md +64 -0
  77. data/tracks/ecmascript/exercises/simple-cipher/README.md +120 -0
  78. data/tracks/ecmascript/exercises/space-age/README.md +54 -0
  79. data/tracks/ecmascript/exercises/strain/README.md +70 -0
  80. data/tracks/ecmascript/exercises/sublist/README.md +50 -0
  81. data/tracks/ecmascript/exercises/sublist/example.js +30 -0
  82. data/tracks/ecmascript/exercises/sublist/package.json +69 -0
  83. data/tracks/ecmascript/exercises/sublist/sublist.spec.js +126 -0
  84. data/tracks/ecmascript/exercises/sum-of-multiples/README.md +48 -0
  85. data/tracks/ecmascript/exercises/triangle/README.md +56 -0
  86. data/tracks/ecmascript/exercises/trinary/README.md +58 -0
  87. data/tracks/ecmascript/exercises/two-bucket/README.md +66 -0
  88. data/tracks/ecmascript/exercises/word-count/README.md +49 -0
  89. data/tracks/ecmascript/exercises/wordy/README.md +93 -0
  90. data/tracks/go/.gitignore +1 -0
  91. data/tracks/go/README.md +2 -0
  92. data/tracks/go/config/exercise_readme.go.tmpl +16 -0
  93. data/tracks/go/exercises/accumulate/README.md +53 -0
  94. data/tracks/go/exercises/acronym/README.md +33 -0
  95. data/tracks/go/exercises/all-your-base/README.md +53 -0
  96. data/tracks/go/exercises/allergies/README.md +55 -0
  97. data/tracks/go/exercises/anagram/README.md +31 -0
  98. data/tracks/go/exercises/atbash-cipher/README.md +52 -0
  99. data/tracks/go/exercises/bank-account/README.md +48 -0
  100. data/tracks/go/exercises/beer-song/README.md +345 -0
  101. data/tracks/go/exercises/binary-search-tree/README.md +78 -0
  102. data/tracks/go/exercises/binary-search/README.md +59 -0
  103. data/tracks/go/exercises/binary/README.md +53 -0
  104. data/tracks/go/exercises/bob/README.md +36 -0
  105. data/tracks/go/exercises/bowling/README.md +71 -0
  106. data/tracks/go/exercises/bracket-push/README.md +28 -0
  107. data/tracks/go/exercises/change/README.md +41 -0
  108. data/tracks/go/exercises/circular-buffer/README.md +68 -0
  109. data/tracks/go/exercises/clock/README.md +31 -0
  110. data/tracks/go/exercises/connect/README.md +52 -0
  111. data/tracks/go/exercises/counter/README.md +42 -0
  112. data/tracks/go/exercises/crypto-square/README.md +92 -0
  113. data/tracks/go/exercises/custom-set/README.md +29 -0
  114. data/tracks/go/exercises/diamond/README.md +77 -0
  115. data/tracks/go/exercises/difference-of-squares/README.md +37 -0
  116. data/tracks/go/exercises/diffie-hellman/README.md +62 -0
  117. data/tracks/go/exercises/error-handling/README.md +31 -0
  118. data/tracks/go/exercises/etl/README.md +69 -0
  119. data/tracks/go/exercises/food-chain/README.md +88 -0
  120. data/tracks/go/exercises/forth/README.md +47 -0
  121. data/tracks/go/exercises/gigasecond/README.md +29 -0
  122. data/tracks/go/exercises/grade-school/README.md +60 -0
  123. data/tracks/go/exercises/grains/README.md +52 -0
  124. data/tracks/go/exercises/hamming/README.md +60 -0
  125. data/tracks/go/exercises/hello-world/README.md +39 -0
  126. data/tracks/go/exercises/hexadecimal/README.md +32 -0
  127. data/tracks/go/exercises/house/README.md +131 -0
  128. data/tracks/go/exercises/isogram/README.md +37 -0
  129. data/tracks/go/exercises/kindergarten-garden/README.md +84 -0
  130. data/tracks/go/exercises/largest-series-product/README.md +38 -0
  131. data/tracks/go/exercises/leap/README.md +51 -0
  132. data/tracks/go/exercises/ledger/README.md +36 -0
  133. data/tracks/go/exercises/luhn/README.md +89 -0
  134. data/tracks/go/exercises/matrix/README.md +63 -0
  135. data/tracks/go/exercises/meetup/README.md +48 -0
  136. data/tracks/go/exercises/minesweeper/README.md +48 -0
  137. data/tracks/go/exercises/nth-prime/README.md +33 -0
  138. data/tracks/go/exercises/nucleotide-count/README.md +51 -0
  139. data/tracks/go/exercises/ocr-numbers/README.md +103 -0
  140. data/tracks/go/exercises/octal/README.md +67 -0
  141. data/tracks/go/exercises/paasio/README.md +38 -0
  142. data/tracks/go/exercises/palindrome-products/README.md +58 -0
  143. data/tracks/go/exercises/pangram/README.md +33 -0
  144. data/tracks/go/exercises/parallel-letter-frequency/README.md +29 -0
  145. data/tracks/go/exercises/pascals-triangle/README.md +39 -0
  146. data/tracks/go/exercises/perfect-numbers/README.md +42 -0
  147. data/tracks/go/exercises/phone-number/README.md +52 -0
  148. data/tracks/go/exercises/pig-latin/README.md +42 -0
  149. data/tracks/go/exercises/poker/README.md +30 -0
  150. data/tracks/go/exercises/pov/README.md +64 -0
  151. data/tracks/go/exercises/prime-factors/README.md +54 -0
  152. data/tracks/go/exercises/protein-translation/README.md +67 -0
  153. data/tracks/go/exercises/pythagorean-triplet/README.md +42 -0
  154. data/tracks/go/exercises/queen-attack/README.md +51 -0
  155. data/tracks/go/exercises/raindrops/README.md +42 -0
  156. data/tracks/go/exercises/react/README.md +37 -0
  157. data/tracks/go/exercises/rna-transcription/README.md +43 -0
  158. data/tracks/go/exercises/robot-name/README.md +40 -0
  159. data/tracks/go/exercises/robot-simulator/README.md +52 -0
  160. data/tracks/go/exercises/roman-numerals/README.md +67 -0
  161. data/tracks/go/exercises/saddle-points/README.md +51 -0
  162. data/tracks/go/exercises/say/README.md +87 -0
  163. data/tracks/go/exercises/scrabble-score/README.md +62 -0
  164. data/tracks/go/exercises/secret-handshake/README.md +53 -0
  165. data/tracks/go/exercises/series/README.md +45 -0
  166. data/tracks/go/exercises/sieve/README.md +52 -0
  167. data/tracks/go/exercises/simple-cipher/README.md +108 -0
  168. data/tracks/go/exercises/strain/README.md +58 -0
  169. data/tracks/go/exercises/sum-of-multiples/README.md +36 -0
  170. data/tracks/go/exercises/tournament/README.md +86 -0
  171. data/tracks/go/exercises/transpose/README.md +83 -0
  172. data/tracks/go/exercises/tree-building/README.md +48 -0
  173. data/tracks/go/exercises/triangle/README.md +44 -0
  174. data/tracks/go/exercises/trinary/README.md +46 -0
  175. data/tracks/go/exercises/twelve-days/README.md +57 -0
  176. data/tracks/go/exercises/variable-length-quantity/README.md +57 -0
  177. data/tracks/go/exercises/word-count/README.md +37 -0
  178. data/tracks/go/exercises/word-search/README.md +48 -0
  179. data/tracks/go/exercises/wordy/README.md +81 -0
  180. data/tracks/haskell/README.md +2 -2
  181. data/tracks/haskell/exercises/beer-song/test/Tests.hs +1 -1
  182. data/tracks/haskell/exercises/food-chain/test/Tests.hs +1 -1
  183. data/tracks/haskell/exercises/house/test/Tests.hs +1 -1
  184. data/tracks/haskell/exercises/say/test/Tests.hs +1 -1
  185. data/tracks/java/config.json +10 -10
  186. data/tracks/java/exercises/rotational-cipher/src/example/java/RotationalCipher.java +5 -8
  187. data/tracks/java/exercises/rotational-cipher/src/test/java/RotationalCipherTest.java +3 -6
  188. data/tracks/javascript/config.json +397 -140
  189. data/tracks/kotlin/config.json +248 -63
  190. data/tracks/kotlin/config/exercise_readme.go.tmpl +16 -0
  191. data/tracks/kotlin/exercises/accumulate/README.md +38 -0
  192. data/tracks/kotlin/exercises/acronym/README.md +18 -0
  193. data/tracks/kotlin/exercises/all-your-base/README.md +38 -0
  194. data/tracks/kotlin/exercises/allergies/README.md +40 -0
  195. data/tracks/kotlin/exercises/anagram/README.md +16 -0
  196. data/tracks/kotlin/exercises/atbash-cipher/README.md +37 -0
  197. data/tracks/kotlin/exercises/bank-account/README.md +33 -0
  198. data/tracks/kotlin/exercises/beer-song/README.md +330 -0
  199. data/tracks/kotlin/exercises/binary-search/README.md +44 -0
  200. data/tracks/kotlin/exercises/binary/README.md +38 -0
  201. data/tracks/kotlin/exercises/bob/README.md +21 -0
  202. data/tracks/kotlin/exercises/bracket-push/README.md +13 -0
  203. data/tracks/kotlin/exercises/change/README.md +26 -0
  204. data/tracks/kotlin/exercises/clock/README.md +16 -0
  205. data/tracks/kotlin/exercises/collatz-conjecture/README.md +36 -0
  206. data/tracks/kotlin/exercises/complex-numbers/README.md +14 -0
  207. data/tracks/kotlin/exercises/diamond/README.md +62 -0
  208. data/tracks/kotlin/exercises/difference-of-squares/README.md +22 -0
  209. data/tracks/kotlin/exercises/etl/README.md +54 -0
  210. data/tracks/kotlin/exercises/flatten-array/README.md +21 -0
  211. data/tracks/kotlin/exercises/gigasecond/README.md +14 -0
  212. data/tracks/kotlin/exercises/grade-school/README.md +45 -0
  213. data/tracks/kotlin/exercises/grains/README.md +37 -0
  214. data/tracks/kotlin/exercises/hamming/README.md +45 -0
  215. data/tracks/kotlin/exercises/hello-world/README.md +24 -0
  216. data/tracks/kotlin/exercises/hexadecimal/README.md +17 -0
  217. data/tracks/kotlin/exercises/isogram/README.md +22 -0
  218. data/tracks/kotlin/exercises/largest-series-product/README.md +23 -0
  219. data/tracks/kotlin/exercises/leap/README.md +36 -0
  220. data/tracks/kotlin/exercises/linked-list/README.md +37 -0
  221. data/tracks/kotlin/exercises/list-ops/README.md +20 -0
  222. data/tracks/kotlin/exercises/luhn/README.md +74 -0
  223. data/tracks/kotlin/exercises/minesweeper/README.md +33 -0
  224. data/tracks/kotlin/exercises/nth-prime/README.md +18 -0
  225. data/tracks/kotlin/exercises/nucleotide-count/README.md +36 -0
  226. data/tracks/kotlin/exercises/pangram/README.md +18 -0
  227. data/tracks/kotlin/exercises/pascals-triangle/README.md +24 -0
  228. data/tracks/kotlin/exercises/perfect-numbers/README.md +27 -0
  229. data/tracks/kotlin/exercises/phone-number/README.md +37 -0
  230. data/tracks/kotlin/exercises/pig-latin/README.md +27 -0
  231. data/tracks/kotlin/exercises/prime-factors/README.md +39 -0
  232. data/tracks/kotlin/exercises/raindrops/README.md +27 -0
  233. data/tracks/kotlin/exercises/react/README.md +22 -0
  234. data/tracks/kotlin/exercises/rna-transcription/README.md +28 -0
  235. data/tracks/kotlin/exercises/robot-name/README.md +25 -0
  236. data/tracks/kotlin/exercises/robot-simulator/README.md +37 -0
  237. data/tracks/kotlin/exercises/roman-numerals/README.md +52 -0
  238. data/tracks/kotlin/exercises/saddle-points/README.md +36 -0
  239. data/tracks/kotlin/exercises/scrabble-score/README.md +47 -0
  240. data/tracks/kotlin/exercises/secret-handshake/README.md +38 -0
  241. data/tracks/kotlin/exercises/series/README.md +30 -0
  242. data/tracks/kotlin/exercises/sieve/README.md +37 -0
  243. data/tracks/kotlin/exercises/simple-cipher/README.md +93 -0
  244. data/tracks/kotlin/exercises/space-age/README.md +27 -0
  245. data/tracks/kotlin/exercises/spiral-matrix/README.md +33 -0
  246. data/tracks/kotlin/exercises/strain/README.md +43 -0
  247. data/tracks/kotlin/exercises/sublist/README.md +24 -0
  248. data/tracks/kotlin/exercises/sum-of-multiples/README.md +21 -0
  249. data/tracks/kotlin/exercises/triangle/README.md +29 -0
  250. data/tracks/kotlin/exercises/word-count/README.md +22 -0
  251. data/tracks/ocaml/config/exercise_readme.go.tmpl +16 -0
  252. data/tracks/ocaml/exercises/acronym/README.md +55 -0
  253. data/tracks/ocaml/exercises/all-your-base/README.md +75 -0
  254. data/tracks/ocaml/exercises/anagram/README.md +53 -0
  255. data/tracks/ocaml/exercises/atbash-cipher/README.md +93 -0
  256. data/tracks/ocaml/exercises/beer-song/README.md +367 -0
  257. data/tracks/ocaml/exercises/binary-search/README.md +81 -0
  258. data/tracks/ocaml/exercises/bob/README.md +87 -0
  259. data/tracks/ocaml/exercises/bowling/README.md +93 -0
  260. data/tracks/ocaml/exercises/bracket-push/README.md +50 -0
  261. data/tracks/ocaml/exercises/change/README.md +63 -0
  262. data/tracks/ocaml/exercises/connect/README.md +74 -0
  263. data/tracks/ocaml/exercises/custom-set/README.md +51 -0
  264. data/tracks/ocaml/exercises/difference-of-squares/README.md +59 -0
  265. data/tracks/ocaml/exercises/dominoes/README.md +58 -0
  266. data/tracks/ocaml/exercises/etl/README.md +91 -0
  267. data/tracks/ocaml/exercises/forth/README.md +69 -0
  268. data/tracks/ocaml/exercises/grade-school/README.md +82 -0
  269. data/tracks/ocaml/exercises/hamming/README.md +82 -0
  270. data/tracks/ocaml/exercises/hangman/README.md +61 -0
  271. data/tracks/ocaml/exercises/hello-world/README.md +61 -0
  272. data/tracks/ocaml/exercises/hexadecimal/README.md +54 -0
  273. data/tracks/ocaml/exercises/leap/README.md +73 -0
  274. data/tracks/ocaml/exercises/list-ops/README.md +50 -0
  275. data/tracks/ocaml/exercises/luhn/README.md +111 -0
  276. data/tracks/ocaml/exercises/meetup/README.md +70 -0
  277. data/tracks/ocaml/exercises/minesweeper/README.md +70 -0
  278. data/tracks/ocaml/exercises/nucleotide-count/README.md +73 -0
  279. data/tracks/ocaml/exercises/pangram/README.md +55 -0
  280. data/tracks/ocaml/exercises/phone-number/README.md +74 -0
  281. data/tracks/ocaml/exercises/point-mutations/README.md +81 -0
  282. data/tracks/ocaml/exercises/prime-factors/README.md +76 -0
  283. data/tracks/ocaml/exercises/raindrops/README.md +64 -0
  284. data/tracks/ocaml/exercises/react/README.md +59 -0
  285. data/tracks/ocaml/exercises/rna-transcription/README.md +65 -0
  286. data/tracks/ocaml/exercises/robot-name/README.md +62 -0
  287. data/tracks/ocaml/exercises/roman-numerals/README.md +89 -0
  288. data/tracks/ocaml/exercises/run-length-encoding/README.md +70 -0
  289. data/tracks/ocaml/exercises/say/README.md +109 -0
  290. data/tracks/ocaml/exercises/space-age/README.md +64 -0
  291. data/tracks/ocaml/exercises/triangle/README.md +66 -0
  292. data/tracks/ocaml/exercises/word-count/README.md +59 -0
  293. data/tracks/ocaml/exercises/zipper/README.md +71 -0
  294. data/tracks/perl5/README.md +1 -1
  295. data/tracks/perl5/config/exercise_readme.go.tmpl +16 -0
  296. data/tracks/perl5/exercises/accumulate/README.md +35 -0
  297. data/tracks/perl5/exercises/all-your-base/README.md +35 -0
  298. data/tracks/perl5/exercises/allergies/README.md +37 -0
  299. data/tracks/perl5/exercises/anagram/README.md +13 -0
  300. data/tracks/perl5/exercises/atbash-cipher/README.md +34 -0
  301. data/tracks/perl5/exercises/beer-song/README.md +327 -0
  302. data/tracks/perl5/exercises/binary-search-tree/README.md +60 -0
  303. data/tracks/perl5/exercises/binary-search/README.md +41 -0
  304. data/tracks/perl5/exercises/binary/README.md +35 -0
  305. data/tracks/perl5/exercises/bob/README.md +18 -0
  306. data/tracks/perl5/exercises/clock/README.md +13 -0
  307. data/tracks/perl5/exercises/crypto-square/README.md +74 -0
  308. data/tracks/perl5/exercises/custom-set/README.md +11 -0
  309. data/tracks/perl5/exercises/difference-of-squares/README.md +19 -0
  310. data/tracks/perl5/exercises/etl/README.md +51 -0
  311. data/tracks/perl5/exercises/food-chain/README.md +70 -0
  312. data/tracks/perl5/exercises/gigasecond/README.md +11 -0
  313. data/tracks/perl5/exercises/grade-school/README.md +42 -0
  314. data/tracks/perl5/exercises/grains/README.md +34 -0
  315. data/tracks/perl5/exercises/hamming/README.md +42 -0
  316. data/tracks/perl5/exercises/hello-world/README.md +21 -0
  317. data/tracks/perl5/exercises/hexadecimal/README.md +14 -0
  318. data/tracks/perl5/exercises/house/README.md +113 -0
  319. data/tracks/perl5/exercises/kindergarten-garden/README.md +66 -0
  320. data/tracks/perl5/exercises/largest-series-product/README.md +20 -0
  321. data/tracks/perl5/exercises/leap/README.md +33 -0
  322. data/tracks/perl5/exercises/linked-list/README.md +34 -0
  323. data/tracks/perl5/exercises/list-ops/README.md +10 -0
  324. data/tracks/perl5/exercises/luhn/Example.pm +20 -42
  325. data/tracks/perl5/exercises/luhn/Luhn.pm +9 -0
  326. data/tracks/perl5/exercises/luhn/README.md +71 -0
  327. data/tracks/perl5/exercises/luhn/example.yaml +38 -0
  328. data/tracks/perl5/exercises/luhn/luhn.t +127 -26
  329. data/tracks/perl5/exercises/matrix/README.md +45 -0
  330. data/tracks/perl5/exercises/meetup/README.md +30 -0
  331. data/tracks/perl5/exercises/minesweeper/README.md +30 -0
  332. data/tracks/perl5/exercises/nucleotide-count/README.md +33 -0
  333. data/tracks/perl5/exercises/ocr-numbers/README.md +85 -0
  334. data/tracks/perl5/exercises/palindrome-products/README.md +40 -0
  335. data/tracks/perl5/exercises/pascals-triangle/README.md +21 -0
  336. data/tracks/perl5/exercises/phone-number/Example.pm +6 -26
  337. data/tracks/perl5/exercises/phone-number/PhoneNumber.pm +5 -0
  338. data/tracks/perl5/exercises/phone-number/README.md +34 -0
  339. data/tracks/perl5/exercises/phone-number/example.yaml +15 -0
  340. data/tracks/perl5/exercises/phone-number/phone-number.t +138 -0
  341. data/tracks/perl5/exercises/pig-latin/README.md +24 -0
  342. data/tracks/perl5/exercises/point-mutations/README.md +41 -0
  343. data/tracks/perl5/exercises/prime-factors/README.md +36 -0
  344. data/tracks/perl5/exercises/proverb/README.md +18 -0
  345. data/tracks/perl5/exercises/pythagorean-triplet/README.md +24 -0
  346. data/tracks/perl5/exercises/queen-attack/README.md +33 -0
  347. data/tracks/perl5/exercises/raindrops/README.md +24 -0
  348. data/tracks/perl5/exercises/rna-transcription/README.md +25 -0
  349. data/tracks/perl5/exercises/robot-name/README.md +22 -0
  350. data/tracks/perl5/exercises/robot-simulator/README.md +34 -0
  351. data/tracks/perl5/exercises/roman-numerals/README.md +49 -0
  352. data/tracks/perl5/exercises/saddle-points/README.md +33 -0
  353. data/tracks/perl5/exercises/say/README.md +69 -0
  354. data/tracks/perl5/exercises/scrabble-score/README.md +44 -0
  355. data/tracks/perl5/exercises/secret-handshake/README.md +35 -0
  356. data/tracks/perl5/exercises/series/README.md +27 -0
  357. data/tracks/perl5/exercises/sieve/README.md +34 -0
  358. data/tracks/perl5/exercises/simple-cipher/README.md +90 -0
  359. data/tracks/perl5/exercises/simple-linked-list/README.md +28 -0
  360. data/tracks/perl5/exercises/space-age/README.md +24 -0
  361. data/tracks/perl5/exercises/strain/README.md +40 -0
  362. data/tracks/perl5/exercises/sublist/README.md +21 -0
  363. data/tracks/perl5/exercises/sum-of-multiples/README.md +18 -0
  364. data/tracks/perl5/exercises/triangle/README.md +26 -0
  365. data/tracks/perl5/exercises/trinary/README.md +28 -0
  366. data/tracks/perl5/exercises/twelve-days/README.md +35 -0
  367. data/tracks/perl5/exercises/word-count/README.md +19 -0
  368. data/tracks/perl5/exercises/wordy/README.md +63 -0
  369. data/tracks/perl6/README.md +1 -1
  370. data/tracks/perl6/config/exercise_readme.go.tmpl +16 -0
  371. data/tracks/perl6/exercises/accumulate/README.md +50 -0
  372. data/tracks/perl6/exercises/all-your-base/README.md +50 -0
  373. data/tracks/perl6/exercises/allergies/README.md +52 -0
  374. data/tracks/perl6/exercises/anagram/README.md +28 -0
  375. data/tracks/perl6/exercises/atbash-cipher/README.md +49 -0
  376. data/tracks/perl6/exercises/binary/README.md +50 -0
  377. data/tracks/perl6/exercises/bob/README.md +33 -0
  378. data/tracks/perl6/exercises/clock/README.md +28 -0
  379. data/tracks/perl6/exercises/flatten-array/README.md +33 -0
  380. data/tracks/perl6/exercises/grade-school/README.md +57 -0
  381. data/tracks/perl6/exercises/grains/README.md +49 -0
  382. data/tracks/perl6/exercises/hello-world/README.md +36 -0
  383. data/tracks/perl6/exercises/leap/README.md +48 -0
  384. data/tracks/perl6/exercises/linked-list/README.md +49 -0
  385. data/tracks/perl6/exercises/linked-list/example.yaml +1 -1
  386. data/tracks/perl6/exercises/linked-list/linked-list.t +1 -1
  387. data/tracks/perl6/exercises/luhn/README.md +86 -0
  388. data/tracks/perl6/exercises/phone-number/README.md +49 -0
  389. data/tracks/perl6/exercises/raindrops/README.md +39 -0
  390. data/tracks/perl6/exercises/rna-transcription/README.md +40 -0
  391. data/tracks/perl6/exercises/robot-name/README.md +37 -0
  392. data/tracks/perl6/exercises/scrabble-score/README.md +59 -0
  393. data/tracks/perl6/exercises/space-age/README.md +39 -0
  394. data/tracks/perl6/exercises/trinary/README.md +43 -0
  395. data/tracks/perl6/exercises/word-count/README.md +34 -0
  396. data/tracks/perl6/exercises/wordy/README.md +78 -0
  397. data/tracks/php/config.json +156 -3
  398. data/tracks/php/config/exercise_readme.go.tmpl +16 -0
  399. data/tracks/php/exercises/accumulate/README.md +50 -0
  400. data/tracks/php/exercises/acronym/README.md +30 -0
  401. data/tracks/php/exercises/allergies/README.md +52 -0
  402. data/tracks/php/exercises/anagram/README.md +28 -0
  403. data/tracks/php/exercises/atbash-cipher/README.md +49 -0
  404. data/tracks/php/exercises/beer-song/README.md +342 -0
  405. data/tracks/php/exercises/binary-search/README.md +56 -0
  406. data/tracks/php/exercises/binary/README.md +50 -0
  407. data/tracks/php/exercises/bob/README.md +36 -0
  408. data/tracks/php/exercises/book-store/README.md +89 -0
  409. data/tracks/php/exercises/bowling/README.md +68 -0
  410. data/tracks/php/exercises/bracket-push/README.md +25 -0
  411. data/tracks/php/exercises/change/README.md +38 -0
  412. data/tracks/php/exercises/clock/README.md +28 -0
  413. data/tracks/php/exercises/connect/README.md +49 -0
  414. data/tracks/php/exercises/difference-of-squares/README.md +34 -0
  415. data/tracks/php/exercises/etl/README.md +66 -0
  416. data/tracks/php/exercises/gigasecond/README.md +26 -0
  417. data/tracks/php/exercises/grade-school/README.md +57 -0
  418. data/tracks/php/exercises/grains/README.md +49 -0
  419. data/tracks/php/exercises/hamming/README.md +57 -0
  420. data/tracks/php/exercises/hello-world/README.md +36 -0
  421. data/tracks/php/exercises/isogram/README.md +34 -0
  422. data/tracks/php/exercises/largest-series-product/README.md +35 -0
  423. data/tracks/php/exercises/leap/README.md +48 -0
  424. data/tracks/php/exercises/luhn/README.md +86 -0
  425. data/tracks/php/exercises/markdown/README.md +33 -0
  426. data/tracks/php/exercises/minesweeper/README.md +45 -0
  427. data/tracks/php/exercises/nth-prime/README.md +30 -0
  428. data/tracks/php/exercises/nucleotide-count/README.md +48 -0
  429. data/tracks/php/exercises/ocr-numbers/README.md +100 -0
  430. data/tracks/php/exercises/pangram/README.md +30 -0
  431. data/tracks/php/exercises/pascals-triangle/README.md +36 -0
  432. data/tracks/php/exercises/perfect-numbers/README.md +39 -0
  433. data/tracks/php/exercises/phone-number/README.md +49 -0
  434. data/tracks/php/exercises/pig-latin/README.md +39 -0
  435. data/tracks/php/exercises/prime-factors/README.md +51 -0
  436. data/tracks/php/exercises/queen-attack/README.md +48 -0
  437. data/tracks/php/exercises/raindrops/README.md +39 -0
  438. data/tracks/php/exercises/rna-transcription/README.md +40 -0
  439. data/tracks/php/exercises/robot-name/README.md +37 -0
  440. data/tracks/php/exercises/robot-simulator/README.md +49 -0
  441. data/tracks/php/exercises/roman-numerals/README.md +64 -0
  442. data/tracks/php/exercises/scrabble-score/README.md +59 -0
  443. data/tracks/php/exercises/sieve/README.md +49 -0
  444. data/tracks/php/exercises/space-age/README.md +39 -0
  445. data/tracks/php/exercises/sum-of-multiples/README.md +33 -0
  446. data/tracks/php/exercises/triangle/README.md +41 -0
  447. data/tracks/php/exercises/trinary/README.md +43 -0
  448. data/tracks/php/exercises/variable-length-quantity/README.md +54 -0
  449. data/tracks/php/exercises/word-count/README.md +34 -0
  450. data/tracks/php/exercises/wordy/README.md +78 -0
  451. data/tracks/rust/exercises/grains/tests/grains.rs +0 -1
  452. data/tracks/sml/config/exercise_readme.go.tmpl +16 -0
  453. data/tracks/sml/exercises/accumulate/README.md +49 -0
  454. data/tracks/sml/exercises/allergies/README.md +51 -0
  455. data/tracks/sml/exercises/anagram/README.md +27 -0
  456. data/tracks/sml/exercises/binary/README.md +49 -0
  457. data/tracks/sml/exercises/flatten-array/README.md +32 -0
  458. data/tracks/sml/exercises/hamming/README.md +56 -0
  459. data/tracks/sml/exercises/nth-prime/README.md +29 -0
  460. data/tracks/sml/exercises/raindrops/README.md +38 -0
  461. metadata +433 -4
  462. data/tracks/perl5/exercises/phone-number/cases.json +0 -44
  463. data/tracks/perl5/exercises/phone-number/phone.t +0 -43
@@ -0,0 +1,16 @@
1
+ # {{ .Spec.Name }}
2
+
3
+ {{ .Spec.Description -}}
4
+ {{- with .Hints }}
5
+ {{ . }}
6
+ {{ end }}
7
+ {{- with .TrackInsert }}
8
+ {{ . }}
9
+ {{ end }}
10
+ {{- with .Spec.Credits -}}
11
+ ## Source
12
+
13
+ {{ . }}
14
+ {{ end }}
15
+ ## Submitting Incomplete Solutions
16
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,38 @@
1
+ # Accumulate
2
+
3
+ Implement the `accumulate` operation, which, given a collection and an
4
+ operation to perform on each element of the collection, returns a new
5
+ collection containing the result of applying that operation to each element of
6
+ the input collection.
7
+
8
+ Given the collection of numbers:
9
+
10
+ - 1, 2, 3, 4, 5
11
+
12
+ And the operation:
13
+
14
+ - square a number (`x => x * x`)
15
+
16
+ Your code should be able to produce the collection of squares:
17
+
18
+ - 1, 4, 9, 16, 25
19
+
20
+ Check out the test suite to see the expected function signature.
21
+
22
+ ## Restrictions
23
+
24
+ Keep your hands off that collect/map/fmap/whatchamacallit functionality
25
+ provided by your standard library!
26
+ Solve this one yourself using other basic tools instead.
27
+
28
+ Lisp specific: it's perfectly fine to use `MAPCAR` or the equivalent,
29
+ as this is idiomatic Lisp, not a library function.
30
+
31
+
32
+
33
+ ## Source
34
+
35
+ Conversation with James Edward Gray II [https://twitter.com/jeg2](https://twitter.com/jeg2)
36
+
37
+ ## Submitting Incomplete Solutions
38
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,18 @@
1
+ # Acronym
2
+
3
+ Convert a phrase to its acronym.
4
+
5
+ Techies love their TLA (Three Letter Acronyms)!
6
+
7
+ Help generate some jargon by writing a program that converts a long name
8
+ like Portable Network Graphics to its acronym (PNG).
9
+
10
+
11
+
12
+
13
+ ## Source
14
+
15
+ Julien Vanier [https://github.com/monkbroc](https://github.com/monkbroc)
16
+
17
+ ## Submitting Incomplete Solutions
18
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,38 @@
1
+ # All Your Base
2
+
3
+ Convert a number, represented as a sequence of digits in one base, to any other base.
4
+
5
+ Implement general base conversion. Given a number in base **a**,
6
+ represented as a sequence of digits, convert it to base **b**.
7
+
8
+ ## Note
9
+ - Try to implement the conversion yourself.
10
+ Do not use something else to perform the conversion for you.
11
+
12
+ ## About [Positional Notation](https://en.wikipedia.org/wiki/Positional_notation)
13
+
14
+ In positional notation, a number in base **b** can be understood as a linear
15
+ combination of powers of **b**.
16
+
17
+ The number 42, *in base 10*, means:
18
+
19
+ (4 * 10^1) + (2 * 10^0)
20
+
21
+ The number 101010, *in base 2*, means:
22
+
23
+ (1 * 2^5) + (0 * 2^4) + (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (0 * 2^0)
24
+
25
+ The number 1120, *in base 3*, means:
26
+
27
+ (1 * 3^3) + (1 * 3^2) + (2 * 3^1) + (0 * 3^0)
28
+
29
+ I think you got the idea!
30
+
31
+
32
+ *Yes. Those three numbers above are exactly the same. Congratulations!*
33
+
34
+
35
+
36
+
37
+ ## Submitting Incomplete Solutions
38
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,40 @@
1
+ # Allergies
2
+
3
+ Given a person's allergy score, determine whether or not they're allergic to a given item, and their full list of allergies.
4
+
5
+ An allergy test produces a single numeric score which contains the
6
+ information about all the allergies the person has (that they were
7
+ tested for).
8
+
9
+ The list of items (and their value) that were tested are:
10
+
11
+ * eggs (1)
12
+ * peanuts (2)
13
+ * shellfish (4)
14
+ * strawberries (8)
15
+ * tomatoes (16)
16
+ * chocolate (32)
17
+ * pollen (64)
18
+ * cats (128)
19
+
20
+ So if Tom is allergic to peanuts and chocolate, he gets a score of 34.
21
+
22
+ Now, given just that score of 34, your program should be able to say:
23
+
24
+ - Whether Tom is allergic to any one of those allergens listed above.
25
+ - All the allergens Tom is allergic to.
26
+
27
+ Note: a given score may include allergens **not** listed above (i.e.
28
+ allergens that score 256, 512, 1024, etc.). Your program should
29
+ ignore those components of the score. For example, if the allergy
30
+ score is 257, your program should only report the eggs (1) allergy.
31
+
32
+
33
+
34
+
35
+ ## Source
36
+
37
+ Jumpstart Lab Warm-up [http://jumpstartlab.com](http://jumpstartlab.com)
38
+
39
+ ## Submitting Incomplete Solutions
40
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,16 @@
1
+ # Anagram
2
+
3
+ Given a word and a list of possible anagrams, select the correct sublist.
4
+
5
+ Given `"listen"` and a list of candidates like `"enlists" "google"
6
+ "inlets" "banana"` the program should return a list containing
7
+ `"inlets"`.
8
+
9
+
10
+
11
+ ## Source
12
+
13
+ Inspired by the Extreme Startup game [https://github.com/rchatley/extreme_startup](https://github.com/rchatley/extreme_startup)
14
+
15
+ ## Submitting Incomplete Solutions
16
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,37 @@
1
+ # Atbash Cipher
2
+
3
+ Create an implementation of the atbash cipher, an ancient encryption system created in the Middle East.
4
+
5
+ The Atbash cipher is a simple substitution cipher that relies on
6
+ transposing all the letters in the alphabet such that the resulting
7
+ alphabet is backwards. The first letter is replaced with the last
8
+ letter, the second with the second-last, and so on.
9
+
10
+ An Atbash cipher for the Latin alphabet would be as follows:
11
+
12
+ ```plain
13
+ Plain: abcdefghijklmnopqrstuvwxyz
14
+ Cipher: zyxwvutsrqponmlkjihgfedcba
15
+ ```
16
+
17
+ It is a very weak cipher because it only has one possible key, and it is
18
+ a simple monoalphabetic substitution cipher. However, this may not have
19
+ been an issue in the cipher's time.
20
+
21
+ Ciphertext is written out in groups of fixed length, the traditional group size
22
+ being 5 letters, and punctuation is excluded. This is to make it harder to guess
23
+ things based on word boundaries.
24
+
25
+ ## Examples
26
+ - Encoding `test` gives `gvhg`
27
+ - Decoding `gvhg` gives `test`
28
+ - Decoding `gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt` gives `thequickbrownfoxjumpsoverthelazydog`
29
+
30
+
31
+
32
+ ## Source
33
+
34
+ Wikipedia [http://en.wikipedia.org/wiki/Atbash](http://en.wikipedia.org/wiki/Atbash)
35
+
36
+ ## Submitting Incomplete Solutions
37
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,33 @@
1
+ # Bank Account
2
+
3
+ Simulate a bank account supporting opening/closing, withdrawals, and deposits
4
+ of money. Watch out for concurrent transactions!
5
+
6
+ A bank account can be accessed in multiple ways. Clients can make
7
+ deposits and withdrawals using the internet, mobile phones, etc. Shops
8
+ can charge against the account.
9
+
10
+ Create an account that can be accessed from multiple threads/processes
11
+ (terminology depends on your programming language).
12
+
13
+ It should be possible to close an account; operations against a closed
14
+ account must fail.
15
+
16
+ ## Instructions
17
+
18
+ Run the test file, and fix each of the errors in turn. When you get the
19
+ first test to pass, go to the first pending or skipped test, and make
20
+ that pass as well. When all of the tests are passing, feel free to
21
+ submit.
22
+
23
+ Remember that passing code is just the first step. The goal is to work
24
+ towards a solution that is as readable and expressive as you can make
25
+ it.
26
+
27
+ Have fun!
28
+
29
+
30
+
31
+
32
+ ## Submitting Incomplete Solutions
33
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,330 @@
1
+ # Beer Song
2
+
3
+ Produce the lyrics to that beloved classic, that field-trip favorite: 99 Bottles of Beer on the Wall.
4
+
5
+ Note that not all verses are identical.
6
+
7
+ ```plain
8
+ 99 bottles of beer on the wall, 99 bottles of beer.
9
+ Take one down and pass it around, 98 bottles of beer on the wall.
10
+
11
+ 98 bottles of beer on the wall, 98 bottles of beer.
12
+ Take one down and pass it around, 97 bottles of beer on the wall.
13
+
14
+ 97 bottles of beer on the wall, 97 bottles of beer.
15
+ Take one down and pass it around, 96 bottles of beer on the wall.
16
+
17
+ 96 bottles of beer on the wall, 96 bottles of beer.
18
+ Take one down and pass it around, 95 bottles of beer on the wall.
19
+
20
+ 95 bottles of beer on the wall, 95 bottles of beer.
21
+ Take one down and pass it around, 94 bottles of beer on the wall.
22
+
23
+ 94 bottles of beer on the wall, 94 bottles of beer.
24
+ Take one down and pass it around, 93 bottles of beer on the wall.
25
+
26
+ 93 bottles of beer on the wall, 93 bottles of beer.
27
+ Take one down and pass it around, 92 bottles of beer on the wall.
28
+
29
+ 92 bottles of beer on the wall, 92 bottles of beer.
30
+ Take one down and pass it around, 91 bottles of beer on the wall.
31
+
32
+ 91 bottles of beer on the wall, 91 bottles of beer.
33
+ Take one down and pass it around, 90 bottles of beer on the wall.
34
+
35
+ 90 bottles of beer on the wall, 90 bottles of beer.
36
+ Take one down and pass it around, 89 bottles of beer on the wall.
37
+
38
+ 89 bottles of beer on the wall, 89 bottles of beer.
39
+ Take one down and pass it around, 88 bottles of beer on the wall.
40
+
41
+ 88 bottles of beer on the wall, 88 bottles of beer.
42
+ Take one down and pass it around, 87 bottles of beer on the wall.
43
+
44
+ 87 bottles of beer on the wall, 87 bottles of beer.
45
+ Take one down and pass it around, 86 bottles of beer on the wall.
46
+
47
+ 86 bottles of beer on the wall, 86 bottles of beer.
48
+ Take one down and pass it around, 85 bottles of beer on the wall.
49
+
50
+ 85 bottles of beer on the wall, 85 bottles of beer.
51
+ Take one down and pass it around, 84 bottles of beer on the wall.
52
+
53
+ 84 bottles of beer on the wall, 84 bottles of beer.
54
+ Take one down and pass it around, 83 bottles of beer on the wall.
55
+
56
+ 83 bottles of beer on the wall, 83 bottles of beer.
57
+ Take one down and pass it around, 82 bottles of beer on the wall.
58
+
59
+ 82 bottles of beer on the wall, 82 bottles of beer.
60
+ Take one down and pass it around, 81 bottles of beer on the wall.
61
+
62
+ 81 bottles of beer on the wall, 81 bottles of beer.
63
+ Take one down and pass it around, 80 bottles of beer on the wall.
64
+
65
+ 80 bottles of beer on the wall, 80 bottles of beer.
66
+ Take one down and pass it around, 79 bottles of beer on the wall.
67
+
68
+ 79 bottles of beer on the wall, 79 bottles of beer.
69
+ Take one down and pass it around, 78 bottles of beer on the wall.
70
+
71
+ 78 bottles of beer on the wall, 78 bottles of beer.
72
+ Take one down and pass it around, 77 bottles of beer on the wall.
73
+
74
+ 77 bottles of beer on the wall, 77 bottles of beer.
75
+ Take one down and pass it around, 76 bottles of beer on the wall.
76
+
77
+ 76 bottles of beer on the wall, 76 bottles of beer.
78
+ Take one down and pass it around, 75 bottles of beer on the wall.
79
+
80
+ 75 bottles of beer on the wall, 75 bottles of beer.
81
+ Take one down and pass it around, 74 bottles of beer on the wall.
82
+
83
+ 74 bottles of beer on the wall, 74 bottles of beer.
84
+ Take one down and pass it around, 73 bottles of beer on the wall.
85
+
86
+ 73 bottles of beer on the wall, 73 bottles of beer.
87
+ Take one down and pass it around, 72 bottles of beer on the wall.
88
+
89
+ 72 bottles of beer on the wall, 72 bottles of beer.
90
+ Take one down and pass it around, 71 bottles of beer on the wall.
91
+
92
+ 71 bottles of beer on the wall, 71 bottles of beer.
93
+ Take one down and pass it around, 70 bottles of beer on the wall.
94
+
95
+ 70 bottles of beer on the wall, 70 bottles of beer.
96
+ Take one down and pass it around, 69 bottles of beer on the wall.
97
+
98
+ 69 bottles of beer on the wall, 69 bottles of beer.
99
+ Take one down and pass it around, 68 bottles of beer on the wall.
100
+
101
+ 68 bottles of beer on the wall, 68 bottles of beer.
102
+ Take one down and pass it around, 67 bottles of beer on the wall.
103
+
104
+ 67 bottles of beer on the wall, 67 bottles of beer.
105
+ Take one down and pass it around, 66 bottles of beer on the wall.
106
+
107
+ 66 bottles of beer on the wall, 66 bottles of beer.
108
+ Take one down and pass it around, 65 bottles of beer on the wall.
109
+
110
+ 65 bottles of beer on the wall, 65 bottles of beer.
111
+ Take one down and pass it around, 64 bottles of beer on the wall.
112
+
113
+ 64 bottles of beer on the wall, 64 bottles of beer.
114
+ Take one down and pass it around, 63 bottles of beer on the wall.
115
+
116
+ 63 bottles of beer on the wall, 63 bottles of beer.
117
+ Take one down and pass it around, 62 bottles of beer on the wall.
118
+
119
+ 62 bottles of beer on the wall, 62 bottles of beer.
120
+ Take one down and pass it around, 61 bottles of beer on the wall.
121
+
122
+ 61 bottles of beer on the wall, 61 bottles of beer.
123
+ Take one down and pass it around, 60 bottles of beer on the wall.
124
+
125
+ 60 bottles of beer on the wall, 60 bottles of beer.
126
+ Take one down and pass it around, 59 bottles of beer on the wall.
127
+
128
+ 59 bottles of beer on the wall, 59 bottles of beer.
129
+ Take one down and pass it around, 58 bottles of beer on the wall.
130
+
131
+ 58 bottles of beer on the wall, 58 bottles of beer.
132
+ Take one down and pass it around, 57 bottles of beer on the wall.
133
+
134
+ 57 bottles of beer on the wall, 57 bottles of beer.
135
+ Take one down and pass it around, 56 bottles of beer on the wall.
136
+
137
+ 56 bottles of beer on the wall, 56 bottles of beer.
138
+ Take one down and pass it around, 55 bottles of beer on the wall.
139
+
140
+ 55 bottles of beer on the wall, 55 bottles of beer.
141
+ Take one down and pass it around, 54 bottles of beer on the wall.
142
+
143
+ 54 bottles of beer on the wall, 54 bottles of beer.
144
+ Take one down and pass it around, 53 bottles of beer on the wall.
145
+
146
+ 53 bottles of beer on the wall, 53 bottles of beer.
147
+ Take one down and pass it around, 52 bottles of beer on the wall.
148
+
149
+ 52 bottles of beer on the wall, 52 bottles of beer.
150
+ Take one down and pass it around, 51 bottles of beer on the wall.
151
+
152
+ 51 bottles of beer on the wall, 51 bottles of beer.
153
+ Take one down and pass it around, 50 bottles of beer on the wall.
154
+
155
+ 50 bottles of beer on the wall, 50 bottles of beer.
156
+ Take one down and pass it around, 49 bottles of beer on the wall.
157
+
158
+ 49 bottles of beer on the wall, 49 bottles of beer.
159
+ Take one down and pass it around, 48 bottles of beer on the wall.
160
+
161
+ 48 bottles of beer on the wall, 48 bottles of beer.
162
+ Take one down and pass it around, 47 bottles of beer on the wall.
163
+
164
+ 47 bottles of beer on the wall, 47 bottles of beer.
165
+ Take one down and pass it around, 46 bottles of beer on the wall.
166
+
167
+ 46 bottles of beer on the wall, 46 bottles of beer.
168
+ Take one down and pass it around, 45 bottles of beer on the wall.
169
+
170
+ 45 bottles of beer on the wall, 45 bottles of beer.
171
+ Take one down and pass it around, 44 bottles of beer on the wall.
172
+
173
+ 44 bottles of beer on the wall, 44 bottles of beer.
174
+ Take one down and pass it around, 43 bottles of beer on the wall.
175
+
176
+ 43 bottles of beer on the wall, 43 bottles of beer.
177
+ Take one down and pass it around, 42 bottles of beer on the wall.
178
+
179
+ 42 bottles of beer on the wall, 42 bottles of beer.
180
+ Take one down and pass it around, 41 bottles of beer on the wall.
181
+
182
+ 41 bottles of beer on the wall, 41 bottles of beer.
183
+ Take one down and pass it around, 40 bottles of beer on the wall.
184
+
185
+ 40 bottles of beer on the wall, 40 bottles of beer.
186
+ Take one down and pass it around, 39 bottles of beer on the wall.
187
+
188
+ 39 bottles of beer on the wall, 39 bottles of beer.
189
+ Take one down and pass it around, 38 bottles of beer on the wall.
190
+
191
+ 38 bottles of beer on the wall, 38 bottles of beer.
192
+ Take one down and pass it around, 37 bottles of beer on the wall.
193
+
194
+ 37 bottles of beer on the wall, 37 bottles of beer.
195
+ Take one down and pass it around, 36 bottles of beer on the wall.
196
+
197
+ 36 bottles of beer on the wall, 36 bottles of beer.
198
+ Take one down and pass it around, 35 bottles of beer on the wall.
199
+
200
+ 35 bottles of beer on the wall, 35 bottles of beer.
201
+ Take one down and pass it around, 34 bottles of beer on the wall.
202
+
203
+ 34 bottles of beer on the wall, 34 bottles of beer.
204
+ Take one down and pass it around, 33 bottles of beer on the wall.
205
+
206
+ 33 bottles of beer on the wall, 33 bottles of beer.
207
+ Take one down and pass it around, 32 bottles of beer on the wall.
208
+
209
+ 32 bottles of beer on the wall, 32 bottles of beer.
210
+ Take one down and pass it around, 31 bottles of beer on the wall.
211
+
212
+ 31 bottles of beer on the wall, 31 bottles of beer.
213
+ Take one down and pass it around, 30 bottles of beer on the wall.
214
+
215
+ 30 bottles of beer on the wall, 30 bottles of beer.
216
+ Take one down and pass it around, 29 bottles of beer on the wall.
217
+
218
+ 29 bottles of beer on the wall, 29 bottles of beer.
219
+ Take one down and pass it around, 28 bottles of beer on the wall.
220
+
221
+ 28 bottles of beer on the wall, 28 bottles of beer.
222
+ Take one down and pass it around, 27 bottles of beer on the wall.
223
+
224
+ 27 bottles of beer on the wall, 27 bottles of beer.
225
+ Take one down and pass it around, 26 bottles of beer on the wall.
226
+
227
+ 26 bottles of beer on the wall, 26 bottles of beer.
228
+ Take one down and pass it around, 25 bottles of beer on the wall.
229
+
230
+ 25 bottles of beer on the wall, 25 bottles of beer.
231
+ Take one down and pass it around, 24 bottles of beer on the wall.
232
+
233
+ 24 bottles of beer on the wall, 24 bottles of beer.
234
+ Take one down and pass it around, 23 bottles of beer on the wall.
235
+
236
+ 23 bottles of beer on the wall, 23 bottles of beer.
237
+ Take one down and pass it around, 22 bottles of beer on the wall.
238
+
239
+ 22 bottles of beer on the wall, 22 bottles of beer.
240
+ Take one down and pass it around, 21 bottles of beer on the wall.
241
+
242
+ 21 bottles of beer on the wall, 21 bottles of beer.
243
+ Take one down and pass it around, 20 bottles of beer on the wall.
244
+
245
+ 20 bottles of beer on the wall, 20 bottles of beer.
246
+ Take one down and pass it around, 19 bottles of beer on the wall.
247
+
248
+ 19 bottles of beer on the wall, 19 bottles of beer.
249
+ Take one down and pass it around, 18 bottles of beer on the wall.
250
+
251
+ 18 bottles of beer on the wall, 18 bottles of beer.
252
+ Take one down and pass it around, 17 bottles of beer on the wall.
253
+
254
+ 17 bottles of beer on the wall, 17 bottles of beer.
255
+ Take one down and pass it around, 16 bottles of beer on the wall.
256
+
257
+ 16 bottles of beer on the wall, 16 bottles of beer.
258
+ Take one down and pass it around, 15 bottles of beer on the wall.
259
+
260
+ 15 bottles of beer on the wall, 15 bottles of beer.
261
+ Take one down and pass it around, 14 bottles of beer on the wall.
262
+
263
+ 14 bottles of beer on the wall, 14 bottles of beer.
264
+ Take one down and pass it around, 13 bottles of beer on the wall.
265
+
266
+ 13 bottles of beer on the wall, 13 bottles of beer.
267
+ Take one down and pass it around, 12 bottles of beer on the wall.
268
+
269
+ 12 bottles of beer on the wall, 12 bottles of beer.
270
+ Take one down and pass it around, 11 bottles of beer on the wall.
271
+
272
+ 11 bottles of beer on the wall, 11 bottles of beer.
273
+ Take one down and pass it around, 10 bottles of beer on the wall.
274
+
275
+ 10 bottles of beer on the wall, 10 bottles of beer.
276
+ Take one down and pass it around, 9 bottles of beer on the wall.
277
+
278
+ 9 bottles of beer on the wall, 9 bottles of beer.
279
+ Take one down and pass it around, 8 bottles of beer on the wall.
280
+
281
+ 8 bottles of beer on the wall, 8 bottles of beer.
282
+ Take one down and pass it around, 7 bottles of beer on the wall.
283
+
284
+ 7 bottles of beer on the wall, 7 bottles of beer.
285
+ Take one down and pass it around, 6 bottles of beer on the wall.
286
+
287
+ 6 bottles of beer on the wall, 6 bottles of beer.
288
+ Take one down and pass it around, 5 bottles of beer on the wall.
289
+
290
+ 5 bottles of beer on the wall, 5 bottles of beer.
291
+ Take one down and pass it around, 4 bottles of beer on the wall.
292
+
293
+ 4 bottles of beer on the wall, 4 bottles of beer.
294
+ Take one down and pass it around, 3 bottles of beer on the wall.
295
+
296
+ 3 bottles of beer on the wall, 3 bottles of beer.
297
+ Take one down and pass it around, 2 bottles of beer on the wall.
298
+
299
+ 2 bottles of beer on the wall, 2 bottles of beer.
300
+ Take one down and pass it around, 1 bottle of beer on the wall.
301
+
302
+ 1 bottle of beer on the wall, 1 bottle of beer.
303
+ Take it down and pass it around, no more bottles of beer on the wall.
304
+
305
+ No more bottles of beer on the wall, no more bottles of beer.
306
+ Go to the store and buy some more, 99 bottles of beer on the wall.
307
+ ```
308
+
309
+ ## For bonus points
310
+
311
+ Did you get the tests passing and the code clean? If you want to, these
312
+ are some additional things you could try:
313
+
314
+ * Remove as much duplication as you possibly can.
315
+ * Optimize for readability, even if it means introducing duplication.
316
+ * If you've removed all the duplication, do you have a lot of
317
+ conditionals? Try replacing the conditionals with polymorphism, if it
318
+ applies in this language. How readable is it?
319
+
320
+ Then please share your thoughts in a comment on the submission. Did this
321
+ experiment make the code better? Worse? Did you learn anything from it?
322
+
323
+
324
+
325
+ ## Source
326
+
327
+ Learn to Program by Chris Pine [http://pine.fm/LearnToProgram/?Chapter=06](http://pine.fm/LearnToProgram/?Chapter=06)
328
+
329
+ ## Submitting Incomplete Solutions
330
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.