trackler 2.2.1.46 → 2.2.1.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/nucleotide-count/canonical-data.json +7 -7
- data/tracks/c/README.md +1 -1
- data/tracks/c/docs/SNIPPET.txt +2 -3
- data/tracks/c/exercises/acronym/test/test_acronym.c +8 -0
- data/tracks/c/exercises/all-your-base/test/test_all_your_base.c +8 -0
- data/tracks/c/exercises/allergies/test/test_allergies.c +8 -0
- data/tracks/c/exercises/anagram/test/test_anagram.c +8 -0
- data/tracks/c/exercises/atbash-cipher/test/test_atbash_cipher.c +8 -0
- data/tracks/c/exercises/beer-song/src/example.c +23 -22
- data/tracks/c/exercises/beer-song/src/example.h +3 -3
- data/tracks/c/exercises/beer-song/test/test_beer_song.c +8 -0
- data/tracks/c/exercises/binary-search/test/test_binary_search.c +8 -0
- data/tracks/c/exercises/binary/test/test_binary.c +8 -0
- data/tracks/c/exercises/bob/test/test_bob.c +8 -0
- data/tracks/c/exercises/clock/test/test_clock.c +8 -0
- data/tracks/c/exercises/difference-of-squares/test/test_difference_of_squares.c +8 -0
- data/tracks/c/exercises/gigasecond/test/test_gigasecond.c +8 -0
- data/tracks/c/exercises/grains/test/test_grains.c +8 -0
- data/tracks/c/exercises/hamming/test/test_hamming.c +8 -0
- data/tracks/c/exercises/hello-world/src/example.c +0 -2
- data/tracks/c/exercises/hello-world/test/test_hello_world.c +8 -0
- data/tracks/c/exercises/isogram/test/test_isogram.c +8 -0
- data/tracks/c/exercises/largest-series-product/test/test_largest_series_product.c +8 -0
- data/tracks/c/exercises/leap/test/test_leap.c +8 -0
- data/tracks/c/exercises/meetup/test/test_meetup.c +8 -0
- data/tracks/c/exercises/nth-prime/test/test_nth_prime.c +8 -0
- data/tracks/c/exercises/nucleotide-count/test/test_nucleotide_count.c +8 -0
- data/tracks/c/exercises/palindrome-products/test/test_palindrome_products.c +8 -0
- data/tracks/c/exercises/pangram/test/test_pangram.c +8 -0
- data/tracks/c/exercises/pascals-triangle/test/test_pascals_triangle.c +8 -0
- data/tracks/c/exercises/perfect-numbers/src/example.c +4 -4
- data/tracks/c/exercises/perfect-numbers/src/example.h +4 -4
- data/tracks/c/exercises/perfect-numbers/src/perfect_numbers.h +4 -4
- data/tracks/c/exercises/perfect-numbers/test/test_perfect_numbers.c +23 -13
- data/tracks/c/exercises/phone-number/test/test_phone_number.c +8 -0
- data/tracks/c/exercises/raindrops/test/test_raindrops.c +5 -1
- data/tracks/c/exercises/react/src/example.c +8 -8
- data/tracks/c/exercises/react/test/test_react.c +8 -0
- data/tracks/c/exercises/rna-transcription/test/test_rna_transcription.c +8 -0
- data/tracks/c/exercises/robot-simulator/src/example.c +12 -12
- data/tracks/c/exercises/robot-simulator/src/robot_simulator.h +11 -11
- data/tracks/c/exercises/robot-simulator/test/test_robot_simulator.c +33 -25
- data/tracks/c/exercises/roman-numerals/test/test_roman_numerals.c +8 -0
- data/tracks/c/exercises/scrabble-score/test/test_scrabble_score.c +8 -0
- data/tracks/c/exercises/series/test/test_series.c +8 -0
- data/tracks/c/exercises/sieve/test/test_sieve.c +8 -0
- data/tracks/c/exercises/space-age/src/example.h +8 -8
- data/tracks/c/exercises/space-age/test/test_space_age.c +16 -8
- data/tracks/c/exercises/sum-of-multiples/test/test_sum_of_multiples.c +8 -0
- data/tracks/c/exercises/triangle/test/test_triangle.c +8 -0
- data/tracks/c/exercises/word-count/test/test_word_count.c +8 -0
- data/tracks/cfml/config.json +8 -0
- data/tracks/cfml/exercises/anagram/.meta/HINTS.md +0 -0
- data/tracks/cfml/exercises/anagram/Anagram.cfc +13 -0
- data/tracks/cfml/exercises/anagram/AnagramTest.cfc +79 -0
- data/tracks/cfml/exercises/anagram/README.md +29 -0
- data/tracks/cfml/exercises/anagram/Solution.cfc +42 -0
- data/tracks/cfml/exercises/anagram/SolutionTest.cfc +7 -0
- data/tracks/cfml/exercises/anagram/TestRunner.cfc +103 -0
- data/tracks/cfml/exercises/anagram/box.json +8 -0
- data/tracks/cfml/exercises/anagram/index.cfm +37 -0
- data/tracks/common-lisp/config.json +5 -5
- data/tracks/csharp/exercises/two-bucket/Example.cs +53 -79
- data/tracks/csharp/exercises/two-bucket/TwoBucketTest.cs +2 -2
- data/tracks/csharp/generators/Exercises/QueenAttack.cs +3 -3
- data/tracks/dart/exercises/leap/test/leap_test.dart +1 -1
- data/tracks/delphi/exercises/hamming/uHammingTests.pas +2 -2
- data/tracks/delphi/exercises/leap/uLeapTests.pas +11 -38
- data/tracks/delphi/exercises/nucleotide-count/uNucleotideCountExample.pas +1 -1
- data/tracks/delphi/exercises/nucleotide-count/uNucleotideCountTest.pas +31 -55
- data/tracks/ecmascript/config.json +31 -0
- data/tracks/ecmascript/config/maintainers.json +5 -5
- 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/atbash-cipher/package.json +1 -1
- data/tracks/ecmascript/exercises/beer-song/package.json +1 -1
- data/tracks/ecmascript/exercises/binary-search-tree/package.json +1 -1
- data/tracks/ecmascript/exercises/binary-search/package.json +1 -1
- data/tracks/ecmascript/exercises/binary/package.json +1 -1
- data/tracks/ecmascript/exercises/bob/package.json +1 -1
- data/tracks/ecmascript/exercises/bracket-push/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/README.md +59 -0
- data/tracks/ecmascript/exercises/collatz-conjecture/collatz-conjecture.spec.js +31 -0
- data/tracks/ecmascript/exercises/collatz-conjecture/example.js +14 -0
- data/tracks/ecmascript/exercises/collatz-conjecture/package.json +69 -0
- 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/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/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/proverb/package.json +1 -1
- data/tracks/ecmascript/exercises/pythagorean-triplet/package.json +1 -1
- data/tracks/ecmascript/exercises/queen-attack/package.json +1 -1
- data/tracks/ecmascript/exercises/raindrops/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/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/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/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/word-count/package.json +1 -1
- data/tracks/ecmascript/exercises/word-search/README.md +58 -0
- data/tracks/ecmascript/exercises/word-search/example.js +146 -0
- data/tracks/ecmascript/exercises/word-search/package.json +69 -0
- data/tracks/ecmascript/exercises/word-search/word-search.spec.js +626 -0
- data/tracks/ecmascript/exercises/wordy/package.json +1 -1
- data/tracks/ecmascript/package.json +1 -1
- data/tracks/elixir/config.json +11 -0
- data/tracks/elixir/exercises/luhn/example.exs +26 -46
- data/tracks/elixir/exercises/luhn/luhn.exs +0 -13
- data/tracks/elixir/exercises/luhn/luhn_test.exs +44 -14
- data/tracks/elixir/exercises/transpose/README.md +101 -0
- data/tracks/elixir/exercises/transpose/example.exs +46 -0
- data/tracks/elixir/exercises/transpose/transpose.exs +22 -0
- data/tracks/elixir/exercises/transpose/transpose_test.exs +248 -0
- data/tracks/fsharp/exercises/grains/Example.fs +10 -2
- data/tracks/fsharp/exercises/grains/Grains.fs +2 -4
- data/tracks/fsharp/exercises/grains/GrainsTest.fs +52 -25
- data/tracks/fsharp/exercises/phone-number/Example.fs +11 -3
- data/tracks/fsharp/exercises/phone-number/PhoneNumber.fs +1 -1
- data/tracks/fsharp/exercises/phone-number/PhoneNumberTest.fs +32 -21
- data/tracks/fsharp/exercises/prime-factors/Example.fs +6 -13
- data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fs +1 -1
- data/tracks/fsharp/exercises/prime-factors/PrimeFactorsTest.fs +23 -32
- data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipherTest.fs +22 -13
- data/tracks/fsharp/generators/Exercise.fs +3 -4
- data/tracks/fsharp/generators/Generators.fs +31 -0
- data/tracks/gnu-apl/bin/run-all-tests +5 -2
- data/tracks/java/CONTRIBUTING.md +8 -0
- data/tracks/java/POLICIES.md +2 -2
- data/tracks/java/config.json +26 -4
- data/tracks/java/exercises/triangle/.meta/.version +1 -0
- data/tracks/java/exercises/triangle/.meta/src/reference/java/Triangle.java +1 -1
- data/tracks/java/exercises/triangle/src/test/java/TriangleTest.java +59 -40
- data/tracks/javascript/config.json +30 -0
- data/tracks/javascript/config/maintainers.json +8 -8
- data/tracks/javascript/exercises/change/example.js +6 -22
- data/tracks/javascript/exercises/collatz-conjecture/README.md +57 -0
- data/tracks/javascript/exercises/collatz-conjecture/collatz-conjecture.spec.js +37 -0
- data/tracks/javascript/exercises/collatz-conjecture/example.js +20 -0
- data/tracks/javascript/exercises/protein-translation/example.js +30 -31
- data/tracks/javascript/exercises/protein-translation/protein-translation.spec.js +60 -60
- data/tracks/javascript/exercises/transpose/README.md +89 -0
- data/tracks/javascript/exercises/transpose/example.js +17 -0
- data/tracks/javascript/exercises/transpose/transpose.spec.js +67 -0
- data/tracks/objective-c/config.json +283 -263
- data/tracks/objective-c/exercises/grains/GrainsExample.h +6 -0
- data/tracks/objective-c/exercises/grains/GrainsExample.m +19 -0
- data/tracks/objective-c/exercises/grains/GrainsTest.m +85 -0
- data/tracks/objective-c/exercises/nth-prime/NthPrimeExample.h +6 -0
- data/tracks/objective-c/exercises/nth-prime/NthPrimeExample.m +39 -0
- data/tracks/objective-c/exercises/nth-prime/NthPrimeTest.m +53 -0
- data/tracks/python/config.json +42 -11
- data/tracks/python/exercises/change/README.md +34 -0
- data/tracks/python/exercises/two-bucket/README.md +47 -0
- data/tracks/ruby/README.md +4 -1
- data/tracks/ruby/lib/generator/command_line.rb +3 -3
- data/tracks/ruby/lib/generator/command_line/generator_optparser.rb +3 -3
- data/tracks/ruby/test/generator/command_line/generator_optparser_test.rb +4 -4
- data/tracks/ruby/test/generator/command_line_test.rb +5 -5
- data/tracks/typescript/config.json +15 -0
- data/tracks/typescript/exercises/strain/README.md +60 -0
- data/tracks/typescript/exercises/strain/package.json +36 -0
- data/tracks/typescript/exercises/strain/strain.example.ts +23 -0
- data/tracks/typescript/exercises/strain/strain.test.ts +76 -0
- data/tracks/typescript/exercises/strain/strain.ts +0 -0
- data/tracks/typescript/exercises/strain/tsconfig.json +22 -0
- data/tracks/typescript/exercises/strain/tslint.json +127 -0
- data/tracks/typescript/exercises/strain/yarn.lock +2305 -0
- metadata +46 -3
- data/tracks/ecmascript/package-lock.json +0 -2835
@@ -2,5 +2,13 @@
|
|
2
2
|
|
3
3
|
open System.Numerics
|
4
4
|
|
5
|
-
let square (n:int) =
|
6
|
-
|
5
|
+
let square (n:int) =
|
6
|
+
if n <= 0 || n > 64 then
|
7
|
+
Error "Invalid input"
|
8
|
+
else
|
9
|
+
Ok (2I ** (n - 1) |> uint64)
|
10
|
+
|
11
|
+
let total =
|
12
|
+
[1..64]
|
13
|
+
|> List.map square
|
14
|
+
|> List.reduce (fun x y -> match x, y with Ok a, Ok b -> Ok (a + b) | _ -> Error "Invalid input")
|
@@ -1,6 +1,4 @@
|
|
1
1
|
module Grains
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
let square (n: int): BigInteger = failwith "You need to implement this function."
|
6
|
-
let total: BigInteger = failwith "You need to implement this function."
|
3
|
+
let square (n: int): Result<uint64,string> = failwith "You need to implement this function."
|
4
|
+
let total: Result<uint64,string> = failwith "You need to implement this function."
|
@@ -1,37 +1,64 @@
|
|
1
|
+
// This file was auto-generated based on version 1.0.0 of the canonical data.
|
2
|
+
|
1
3
|
module GrainsTest
|
2
4
|
|
3
|
-
open Xunit
|
4
5
|
open FsUnit.Xunit
|
6
|
+
open Xunit
|
7
|
+
|
5
8
|
open Grains
|
6
|
-
|
9
|
+
|
7
10
|
[<Fact>]
|
8
|
-
let ``
|
9
|
-
|
10
|
-
|
11
|
+
let ``Returns the total number of grains on the board`` () =
|
12
|
+
let expected: Result<uint64,string> = Ok 18446744073709551615UL
|
13
|
+
total |> should equal expected
|
14
|
+
|
11
15
|
[<Fact(Skip = "Remove to run test")>]
|
12
|
-
let ``
|
13
|
-
|
14
|
-
|
16
|
+
let ``1`` () =
|
17
|
+
let expected: Result<uint64,string> = Ok 1UL
|
18
|
+
square 1 |> should equal expected
|
19
|
+
|
15
20
|
[<Fact(Skip = "Remove to run test")>]
|
16
|
-
let ``
|
17
|
-
|
18
|
-
|
21
|
+
let ``2`` () =
|
22
|
+
let expected: Result<uint64,string> = Ok 2UL
|
23
|
+
square 2 |> should equal expected
|
24
|
+
|
19
25
|
[<Fact(Skip = "Remove to run test")>]
|
20
|
-
let ``
|
21
|
-
|
22
|
-
|
26
|
+
let ``3`` () =
|
27
|
+
let expected: Result<uint64,string> = Ok 4UL
|
28
|
+
square 3 |> should equal expected
|
29
|
+
|
23
30
|
[<Fact(Skip = "Remove to run test")>]
|
24
|
-
let ``
|
25
|
-
|
26
|
-
|
31
|
+
let ``4`` () =
|
32
|
+
let expected: Result<uint64,string> = Ok 8UL
|
33
|
+
square 4 |> should equal expected
|
34
|
+
|
27
35
|
[<Fact(Skip = "Remove to run test")>]
|
28
|
-
let ``
|
29
|
-
|
30
|
-
|
36
|
+
let ``16`` () =
|
37
|
+
let expected: Result<uint64,string> = Ok 32768UL
|
38
|
+
square 16 |> should equal expected
|
39
|
+
|
31
40
|
[<Fact(Skip = "Remove to run test")>]
|
32
|
-
let ``
|
33
|
-
|
34
|
-
|
41
|
+
let ``32`` () =
|
42
|
+
let expected: Result<uint64,string> = Ok 2147483648UL
|
43
|
+
square 32 |> should equal expected
|
44
|
+
|
35
45
|
[<Fact(Skip = "Remove to run test")>]
|
36
|
-
let ``
|
37
|
-
|
46
|
+
let ``64`` () =
|
47
|
+
let expected: Result<uint64,string> = Ok 9223372036854775808UL
|
48
|
+
square 64 |> should equal expected
|
49
|
+
|
50
|
+
[<Fact(Skip = "Remove to run test")>]
|
51
|
+
let ``Square 0 raises an exception`` () =
|
52
|
+
let expected: Result<uint64,string> = Error "Invalid input"
|
53
|
+
square 0 |> should equal expected
|
54
|
+
|
55
|
+
[<Fact(Skip = "Remove to run test")>]
|
56
|
+
let ``Negative square raises an exception`` () =
|
57
|
+
let expected: Result<uint64,string> = Error "Invalid input"
|
58
|
+
square -1 |> should equal expected
|
59
|
+
|
60
|
+
[<Fact(Skip = "Remove to run test")>]
|
61
|
+
let ``Square greater than 64 raises an exception`` () =
|
62
|
+
let expected: Result<uint64,string> = Error "Invalid input"
|
63
|
+
square 65 |> should equal expected
|
64
|
+
|
@@ -2,10 +2,18 @@
|
|
2
2
|
|
3
3
|
open System
|
4
4
|
|
5
|
-
let
|
5
|
+
let private validate (input: string) =
|
6
|
+
let isStartDigit digit = List.contains digit ['2'..'9']
|
7
|
+
|
8
|
+
if isStartDigit input.[0] && isStartDigit input.[3] then
|
9
|
+
Some input
|
10
|
+
else
|
11
|
+
None
|
12
|
+
|
13
|
+
let clean (input: string) =
|
6
14
|
let digits = input.ToCharArray() |> Array.filter (Char.IsDigit) |> String
|
7
15
|
|
8
16
|
match digits.Length with
|
9
|
-
| 10 ->
|
10
|
-
| 11 when digits.Chars 0 = '1' ->
|
17
|
+
| 10 -> validate digits
|
18
|
+
| 11 when digits.Chars 0 = '1' -> validate (digits.Substring(1))
|
11
19
|
| _ -> None
|
@@ -1,46 +1,57 @@
|
|
1
|
+
// This file was auto-generated based on version 1.2.0 of the canonical data.
|
2
|
+
|
1
3
|
module PhoneNumberTest
|
2
4
|
|
3
|
-
open Xunit
|
4
5
|
open FsUnit.Xunit
|
6
|
+
open Xunit
|
5
7
|
|
6
8
|
open PhoneNumber
|
7
9
|
|
8
10
|
[<Fact>]
|
9
|
-
let ``Cleans
|
10
|
-
|
11
|
+
let ``Cleans the number`` () =
|
12
|
+
clean "(223) 456-7890" |> should equal <| Some "2234567890"
|
11
13
|
|
12
14
|
[<Fact(Skip = "Remove to run test")>]
|
13
|
-
let ``Cleans
|
14
|
-
|
15
|
+
let ``Cleans numbers with dots`` () =
|
16
|
+
clean "223.456.7890" |> should equal <| Some "2234567890"
|
15
17
|
|
16
18
|
[<Fact(Skip = "Remove to run test")>]
|
17
|
-
let ``
|
18
|
-
|
19
|
+
let ``Cleans numbers with multiple spaces`` () =
|
20
|
+
clean "223 456 7890 " |> should equal <| Some "2234567890"
|
19
21
|
|
20
22
|
[<Fact(Skip = "Remove to run test")>]
|
21
|
-
let ``Invalid when
|
22
|
-
|
23
|
+
let ``Invalid when 9 digits`` () =
|
24
|
+
clean "123456789" |> should equal <| None
|
23
25
|
|
24
26
|
[<Fact(Skip = "Remove to run test")>]
|
25
|
-
let ``Invalid when
|
26
|
-
|
27
|
+
let ``Invalid when 11 digits does not start with a 1`` () =
|
28
|
+
clean "22234567890" |> should equal <| None
|
27
29
|
|
28
30
|
[<Fact(Skip = "Remove to run test")>]
|
29
|
-
let ``
|
30
|
-
|
31
|
+
let ``Valid when 11 digits and starting with 1`` () =
|
32
|
+
clean "12234567890" |> should equal <| Some "2234567890"
|
31
33
|
|
32
34
|
[<Fact(Skip = "Remove to run test")>]
|
33
|
-
let ``
|
34
|
-
|
35
|
+
let ``Valid when 11 digits and starting with 1 even with punctuation`` () =
|
36
|
+
clean "+1 (223) 456-7890" |> should equal <| Some "2234567890"
|
35
37
|
|
36
38
|
[<Fact(Skip = "Remove to run test")>]
|
37
|
-
let ``Invalid when
|
38
|
-
|
39
|
+
let ``Invalid when more than 11 digits`` () =
|
40
|
+
clean "321234567890" |> should equal <| None
|
39
41
|
|
40
42
|
[<Fact(Skip = "Remove to run test")>]
|
41
|
-
let ``
|
42
|
-
|
43
|
+
let ``Invalid with letters`` () =
|
44
|
+
clean "123-abc-7890" |> should equal <| None
|
43
45
|
|
44
46
|
[<Fact(Skip = "Remove to run test")>]
|
45
|
-
let ``
|
46
|
-
|
47
|
+
let ``Invalid with punctuations`` () =
|
48
|
+
clean "123-@:!-7890" |> should equal <| None
|
49
|
+
|
50
|
+
[<Fact(Skip = "Remove to run test")>]
|
51
|
+
let ``Invalid if area code does not start with 2-9`` () =
|
52
|
+
clean "(123) 456-7890" |> should equal <| None
|
53
|
+
|
54
|
+
[<Fact(Skip = "Remove to run test")>]
|
55
|
+
let ``Invalid if exchange code does not start with 2-9`` () =
|
56
|
+
clean "(223) 056-7890" |> should equal <| None
|
57
|
+
|
@@ -2,19 +2,12 @@
|
|
2
2
|
|
3
3
|
open System
|
4
4
|
|
5
|
-
let
|
6
|
-
|
7
|
-
for k in [-1L; 1L] do
|
8
|
-
yield n + k ]
|
9
|
-
|
10
|
-
let primeFactorsFor number =
|
11
|
-
let rec loop factors (remainder: int64) (possibleFactors: int64 list) =
|
12
|
-
match possibleFactors with
|
13
|
-
| [] -> factors |> List.rev
|
14
|
-
| factor::xs ->
|
5
|
+
let factors number =
|
6
|
+
let rec loop factors (remainder: int64) (factorToCheck: int64) =
|
15
7
|
match remainder with
|
16
8
|
| _ when remainder <= 1L -> factors |> List.rev
|
17
|
-
| _ when remainder %
|
18
|
-
|
9
|
+
| _ when remainder % factorToCheck = 0L
|
10
|
+
-> loop (int factorToCheck :: factors) (remainder / factorToCheck |> int64) factorToCheck
|
11
|
+
| _ -> loop factors remainder (factorToCheck+1L)
|
19
12
|
|
20
|
-
loop [] number
|
13
|
+
loop [] number 2L
|
@@ -1,46 +1,37 @@
|
|
1
|
+
// This file was auto-generated based on version 1.0.0 of the canonical data.
|
2
|
+
|
1
3
|
module PrimeFactorsTest
|
2
4
|
|
3
|
-
open Xunit
|
4
5
|
open FsUnit.Xunit
|
6
|
+
open Xunit
|
5
7
|
|
6
8
|
open PrimeFactors
|
7
9
|
|
8
10
|
[<Fact>]
|
9
|
-
let ``
|
10
|
-
|
11
|
-
|
12
|
-
[<Fact(Skip = "Remove to run test")>]
|
13
|
-
let ``Test 2`` () =
|
14
|
-
primeFactorsFor 2L |> should equal [2]
|
15
|
-
|
16
|
-
[<Fact(Skip = "Remove to run test")>]
|
17
|
-
let ``Test 3`` () =
|
18
|
-
primeFactorsFor 3L |> should equal [3]
|
11
|
+
let ``No factors`` () =
|
12
|
+
factors 1L |> should be Empty
|
19
13
|
|
20
14
|
[<Fact(Skip = "Remove to run test")>]
|
21
|
-
let ``
|
22
|
-
|
23
|
-
|
24
|
-
[<Fact(Skip = "Remove to run test")>]
|
25
|
-
let ``Test 6`` () =
|
26
|
-
primeFactorsFor 6L |> should equal [2; 3]
|
27
|
-
|
15
|
+
let ``Prime number`` () =
|
16
|
+
factors 2L |> should equal [2]
|
17
|
+
|
28
18
|
[<Fact(Skip = "Remove to run test")>]
|
29
|
-
let ``
|
30
|
-
|
31
|
-
|
19
|
+
let ``Square of a prime`` () =
|
20
|
+
factors 9L |> should equal [3; 3]
|
21
|
+
|
32
22
|
[<Fact(Skip = "Remove to run test")>]
|
33
|
-
let ``
|
34
|
-
|
35
|
-
|
23
|
+
let ``Cube of a prime`` () =
|
24
|
+
factors 8L |> should equal [2; 2; 2]
|
25
|
+
|
36
26
|
[<Fact(Skip = "Remove to run test")>]
|
37
|
-
let ``
|
38
|
-
|
39
|
-
|
27
|
+
let ``Product of primes and non-primes`` () =
|
28
|
+
factors 12L |> should equal [2; 2; 3]
|
29
|
+
|
40
30
|
[<Fact(Skip = "Remove to run test")>]
|
41
|
-
let ``
|
42
|
-
|
43
|
-
|
31
|
+
let ``Product of primes`` () =
|
32
|
+
factors 901255L |> should equal [5; 17; 23; 461]
|
33
|
+
|
44
34
|
[<Fact(Skip = "Remove to run test")>]
|
45
|
-
let ``
|
46
|
-
|
35
|
+
let ``Factors include a large prime`` () =
|
36
|
+
factors 93819012551L |> should equal [11; 9539; 894119]
|
37
|
+
|
@@ -1,42 +1,51 @@
|
|
1
|
+
// This file was auto-generated based on version 1.0.1 of the canonical data.
|
2
|
+
|
1
3
|
module RailFenceCipherTest
|
2
4
|
|
3
|
-
open Xunit
|
4
5
|
open FsUnit.Xunit
|
6
|
+
open Xunit
|
5
7
|
|
6
8
|
open RailFenceCipher
|
7
9
|
|
8
10
|
[<Fact>]
|
9
11
|
let ``Encode with two rails`` () =
|
10
|
-
let
|
12
|
+
let rails = 2
|
13
|
+
let msg = "XOXOXOXOXOXOXOXOXO"
|
11
14
|
let expected = "XXXXXXXXXOOOOOOOOO"
|
12
|
-
|
15
|
+
encode rails msg |> should equal expected
|
13
16
|
|
14
17
|
[<Fact(Skip = "Remove to run test")>]
|
15
18
|
let ``Encode with three rails`` () =
|
16
|
-
let
|
19
|
+
let rails = 3
|
20
|
+
let msg = "WEAREDISCOVEREDFLEEATONCE"
|
17
21
|
let expected = "WECRLTEERDSOEEFEAOCAIVDEN"
|
18
|
-
|
22
|
+
encode rails msg |> should equal expected
|
19
23
|
|
20
24
|
[<Fact(Skip = "Remove to run test")>]
|
21
25
|
let ``Encode with ending in the middle`` () =
|
22
|
-
let
|
26
|
+
let rails = 4
|
27
|
+
let msg = "EXERCISES"
|
23
28
|
let expected = "ESXIEECSR"
|
24
|
-
|
29
|
+
encode rails msg |> should equal expected
|
25
30
|
|
26
31
|
[<Fact(Skip = "Remove to run test")>]
|
27
32
|
let ``Decode with three rails`` () =
|
28
|
-
let
|
33
|
+
let rails = 3
|
34
|
+
let msg = "TEITELHDVLSNHDTISEIIEA"
|
29
35
|
let expected = "THEDEVILISINTHEDETAILS"
|
30
|
-
|
36
|
+
decode rails msg |> should equal expected
|
31
37
|
|
32
38
|
[<Fact(Skip = "Remove to run test")>]
|
33
39
|
let ``Decode with five rails`` () =
|
34
|
-
let
|
40
|
+
let rails = 5
|
41
|
+
let msg = "EIEXMSMESAORIWSCE"
|
35
42
|
let expected = "EXERCISMISAWESOME"
|
36
|
-
|
43
|
+
decode rails msg |> should equal expected
|
37
44
|
|
38
45
|
[<Fact(Skip = "Remove to run test")>]
|
39
46
|
let ``Decode with six rails`` () =
|
40
|
-
let
|
47
|
+
let rails = 6
|
48
|
+
let msg = "133714114238148966225439541018335470986172518171757571896261"
|
41
49
|
let expected = "112358132134558914423337761098715972584418167651094617711286"
|
42
|
-
|
50
|
+
decode rails msg |> should equal expected
|
51
|
+
|
@@ -204,11 +204,10 @@ type Exercise() =
|
|
204
204
|
|
205
205
|
default this.RenderSutParameters canonicalDataCase =
|
206
206
|
let sutParameterProperties = this.PropertiesUsedAsSutParameter canonicalDataCase
|
207
|
+
let renderSutParameter key = this.RenderSutParameter (canonicalDataCase, key, Map.find key canonicalDataCase.Properties)
|
207
208
|
|
208
|
-
|
209
|
-
|>
|
210
|
-
|> Map.fold (fun acc key value -> this.RenderSutParameter (canonicalDataCase, key, value) :: acc) []
|
211
|
-
|> List.rev
|
209
|
+
sutParameterProperties
|
210
|
+
|> List.map renderSutParameter
|
212
211
|
|
213
212
|
default this.RenderSutParameter (canonicalDataCase, key, value) =
|
214
213
|
this.RenderValueOrIdentifier (canonicalDataCase, key, value)
|
@@ -117,6 +117,18 @@ type Gigasecond() =
|
|
117
117
|
|
118
118
|
override this.AdditionalNamespaces = [typeof<DateTime>.Namespace]
|
119
119
|
|
120
|
+
type Grains() =
|
121
|
+
inherit Exercise()
|
122
|
+
|
123
|
+
override this.PropertiesWithIdentifier canonicalDataCase = ["expected"]
|
124
|
+
|
125
|
+
override this.IdentifierTypeAnnotation (canonicalDataCase, key, value) = Some "Result<uint64,string>"
|
126
|
+
|
127
|
+
override this.RenderExpected (canonicalDataCase, key, value) =
|
128
|
+
match string value with
|
129
|
+
| "-1" -> "Error \"Invalid input\""
|
130
|
+
| x -> sprintf "Ok %sUL" x
|
131
|
+
|
120
132
|
type HelloWorld() =
|
121
133
|
inherit Exercise()
|
122
134
|
|
@@ -167,9 +179,21 @@ type Minesweeper() =
|
|
167
179
|
type Pangram() =
|
168
180
|
inherit Exercise()
|
169
181
|
|
182
|
+
type PhoneNumber() =
|
183
|
+
inherit Exercise()
|
184
|
+
|
185
|
+
override this.RenderExpected (canonicalDataCase, key, value) =
|
186
|
+
value |> Option.ofObj |> formatValue |> backwardPipe
|
187
|
+
|
170
188
|
type PigLatin() =
|
171
189
|
inherit Exercise()
|
172
190
|
|
191
|
+
type PrimeFactors() =
|
192
|
+
inherit Exercise()
|
193
|
+
|
194
|
+
override this.RenderInput (canonicalDataCase, key, value) =
|
195
|
+
base.RenderInput (canonicalDataCase, key, value) |> sprintf "%sL"
|
196
|
+
|
173
197
|
type QueenAttack() =
|
174
198
|
inherit Exercise()
|
175
199
|
|
@@ -189,6 +213,13 @@ type QueenAttack() =
|
|
189
213
|
|
190
214
|
override this.PropertiesWithIdentifier canonicalDataCase = ["white_queen"; "black_queen"]
|
191
215
|
|
216
|
+
type RailFenceCipher() =
|
217
|
+
inherit Exercise()
|
218
|
+
|
219
|
+
override this.PropertiesWithIdentifier canonicalDataCase = ["rails"; "msg"; "expected"]
|
220
|
+
|
221
|
+
override this.PropertiesUsedAsSutParameter canonicalDataCase = ["rails"; "msg"]
|
222
|
+
|
192
223
|
type Raindrops() =
|
193
224
|
inherit Exercise()
|
194
225
|
|