trackler 2.2.1.159 → 2.2.1.160

Sign up to get free protection for your applications and to get access to all the features.
Files changed (293) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/bash/config/maintainers.json +16 -15
  4. data/tracks/bash/config.json +111 -103
  5. data/tracks/c/config/maintainers.json +14 -14
  6. data/tracks/c/config.json +263 -242
  7. data/tracks/ceylon/config/maintainers.json +8 -8
  8. data/tracks/ceylon/config.json +30 -32
  9. data/tracks/cfml/config/maintainers.json +6 -4
  10. data/tracks/cfml/config.json +145 -92
  11. data/tracks/common-lisp/config/maintainers.json +26 -26
  12. data/tracks/common-lisp/config.json +152 -149
  13. data/tracks/cpp/config/maintainers.json +11 -11
  14. data/tracks/cpp/config.json +162 -161
  15. data/tracks/dart/config/maintainers.json +21 -17
  16. data/tracks/dart/config.json +57 -57
  17. data/tracks/delphi/config.json +1 -0
  18. data/tracks/delphi/docs/ABOUT.md +9 -6
  19. data/tracks/ecmascript/config/maintainers.json +11 -11
  20. data/tracks/ecmascript/config.json +563 -544
  21. data/tracks/ecmascript/exercises/accumulate/package.json +1 -1
  22. data/tracks/ecmascript/exercises/acronym/package.json +1 -1
  23. data/tracks/ecmascript/exercises/all-your-base/package.json +1 -1
  24. data/tracks/ecmascript/exercises/allergies/package.json +1 -1
  25. data/tracks/ecmascript/exercises/alphametics/package.json +1 -1
  26. data/tracks/ecmascript/exercises/anagram/package.json +1 -1
  27. data/tracks/ecmascript/exercises/armstrong-numbers/package.json +1 -1
  28. data/tracks/ecmascript/exercises/atbash-cipher/package.json +1 -1
  29. data/tracks/ecmascript/exercises/beer-song/package.json +1 -1
  30. data/tracks/ecmascript/exercises/binary/package.json +1 -1
  31. data/tracks/ecmascript/exercises/binary-search/package.json +1 -1
  32. data/tracks/ecmascript/exercises/binary-search-tree/package.json +1 -1
  33. data/tracks/ecmascript/exercises/bob/package.json +1 -1
  34. data/tracks/ecmascript/exercises/bowling/package.json +1 -1
  35. data/tracks/ecmascript/exercises/bracket-push/package.json +1 -1
  36. data/tracks/ecmascript/exercises/change/package.json +1 -1
  37. data/tracks/ecmascript/exercises/circular-buffer/package.json +1 -1
  38. data/tracks/ecmascript/exercises/clock/package.json +1 -1
  39. data/tracks/ecmascript/exercises/collatz-conjecture/package.json +1 -1
  40. data/tracks/ecmascript/exercises/complex-numbers/package.json +1 -1
  41. data/tracks/ecmascript/exercises/connect/package.json +1 -1
  42. data/tracks/ecmascript/exercises/crypto-square/package.json +1 -1
  43. data/tracks/ecmascript/exercises/custom-set/package.json +1 -1
  44. data/tracks/ecmascript/exercises/diamond/package.json +1 -1
  45. data/tracks/ecmascript/exercises/difference-of-squares/package.json +1 -1
  46. data/tracks/ecmascript/exercises/diffie-hellman/package.json +1 -1
  47. data/tracks/ecmascript/exercises/etl/package.json +1 -1
  48. data/tracks/ecmascript/exercises/flatten-array/package.json +1 -1
  49. data/tracks/ecmascript/exercises/food-chain/package.json +1 -1
  50. data/tracks/ecmascript/exercises/gigasecond/package.json +1 -1
  51. data/tracks/ecmascript/exercises/grade-school/package.json +1 -1
  52. data/tracks/ecmascript/exercises/grains/package.json +1 -1
  53. data/tracks/ecmascript/exercises/hamming/package.json +1 -1
  54. data/tracks/ecmascript/exercises/hello-world/package.json +1 -1
  55. data/tracks/ecmascript/exercises/hexadecimal/package.json +1 -1
  56. data/tracks/ecmascript/exercises/house/package.json +1 -1
  57. data/tracks/ecmascript/exercises/isbn-verifier/package.json +1 -1
  58. data/tracks/ecmascript/exercises/isogram/package.json +1 -1
  59. data/tracks/ecmascript/exercises/kindergarten-garden/package.json +1 -1
  60. data/tracks/ecmascript/exercises/largest-series-product/package.json +1 -1
  61. data/tracks/ecmascript/exercises/leap/package.json +1 -1
  62. data/tracks/ecmascript/exercises/linked-list/package.json +1 -1
  63. data/tracks/ecmascript/exercises/list-ops/package.json +1 -1
  64. data/tracks/ecmascript/exercises/luhn/package.json +1 -1
  65. data/tracks/ecmascript/exercises/matrix/package.json +1 -1
  66. data/tracks/ecmascript/exercises/meetup/package.json +1 -1
  67. data/tracks/ecmascript/exercises/minesweeper/package.json +1 -1
  68. data/tracks/ecmascript/exercises/nth-prime/package.json +1 -1
  69. data/tracks/ecmascript/exercises/nucleotide-count/package.json +1 -1
  70. data/tracks/ecmascript/exercises/ocr-numbers/package.json +1 -1
  71. data/tracks/ecmascript/exercises/octal/package.json +1 -1
  72. data/tracks/ecmascript/exercises/palindrome-products/package.json +1 -1
  73. data/tracks/ecmascript/exercises/pangram/package.json +1 -1
  74. data/tracks/ecmascript/exercises/pascals-triangle/package.json +1 -1
  75. data/tracks/ecmascript/exercises/perfect-numbers/package.json +1 -1
  76. data/tracks/ecmascript/exercises/phone-number/package.json +1 -1
  77. data/tracks/ecmascript/exercises/pig-latin/package.json +1 -1
  78. data/tracks/ecmascript/exercises/prime-factors/package.json +1 -1
  79. data/tracks/ecmascript/exercises/protein-translation/package.json +1 -1
  80. data/tracks/ecmascript/exercises/proverb/package.json +1 -1
  81. data/tracks/ecmascript/exercises/pythagorean-triplet/package.json +1 -1
  82. data/tracks/ecmascript/exercises/queen-attack/example.js +2 -2
  83. data/tracks/ecmascript/exercises/queen-attack/package.json +1 -1
  84. data/tracks/ecmascript/exercises/raindrops/package.json +1 -1
  85. data/tracks/ecmascript/exercises/react/package.json +1 -1
  86. data/tracks/ecmascript/exercises/rectangles/package.json +1 -1
  87. data/tracks/ecmascript/exercises/rna-transcription/package.json +1 -1
  88. data/tracks/ecmascript/exercises/robot-name/package.json +1 -1
  89. data/tracks/ecmascript/exercises/robot-simulator/package.json +1 -1
  90. data/tracks/ecmascript/exercises/roman-numerals/package.json +1 -1
  91. data/tracks/ecmascript/exercises/rotational-cipher/package.json +1 -1
  92. data/tracks/ecmascript/exercises/run-length-encoding/package.json +1 -1
  93. data/tracks/ecmascript/exercises/saddle-points/package.json +1 -1
  94. data/tracks/ecmascript/exercises/say/package.json +1 -1
  95. data/tracks/ecmascript/exercises/scrabble-score/package.json +1 -1
  96. data/tracks/ecmascript/exercises/secret-handshake/package.json +1 -1
  97. data/tracks/ecmascript/exercises/series/package.json +1 -1
  98. data/tracks/ecmascript/exercises/sieve/package.json +1 -1
  99. data/tracks/ecmascript/exercises/simple-cipher/package.json +1 -1
  100. data/tracks/ecmascript/exercises/simple-linked-list/package.json +1 -1
  101. data/tracks/ecmascript/exercises/space-age/package.json +1 -1
  102. data/tracks/ecmascript/exercises/spiral-matrix/package.json +1 -1
  103. data/tracks/ecmascript/exercises/strain/package.json +1 -1
  104. data/tracks/ecmascript/exercises/sublist/package.json +1 -1
  105. data/tracks/ecmascript/exercises/sum-of-multiples/package.json +1 -1
  106. data/tracks/ecmascript/exercises/transpose/package.json +1 -1
  107. data/tracks/ecmascript/exercises/triangle/package.json +1 -1
  108. data/tracks/ecmascript/exercises/trinary/package.json +1 -1
  109. data/tracks/ecmascript/exercises/twelve-days/package.json +1 -1
  110. data/tracks/ecmascript/exercises/two-bucket/package.json +1 -1
  111. data/tracks/ecmascript/exercises/two-fer/package.json +1 -1
  112. data/tracks/ecmascript/exercises/word-count/package.json +1 -1
  113. data/tracks/ecmascript/exercises/word-search/package.json +1 -1
  114. data/tracks/ecmascript/exercises/wordy/example.js +16 -4
  115. data/tracks/ecmascript/exercises/wordy/package.json +1 -1
  116. data/tracks/ecmascript/package.json +1 -1
  117. data/tracks/elisp/config/maintainers.json +6 -6
  118. data/tracks/elisp/config.json +103 -103
  119. data/tracks/elisp/exercises/two-fer/two-fer.el +3 -3
  120. data/tracks/elm/config/maintainers.json +11 -11
  121. data/tracks/elm/config.json +171 -171
  122. data/tracks/erlang/README.md +31 -28
  123. data/tracks/erlang/config/maintainers.json +13 -7
  124. data/tracks/erlang/config.json +99 -190
  125. data/tracks/factor/config/maintainers.json +5 -5
  126. data/tracks/factor/config.json +17 -19
  127. data/tracks/fsharp/config/maintainers.json +16 -16
  128. data/tracks/fsharp/config.json +485 -469
  129. data/tracks/gnu-apl/config/maintainers.json +6 -5
  130. data/tracks/gnu-apl/config.json +46 -20
  131. data/tracks/go/config/maintainers.json +43 -32
  132. data/tracks/go/config.json +475 -457
  133. data/tracks/haskell/config/maintainers.json +26 -15
  134. data/tracks/haskell/config.json +22 -2
  135. data/tracks/idris/config/maintainers.json +6 -6
  136. data/tracks/idris/config.json +24 -35
  137. data/tracks/java/config/maintainers.json +39 -29
  138. data/tracks/java/config.json +458 -433
  139. data/tracks/javascript/config/maintainers.json +40 -40
  140. data/tracks/javascript/config.json +577 -551
  141. data/tracks/javascript/docs/LEARNING.md +1 -1
  142. data/tracks/javascript/exercises/pangram/pangram.spec.js +15 -10
  143. data/tracks/julia/REQUIRE +1 -0
  144. data/tracks/julia/config/maintainers.json +5 -5
  145. data/tracks/julia/config.json +106 -108
  146. data/tracks/kotlin/config/maintainers.json +15 -15
  147. data/tracks/kotlin/config.json +273 -257
  148. data/tracks/kotlin/exercises/accumulate/build.gradle +1 -1
  149. data/tracks/kotlin/exercises/acronym/build.gradle +1 -1
  150. data/tracks/kotlin/exercises/all-your-base/build.gradle +1 -1
  151. data/tracks/kotlin/exercises/allergies/.meta/version +1 -1
  152. data/tracks/kotlin/exercises/allergies/build.gradle +1 -1
  153. data/tracks/kotlin/exercises/anagram/build.gradle +1 -1
  154. data/tracks/kotlin/exercises/atbash-cipher/build.gradle +1 -1
  155. data/tracks/kotlin/exercises/bank-account/build.gradle +17 -17
  156. data/tracks/kotlin/exercises/beer-song/.meta/version +1 -1
  157. data/tracks/kotlin/exercises/beer-song/build.gradle +1 -1
  158. data/tracks/kotlin/exercises/binary/build.gradle +1 -1
  159. data/tracks/kotlin/exercises/binary-search/build.gradle +1 -2
  160. data/tracks/kotlin/exercises/bob/build.gradle +1 -1
  161. data/tracks/kotlin/exercises/bracket-push/build.gradle +1 -1
  162. data/tracks/kotlin/exercises/change/.meta/version +1 -1
  163. data/tracks/kotlin/exercises/change/build.gradle +1 -2
  164. data/tracks/kotlin/exercises/clock/build.gradle +1 -1
  165. data/tracks/kotlin/exercises/collatz-conjecture/build.gradle +1 -1
  166. data/tracks/kotlin/exercises/complex-numbers/build.gradle +1 -1
  167. data/tracks/kotlin/exercises/diamond/build.gradle +1 -1
  168. data/tracks/kotlin/exercises/difference-of-squares/build.gradle +1 -1
  169. data/tracks/kotlin/exercises/etl/build.gradle +1 -1
  170. data/tracks/kotlin/exercises/flatten-array/build.gradle +1 -1
  171. data/tracks/kotlin/exercises/forth/build.gradle +1 -1
  172. data/tracks/kotlin/exercises/gigasecond/build.gradle +1 -1
  173. data/tracks/kotlin/exercises/grade-school/build.gradle +1 -1
  174. data/tracks/kotlin/exercises/grains/build.gradle +1 -1
  175. data/tracks/kotlin/exercises/hamming/build.gradle +1 -1
  176. data/tracks/kotlin/exercises/hello-world/build.gradle +1 -1
  177. data/tracks/kotlin/exercises/hexadecimal/build.gradle +1 -1
  178. data/tracks/kotlin/exercises/isogram/build.gradle +1 -1
  179. data/tracks/kotlin/exercises/largest-series-product/build.gradle +1 -1
  180. data/tracks/kotlin/exercises/leap/.meta/version +1 -1
  181. data/tracks/kotlin/exercises/leap/build.gradle +1 -1
  182. data/tracks/kotlin/exercises/linked-list/build.gradle +1 -1
  183. data/tracks/kotlin/exercises/list-ops/build.gradle +1 -1
  184. data/tracks/kotlin/exercises/luhn/build.gradle +1 -1
  185. data/tracks/kotlin/exercises/meetup/.meta/version +1 -1
  186. data/tracks/kotlin/exercises/meetup/build.gradle +1 -1
  187. data/tracks/kotlin/exercises/minesweeper/build.gradle +1 -1
  188. data/tracks/kotlin/exercises/nth-prime/build.gradle +1 -1
  189. data/tracks/kotlin/exercises/nucleotide-count/build.gradle +1 -1
  190. data/tracks/kotlin/exercises/pangram/build.gradle +1 -1
  191. data/tracks/kotlin/exercises/pascals-triangle/.meta/version +1 -1
  192. data/tracks/kotlin/exercises/pascals-triangle/build.gradle +1 -1
  193. data/tracks/kotlin/exercises/perfect-numbers/build.gradle +1 -1
  194. data/tracks/kotlin/exercises/phone-number/build.gradle +1 -1
  195. data/tracks/kotlin/exercises/pig-latin/build.gradle +1 -1
  196. data/tracks/kotlin/exercises/prime-factors/build.gradle +1 -1
  197. data/tracks/kotlin/exercises/raindrops/build.gradle +1 -1
  198. data/tracks/kotlin/exercises/react/build.gradle +1 -1
  199. data/tracks/kotlin/exercises/rna-transcription/build.gradle +1 -1
  200. data/tracks/kotlin/exercises/robot-name/build.gradle +1 -1
  201. data/tracks/kotlin/exercises/robot-simulator/build.gradle +1 -1
  202. data/tracks/kotlin/exercises/roman-numerals/build.gradle +1 -1
  203. data/tracks/kotlin/exercises/rotational-cipher/.meta/version +1 -1
  204. data/tracks/kotlin/exercises/rotational-cipher/build.gradle +1 -1
  205. data/tracks/kotlin/exercises/saddle-points/build.gradle +1 -1
  206. data/tracks/kotlin/exercises/say/.meta/version +1 -1
  207. data/tracks/kotlin/exercises/say/build.gradle +1 -1
  208. data/tracks/kotlin/exercises/scrabble-score/build.gradle +1 -1
  209. data/tracks/kotlin/exercises/secret-handshake/build.gradle +1 -1
  210. data/tracks/kotlin/exercises/series/build.gradle +1 -1
  211. data/tracks/kotlin/exercises/sieve/build.gradle +1 -1
  212. data/tracks/kotlin/exercises/simple-cipher/build.gradle +1 -1
  213. data/tracks/kotlin/exercises/space-age/build.gradle +1 -1
  214. data/tracks/kotlin/exercises/spiral-matrix/build.gradle +1 -1
  215. data/tracks/kotlin/exercises/strain/build.gradle +1 -1
  216. data/tracks/kotlin/exercises/sublist/.meta/version +1 -1
  217. data/tracks/kotlin/exercises/sublist/build.gradle +1 -1
  218. data/tracks/kotlin/exercises/sum-of-multiples/build.gradle +15 -16
  219. data/tracks/kotlin/exercises/triangle/build.gradle +15 -16
  220. data/tracks/kotlin/exercises/two-fer/build.gradle +1 -1
  221. data/tracks/kotlin/exercises/word-count/build.gradle +1 -1
  222. data/tracks/lfe/config/maintainers.json +6 -6
  223. data/tracks/lfe/config.json +128 -125
  224. data/tracks/lfe/docs/LEARNING.md +1 -1
  225. data/tracks/lua/config/maintainers.json +16 -16
  226. data/tracks/lua/config.json +331 -327
  227. data/tracks/mips/config/maintainers.json +5 -5
  228. data/tracks/mips/config.json +29 -59
  229. data/tracks/nim/config/maintainers.json +8 -8
  230. data/tracks/nim/config.json +185 -127
  231. data/tracks/nim/exercises/allergies/allergies_test.nim +7 -7
  232. data/tracks/nim/exercises/allergies/example.nim +2 -2
  233. data/tracks/nim/exercises/difference-of-squares/difference_of_squares_test.nim +4 -4
  234. data/tracks/nim/exercises/difference-of-squares/example.nim +3 -3
  235. data/tracks/nim/exercises/gigasecond/example.nim +1 -1
  236. data/tracks/nim/exercises/gigasecond/gigasecond_test.nim +5 -5
  237. data/tracks/nim/exercises/nucleotide-count/example.nim +1 -1
  238. data/tracks/nim/exercises/nucleotide-count/nucleotide_count_test.nim +6 -6
  239. data/tracks/nim/exercises/pangram/example.nim +1 -1
  240. data/tracks/nim/exercises/pangram/pangram_test.nim +11 -11
  241. data/tracks/nim/exercises/triangle/example.nim +4 -4
  242. data/tracks/nim/exercises/triangle/triangle_test.nim +14 -14
  243. data/tracks/nim/exercises/word-count/HINT.md +8 -0
  244. data/tracks/nim/exercises/word-count/example.nim +8 -15
  245. data/tracks/nim/exercises/word-count/word_count_test.nim +63 -55
  246. data/tracks/perl6/Dockerfile +1 -1
  247. data/tracks/perl6/config/maintainers.json +8 -8
  248. data/tracks/perl6/config.json +72 -127
  249. data/tracks/powershell/.gitignore +2 -1
  250. data/tracks/powershell/config/maintainers.json +8 -8
  251. data/tracks/powershell/config.json +54 -37
  252. data/tracks/powershell/exercises/reverse-string/.version +1 -0
  253. data/tracks/powershell/exercises/reverse-string/README.md +13 -0
  254. data/tracks/powershell/exercises/reverse-string/ReverseString.example.ps1 +21 -0
  255. data/tracks/powershell/exercises/reverse-string/ReverseString.ps1 +9 -0
  256. data/tracks/powershell/exercises/reverse-string/ReverseString.tests.ps1 +21 -0
  257. data/tracks/powershell/exercises/sum-of-multiples/.version +1 -0
  258. data/tracks/powershell/exercises/sum-of-multiples/README.md +15 -0
  259. data/tracks/powershell/exercises/sum-of-multiples/SumOfMultiples.example.ps1 +20 -0
  260. data/tracks/powershell/exercises/sum-of-multiples/SumOfMultiples.ps1 +9 -0
  261. data/tracks/powershell/exercises/sum-of-multiples/SumOfMultiples.tests.ps1 +29 -0
  262. data/tracks/python/config/maintainers.json +17 -17
  263. data/tracks/python/config.json +331 -283
  264. data/tracks/python/exercises/diffie-hellman/diffie_hellman_test.py +16 -47
  265. data/tracks/r/config/maintainers.json +16 -16
  266. data/tracks/r/config.json +128 -117
  267. data/tracks/racket/config/maintainers.json +16 -16
  268. data/tracks/racket/config.json +106 -102
  269. data/tracks/reasonml/config/maintainers.json +1 -1
  270. data/tracks/reasonml/config.json +37 -23
  271. data/tracks/reasonml/exercises/bob/README.md +29 -0
  272. data/tracks/reasonml/exercises/bob/__tests__/Bob_test.re +103 -0
  273. data/tracks/reasonml/exercises/bob/bsconfig.json +30 -0
  274. data/tracks/reasonml/exercises/bob/package-lock.json +5855 -0
  275. data/tracks/reasonml/exercises/bob/package.json +20 -0
  276. data/tracks/reasonml/exercises/bob/src/Example.re +41 -0
  277. data/tracks/reasonml/exercises/hello-world/src/{HelloWorld.re → Example.re} +0 -0
  278. data/tracks/reasonml/exercises/leap/src/{Leap.re → Example.re} +0 -0
  279. data/tracks/reasonml/exercises/rna-transcription/__tests__/RnaTranscription_test.re +24 -0
  280. data/tracks/reasonml/exercises/rna-transcription/bsconfig.json +30 -0
  281. data/tracks/reasonml/exercises/rna-transcription/package.json +20 -0
  282. data/tracks/reasonml/exercises/rna-transcription/src/Example.re +14 -0
  283. data/tracks/reasonml/exercises/space-age/src/{Space_age.re → Example.re} +0 -0
  284. data/tracks/scala/config/maintainers.json +22 -10
  285. data/tracks/scala/config.json +362 -350
  286. data/tracks/scala/docs/ABOUT.md +7 -2
  287. data/tracks/scheme/config/maintainers.json +11 -11
  288. data/tracks/scheme/config.json +72 -72
  289. data/tracks/typescript/config/maintainers.json +15 -15
  290. data/tracks/typescript/config.json +382 -362
  291. data/tracks/vimscript/config/maintainers.json +11 -11
  292. data/tracks/vimscript/config.json +41 -89
  293. metadata +27 -5
