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.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/bash/config/maintainers.json +16 -15
- data/tracks/bash/config.json +111 -103
- data/tracks/c/config/maintainers.json +14 -14
- data/tracks/c/config.json +263 -242
- data/tracks/ceylon/config/maintainers.json +8 -8
- data/tracks/ceylon/config.json +30 -32
- data/tracks/cfml/config/maintainers.json +6 -4
- data/tracks/cfml/config.json +145 -92
- data/tracks/common-lisp/config/maintainers.json +26 -26
- data/tracks/common-lisp/config.json +152 -149
- data/tracks/cpp/config/maintainers.json +11 -11
- data/tracks/cpp/config.json +162 -161
- data/tracks/dart/config/maintainers.json +21 -17
- data/tracks/dart/config.json +57 -57
- data/tracks/delphi/config.json +1 -0
- data/tracks/delphi/docs/ABOUT.md +9 -6
- data/tracks/ecmascript/config/maintainers.json +11 -11
- data/tracks/ecmascript/config.json +563 -544
- data/tracks/ecmascript/exercises/accumulate/package.json +1 -1
- data/tracks/ecmascript/exercises/acronym/package.json +1 -1
- data/tracks/ecmascript/exercises/all-your-base/package.json +1 -1
- data/tracks/ecmascript/exercises/allergies/package.json +1 -1
- data/tracks/ecmascript/exercises/alphametics/package.json +1 -1
- data/tracks/ecmascript/exercises/anagram/package.json +1 -1
- data/tracks/ecmascript/exercises/armstrong-numbers/package.json +1 -1
- data/tracks/ecmascript/exercises/atbash-cipher/package.json +1 -1
- data/tracks/ecmascript/exercises/beer-song/package.json +1 -1
- data/tracks/ecmascript/exercises/binary/package.json +1 -1
- data/tracks/ecmascript/exercises/binary-search/package.json +1 -1
- data/tracks/ecmascript/exercises/binary-search-tree/package.json +1 -1
- data/tracks/ecmascript/exercises/bob/package.json +1 -1
- data/tracks/ecmascript/exercises/bowling/package.json +1 -1
- data/tracks/ecmascript/exercises/bracket-push/package.json +1 -1
- data/tracks/ecmascript/exercises/change/package.json +1 -1
- data/tracks/ecmascript/exercises/circular-buffer/package.json +1 -1
- data/tracks/ecmascript/exercises/clock/package.json +1 -1
- data/tracks/ecmascript/exercises/collatz-conjecture/package.json +1 -1
- data/tracks/ecmascript/exercises/complex-numbers/package.json +1 -1
- data/tracks/ecmascript/exercises/connect/package.json +1 -1
- data/tracks/ecmascript/exercises/crypto-square/package.json +1 -1
- data/tracks/ecmascript/exercises/custom-set/package.json +1 -1
- data/tracks/ecmascript/exercises/diamond/package.json +1 -1
- data/tracks/ecmascript/exercises/difference-of-squares/package.json +1 -1
- data/tracks/ecmascript/exercises/diffie-hellman/package.json +1 -1
- data/tracks/ecmascript/exercises/etl/package.json +1 -1
- data/tracks/ecmascript/exercises/flatten-array/package.json +1 -1
- data/tracks/ecmascript/exercises/food-chain/package.json +1 -1
- data/tracks/ecmascript/exercises/gigasecond/package.json +1 -1
- data/tracks/ecmascript/exercises/grade-school/package.json +1 -1
- data/tracks/ecmascript/exercises/grains/package.json +1 -1
- data/tracks/ecmascript/exercises/hamming/package.json +1 -1
- data/tracks/ecmascript/exercises/hello-world/package.json +1 -1
- data/tracks/ecmascript/exercises/hexadecimal/package.json +1 -1
- data/tracks/ecmascript/exercises/house/package.json +1 -1
- data/tracks/ecmascript/exercises/isbn-verifier/package.json +1 -1
- data/tracks/ecmascript/exercises/isogram/package.json +1 -1
- data/tracks/ecmascript/exercises/kindergarten-garden/package.json +1 -1
- data/tracks/ecmascript/exercises/largest-series-product/package.json +1 -1
- data/tracks/ecmascript/exercises/leap/package.json +1 -1
- data/tracks/ecmascript/exercises/linked-list/package.json +1 -1
- data/tracks/ecmascript/exercises/list-ops/package.json +1 -1
- data/tracks/ecmascript/exercises/luhn/package.json +1 -1
- data/tracks/ecmascript/exercises/matrix/package.json +1 -1
- data/tracks/ecmascript/exercises/meetup/package.json +1 -1
- data/tracks/ecmascript/exercises/minesweeper/package.json +1 -1
- data/tracks/ecmascript/exercises/nth-prime/package.json +1 -1
- data/tracks/ecmascript/exercises/nucleotide-count/package.json +1 -1
- data/tracks/ecmascript/exercises/ocr-numbers/package.json +1 -1
- data/tracks/ecmascript/exercises/octal/package.json +1 -1
- data/tracks/ecmascript/exercises/palindrome-products/package.json +1 -1
- data/tracks/ecmascript/exercises/pangram/package.json +1 -1
- data/tracks/ecmascript/exercises/pascals-triangle/package.json +1 -1
- data/tracks/ecmascript/exercises/perfect-numbers/package.json +1 -1
- data/tracks/ecmascript/exercises/phone-number/package.json +1 -1
- data/tracks/ecmascript/exercises/pig-latin/package.json +1 -1
- data/tracks/ecmascript/exercises/prime-factors/package.json +1 -1
- data/tracks/ecmascript/exercises/protein-translation/package.json +1 -1
- data/tracks/ecmascript/exercises/proverb/package.json +1 -1
- data/tracks/ecmascript/exercises/pythagorean-triplet/package.json +1 -1
- data/tracks/ecmascript/exercises/queen-attack/example.js +2 -2
- data/tracks/ecmascript/exercises/queen-attack/package.json +1 -1
- data/tracks/ecmascript/exercises/raindrops/package.json +1 -1
- data/tracks/ecmascript/exercises/react/package.json +1 -1
- data/tracks/ecmascript/exercises/rectangles/package.json +1 -1
- data/tracks/ecmascript/exercises/rna-transcription/package.json +1 -1
- data/tracks/ecmascript/exercises/robot-name/package.json +1 -1
- data/tracks/ecmascript/exercises/robot-simulator/package.json +1 -1
- data/tracks/ecmascript/exercises/roman-numerals/package.json +1 -1
- data/tracks/ecmascript/exercises/rotational-cipher/package.json +1 -1
- data/tracks/ecmascript/exercises/run-length-encoding/package.json +1 -1
- data/tracks/ecmascript/exercises/saddle-points/package.json +1 -1
- data/tracks/ecmascript/exercises/say/package.json +1 -1
- data/tracks/ecmascript/exercises/scrabble-score/package.json +1 -1
- data/tracks/ecmascript/exercises/secret-handshake/package.json +1 -1
- data/tracks/ecmascript/exercises/series/package.json +1 -1
- data/tracks/ecmascript/exercises/sieve/package.json +1 -1
- data/tracks/ecmascript/exercises/simple-cipher/package.json +1 -1
- data/tracks/ecmascript/exercises/simple-linked-list/package.json +1 -1
- data/tracks/ecmascript/exercises/space-age/package.json +1 -1
- data/tracks/ecmascript/exercises/spiral-matrix/package.json +1 -1
- data/tracks/ecmascript/exercises/strain/package.json +1 -1
- data/tracks/ecmascript/exercises/sublist/package.json +1 -1
- data/tracks/ecmascript/exercises/sum-of-multiples/package.json +1 -1
- data/tracks/ecmascript/exercises/transpose/package.json +1 -1
- data/tracks/ecmascript/exercises/triangle/package.json +1 -1
- data/tracks/ecmascript/exercises/trinary/package.json +1 -1
- data/tracks/ecmascript/exercises/twelve-days/package.json +1 -1
- data/tracks/ecmascript/exercises/two-bucket/package.json +1 -1
- data/tracks/ecmascript/exercises/two-fer/package.json +1 -1
- data/tracks/ecmascript/exercises/word-count/package.json +1 -1
- data/tracks/ecmascript/exercises/word-search/package.json +1 -1
- data/tracks/ecmascript/exercises/wordy/example.js +16 -4
- data/tracks/ecmascript/exercises/wordy/package.json +1 -1
- data/tracks/ecmascript/package.json +1 -1
- data/tracks/elisp/config/maintainers.json +6 -6
- data/tracks/elisp/config.json +103 -103
- data/tracks/elisp/exercises/two-fer/two-fer.el +3 -3
- data/tracks/elm/config/maintainers.json +11 -11
- data/tracks/elm/config.json +171 -171
- data/tracks/erlang/README.md +31 -28
- data/tracks/erlang/config/maintainers.json +13 -7
- data/tracks/erlang/config.json +99 -190
- data/tracks/factor/config/maintainers.json +5 -5
- data/tracks/factor/config.json +17 -19
- data/tracks/fsharp/config/maintainers.json +16 -16
- data/tracks/fsharp/config.json +485 -469
- data/tracks/gnu-apl/config/maintainers.json +6 -5
- data/tracks/gnu-apl/config.json +46 -20
- data/tracks/go/config/maintainers.json +43 -32
- data/tracks/go/config.json +475 -457
- data/tracks/haskell/config/maintainers.json +26 -15
- data/tracks/haskell/config.json +22 -2
- data/tracks/idris/config/maintainers.json +6 -6
- data/tracks/idris/config.json +24 -35
- data/tracks/java/config/maintainers.json +39 -29
- data/tracks/java/config.json +458 -433
- data/tracks/javascript/config/maintainers.json +40 -40
- data/tracks/javascript/config.json +577 -551
- data/tracks/javascript/docs/LEARNING.md +1 -1
- data/tracks/javascript/exercises/pangram/pangram.spec.js +15 -10
- data/tracks/julia/REQUIRE +1 -0
- data/tracks/julia/config/maintainers.json +5 -5
- data/tracks/julia/config.json +106 -108
- data/tracks/kotlin/config/maintainers.json +15 -15
- data/tracks/kotlin/config.json +273 -257
- data/tracks/kotlin/exercises/accumulate/build.gradle +1 -1
- data/tracks/kotlin/exercises/acronym/build.gradle +1 -1
- data/tracks/kotlin/exercises/all-your-base/build.gradle +1 -1
- data/tracks/kotlin/exercises/allergies/.meta/version +1 -1
- data/tracks/kotlin/exercises/allergies/build.gradle +1 -1
- data/tracks/kotlin/exercises/anagram/build.gradle +1 -1
- data/tracks/kotlin/exercises/atbash-cipher/build.gradle +1 -1
- data/tracks/kotlin/exercises/bank-account/build.gradle +17 -17
- data/tracks/kotlin/exercises/beer-song/.meta/version +1 -1
- data/tracks/kotlin/exercises/beer-song/build.gradle +1 -1
- data/tracks/kotlin/exercises/binary/build.gradle +1 -1
- data/tracks/kotlin/exercises/binary-search/build.gradle +1 -2
- data/tracks/kotlin/exercises/bob/build.gradle +1 -1
- data/tracks/kotlin/exercises/bracket-push/build.gradle +1 -1
- data/tracks/kotlin/exercises/change/.meta/version +1 -1
- data/tracks/kotlin/exercises/change/build.gradle +1 -2
- data/tracks/kotlin/exercises/clock/build.gradle +1 -1
- data/tracks/kotlin/exercises/collatz-conjecture/build.gradle +1 -1
- data/tracks/kotlin/exercises/complex-numbers/build.gradle +1 -1
- data/tracks/kotlin/exercises/diamond/build.gradle +1 -1
- data/tracks/kotlin/exercises/difference-of-squares/build.gradle +1 -1
- data/tracks/kotlin/exercises/etl/build.gradle +1 -1
- data/tracks/kotlin/exercises/flatten-array/build.gradle +1 -1
- data/tracks/kotlin/exercises/forth/build.gradle +1 -1
- data/tracks/kotlin/exercises/gigasecond/build.gradle +1 -1
- data/tracks/kotlin/exercises/grade-school/build.gradle +1 -1
- data/tracks/kotlin/exercises/grains/build.gradle +1 -1
- data/tracks/kotlin/exercises/hamming/build.gradle +1 -1
- data/tracks/kotlin/exercises/hello-world/build.gradle +1 -1
- data/tracks/kotlin/exercises/hexadecimal/build.gradle +1 -1
- data/tracks/kotlin/exercises/isogram/build.gradle +1 -1
- data/tracks/kotlin/exercises/largest-series-product/build.gradle +1 -1
- data/tracks/kotlin/exercises/leap/.meta/version +1 -1
- data/tracks/kotlin/exercises/leap/build.gradle +1 -1
- data/tracks/kotlin/exercises/linked-list/build.gradle +1 -1
- data/tracks/kotlin/exercises/list-ops/build.gradle +1 -1
- data/tracks/kotlin/exercises/luhn/build.gradle +1 -1
- data/tracks/kotlin/exercises/meetup/.meta/version +1 -1
- data/tracks/kotlin/exercises/meetup/build.gradle +1 -1
- data/tracks/kotlin/exercises/minesweeper/build.gradle +1 -1
- data/tracks/kotlin/exercises/nth-prime/build.gradle +1 -1
- data/tracks/kotlin/exercises/nucleotide-count/build.gradle +1 -1
- data/tracks/kotlin/exercises/pangram/build.gradle +1 -1
- data/tracks/kotlin/exercises/pascals-triangle/.meta/version +1 -1
- data/tracks/kotlin/exercises/pascals-triangle/build.gradle +1 -1
- data/tracks/kotlin/exercises/perfect-numbers/build.gradle +1 -1
- data/tracks/kotlin/exercises/phone-number/build.gradle +1 -1
- data/tracks/kotlin/exercises/pig-latin/build.gradle +1 -1
- data/tracks/kotlin/exercises/prime-factors/build.gradle +1 -1
- data/tracks/kotlin/exercises/raindrops/build.gradle +1 -1
- data/tracks/kotlin/exercises/react/build.gradle +1 -1
- data/tracks/kotlin/exercises/rna-transcription/build.gradle +1 -1
- data/tracks/kotlin/exercises/robot-name/build.gradle +1 -1
- data/tracks/kotlin/exercises/robot-simulator/build.gradle +1 -1
- data/tracks/kotlin/exercises/roman-numerals/build.gradle +1 -1
- data/tracks/kotlin/exercises/rotational-cipher/.meta/version +1 -1
- data/tracks/kotlin/exercises/rotational-cipher/build.gradle +1 -1
- data/tracks/kotlin/exercises/saddle-points/build.gradle +1 -1
- data/tracks/kotlin/exercises/say/.meta/version +1 -1
- data/tracks/kotlin/exercises/say/build.gradle +1 -1
- data/tracks/kotlin/exercises/scrabble-score/build.gradle +1 -1
- data/tracks/kotlin/exercises/secret-handshake/build.gradle +1 -1
- data/tracks/kotlin/exercises/series/build.gradle +1 -1
- data/tracks/kotlin/exercises/sieve/build.gradle +1 -1
- data/tracks/kotlin/exercises/simple-cipher/build.gradle +1 -1
- data/tracks/kotlin/exercises/space-age/build.gradle +1 -1
- data/tracks/kotlin/exercises/spiral-matrix/build.gradle +1 -1
- data/tracks/kotlin/exercises/strain/build.gradle +1 -1
- data/tracks/kotlin/exercises/sublist/.meta/version +1 -1
- data/tracks/kotlin/exercises/sublist/build.gradle +1 -1
- data/tracks/kotlin/exercises/sum-of-multiples/build.gradle +15 -16
- data/tracks/kotlin/exercises/triangle/build.gradle +15 -16
- data/tracks/kotlin/exercises/two-fer/build.gradle +1 -1
- data/tracks/kotlin/exercises/word-count/build.gradle +1 -1
- data/tracks/lfe/config/maintainers.json +6 -6
- data/tracks/lfe/config.json +128 -125
- data/tracks/lfe/docs/LEARNING.md +1 -1
- data/tracks/lua/config/maintainers.json +16 -16
- data/tracks/lua/config.json +331 -327
- data/tracks/mips/config/maintainers.json +5 -5
- data/tracks/mips/config.json +29 -59
- data/tracks/nim/config/maintainers.json +8 -8
- data/tracks/nim/config.json +185 -127
- data/tracks/nim/exercises/allergies/allergies_test.nim +7 -7
- data/tracks/nim/exercises/allergies/example.nim +2 -2
- data/tracks/nim/exercises/difference-of-squares/difference_of_squares_test.nim +4 -4
- data/tracks/nim/exercises/difference-of-squares/example.nim +3 -3
- data/tracks/nim/exercises/gigasecond/example.nim +1 -1
- data/tracks/nim/exercises/gigasecond/gigasecond_test.nim +5 -5
- data/tracks/nim/exercises/nucleotide-count/example.nim +1 -1
- data/tracks/nim/exercises/nucleotide-count/nucleotide_count_test.nim +6 -6
- data/tracks/nim/exercises/pangram/example.nim +1 -1
- data/tracks/nim/exercises/pangram/pangram_test.nim +11 -11
- data/tracks/nim/exercises/triangle/example.nim +4 -4
- data/tracks/nim/exercises/triangle/triangle_test.nim +14 -14
- data/tracks/nim/exercises/word-count/HINT.md +8 -0
- data/tracks/nim/exercises/word-count/example.nim +8 -15
- data/tracks/nim/exercises/word-count/word_count_test.nim +63 -55
- data/tracks/perl6/Dockerfile +1 -1
- data/tracks/perl6/config/maintainers.json +8 -8
- data/tracks/perl6/config.json +72 -127
- data/tracks/powershell/.gitignore +2 -1
- data/tracks/powershell/config/maintainers.json +8 -8
- data/tracks/powershell/config.json +54 -37
- data/tracks/powershell/exercises/reverse-string/.version +1 -0
- data/tracks/powershell/exercises/reverse-string/README.md +13 -0
- data/tracks/powershell/exercises/reverse-string/ReverseString.example.ps1 +21 -0
- data/tracks/powershell/exercises/reverse-string/ReverseString.ps1 +9 -0
- data/tracks/powershell/exercises/reverse-string/ReverseString.tests.ps1 +21 -0
- data/tracks/powershell/exercises/sum-of-multiples/.version +1 -0
- data/tracks/powershell/exercises/sum-of-multiples/README.md +15 -0
- data/tracks/powershell/exercises/sum-of-multiples/SumOfMultiples.example.ps1 +20 -0
- data/tracks/powershell/exercises/sum-of-multiples/SumOfMultiples.ps1 +9 -0
- data/tracks/powershell/exercises/sum-of-multiples/SumOfMultiples.tests.ps1 +29 -0
- data/tracks/python/config/maintainers.json +17 -17
- data/tracks/python/config.json +331 -283
- data/tracks/python/exercises/diffie-hellman/diffie_hellman_test.py +16 -47
- data/tracks/r/config/maintainers.json +16 -16
- data/tracks/r/config.json +128 -117
- data/tracks/racket/config/maintainers.json +16 -16
- data/tracks/racket/config.json +106 -102
- data/tracks/reasonml/config/maintainers.json +1 -1
- data/tracks/reasonml/config.json +37 -23
- data/tracks/reasonml/exercises/bob/README.md +29 -0
- data/tracks/reasonml/exercises/bob/__tests__/Bob_test.re +103 -0
- data/tracks/reasonml/exercises/bob/bsconfig.json +30 -0
- data/tracks/reasonml/exercises/bob/package-lock.json +5855 -0
- data/tracks/reasonml/exercises/bob/package.json +20 -0
- data/tracks/reasonml/exercises/bob/src/Example.re +41 -0
- data/tracks/reasonml/exercises/hello-world/src/{HelloWorld.re → Example.re} +0 -0
- data/tracks/reasonml/exercises/leap/src/{Leap.re → Example.re} +0 -0
- data/tracks/reasonml/exercises/rna-transcription/__tests__/RnaTranscription_test.re +24 -0
- data/tracks/reasonml/exercises/rna-transcription/bsconfig.json +30 -0
- data/tracks/reasonml/exercises/rna-transcription/package.json +20 -0
- data/tracks/reasonml/exercises/rna-transcription/src/Example.re +14 -0
- data/tracks/reasonml/exercises/space-age/src/{Space_age.re → Example.re} +0 -0
- data/tracks/scala/config/maintainers.json +22 -10
- data/tracks/scala/config.json +362 -350
- data/tracks/scala/docs/ABOUT.md +7 -2
- data/tracks/scheme/config/maintainers.json +11 -11
- data/tracks/scheme/config.json +72 -72
- data/tracks/typescript/config/maintainers.json +15 -15
- data/tracks/typescript/config.json +382 -362
- data/tracks/vimscript/config/maintainers.json +11 -11
- data/tracks/vimscript/config.json +41 -89
- 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
|
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
|
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(
|
22
|
+
self.assertEqual(len(set(private_keys)), len(private_keys))
|
21
23
|
|
22
|
-
def
|
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
|
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
|
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
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
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
|
-
"
|
12
|
-
"
|
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
|
-
"
|
22
|
-
"
|
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
|
-
"
|
32
|
-
"
|
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
|
-
"
|
347
|
-
"
|
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
|
-
"
|
12
|
-
"
|
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
|
-
"
|
22
|
-
"
|
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
|
-
"
|
32
|
-
"
|
31
|
+
"avatar_url": null,
|
32
|
+
"bio": null
|
33
33
|
}
|
34
34
|
]
|
35
|
-
}
|
35
|
+
}
|