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
@@ -3,23 +3,25 @@ import unittest
3
3
  import diffie_hellman
4
4
 
5
5
 
6
+ # Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.0
7
+
6
8
  class DiffieHellmanTest(unittest.TestCase):
7
9
 
8
- def test_private_in_range(self):
10
+ def test_private_key_is_in_range(self):
9
11
  primes = [5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
10
12
  for i in primes:
11
13
  self.assertTrue(1 < diffie_hellman.private_key(i) < i)
12
14
 
13
15
  # Can fail due to randomness, but most likely will not,
14
16
  # due to pseudo-randomness and the large number chosen
15
- def test_private_key_randomness(self):
17
+ def test_private_key_is_random(self):
16
18
  p = 2147483647
17
19
  private_keys = []
18
20
  for i in range(5):
19
21
  private_keys.append(diffie_hellman.private_key(p))
20
- self.assertEqual(len(list(set(private_keys))), len(private_keys))
22
+ self.assertEqual(len(set(private_keys)), len(private_keys))
21
23
 
22
- def test_public_key_correct(self):
24
+ def test_can_calculate_public_key_using_private_key(self):
23
25
  p = 23
24
26
  g = 5
25
27
  private = 6
@@ -28,7 +30,7 @@ class DiffieHellmanTest(unittest.TestCase):
28
30
  actual = diffie_hellman.public_key(p, g, private)
29
31
  self.assertEqual(actual, expected)
30
32
 
31
- def test_secret_key_correct(self):
33
+ def test_can_calculate_secret_using_other_party_s_public_key(self):
32
34
  p = 23
33
35
  public = 19
34
36
  private = 6
@@ -37,50 +39,17 @@ class DiffieHellmanTest(unittest.TestCase):
37
39
  actual = diffie_hellman.secret(p, public, private)
38
40
  self.assertEqual(actual, expected)
39
41
 
40
- def test_secret_key_correct_large_nums(self):
41
- p = int("""120227323036150778550155526710966921740030662\
42
- 69457894729842354923526575959371158734103742634711454153\
43
- 30066288563005527069961435922404533456428692335628867529\
44
- 30249953227657883929905072620233073626594386072962776144\
45
- 69143365881426187411323246174903542571280506720291038940\
46
- 7991986070558964461330091797026762932543""".replace(
47
- "\n", "").replace(" ", ""))
48
- public = int("""7520544115435791944292554616920871123548\
49
- 58559049691782063133092992058683123990461493675163366079\
50
- 66149689640419216591714331722664409474612463910928128055\
51
- 99415792293044373353565984826436410603792531597409532111\
52
- 27577117569121441377056137760635413505489115127155125391\
53
- 86192176020596861210448363099541947258202188""".replace(
54
- "\n", "").replace(" ", ""))
55
- private = int("""248347939362593293991108130435688850515\
56
- 37971354473275017926961991904690152151776307586179022004\
57
- 17377685436170904594686456961202706692908603181062371925\
58
- 882""".replace("\n", "").replace(" ", ""))
59
- expected = int("""70900735223964890815905879227737819348\
60
- 80851869892044649134650898046120174656773533145582564442\
61
- 98779465564310958207858354973848497783442169812282262526\
62
- 39932672153547963980483673419756271345828771971984887453\
63
- 01448857224581986445413661898091472983952358126388674082\
64
- 1363010486083940557620831348661126601106717071""".replace(
65
- "\n", "").replace(" ", ""))
66
-
67
- actual = diffie_hellman.secret(p, public, private)
68
- self.assertEqual(actual, expected)
69
-
70
- def test_exchange(self):
42
+ def test_key_exchange(self):
71
43
  p = 23
72
44
  g = 5
73
-
74
- privateA = diffie_hellman.private_key(p)
75
- privateB = diffie_hellman.private_key(p)
76
-
77
- publicA = diffie_hellman.public_key(p, g, privateA)
78
- publicB = diffie_hellman.public_key(p, g, privateB)
79
-
80
- secretA = diffie_hellman.secret(p, publicB, privateA)
81
- secretB = diffie_hellman.secret(p, publicA, privateB)
82
-
83
- self.assertEqual(secretA, secretB)
45
+ alice_private_key = diffie_hellman.private_key(p)
46
+ bob_private_key = diffie_hellman.private_key(p)
47
+ alice_public_key = diffie_hellman.public_key(p, g, alice_private_key)
48
+ bob_public_key = diffie_hellman.public_key(p, g, bob_private_key)
49
+ secret_a = diffie_hellman.secret(p, bob_public_key, alice_private_key)
50
+ secret_b = diffie_hellman.secret(p, alice_public_key, bob_private_key)
51
+
52
+ self.assertEqual(secret_a, secret_b)
84
53
 
85
54
 
86
55
  if __name__ == '__main__':
@@ -2,34 +2,34 @@
2
2
  "docs_url": "https://github.com/exercism/docs/blob/master/maintaining-a-track/maintainer-configuration.md",
3
3
  "maintainers": [
4
4
  {
5
- "alumnus": false,
6
- "avatar_url": null,
7
- "bio": "I was introduced to R during my statistics undergrad in 2006 and have been trying to learn to use it properly ever since! I love the power, flexibility and expressiveness of the language, and hope I can help others to appreciate it too.",
8
5
  "github_username": "jonmcalder",
6
+ "alumnus": false,
7
+ "show_on_website": true,
8
+ "name": "Jon Calder",
9
9
  "link_text": "My Website",
10
10
  "link_url": "http://joncalder.co.za",
11
- "name": "Jon Calder",
12
- "show_on_website": true
11
+ "avatar_url": null,
12
+ "bio": "I was introduced to R during my statistics undergrad in 2006 and have been trying to learn to use it properly ever since! I love the power, flexibility and expressiveness of the language, and hope I can help others to appreciate it too."
13
13
  },
14
14
  {
15
- "alumnus": false,
16
- "avatar_url": null,
17
- "bio": "I struggled to apply R to my own PhD research data in 2013. A Science Craft grad school course finally got me started when I decided to use another, well-formated data set. Since then, I have found R to be a lifeline for data analysis and teaching myself and others one or the other programming skill :-) R may not be pretty, but it gets the job done.",
18
15
  "github_username": "katrinleinweber",
16
+ "alumnus": false,
17
+ "show_on_website": true,
18
+ "name": null,
19
19
  "link_text": "GitHub",
20
20
  "link_url": "https://github.com/katrinleinweber",
21
- "name": null,
22
- "show_on_website": true
21
+ "avatar_url": null,
22
+ "bio": "I struggled to apply R to my own PhD research data in 2013. A Science Craft grad school course finally got me started when I decided to use another, well-formated data set. Since then, I have found R to be a lifeline for data analysis and teaching myself and others one or the other programming skill :-) R may not be pretty, but it gets the job done."
23
23
  },
24
24
  {
25
- "alumnus": false,
26
- "avatar_url": null,
27
- "bio": null,
28
25
  "github_username": "jonboiser",
26
+ "alumnus": false,
27
+ "show_on_website": false,
28
+ "name": null,
29
29
  "link_text": null,
30
30
  "link_url": null,
31
- "name": null,
32
- "show_on_website": false
31
+ "avatar_url": null,
32
+ "bio": null
33
33
  }
34
34
  ]
35
- }
35
+ }
data/tracks/r/config.json CHANGED
@@ -1,353 +1,364 @@
1
1
  {
2
+ "language": "R",
2
3
  "active": true,
3
4
  "blurb": "R is an interpreted, open source programming language with powerful data manipulation and graphical capabilities. It has a thriving package ecosystem and is one of the most popular languages for data science.",
4
5
  "exercises": [
5
6
  {
7
+ "slug": "hello-world",
8
+ "uuid": "285404a4-d8f8-469d-b183-920b08ba2430",
6
9
  "core": true,
10
+ "unlocked_by": null,
11
+ "auto_approve": true,
7
12
  "difficulty": 1,
8
- "slug": "hello-world",
9
13
  "topics": [
10
14
  "optional_values",
11
15
  "text_formatting"
12
- ],
13
- "uuid": "285404a4-d8f8-469d-b183-920b08ba2430"
16
+ ]
14
17
  },
15
18
  {
19
+ "slug": "leap",
20
+ "uuid": "4be11d9f-db6a-4edd-af35-7d33d2dc9c0f",
16
21
  "core": true,
22
+ "unlocked_by": null,
17
23
  "difficulty": 1,
18
- "slug": "leap",
19
24
  "topics": [
20
25
  "booleans",
21
26
  "integers",
22
27
  "logic"
23
- ],
24
- "uuid": "4be11d9f-db6a-4edd-af35-7d33d2dc9c0f"
28
+ ]
25
29
  },