@@ -5,19 +5,19 @@ import allergies
5
5
 
6
6
  test "no allergies means not allergic":
7
7
  let allergies = Allergies(score: 0)
8
- check allergies.is_allergic_to("peanuts") == false
9
- check allergies.is_allergic_to("cats") == false
10
- check allergies.is_allergic_to("strawberries") == false
8
+ check allergies.isAllergicTo("peanuts") == false
9
+ check allergies.isAllergicTo("cats") == false
10
+ check allergies.isAllergicTo("strawberries") == false
11
11
 
12
12
  test "is allergic to eggs":
13
13
  let allergies = Allergies(score: 1)
14
- check allergies.is_allergic_to("eggs") == true
14
+ check allergies.isAllergicTo("eggs") == true
15
15
 
16
16
  test "allergic to eggs in addition to other stuff":
17
17
  let allergies = Allergies(score: 5)
18
- check allergies.is_allergic_to("eggs") == true
19
- check allergies.is_allergic_to("shellfish") == true
20
- check allergies.is_allergic_to("strawberries") == false
18
+ check allergies.isAllergicTo("eggs") == true
19
+ check allergies.isAllergicTo("shellfish") == true
20
+ check allergies.isAllergicTo("strawberries") == false
21
21
 
22
22
  test "no allergies at all":
