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
@@ -1,13 +1,12 @@
1
1
  defmodule SpaceAge do
2
-
3
- def age_on(:earth, seconds), do: seconds / 31557600.0
2
+ def age_on(:earth, seconds), do: seconds / 31_557_600.0
4
3
  def age_on(planet, seconds), do: age_on(:earth, seconds) / planet_rel_years(planet)
5
4
 
6
5
  defp planet_rel_years(:mercury), do: 0.2408467
7
- defp planet_rel_years(:venus), do: 0.61519726
8
- defp planet_rel_years(:mars), do: 1.8808158
6
+ defp planet_rel_years(:venus), do: 0.61519726
7
+ defp planet_rel_years(:mars), do: 1.8808158
9
8
  defp planet_rel_years(:jupiter), do: 11.862615
10
- defp planet_rel_years(:saturn), do: 29.447498
11
- defp planet_rel_years(:uranus), do: 84.016846
9
+ defp planet_rel_years(:saturn), do: 29.447498
10
+ defp planet_rel_years(:uranus), do: 84.016846
12
11
  defp planet_rel_years(:neptune), do: 164.79132
13
12
  end
@@ -1,6 +1,13 @@
1
1
  defmodule SpaceAge do
2
- @type planet :: :mercury | :venus | :earth | :mars | :jupiter
3
- | :saturn | :uranus | :neptune
2
+ @type planet ::
3
+ :mercury
4
+ | :venus
5
+ | :earth
6
+ | :mars
7
+ | :jupiter
8
+ | :saturn
9
+ | :uranus
10
+ | :neptune
4
11
 
5
12
  @doc """
6
13
  Return the number of years a person that has lived for 'seconds' seconds is
@@ -8,6 +15,5 @@ defmodule SpaceAge do
8
15
  """
9
16
  @spec age_on(planet, pos_integer) :: float
10
17
  def age_on(planet, seconds) do
11
-
12
18
  end
13
19
  end
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
2
2
  Code.load_file("space_age.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
  # You need to define a SpaceAge module containing a function age_on that given a
9
9
  # planet (:earth, :saturn, etc) and a number of seconds returns the age in years
@@ -1,19 +1,24 @@
1
1
  defmodule Spiral do
2
-
3
2
  @doc """
4
3
  Given the dimension, return a square matrix of numbers in clockwise spiral order.
5
4
  """
6
5
  @spec matrix(dimension :: integer) :: list(list(integer))
7
6
  def matrix(0), do: []
7
+
8
8
  def matrix(dimension) do
9
9
  unwind(dimension, dimension, 1)
10
10
  end
11
11
 
12
12
  defp unwind(row, col, start) do
13
13
  case col do
14
- 0 -> [[]]
15
- _ -> [Enum.to_list(start..start + col - 1) |
16
- unwind(col, row - 1, start + col) |> rotate_right]
14
+ 0 ->
15
+ [[]]
16
+
17
+ _ ->
18
+ [
19
+ Enum.to_list(start..(start + col - 1))
20
+ | unwind(col, row - 1, start + col) |> rotate_right
21
+ ]
17
22
  end
18
23
  end
19
24
 
@@ -22,6 +27,6 @@ defmodule Spiral do
22
27
  end
23
28
 
24
29
  defp transpose(matrix) do
25
- matrix |> List.zip |> Enum.map(&Tuple.to_list/1)
30
+ matrix |> List.zip() |> Enum.map(&Tuple.to_list/1)
26
31
  end
27
32
  end
@@ -1,5 +1,4 @@
1
1
  defmodule Spiral do
2
-
3
2
  @doc """
4
3
  Given the dimension, return a square matrix of numbers in clockwise spiral order.
5
4
  """
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
2
2
  Code.load_file("spiral.exs", __DIR__)
3
3
  end
4
4
 
5
- ExUnit.start
6
- ExUnit.configure trace: true, exclude: :pending
5
+ ExUnit.start()
6
+ ExUnit.configure(trace: true, exclude: :pending)
7
7
 
8
8
  defmodule SpiralTest do
9
9
  use ExUnit.Case
@@ -15,44 +15,44 @@ defmodule SpiralTest do
15
15
 
16
16
  @tag :pending
17
17
  test "trivial spiral" do
18
- assert Spiral.matrix(1) == [ [1] ]
18
+ assert Spiral.matrix(1) == [[1]]
19
19
  end
20
20
 
21
21
  @tag :pending
22
22
  test "spiral of side length 2" do
23
23
  assert Spiral.matrix(2) == [
24
- [1, 2],
25
- [4, 3]
26
- ]
24
+ [1, 2],
25
+ [4, 3]
26
+ ]
27
27
  end
28
28
 
29
29
  @tag :pending
30
30
  test "spiral of side length 3" do