26
30
  {
31
+ "slug": "hamming",
32
+ "uuid": "dcc7171a-6b7d-4749-a300-a7270a095486",
27
33
  "core": true,
34
+ "unlocked_by": null,
28
35
  "difficulty": 1,
29
- "slug": "hamming",
30
36
  "topics": [
31
37
  "filtering",
32
38
  "strings"
33
- ],
34
- "uuid": "dcc7171a-6b7d-4749-a300-a7270a095486"
39
+ ]
35
40
  },
36
41
  {
42
+ "slug": "rna-transcription",
43
+ "uuid": "12e17ede-ff59-45d1-8c66-b07b7ede5702",
37
44
  "core": false,
45
+ "unlocked_by": "hamming",
38
46
  "difficulty": 1,
39
- "slug": "rna-transcription",
40
47
  "topics": [
41
48
  "strings",
42
49
  "transforming"
43
- ],
44
- "unlocked_by": "hamming",
45
- "uuid": "12e17ede-ff59-45d1-8c66-b07b7ede5702"
50
+ ]
46
51
  },
47
52
  {
53
+ "slug": "difference-of-squares",
54
+ "uuid": "6a562684-5938-4ad9-b042-7b44a8cc4561",
48
55
  "core": false,
56
+ "unlocked_by": null,
49
57
  "difficulty": 1,
50
- "slug": "difference-of-squares",
51
58
  "topics": [
52
59
  "integers",
53
60
  "mathematics"
54
- ],
55
- "unlocked_by": null,
56
- "uuid": "6a562684-5938-4ad9-b042-7b44a8cc4561"
61
+ ]
57
62
  },
