trackler 2.2.1.109 → 2.2.1.110

Sign up to get free protection for your applications and to get access to all the features.
Files changed (277) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/c/config.json +2 -0
  4. data/tracks/clojure/exercises/armstrong-numbers/test/armstrong_numbers_test.clj +1 -1
  5. data/tracks/elixir/.formatter.exs +3 -0
  6. data/tracks/elixir/exercises/accumulate/accumulate_test.exs +8 -8
  7. data/tracks/elixir/exercises/acronym/acronym_test.exs +2 -2
  8. data/tracks/elixir/exercises/acronym/example.exs +3 -4
  9. data/tracks/elixir/exercises/all-your-base/all-your-base-test.exs +2 -2
  10. data/tracks/elixir/exercises/all-your-base/example.exs +14 -7
  11. data/tracks/elixir/exercises/allergies/allergies.exs +2 -4
  12. data/tracks/elixir/exercises/allergies/allergies_test.exs +17 -11
  13. data/tracks/elixir/exercises/anagram/anagram.exs +1 -2
  14. data/tracks/elixir/exercises/anagram/anagram_test.exs +13 -13
  15. data/tracks/elixir/exercises/anagram/example.exs +2 -1
  16. data/tracks/elixir/exercises/atbash-cipher/atbash_cipher.exs +2 -2
  17. data/tracks/elixir/exercises/atbash-cipher/atbash_cipher_test.exs +2 -2
  18. data/tracks/elixir/exercises/bank-account/bank_account_test.exs +10 -5
  19. data/tracks/elixir/exercises/beer-song/beer_song.exs +2 -2
  20. data/tracks/elixir/exercises/beer-song/beer_song_test.exs +225 -225
  21. data/tracks/elixir/exercises/beer-song/example.exs +5 -3
  22. data/tracks/elixir/exercises/binary-search-tree/binary_search_tree_test.exs +2 -2
  23. data/tracks/elixir/exercises/binary-search-tree/example.exs +1 -1
  24. data/tracks/elixir/exercises/binary-search/binary_search.exs +0 -1
  25. data/tracks/elixir/exercises/binary-search/binary_search_test.exs +2 -2
  26. data/tracks/elixir/exercises/binary-search/example.exs +3 -1
  27. data/tracks/elixir/exercises/binary/binary.exs +1 -1
  28. data/tracks/elixir/exercises/binary/binary_test.exs +2 -2
  29. data/tracks/elixir/exercises/binary/example.exs +2 -2
  30. data/tracks/elixir/exercises/bob/bob.exs +1 -2
  31. data/tracks/elixir/exercises/bob/bob_test.exs +2 -2
  32. data/tracks/elixir/exercises/bowling/bowling.exs +2 -3
  33. data/tracks/elixir/exercises/bowling/bowling_test.exs +54 -275
  34. data/tracks/elixir/exercises/bowling/example.exs +24 -10
  35. data/tracks/elixir/exercises/bracket-push/bracket_push.exs +1 -2
  36. data/tracks/elixir/exercises/bracket-push/bracket_push_test.exs +5 -3
  37. data/tracks/elixir/exercises/bracket-push/example.exs +8 -3
  38. data/tracks/elixir/exercises/change/change.exs +1 -2
  39. data/tracks/elixir/exercises/change/change_test.exs +2 -2
  40. data/tracks/elixir/exercises/change/example.exs +5 -1
  41. data/tracks/elixir/exercises/clock/clock_test.exs +8 -8
  42. data/tracks/elixir/exercises/clock/example.exs +5 -3
  43. data/tracks/elixir/exercises/collatz-conjecture/collatz_conjecture.exs +0 -1
  44. data/tracks/elixir/exercises/collatz-conjecture/collatz_conjecture_test.exs +3 -3
  45. data/tracks/elixir/exercises/collatz-conjecture/example.exs +1 -1
  46. data/tracks/elixir/exercises/connect/connect.exs +1 -2
  47. data/tracks/elixir/exercises/connect/connect_test.exs +40 -30
  48. data/tracks/elixir/exercises/connect/example.exs +12 -10
  49. data/tracks/elixir/exercises/crypto-square/crypto_square.exs +1 -2
  50. data/tracks/elixir/exercises/crypto-square/crypto_square_test.exs +2 -2
  51. data/tracks/elixir/exercises/crypto-square/example.exs +6 -5
  52. data/tracks/elixir/exercises/custom-set/custom_set.exs +1 -1
  53. data/tracks/elixir/exercises/custom-set/custom_set_test.exs +2 -2
  54. data/tracks/elixir/exercises/custom-set/example.exs +5 -4
  55. data/tracks/elixir/exercises/diamond/diamond.exs +1 -2
  56. data/tracks/elixir/exercises/diamond/diamond_test.exs +20 -18
  57. data/tracks/elixir/exercises/diamond/example.exs +10 -10
  58. data/tracks/elixir/exercises/difference-of-squares/difference_of_squares.exs +1 -5
  59. data/tracks/elixir/exercises/difference-of-squares/difference_of_squares_test.exs +5 -6
  60. data/tracks/elixir/exercises/difference-of-squares/example.exs +3 -4
  61. data/tracks/elixir/exercises/diffie-hellman/diffie_hellman.exs +7 -3
  62. data/tracks/elixir/exercises/diffie-hellman/diffie_hellman_test.exs +43 -23
  63. data/tracks/elixir/exercises/diffie-hellman/example.exs +10 -6
  64. data/tracks/elixir/exercises/dominoes/dominoes.exs +0 -1
  65. data/tracks/elixir/exercises/dominoes/dominoes_test.exs +16 -6
  66. data/tracks/elixir/exercises/dominoes/example.exs +9 -5
  67. data/tracks/elixir/exercises/dot-dsl/dot.exs +0 -1
  68. data/tracks/elixir/exercises/dot-dsl/dot_dsl_test.exs +107 -58
  69. data/tracks/elixir/exercises/dot-dsl/example.exs +18 -10
  70. data/tracks/elixir/exercises/etl/etl.exs +0 -1
  71. data/tracks/elixir/exercises/etl/etl_test.exs +34 -13
  72. data/tracks/elixir/exercises/etl/example.exs +6 -6
  73. data/tracks/elixir/exercises/flatten-array/flatten_array.exs +0 -1
  74. data/tracks/elixir/exercises/flatten-array/flatten_array_test.exs +8 -8
  75. data/tracks/elixir/exercises/forth/example.exs +5 -5
  76. data/tracks/elixir/exercises/forth/forth.exs +6 -9
  77. data/tracks/elixir/exercises/forth/forth_test.exs +107 -64
  78. data/tracks/elixir/exercises/gigasecond/example.exs +1 -1
  79. data/tracks/elixir/exercises/gigasecond/gigasecond.exs +2 -2
  80. data/tracks/elixir/exercises/gigasecond/gigasecond_test.exs +2 -2
  81. data/tracks/elixir/exercises/grade-school/example.exs +3 -3
  82. data/tracks/elixir/exercises/grade-school/grade_school_test.exs +26 -22
  83. data/tracks/elixir/exercises/grade-school/school.exs +3 -6
  84. data/tracks/elixir/exercises/grains/example.exs +10 -3
  85. data/tracks/elixir/exercises/grains/grains.exs +0 -2
  86. data/tracks/elixir/exercises/grains/grains_test.exs +16 -14
  87. data/tracks/elixir/exercises/grep/example.exs +22 -18
  88. data/tracks/elixir/exercises/grep/grep.exs +1 -2
  89. data/tracks/elixir/exercises/grep/grep_test.exs +108 -112
  90. data/tracks/elixir/exercises/hamming/example.exs +3 -2
  91. data/tracks/elixir/exercises/hamming/hamming_test.exs +7 -4
  92. data/tracks/elixir/exercises/hello-world/example.exs +1 -1
  93. data/tracks/elixir/exercises/hello-world/hello_world.exs +1 -1
  94. data/tracks/elixir/exercises/hello-world/hello_world_test.exs +2 -2
  95. data/tracks/elixir/exercises/hexadecimal/example.exs +8 -7
  96. data/tracks/elixir/exercises/hexadecimal/hexadecimal.exs +0 -1
  97. data/tracks/elixir/exercises/hexadecimal/hexadecimal_test.exs +3 -3
  98. data/tracks/elixir/exercises/isbn-verifier/example.exs +1 -1
  99. data/tracks/elixir/exercises/isbn-verifier/isbn_verifier.exs +1 -2
  100. data/tracks/elixir/exercises/isbn-verifier/isbn_verifier_test.exs +2 -2
  101. data/tracks/elixir/exercises/isogram/example.exs +5 -5
  102. data/tracks/elixir/exercises/isogram/isogram.exs +1 -3
  103. data/tracks/elixir/exercises/isogram/isogram_test.exs +2 -3
  104. data/tracks/elixir/exercises/kindergarten-garden/example.exs +15 -3
  105. data/tracks/elixir/exercises/kindergarten-garden/garden_test.exs +17 -4
  106. data/tracks/elixir/exercises/largest-series-product/example.exs +10 -9
  107. data/tracks/elixir/exercises/largest-series-product/largest_series_product.exs +1 -3
  108. data/tracks/elixir/exercises/largest-series-product/largest_series_product_test.exs +6 -4
  109. data/tracks/elixir/exercises/leap/example.exs +2 -2
  110. data/tracks/elixir/exercises/leap/leap.exs +0 -1
  111. data/tracks/elixir/exercises/leap/leap_test.exs +2 -2
  112. data/tracks/elixir/exercises/list-ops/example.exs +10 -9
  113. data/tracks/elixir/exercises/list-ops/list_ops.exs +1 -8
  114. data/tracks/elixir/exercises/list-ops/list_ops_test.exs +22 -25
  115. data/tracks/elixir/exercises/luhn/example.exs +16 -17
  116. data/tracks/elixir/exercises/luhn/luhn.exs +0 -2
  117. data/tracks/elixir/exercises/luhn/luhn_test.exs +2 -2
  118. data/tracks/elixir/exercises/markdown/example.exs +40 -14
  119. data/tracks/elixir/exercises/markdown/markdown.exs +8 -4
  120. data/tracks/elixir/exercises/markdown/markdown_test.exs +6 -3
  121. data/tracks/elixir/exercises/matrix/example.exs +6 -6
  122. data/tracks/elixir/exercises/matrix/matrix.exs +0 -1
  123. data/tracks/elixir/exercises/matrix/matrix_test.exs +11 -11
  124. data/tracks/elixir/exercises/meetup/example.exs +20 -13
  125. data/tracks/elixir/exercises/meetup/meetup.exs +8 -4
  126. data/tracks/elixir/exercises/meetup/meetup_test.exs +2 -2
  127. data/tracks/elixir/exercises/minesweeper/minesweeper.exs +1 -3
  128. data/tracks/elixir/exercises/minesweeper/minesweeper_test.exs +7 -21
  129. data/tracks/elixir/exercises/nth-prime/example.exs +7 -7
  130. data/tracks/elixir/exercises/nth-prime/nth_prime.exs +0 -1
  131. data/tracks/elixir/exercises/nth-prime/nth_prime_test.exs +3 -3
  132. data/tracks/elixir/exercises/nucleotide-count/example.exs +4 -3
  133. data/tracks/elixir/exercises/nucleotide-count/nucleotide_count.exs +0 -3
  134. data/tracks/elixir/exercises/nucleotide-count/nucleotide_count_test.exs +2 -2
  135. data/tracks/elixir/exercises/ocr-numbers/example.exs +3 -3
  136. data/tracks/elixir/exercises/ocr-numbers/ocr_numbers.exs +1 -2
  137. data/tracks/elixir/exercises/ocr-numbers/ocr_numbers_test.exs +54 -70
  138. data/tracks/elixir/exercises/palindrome-products/example.exs +3 -6
  139. data/tracks/elixir/exercises/palindrome-products/palindrome_products.exs +0 -1
  140. data/tracks/elixir/exercises/palindrome-products/palindrome_products_test.exs +8 -8
  141. data/tracks/elixir/exercises/pangram/pangram.exs +1 -1
  142. data/tracks/elixir/exercises/pangram/pangram_test.exs +5 -3
  143. data/tracks/elixir/exercises/parallel-letter-frequency/example.exs +7 -5
  144. data/tracks/elixir/exercises/parallel-letter-frequency/frequency.exs +1 -2
  145. data/tracks/elixir/exercises/parallel-letter-frequency/parallel_letter_frequency_test.exs +3 -4
  146. data/tracks/elixir/exercises/pascals-triangle/example.exs +2 -1
  147. data/tracks/elixir/exercises/pascals-triangle/pascals_triangle_test.exs +26 -8
  148. data/tracks/elixir/exercises/perfect-numbers/example.exs +8 -6
  149. data/tracks/elixir/exercises/perfect-numbers/perfect_numbers.exs +1 -2
  150. data/tracks/elixir/exercises/perfect-numbers/perfect_numbers_test.exs +18 -17
  151. data/tracks/elixir/exercises/phone-number/example.exs +19 -11
  152. data/tracks/elixir/exercises/phone-number/phone_number.exs +3 -3
  153. data/tracks/elixir/exercises/phone-number/phone_number_test.exs +2 -2
  154. data/tracks/elixir/exercises/pig-latin/pig_latin.exs +0 -1
  155. data/tracks/elixir/exercises/pig-latin/pig_latin_test.exs +3 -3
  156. data/tracks/elixir/exercises/poker/example.exs +104 -41
  157. data/tracks/elixir/exercises/poker/poker.exs +0 -1
  158. data/tracks/elixir/exercises/poker/poker_test.exs +7 -5
  159. data/tracks/elixir/exercises/prime-factors/example.exs +4 -8
  160. data/tracks/elixir/exercises/prime-factors/prime_factors.exs +0 -1
  161. data/tracks/elixir/exercises/prime-factors/prime_factors_test.exs +5 -5
  162. data/tracks/elixir/exercises/protein-translation/example.exs +14 -12
  163. data/tracks/elixir/exercises/protein-translation/protein_translation.exs +2 -3
  164. data/tracks/elixir/exercises/protein-translation/protein_translation_test.exs +26 -26
  165. data/tracks/elixir/exercises/pythagorean-triplet/example.exs +5 -4
  166. data/tracks/elixir/exercises/pythagorean-triplet/pythagorean_triplet.exs +0 -5
  167. data/tracks/elixir/exercises/pythagorean-triplet/pythagorean_triplet_test.exs +3 -3
  168. data/tracks/elixir/exercises/queen-attack/example.exs +9 -7
  169. data/tracks/elixir/exercises/queen-attack/queen_attack.exs +1 -4
  170. data/tracks/elixir/exercises/rail-fence-cipher/example.exs +18 -15
  171. data/tracks/elixir/exercises/rail-fence-cipher/rail_fence_cipher.exs +2 -4
  172. data/tracks/elixir/exercises/rail-fence-cipher/rail_fence_cipher_test.exs +2 -2
  173. data/tracks/elixir/exercises/raindrops/example.exs +3 -2
  174. data/tracks/elixir/exercises/raindrops/raindrops.exs +1 -2
  175. data/tracks/elixir/exercises/raindrops/raindrops_test.exs +2 -2
  176. data/tracks/elixir/exercises/rna-transcription/example.exs +1 -1
  177. data/tracks/elixir/exercises/rna-transcription/rna_transcription.exs +0 -1
  178. data/tracks/elixir/exercises/rna-transcription/rna_transcription_test.exs +2 -2
  179. data/tracks/elixir/exercises/robot-simulator/example.exs +33 -19
  180. data/tracks/elixir/exercises/robot-simulator/robot_simulator.exs +3 -5
  181. data/tracks/elixir/exercises/robot-simulator/robot_simulator_test.exs +26 -25
  182. data/tracks/elixir/exercises/roman-numerals/example.exs +14 -13
  183. data/tracks/elixir/exercises/roman-numerals/roman.exs +1 -1
  184. data/tracks/elixir/exercises/roman-numerals/roman_numerals_test.exs +2 -2
  185. data/tracks/elixir/exercises/rotational-cipher/example.exs +12 -8
  186. data/tracks/elixir/exercises/rotational-cipher/rotational_cipher.exs +0 -1
  187. data/tracks/elixir/exercises/rotational-cipher/rotational_cipher_test.exs +6 -4
  188. data/tracks/elixir/exercises/run-length-encoding/example.exs +20 -8
  189. data/tracks/elixir/exercises/run-length-encoding/rle.exs +2 -4
  190. data/tracks/elixir/exercises/run-length-encoding/rle_test.exs +6 -4
  191. data/tracks/elixir/exercises/saddle-points/example.exs +4 -3
  192. data/tracks/elixir/exercises/saddle-points/saddle_points.exs +0 -3
  193. data/tracks/elixir/exercises/saddle-points/saddle_points_test.exs +2 -2
  194. data/tracks/elixir/exercises/say/say.exs +1 -1
  195. data/tracks/elixir/exercises/say/say_test.exs +5 -3
  196. data/tracks/elixir/exercises/scale-generator/example.exs +20 -9
  197. data/tracks/elixir/exercises/scale-generator/scale_generator.exs +2 -2
  198. data/tracks/elixir/exercises/scale-generator/scale_generator_test.exs +16 -17
  199. data/tracks/elixir/exercises/scrabble-score/scrabble.exs +1 -2
  200. data/tracks/elixir/exercises/scrabble-score/scrabble_score_test.exs +2 -2
  201. data/tracks/elixir/exercises/secret-handshake/example.exs +4 -4
  202. data/tracks/elixir/exercises/secret-handshake/secret_handshake.exs +0 -1
  203. data/tracks/elixir/exercises/secret-handshake/secret_handshake_test.exs +3 -3
  204. data/tracks/elixir/exercises/series/example.exs +2 -2
  205. data/tracks/elixir/exercises/series/series.exs +0 -1
  206. data/tracks/elixir/exercises/series/series_test.exs +3 -4
  207. data/tracks/elixir/exercises/sieve/example.exs +4 -5
  208. data/tracks/elixir/exercises/sieve/sieve.exs +0 -3
  209. data/tracks/elixir/exercises/sieve/sieve_test.exs +173 -21
  210. data/tracks/elixir/exercises/simple-cipher/example.exs +8 -8
  211. data/tracks/elixir/exercises/simple-cipher/simple_cipher.exs +0 -1
  212. data/tracks/elixir/exercises/simple-cipher/simple_cipher_test.exs +3 -4
  213. data/tracks/elixir/exercises/simple-linked-list/example.exs +3 -1
  214. data/tracks/elixir/exercises/simple-linked-list/linked_list_test.exs +5 -2
  215. data/tracks/elixir/exercises/space-age/example.exs +5 -6
  216. data/tracks/elixir/exercises/space-age/space_age.exs +9 -3
  217. data/tracks/elixir/exercises/space-age/space_age_test.exs +2 -2
  218. data/tracks/elixir/exercises/spiral-matrix/example.exs +10 -5
  219. data/tracks/elixir/exercises/spiral-matrix/spiral.exs +0 -1
  220. data/tracks/elixir/exercises/spiral-matrix/spiral_test.exs +21 -21
  221. data/tracks/elixir/exercises/strain/example.exs +5 -4
  222. data/tracks/elixir/exercises/strain/strain.exs +2 -2
  223. data/tracks/elixir/exercises/strain/strain_test.exs +12 -7
  224. data/tracks/elixir/exercises/sublist/example.exs +11 -7
  225. data/tracks/elixir/exercises/sublist/sublist.exs +0 -1
  226. data/tracks/elixir/exercises/sublist/sublist_test.exs +16 -18
  227. data/tracks/elixir/exercises/sum-of-multiples/example.exs +3 -4
  228. data/tracks/elixir/exercises/sum-of-multiples/sum_of_multiples.exs +0 -1
  229. data/tracks/elixir/exercises/sum-of-multiples/sum_of_multiples_test.exs +4 -4
  230. data/tracks/elixir/exercises/test_helper.exs +4 -4
  231. data/tracks/elixir/exercises/tournament/example.exs +20 -13
  232. data/tracks/elixir/exercises/tournament/tournament.exs +0 -1
  233. data/tracks/elixir/exercises/tournament/tournament_test.exs +37 -30
  234. data/tracks/elixir/exercises/transpose/example.exs +4 -4
  235. data/tracks/elixir/exercises/transpose/transpose.exs +1 -1
  236. data/tracks/elixir/exercises/transpose/transpose_test.exs +89 -156
  237. data/tracks/elixir/exercises/triangle/example.exs +7 -7
  238. data/tracks/elixir/exercises/triangle/triangle.exs +1 -2
  239. data/tracks/elixir/exercises/triangle/triangle_test.exs +17 -17
  240. data/tracks/elixir/exercises/twelve-days/example.exs +10 -6
  241. data/tracks/elixir/exercises/twelve-days/twelve_days.exs +1 -2
  242. data/tracks/elixir/exercises/twelve-days/twelve_days_test.exs +55 -45
  243. data/tracks/elixir/exercises/word-count/example.exs +5 -5
  244. data/tracks/elixir/exercises/word-count/word_count.exs +1 -2
  245. data/tracks/elixir/exercises/word-count/word_count_test.exs +5 -5
  246. data/tracks/elixir/exercises/wordy/example.exs +13 -14
  247. data/tracks/elixir/exercises/wordy/wordy.exs +1 -4
  248. data/tracks/elixir/exercises/wordy/wordy_test.exs +2 -2
  249. data/tracks/elixir/exercises/zipper/example.exs +48 -37
  250. data/tracks/elixir/exercises/zipper/zipper.exs +20 -14
  251. data/tracks/elixir/exercises/zipper/zipper_test.exs +19 -20
  252. data/tracks/go/.travis.yml +1 -1
  253. data/tracks/go/exercises/paasio/paasio_test.go +76 -0
  254. data/tracks/ocaml/exercises/acronym/test.ml +3 -5
  255. data/tracks/ocaml/exercises/all-your-base/test.ml +2 -2
  256. data/tracks/ocaml/exercises/anagram/test.ml +1 -9
  257. data/tracks/ocaml/exercises/atbash-cipher/test.ml +1 -1
  258. data/tracks/ocaml/exercises/binary-search/test.ml +1 -1
  259. data/tracks/ocaml/exercises/bob/test.ml +1 -1
  260. data/tracks/ocaml/exercises/bracket-push/test.ml +1 -1
  261. data/tracks/ocaml/exercises/connect/test.ml +1 -1
  262. data/tracks/ocaml/exercises/difference-of-squares/test.ml +1 -1
  263. data/tracks/ocaml/exercises/dominoes/test.ml +1 -1
  264. data/tracks/ocaml/exercises/hello-world/test.ml +1 -1
  265. data/tracks/ocaml/exercises/leap/test.ml +2 -2
  266. data/tracks/ocaml/exercises/luhn/test.ml +2 -2
  267. data/tracks/ocaml/exercises/pangram/test.ml +1 -1
  268. data/tracks/ocaml/exercises/phone-number/test.ml +7 -3
  269. data/tracks/ocaml/exercises/prime-factors/test.ml +1 -1
  270. data/tracks/ocaml/exercises/raindrops/test.ml +1 -1
  271. data/tracks/ocaml/exercises/react/example.ml +1 -1
  272. data/tracks/ocaml/exercises/roman-numerals/test.ml +3 -1
  273. data/tracks/ocaml/exercises/run-length-encoding/test.ml +1 -1
  274. data/tracks/ocaml/exercises/space-age/test.ml +1 -1
  275. data/tracks/ocaml/exercises/word-count/test.ml +1 -1
  276. data/tracks/swift/circle.yml +21 -2
  277. metadata +3 -2