31
31
  assert Spiral.matrix(3) == [
32
- [1, 2, 3],
33
- [8, 9, 4],
34
- [7, 6, 5]
35
- ]
32
+ [1, 2, 3],
33
+ [8, 9, 4],
34
+ [7, 6, 5]
35
+ ]
36
36
  end
37
37
 
38
38
  @tag :pending
39
39
  test "spiral of side length 4" do
40
40
  assert Spiral.matrix(4) == [
41
- [ 1, 2, 3, 4],
42
- [12, 13, 14, 5],
43
- [11, 16, 15, 6],
44
- [10, 9, 8, 7]
45
- ]
41
+ [1, 2, 3, 4],
42
+ [12, 13, 14, 5],
43
+ [11, 16, 15, 6],
44
+ [10, 9, 8, 7]
45
+ ]
46
46
  end
47
47
 
48
48
  @tag :pending
49
49
  test "spiral of size 5" do
50
50
  assert Spiral.matrix(5) == [
51
- [ 1, 2, 3, 4, 5],
52
- [16, 17, 18, 19, 6],
53
- [15, 24, 25, 20, 7],
54
- [14, 23, 22, 21, 8],
55
- [13, 12, 11, 10, 9]
56
- ]
51
+ [1, 2, 3, 4, 5],
52
+ [16, 17, 18, 19, 6],
53
+ [15, 24, 25, 20, 7],
54
+ [14, 23, 22, 21, 8],
55
+ [13, 12, 11, 10, 9]
56
+ ]
57
57
  end
58
58
  end
@@ -5,12 +5,13 @@ defmodule Strain do
5
5
 
6
6
  Do not use `Enum.filter`.
7
7
  """
8
- @spec keep(list :: list(any), fun :: ((any) -> boolean)) :: list(any)
8
+ @spec keep(list :: list(any), fun :: (any -> boolean)) :: list(any)
9
9
  def keep(list, fun) do
10
10
  do_keep(list, fun, [])
11
11
  end
12
12
 
13
13
  defp do_keep([], _, results), do: Enum.reverse(results)
14
+
14
15
  defp do_keep([head | tail], fun, results) do
15
16
  case apply(fun, [head]) do
16
17
  true -> do_keep(tail, fun, [head | results])
@@ -24,17 +25,17 @@ defmodule Strain do
24
25
 
25
26
  Do not use `Enum.reject`.
26
27
  """
27
- @spec discard(list :: list(any), fun :: ((any) -> boolean)) :: list(any)
28
+ @spec discard(list :: list(any), fun :: (any -> boolean)) :: list(any)
28
29
  def discard(list, fun) do
29
30
  do_discard(list, fun, [])
30
31
  end
31
32
 
32
33
  defp do_discard([], _, results), do: Enum.reverse(results)
34
+
33
35
  defp do_discard([head | tail], fun, results) do
34
36
  case apply(fun, [head]) do
35
37
  true -> do_discard(tail, fun, results)
36
- _ -> do_discard(tail, fun, [ head | results ])
38
+ _ -> do_discard(tail, fun, [head | results])
37
39
  end
38
40
  end
39
41
  end
40
-
@@ -5,7 +5,7 @@ defmodule Strain do
5
5
 
6
6
  Do not use `Enum.filter`.
7
7
  """
8
- @spec keep(list :: list(any), fun :: ((any) -> boolean)) :: list(any)
8
+ @spec keep(list :: list(any), fun :: (any -> boolean)) :: list(any)
9
9
  def keep(list, fun) do
10
10
  end
11
11
 
@@ -15,7 +15,7 @@ defmodule Strain do
15
15
 
16
16
  Do not use `Enum.reject`.
17
17
  """
18
- @spec discard(list :: list(any), fun :: ((any) -> boolean)) :: list(any)
18
+ @spec discard(list :: list(any), fun :: (any -> boolean)) :: list(any)
19
19
  def discard(list, fun) do
20
20
  end
21
21
  end
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
2
2
  Code.load_file("strain.exs", __DIR__)
3
3
  end
4
4
 
5
- ExUnit.start
6
- ExUnit.configure trace: true, exclude: :pending
5
+ ExUnit.start()
6
+ ExUnit.configure(trace: true, exclude: :pending)
7
7
 
8
8
  defmodule StrainTest do
9
9
  use ExUnit.Case
@@ -12,7 +12,7 @@ defmodule StrainTest do
12
12
  defp is_even?(n), do: rem(n, 2) == 0
13
13
  defp noop(_), do: true
14
14
 
15
- #@tag :pending
15
+ # @tag :pending
16
16
  test "empty keep" do
17
17
  assert Strain.keep([], &noop/1) == []
18
18
  end
@@ -35,7 +35,7 @@ defmodule StrainTest do
35
35
  @tag :pending
36
36
  test "keep strings" do