58
63
  {
64
+ "slug": "raindrops",
65
+ "uuid": "955604ef-266f-42c9-abde-ce0fdc2d33ad",
59
66
  "core": true,
67
+ "unlocked_by": null,
60
68
  "difficulty": 1,
61
- "slug": "raindrops",
62
69
  "topics": [
63
70
  "filtering",
64
71
  "text_formatting"
65
- ],
66
- "uuid": "955604ef-266f-42c9-abde-ce0fdc2d33ad"
72
+ ]
67
73
  },
68
74
  {
75
+ "slug": "grains",
76
+ "uuid": "fb1b7105-98f5-4f4f-8f5c-c410844cc4d3",
69
77
  "core": false,
78
+ "unlocked_by": null,
70
79
  "difficulty": 1,
71
- "slug": "grains",
72
80
  "topics": [
73
81
  "integers",
74
82
  "mathematics"
75
- ],
76
- "unlocked_by": null,
77
- "uuid": "fb1b7105-98f5-4f4f-8f5c-c410844cc4d3"
83
+ ]
78
84
  },
79
85
  {
86
+ "slug": "bob",
87
+ "uuid": "da01ce65-8c7d-4646-ace4-c067d92f656b",
80
88
  "core": true,
89
+ "unlocked_by": null,
81
90
  "difficulty": 2,
82
- "slug": "bob",
83
91
  "topics": [
84
92
  "control_flow_conditionals",
85
93
  "strings"
86
- ],
87
- "uuid": "da01ce65-8c7d-4646-ace4-c067d92f656b"
94
+ ]
88
95
  },