@@ -9,6 +9,5 @@ defmodule ETL do
9
9
  """
10
10
  @spec transform(map) :: map
11
11
  def transform(input) do
12
-
13
12
  end
14
13
  end
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
2
2
  Code.load_file("etl.exs", __DIR__)
3
3
  end
4
4
 
5
- ExUnit.start
6
- ExUnit.configure exclude: :pending, trace: true
5
+ ExUnit.start()
6
+ ExUnit.configure(exclude: :pending, trace: true)
7
7
 
8
8
  defmodule TransformTest do
9
9
  use ExUnit.Case
@@ -27,6 +27,7 @@ defmodule TransformTest do
27
27
  @tag :pending
28
28
  test "more keys" do
29
29
  old = %{1 => ["APPLE", "ARTICHOKE"], 2 => ["BOAT", "BALLERINA"]}
30
+
30
31
  expected = %{
31
32
  "apple" => 1,
32
33
  "artichoke" => 1,
@@ -40,21 +41,41 @@ defmodule TransformTest do
40
41
  @tag :pending
41
42
  test "full dataset" do
42
43
  old = %{
43
- 1 => ~W(A E I O U L N R S T),
44
- 2 => ~W(D G),
45
- 3 => ~W(B C M P),
46
- 4 => ~W(F H V W Y),
47
- 5 => ~W(K),
48
- 8 => ~W(J X),
44
+ 1 => ~W(A E I O U L N R S T),
45
+ 2 => ~W(D G),
46
+ 3 => ~W(B C M P),
47
+ 4 => ~W(F H V W Y),
48
+ 5 => ~W(K),
49
+ 8 => ~W(J X),
49
50
  10 => ~W(Q Z)
50
51
  }
51
52
 
52
53
  expected = %{
53
- "a" => 1, "b" => 3, "c" => 3, "d" => 2, "e" => 1,
54
- "f" => 4, "g" => 2, "h" => 4, "i" => 1, "j" => 8,
55
- "k" => 5, "l" => 1, "m" => 3, "n" => 1, "o" => 1,
56
- "p" => 3, "q" => 10, "r" => 1, "s" => 1, "t" => 1,
57
- "u" => 1, "v" => 4, "w" => 4, "x" => 8, "y" => 4,
54
+ "a" => 1,
55
+ "b" => 3,
56
+ "c" => 3,
57
+ "d" => 2,
58
+ "e" => 1,
59
+ "f" => 4,
60
+ "g" => 2,
61
+ "h" => 4,
62
+ "i" => 1,
63
+ "j" => 8,
64
+ "k" => 5,
65
+ "l" => 1,
66
+ "m" => 3,
67
+ "n" => 1,
68
+ "o" => 1,
69
+ "p" => 3,
70
+ "q" => 10,
71
+ "r" => 1,
72
+ "s" => 1,
73
+ "t" => 1,
74
+ "u" => 1,
75
+ "v" => 4,
76
+ "w" => 4,
77
+ "x" => 8,
78
+ "y" => 4,
58
79
  "z" => 10
59
80
  }
60
81
 
@@ -9,15 +9,15 @@ defmodule ETL do
9
9
  """
