trackler 2.1.0.24 → 2.1.0.25

Sign up to get free protection for your applications and to get access to all the features.
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