89
96
  {
97
+ "slug": "anagram",
98
+ "uuid": "105a3de5-3dea-4880-927a-6eed89a97a07",
90
99
  "core": true,
100
+ "unlocked_by": null,
91
101
  "difficulty": 3,
92
- "slug": "anagram",
93
102
  "topics": [
94
103
  "filtering",
95
104
  "strings"
96
- ],
97
- "uuid": "105a3de5-3dea-4880-927a-6eed89a97a07"
105
+ ]
98
106
  },
99
107
  {
108
+ "slug": "space-age",
109
+ "uuid": "b8b3a324-8d62-49d4-ba28-886883e5c549",
100
110
  "core": false,
111
+ "unlocked_by": null,
101
112
  "difficulty": 1,
102
- "slug": "space-age",
103
113
  "topics": [
104
114
  "floating_point_numbers"
105
- ],
106
- "unlocked_by": null,
107
- "uuid": "b8b3a324-8d62-49d4-ba28-886883e5c549"
115
+ ]
108
116
  },
109
117
  {
118
+ "slug": "sum-of-multiples",
119
+ "uuid": "581b968c-f78f-4b60-9eb0-8c73eeeb96af",
110
120
  "core": true,
121
+ "unlocked_by": null,
111
122
  "difficulty": 2,
112
- "slug": "sum-of-multiples",
113
123
  "topics": [
114
124
  "lists",
115
125
  "mathematics"
116
- ],
117
- "uuid": "581b968c-f78f-4b60-9eb0-8c73eeeb96af"
126
+ ]
118
127
  },
119
128
  {
129
+ "slug": "word-count",
130
+ "uuid": "a7cbf043-504b-4fc8-b7fb-33a88ac7962d",
120
131
  "core": true,
132
+ "unlocked_by": null,
121
133
  "difficulty": 2,
122
- "slug": "word-count",
123
134
  "topics": [
124
135
  "strings",
125
136
  "transforming"
126
- ],
127
- "uuid": "a7cbf043-504b-4fc8-b7fb-33a88ac7962d"
137
+ ]
128
138
  },
129
139
  {
140
+ "slug": "phone-number",
141
+ "uuid": "e5166378-e3fc-4393-b4f8-4c36da444c56",
130
142
  "core": true,
143
+ "unlocked_by": null,
131
144
  "difficulty": 2,
132
- "slug": "phone-number",
133
145
  "topics": [
134
146
  "parsing",
135
147
  "transforming"
136
- ],
137
- "uuid": "e5166378-e3fc-4393-b4f8-4c36da444c56"
148
+ ]
138
149
  },
139
150
  {
151
+ "slug": "rotational-cipher",
152
+ "uuid": "8bde91c5-2fe7-4f8d-91ec-ed05284b9a49",
140
153
  "core": true,
154
+ "unlocked_by": null,
141
155
  "difficulty": 3,
142
- "slug": "rotational-cipher",
143
156
  "topics": [
144
157
  "strings"
145
- ],
146
- "uuid": "8bde91c5-2fe7-4f8d-91ec-ed05284b9a49"
158
+ ]
147
159
  },
148
160
  {
161
+ "slug": "scrabble-score",
162
+ "uuid": "c82dfe0c-77c9-4a3b-8110-962a9547ac64",
149
163
  "core": false,
164
+ "unlocked_by": "word-count",
150
165
  "difficulty": 2,
151
- "slug": "scrabble-score",
152
166
  "topics": [
153
167
  "strings",
154
168
  "transforming"
155
- ],
156
- "unlocked_by": "word-count",
157
- "uuid": "c82dfe0c-77c9-4a3b-8110-962a9547ac64"
169
+ ]
158
170
  },