10
10
  def transform(input) do
11
11
  input
12
- |> Map.to_list
13
- |> invert
14
- |> List.flatten
15
- |> Enum.into(%{})
12
+ |> Map.to_list()
13
+ |> invert
14
+ |> List.flatten()
15
+ |> Enum.into(%{})
16
16
  end
17
17
 
18
18
  defp invert(pairs) do
19
- Enum.map(pairs, fn({key, values}) ->
20
- Enum.map(values, fn(value) -> {String.downcase(value), key} end)
19
+ Enum.map(pairs, fn {key, values} ->
20
+ Enum.map(values, fn value -> {String.downcase(value), key} end)
21
21
  end)
22
22
  end
23
23
  end
@@ -14,6 +14,5 @@ defmodule FlattenArray do
14
14
 
15
15
  @spec flatten(list) :: list
16
16
  def flatten(list) do
17
-
18
17
  end
19
18
  end
@@ -2,38 +2,38 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
2
2
  Code.load_file("flatten_array.exs", __DIR__)
3
3
  end
4
4
 
5
- ExUnit.start
6
- ExUnit.configure exclude: :pending, trace: true
5
+ ExUnit.start()
6
+ ExUnit.configure(exclude: :pending, trace: true)
7
7
 
8
8
  defmodule FlattenArrayTest do
9
9
  use ExUnit.Case
10
10
 
11
11
  test "returns original list if there is nothing to flatten" do
12
- assert FlattenArray.flatten([1, 2, 3]) == [1, 2, 3]
12
+ assert FlattenArray.flatten([1, 2, 3]) == [1, 2, 3]
13
13
  end
14
14
 
15
15
  @tag :pending
16
16
  test "flattens an empty nested list" do
17
- assert FlattenArray.flatten([[]]) == []
17
+ assert FlattenArray.flatten([[]]) == []
18
18
  end
19
19
 
20
20
  @tag :pending
21
21
  test "flattens a nested list" do
22
- assert FlattenArray.flatten([1,[2,[3],4],5,[6,[7,8]]]) == [1, 2, 3, 4, 5, 6, 7, 8]
22
+ assert FlattenArray.flatten([1, [2, [3], 4], 5, [6, [7, 8]]]) == [1, 2, 3, 4, 5, 6, 7, 8]
23
23
  end
24
24
 
25
25
  @tag :pending
26
26
  test "removes nil from list" do
27
- assert FlattenArray.flatten([1, nil, 2]) == [1, 2]
27
+ assert FlattenArray.flatten([1, nil, 2]) == [1, 2]
28
28
  end
29
29
 
30
30
  @tag :pending
31
31
  test "removes nil from a nested list" do
32
- assert FlattenArray.flatten([1, [2, nil, 4], 5]) == [1, 2, 4, 5]
32
+ assert FlattenArray.flatten([1, [2, nil, 4], 5]) == [1, 2, 4, 5]
33
33
  end
34
34
 
35
35
  @tag :pending
36
36
  test "returns an empty list if all values in nested list are nil" do
37
- assert FlattenArray.flatten([nil, [nil], [nil, [nil]]]) == []
37
+ assert FlattenArray.flatten([nil, [nil], [nil, [nil]]]) == []
38
38
  end
39
39
  end
@@ -135,11 +135,11 @@ defmodule Forth do
135
135
  Regex.scan(~r/[\p{L}\p{N}\p{S}\p{P}]+/u, s)
136
136
  |> Stream.map(&hd/1)
137
137
  |> Enum.map(fn t ->
138
- case Integer.parse(t) do
139
- {i, ""} -> i
140
- _ -> t
141
- end
142
- end)
138
+ case Integer.parse(t) do
139
+ {i, ""} -> i
140
+ _ -> t
141
+ end
142
+ end)
143
143
  end