23
23
  let allergies = Allergies(score: 0)
@@ -17,8 +17,8 @@ var
17
17
  ]
18
18
 
19
19
 
20
- proc is_allergic_to*(allergies: Allergies, allergy: string): bool =
20
+ proc isAllergicTo*(allergies: Allergies, allergy: string): bool =
21
21
  (allergies.score and 1 shl allergiesList.find(allergy)) != 0
22
22
 
23
23
  proc lst*(allergies: Allergies): seq[string] =
24
- allergiesList.filterIt(allergies.is_allergic_to(it))
24
+ allergiesList.filterIt(allergies.isAllergicTo(it))
@@ -2,19 +2,19 @@ import unittest
2
2
  import difference_of_squares
3
3
 
4
4
  test "square of sum, 5":
5
- check square_of_sum(5) == 225
5
+ check squareOfSum(5) == 225
6
6
 
7
7
  test "sum of squares, 5":
8
- check sum_of_squares(5) == 55
8
+ check sumOfSquares(5) == 55
9
9
 
10
10
  test "difference, 5":
11
11
  check difference(5) == 170
12
12
 
13
13
  test "square of sum, 100":
14
- check square_of_sum(100) == 25502500
14
+ check squareOfSum(100) == 25502500
15
15
 
16
16
  test "sum of squares, 100":