159
171
  {
172
+ "slug": "isogram",
173
+ "uuid": "4ea6d28b-f2bd-4785-ad9f-8eed6a9c67eb",
160
174
  "core": false,
175
+ "unlocked_by": "anagram",
161
176
  "difficulty": 2,
162
- "slug": "isogram",
163
177
  "topics": [
164
178
  "filtering",
165
179
  "strings"
166
- ],
167
- "unlocked_by": "anagram",
168
- "uuid": "4ea6d28b-f2bd-4785-ad9f-8eed6a9c67eb"
180
+ ]
169
181
  },
170
182
  {
183
+ "slug": "beer-song",
184
+ "uuid": "3fd2d6dd-6d4d-4b7f-9f1e-0de11899dcb5",
171
185
  "core": false,
186
+ "unlocked_by": "bob",
172
187
  "difficulty": 3,
173
- "slug": "beer-song",
174
188
  "topics": [
175
189
  "control_flow_conditionals",
176
190
  "text_formatting"
177
- ],
178
- "unlocked_by": "bob",
179
- "uuid": "3fd2d6dd-6d4d-4b7f-9f1e-0de11899dcb5"
191
+ ]
180
192
  },
181
193
  {
194
+ "slug": "perfect-numbers",
195
+ "uuid": "cef7ba44-5b9a-4fc3-b853-9b598e743ba8",
182
196
  "core": false,
197
+ "unlocked_by": "leap",
183
198
  "difficulty": 2,
184
- "slug": "perfect-numbers",
185
199
  "topics": [
186
200
  "control_flow_conditionals",
187
201
  "integers"
188
- ],
189
- "unlocked_by": "leap",
190
- "uuid": "cef7ba44-5b9a-4fc3-b853-9b598e743ba8"
202
+ ]
191
203
  },
192
204
  {
205
+ "slug": "prime-factors",
206
+ "uuid": "ee849e23-d709-4e4a-ab89-07a87e13e4fb",
193
207
  "core": false,
208
+ "unlocked_by": "sum-of-multiples",
194
209
  "difficulty": 3,
195
- "slug": "prime-factors",
196
210
  "topics": [
197
211
  "integers",
198
212
  "mathematics"
199
- ],
200
- "unlocked_by": "sum-of-multiples",
201
- "uuid": "ee849e23-d709-4e4a-ab89-07a87e13e4fb"
213
+ ]
202
214
  },
203
215
  {
216
+ "slug": "sieve",
217
+ "uuid": "dabc8218-8ab8-4918-85d3-0afd5b6791c6",
204
218
  "core": false,
219
+ "unlocked_by": "sum-of-multiples",
205
220
  "difficulty": 3,
206
- "slug": "sieve",
207
221
  "topics": [
208
222
  "filtering",
209
223
  "mathematics"
210
- ],
211
- "unlocked_by": "sum-of-multiples",
212
- "uuid": "dabc8218-8ab8-4918-85d3-0afd5b6791c6"
224
+ ]
213
225
  },
214
226
  {
227
+ "slug": "largest-series-product",
228
+ "uuid": "a1b4bde3-2ee7-42dd-85c5-4303ae546d15",
215
229
  "core": true,
230
+ "unlocked_by": null,
216
231
  "difficulty": 3,
217
- "slug": "largest-series-product",
218
232
  "topics": [
219
233
  "integers",
220
234
  "strings",
221
235
  "transforming"
222
- ],
223
- "uuid": "a1b4bde3-2ee7-42dd-85c5-4303ae546d15"
236
+ ]
224
237
  },
225
238
  {
239
+ "slug": "luhn",
240
+ "uuid": "33157f48-a2d9-4fae-a9c8-5df547473f1a",
226
241
  "core": false,
242
+ "unlocked_by": "phone-number",
227
243
  "difficulty": 3,
228
- "slug": "luhn",
229
244
  "topics": [
230
245
  "algorithms",
231
246
  "strings",
232
247
  "transforming"
233
- ],
234
- "unlocked_by": "phone-number",
235
- "uuid": "33157f48-a2d9-4fae-a9c8-5df547473f1a"
248
+ ]
236
249
  },