144
144
 
145
145
  @doc """
@@ -6,24 +6,21 @@ defmodule Forth do
6
6
  """
7
7
  @spec new() :: evaluator
8
8
  def new() do
9
-
10
9
  end
11
10
 
12
11
  @doc """
13
12
  Evaluate an input string, updating the evaluator state.
14
13
  """
15
- @spec eval(evaluator, String.t) :: evaluator
14
+ @spec eval(evaluator, String.t()) :: evaluator
16
15
  def eval(ev, s) do
17
-
18
16
  end
19
17
 
20
18
  @doc """
21
19
  Return the current stack as a string with the element on top of the stack
22
20
  being the rightmost element in the string.
23
21
  """
24
- @spec format_stack(evaluator) :: String.t
22
+ @spec format_stack(evaluator) :: String.t()
25
23
  def format_stack(ev) do
26
-
27
24
  end
28
25
 
29
26
  defmodule StackUnderflow do
@@ -32,13 +29,13 @@ defmodule Forth do
32
29
  end
33
30
 
34
31
  defmodule InvalidWord do
35
- defexception [word: nil]
36
- def message(e), do: "invalid word: #{inspect e.word}"
32
+ defexception word: nil
33
+ def message(e), do: "invalid word: #{inspect(e.word)}"
37
34
  end