17
- check sum_of_squares(100) == 338350
17
+ check sumOfSquares(100) == 338350
18
18
 
19
19
  test "difference, 100":
20
20
  check difference(100) == 25164150
@@ -4,11 +4,11 @@ proc `**`(base, exponent: int): int =
4
4
  power *= base
5
5
  power
6
6
 
7
- proc square_of_sum*(n: int): int =
7
+ proc squareOfSum*(n: int): int =
8
8
  (n * (n + 1) div 2) ** 2
9
9
 
10
- proc sum_of_squares*(n: int): int =
10
+ proc sumOfSquares*(n: int): int =
11
11
  (n * (n + 1) * ((2 * n) + 1)) div 6
12
12
 
13
13
  proc difference*(n: int): int =
14
- abs(sum_of_squares(n) - square_of_sum(n))
14
+ abs(sumOfSquares(n) - squareOfSum(n))
@@ -1,4 +1,4 @@
1
1
  import times
2
2
 
3
- proc add_gigasecond*(date: DateTime): DateTime =
3
+ proc addGigasecond*(date: DateTime): DateTime =
4
4
  date + initInterval(seconds=1_000_000_000)
@@ -7,26 +7,26 @@ suite "Gigasecond":
7
7
  test "date only specification of time":
8
8
  let birthday = initDateTime(25, mApr, 2011, 0, 0, 0, utc())
