trackler 2.2.1.47 → 2.2.1.48

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/problem-specifications/exercises/pangram/canonical-data.json +3 -3
  4. data/tracks/common-lisp/.travis.yml +2 -9
  5. data/tracks/common-lisp/docs/TESTS.md +43 -9
  6. data/tracks/delphi/exercises/nucleotide-count/uNucleotideCountTest.pas +2 -2
  7. data/tracks/elixir/.travis.yml +4 -7
  8. data/tracks/elixir/README.md +2 -6
  9. data/tracks/elixir/bin/dialyzer_check.sh +2 -13
  10. data/tracks/elixir/exercises/allergies/example.exs +3 -2
  11. data/tracks/elixir/exercises/atbash-cipher/example.exs +5 -5
  12. data/tracks/elixir/exercises/bank-account/example.exs +11 -11
  13. data/tracks/elixir/exercises/bob/example.exs +4 -4
  14. data/tracks/elixir/exercises/forth/example.exs +66 -48
  15. data/tracks/elixir/exercises/minesweeper/example.exs +31 -18
  16. data/tracks/elixir/exercises/pangram/example.exs +4 -4
  17. data/tracks/elixir/exercises/queen-attack/queen_attack_test.exs +68 -53
  18. data/tracks/elixir/exercises/say/example.exs +33 -31
  19. data/tracks/elixir/exercises/scrabble-score/example.exs +12 -11
  20. data/tracks/elixir/mix.exs +10 -7
  21. data/tracks/elixir/mix.lock +4 -1
  22. data/tracks/erlang/README.md +2 -0
  23. data/tracks/fsharp/exercises/nth-prime/Example.fs +4 -1
  24. data/tracks/fsharp/exercises/nth-prime/NthPrime.fs +1 -1
  25. data/tracks/fsharp/exercises/nth-prime/NthPrimeTest.fs +12 -32
  26. data/tracks/fsharp/exercises/pangram/PangramTest.fs +3 -3
  27. data/tracks/fsharp/exercises/perfect-numbers/Example.fs +9 -6
  28. data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fs +1 -1
  29. data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbersTest.fs +55 -21
  30. data/tracks/fsharp/generators/Generators.fs +18 -0
  31. data/tracks/gnu-apl/config.json +21 -0
  32. data/tracks/gnu-apl/exercises/hamming/README.md +42 -0
  33. data/tracks/gnu-apl/exercises/hamming/hamming-example.apl +5 -0
  34. data/tracks/gnu-apl/exercises/hamming/hamming.tc +75 -0
  35. data/tracks/gnu-apl/exercises/hello-world/README.md +17 -1
  36. data/tracks/gnu-apl/exercises/leap/README.md +33 -0
  37. data/tracks/gnu-apl/exercises/raindrops/README.md +24 -0
  38. data/tracks/gnu-apl/exercises/raindrops/raindrops-example.apl +8 -0
  39. data/tracks/gnu-apl/exercises/raindrops/raindrops.tc +60 -0
  40. data/tracks/gnu-apl/exercises/rna-transcription/README.md +25 -0
  41. data/tracks/gnu-apl/exercises/rna-transcription/rna-transcription-example.apl +7 -0
  42. data/tracks/gnu-apl/exercises/rna-transcription/rna-transcription.tc +41 -0
  43. data/tracks/gnu-apl/test.apl +13 -0
  44. data/tracks/haskell/config.json +9 -0
  45. data/tracks/haskell/exercises/rotational-cipher/README.md +91 -0
  46. data/tracks/haskell/exercises/rotational-cipher/examples/success-standard/package.yaml +16 -0
  47. data/tracks/haskell/exercises/rotational-cipher/examples/success-standard/src/RotationalCipher.hs +9 -0
  48. data/tracks/haskell/exercises/rotational-cipher/package.yaml +20 -0
  49. data/tracks/haskell/exercises/rotational-cipher/src/RotationalCipher.hs +4 -0
  50. data/tracks/haskell/exercises/rotational-cipher/stack.yaml +1 -0
  51. data/tracks/haskell/exercises/rotational-cipher/test/Tests.hs +77 -0
  52. data/tracks/java/config.json +23 -14
  53. data/tracks/java/config/exercise-readme-insert.md +3 -3
  54. data/tracks/java/config/exercise_readme.go.tmpl +3 -0
  55. data/tracks/java/exercises/accumulate/README.md +4 -3
  56. data/tracks/java/exercises/acronym/.meta/{.version → version} +0 -0
  57. data/tracks/java/exercises/acronym/README.md +4 -3
  58. data/tracks/java/exercises/all-your-base/.meta/{.version → version} +0 -0
  59. data/tracks/java/exercises/all-your-base/README.md +4 -3
  60. data/tracks/java/exercises/allergies/README.md +4 -3
  61. data/tracks/java/exercises/anagram/README.md +4 -3
  62. data/tracks/java/exercises/atbash-cipher/README.md +4 -3
  63. data/tracks/java/exercises/bank-account/README.md +6 -3
  64. data/tracks/java/exercises/beer-song/README.md +4 -3
  65. data/tracks/java/exercises/binary-search-tree/.meta/src/reference/java/BinarySearchTree.java +38 -44
  66. data/tracks/java/exercises/binary-search-tree/README.md +4 -3
  67. data/tracks/java/exercises/binary-search-tree/src/main/java/BinarySearchTree.java +35 -0
  68. data/tracks/java/exercises/binary-search-tree/src/test/java/BinarySearchTreeTest.java +46 -40
  69. data/tracks/java/exercises/binary-search/.meta/hints.md +25 -0
  70. data/tracks/java/exercises/binary-search/.meta/src/reference/java/BinarySearch.java +3 -7
  71. data/tracks/java/exercises/binary-search/README.md +33 -3
  72. data/tracks/java/exercises/binary-search/src/test/java/BinarySearchTest.java +11 -11
  73. data/tracks/java/exercises/binary/README.md +4 -3
  74. data/tracks/java/exercises/bob/README.md +4 -3
  75. data/tracks/java/exercises/book-store/README.md +4 -3
  76. data/tracks/java/exercises/bowling/README.md +4 -3
  77. data/tracks/java/exercises/bracket-push/README.md +4 -3
  78. data/tracks/java/exercises/change/.meta/{.version → version} +0 -0
  79. data/tracks/java/exercises/change/README.md +4 -3
  80. data/tracks/java/exercises/circular-buffer/README.md +4 -3
  81. data/tracks/java/exercises/clock/.meta/{.version → version} +0 -0
  82. data/tracks/java/exercises/clock/README.md +6 -3
  83. data/tracks/java/exercises/collatz-conjecture/.meta/{.version → version} +0 -0
  84. data/tracks/java/exercises/collatz-conjecture/README.md +4 -3
  85. data/tracks/java/exercises/complex-numbers/README.md +4 -3
  86. data/tracks/java/exercises/crypto-square/README.md +4 -3
  87. data/tracks/java/exercises/{rna-transcription/.meta/.version → custom-set/.meta/version} +0 -0
  88. data/tracks/java/exercises/custom-set/README.md +4 -3
  89. data/tracks/java/exercises/custom-set/src/test/java/CustomSetTest.java +103 -251
  90. data/tracks/java/exercises/diamond/.meta/{.version → version} +0 -0
  91. data/tracks/java/exercises/diamond/README.md +4 -3
  92. data/tracks/java/exercises/difference-of-squares/.meta/{.version → version} +0 -0
  93. data/tracks/java/exercises/difference-of-squares/README.md +4 -3
  94. data/tracks/java/exercises/etl/README.md +4 -3
  95. data/tracks/java/exercises/flatten-array/.meta/{.version → version} +0 -0
  96. data/tracks/java/exercises/flatten-array/README.md +4 -3
  97. data/tracks/java/exercises/food-chain/README.md +4 -3
  98. data/tracks/java/exercises/forth/.meta/{.version → version} +0 -0
  99. data/tracks/java/exercises/forth/README.md +3 -3
  100. data/tracks/java/exercises/gigasecond/README.md +4 -3
  101. data/tracks/java/exercises/grade-school/README.md +4 -3
  102. data/tracks/java/exercises/hamming/.meta/{.version → version} +0 -0
  103. data/tracks/java/exercises/hamming/README.md +6 -3
  104. data/tracks/java/exercises/hello-world/README.md +6 -3
  105. data/tracks/java/exercises/hexadecimal/README.md +4 -3
  106. data/tracks/java/exercises/house/README.md +4 -3
  107. data/tracks/java/exercises/isogram/README.md +6 -3
  108. data/tracks/java/exercises/kindergarten-garden/README.md +4 -3
  109. data/tracks/java/exercises/largest-series-product/README.md +4 -3
  110. data/tracks/java/exercises/linked-list/README.md +4 -3
  111. data/tracks/java/exercises/list-ops/.meta/{.version → version} +0 -0
  112. data/tracks/java/exercises/list-ops/README.md +6 -3
  113. data/tracks/java/exercises/luhn/README.md +4 -3
  114. data/tracks/java/exercises/matrix/README.md +4 -3
  115. data/tracks/java/exercises/meetup/README.md +4 -3
  116. data/tracks/java/exercises/minesweeper/.meta/{.version → version} +0 -0
  117. data/tracks/java/exercises/minesweeper/README.md +4 -3
  118. data/tracks/java/exercises/nth-prime/README.md +4 -3
  119. data/tracks/java/exercises/nucleotide-count/README.md +4 -3
  120. data/tracks/java/exercises/ocr-numbers/README.md +4 -3
  121. data/tracks/java/exercises/octal/README.md +4 -3
  122. data/tracks/java/exercises/palindrome-products/README.md +4 -3
  123. data/tracks/java/exercises/pangram/.meta/{.version → version} +0 -0
  124. data/tracks/java/exercises/pangram/README.md +4 -3
  125. data/tracks/java/exercises/pascals-triangle/.meta/{.version → version} +0 -0
  126. data/tracks/java/exercises/pascals-triangle/README.md +4 -3
  127. data/tracks/java/exercises/perfect-numbers/.meta/{.version → version} +0 -0
  128. data/tracks/java/exercises/perfect-numbers/README.md +4 -3
  129. data/tracks/java/exercises/phone-number/README.md +4 -3
  130. data/tracks/java/exercises/pig-latin/README.md +4 -3
  131. data/tracks/java/exercises/poker/README.md +4 -3
  132. data/tracks/java/exercises/prime-factors/README.md +4 -3
  133. data/tracks/java/exercises/pythagorean-triplet/README.md +4 -3
  134. data/tracks/java/exercises/queen-attack/README.md +4 -3
  135. data/tracks/java/exercises/raindrops/README.md +4 -3
  136. data/tracks/java/exercises/rectangles/README.md +4 -3
  137. data/tracks/java/exercises/rna-transcription/.meta/version +1 -0
  138. data/tracks/java/exercises/rna-transcription/README.md +4 -3
  139. data/tracks/java/exercises/robot-name/README.md +4 -3
  140. data/tracks/java/exercises/robot-simulator/README.md +4 -3
  141. data/tracks/java/exercises/roman-numerals/README.md +4 -3
  142. data/tracks/java/exercises/rotational-cipher/README.md +4 -3
  143. data/tracks/java/exercises/run-length-encoding/README.md +4 -3
  144. data/tracks/java/exercises/saddle-points/.meta/{.version → version} +0 -0
  145. data/tracks/java/exercises/saddle-points/README.md +4 -3
  146. data/tracks/java/exercises/scrabble-score/.meta/{.version → version} +0 -0
  147. data/tracks/java/exercises/scrabble-score/README.md +4 -3
  148. data/tracks/java/exercises/secret-handshake/README.md +4 -3
  149. data/tracks/java/exercises/series/README.md +4 -3
  150. data/tracks/java/exercises/sieve/README.md +4 -3
  151. data/tracks/java/exercises/simple-cipher/README.md +6 -3
  152. data/tracks/java/exercises/simple-linked-list/README.md +4 -3
  153. data/tracks/java/exercises/space-age/README.md +4 -3
  154. data/tracks/java/exercises/spiral-matrix/.meta/{.version → version} +0 -0
  155. data/tracks/java/exercises/spiral-matrix/README.md +4 -3
  156. data/tracks/java/exercises/strain/README.md +4 -3
  157. data/tracks/java/exercises/sublist/README.md +4 -3
  158. data/tracks/java/exercises/sum-of-multiples/README.md +4 -3
  159. data/tracks/java/exercises/tournament/README.md +4 -3
  160. data/tracks/java/exercises/transpose/README.md +4 -3
  161. data/tracks/java/exercises/triangle/.meta/{.version → version} +0 -0
  162. data/tracks/java/exercises/triangle/README.md +4 -3
  163. data/tracks/java/exercises/trinary/README.md +4 -3
  164. data/tracks/java/exercises/twelve-days/README.md +4 -3
  165. data/tracks/java/exercises/two-fer/README.md +6 -3
  166. data/tracks/java/exercises/word-count/README.md +4 -3
  167. data/tracks/java/exercises/word-search/.meta/{.version → version} +0 -0
  168. data/tracks/java/exercises/word-search/README.md +4 -3
  169. data/tracks/java/exercises/wordy/README.md +4 -3
  170. data/tracks/julia/config.json +13 -0
  171. data/tracks/julia/exercises/phone-number/README.md +36 -0
  172. data/tracks/julia/exercises/phone-number/example.jl +18 -0
  173. data/tracks/julia/exercises/phone-number/phone-number.jl +3 -0
  174. data/tracks/julia/exercises/phone-number/runtests.jl +49 -0
  175. data/tracks/lua/config.json +505 -494
  176. data/tracks/lua/config/maintainers.json +16 -16
  177. data/tracks/lua/exercises/acronym/README.md +0 -1
  178. data/tracks/lua/exercises/all-your-base/README.md +1 -1
  179. data/tracks/lua/exercises/allergies/README.md +0 -1
  180. data/tracks/lua/exercises/alphametics/README.md +2 -2
  181. data/tracks/lua/exercises/atbash-cipher/README.md +2 -1
  182. data/tracks/lua/exercises/beer-song/README.md +1 -1
  183. data/tracks/lua/exercises/binary/README.md +2 -0
  184. data/tracks/lua/exercises/bowling/README.md +20 -6
  185. data/tracks/lua/exercises/change/README.md +1 -1
  186. data/tracks/lua/exercises/circular-buffer/README.md +13 -6
  187. data/tracks/lua/exercises/crypto-square/README.md +4 -4
  188. data/tracks/lua/exercises/diamond/README.md +6 -6
  189. data/tracks/lua/exercises/etl/README.md +2 -0
  190. data/tracks/lua/exercises/flatten-array/README.md +1 -2
  191. data/tracks/lua/exercises/food-chain/README.md +1 -1
  192. data/tracks/lua/exercises/grade-school/README.md +0 -1
  193. data/tracks/lua/exercises/grains/README.md +0 -1
  194. data/tracks/lua/exercises/house/README.md +1 -2
  195. data/tracks/lua/exercises/isogram/README.md +2 -1
  196. data/tracks/lua/exercises/kindergarten-garden/README.md +13 -13
  197. data/tracks/lua/exercises/leap/README.md +1 -1
  198. data/tracks/lua/exercises/linked-list/README.md +10 -10
  199. data/tracks/lua/exercises/luhn/README.md +7 -7
  200. data/tracks/lua/exercises/matrix/README.md +6 -4
  201. data/tracks/lua/exercises/meetup/README.md +1 -2
  202. data/tracks/lua/exercises/nucleotide-count/README.md +8 -22
  203. data/tracks/lua/exercises/ocr-numbers/README.md +5 -5
  204. data/tracks/lua/exercises/octal/README.md +6 -2
  205. data/tracks/lua/exercises/pangram/README.md +1 -1
  206. data/tracks/lua/exercises/pascals-triangle/README.md +1 -1
  207. data/tracks/lua/exercises/perfect-numbers/README.md +2 -2
  208. data/tracks/lua/exercises/phone-number/README.md +3 -2
  209. data/tracks/lua/exercises/pov/README.md +2 -2
  210. data/tracks/lua/exercises/protein-translation/README.md +4 -5
  211. data/tracks/lua/exercises/pythagorean-triplet/README.md +3 -3
  212. data/tracks/lua/exercises/rail-fence-cipher/README.md +12 -7
  213. data/tracks/lua/exercises/react/README.md +29 -0
  214. data/tracks/lua/exercises/react/example.lua +108 -0
  215. data/tracks/lua/exercises/react/react_spec.lua +160 -0
  216. data/tracks/lua/exercises/rectangles/README.md +7 -7
  217. data/tracks/lua/exercises/roman-numerals/README.md +1 -1
  218. data/tracks/lua/exercises/run-length-encoding/README.md +4 -4
  219. data/tracks/lua/exercises/scrabble-score/README.md +3 -1
  220. data/tracks/lua/exercises/secret-handshake/README.md +1 -1
  221. data/tracks/lua/exercises/space-age/README.md +2 -1
  222. data/tracks/lua/exercises/sum-of-multiples/README.md +0 -3
  223. data/tracks/lua/exercises/tournament/README.md +5 -5
  224. data/tracks/lua/exercises/transpose/README.md +7 -7
  225. data/tracks/lua/exercises/triangle/README.md +9 -6
  226. data/tracks/lua/exercises/variable-length-quantity/README.md +6 -7
  227. data/tracks/lua/exercises/word-count/README.md +1 -2
  228. data/tracks/lua/exercises/word-search/README.md +1 -1
  229. data/tracks/perl6/exercises/leap/Example.pm6 +1 -1
  230. data/tracks/perl6/exercises/leap/Leap.pm6 +1 -1
  231. data/tracks/perl6/exercises/leap/example.yaml +1 -1
  232. data/tracks/perl6/exercises/leap/leap.t +3 -3
  233. data/tracks/php/exercises/transpose/example.php +37 -15
  234. data/tracks/php/exercises/transpose/transpose_test.php +205 -45
  235. data/tracks/purescript/config.json +11 -0
  236. data/tracks/purescript/exercises/collatz-conjecture/README.md +33 -0
  237. data/tracks/purescript/exercises/collatz-conjecture/bower.json +26 -0
  238. data/tracks/purescript/exercises/collatz-conjecture/examples/src/CollatzConjecture.purs +15 -0
  239. data/tracks/purescript/exercises/collatz-conjecture/src/CollatzConjecture.purs +3 -0
  240. data/tracks/purescript/exercises/collatz-conjecture/test/Main.purs +43 -0
  241. data/tracks/python/config.json +10 -2
  242. data/tracks/racket/README.md +38 -33
  243. data/tracks/racket/config.json +10 -0
  244. data/tracks/racket/exercises/collatz-conjecture/README.md +58 -0
  245. data/tracks/racket/exercises/collatz-conjecture/collatz-conjecture-test.rkt +34 -0
  246. data/tracks/racket/exercises/collatz-conjecture/collatz-conjecture.rkt +6 -0
  247. data/tracks/racket/exercises/collatz-conjecture/example.rkt +20 -0
  248. data/tracks/ruby/exercises/allergies/.meta/.version +1 -0
  249. data/tracks/ruby/exercises/allergies/.meta/generator/allergies_case.rb +33 -0
  250. data/tracks/ruby/exercises/allergies/.meta/solutions/allergies.rb +4 -0
  251. data/tracks/ruby/exercises/allergies/allergies_test.rb +42 -9
  252. data/tracks/typescript/config.json +46 -0
  253. data/tracks/typescript/exercises/circular-buffer/README.md +74 -0
  254. data/tracks/typescript/exercises/circular-buffer/circular-buffer.example.ts +51 -0
  255. data/tracks/typescript/exercises/circular-buffer/circular-buffer.test.ts +103 -0
  256. data/tracks/typescript/exercises/circular-buffer/circular-buffer.ts +0 -0
  257. data/tracks/typescript/exercises/circular-buffer/package.json +36 -0
  258. data/tracks/typescript/exercises/circular-buffer/tsconfig.json +22 -0
  259. data/tracks/typescript/exercises/circular-buffer/tslint.json +127 -0
  260. data/tracks/typescript/exercises/circular-buffer/yarn.lock +2305 -0
  261. data/tracks/typescript/exercises/largest-series-product/README.md +51 -0
  262. data/tracks/typescript/exercises/largest-series-product/largest-series-product.example.ts +52 -0
  263. data/tracks/typescript/exercises/largest-series-product/largest-series-product.test.ts +68 -0
  264. data/tracks/typescript/exercises/largest-series-product/largest-series-product.ts +0 -0
  265. data/tracks/typescript/exercises/largest-series-product/package.json +36 -0
  266. data/tracks/typescript/exercises/largest-series-product/tsconfig.json +22 -0
  267. data/tracks/typescript/exercises/largest-series-product/tslint.json +127 -0
  268. data/tracks/typescript/exercises/largest-series-product/yarn.lock +2305 -0
  269. data/tracks/typescript/exercises/robot-simulator/README.md +58 -0
  270. data/tracks/typescript/exercises/robot-simulator/package.json +36 -0
  271. data/tracks/typescript/exercises/robot-simulator/robot-simulator.example.ts +74 -0
  272. data/tracks/typescript/exercises/robot-simulator/robot-simulator.test.ts +150 -0
  273. data/tracks/typescript/exercises/robot-simulator/robot-simulator.ts +0 -0
  274. data/tracks/typescript/exercises/robot-simulator/tsconfig.json +22 -0
  275. data/tracks/typescript/exercises/robot-simulator/tslint.json +127 -0
  276. data/tracks/typescript/exercises/robot-simulator/yarn.lock +2305 -0
  277. metadata +85 -23