38
35
 
39
36
  defmodule UnknownWord do
40
- defexception [word: nil]
41
- def message(e), do: "unknown word: #{inspect e.word}"
37
+ defexception word: nil
38
+ def message(e), do: "unknown word: #{inspect(e.word)}"
42
39
  end
43
40
 
44
41
  defmodule DivisionByZero do
@@ -2,167 +2,210 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
2
2
  Code.load_file("forth.exs", __DIR__)
3
3
  end
4
4
 
5
- ExUnit.start
6
- ExUnit.configure exclude: :pending, trace: true
5
+ ExUnit.start()
6
+ ExUnit.configure(exclude: :pending, trace: true)
7
7
 
8
8
  defmodule ForthTest do
9
9
  use ExUnit.Case
10
10
 
11
11
  # @tag :pending
12
12
  test "no input, no stack" do
13
- s = Forth.new |> Forth.format_stack
13
+ s = Forth.new() |> Forth.format_stack()
14
14
  assert s == ""
15
15
  end
16
16
 
17
17
  @tag :pending
18
18
  test "numbers just get pushed onto the stack" do
19
- s = Forth.new
20
- |> Forth.eval("1 2 3 4 5")
21
- |> Forth.format_stack
19
+ s =
20
+ Forth.new()
21
+ |> Forth.eval("1 2 3 4 5")
22
+ |> Forth.format_stack()
23
+
22
24
  assert s == "1 2 3 4 5"