9
9
  let expected = initDateTime(1, mJan, 2043, 1, 46, 40, utc())
10
- check add_gigasecond(birthday) == expected
10
+ check addGigasecond(birthday) == expected
11
11
 
12
12
  test "second test for date only specification of time":
13
13
  let birthday = initDateTime(13, mJun, 1977, 0, 0, 0, utc())
14
14
  let expected = initDateTime(19, mFeb, 2009, 1, 46, 40, utc())
15
- check add_gigasecond(birthday) == expected
15
+ check addGigasecond(birthday) == expected
16
16
 
17
17
  test "third test for date only specification of time":
18
18
  let birthday = initDateTime(19, mJul, 1959, 0, 0, 0, utc())
19
19
  let expected = initDateTime(27, mMar, 1991, 1, 46, 40, utc())
20
- check add_gigasecond(birthday) == expected
20
+ check addGigasecond(birthday) == expected
21
21
 
22
22
  test "full time specified":
23
23
  let birthday = initDateTime(24, mJan, 2015, 22, 0, 0, utc())
24
24
  let expected = initDateTime(2, mOct, 2046, 23, 46, 40, utc())
25
- check add_gigasecond(birthday) == expected
25
+ check addGigasecond(birthday) == expected
26
26
 
27
27
  test "full time with day roll-over":