237
250
  {
251
+ "slug": "secret-handshake",
252
+ "uuid": "eacc30e1-d02c-4ccb-b1f7-3d4f16358726",
238
253
  "core": false,
254
+ "unlocked_by": "raindrops",
239
255
  "difficulty": 2,
240
- "slug": "secret-handshake",
241
256
  "topics": [
242
257
  "bitwise__operations",
243
258
  "control_flow_conditionals"
244
- ],
245
- "unlocked_by": "raindrops",
246
- "uuid": "eacc30e1-d02c-4ccb-b1f7-3d4f16358726"
259
+ ]
247
260
  },
248
261
  {
262
+ "slug": "pascals-triangle",
263
+ "uuid": "f3e93545-7466-4635-b508-7e02517fdf06",
249
264
  "core": true,
265
+ "unlocked_by": null,
250
266
  "difficulty": 3,
251
- "slug": "pascals-triangle",
252
267
  "topics": [
253
268
  "control_flow_conditionals",
254
269
  "mathematics"
255
- ],
256
- "unlocked_by": null,
257
- "uuid": "f3e93545-7466-4635-b508-7e02517fdf06"
270
+ ]
258
271
  },
259
272
  {
273
+ "slug": "tournament",
274
+ "uuid": "acf63670-7e56-47c1-9f33-7ec076d5270f",
260
275
  "core": false,
276
+ "unlocked_by": "phone-number",
261
277
  "difficulty": 4,
262
- "slug": "tournament",
263
278
  "topics": [
264
279
  "parsing",
265
280
  "text_formatting"
266
- ],
267
- "unlocked_by": "phone-number",
268
- "uuid": "acf63670-7e56-47c1-9f33-7ec076d5270f"
281
+ ]
269
282
  },
270
283
  {
284
+ "slug": "nucleotide-count",
285
+ "uuid": "a81a1820-5da7-4e6e-99f2-17d71d37bd99",
271
286
  "core": false,
287
+ "unlocked_by": "word-count",
272
288
  "difficulty": 2,
273
- "slug": "nucleotide-count",
274
289
  "topics": [
275
290
  "lists",
276
291
  "transforming"
277
- ],
278
- "unlocked_by": "word-count",
279
- "uuid": "a81a1820-5da7-4e6e-99f2-17d71d37bd99"
292
+ ]
280
293
  },
281
294
  {
295
+ "slug": "pangram",
296
+ "uuid": "022148a9-0c8f-42f3-8f32-2cc1cb5d7f7e",
282
297
  "core": false,
298
+ "unlocked_by": "anagram",
283
299
  "difficulty": 2,
284
- "slug": "pangram",
285
300
  "topics": [
286
301
  "regular_expressions",
287
302
  "strings"
288
- ],
289
- "unlocked_by": "anagram",
290
- "uuid": "022148a9-0c8f-42f3-8f32-2cc1cb5d7f7e"
303
+ ]
291
304
  },
292
305
  {
306
+ "slug": "triangle",
307
+ "uuid": "d3b2f968-32e2-4df7-a29a-f02ba2c7d581",
293
308
  "core": false,
309
+ "unlocked_by": "sum-of-multiples",
294
310
  "difficulty": 3,
295
- "slug": "triangle",
296
311
  "topics": [
297
312
  "classes",
298
313
  "mathematics"
299
- ],
300
- "unlocked_by": "sum-of-multiples",
301
- "uuid": "d3b2f968-32e2-4df7-a29a-f02ba2c7d581"
314
+ ]
302
315
  },