23
25
  end
24
26
 
25
27
  @tag :pending
26
28
  test "non-word characters are separators" do
27
29
  # Note the Ogham Space Mark ( ), this is a spacing character.
28
- s = Forth.new
29
- |> Forth.eval("1\x002\x013\n4\r5 6\t7")
30
- |> Forth.format_stack
30
+ s =
31
+ Forth.new()
32
+ |> Forth.eval("1\x002\x013\n4\r5 6\t7")
33
+ |> Forth.format_stack()
34
+
31
35
  assert s == "1 2 3 4 5 6 7"
32
36
  end
33
37
 
34
38
  @tag :pending
35
39
  test "basic arithmetic" do
36
- s = Forth.new
37
- |> Forth.eval("1 2 + 4 -")
38
- |> Forth.format_stack
40
+ s =
41
+ Forth.new()
42
+ |> Forth.eval("1 2 + 4 -")
43
+ |> Forth.format_stack()
44
+
39
45
  assert s == "-1"
40
- s = Forth.new
41
- |> Forth.eval("2 4 * 3 /") # integer division
42
- |> Forth.format_stack
46
+ # integer division
47
+ s =
48
+ Forth.new()
49
+ |> Forth.eval("2 4 * 3 /")
50
+ |> Forth.format_stack()
51
+
43
52
  assert s == "2"