28
28
  let birthday = initDateTime(24, mJan, 2015, 23, 59, 59, utc())
29
29
  let expected = initDateTime(3, mOct, 2046, 1, 46, 39, utc())
30
- check add_gigasecond(birthday) == expected
30
+ check addGigasecond(birthday) == expected
31
31
 
32
32
 
@@ -11,7 +11,7 @@ proc count*(nt: char, dna: string): int =
11
11
 
12
12
  nt_count
13
13
 
14
- proc count_dna*(dna: string): CountTable[char] =
14
+ proc countDna*(dna: string): CountTable[char] =
15
15
  var counts = initCountTable[char]()
16
16
 
17
17
  for nt in toSeq(dna.items):
@@ -11,15 +11,15 @@ test "count repetitive cytosine":
11
11
  test "count only thymine":
12
12
  check count('T', "GGGGGTAACCCGG") == 1
13
13
 
14
- test "count_dna empty":
15
- check len(count_dna("")) == 0
14
+ test "countDna empty":
15
+ check len(countDna("")) == 0
16
16
 
17
- test "count_dna only guanine":
18
- let counts = count_dna("GGGGGGGG")
17
+ test "countDna only guanine":
18
+ let counts = countDna("GGGGGGGG")
19
19
  check counts['G'] == 8
20
20
 
21
- test "count_dna counts all":
22
- let counts = count_dna("AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC")
21
+ test "countDna counts all":
22
+ let counts = countDna("AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC")
23
23
  check counts['A'] == 20
24
24
  check counts['C'] == 12
25
25
  check counts['T'] == 21
@@ -3,7 +3,7 @@ import strutils
3
3
  const
4
4
  ascii_lowercase = {'a'..'z'}
5
5
 
6
- proc is_pangram*(sentence:string): bool =
6
+ proc isPangram*(sentence:string): bool =
7
7
  for c in ascii_lowercase:
8
8
  if c notin sentence.toLowerAscii: return false
9
9
  return true
@@ -1,35 +1,35 @@
1
1
  import unittest
2
2
 
3
- from pangram import is_pangram
3
+ from pangram import isPangram
4
4
 
5
5
 
6
6
  test "sentence empty":
7
- check is_pangram("") == false
7
+ check isPangram("") == false
8
8
 
9
9
  test "recognizes a perfect lower case pangram":
10
- check is_pangram("abcdefghijklmnopqrstuvwxyz") == true
10
+ check isPangram("abcdefghijklmnopqrstuvwxyz") == true
11
11
 
12
12
  test "test pangram with only lower case":
13
- check is_pangram("the quick brown fox jumps over the lazy dog") == true
13
+ check isPangram("the quick brown fox jumps over the lazy dog") == true
14
14
 
15
15
  test "missing character x":
16
- check is_pangram("a quick movement of the enemy will jeopardize five gunboats") == false
16
+ check isPangram("a quick movement of the enemy will jeopardize five gunboats") == false
17
17
 
18
18
  test "another missing character":
19
- check is_pangram("five boxing wizards jump quickly at it") == false
19
+ check isPangram("five boxing wizards jump quickly at it") == false
20
20
 
21
21
  test "pangram with underscores":
22
- check is_pangram("the_quick_brown_fox_jumps_over_the_lazy_dog") == true
22
+ check isPangram("the_quick_brown_fox_jumps_over_the_lazy_dog") == true
23
23
 
24
24
  test "pangram with numbers":
25
- check is_pangram("the 1 quick brown fox jumps over the 2 lazy dogs") == true
25
+ check isPangram("the 1 quick brown fox jumps over the 2 lazy dogs") == true
26
26
 
27
27
  test "missing letters replaced by numbers":
28
- check is_pangram("7h3 qu1ck brown fox jumps ov3r 7h3 lazy dog") == false
28
+ check isPangram("7h3 qu1ck brown fox jumps ov3r 7h3 lazy dog") == false
29
29
 
30
30
  test "pangram with mixedcase and punctuation":
31
- check is_pangram("Five quacking Zephyrs jolt my wax bed.") == true
31
+ check isPangram("Five quacking Zephyrs jolt my wax bed.") == true
32
32
 
33
33
  test "upper and lower case versions of the same character":
34
- check is_pangram("the quick brown fox jumped over the lazy FX") == false
34
+ check isPangram("the quick brown fox jumped over the lazy FX") == false
35
35
 
@@ -6,20 +6,20 @@ proc valid(a, b, c: int): bool =
6
6
 
7
7
  greatThenZero and equalityCheck
8
8
 
9
- proc is_equilateral*(sides: array[3, int]): bool =
9
+ proc isEquilateral*(sides: array[3, int]): bool =
10
10
  let a = sides[0]
11
11
  let b = sides[1]
12
12
  let c = sides[2]
13
13
  valid(a, b, c) and all(sides, proc (x: int): bool = return a == x)
14
14
 
15
- proc is_isosceles*(sides: array[3, int]): bool =
15
+ proc isIsosceles*(sides: array[3, int]): bool =
16
16
  let a = sides[0]
17
17
  let b = sides[1]
18
18
  let c = sides[2]
19
19
  valid(a, b, c) and (a == b or b == c or a == c)
20
20
 
21
- proc is_scalene*(sides: array[3, int]): bool =
21
+ proc isScalene*(sides: array[3, int]): bool =
22
22
  let a = sides[0]
23
23
  let b = sides[1]
24
24
  let c = sides[2]
25
- valid(a, b, c) and not is_isosceles(sides)
25
+ valid(a, b, c) and not isIsosceles(sides)
@@ -5,49 +5,49 @@ import triangle
5
5
  suite "returns true if the triangle is equilateral":
