trackler 2.1.0.24 → 2.1.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +3 -0
  3. data/CONTRIBUTING.md +5 -8
  4. data/README.md +7 -7
  5. data/common/CONTRIBUTING.md +0 -5
  6. data/common/exercises/accumulate/description.md +4 -1
  7. data/common/exercises/acronym/description.md +1 -1
  8. data/common/exercises/bank-account/description.md +2 -1
  9. data/common/exercises/book-store/description.md +2 -5
  10. data/common/exercises/bracket-push/description.md +2 -4
  11. data/common/exercises/change/description.md +2 -5
  12. data/common/exercises/circular-buffer/description.md +0 -2
  13. data/common/exercises/clock/description.md +0 -2
  14. data/common/exercises/collatz-conjecture/canonical-data.json +36 -0
  15. data/common/exercises/collatz-conjecture/description.md +25 -0
  16. data/common/exercises/collatz-conjecture/metadata.yml +4 -0
  17. data/common/exercises/counter/description.md +1 -2
  18. data/common/exercises/diamond/description.md +0 -4
  19. data/common/exercises/flatten-array/description.md +1 -1
  20. data/common/exercises/grade-school/description.md +2 -1
  21. data/common/exercises/grains/description.md +2 -1
  22. data/common/exercises/grep/description.md +3 -2
  23. data/common/exercises/kindergarten-garden/description.md +2 -1
  24. data/common/exercises/largest-series-product/description.md +2 -1
  25. data/common/exercises/matrix/description.md +2 -1
  26. data/common/exercises/nucleotide-codons/description.md +2 -1
  27. data/common/exercises/ocr-numbers/description.md +2 -1
  28. data/common/exercises/octal/description.md +3 -1
  29. data/common/exercises/pangram/description.md +2 -1
  30. data/common/exercises/perfect-numbers/description.md +2 -1
  31. data/common/exercises/poker/description.md +0 -2
  32. data/common/exercises/protein-translation/description.md +3 -2
  33. data/common/exercises/proverb/description.md +2 -1
  34. data/common/exercises/pythagorean-triplet/description.md +4 -2
  35. data/common/exercises/queen-attack/description.md +2 -1
  36. data/common/exercises/rectangles/description.md +1 -3
  37. data/common/exercises/rotational-cipher/description.md +0 -4
  38. data/common/exercises/scale-generator/description.md +0 -2
  39. data/common/exercises/secret-handshake/description.md +2 -2
  40. data/common/exercises/series/description.md +2 -1
  41. data/common/exercises/sieve/description.md +2 -1
  42. data/common/exercises/space-age/description.md +0 -2
  43. data/common/exercises/strain/description.md +4 -5
  44. data/common/exercises/sublist/description.md +3 -6
  45. data/common/exercises/sum-of-multiples/description.md +2 -1
  46. data/common/exercises/tournament/description.md +4 -3
  47. data/common/exercises/transpose/description.md +1 -3
  48. data/common/exercises/trinary/description.md +2 -1
  49. data/common/exercises/two-bucket/description.md +1 -3
  50. data/common/exercises/two-fer/canonical-data.json +24 -0
  51. data/common/exercises/two-fer/description.md +40 -0
  52. data/common/exercises/two-fer/metadata.yml +4 -0
  53. data/common/exercises/word-search/description.md +2 -4
  54. data/common/exercises/zebra-puzzle/description.md +1 -1
  55. data/lib/trackler.rb +10 -5
  56. data/lib/trackler/description.rb +2 -2
  57. data/lib/trackler/guaranteed_file.rb +15 -15
  58. data/lib/trackler/implementation.rb +5 -5
  59. data/lib/trackler/implementations.rb +2 -2
  60. data/lib/trackler/metadata.rb +2 -2
  61. data/lib/trackler/problem.rb +2 -96
  62. data/lib/trackler/problems.rb +3 -48
  63. data/lib/trackler/specification.rb +101 -0
  64. data/lib/trackler/specifications.rb +52 -0
  65. data/lib/trackler/track.rb +6 -4
  66. data/lib/trackler/version.rb +1 -1
  67. data/tracks/bash/LICENSE +21 -0
  68. data/tracks/bash/README.md +0 -5
  69. data/tracks/c/LICENSE +21 -0
  70. data/tracks/c/README.md +0 -5
  71. data/tracks/clojure/LICENSE +2 -2
  72. data/tracks/clojure/README.org +0 -5
  73. data/tracks/clojure/config.json +5 -0
  74. data/tracks/clojure/exercises/sublist/project.clj +4 -0
  75. data/tracks/clojure/exercises/sublist/src/example.clj +19 -0
  76. data/tracks/clojure/exercises/sublist/sublist.mustache +9 -0
  77. data/tracks/clojure/exercises/sublist/test/sublist_test.clj +40 -0
  78. data/tracks/cpp/LICENSE +2 -2
  79. data/tracks/cpp/README.md +0 -5
  80. data/tracks/csharp/LICENSE +2 -2
  81. data/tracks/csharp/README.md +0 -5
  82. data/tracks/delphi/LICENSE +2 -2
  83. data/tracks/delphi/README.md +0 -5
  84. data/tracks/ecmascript/LICENSE +2 -2
  85. data/tracks/ecmascript/README.md +0 -5
  86. data/tracks/elisp/.travis.yml +7 -3
  87. data/tracks/elisp/LICENSE +2 -2
  88. data/tracks/elisp/README.org +3 -6
  89. data/tracks/elisp/bin/test-examples +27 -0
  90. data/tracks/elisp/config.json +10 -0
  91. data/tracks/elisp/docs/LEARNING.org +0 -3
  92. data/tracks/elisp/exercises/grains/example.el +18 -0
  93. data/tracks/elisp/exercises/grains/grains-test.el +38 -0
  94. data/tracks/elisp/exercises/grains/grains.el +10 -0
  95. data/tracks/elisp/exercises/phone-number/example.el +34 -0
  96. data/tracks/elisp/exercises/phone-number/phone-number-test.el +43 -0
  97. data/tracks/elisp/exercises/phone-number/phone-number.el +9 -0
  98. data/tracks/elixir/LICENSE +2 -2
  99. data/tracks/elixir/README.md +0 -5
  100. data/tracks/elm/LICENSE +2 -2
  101. data/tracks/elm/README.md +0 -5
  102. data/tracks/erlang/LICENSE +2 -2
  103. data/tracks/erlang/README.md +0 -5
  104. data/tracks/erlang/SETUP.md +7 -0
  105. data/tracks/erlang/exercises/rotational-cipher/rebar.config +5 -5
  106. data/tracks/erlang/exercises/rotational-cipher/test/rotational_cipher_tests.erl +18 -18
  107. data/tracks/factor/LICENSE +2 -2
  108. data/tracks/fortran/.github/PULL_REQUEST_TEMPLATE.md +23 -0
  109. data/tracks/fortran/.gitignore +4 -0
  110. data/tracks/fortran/.travis.yml +17 -0
  111. data/tracks/fortran/LICENSE +21 -0
  112. data/tracks/fortran/Makefile +40 -0
  113. data/tracks/fortran/README.md +72 -0
  114. data/tracks/fortran/bin/fetch-configlet +32 -0
  115. data/tracks/fortran/config.json +32 -0
  116. data/tracks/{kotlin/SETUP.md → fortran/docs/ABOUT.md} +0 -0
  117. data/tracks/fortran/docs/INSTALLATION.md +0 -0
  118. data/tracks/fortran/docs/LEARNING.md +0 -0
  119. data/tracks/fortran/docs/RESOURCES.md +0 -0
  120. data/tracks/fortran/docs/TESTS.md +0 -0
  121. data/tracks/fortran/exercises/TRACK_HINTS.md +0 -0
  122. data/tracks/fortran/exercises/bob/bob.fun +114 -0
  123. data/tracks/fortran/exercises/bob/example.f90 +61 -0
  124. data/tracks/fortran/exercises/hello_world/example.f90 +9 -0
  125. data/tracks/fortran/exercises/hello_world/hello_world.fun +10 -0
  126. data/tracks/fortran/img/.keep +0 -0
  127. data/tracks/fsharp/LICENSE +2 -2
  128. data/tracks/fsharp/README.md +0 -5
  129. data/tracks/go/LICENSE +2 -2
  130. data/tracks/go/README.md +0 -5
  131. data/tracks/haskell/LICENSE +2 -2
  132. data/tracks/haskell/README.md +0 -5
  133. data/tracks/idris/LICENSE +2 -2
  134. data/tracks/idris/README.md +0 -5
  135. data/tracks/java/LICENSE +2 -2
  136. data/tracks/java/README.md +0 -7
  137. data/tracks/java/{SETUP.md → TRACK_HINTS.md} +0 -0
  138. data/tracks/java/config.json +5 -0
  139. data/tracks/java/exercises/_template/build.gradle +1 -0
  140. data/tracks/java/exercises/accumulate/build.gradle +1 -0
  141. data/tracks/java/exercises/acronym/build.gradle +1 -0
  142. data/tracks/java/exercises/all-your-base/build.gradle +1 -0
  143. data/tracks/java/exercises/allergies/build.gradle +1 -0
  144. data/tracks/java/exercises/anagram/build.gradle +1 -0
  145. data/tracks/java/exercises/atbash-cipher/build.gradle +1 -0
  146. data/tracks/java/exercises/beer-song/build.gradle +1 -0
  147. data/tracks/java/exercises/binary-search/build.gradle +1 -0
  148. data/tracks/java/exercises/binary/build.gradle +1 -0
  149. data/tracks/java/exercises/bob/build.gradle +1 -0
  150. data/tracks/java/exercises/book-store/build.gradle +1 -0
  151. data/tracks/java/exercises/bracket-push/build.gradle +1 -0
  152. data/tracks/java/exercises/change/build.gradle +1 -0
  153. data/tracks/java/exercises/clock/build.gradle +2 -1
  154. data/tracks/java/exercises/collatz-conjecture/build.gradle +18 -0
  155. data/tracks/java/exercises/collatz-conjecture/src/example/java/CollatzCalculator.java +19 -0
  156. data/tracks/java/exercises/collatz-conjecture/src/main/java/CollatzCalculator.java +7 -0
  157. data/tracks/java/exercises/collatz-conjecture/src/test/java/CollatzCalculatorTest.java +59 -0
  158. data/tracks/java/exercises/crypto-square/build.gradle +1 -0
  159. data/tracks/java/exercises/diamond/build.gradle +1 -0
  160. data/tracks/java/exercises/diamond/src/example/java/DiamondPrinter.java +4 -4
  161. data/tracks/java/exercises/diamond/src/test/java/DiamondPrinterTest.java +6 -2
  162. data/tracks/java/exercises/difference-of-squares/build.gradle +1 -0
  163. data/tracks/java/exercises/difference-of-squares/src/main/java/.keep +0 -0
  164. data/tracks/java/exercises/etl/build.gradle +1 -0
  165. data/tracks/java/exercises/flatten-array/build.gradle +1 -0
  166. data/tracks/java/exercises/gigasecond/build.gradle +1 -0
  167. data/tracks/java/exercises/grade-school/build.gradle +1 -0
  168. data/tracks/java/exercises/hamming/build.gradle +1 -0
  169. data/tracks/java/exercises/hexadecimal/build.gradle +1 -0
  170. data/tracks/java/exercises/isogram/build.gradle +1 -0
  171. data/tracks/java/exercises/kindergarten-garden/build.gradle +1 -0
  172. data/tracks/java/exercises/largest-series-product/build.gradle +1 -0
  173. data/tracks/java/exercises/linked-list/build.gradle +1 -0
  174. data/tracks/java/exercises/luhn/build.gradle +1 -0
  175. data/tracks/java/exercises/matrix/build.gradle +2 -1
  176. data/tracks/java/exercises/meetup/build.gradle +1 -0
  177. data/tracks/java/exercises/minesweeper/build.gradle +1 -0
  178. data/tracks/java/exercises/nth-prime/build.gradle +1 -0
  179. data/tracks/java/exercises/ocr-numbers/build.gradle +1 -0
  180. data/tracks/java/exercises/octal/build.gradle +1 -0
  181. data/tracks/java/exercises/pangram/build.gradle +1 -0
  182. data/tracks/java/exercises/pascals-triangle/build.gradle +1 -0
  183. data/tracks/java/exercises/perfect-numbers/build.gradle +1 -0
  184. data/tracks/java/exercises/phone-number/build.gradle +1 -0
  185. data/tracks/java/exercises/pig-latin/build.gradle +1 -0
  186. data/tracks/java/exercises/queen-attack/build.gradle +1 -0
  187. data/tracks/java/exercises/raindrops/build.gradle +1 -0
  188. data/tracks/java/exercises/rectangles/build.gradle +1 -0
  189. data/tracks/java/exercises/rna-transcription/build.gradle +1 -0
  190. data/tracks/java/exercises/robot-simulator/build.gradle +1 -0
  191. data/tracks/java/exercises/roman-numerals/build.gradle +1 -0
  192. data/tracks/java/exercises/run-length-encoding/build.gradle +1 -0
  193. data/tracks/java/exercises/saddle-points/build.gradle +1 -0
  194. data/tracks/java/exercises/scrabble-score/build.gradle +1 -0
  195. data/tracks/java/exercises/secret-handshake/build.gradle +1 -0
  196. data/tracks/java/exercises/series/build.gradle +1 -0
  197. data/tracks/java/exercises/settings.gradle +1 -0
  198. data/tracks/java/exercises/sieve/build.gradle +1 -0
  199. data/tracks/java/exercises/simple-cipher/build.gradle +1 -0
  200. data/tracks/java/exercises/simple-linked-list/build.gradle +1 -0
  201. data/tracks/java/exercises/space-age/build.gradle +1 -0
  202. data/tracks/java/exercises/strain/build.gradle +1 -0
  203. data/tracks/java/exercises/sublist/build.gradle +1 -0
  204. data/tracks/java/exercises/sum-of-multiples/build.gradle +1 -0
  205. data/tracks/java/exercises/triangle/build.gradle +1 -0
  206. data/tracks/java/exercises/trinary/build.gradle +1 -0
  207. data/tracks/java/exercises/twelve-days/build.gradle +2 -1
  208. data/tracks/java/exercises/word-count/build.gradle +1 -0
  209. data/tracks/java/exercises/wordy/build.gradle +1 -0
  210. data/tracks/javascript/LICENSE +2 -2
  211. data/tracks/javascript/README.md +0 -5
  212. data/tracks/julia/LICENSE +2 -2
  213. data/tracks/kotlin/LICENSE +2 -2
  214. data/tracks/kotlin/README.md +0 -7
  215. data/tracks/kotlin/TRACK_HINTS.md +1 -0
  216. data/tracks/kotlin/exercises/phone-number/src/example/kotlin/PhoneNumber.kt +1 -1
  217. data/tracks/kotlin/exercises/phone-number/src/test/kotlin/PhoneNumberTest.kt +7 -8
  218. data/tracks/kotlin/exercises/rna-transcription/src/test/kotlin/RnaTranscriptionTest.kt +6 -6
  219. data/tracks/lfe/LICENSE +2 -2
  220. data/tracks/lfe/README.md +0 -5
  221. data/tracks/lisp/LICENSE +2 -2
  222. data/tracks/lisp/README.md +0 -5
  223. data/tracks/lua/LICENSE +2 -2
  224. data/tracks/lua/README.md +0 -5
  225. data/tracks/mips/LICENSE +2 -2
  226. data/tracks/mips/README.md +0 -5
  227. data/tracks/objective-c/LICENSE +2 -2
  228. data/tracks/objective-c/README.md +0 -5
  229. data/tracks/ocaml/LICENSE +2 -2
  230. data/tracks/ocaml/README.md +0 -5
  231. data/tracks/ocaml/config.json +54 -25
  232. data/tracks/ocaml/exercises/forth/.merlin +5 -0
  233. data/tracks/ocaml/exercises/forth/Makefile +11 -0
  234. data/tracks/ocaml/exercises/forth/example.ml +89 -0
  235. data/tracks/ocaml/exercises/forth/forth.mli +1 -0
  236. data/tracks/ocaml/exercises/forth/test.ml +147 -0
  237. data/tracks/ocaml/exercises/react/.merlin +5 -0
  238. data/tracks/ocaml/exercises/react/HINT.md +3 -0
  239. data/tracks/ocaml/exercises/react/Makefile +11 -0
  240. data/tracks/ocaml/exercises/react/example.ml +106 -0
  241. data/tracks/ocaml/exercises/react/react.mli +26 -0
  242. data/tracks/ocaml/exercises/react/test.ml +157 -0
  243. data/tracks/ocaml/tools/test-generator/src/special_cases.ml +5 -2
  244. data/tracks/ocaml/tools/test-generator/templates/forth/template.ml +114 -0
  245. data/tracks/perl5/LICENSE +2 -2
  246. data/tracks/perl6/LICENSE +2 -2
  247. data/tracks/perl6/README.md +0 -5
  248. data/tracks/perl6/config.json +5 -0
  249. data/tracks/perl6/exercises/clock/Example.pm6 +2 -2
  250. data/tracks/perl6/exercises/flatten-array/Example.pm6 +13 -0
  251. data/tracks/perl6/exercises/flatten-array/FlattenArray.pm6 +4 -0
  252. data/tracks/perl6/exercises/flatten-array/example.yaml +6 -0
  253. data/tracks/perl6/exercises/flatten-array/flatten-array.t +80 -0
  254. data/tracks/php/LICENSE +2 -2
  255. data/tracks/php/README.md +0 -5
  256. data/tracks/powershell/.travis.yml +1 -0
  257. data/tracks/python/LICENSE +2 -2
  258. data/tracks/python/README.md +0 -5
  259. data/tracks/python/config.json +8 -0
  260. data/tracks/python/exercises/protein-translation/example.py +25 -0
  261. data/tracks/python/exercises/protein-translation/protein_translation.py +6 -0
  262. data/tracks/python/exercises/protein-translation/protein_translation_test.py +59 -0
  263. data/tracks/r/LICENSE +2 -2
  264. data/tracks/r/README.md +0 -5
  265. data/tracks/racket/LICENSE +2 -2
  266. data/tracks/racket/README.md +0 -5
  267. data/tracks/racket/config.json +5 -0
  268. data/tracks/racket/exercises/acronym/acronym-test.rkt +40 -0
  269. data/tracks/racket/exercises/acronym/acronym.rkt +3 -0
  270. data/tracks/racket/exercises/acronym/example.rkt +25 -0
  271. data/tracks/racket/exercises/grep/example.rkt +60 -26
  272. data/tracks/racket/exercises/grep/grep-test.rkt +154 -17
  273. data/tracks/racket/exercises/grep/grep.rkt +1 -18
  274. data/tracks/racket/exercises/grep/iliad.txt +9 -0
  275. data/tracks/racket/exercises/grep/midsummer-night.txt +7 -0
  276. data/tracks/racket/exercises/grep/paradise-lost.txt +8 -0
  277. data/tracks/ruby/README.md +4 -1
  278. data/tracks/ruby/exercises/acronym/.meta/.version +1 -1
  279. data/tracks/ruby/exercises/acronym/.meta/solutions/acronym.rb +1 -1
  280. data/tracks/ruby/exercises/acronym/acronym_test.rb +2 -7
  281. data/tracks/ruby/exercises/anagram/.meta/generator/anagram_case.rb +1 -1
  282. data/tracks/ruby/exercises/beer-song/.meta/generator/beer_song_case.rb +1 -1
  283. data/tracks/ruby/exercises/clock/.meta/generator/clock_case.rb +1 -1
  284. data/tracks/ruby/exercises/connect/.meta/generator/connect_case.rb +0 -3
  285. data/tracks/ruby/exercises/connect/.meta/generator/test_template.erb +1 -1
  286. data/tracks/ruby/exercises/difference-of-squares/.meta/.version +1 -1
  287. data/tracks/ruby/exercises/difference-of-squares/.meta/solutions/difference_of_squares.rb +1 -1
  288. data/tracks/ruby/exercises/difference-of-squares/difference_of_squares_test.rb +12 -17
  289. data/tracks/ruby/exercises/triangle/.meta/generator/triangle_case.rb +10 -2
  290. data/tracks/ruby/exercises/triangle/triangle_test.rb +17 -17
  291. data/tracks/ruby/exercises/wordy/.meta/generator/wordy_case.rb +1 -1
  292. data/tracks/ruby/lib/generator/case_values.rb +1 -1
  293. data/tracks/ruby/lib/generator/exercise_case.rb +16 -2
  294. data/tracks/ruby/lib/generator/exercise_case/assertion.rb +4 -4
  295. data/tracks/ruby/test/fixtures/xruby/exercises/alpha/.meta/generator/alpha_case.rb +1 -1
  296. data/tracks/ruby/test/generator/case_values_test.rb +28 -7
  297. data/tracks/ruby/test/generator/exercise_case/assertion_test.rb +7 -7
  298. data/tracks/ruby/test/generator/exercise_case_test.rb +21 -25
  299. data/tracks/ruby/test/wordy_cases_test.rb +4 -4
  300. data/tracks/rust/LICENSE +2 -2
  301. data/tracks/rust/README.md +0 -5
  302. data/tracks/rust/config.json +1 -0
  303. data/tracks/rust/exercises/etl/Cargo.toml +1 -1
  304. data/tracks/rust/exercises/etl/example.rs +2 -2
  305. data/tracks/rust/exercises/etl/tests/etl.rs +26 -32
  306. data/tracks/rust/exercises/forth/tests/forth.rs +20 -22
  307. data/tracks/rust/exercises/minesweeper/Cargo.toml +1 -1
  308. data/tracks/rust/exercises/minesweeper/example.rs +3 -0
  309. data/tracks/rust/exercises/minesweeper/tests/minesweeper.rs +44 -46
  310. data/tracks/rust/exercises/raindrops/Cargo.toml +1 -1
  311. data/tracks/rust/exercises/raindrops/tests/raindrops.rs +12 -0
  312. data/tracks/rust/exercises/rna-transcription/Cargo.toml +1 -1
  313. data/tracks/rust/exercises/rna-transcription/example.rs +13 -9
  314. data/tracks/rust/exercises/rna-transcription/tests/rna-transcription.rs +23 -5
  315. data/tracks/scala/LICENSE +2 -2
  316. data/tracks/scala/README.md +0 -5
  317. data/tracks/scheme/LICENSE +2 -2
  318. data/tracks/scheme/README.org +0 -6
  319. data/tracks/swift/Dangerfile +1 -1
  320. data/tracks/swift/LICENSE +2 -2
  321. data/tracks/swift/README.md +0 -6
  322. data/tracks/vbnet/.travis.yml +1 -0
  323. data/tracks/vimscript/.travis.yml +4 -0
  324. data/tracks/vimscript/.vintrc.yaml +5 -0
  325. data/tracks/vimscript/TRACK_HINTS.md +19 -1
  326. data/tracks/vimscript/bin/pre-push +18 -0
  327. data/tracks/vimscript/config.json +8 -1
  328. data/tracks/vimscript/docs/ABOUT.md +7 -6
  329. data/tracks/vimscript/docs/TESTS.md +4 -4
  330. data/tracks/vimscript/exercises/allergies/allergies.vader +68 -0
  331. data/tracks/vimscript/exercises/allergies/allergies.vim +29 -0
  332. data/tracks/vimscript/exercises/allergies/example.vim +23 -0
  333. data/tracks/vimscript/lib/generate.vim +89 -0
  334. metadata +81 -6
  335. data/tracks/java/exercises/difference-of-squares/src/main/java/DifferenceOfSquaresCalculator.java +0 -15
  336. data/tracks/ocaml/.vscode/launch.json +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f709e319865d19a3edd18d5e20ff5f0fabcd438b