44
53
  end
45
54
 
46
55
  @tag :pending
47
56
  test "division by zero" do
48
57
  assert_raise Forth.DivisionByZero, fn ->
49
- Forth.new |> Forth.eval("4 2 2 - /")
58
+ Forth.new() |> Forth.eval("4 2 2 - /")
50
59
  end
51
60
  end
52
61
 
53
62
  @tag :pending
54
63
  test "dup" do
55
- s = Forth.new
56
- |> Forth.eval("1 DUP")
57
- |> Forth.format_stack
64
+ s =
65
+ Forth.new()
66
+ |> Forth.eval("1 DUP")
67
+ |> Forth.format_stack()
68
+
58
69
  assert s == "1 1"
59
- s = Forth.new
60
- |> Forth.eval("1 2 Dup")
61
- |> Forth.format_stack
70
+
71
+ s =
72
+ Forth.new()
73
+ |> Forth.eval("1 2 Dup")
74
+ |> Forth.format_stack()
75
+
62
76
  assert s == "1 2 2"
77
+
63
78
  assert_raise Forth.StackUnderflow, fn ->
64
- Forth.new |> Forth.eval("dup")
79
+ Forth.new() |> Forth.eval("dup")
65
80
  end
66
81
  end
67
82
 
68
83
  @tag :pending
69
84
  test "drop" do
70
- s = Forth.new
71
- |> Forth.eval("1 drop")
72
- |> Forth.format_stack
85
+ s =
86
+ Forth.new()
87
+ |> Forth.eval("1 drop")
88
+ |> Forth.format_stack()
89
+
73
90
  assert s == ""
74
- s = Forth.new
75
- |> Forth.eval("1 2 drop")
76
- |> Forth.format_stack
91
+
92
+ s =
93
+ Forth.new()
94
+ |> Forth.eval("1 2 drop")
95
+ |> Forth.format_stack()
96
+
77
97
  assert s == "1"