303
316
  {
317
+ "slug": "collatz-conjecture",
318
+ "uuid": "4f38e325-587f-4a80-8c8f-6c45ec710e80",
304
319
  "core": false,
320
+ "unlocked_by": "sum-of-multiples",
305
321
  "difficulty": 2,
306
- "slug": "collatz-conjecture",
307
322
  "topics": [
308
323
  "control_flow_conditionals",
309
324
  "recursion"
310
- ],
311
- "unlocked_by": "sum-of-multiples",
312
- "uuid": "4f38e325-587f-4a80-8c8f-6c45ec710e80"
325
+ ]
313
326
  },
314
327
  {
328
+ "slug": "allergies",
329
+ "uuid": "2f7b585f-f82f-4dca-9588-2df3250184e6",
315
330
  "core": false,
331
+ "unlocked_by": "sum-of-multiples",
316
332
  "difficulty": 3,
317
- "slug": "allergies",
318
333
  "topics": [
319
334
  "control_flow_conditionals",
320
335
  "filtering",
321
336
  "lists"
322
- ],
323
- "unlocked_by": "sum-of-multiples",
324
- "uuid": "2f7b585f-f82f-4dca-9588-2df3250184e6"
337
+ ]
325
338
  },
326
339
  {
327
- "uuid": "82c43534-86ff-4b5a-9519-1501a15721bf",
328
340
  "slug": "crypto-square",
341
+ "uuid": "82c43534-86ff-4b5a-9519-1501a15721bf",
329
342
  "core": false,
330
343
  "unlocked_by": "rotational-cipher",
331
344
  "difficulty": 4,
332
345
  "topics": [
346
+ "regular_expressions",
333
347
  "strings",
334
348
  "text_formatting",
335
- "regular_expressions",
336
349
  "transforming"
337
350
  ]
338
351
  },
339
352
  {
340
- "uuid": "7cad82d6-0db6-d680-4133-81d850d6e7a925454a0",
341
353
  "slug": "diamond",
354
+ "uuid": "7cad82d6-0db6-d680-4133-81d850d6e7a925454a0",
342
355
  "core": false,
343
356
  "unlocked_by": "pascals-triangle",
344
357
  "difficulty": 3,
345
358
  "topics": [
346
- "text_formatting",
347
- "control_flow_loops"
359
+ "control_flow_loops",
360
+ "text_formatting"
348
361
  ]
349
362
  }
350
- ],
351
- "foregone": [],
352
- "language": "R"
363
+ ]
353
364
  }
@@ -2,34 +2,34 @@
2
2
  "docs_url": "https://github.com/exercism/docs/blob/master/maintaining-a-track/maintainer-configuration.md",
3
3
  "maintainers": [
4
4
  {
5
- "alumnus": false,
6
- "avatar_url": null,
7
- "bio": null,
8
5
  "github_username": "zenspider",
6
+ "alumnus": false,
7
+ "show_on_website": false,
8
+ "name": null,
9
9
  "link_text": null,
10
10
  "link_url": null,
11
- "name": null,
12
- "show_on_website": false
11
+ "avatar_url": null,
12
+ "bio": null
13
13
  },
14
14
  {
15
- "alumnus": false,
16
- "avatar_url": null,
17
- "bio": null,
18
15
  "github_username": "arguello",
16
+ "alumnus": false,
17
+ "show_on_website": false,
18
+ "name": null,
19
19
  "link_text": null,
20
20
  "link_url": null,
21
- "name": null,
22
- "show_on_website": false
21
+ "avatar_url": null,
22
+ "bio": null
23
23
  },
24
24
  {
25
- "alumnus": false,
26
- "avatar_url": null,
27
- "bio": null,
28
25
  "github_username": "yurrriq",
26
+ "alumnus": false,
27
+ "show_on_website": false,
28
+ "name": null,
29
29
  "link_text": null,
30
30
  "link_url": null,
31
- "name": null,
32
- "show_on_website": false
31
+ "avatar_url": null,
32
+ "bio": null
33
33
  }
34
34
  ]
35
- }
35
+ }