4
- data.tar.gz: 9a9e667cc9ef535f6cb3fd28270f4a09f8a4acf9
3
+ metadata.gz: 8e992178474e75584ead434f6949b980b992ed45
4
+ data.tar.gz: d6b4cbd00de3ee42f96e025937e18154edfab66e
5
5
  SHA512:
6
- metadata.gz: ae5e1c6d35bcbe9879f021fe2130ecfa6cf7a365e40d56271c7b04d66fc367fa80c768ebfb8d466a8ef6208a1e26bbd5cc2a9e0a61d6d8763cd945392afd7ed7
7
- data.tar.gz: 946c99dd215e5e1f0d74089a72280e33e7ce035743381878fd8f363c960e63685a1e52ed2307a94098fbb1f047229e127030bd97783e6e09d6235f64d0319218
6
+ metadata.gz: 67568e6b9ef2079e4f16e767c01c147d664b12a3629196b517c12f74a9124a5d82e2c214623153ab0b59d9b26b60d96218d46eea64dcaaef693f49c8c62c043b
7
+ data.tar.gz: 2ac45474dfdfda50caa53c35dfccb94b9ec5947cd77570fb82ac9d159c95a9efc1bfe381178c6c2055a5869a91b85e1f05b7e0830d2a2eeafc241fccefa6b812
data/.gitmodules CHANGED
@@ -178,3 +178,6 @@
178
178
  [submodule "tracks/coq"]
