trackler 1.0.0 → 1.0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (288) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -0
  3. data/CHANGELOG.md +9 -1
  4. data/README.md +10 -0
  5. data/common/CONTRIBUTING.md +50 -2
  6. data/common/exercises/alphametics/canonical-data.json +10 -10
  7. data/common/exercises/markdown/canonical-data.json +4 -4
  8. data/common/exercises/pov/canonical-data.json +356 -0
  9. data/lib/trackler/version.rb +1 -1
  10. data/trackler.gemspec +1 -2
  11. data/tracks/c/config.json +11 -1
  12. data/tracks/c/exercises/binary-search/makefile +16 -0
  13. data/tracks/c/exercises/binary-search/src/example.c +21 -0
  14. data/tracks/c/exercises/binary-search/src/example.h +8 -0
  15. data/tracks/c/exercises/binary-search/test/test_binary_search.c +99 -0
  16. data/tracks/c/exercises/binary-search/test/vendor/unity.c +1300 -0
  17. data/tracks/c/exercises/binary-search/test/vendor/unity.h +274 -0
  18. data/tracks/c/exercises/binary-search/test/vendor/unity_internals.h +701 -0
  19. data/tracks/clojure/config.json +3 -2
  20. data/tracks/clojure/exercises/bank-account/project.clj +4 -0
  21. data/tracks/clojure/exercises/bank-account/src/example.clj +17 -0
  22. data/tracks/clojure/exercises/bank-account/test/bank_account_test.clj +44 -0
  23. data/tracks/clojure/exercises/isogram/project.clj +4 -0
  24. data/tracks/clojure/exercises/isogram/src/example.clj +5 -0
  25. data/tracks/clojure/exercises/isogram/test/isogram_test.clj +17 -0
  26. data/tracks/csharp/config.json +27 -87
  27. data/tracks/csharp/exercises/exercises.csproj +265 -1
  28. data/tracks/csharp/exercises/grep/Example.cs +114 -0
  29. data/tracks/csharp/exercises/grep/GrepTest.cs +376 -0
  30. data/tracks/csharp/exercises/paket.references +2 -1
  31. data/tracks/csharp/exercises/poker/Example.cs +96 -0
  32. data/tracks/csharp/exercises/poker/PokerTest.cs +171 -0
  33. data/tracks/csharp/exercises/sgf-parsing/Example.cs +61 -0
  34. data/tracks/csharp/exercises/sgf-parsing/SgfParsing.cs +13 -0
  35. data/tracks/csharp/exercises/sgf-parsing/SgfParsingTest.cs +158 -0
  36. data/tracks/csharp/paket.dependencies +2 -1
  37. data/tracks/csharp/paket.lock +72 -0
  38. data/tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js +1 -1
  39. data/tracks/elisp/config.json +6 -1
  40. data/tracks/elisp/exercises/etl/etl-test.el +90 -0
  41. data/tracks/elisp/exercises/etl/etl.el +9 -0
  42. data/tracks/elisp/exercises/etl/example.el +22 -0
  43. data/tracks/elisp/exercises/nucleotide-count/example.el +19 -0
  44. data/tracks/elisp/exercises/nucleotide-count/nucleotide-count-test.el +34 -0
  45. data/tracks/elisp/exercises/nucleotide-count/nucleotide-count.el +9 -0
  46. data/tracks/elisp/exercises/perfect-numbers/example.el +28 -0
  47. data/tracks/elisp/exercises/perfect-numbers/perfect-numbers-test.el +24 -0
  48. data/tracks/elisp/exercises/perfect-numbers/perfect-numbers.el +10 -0
  49. data/tracks/elisp/exercises/roman-numerals/example.el +36 -0
  50. data/tracks/elisp/exercises/roman-numerals/roman-numerals-test.el +30 -0
  51. data/tracks/elisp/exercises/roman-numerals/roman-numerals.el +10 -0
  52. data/tracks/elisp/exercises/word-count/example.el +18 -0
  53. data/tracks/elisp/exercises/word-count/word-count-test.el +64 -0
  54. data/tracks/elisp/exercises/word-count/word-count.el +9 -0
  55. data/tracks/elixir/README.md +4 -4
  56. data/tracks/elixir/SETUP.md +3 -3
  57. data/tracks/elixir/docs/TESTS.md +3 -3
  58. data/tracks/elixir/exercises/accumulate/accumulate_test.exs +7 -7
  59. data/tracks/elixir/exercises/acronym/acronym_test.exs +5 -5
  60. data/tracks/elixir/exercises/allergies/allergies_test.exs +13 -13
  61. data/tracks/elixir/exercises/anagram/anagram_test.exs +12 -12
  62. data/tracks/elixir/exercises/atbash-cipher/atbash_cipher_test.exs +9 -9
  63. data/tracks/elixir/exercises/bank-account/bank_account_test.exs +5 -5
  64. data/tracks/elixir/exercises/beer-song/beer_song_test.exs +6 -6
  65. data/tracks/elixir/exercises/binary-search/binary_search_test.exs +7 -7
  66. data/tracks/elixir/exercises/binary/binary_test.exs +13 -13
  67. data/tracks/elixir/exercises/bob/bob_test.exs +15 -15
  68. data/tracks/elixir/exercises/bowling/bowling_test.exs +18 -18
  69. data/tracks/elixir/exercises/bracket-push/bracket_push_test.exs +12 -12
  70. data/tracks/elixir/exercises/change/change_test.exs +7 -7
  71. data/tracks/elixir/exercises/connect/connect_test.exs +9 -9
  72. data/tracks/elixir/exercises/crypto-square/crypto_square_test.exs +7 -7
  73. data/tracks/elixir/exercises/custom-set/custom_set_test.exs +11 -11
  74. data/tracks/elixir/exercises/diamond/diamond_test.exs +4 -4
  75. data/tracks/elixir/exercises/difference-of-squares/difference_of_squares_test.exs +10 -10
  76. data/tracks/elixir/exercises/dot-dsl/dot_dsl_test.exs +17 -17
  77. data/tracks/elixir/exercises/etl/etl_test.exs +5 -5
  78. data/tracks/elixir/exercises/flatten-array/flatten_array_test.exs +6 -6
  79. data/tracks/elixir/exercises/forth/forth_test.exs +16 -16
  80. data/tracks/elixir/exercises/gigasecond/gigasecond_test.exs +5 -5
  81. data/tracks/elixir/exercises/grade-school/grade_school_test.exs +6 -6
  82. data/tracks/elixir/exercises/grains/grains_test.exs +9 -9
  83. data/tracks/elixir/exercises/hamming/hamming_test.exs +6 -6
  84. data/tracks/elixir/exercises/hello-world/hello_world_test.exs +3 -3
  85. data/tracks/elixir/exercises/hexadecimal/hexadecimal_test.exs +11 -11
  86. data/tracks/elixir/exercises/isogram/isogram_test.exs +10 -10
  87. data/tracks/elixir/exercises/kindergarten-garden/garden_test.exs +7 -7
  88. data/tracks/elixir/exercises/largest-series-product/largest_series_product_test.exs +17 -17
  89. data/tracks/elixir/exercises/leap/leap_test.exs +5 -5
  90. data/tracks/elixir/exercises/list-ops/list_ops_test.exs +26 -26
  91. data/tracks/elixir/exercises/luhn/luhn_test.exs +7 -7
  92. data/tracks/elixir/exercises/markdown/markdown_test.exs +10 -10
  93. data/tracks/elixir/exercises/meetup/meetup_test.exs +92 -92
  94. data/tracks/elixir/exercises/minesweeper/minesweeper_test.exs +8 -8
  95. data/tracks/elixir/exercises/nth-prime/nth_prime_test.exs +6 -6
  96. data/tracks/elixir/exercises/nucleotide-count/example.exs +0 -5
  97. data/tracks/elixir/exercises/nucleotide-count/nucleotide_count_test.exs +7 -7
  98. data/tracks/elixir/exercises/palindrome-products/palindrome_products_test.exs +6 -6
  99. data/tracks/elixir/exercises/pangram/pangram_test.exs +11 -11
  100. data/tracks/elixir/exercises/parallel-letter-frequency/parallel_letter_frequency_test.exs +10 -10
  101. data/tracks/elixir/exercises/pascals-triangle/pascals_triangle_test.exs +7 -7
  102. data/tracks/elixir/exercises/phone-number/phone_number_test.exs +10 -10
  103. data/tracks/elixir/exercises/prime-factors/prime_factors_test.exs +13 -13
  104. data/tracks/elixir/exercises/pythagorean-triplet/pythagorean_triplet_test.exs +8 -8
  105. data/tracks/elixir/exercises/queen-attack/queen_attack_test.exs +16 -16
  106. data/tracks/elixir/exercises/rail-fence-cipher/rail_fence_cipher_test.exs +13 -13
  107. data/tracks/elixir/exercises/raindrops/raindrops_test.exs +17 -17
  108. data/tracks/elixir/exercises/rna-transcription/rna_transcription_test.exs +6 -6
  109. data/tracks/elixir/exercises/robot-simulator/robot_simulator_test.exs +6 -6
  110. data/tracks/elixir/exercises/roman-numerals/roman_numerals_test.exs +19 -19
  111. data/tracks/elixir/exercises/run-length-encoding/rle_test.exs +6 -6
  112. data/tracks/elixir/exercises/saddle-points/saddle_points_test.exs +11 -11
  113. data/tracks/elixir/exercises/scrabble-score/scrabble_score_test.exs +9 -9
  114. data/tracks/elixir/exercises/sieve/sieve_test.exs +3 -3
  115. data/tracks/elixir/exercises/space-age/space_age_test.exs +9 -9
  116. data/tracks/elixir/exercises/sublist/sublist_test.exs +20 -20
  117. data/tracks/elixir/exercises/sum-of-multiples/sum_of_multiples_test.exs +11 -11
  118. data/tracks/elixir/exercises/test_helper.exs +1 -1
  119. data/tracks/elixir/exercises/triangle/triangle_test.exs +16 -16
  120. data/tracks/elixir/exercises/word-count/word_count_test.exs +9 -9
  121. data/tracks/elixir/exercises/wordy/wordy_test.exs +16 -16
  122. data/tracks/elixir/exercises/zipper/zipper_test.exs +13 -13
  123. data/tracks/fsharp/build.fsx +2 -7
  124. data/tracks/fsharp/config.json +0 -104
  125. data/tracks/fsharp/exercises/grep/GrepTest.fs +7 -1
  126. data/tracks/go/config.json +1 -0
  127. data/tracks/go/exercises/acronym/acronym_test.go +36 -0
  128. data/tracks/go/exercises/acronym/example.go +21 -0
  129. data/tracks/go/exercises/palindrome-products/example.go +2 -0
  130. data/tracks/go/exercises/palindrome-products/palindrome_products_test.go +10 -0
  131. data/tracks/go/exercises/phone-number/example.go +2 -0
  132. data/tracks/go/exercises/phone-number/phone_number_test.go +44 -27
  133. data/tracks/go/exercises/robot-simulator/defs.go +6 -6
  134. data/tracks/go/exercises/robot-simulator/example.go +22 -22
  135. data/tracks/go/exercises/robot-simulator/robot_simulator_step2_test.go +28 -28
  136. data/tracks/go/exercises/robot-simulator/robot_simulator_step3_test.go +75 -76
  137. data/tracks/go/exercises/robot-simulator/robot_simulator_test.go +10 -4
  138. data/tracks/haskell/exercises/anagram/HINTS.md +22 -0
  139. data/tracks/haskell/exercises/anagram/package.yaml +3 -0
  140. data/tracks/haskell/exercises/anagram/src/Example.hs +10 -7
  141. data/tracks/haskell/exercises/anagram/test/Tests.hs +9 -3
  142. data/tracks/haskell/exercises/beer-song/HINTS.md +18 -0
  143. data/tracks/haskell/exercises/beer-song/src/Beer.hs +301 -3
  144. data/tracks/haskell/exercises/beer-song/src/Example.hs +5 -3
  145. data/tracks/haskell/exercises/beer-song/test/Tests.hs +332 -23
  146. data/tracks/haskell/exercises/crypto-square/src/CryptoSquare.hs +3 -17
  147. data/tracks/haskell/exercises/crypto-square/src/Example.hs +12 -20
  148. data/tracks/haskell/exercises/crypto-square/test/Tests.hs +46 -86
  149. data/tracks/haskell/exercises/leap/HINTS.md +11 -0
  150. data/tracks/haskell/exercises/leap/src/LeapYear.hs +1 -0
  151. data/tracks/java/exercises/pangram/src/test/java/PangramTest.java +34 -4
  152. data/tracks/lua/exercises/pov/pov_spec.lua +0 -13
  153. data/tracks/mips/docs/ABOUT.md +1 -1
  154. data/tracks/objective-c/config.json +225 -0
  155. data/tracks/objective-c/exercises/largest-series-product/LargestSeriesProductExample.h +8 -0
  156. data/tracks/objective-c/exercises/largest-series-product/LargestSeriesProductExample.m +63 -0
  157. data/tracks/objective-c/exercises/largest-series-product/LargestSeriesProductTest.m +84 -0
  158. data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +18 -0
  159. data/tracks/ocaml/.travis-ci.sh +23 -0
  160. data/tracks/ocaml/.travis.yml +5 -1
  161. data/tracks/ocaml/Makefile +41 -0
  162. data/tracks/ocaml/config.json +18 -0
  163. data/tracks/ocaml/exercises/anagram/Makefile +1 -0
  164. data/tracks/ocaml/exercises/beer-song/Makefile +1 -0
  165. data/tracks/ocaml/exercises/beer-song/{beer.mli → beer_song.mli} +0 -0
  166. data/tracks/ocaml/exercises/beer-song/example.ml +1 -1
  167. data/tracks/ocaml/exercises/beer-song/test.ml +7 -6
  168. data/tracks/ocaml/exercises/bob/Makefile +1 -0
  169. data/tracks/ocaml/exercises/bowling/Makefile +1 -0
  170. data/tracks/ocaml/exercises/custom-set/Makefile +1 -0
  171. data/tracks/ocaml/exercises/difference-of-squares/.merlin +5 -0
  172. data/tracks/ocaml/exercises/difference-of-squares/Makefile +11 -0
  173. data/tracks/ocaml/exercises/difference-of-squares/difference_of_squares.mli +8 -0
  174. data/tracks/ocaml/exercises/difference-of-squares/example.ml +21 -0
  175. data/tracks/ocaml/exercises/difference-of-squares/test.ml +32 -0
  176. data/tracks/ocaml/exercises/grade-school/Makefile +1 -0
  177. data/tracks/ocaml/exercises/grade-school/{school.mli → grade_school.mli} +0 -0
  178. data/tracks/ocaml/exercises/grade-school/test.ml +27 -27
  179. data/tracks/ocaml/exercises/hamming/Makefile +1 -0
  180. data/tracks/ocaml/exercises/hangman/Makefile +1 -0
  181. data/tracks/ocaml/exercises/hello-world/Makefile +1 -1
  182. data/tracks/ocaml/exercises/hello-world/{hello.ml → hello_world.ml} +0 -0
  183. data/tracks/ocaml/exercises/hello-world/{hello.mli → hello_world.mli} +0 -0
  184. data/tracks/ocaml/exercises/hello-world/test.ml +1 -1
  185. data/tracks/ocaml/exercises/hexadecimal/Makefile +1 -0
  186. data/tracks/ocaml/exercises/leap/Makefile +1 -1
  187. data/tracks/ocaml/exercises/list-ops/Makefile +1 -0
  188. data/tracks/ocaml/exercises/luhn/Makefile +1 -0
  189. data/tracks/ocaml/exercises/minesweeper/Makefile +1 -0
  190. data/tracks/ocaml/exercises/nucleotide-count/Makefile +1 -0
  191. data/tracks/ocaml/exercises/nucleotide-count/{dna.mli → nucleotide_count.mli} +0 -0
  192. data/tracks/ocaml/exercises/nucleotide-count/test.ml +7 -7
  193. data/tracks/ocaml/exercises/phone-number/Makefile +1 -0
  194. data/tracks/ocaml/exercises/phone-number/{phone.mli → phone_number.mli} +0 -0
  195. data/tracks/ocaml/exercises/phone-number/test.ml +10 -10
  196. data/tracks/ocaml/exercises/point-mutations/Makefile +8 -0
  197. data/tracks/ocaml/exercises/point-mutations/example.ml +0 -0
  198. data/tracks/ocaml/exercises/prime-factors/Makefile +1 -0
  199. data/tracks/ocaml/exercises/raindrops/.merlin +5 -0
  200. data/tracks/ocaml/exercises/raindrops/Makefile +11 -0
  201. data/tracks/ocaml/exercises/raindrops/example.ml +11 -0
  202. data/tracks/ocaml/exercises/raindrops/raindrops.mli +7 -0
  203. data/tracks/ocaml/exercises/raindrops/test.ml +48 -0
  204. data/tracks/ocaml/exercises/rna-transcription/Makefile +1 -0
  205. data/tracks/ocaml/exercises/rna-transcription/{dna.mli → rna_transcription.mli} +0 -0
  206. data/tracks/ocaml/exercises/rna-transcription/test.ml +6 -6
  207. data/tracks/ocaml/exercises/roman-numerals/Makefile +1 -0
  208. data/tracks/ocaml/exercises/say/.gitignore +1 -0
  209. data/tracks/ocaml/exercises/say/.merlin +5 -0
  210. data/tracks/ocaml/exercises/say/Makefile +11 -0
  211. data/tracks/ocaml/exercises/say/example.ml +52 -0
  212. data/tracks/ocaml/exercises/say/say.mli +8 -0
  213. data/tracks/ocaml/exercises/say/test.ml +65 -0
  214. data/tracks/ocaml/exercises/space-age/Makefile +1 -0
  215. data/tracks/ocaml/exercises/word-count/Makefile +1 -0
  216. data/tracks/ocaml/exercises/word-count/example.ml +1 -1
  217. data/tracks/ocaml/exercises/zipper/HINT.md +5 -6
  218. data/tracks/ocaml/exercises/zipper/Makefile +1 -0
  219. data/tracks/ocaml/exercises/zipper/example.ml +2 -2
  220. data/tracks/ocaml/exercises/zipper/tree.ml +1 -1
  221. data/tracks/php/config.json +7 -1
  222. data/tracks/php/exercises/variable-length-quantity/example.php +56 -0
  223. data/tracks/php/exercises/variable-length-quantity/variable-length-quantity_test.php +149 -0
  224. data/tracks/python/config.json +1 -1
  225. data/tracks/ruby/.rubocop.yml +1915 -26
  226. data/tracks/ruby/bin/generate-acronym +7 -0
  227. data/tracks/ruby/bin/generate-nth-prime +7 -0
  228. data/tracks/ruby/config.json +482 -0
  229. data/tracks/ruby/exercises/acronym/.version +1 -0
  230. data/tracks/ruby/exercises/acronym/acronym_test.rb +45 -21
  231. data/tracks/ruby/exercises/acronym/example.rb +1 -1
  232. data/tracks/ruby/exercises/acronym/example.tt +19 -0
  233. data/tracks/ruby/exercises/anagram/anagram_test.rb +1 -1
  234. data/tracks/ruby/exercises/nth-prime/.version +1 -0
  235. data/tracks/ruby/exercises/nth-prime/example.rb +4 -0
  236. data/tracks/ruby/exercises/nth-prime/example.tt +23 -0
  237. data/tracks/ruby/exercises/nth-prime/nth_prime_test.rb +33 -10
  238. data/tracks/ruby/exercises/raindrops/.version +1 -1
  239. data/tracks/ruby/exercises/raindrops/example.rb +1 -1
  240. data/tracks/ruby/exercises/raindrops/raindrops_test.rb +20 -5
  241. data/tracks/ruby/lib/acronym_cases.rb +19 -0
  242. data/tracks/ruby/lib/generator.rb +3 -2
  243. data/tracks/ruby/lib/nth_prime_cases.rb +23 -0
  244. data/tracks/ruby/lib/raindrop_cases.rb +1 -1
  245. data/tracks/rust/README.md +1 -1
  246. data/tracks/scala/exercises/leap/src/test/scala/leap_test.scala +10 -0
  247. data/tracks/scala/exercises/prime-factors/example.scala +2 -5
  248. data/tracks/scala/exercises/prime-factors/src/test/scala/primefactors_test.scala +11 -13
  249. data/tracks/scheme/{anagram → exercises/anagram}/anagram-test.scm +0 -0
  250. data/tracks/scheme/{anagram → exercises/anagram}/anagram.scm +0 -0
  251. data/tracks/scheme/{anagram → exercises/anagram}/example.scm +0 -0
  252. data/tracks/scheme/{bob → exercises/bob}/bob-test.scm +0 -0
  253. data/tracks/scheme/{bob → exercises/bob}/bob.scm +0 -0
  254. data/tracks/scheme/{bob → exercises/bob}/example.scm +0 -0
  255. data/tracks/scheme/{difference-of-squares → exercises/difference-of-squares}/difference-of-squares-test.scm +0 -0
  256. data/tracks/scheme/{difference-of-squares → exercises/difference-of-squares}/example.scm +0 -0
  257. data/tracks/scheme/{difference-of-squares → exercises/difference-of-squares}/squares.scm +0 -0
  258. data/tracks/scheme/{grains → exercises/grains}/example.scm +0 -0
  259. data/tracks/scheme/{grains → exercises/grains}/grains-test.scm +0 -0
  260. data/tracks/scheme/{grains → exercises/grains}/grains.scm +0 -0
  261. data/tracks/scheme/{hamming → exercises/hamming}/example.scm +0 -0
  262. data/tracks/scheme/{hamming → exercises/hamming}/hamming-test.scm +0 -0
  263. data/tracks/scheme/{hamming → exercises/hamming}/hamming.scm +0 -0
  264. data/tracks/scheme/{hello-world → exercises/hello-world}/example.scm +0 -0
  265. data/tracks/scheme/{hello-world → exercises/hello-world}/hello-world-test.scm +0 -0
  266. data/tracks/scheme/{hello-world → exercises/hello-world}/hello-world.scm +0 -0
  267. data/tracks/scheme/{leap → exercises/leap}/example.scm +0 -0
  268. data/tracks/scheme/{leap → exercises/leap}/leap-test.scm +0 -0
  269. data/tracks/scheme/{leap → exercises/leap}/leap-year.scm +0 -0
  270. data/tracks/scheme/{list-ops → exercises/list-ops}/example.scm +0 -0
  271. data/tracks/scheme/{list-ops → exercises/list-ops}/list-ops-test.scm +0 -0
  272. data/tracks/scheme/{list-ops → exercises/list-ops}/list-ops.scm +0 -0
  273. data/tracks/scheme/{nucleotide-count → exercises/nucleotide-count}/example.scm +0 -0
  274. data/tracks/scheme/{nucleotide-count → exercises/nucleotide-count}/nucleotide-count-test.scm +0 -0
  275. data/tracks/scheme/{nucleotide-count → exercises/nucleotide-count}/nucleotide-count.scm +0 -0
  276. data/tracks/scheme/{phone-number → exercises/phone-number}/example.scm +0 -0
  277. data/tracks/scheme/{phone-number → exercises/phone-number}/phone-number-test.scm +0 -0
  278. data/tracks/scheme/{phone-number → exercises/phone-number}/phone-number.scm +0 -0
  279. data/tracks/scheme/{raindrops → exercises/raindrops}/example.scm +0 -0
  280. data/tracks/scheme/{raindrops → exercises/raindrops}/raindrops-test.scm +0 -0
  281. data/tracks/scheme/{raindrops → exercises/raindrops}/raindrops.scm +0 -0
  282. data/tracks/scheme/{rna-transcription → exercises/rna-transcription}/dna.scm +0 -0
  283. data/tracks/scheme/{rna-transcription → exercises/rna-transcription}/example.scm +0 -0
  284. data/tracks/scheme/{rna-transcription → exercises/rna-transcription}/rna-transcription-test.scm +0 -0
  285. data/tracks/scheme/{robot-name → exercises/robot-name}/example.scm +0 -0
  286. data/tracks/scheme/{robot-name → exercises/robot-name}/robot-name-test.scm +0 -0
  287. data/tracks/scheme/{robot-name → exercises/robot-name}/robot.scm +0 -0
  288. metadata +125 -64