37
37
  words = ~w(apple zebra banana zombies cherimoya zelot)
38
- assert Strain.keep(words, &(String.starts_with?(&1, "z"))) == ~w(zebra zombies zelot)
38
+ assert Strain.keep(words, &String.starts_with?(&1, "z")) == ~w(zebra zombies zelot)
39
39
  end
40
40
 
41
41
  @tag :pending
@@ -50,7 +50,12 @@ defmodule StrainTest do
50
50
  [1, 2, 5]
51
51
  ]
52
52
 
53
- assert Strain.keep(rows, fn row -> 5 in row end) == [[5, 5, 5], [5, 1, 2], [1, 5, 2], [1, 2, 5]]
53
+ assert Strain.keep(rows, fn row -> 5 in row end) == [
54
+ [5, 5, 5],
55
+ [5, 1, 2],
56
+ [1, 5, 2],
57
+ [1, 2, 5]
58
+ ]
54
59
  end
55
60
 
56
61
  @tag :pending
@@ -76,7 +81,7 @@ defmodule StrainTest do
76
81
  @tag :pending
77
82
  test "discard strings" do
78
83
  words = ~w(apple zebra banana zombies cherimoya zelot)
79
- assert Strain.discard(words, &(String.starts_with?(&1, "z"))) == ~w(apple banana cherimoya)
84
+ assert Strain.discard(words, &String.starts_with?(&1, "z")) == ~w(apple banana cherimoya)
80
85
  end
81
86
 
82
87
  @tag :pending
@@ -90,7 +95,7 @@ defmodule StrainTest do
90
95
  [2, 2, 1],
91
96
  [1, 2, 5]
92
97
  ]
98
+
93
99
  assert Strain.discard(rows, fn row -> 5 in row end) == [[1, 2, 3], [2, 1, 2], [2, 2, 1]]
94
100
  end
95
101
  end
96
-
@@ -4,27 +4,31 @@ defmodule Sublist do
4
4
  and if not whether it is equal or unequal to the second list.
5
5
  """
6
6
  def compare(a, b) do
7
- case { length(a), length(b) } do
8
- { la, lb } when la < lb ->
7
+ case {length(a), length(b)} do
8
+ {la, lb} when la < lb ->
9
9
  if is_sublist(a, b, la, lb), do: :sublist, else: :unequal
10
- { la, lb } when la > lb ->
10
+
11
+ {la, lb} when la > lb ->
11
12
  if is_sublist(b, a, lb, la), do: :superlist, else: :unequal
13
+
12
14
  _ ->
13
15
  if a == b, do: :equal, else: :unequal
14
16
  end
15
17
  end
16
18
 
17
19
  defp is_sublist(_, _, len_a, len_b) when len_a > len_b, do: false
18
- defp is_sublist([], _, _, _), do: true # empty is sublist of all non-empty
19
- defp is_sublist(a, b=[_|t], len_a, len_b) do
20
+ # empty is sublist of all non-empty
21
+ defp is_sublist([], _, _, _), do: true
22
+
23
+ defp is_sublist(a, b = [_ | t], len_a, len_b) do
20
24
  if try_is_sublist(a, b) do
21
25
  true
22
26
  else
23
- is_sublist(a, t, len_a, len_b-1)
27
+ is_sublist(a, t, len_a, len_b - 1)
24
28
  end
25
29
  end
26
30
 
27
31
  defp try_is_sublist([], _), do: true
28
- defp try_is_sublist([x|at], [x|bt]), do: try_is_sublist(at, bt)
32
+ defp try_is_sublist([x | at], [x | bt]), do: try_is_sublist(at, bt)
29
33
  defp try_is_sublist(_, _), do: false
30
34
  end
@@ -4,6 +4,5 @@ defmodule Sublist do
4
4
  and if not whether it is equal or unequal to the second list.
5
5
  """
6
6
  def compare(a, b) do
7
-
8
7
  end