6
6
 
7
7
  test "true if all sides are equal":
8
- check is_equilateral([2, 2, 2]) == true
8
+ check isEquilateral([2, 2, 2]) == true
9
9
 
10
10
  test "false if any side is unequal":
11
- check is_equilateral([2, 3, 2]) == false
11
+ check isEquilateral([2, 3, 2]) == false
12
12
 
13
13
  test "false if no sides are equal":
14
- check is_equilateral([5, 4, 6]) == false
14
+ check isEquilateral([5, 4, 6]) == false
15
15
 
16
16
  test "false if all sides are zero":
17
- check is_equilateral([0, 0, 0]) == false
17
+ check isEquilateral([0, 0, 0]) == false
18
18
 
19
19
 
20
20
  suite "returns true if the triangle is isosceles":
21
21
 
22
22
  test "true if last two sides are equal":
23
- check is_isosceles([3, 4, 4]) == true
23
+ check isIsosceles([3, 4, 4]) == true
24
24
 
25
25
  test "true if first two sides are equal":
26
- check is_isosceles([4, 4, 3]) == true
26
+ check isIsosceles([4, 4, 3]) == true
27
27
 
28
28
  test "true if first and last sides are equal":
29
- check is_isosceles([4, 3, 4]) == true
29
+ check isIsosceles([4, 3, 4]) == true
30
30
 
31
31
  test "is equilateral triangles are also is isosceles":
32
- check is_isosceles([4, 4, 4]) == true
32
+ check isIsosceles([4, 4, 4]) == true
33
33
 
34
34
  test "false if no sides are equal":
35
- check is_isosceles([2, 3, 4]) == false
35
+ check isIsosceles([2, 3, 4]) == false
36
36
 
37
37
  test "violation of triangle inequality not is isosceles":
38
- check is_isosceles([1, 1, 3]) == false
38
+ check isIsosceles([1, 1, 3]) == false
39
39
 
40
40
 
41
41
  suite "returns true if the triangle is scalene":
42
42
 
43
43
  test "true if no sides are equal":
44
- check is_scalene([5, 4, 6]) == true
44
+ check isScalene([5, 4, 6]) == true
45
45
 
46
46
  test "false if all sides are equal":
47
- check is_scalene([4, 4, 4]) == false
47
+ check isScalene([4, 4, 4]) == false
48
48
 
49
49
  test "false if two sides are equal":
50
- check is_scalene([4, 4, 3]) == false
50
+ check isScalene([4, 4, 3]) == false
51
51
 
52
52
  test "violation of triangle inequality not is scalene":
53
- check is_scalene([7, 3, 2]) == false
53
+ check isScalene([7, 3, 2]) == false
@@ -0,0 +1,8 @@
1
+ The return from `countWords` is a `TableRef[string, int]`, which is a hash table (or dictionary in other programming languages) with a key of `string` and a value of `int`. Look at Nim's documentation on `tables` at https://nim-lang.org/docs/tables.html
2
+
3
+ For the procedure signature, the return will be of type `TableRef[string, int]`
4
+
5
+ ```nim
6
+ proc countWords*(sentence: string): TableRef[string, int] =
7
+ ...
8
+ ```
@@ -1,19 +1,12 @@
1
1
  import
2
- critbits, strutils
2
+ tables, strutils, re
3
3
 
4
- type TWordCount* = CritBitTree[int]
5
- ## A mapping from strings (`words`) to ints (`counts`).
6
-
7
- iterator words(s: string): string =
8
- for word in s.split(AllChars - Letters - Digits - {'\0'}):
4
+ iterator words(sentence: string): string =
5
+ for word in sentence.findAll(re"[a-zA-Z0-9]+(['][a-z]+)?"):
9
6
  yield toLowerAscii(word)
10
7
 
11
- proc wordCount*(s: string): TWordCount {.noSideEffect.} =
12
- ## Returns a mapping from the words (alphanumeric sequences) in `s` to their
13
- ## respective counts.
14
- for word in words(s):
15
- if word.len == 0:
16
- continue
17
- if not result.hasKey(word):
18
- result[word] = 0
19
- result[word] = result[word] + 1
8
+ proc countWords*(sentence: string): TableRef[string, int] =
9
+ result = newTable[string, int]()
10
+ for word in words(sentence):
11
+ let count = result.getOrDefault(word)
12
+ result[word] = count + 1
@@ -1,66 +1,74 @@
1
1
  import
2
- critbits, unittest
3
- import wordcount
2
+ unittest, tables
4
3
 
5
- proc `==`(a, b: TWordCount): bool =
6
- if a.len != b.len:
7
- return
8
- for key, count in a:
9
- if b[key] != count:
10
- return
11
- return true
4
+ import word_count
12
5
 
13
- proc fromPairs(pairs: seq[tuple[word: string, count: int]]): TWordCount =
14
- for p in pairs:
15
- result[p.word] = p.count
6
+ # For each word in the input, count the number of times it appears in the entire sentence.
7
+ suite "Word Count":
16
8
 
17
- test "count one word":
18
- let
19
- expected = fromPairs(@[("word", 1)])
20
- result = wordCount("word")
21
- check result == expected
9
+ test "count one word":
10
+ let
11
+ expected: TableRef[string, int] = {"word": 1}.newTable
12
+ result: TableRef[string, int] = countWords("word")
13
+ check result == expected
22
14
 
23
- test "count one of each":
24
- let
25
- expected = fromPairs(@[("one", 1), ("of", 1), ("each", 1)])
26
- result = wordCount("one of each")
27
- check result == expected
15
+ test "count one of each":
16
+ let
17
+ expected = {"one": 1, "of": 1, "each": 1}.newTable
18
+ result = countWords("one of each")
19
+ check result == expected
28
20
 