@@ -0,0 +1,18 @@
1
+ ;;; word-count.el --- word-count Exercise (exercism)
2
+
3
+ ;;; Commentary:
4
+
5
+ ;;; Code:
6
+
7
+
8
+ (defun word-count (sentence)
9
+ (let ((count nil))
10
+ (dolist (i (split-string (downcase sentence) "[^a-z0-9]" t))
11
+ (let ((n (assoc i count)))
12
+ (if n (setcdr n (1+ (cdr n)))
13
+ (push (cons i 1) count))))
14
+ count))
15
+
16
+
17
+ (provide 'word-count)
18
+ ;;; word-count.el ends here
@@ -0,0 +1,64 @@
1
+ ;;; word-count-test.el --- Tests for word-count (exercism)
2
+
3
+ ;;; Commentary:
4
+
5
+ ;;; Code:
6
+
7
+ (load-file "word-count.el")
8
+
9
+
10
+ (defun equal-assoc (a b)
11
+ (equal (sort a #'(lambda (a b) (not (string< (car a) (car b)))))
12
+ (sort b #'(lambda (a b) (not (string< (car a) (car b)))))))
13
+
14
+
15
+ (ert-deftest no-words-test ()
16
+ (should (equal (word-count "")
17
+ nil)))
18
+
19
+
20
+ (ert-deftest count-one-word-test ()
21
+ (should (equal (word-count "word")
22
+ '(("word" . 1)))))
23
+
24
+
25
+ (ert-deftest count-one-of-each-word-test ()
26
+ (should (equal (word-count "one of each")
27
+ '(("each" . 1)
28
+ ("of" . 1)
29
+ ("one" . 1)))))
30
+
31
+
32
+ (ert-deftest multiple-occurrences-of-a-word-test ()
33
+ (should (equal (word-count "one fish two fish red fish blue fish")
34
+ '(("blue" . 1)
35
+ ("red" . 1)
36
+ ("two" . 1)
37
+ ("fish" . 4)
38
+ ("one" . 1)))))
39
+
40
+
41
+ (ert-deftest ignore-punctuation-test ()
42
+ (should (equal (word-count "car : carpet as java : javascript!!&@$%^&")
43
+ '(("javascript" . 1)
44
+ ("java" . 1)
45
+ ("as" . 1)
46
+ ("carpet" . 1)
47
+ ("car" . 1)))))
48
+
49
+
50
+ (ert-deftest include-numbers-test ()
51
+ (should (equal (word-count "testing, 1, 2 testing")
52
+ '(("2" . 1)
53
+ ("1" . 1)
54
+ ("testing" . 2)))))
55
+
56
+
57
+ (ert-deftest normalize-case-test ()
58
+ (should (equal (word-count "go Go GO Stop stop")
59
+ '(("stop" . 2)
60
+ ("go" . 3)))))
61
+
62
+
63
+ (provide 'word-count)
64
+ ;;; word-count-test.el ends here
@@ -0,0 +1,9 @@
1
+ ;;; word-count.el --- word-count Exercise (exercism)
2
+
3
+ ;;; Commentary:
4
+
5
+ ;;; Code:
6
+
7
+
8
+ (provide 'word-count)
9
+ ;;; word-count.el ends here
@@ -37,7 +37,7 @@ The example solution should be named `example.exs`.
37
37
 
38
38
  - Use typespecs in the example and template files as described [here](http://elixir-lang.org/getting-started/typespecs-and-behaviours.html).
39
39
 
40
- - Each test file should have code like the following at the top of the file. This allows the tests to be run on CI and configures tests to be skipped with the `:skip` flag.
40
+ - Each test file should have code like the following at the top of the file. This allows the tests to be run on CI and configures tests to be skipped with the `:pending` flag.
41
41
 
42
42
  ```elixir
43
43
  if !System.get_env("EXERCISM_TEST_EXAMPLES") do
@@ -45,13 +45,13 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
45
45
  end
46
46
 
47
47
  ExUnit.start
48
- ExUnit.configure trace: true
48
+ ExUnit.configure exclude: :pending, trace: true
49
49
  ```
50
50
 
51
- - All but the initial test for each exercise should be tagged `:skip`.
51
+ - All but the initial test for each exercise should be tagged `:pending`.
52
52
 
53
53
  ```elixir
54
- @tag :skip
54
+ @tag :pending
55
55
  test "shouting" do
56
56
  assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
57
57
  end
@@ -14,12 +14,12 @@ $ elixir bob_test.exs
14
14
  In the test suites, all but the first test have been skipped.
15
15
 
16
16
  Once you get a test passing, you can unskip the next one by
17
- commenting out the relevant `@tag :skip` with a `#` symbol.
17
+ commenting out the relevant `@tag :pending` with a `#` symbol.
18
18
 
19
19
  For example:
20
20
 
21
21
  ```elixir
22
- # @tag :skip
22
+ # @tag :pending
23
23
  test "shouting" do
24
24
  assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
25
25
  end
@@ -29,7 +29,7 @@ Or, you can enable all the tests by commenting out the
29
29
  `ExUnit.configure` line in the test suite.
30
30
 
31
31
  ```elixir
32
- # ExUnit.configure trace: true
32
+ # ExUnit.configure exclude: :pending, trace: true
33
33
  ```
34
34
 
35
35
  For more detailed information about the Elixir track, please
@@ -14,12 +14,12 @@ $ elixir bob_test.exs
14
14
  In the test suites, all but the first test have been skipped.
15
15
 
16
16
  Once you get a test passing, you can unskip the next one by
17
- commenting out the relevant `@tag :skip` with a `#` symbol.
17
+ commenting out the relevant `@tag :pending` with a `#` symbol.
18
18
 
19
19
  For example:
20
20
 
21
21
  ```elixir
22
- # @tag :skip
22
+ # @tag :pending
23
23
  test "shouting" do
24
24
  assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
25
25
  end
@@ -29,5 +29,5 @@ Or, you can enable all the tests by commenting out the
29
29
  `ExUnit.configure` line in the test suite.
30
30
 
31
31
  ```elixir
32
- # ExUnit.configure trace: true
32
+ # ExUnit.configure exclude: :pending, trace: true
33
33
  ```
@@ -3,7 +3,7 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
3
3
  end
4
4
 
5
5
  ExUnit.start
6
- ExUnit.configure trace: true
6
+ ExUnit.configure exclude: :pending, trace: true
7
7
 
8
8
  defmodule AccumulateTest do
9
9
  use ExUnit.Case
@@ -12,18 +12,18 @@ defmodule AccumulateTest do
12
12
  assert Accumulate.accumulate([], fn(n) -> n * n end) == []
13
13
  end
14
14
 
15
- @tag :skip
15
+ @tag :pending
16
16
  test "accumulate square numbers" do
17
17
  assert Accumulate.accumulate([1, 2, 3], fn(n) -> n * n end) == [1, 4, 9]
18
18
  end
19
19
 
20
- @tag :skip
20
+ @tag :pending
21
21
  test "accumulate upcased strings" do
22
22
  fun = fn(w) -> String.upcase(w) end
23
23
  assert Accumulate.accumulate(["hello", "world"], fun) == ["HELLO", "WORLD"]
24
24
  end
25
25
 
26
- @tag :skip
26
+ @tag :pending
27
27
  test "accumulate reversed strings" do
28
28
  fun = fn(w) -> String.reverse(w) end
29
29
  words = ~w(the quick brown fox etc)
@@ -31,11 +31,11 @@ defmodule AccumulateTest do
31
31
  assert Accumulate.accumulate(words, fun) == expected
32
32
  end
33
33
 
34
- @tag :skip
35
- test "accumulate recursively" do
34
+ @tag :pending
35
+ test "nested accumulate" do
36
36
  chars = ~w(a b c)
37
37
  nums = ~w(1 2 3)
38
- fun = fn(c) -> for num <- nums, do: c <> num end
38
+ fun = fn(c) -> Accumulate.accumulate(nums, &(c <> &1)) end
39
39
  expected = [["a1", "a2", "a3"], ["b1", "b2", "b3"], ["c1", "c2", "c3"]]
40
40
  assert Accumulate.accumulate(chars, fun) == expected
41
41
  end
@@ -3,7 +3,7 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
3
3
  end
4
4
 
5
5
  ExUnit.start
6
- ExUnit.configure trace: true
6
+ ExUnit.configure exclude: :pending, trace: true
7
7
 
8
8
  defmodule AcronymTest do
9
9
  use ExUnit.Case
@@ -12,22 +12,22 @@ defmodule AcronymTest do
12
12
  assert Acronym.abbreviate("Portable Networks Graphic") === "PNG"
13
13
  end
14
14
 
15
- @tag :skip
15
+ @tag :pending
16
16
  test "it produces acronyms from lower case" do
17
17
  assert Acronym.abbreviate("Ruby on Rails") === "ROR"
18
18
  end
19
19
 
20
- @tag :skip
20
+ @tag :pending
21
21
  test "it produces acronyms from inconsistent case" do
22
22
  assert Acronym.abbreviate("HyperText Markup Language") === "HTML"
23
23
  end
24
24
 
25
- @tag :skip
25
+ @tag :pending
26
26
  test "it ignores punctuation" do
27
27
  assert Acronym.abbreviate("First in, First out") === "FIFO"
28
28
  end
29
29
 
30
- @tag :skip
30
+ @tag :pending
31
31
  test "it produces acronyms ignoring punctuation and casing" do
32
32
  assert Acronym.abbreviate("Complementary Metal-Oxide semiconductor") === "CMOS"
33
33
  end
@@ -4,69 +4,69 @@ end
4
4
 
5
5
 
6
6
  ExUnit.start
7
- ExUnit.configure trace: true
7
+ ExUnit.configure exclude: :pending, trace: true
8
8
 
9
9
  defmodule AllergiesTest do
10
10
  use ExUnit.Case
11
11
 
12
- # @tag :skip
12
+ # @tag :pending
13
13
  test "no_allergies_at_all" do
14
14
  Allergies.list(0) |> assert_is_a_set_containing([])
15
15
  end
16
16
 
17
- @tag :skip
17
+ @tag :pending
18
18
  test "allergic_to_just_eggs" do
19
19
  Allergies.list(1) |> assert_is_a_set_containing(~w[eggs])
20
20
  end
21
21
 
22
- @tag :skip
22
+ @tag :pending
23
23
  test "allergic_to_just_peanuts" do
24
24
  Allergies.list(2) |> assert_is_a_set_containing(~w[peanuts])
25
25
  end
26
26
 
27
- @tag :skip
27
+ @tag :pending
28
28
  test "allergic_to_just_strawberries" do
29
29
  Allergies.list(8) |> assert_is_a_set_containing(~w[strawberries])
30
30
  end
31
31
 
32
- @tag :skip
32
+ @tag :pending
33
33
  test "allergic_to_eggs_and_peanuts" do
34
34
  Allergies.list(3) |> assert_is_a_set_containing(~w[eggs peanuts])
35
35
  end
36
36
 
37
- @tag :skip
37
+ @tag :pending
38
38
  test "allergic_to_more_than_eggs_but_not_peanuts" do
39
39
  Allergies.list(5) |> assert_is_a_set_containing(~w[eggs shellfish])
40
40
  end
41
41
 
42
- @tag :skip
42
+ @tag :pending
43
43
  test "allergic_to_lots_of_stuff" do
44
44
  Allergies.list(248) |> assert_is_a_set_containing(~w[strawberries tomatoes chocolate pollen cats])
45
45
  end
46
46
 
47
- @tag :skip
47
+ @tag :pending
48
48
  test "allergic_to_everything" do
49
49
  Allergies.list(255) |> assert_is_a_set_containing(~w[eggs peanuts shellfish strawberries tomatoes chocolate pollen cats])
50
50
  end
51
51
 
52
- @tag :skip
52
+ @tag :pending
53
53
  test "no_allergies_means_not_allergic" do
54
54
  refute Allergies.allergic_to?(0, "peanuts")
55
55
  refute Allergies.allergic_to?(0, "cats")
56
56
  refute Allergies.allergic_to?(0, "strawberries")
57
57
  end
58
58
 
59
- @tag :skip
59
+ @tag :pending
60
60
  test "is_allergic_to_eggs" do
61
61
  assert Allergies.allergic_to?(1, "eggs")
62
62
  end
63
63
 
64
- @tag :skip
64
+ @tag :pending
65
65
  test "allergic_to_eggs_in_addition_to_other_stuff" do
66
66
  assert Allergies.allergic_to?(5, "eggs")
67
67
  end
68
68
 
69
- @tag :skip
69
+ @tag :pending
70
70
  test "ignore_non_allergen_score_parts" do
71
71
  Allergies.list(509) |> assert_is_a_set_containing(~w[eggs shellfish strawberries tomatoes chocolate pollen cats])
72
72
  end
@@ -3,72 +3,72 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
3
3
  end
4
4
 
5
5
  ExUnit.start
6
- ExUnit.configure trace: true
6
+ ExUnit.configure exclude: :pending, trace: true
7
7
 
8
8
  defmodule AnagramTest do
9
9
  use ExUnit.Case
10
10
 
11
- # @tag :skip
11
+ # @tag :pending
12
12
  test "no matches" do
13
13
  matches = Anagram.match "diaper", ["hello", "world", "zombies", "pants"]
14
14
  assert matches == []
15
15
  end
16
16
 
17
- @tag :skip
17
+ @tag :pending
18
18
  test "detect simple anagram" do
19
19
  matches = Anagram.match "ant", ["tan", "stand", "at"]
20
20
  assert matches == ["tan"]
21
21
  end
22
22
 
23
- @tag :skip
23
+ @tag :pending
24
24
  test "detect multiple anagrams" do
25
25
  matches = Anagram.match "master", ["stream", "pigeon", "maters"]
26
26
  assert matches == ["stream", "maters"]
27
27
  end
28
28
 
29
- @tag :skip
29
+ @tag :pending
30
30
  test "do not detect anagram subsets" do
31
31
  matches = Anagram.match "good", ~w(dog goody)
32
32
  assert matches == []
33
33
  end
34
34
 
35
- @tag :skip
35
+ @tag :pending
36
36
  test "detect anagram" do
37
37
  matches = Anagram.match "listen", ~w(enlists google inlets banana)
38
38
  assert matches == ["inlets"]
39
39
  end
40
40
 
41
- @tag :skip
41
+ @tag :pending
42
42
  test "multiple anagrams" do
43
43
  matches = Anagram.match "allergy", ~w(gallery ballerina regally clergy largely leading)
44
44
  assert matches == ["gallery", "regally", "largely"]
45
45
  end
46
46
 
47
- @tag :skip
47
+ @tag :pending
48
48
  test "anagrams must use all letters exactly once" do
49
49
  matches = Anagram.match "patter", ["tapper"]
50
50
  assert matches == []
51
51
  end
52
52
 
53
- @tag :skip
53
+ @tag :pending
54
54
  test "detect anagrams with case-insensitive subject" do
55
55
  matches = Anagram.match "Orchestra", ~w(cashregister carthorse radishes)
56
56
  assert matches == ["carthorse"]
57
57
  end
58
58
 
59
- @tag :skip
59
+ @tag :pending
60
60
  test "detect anagrams with case-insensitive candidate" do
61
61
  matches = Anagram.match "orchestra", ~w(cashregister Carthorse radishes)
62
62
  assert matches == ["Carthorse"]
63
63
  end
64
64
 
65
- @tag :skip
65
+ @tag :pending
66
66
  test "anagrams must not be the source word" do
67
67
  matches = Anagram.match "corn", ["corn", "dark", "Corn", "rank", "CORN", "cron", "park"]
68
68
  assert matches == ["cron"]
69
69
  end
70
70
 
71
- @tag :skip
71
+ @tag :pending
72
72
  test "do not detect words based on checksum" do
73
73
  matches = Anagram.match "mass", ["last"]
74
74
  assert matches == []
@@ -3,47 +3,47 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
3
3
  end
4
4
 
5
5
  ExUnit.start
6
- ExUnit.configure trace: true
6
+ ExUnit.configure exclude: :pending, trace: true
7
7
 
8
8
  defmodule AtbashTest do
9
9
  use ExUnit.Case
10
10
 
11
- # @tag :skip
11
+ # @tag :pending
12
12
  test "encode no" do
13
13
  assert Atbash.encode("no") == "ml"
14
14
  end
15
15
 
16
- @tag :skip
16
+ @tag :pending
17
17
  test "encode yes" do
18
18
  assert Atbash.encode("yes") == "bvh"
19
19
  end
20
20
 
21
- @tag :skip
21
+ @tag :pending
22
22
  test "encode OMG" do
23
23
  assert Atbash.encode("OMG") == "lnt"
24
24
  end
25
25
 
26
- @tag :skip
26
+ @tag :pending
27
27
  test "encode O M G" do
28
28
  assert Atbash.encode("O M G") == "lnt"
29
29
  end
30
30
 
31
- @tag :skip
31
+ @tag :pending
32
32
  test "encode long word" do
33
33
  assert Atbash.encode("mindblowingly") == "nrmwy oldrm tob"
34
34
  end
35
35
 
36
- @tag :skip
36
+ @tag :pending
37
37
  test "encode numbers" do
38
38
  assert Atbash.encode("Testing, 1 2 3, testing.") == "gvhgr mt123 gvhgr mt"
39
39
  end
40
40
 
41
- @tag :skip
41
+ @tag :pending
42
42
  test "encode sentence" do
43
43
  assert Atbash.encode("Truth is fiction.") == "gifgs rhurx grlm"
44
44
  end
45
45
 
46
- @tag :skip
46
+ @tag :pending
47
47
  test "encode all the things" do
48
48
  plaintext = "The quick brown fox jumps over the lazy dog."
49
49
  cipher = "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"