9
8
  end
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
2
2
  Code.load_file("sublist.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 SublistTest do
9
9
  use ExUnit.Case
@@ -35,64 +35,62 @@ defmodule SublistTest do
35
35
 
36
36
  @tag :pending
37
37
  test "sublist at start" do
38
- assert Sublist.compare([1,2,3],[1,2,3,4,5]) == :sublist
38
+ assert Sublist.compare([1, 2, 3], [1, 2, 3, 4, 5]) == :sublist
39
39
  end
40
40
 
41
41
  @tag :pending
42
42
  test "sublist in middle" do
43
- assert Sublist.compare([4,3,2],[5,4,3,2,1]) == :sublist
43
+ assert Sublist.compare([4, 3, 2], [5, 4, 3, 2, 1]) == :sublist
44
44
  end
45
45
 
46
46
  @tag :pending
47
47
  test "sublist at end" do
48
- assert Sublist.compare([3,4,5],[1,2,3,4,5]) == :sublist
48
+ assert Sublist.compare([3, 4, 5], [1, 2, 3, 4, 5]) == :sublist
49
49
  end
50
50
 
51
51
  @tag :pending
52
52
  test "partially matching sublist at start" do
53
- assert Sublist.compare([1,1,2], [1,1,1,2]) == :sublist
53
+ assert Sublist.compare([1, 1, 2], [1, 1, 1, 2]) == :sublist
54
54
  end
55
55
 
56
56
  @tag :pending
57
57
  test "sublist early in huge list" do
58
- assert Sublist.compare([3,4,5], Enum.to_list(1..1_000_000)) == :sublist
58
+ assert Sublist.compare([3, 4, 5], Enum.to_list(1..1_000_000)) == :sublist
59
59
  end
60
60
 
61
61
  @tag :pending
62
62
  test "huge sublist not in huge list" do
63
- assert Sublist.compare(Enum.to_list(10..1_000_001),
64
- Enum.to_list(1..1_000_000))
65
- == :unequal
63
+ assert Sublist.compare(Enum.to_list(10..1_000_001), Enum.to_list(1..1_000_000)) == :unequal
66
64
  end
67
65
 
68
66
  @tag :pending
69
67
  test "superlist at start" do
70
- assert Sublist.compare([1,2,3,4,5],[1,2,3]) == :superlist
68
+ assert Sublist.compare([1, 2, 3, 4, 5], [1, 2, 3]) == :superlist
71
69
  end
72
70
 
73
71
  @tag :pending
74
72
  test "superlist in middle" do
75
- assert Sublist.compare([5,4,3,2,1],[4,3,2]) == :superlist
73
+ assert Sublist.compare([5, 4, 3, 2, 1], [4, 3, 2]) == :superlist
76
74
  end
77
75
 
78
76
  @tag :pending
79
77
  test "superlist at end" do
80
- assert Sublist.compare([1,2,3,4,5],[3,4,5]) == :superlist
78
+ assert Sublist.compare([1, 2, 3, 4, 5], [3, 4, 5]) == :superlist
81
79
  end
82
80
 
83
81
  @tag :pending
84
82
  test "1 and 2 does not contain 3" do
85
- assert Sublist.compare([1,2], [3]) == :unequal
83
+ assert Sublist.compare([1, 2], [3]) == :unequal
86
84
  end
87
85
 
88
86
  @tag :pending
89
87
  test "partially matching superlist at start" do
90
- assert Sublist.compare([1,1,1,2], [1,1,2]) == :superlist
88
+ assert Sublist.compare([1, 1, 1, 2], [1, 1, 2]) == :superlist
91
89
  end
92
90
 
93
91
  @tag :pending
94
92
  test "superlist early in huge list" do
95
- assert Sublist.compare(Enum.to_list(1..1_000_000), [3,4,5]) == :superlist
93
+ assert Sublist.compare(Enum.to_list(1..1_000_000), [3, 4, 5]) == :superlist
96
94
  end
97
95
 
98
96
  @tag :pending
@@ -102,11 +100,11 @@ defmodule SublistTest do
102
100
 
103
101
  @tag :pending
104
102
  test "recurring values sublist" do
105
- assert Sublist.compare([1,2,1,2,3], [1,2,3,1,2,1,2,3,2,1]) == :sublist
103
+ assert Sublist.compare([1, 2, 1, 2, 3], [1, 2, 3, 1, 2, 1, 2, 3, 2, 1]) == :sublist
106
104
  end
107
105
 
108
106
  @tag :pending
109
107
  test "recurring values unequal" do
110
- assert Sublist.compare([1,2,1,2,3], [1,2,3,1,2,3,2,3,2,1]) == :unequal
108
+ assert Sublist.compare([1, 2, 1, 2, 3], [1, 2, 3, 1, 2, 3, 2, 3, 2, 1]) == :unequal
111
109
  end
112
110
  end
@@ -1,12 +1,11 @@
1
1
  defmodule SumOfMultiples do
2
-
3
2
  @doc """
4
3
  Adds up all numbers from 1 to a given end number that are multiples of the factors provided.
5
4
  """
6
5
  @spec to(non_neg_integer, [non_neg_integer]) :: non_neg_integer
7
6
  def to(limit, factors) do
8
- Enum.reduce(1..limit-1, 0, fn(n, acc) ->
9
- if Enum.any?(factors, &(rem(n, &1) == 0)), do: acc + n, else: acc end)
7
+ Enum.reduce(1..(limit - 1), 0, fn n, acc ->
8
+ if Enum.any?(factors, &(rem(n, &1) == 0)), do: acc + n, else: acc
9
+ end)
10
10
  end
11
-
12
11
  end