29
- test "count multiple occurrences":
30
- let
31
- expected = fromPairs(@[("one", 1), ("fish", 4), ("two", 1),
32
- ("red", 1), ("blue", 1)])
33
- result = wordCount("one fish two fish red fish blue fish")
34
- check result == expected
21
+ test "multiple occurrences of a word":
22
+ let
23
+ expected = {"one": 1, "fish": 4, "two": 1, "red": 1, "blue": 1}.newTable
24
+ result = countWords("one fish two fish red fish blue fish")
25
+ check result == expected
35
26
 
36
- test "ignore punctuation":
37
- let
38
- expected = fromPairs(@[("car", 1), ("carpet", 1), ("as", 1),
39
- ("java", 1), ("javascript", 1)])
40
- result = wordCount("car : carpet as java : javascript!!&@$%^&")
41
- check result == expected
27
+ test "handles cramped lists":
28
+ let
29
+ expected = {"one": 1, "two": 1, "three": 1 }.newTable
30
+ result = countWords("one,two,three")
31
+ check result == expected
42
32
 
43
- test "include numbers":
44
- let
45
- expected = fromPairs(@[("testing", 2), ("1", 1), ("2", 1)])
46
- result = wordCount("testing, 1, 2 testing")
47
- check result == expected
33
+ test "handles expanded lists":
34
+ let
35
+ expected = {"one": 1, "two": 1, "three": 1 }.newTable
36
+ result = countWords("one,\ntwo,\nthree")
37
+ check result == expected
48
38
 
49
- test "normalize case":
50
- let
51
- result = wordCount("go Go GO")
52
- expected = fromPairs(@[("go", 3)])
53
- check result == expected
39
+ test "ignore punctuation":
40
+ let
41
+ expected = {"car": 1, "carpet": 1, "as": 1, "java": 1, "javascript": 1}.newTable
42
+ result = countWords("car: carpet as java: javascript!!&@$%^&")
43
+ check result == expected
44
+
45
+ test "include numbers":
46
+ let
47
+ expected = {"testing": 2, "1": 1, "2": 1}.newTable
48
+ result = countWords("testing, 1, 2 testing")
49
+ check result == expected
50
+
51
+ test "normalize case":
52
+ let
53
+ expected = {"go": 3, "stop": 2}.newTable
54
+ result = countWords("go Go GO Stop stop")
55
+ check result == expected
54
56
 
55
- test "prefix punctuation":
56
- let
57
- expected = fromPairs(@[("testing", 2), ("1", 1), ("2", 1)])
58
- result = wordCount("!%%#testing, 1, 2 testing")
59
- check result == expected
57
+ test "with apostrophes":
58
+ let
59
+ expected = {"first": 1, "don't": 2, "laugh": 1, "then": 1, "cry": 1}.newTable
60
+ result = countWords("First: don't laugh. Then: don't cry.")
61
+ check result == expected
60
62
 
61
- test "symbols are separators":
62
- let
63
- expected = fromPairs(@[("hey", 1), ("my", 1), ("spacebar", 1),
64
- ("is", 1), ("broken", 1)])
65
- result = wordCount("hey,my_spacebar_is_broken.")
66
- check result == expected
63
+ test "with quotations":
64
+ let
65
+ expected = {"joe": 1, "can't": 1, "tell": 1,
66
+ "between": 1, "large": 2, "and": 1}.newTable
67
+ result = countWords("Joe can't tell between 'large' and large.")
68
+ check result == expected
69
+
70
+ test "multiple spaces not detected as a word":
71
+ let
72
+ expected = {"multiple": 1, "whitespaces": 1}.newTable
73
+ result = countWords(" multiple whitespaces")
74
+ check result == expected
@@ -1,4 +1,4 @@
1
1
  FROM rakudo-star:latest
2
2
  RUN apt-get update && \
3
3
  apt-get install -y make gcc libyaml-dev && \
4
- zef install YAML::Parser::LibYAML
4
+ zef install YAML::Parser::LibYAML --force-build
@@ -1,25 +1,25 @@
1
1
  {
2
+ "docs_url": "https://github.com/exercism/docs/blob/master/maintaining-a-track/maintainer-configuration.md",
2
3
  "maintainers": [
3
4
  {
4
5
  "github_username": "kotp",
5
- "show_on_website": false,
6
6
  "alumnus": false,
7
+ "show_on_website": false,
7
8
  "name": null,
8
- "bio": null,
9
9
  "link_text": null,
10
10
  "link_url": null,
11
- "avatar_url": null
11
+ "avatar_url": null,
12
+ "bio": null
12
13
  },
13
14
  {
14
15
  "github_username": "mienaikage",
15
- "show_on_website": true,
16
16
  "alumnus": false,
17
+ "show_on_website": true,
17
18
  "name": null,
18
- "bio": "My first adventure in coding was creating userscripts by trial and error (many errors...). Somewhere down the line I accidentally found myself employed in my first coding role as a Perl developer, after attempting pair programming in Haskell.",
19
19
  "link_text": "dango.space",
20
20
  "link_url": "http://dango.space/",
21
- "avatar_url": null
21
+ "avatar_url": null,
22
+ "bio": "My first adventure in coding was creating userscripts by trial and error (many errors...). Somewhere down the line I accidentally found myself employed in my first coding role as a Perl developer, after attempting pair programming in Haskell."
22
23
  }
23
- ],
24
- "docs_url": "https://github.com/exercism/docs/blob/master/maintaining-a-track/maintainer-configuration.md"
24
+ ]
25
25
  }