179
179
  path = tracks/coq
180
180
  url = https://github.com/exercism/xcoq
181
+ [submodule "tracks/fortran"]
182
+ path = tracks/fortran
183
+ url = https://github.com/exercism/xfortran
data/CONTRIBUTING.md CHANGED
@@ -10,17 +10,12 @@ A git submodule is essentially a project in another project.
10
10
 
11
11
  ## Terminology
12
12
 
13
- * _Language_ - the name of a programming language, e.g. _C++_.
14
- * _Track_ - a collection of exercises in a programming language.
15
- * _Track ID_ - a url-friendly version of the language name, e.g. `cpp`.
16
- * _Problem_ - a high-level, language-independent description of a problem to solve.
17
- * _Implementation_ - a language-specific implementation of a problem. This contains at
18
- minimum a README and a test suite.
13
+ Check out the [glossary][] for an overview of the important terms for Exercism, many
14
+ of which are used as class names in this codebase.
19
15
 
20
16
  ## Adding a New Language Track
21
17
 
22
- To start a new language track, ask [Katrina](https://github.com/kytrinyx) to bootstrap a
23
- repository for you.
18
+ To start a new language track, open an issue in the [request-new-language-track][] repository.
24
19
 
25
20
  Once the repository exists, it can be added as a submodule here (using C++ as an example):
26
21
 
@@ -31,3 +26,5 @@ $ TRACK_ID=cpp; git submodule add https://github.com/exercism/x$TRACK_ID.git tra
31
26
  [submodule]: https://git-scm.com/book/en/v2/Git-Tools-Submodules
32
27
  [xtracks]: https://github.com/exercism/trackler/tree/master/tracks
33
28
  [xcommon]: https://github.com/exercism/x-common
29
+ [glossary]: https://github.com/exercism/docs/blob/master/glossary.md
30
+ [request-new-language-track]: https://github.com/exercism/request-new-language-track
data/README.md CHANGED
@@ -36,26 +36,26 @@ track.implementations.each do |implementation|
36
36
  end
37
37
  ```
38
38
 
39
- To get a problem, use the problem slug:
39
+ To get the specification of a problem, use the exercise slug:
40
40
 
41
41
  ```
42
- problem = Trackler.problems["leap"]
42
+ specification = Trackler.specifications["leap"]
43
43
  ```
44
44
 
45
- Problems contain the generic, language-independent metadata:
45
+ Specifications contain the generic, language-independent metadata:
46
46
 
47
47
  ```
48
- problem.blurb
48
+ specification.blurb
49
49
  # => "Write a program that will take a year and report if it is a leap year."
50
- problem.name
50
+ specification.name
51
51
  # => "Leap"
52
52
  ```
53
53
 
54
- You can get all of the different language implementations for a problem:
54
+ You can get all of the different language implementations for a specification:
55
55
 
56
56
  ```
57
57
 
58
- Trackler.implementations[problem.slug].each do |implementation|
58
+ Trackler.implementations[specification.slug].each do |implementation|
59
59
  # ...
60
60
  end
61
61
  ```
@@ -32,7 +32,6 @@ themselves. There are other guides about contributing to other parts of the Exer
32
32
  * [Providing Feedback on the Site for an Exercise You Implemented](#providing-feedback-on-the-site-for-an-exercise-you-implemented)
33
33
  * [Implementing a Completely New Exercise](#implementing-a-completely-new-exercise)
34
34
  * [Improving Consistency By Extracting Shared Test Data](#improving-consistency-by-extracting-shared-test-data)
35
- * [Writing a New Test Suite Generator](#writing-a-new-test-suite-generator)
36
35
  * [Track Anatomy](#track-anatomy)
37
36
  * [Starting a New Track](#starting-a-new-track)
38
37
  * [Beta-Testing a Language Track](#beta-testing-a-language-track)
@@ -404,10 +403,6 @@ From what you learned in step 3 decide for a sensible set of test cases. The fol
404
403
 
405
404
  If you are unsure about all these considerations just make a pull request with an initial proposal and ask the community for help.
406
405
 
407
- ## Writing a New Test Suite Generator
408
-
409
- TODO: elaborate.
410
-
411
406
  ## Track Anatomy
412
407
 
413
408
  Each track should have the following structure:
@@ -1,4 +1,7 @@
1
- Implement the `accumulate` operation, which, given a collection and an operation to perform on each element of the collection, returns a new collection containing the result of applying that operation to each element of the input collection.
1
+ Implement the `accumulate` operation, which, given a collection and an
2
+ operation to perform on each element of the collection, returns a new
3
+ collection containing the result of applying that operation to each element of
4
+ the input collection.
2
5
 
3
6
  Given the collection of numbers:
4
7
 
@@ -1,4 +1,4 @@
1
- Convert a long phrase to its acronym.
1
+ Convert a phrase to its acronym.
2
2
 
3
3
  Techies love their TLA (Three Letter Acronyms)!
4
4
 
@@ -1,4 +1,5 @@
1
- Simulate a bank account supporting opening/closing, withdraws, and deposits of money. Watch out for concurrent transactions!
1
+ Simulate a bank account supporting opening/closing, withdrawals, and deposits
2
+ of money. Watch out for concurrent transactions!
2
3
 
3
4
  A bank account can be accessed in multiple ways. Clients can make
4
5
  deposits and withdrawals using the internet, mobile phones, etc. Shops
@@ -1,8 +1,5 @@
1
- To try and encourage more sales of different books from a popular 5 book series, a bookshop has decided to offer discounts of multiple-book purchases.
2
-
3
- To try and encourage more sales of the 5 different books
4
- they sell of a popular series, a bookshop has decided to
5
- offer discounts of multi-book purchases.
1
+ To try and encourage more sales of different books from a popular 5 book
2
+ series, a bookshop has decided to offer discounts on multiple book purchases.
6
3
 
7
4
  One copy of any of the five books costs $8.
8
5
 
@@ -1,4 +1,2 @@
1
- Make sure the brackets and braces all match.
2
-
3
- Ensure that all the brackets and braces are matched correctly,
4
- and nested correctly.
1
+ Given a string containing brackets `[]`, braces `{}` and parentheses `()`,
2
+ verify that all the pairs are matched and nested correctly.
@@ -1,8 +1,5 @@
1
- Correctly determine change to be given using the least number of coins.
2
-
3
- Correctly determine the fewest number of coins to be given to the user
4
- such that the sum of the coins' value would equal the correct amount
5
- of change.
1
+ Correctly determine the fewest number of coins to be given to a customer such
2
+ that the sum of the coins' value would equal the correct amount of change.
6
3
 
7
4
  ## For example
8
5
 
@@ -1,5 +1,3 @@
1
- A data structure that uses a single, fixed-size buffer as if it were connected end-to-end.
2
-
3
1
  A circular buffer, cyclic buffer or ring buffer is a data structure that
4
2
  uses a single, fixed-size buffer as if it were connected end-to-end.
5
3
 
@@ -1,7 +1,5 @@
1
1
  Implement a clock that handles times without dates.
2
2
 
3
- Create a clock that is independent of date.
4
-
5
3
  You should be able to add and subtract minutes to it.
6
4
 
7
5
  Two clocks that represent the same time should be equal to each other.
@@ -0,0 +1,36 @@
1
+ {
2
+ "exercise": "collatz-conjecture",
3
+ "version": "1.0.0",
4
+ "cases": [
5
+ {
6
+ "description": "zero steps for one",
7
+ "property": "steps",
8
+ "number": 1,
9
+ "expected": 0
10
+ },
11
+ {
12
+ "description": "divide if even",
13
+ "property": "steps",
14
+ "number": 16,
15
+ "expected": 4
16
+ },
17
+ {
18
+ "description": "even and odd steps",
19
+ "property": "steps",
20
+ "number": 12,
21
+ "expected": 9
22
+ },
23
+ {
24
+ "description": "zero is an error",
25
+ "property": "steps",
26
+ "number": 0,
27
+ "expected": { "error": "Only positive numbers are allowed" }
28
+ },
29
+ {
30
+ "description": "negative value is an error ",
31
+ "property": "steps",
32
+ "number": -15,
33
+ "expected": { "error": "Only positive numbers are allowed" }
34
+ }
35
+ ]
36
+ }
@@ -0,0 +1,25 @@
1
+ The Collatz Conjecture or 3x+1 problem can be summarized as follows:
2
+
3
+ Take any positive integer n. If n is even, divide n by 2 to get n / 2. If n is
4
+ odd, multiply n by 3 and add 1 to get 3n + 1. Repeat the process indefinitely.
5
+ The conjecture states that no matter which number you start with, you will
6
+ always reach 1 eventually.
7
+
8
+ Given a number n, return the number of steps required to reach 1.
9
+
10
+ ## Examples
11
+ Starting with n = 12, the steps would be as follows:
12
+
13
+ 0. 12
14
+ 1. 6
15
+ 2. 3
16
+ 3. 10
17
+ 4. 5
18
+ 5. 16
19
+ 6. 8
20
+ 7. 4
21
+ 8. 2
22
+ 9. 1
23
+
24
+ Resulting in 9 steps. So for input n = 12, the return value would be 9.
25
+
@@ -0,0 +1,4 @@
1
+ ---
2
+ blurb: "Calculate the number of steps to reach 1 using the Collatz conjecture"
3
+ source: "An unsolved problem in mathematics named after mathematician Lothar Collatz"
4
+ source_url: "https://en.wikipedia.org/wiki/3x_%2B_1_problem"
@@ -1,11 +1,10 @@
1
- Design a test suite for a line/letter/character counter tool.
2
-
3
1
  **NOTE: This exercise has been deprecated.**
4
2
 
5
3
  Please see the discussion in https://github.com/exercism/x-common/issues/80
6
4
  for more context.
7
5
 
8
6
  --------
7
+ Design a test suite for a line/letter/character counter tool.
9
8
 
10
9
  This is a special exercise. Instead of creating code that works with
11
10
  an existing test suite you get to define the test suite. To help you
@@ -1,7 +1,3 @@
1
- Given a letter, print a diamond starting with 'A' with the supplied letter at the widest point.
2
-
3
- ## Diamond kata
4
-
5
1
  The diamond kata takes as its input a letter, and outputs it in a diamond
6
2
  shape. Given a letter, it prints a diamond starting with 'A', with the
7
3
  supplied letter at the widest point.
@@ -1,4 +1,4 @@
1
- Take a nested list and return a single list with all values except nil/null.
1
+ Take a nested list and return a single flattened list with all values except nil/null.
2
2
 
3
3
  The challenge is to write a function that accepts an arbitrarily-deep nested list-like structure and returns a flattened structure without any nil/null values.
4
4
 
@@ -1,4 +1,5 @@
1
- Given students' names along with the grade that they are in, create a roster for the school.
1
+ Given students' names along with the grade that they are in, create a roster
2
+ for the school.
2
3
 
3
4
  In the end, you should be able to:
4
5
 
@@ -1,4 +1,5 @@
1
- Calculate the number of grains of wheat on a chessboard given that the number on each square doubles.
1
+ Calculate the number of grains of wheat on a chessboard given that the number
2
+ on each square doubles.
2
3
 
3
4
  There once was a wise servant who saved the life of a prince. The king
4
5
  promised to pay whatever the servant could dream up. Knowing that the
@@ -1,4 +1,5 @@
1
- Search a file for lines matching a regular expression pattern. Return the line number and contents of each matching line.
1
+ Search a file for lines matching a regular expression pattern. Return the line
2
+ number and contents of each matching line.
2
3
 
3
4
  The Unix [`grep`](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html) command can be used to search for lines in one or more files
4
5
  that match a user-provided search query (known as the *pattern*).
@@ -59,4 +60,4 @@ hello again
59
60
  The `grep` command should support multiple flags at once.
60
61
 
61
62
  For example, running `grep -l -v "hello" file1.txt file2.txt` should
62
- print the names of files that do not contain the string "hello".
63
+ print the names of files that do not contain the string "hello".
@@ -1,4 +1,5 @@
1
- Given a diagram, determine which plants each child in the kindergarten class is responsible for.
1
+ Given a diagram, determine which plants each child in the kindergarten class is
2
+ responsible for.
2
3
 
3
4
  The kindergarten class is learning about growing plants. The teachers
4
5
  thought it would be a good idea to give them actual seeds, plant them in
@@ -1,4 +1,5 @@
1
- Given a string of digits, calculate the largest product for a contiguous substring of digits of length n.
1
+ Given a string of digits, calculate the largest product for a contiguous
2
+ substring of digits of length n.
2
3
 
3
4
  For example, for the input `'1027839564'`, the largest product for a
4
5
  series of 3 digits is 270 (9 * 5 * 6), and the largest product for a
@@ -1,4 +1,5 @@
1
- Given a string representing a matrix of numbers, return the rows and columns of that matrix.
1
+ Given a string representing a matrix of numbers, return the rows and columns of
2
+ that matrix.
2
3
 
3
4
  So given a string with embedded newlines like:
4
5
 
@@ -1,4 +1,5 @@
1
- Write a function that returns the name of an amino acid a particular codon, possibly using shorthand, encodes for.
1
+ Write a function that returns the name of an amino acid a particular codon,
2
+ possibly using shorthand, encodes for.
2
3
 
3
4
  In DNA sequences of 3 nucleotides, called codons, encode for amino acids. Often
4
5
  several codons encode for the same amino acid. The International Union of Pure
@@ -1,4 +1,5 @@
1
- Given a 3 x 4 grid of pipes, underscores, and spaces, determine which number is represented, or whether it is garbled.
1
+ Given a 3 x 4 grid of pipes, underscores, and spaces, determine which number is
2
+ represented, or whether it is garbled.
2
3
 
3
4
  # Step One
4
5
 
@@ -1,4 +1,6 @@
1
- Convert a octal number, represented as a string (e.g. '1735263'), to its decimal equivalent using first principles (i.e. no, you may not use built-in or external libraries to accomplish the conversion).
1
+ Convert an octal number, represented as a string (e.g. '1735263'), to its
2
+ decimal equivalent using first principles (i.e. no, you may not use built-in or
3
+ external libraries to accomplish the conversion).
2
4
 
3
5
  Implement octal to decimal conversion. Given an octal input
4
6
  string, your program should produce a decimal output.
@@ -1,6 +1,7 @@
1
1
  Determine if a sentence is a pangram. A pangram (Greek: παν γράμμα, pan gramma,
2
2
  "every letter") is a sentence using every letter of the alphabet at least once.
3
- The best known English pangram is "The quick brown fox jumps over the lazy dog."
3
+ The best known English pangram is:
4
+ > The quick brown fox jumps over the lazy dog.
4
5
 
5
6
  The alphabet used is ASCII, and case insensitive, from 'a' to 'z'
6
7
  inclusively.
@@ -1,4 +1,5 @@
1
- Determine if a number is perfect, abundant, or deficient based on Nicomachus' (60 - 120 CE) classification scheme for natural numbers.
1
+ Determine if a number is perfect, abundant, or deficient based on
2
+ Nicomachus' (60 - 120 CE) classification scheme for natural numbers.
2
3
 
3
4
  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
4
5
 
@@ -1,6 +1,4 @@
1
1
  Pick the best hand(s) from a list of poker hands.
2
2
 
3
- Write an algorithm to pick the best poker hand(s) from a list.
4
-
5
3
  See [wikipedia](https://en.wikipedia.org/wiki/List_of_poker_hands) for an
6
4
  overview of poker hands.
@@ -1,7 +1,5 @@
1
1
  Translate RNA sequences into proteins.
2
2
 
3
- Let's translate RNA sequences into proteins. [general ref](http://en.wikipedia.org/wiki/Translation_(biology))
4
-
5
3
  RNA can be broken into three nucleotide sequences called codons, and then translated to a polypeptide like so:
6
4
 
7
5
  RNA: `"AUGUUUUCU"` => translates to
@@ -38,3 +36,6 @@ UAU, UAC | Tyrosine
38
36
  UGU, UGC | Cysteine
39
37
  UGG | Tryptophan
40
38
  UAA, UAG, UGA | STOP
39
+
40
+
41
+ Learn more about [protein translation on Wikipedia](http://en.wikipedia.org/wiki/Translation_(biology))
@@ -1,4 +1,5 @@
1
- For want of a horseshoe nail, a kingdom was lost, or so the saying goes. Output the full text of this proverbial rhyme.
1
+ For want of a horseshoe nail, a kingdom was lost, or so the saying goes. Output
2
+ the full text of this proverbial rhyme.
2
3
 
3
4
  For want of a nail the shoe was lost.
4
5
  For want of a shoe the horse was lost.
@@ -1,5 +1,3 @@
1
- There exists exactly one Pythagorean triplet for which a + b + c = 1000. Find the product a * b * c.
2
-
3
1
  A Pythagorean triplet is a set of three natural numbers, {a, b, c}, for
4
2
  which,
5
3
 
@@ -12,3 +10,7 @@ For example,
12
10
  ```
13
11
  3**2 + 4**2 = 9 + 16 = 25 = 5**2.
14
12
  ```
13
+
14
+ There exists exactly one Pythagorean triplet for which a + b + c = 1000.
15
+
16
+ Find the product a * b * c.
@@ -1,4 +1,5 @@
1
- Given the position of two queens on a chess board, indicate whether or not they are positioned so that they can attack each other.
1
+ Given the position of two queens on a chess board, indicate whether or not they
2
+ are positioned so that they can attack each other.
2
3
 
3
4
  In the game of chess, a queen can attack pieces which are on the same
4
5
  row, column, or diagonal.
@@ -1,6 +1,4 @@
1
- Count the rectangles in an ASCII diagram.
2
-
3
- Create a program to count the rectangles in an ASCII diagram like the one below.
1
+ Count the rectangles in an ASCII diagram like the one below.
4
2
 
5
3
  ```
6
4
  +--+
@@ -1,9 +1,5 @@
1
1
  Create an implementation of the rotational cipher, also sometimes called the Caesar cipher.
2
2
 
3
- # Rotational Cipher
4
-
5
- Create an implementation of the rotational cipher, also sometimes called the Caesar cipher.
6
-
7
3
  The Caesar cipher is a simple shift cipher that relies on
8
4
  transposing all the letters in the alphabet using an integer key
9
5
  between `0` and `26`. Using a key of `0` or `26` will always yield