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
@@ -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.
|
9
|
-
check allergies.
|
10
|
-
check allergies.
|
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.
|
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.
|
19
|
-
check allergies.
|
20
|
-
check allergies.
|
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
|
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.
|
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
|
5
|
+
check squareOfSum(5) == 225
|
6
6
|
|
7
7
|
test "sum of squares, 5":
|
8
|
-
check
|
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
|
14
|
+
check squareOfSum(100) == 25502500
|
15
15
|
|
16
16
|
test "sum of squares, 100":
|
17
|
-
check
|
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
|
7
|
+
proc squareOfSum*(n: int): int =
|
8
8
|
(n * (n + 1) div 2) ** 2
|
9
9
|
|
10
|
-
proc
|
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(
|
14
|
+
abs(sumOfSquares(n) - squareOfSum(n))
|
@@ -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
|
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
|
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
|
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
|
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
|
30
|
+
check addGigasecond(birthday) == expected
|
31
31
|
|
32
32
|
|
@@ -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 "
|
15
|
-
check len(
|
14
|
+
test "countDna empty":
|
15
|
+
check len(countDna("")) == 0
|
16
16
|
|
17
|
-
test "
|
18
|
-
let counts =
|
17
|
+
test "countDna only guanine":
|
18
|
+
let counts = countDna("GGGGGGGG")
|
19
19
|
check counts['G'] == 8
|
20
20
|
|
21
|
-
test "
|
22
|
-
let counts =
|
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
|
@@ -1,35 +1,35 @@
|
|
1
1
|
import unittest
|
2
2
|
|
3
|
-
from pangram import
|
3
|
+
from pangram import isPangram
|
4
4
|
|
5
5
|
|
6
6
|
test "sentence empty":
|
7
|
-
check
|
7
|
+
check isPangram("") == false
|
8
8
|
|
9
9
|
test "recognizes a perfect lower case pangram":
|
10
|
-
check
|
10
|
+
check isPangram("abcdefghijklmnopqrstuvwxyz") == true
|
11
11
|
|
12
12
|
test "test pangram with only lower case":
|
13
|
-
check
|
13
|
+
check isPangram("the quick brown fox jumps over the lazy dog") == true
|
14
14
|
|
15
15
|
test "missing character x":
|
16
|
-
check
|
16
|
+
check isPangram("a quick movement of the enemy will jeopardize five gunboats") == false
|
17
17
|
|
18
18
|
test "another missing character":
|
19
|
-
check
|
19
|
+
check isPangram("five boxing wizards jump quickly at it") == false
|
20
20
|
|
21
21
|
test "pangram with underscores":
|
22
|
-
check
|
22
|
+
check isPangram("the_quick_brown_fox_jumps_over_the_lazy_dog") == true
|
23
23
|
|
24
24
|
test "pangram with numbers":
|
25
|
-
check
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
8
|
+
check isEquilateral([2, 2, 2]) == true
|
9
9
|
|
10
10
|
test "false if any side is unequal":
|
11
|
-
check
|
11
|
+
check isEquilateral([2, 3, 2]) == false
|
12
12
|
|
13
13
|
test "false if no sides are equal":
|
14
|
-
check
|
14
|
+
check isEquilateral([5, 4, 6]) == false
|
15
15
|
|
16
16
|
test "false if all sides are zero":
|
17
|
-
check
|
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
|
23
|
+
check isIsosceles([3, 4, 4]) == true
|
24
24
|
|
25
25
|
test "true if first two sides are equal":
|
26
|
-
check
|
26
|
+
check isIsosceles([4, 4, 3]) == true
|
27
27
|
|
28
28
|
test "true if first and last sides are equal":
|
29
|
-
check
|
29
|
+
check isIsosceles([4, 3, 4]) == true
|
30
30
|
|
31
31
|
test "is equilateral triangles are also is isosceles":
|
32
|
-
check
|
32
|
+
check isIsosceles([4, 4, 4]) == true
|
33
33
|
|
34
34
|
test "false if no sides are equal":
|
35
|
-
check
|
35
|
+
check isIsosceles([2, 3, 4]) == false
|
36
36
|
|
37
37
|
test "violation of triangle inequality not is isosceles":
|
38
|
-
check
|
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
|
44
|
+
check isScalene([5, 4, 6]) == true
|
45
45
|
|
46
46
|
test "false if all sides are equal":
|
47
|
-
check
|
47
|
+
check isScalene([4, 4, 4]) == false
|
48
48
|
|
49
49
|
test "false if two sides are equal":
|
50
|
-
check
|
50
|
+
check isScalene([4, 4, 3]) == false
|
51
51
|
|
52
52
|
test "violation of triangle inequality not is scalene":
|
53
|
-
check
|
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
|
-
|
2
|
+
tables, strutils, re
|
3
3
|
|
4
|
-
|
5
|
-
|
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
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
3
|
-
import wordcount
|
2
|
+
unittest, tables
|
4
3
|
|
5
|
-
|
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
|
-
|
14
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
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 "
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
result
|
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 "
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
result
|
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 "
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
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 "
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
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 "
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
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 "
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
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
|
data/tracks/perl6/Dockerfile
CHANGED
@@ -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
|
}
|