98
+
78
99
  assert_raise Forth.StackUnderflow, fn ->
79
- Forth.new |> Forth.eval("drop")
100
+ Forth.new() |> Forth.eval("drop")
80
101
  end
81
102
  end
82
103
 
83
104
  @tag :pending
84
105
  test "swap" do
85
- s = Forth.new
86
- |> Forth.eval("1 2 swap")
87
- |> Forth.format_stack
106
+ s =
107
+ Forth.new()
108
+ |> Forth.eval("1 2 swap")
109
+ |> Forth.format_stack()
110
+
88
111
  assert s == "2 1"
89
- s = Forth.new
90
- |> Forth.eval("1 2 3 swap")
91
- |> Forth.format_stack
112
+
113
+ s =
114
+ Forth.new()
115
+ |> Forth.eval("1 2 3 swap")
116
+ |> Forth.format_stack()
117
+
92
118
  assert s == "1 3 2"
119
+
93
120
  assert_raise Forth.StackUnderflow, fn ->
94
- Forth.new |> Forth.eval("1 swap")
121
+ Forth.new() |> Forth.eval("1 swap")
95
122
  end
123
+
96
124
  assert_raise Forth.StackUnderflow, fn ->
97
- Forth.new |> Forth.eval("swap")
125
+ Forth.new() |> Forth.eval("swap")
98
126
  end
99
127
  end
100
128
 
101
129
  @tag :pending
102
130
  test "over" do
103
- s = Forth.new
104
- |> Forth.eval("1 2 over")
105
- |> Forth.format_stack
131
+ s =
132
+ Forth.new()
133
+ |> Forth.eval("1 2 over")
134
+ |> Forth.format_stack()
135
+
106
136
  assert s == "1 2 1"
107
- s = Forth.new
108
- |> Forth.eval("1 2 3 over")
109
- |> Forth.format_stack
137
+
138
+ s =
139
+ Forth.new()
140
+ |> Forth.eval("1 2 3 over")
141
+ |> Forth.format_stack()
142
+
110
143
  assert s == "1 2 3 2"
144
+
111
145
  assert_raise Forth.StackUnderflow, fn ->
112
- Forth.new |> Forth.eval("1 over")
146
+ Forth.new() |> Forth.eval("1 over")
113
147
  end
148
+
114
149
  assert_raise Forth.StackUnderflow, fn ->
115
- Forth.new |> Forth.eval("over")
150
+ Forth.new() |> Forth.eval("over")
116
151
  end
117
152
  end
118
153
 
119
154
  @tag :pending
120
155
  test "defining a new word" do
121
- s = Forth.new
122
- |> Forth.eval(": dup-twice dup dup ;")
123
- |> Forth.eval("1 dup-twice")
124
- |> Forth.format_stack
156
+ s =
157
+ Forth.new()
158
+ |> Forth.eval(": dup-twice dup dup ;")
159
+ |> Forth.eval("1 dup-twice")
160
+ |> Forth.format_stack()
161
+
125
162
  assert s == "1 1 1"
126
163
  end
127
164
 
128
165
  @tag :pending
129
166
  test "redefining an existing word" do
130
- s = Forth.new
131
- |> Forth.eval(": foo dup ;")
132
- |> Forth.eval(": foo dup dup ;")
133
- |> Forth.eval("1 foo")
134
- |> Forth.format_stack
167
+ s =
168
+ Forth.new()
169
+ |> Forth.eval(": foo dup ;")
170
+ |> Forth.eval(": foo dup dup ;")
171
+ |> Forth.eval("1 foo")
172
+ |> Forth.format_stack()
173
+
135
174
  assert s == "1 1 1"
136
175
  end
137
176
 
138
177
  @tag :pending
139
178
  test "redefining an existing built-in word" do
140
- s = Forth.new
141
- |> Forth.eval(": swap dup ;")
142
- |> Forth.eval("1 swap")
143
- |> Forth.format_stack
179
+ s =
180
+ Forth.new()
181
+ |> Forth.eval(": swap dup ;")
182
+ |> Forth.eval("1 swap")
183
+ |> Forth.format_stack()
184
+
144
185
  assert s == "1 1"
145
186
  end
146
187
 
147
188
  @tag :pending
148
189
  test "defining words with odd characters" do
149
- s = Forth.new
150
- |> Forth.eval(": € 220371 ; €")
151
- |> Forth.format_stack
190
+ s =
191
+ Forth.new()
192
+ |> Forth.eval(": € 220371 ; €")
193
+ |> Forth.format_stack()
194
+
152
195
  assert s == "220371"
153
196
  end
154
197
 
155
198
  @tag :pending
156
199
  test "defining a number" do
157
200
  assert_raise Forth.InvalidWord, fn ->
158
- Forth.new |> Forth.eval(": 1 2 ;")
201
+ Forth.new() |> Forth.eval(": 1 2 ;")
159
202
  end
160
203
  end
161
204
 
162
205
  @tag :pending
163
206
  test "calling a non-existing word" do
164
207
  assert_raise Forth.UnknownWord, fn ->
165
- Forth.new |> Forth.eval("1 foo")
208
+ Forth.new() |> Forth.eval("1 foo")
166
209
  end
167
210
  end
168
211
  end