@@ -2,43 +2,56 @@ defmodule Minesweeper do
2
2
  @doc """
3
3
  Annotate empty spots next to mines with the number of mines next to them.
4
4
  """
5
- @spec annotate([String.t]) :: [String.t]
5
+ @spec annotate([String.t()]) :: [String.t()]
6
6
  def annotate([]), do: []
7
+
7
8
  def annotate(board) do
8
9
  h = length(board)
9
- w = String.length(hd(board)) # Only 7-bit ASCII in the board, so this is safe
10
+ # Only 7-bit ASCII in the board, so this is safe
11
+ w = String.length(hd(board))
12
+
10
13
  annotations =
11
- Enum.reduce(Stream.with_index(board), %{}, fn { line, y }, acc ->
12
- Enum.reduce(Stream.with_index(String.to_char_list(line)), acc, fn
13
- { ?*, x }, acc -> add_adjacents(acc, { x, y }, { w, h })
14
- _, acc -> acc
14
+ Enum.reduce(Stream.with_index(board), %{}, fn {line, y}, acc ->
15
+ Enum.reduce(Stream.with_index(String.to_charlist(line)), acc, fn
16
+ {?*, x}, acc -> add_adjacents(acc, {x, y}, {w, h})
17
+ _, acc -> acc
15
18
  end)
16
19
  end)
17
- Enum.map(Stream.with_index(board), fn { line, y } ->
18
- Enum.map(Stream.with_index(String.to_char_list(line)), fn
19
- { ?*, _ } -> ?* # Don't replace mines
20
- { _, x } -> case annotations[{x, y}] do
21
- nil -> ?\s
22
- n -> ?0 + n
23
- end
24
- end) |> to_string
20
+
21
+ Enum.map(Stream.with_index(board), fn {line, y} ->
22
+ Enum.map(Stream.with_index(String.to_charlist(line)), fn
23
+ # Don't replace mines
24
+ {?*, _} ->
25
+ ?*
26
+
27
+ {_, x} ->
28
+ case annotations[{x, y}] do
29
+ nil -> ?\s
30
+ n -> ?0 + n
31
+ end
32
+ end)
33
+ |> to_string
25
34
  end)
26
35
  end
27
36
 
28
- @adjacent_vecs for x <- [-1, 0, 1], y <- [-1, 0, 1], x != 0 or y != 0, do: { x, y }
37
+ @adjacent_vecs for x <- [-1, 0, 1],
38
+ y <- [-1, 0, 1],
39
+ x != 0 or y != 0,
40
+ do: {x, y}
29
41
 
30
42
  defp add_adjacents(d, c, bounds) do
31
43
  Enum.reduce(@adjacent_vecs, d, fn v, acc ->
32
44
  c1 = add_vec(c, v)
45
+
33
46
  if valid?(c1, bounds) do
34
- Map.update(acc, c1, 1, &(&1+1))
47
+ Map.update(acc, c1, 1, &(&1 + 1))
35
48
  else
36
49
  acc
37
50
  end
38
51
  end)
39
52
  end
40
53
 
41
- defp add_vec({ cx, cy }, { vx, vy }), do: { cx + vx, cy + vy }
54
+ defp add_vec({cx, cy}, {vx, vy}), do: {cx + vx, cy + vy}
42
55
 
43
- defp valid?({ cx, cy }, { w, h }), do: cx >= 0 and cx < w and cy >= 0 and cy < h
56
+ defp valid?({cx, cy}, {w, h}), do: cx >= 0 and cx < w and cy >= 0 and cy < h
44
57
  end
@@ -12,13 +12,13 @@ defmodule Pangram do
12
12
 
13
13
  """
14
14
 
15
- @spec pangram?(String.t) :: boolean
15
+ @spec pangram?(String.t()) :: boolean
16
16
  def pangram?(sentence) do
17
17
  chars =
18
18
  sentence
19
- |> String.downcase
20
- |> to_char_list
19
+ |> String.downcase()
20
+ |> to_charlist
21
21
 
22
- Enum.all? ?a..?z, &(&1 in chars)
22
+ Enum.all?(?a..?z, &(&1 in chars))
23
23
  end
24
24
  end
@@ -2,15 +2,15 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
2
2
  Code.load_file("queen_attack.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 QueenAttackTest do
9
9
  use ExUnit.Case
10
10
 
11
11
  # @tag :pending
12
12
  test "default positions" do
13
- queens = Queens.new
13
+ queens = Queens.new()
14
14
  assert queens.white == {0, 3}
15
15
  assert queens.black == {7, 3}
16
16
  end
@@ -32,80 +32,95 @@ defmodule QueenAttackTest do
32
32
  @tag :pending
33
33
  test "string representation" do
34
34
  queens = Queens.new({2, 4}, {6, 6})
35
- board = String.strip """
36
- _ _ _ _ _ _ _ _
37
- _ _ _ _ _ _ _ _
38
- _ _ _ _ W _ _ _
39
- _ _ _ _ _ _ _ _
40
- _ _ _ _ _ _ _ _
41
- _ _ _ _ _ _ _ _
42
- _ _ _ _ _ _ B _
43
- _ _ _ _ _ _ _ _
44
- """
35
+
36
+ board =
37
+ String.trim("""
38
+ _ _ _ _ _ _ _ _
39
+ _ _ _ _ _ _ _ _
40
+ _ _ _ _ W _ _ _
41
+ _ _ _ _ _ _ _ _
42
+ _ _ _ _ _ _ _ _
43
+ _ _ _ _ _ _ _ _
44
+ _ _ _ _ _ _ B _
45
+ _ _ _ _ _ _ _ _
46
+ """)
47
+
45
48
  assert Queens.to_string(queens) == board
46
49
  end
47
50
 
48
51
  @tag :pending
49
52
  test "another string representation" do
50
53
  queens = Queens.new({7, 1}, {0, 0})
51
- board = String.strip """
52
- B _ _ _ _ _ _ _
53
- _ _ _ _ _ _ _ _
54
- _ _ _ _ _ _ _ _
55
- _ _ _ _ _ _ _ _
56
- _ _ _ _ _ _ _ _
57
- _ _ _ _ _ _ _ _
58
- _ _ _ _ _ _ _ _
59
- _ W _ _ _ _ _ _
60
- """
54
+
55
+ board =
56
+ String.trim("""
57
+ B _ _ _ _ _ _ _
58
+ _ _ _ _ _ _ _ _
59
+ _ _ _ _ _ _ _ _
60
+ _ _ _ _ _ _ _ _
61
+ _ _ _ _ _ _ _ _
62
+ _ _ _ _ _ _ _ _
63
+ _ _ _ _ _ _ _ _
64
+ _ W _ _ _ _ _ _
65
+ """)
66
+
61
67
  assert Queens.to_string(queens) == board
62
68
  end
63
69
 
64
70
  @tag :pending
65
71
  test "yet another string representation" do
66
72
  queens = Queens.new({4, 3}, {3, 4})
67
- board = String.strip """
68
- _ _ _ _ _ _ _ _
69
- _ _ _ _ _ _ _ _
70
- _ _ _ _ _ _ _ _
71
- _ _ _ _ B _ _ _
72
- _ _ _ W _ _ _ _
73
- _ _ _ _ _ _ _ _
74
- _ _ _ _ _ _ _ _
75
- _ _ _ _ _ _ _ _
76
- """
73
+
74
+ board =
75
+ String.trim("""
76
+ _ _ _ _ _ _ _ _
77
+ _ _ _ _ _ _ _ _
78
+ _ _ _ _ _ _ _ _
79
+ _ _ _ _ B _ _ _
80
+ _ _ _ W _ _ _ _
81
+ _ _ _ _ _ _ _ _
82
+ _ _ _ _ _ _ _ _
83
+ _ _ _ _ _ _ _ _
84
+ """)
85
+
77
86
  assert Queens.to_string(queens) == board
78
87
  end
79
88
 
80
89
  @tag :pending
81
90
  test "queen placed on the bottom right corner" do
82
91
  queens = Queens.new({4, 3}, {7, 7})
83
- board = String.strip """
84
- _ _ _ _ _ _ _ _
85
- _ _ _ _ _ _ _ _
86
- _ _ _ _ _ _ _ _
87
- _ _ _ _ _ _ _ _
88
- _ _ _ W _ _ _ _
89
- _ _ _ _ _ _ _ _
90
- _ _ _ _ _ _ _ _
91
- _ _ _ _ _ _ _ B
92
- """
92
+
93
+ board =
94
+ String.trim("""
95
+ _ _ _ _ _ _ _ _
96
+ _ _ _ _ _ _ _ _
97
+ _ _ _ _ _ _ _ _
98
+ _ _ _ _ _ _ _ _
99
+ _ _ _ W _ _ _ _
100
+ _ _ _ _ _ _ _ _
101
+ _ _ _ _ _ _ _ _
102
+ _ _ _ _ _ _ _ B
103
+ """)
104
+
93
105
  assert Queens.to_string(queens) == board
94
106
  end
95
107
 
96
108
  @tag :pending
97
109
  test "queen placed on the edge of the board" do
98
110
  queens = Queens.new({4, 3}, {2, 7})
99
- board = String.strip """
100
- _ _ _ _ _ _ _ _
101
- _ _ _ _ _ _ _ _
102
- _ _ _ _ _ _ _ B
103
- _ _ _ _ _ _ _ _
104
- _ _ _ W _ _ _ _
105
- _ _ _ _ _ _ _ _
106
- _ _ _ _ _ _ _ _
107
- _ _ _ _ _ _ _ _
108
- """
111
+
112
+ board =
113
+ String.trim("""
114
+ _ _ _ _ _ _ _ _
115
+ _ _ _ _ _ _ _ _
116
+ _ _ _ _ _ _ _ B
117
+ _ _ _ _ _ _ _ _
118
+ _ _ _ W _ _ _ _
119
+ _ _ _ _ _ _ _ _
120
+ _ _ _ _ _ _ _ _
121
+ _ _ _ _ _ _ _ _
122
+ """)
123
+
109
124
  assert Queens.to_string(queens) == board
110
125
  end
111
126
 
@@ -31,50 +31,56 @@ defmodule Say do
31
31
  Translate a positive integer into English.
32
32
  """
33
33
 
34
- @spec in_english(Integer.t) :: {atom, String.t}
34
+ @spec in_english(number) :: {atom, String.t()}
35
35
  def in_english(number) when number < 0 or number >= 1_000_000_000_000 do
36
36
  {:error, "number is out of range"}
37
37
  end
38
+
38
39
  def in_english(0), do: {:ok, "zero"}
40
+
39
41
  def in_english(number) do
40
- result = Integer.digits(number)
41
- |> padded_chunk(3, 0)
42
- |> translate_chunks
43
- |> clean_join(" ")
42
+ result =
43
+ Integer.digits(number)
44
+ |> padded_chunk(3, 0)
45
+ |> translate_chunks
46
+ |> clean_join(" ")
44
47
 
45
48
  {:ok, result}
46
49
  end
47
50
 
48
-
49
- @spec translate_chunks(List.t) :: [String.t]
51
+ @spec translate_chunks(list) :: [String.t()]
50
52
  defp translate_chunks(chunks) do
51
53
  translate_chunks(chunks, Enum.count(chunks))
52
54
  end
53
55
 
54
-
55
- @spec translate_chunks(List.t, Integer.t) :: [String.t]
56
+ @spec translate_chunks(list, number) :: [String.t()]
56
57
  defp translate_chunks([chunk], 1), do: [translate_chunk(chunk)]
58
+
57
59
  defp translate_chunks([[0, 0, 0] | remaining], n) do
58
60
  translate_chunks(remaining, n - 1)
59
61
  end
60
- defp translate_chunks([chunk | remaining], n) do
61
- chunk_in_english = [
62
- translate_chunk(chunk),
63
- Enum.at(@separators, n - 2)
64
- ]
65
- |> clean_join(" ")
66
62
 
67
- [ chunk_in_english | translate_chunks(remaining, n - 1) ]
63
+ defp translate_chunks([chunk | remaining], n) do
64
+ chunk_in_english =
65
+ [
66
+ translate_chunk(chunk),
67
+ Enum.at(@separators, n - 2)
68
+ ]
69
+ |> clean_join(" ")
70
+
71
+ [chunk_in_english | translate_chunks(remaining, n - 1)]
68
72
  end
69
73
 
70
-
71
- @spec translate_chunk([Integer.t]) :: String.t
74
+ @spec translate_chunk([number]) :: String.t()
72
75
  defp translate_chunk([0, 0, 0]), do: ""
73
76
  defp translate_chunk([0, 0, ones]), do: ones_in_english(ones)
77
+
74
78
  defp translate_chunk([0, 1, ones]) do
75
79
  ones_in_english(ones + 10)
76
80
  end
81
+
77
82
  defp translate_chunk([0, tens, 0]), do: tens_in_english(tens)
83
+
78
84
  defp translate_chunk([0, tens, ones]) do
79
85
  [
80
86
  tens_in_english(tens),
@@ -82,9 +88,11 @@ defmodule Say do
82
88
  ]
83
89
  |> clean_join("-")
84
90
  end
91
+
85
92
  defp translate_chunk([hundreds, 0, 0]) do
86
93
  "#{ones_in_english(hundreds)} hundred"
87
94
  end
95
+
88
96
  defp translate_chunk([hundreds, tens, ones]) do
89
97
  [
90
98
  translate_chunk([hundreds, 0, 0]),
@@ -93,31 +101,26 @@ defmodule Say do
93
101
  |> clean_join(" ")
94
102
  end
95
103
 
96
-
97
- @spec ones_in_english(Integer.t) :: String.t
104
+ @spec ones_in_english(number) :: String.t()
98
105
  defp ones_in_english(index), do: Enum.at(@small_numbers, index - 1)
99
106
 
100
-
101
- @spec tens_in_english(Integer.t) :: String.t
107
+ @spec tens_in_english(number) :: String.t()
102
108
  defp tens_in_english(index), do: Enum.at(@decades, index - 2)
103
109
 
104
-
105
- @spec clean_join([any], String.t) :: String.t
110
+ @spec clean_join([any], String.t()) :: String.t()
106
111
  defp clean_join(collection, separator) do
107
112
  collection
108
113
  |> reject_blank
109
114
  |> Enum.join(separator)
110
115
  end
111
116
 
112
-
113
117
  @spec reject_blank([any]) :: [any]
114
118
  defp reject_blank(col) do
115
119
  col
116
120
  |> Enum.reject(&(&1 == nil || &1 == ""))
117
121
  end
118
122
 
119
-
120
- @spec padded_chunk([any], Integer.t, any) :: [any]
123
+ @spec padded_chunk([any], number, any) :: [any]
121
124
  defp padded_chunk(list, chunk_size, pad) do
122
125
  pad_size = pad_size(chunk_size, rem(Enum.count(list), chunk_size))
123
126
 
@@ -125,14 +128,13 @@ defmodule Say do
125
128
  |> Enum.chunk(chunk_size)
126
129
  end
127
130
 
128
-
129
- @spec pad_size(Integer.t, Integer.t) :: Integer.t
131
+ @spec pad_size(number, number) :: number
130
132
  defp pad_size(_, 0), do: 0
131
133
  defp pad_size(total, rem), do: total - rem
132
134
 
133
-
134
- @spec pad([any], any, Integer.t) :: [any]
135
+ @spec pad([any], any, number) :: [any]
135
136
  defp pad(list, _, 0), do: list
137
+
136
138
  defp pad(list, pad, count) do
137
139
  [pad] ++ pad(list, pad, count - 1)
138
140
  end
@@ -3,23 +3,24 @@ defmodule Scrabble do
3
3
  word |> letters |> summarize
4
4
  end
5
5
 
6
- defp letters(word), do: word |> String.strip |> String.downcase |> String.codepoints
6
+ defp letters(word), do: word |> String.trim() |> String.downcase() |> String.codepoints()
7
7
 
8
- defp summarize(letters), do: Enum.reduce(letters, 0, fn(letter, acc) -> acc + letter_score(letter) end)
8
+ defp summarize(letters),
9
+ do: Enum.reduce(letters, 0, fn letter, acc -> acc + letter_score(letter) end)
9
10
 
10
11
  @letter_scores [
11
- { "aeilnorstu", 1 },
12
- { "dg", 2 },
13
- { "bcmp", 3 },
14
- { "fhvwy", 4 },
15
- { "k", 5 },
16
- { "jx", 8 },
17
- { "qz", 10 }
12
+ {"aeilnorstu", 1},
13
+ {"dg", 2},
14
+ {"bcmp", 3},
15
+ {"fhvwy", 4},
16
+ {"k", 5},
17
+ {"jx", 8},
18
+ {"qz", 10}
18
19
  ]
19
20
 
20
21
  defp letter_score(letter) do
21
- Enum.find_value @letter_scores, 0, fn({letters, score}) ->
22
+ Enum.find_value(@letter_scores, 0, fn {letters, score} ->
22
23
  String.contains?(letters, letter) && score
23
- end
24
+ end)
24
25
  end
25
26
  end
@@ -2,12 +2,15 @@ defmodule ExercismTestRunner.Mixfile do
2
2
  use Mix.Project
3
3
 
4
4
  def project do
5
- [app: :tests,
6
- version: "0.0.1",
7
- elixir: "~> 1.3",
8
- deps: deps(),
9
- test_paths: ["exercises"],
10
- consolidate_protocols: false]
5
+ [
6
+ app: :tests,
7
+ version: "0.0.1",
8
+ elixir: "~> 1.3",
9
+ deps: deps(),
10
+ test_paths: ["exercises"],
11
+ consolidate_protocols: false,
12
+ dialyzer: [paths: ["tmp/build"]]
13
+ ]
11
14
  end
12
15
 
13
16
  def application do
@@ -15,6 +18,6 @@ defmodule ExercismTestRunner.Mixfile do
15
18
  end
16
19
 
17
20
  defp deps do
18
- [{:poison, "~> 1.4.0"}]
21
+ [{:poison, "~> 1.4.0"}, {:dialyxir, "~> 0.5"}]
19
22
  end
20
23
  end