trackler 2.0.3.7 → 2.0.3.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/common/exercises/largest-series-product/canonical-data.json +6 -18
- data/lib/trackler/version.rb +1 -1
- data/tracks/clojure/exercises/robot-name/src/example.clj +2 -3
- data/tracks/fsharp/build.fsx +5 -5
- data/tracks/fsharp/config.json +5 -5
- data/tracks/fsharp/exercises/difference-of-squares/HINTS.md +3 -0
- data/tracks/fsharp/exercises/grains/HINTS.md +4 -0
- data/tracks/fsharp/exercises/hello-world/HINTS.md +5 -0
- data/tracks/fsharp/exercises/rna-transcription/HINTS.md +3 -0
- data/tracks/fsharp/paket.lock +3 -3
- data/tracks/lisp/exercises/word-count/word-count-test.lisp +2 -2
- data/tracks/objective-c/.gitignore +1 -0
- data/tracks/objective-c/config.json +8 -0
- data/tracks/objective-c/exercises/allergies/AllergiesExample.m +1 -5
- data/tracks/objective-c/exercises/allergies/AllergiesTest.m +4 -4
- data/tracks/objective-c/exercises/clock/ClockExample.m +20 -15
- data/tracks/objective-c/exercises/clock/ClockTest.m +1 -1
- data/tracks/objective-c/exercises/gigasecond/GigasecondTest.m +18 -18
- data/tracks/objective-c/exercises/hello-world/HelloWorldExample.m +2 -2
- data/tracks/objective-c/exercises/isogram/IsogramExample.h +7 -0
- data/tracks/objective-c/exercises/isogram/IsogramExample.m +28 -0
- data/tracks/objective-c/exercises/isogram/IsogramTest.m +47 -0
- data/tracks/objective-c/exercises/largest-series-product/LargestSeriesProductExample.m +1 -1
- data/tracks/objective-c/exercises/largest-series-product/LargestSeriesProductTest.m +1 -1
- data/tracks/objective-c/exercises/meetup/MeetupExample.m +1 -3
- data/tracks/objective-c/exercises/secret-handshake/SecretHandshakeExample.m +6 -7
- data/tracks/objective-c/exercises/space-age/SpaceAgeTest.m +8 -8
- data/tracks/objective-c/exercises/sum-of-multiples/SumOfMultiplesExample.m +1 -1
- data/tracks/objective-c/exercises/transpose/TransposeTest.m +1 -1
- data/tracks/objective-c/exercises/triangle/TriangleExample.m +2 -2
- data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +18 -0
- data/tracks/perl6/.travis.yml +0 -4
- data/tracks/perl6/exercises/phone-number/Example.pm +2 -2
- data/tracks/perl6/exercises/phone-number/phone.t +1 -8
- data/tracks/scala/config.json +2 -1
- data/tracks/scala/exercises/sum-of-multiples/example.scala +1 -1
- data/tracks/scala/exercises/sum-of-multiples/src/main/scala/SumOfMultiples.scala +4 -0
- data/tracks/scala/exercises/sum-of-multiples/src/test/scala/SumOfMultiplesTest.scala +12 -12
- metadata +10 -3
- data/tracks/objective-c/xcodeProject/compile_commands.json +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26859b54fc9507930d1491868635aa16867347f6
|
4
|
+
data.tar.gz: 9b58994afd40bf481622cad4dcc0bb4528078ff8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f55463ac98a1e18ded0523c929796b44a226ead128bb7015de7161469b87e9dca58b4b2353ec203ce2e8e9f7d8c2deaa811991bcefa6beb32acf880312a684a
|
7
|
+
data.tar.gz: fd3ea88f64020af3af7fa037ef1de5afb2ad895873ef15d9e21efb0c94728c79faaeb30fada44974a6da4ee367789c6cfcee0f8d5d84d5d5177b2433540f41b8
|
@@ -13,6 +13,12 @@
|
|
13
13
|
"e.g. The implementation which makes a single pass through the digits."
|
14
14
|
],
|
15
15
|
"cases": [
|
16
|
+
{
|
17
|
+
"description": "finds the largest product if span equals length",
|
18
|
+
"digits": "29",
|
19
|
+
"span": 2,
|
20
|
+
"expected": 18
|
21
|
+
},
|
16
22
|
{
|
17
23
|
"description": "can find the largest product of 2 with numbers in order",
|
18
24
|
"digits": "0123456789",
|
@@ -25,12 +31,6 @@
|
|
25
31
|
"span": 2,
|
26
32
|
"expected": 48
|
27
33
|
},
|
28
|
-
{
|
29
|
-
"description": "finds the largest product if span equals length",
|
30
|
-
"digits": "29",
|
31
|
-
"span": 2,
|
32
|
-
"expected": 18
|
33
|
-
},
|
34
34
|
{
|
35
35
|
"description": "can find the largest product of 3 with numbers in order",
|
36
36
|
"digits": "0123456789",
|
@@ -55,18 +55,6 @@
|
|
55
55
|
"span": 6,
|
56
56
|
"expected": 23520
|
57
57
|
},
|
58
|
-
{
|
59
|
-
"description": "can get the largest product of a big number II",
|
60
|
-
"digits": "52677741234314237566414902593461595376319419139427",
|
61
|
-
"span": 6,
|
62
|
-
"expected": 28350
|
63
|
-
},
|
64
|
-
{
|
65
|
-
"description": "can get the largest product of a big number (Project Euler)",
|
66
|
-
"digits": "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450",
|
67
|
-
"span": 13,
|
68
|
-
"expected": 23514624000
|
69
|
-
},
|
70
58
|
{
|
71
59
|
"description": "reports zero if the only digits are zero",
|
72
60
|
"digits": "0000",
|
data/lib/trackler/version.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
(ns robot-name)
|
2
2
|
|
3
|
-
(def ^:private random (java.util.Random.))
|
4
3
|
(def ^:private letters (map char (range 65 91)))
|
5
4
|
(defn- generate-name []
|
6
|
-
(
|
7
|
-
|
5
|
+
(format "%s%03d" (apply str (repeatedly 2 #(rand-nth letters)))
|
6
|
+
(rand-int 1000)))
|
8
7
|
|
9
8
|
(defn robot []
|
10
9
|
(atom {:name (generate-name)}))
|
data/tracks/fsharp/build.fsx
CHANGED
@@ -21,19 +21,19 @@ Target "Copy" (fun _ -> CopyDir buildDir sourceDir allFiles)
|
|
21
21
|
|
22
22
|
Target "BuildUnchanged" (fun _ ->
|
23
23
|
MSBuildRelease buildDir "Build" [solutionFile]
|
24
|
-
|> Log "
|
24
|
+
|> Log "Build unchanged: "
|
25
25
|
)
|
26
26
|
|
27
27
|
Target "PrepareTests" (fun _ ->
|
28
|
-
let ignorePattern = "(\[<Ignore\(\"Remove to run test\"\)
|
28
|
+
let ignorePattern = "(\[<Ignore\(\"Remove to run test\"\)>\]|, Ignore = \"Remove to run test case\")"
|
29
29
|
|
30
|
-
!! (buildDir @@ "**/*Test
|
30
|
+
!! (buildDir @@ "**/*Test.fs")
|
31
31
|
|> RegexReplaceInFilesWithEncoding ignorePattern "" System.Text.Encoding.UTF8
|
32
32
|
)
|
33
33
|
|
34
34
|
Target "BuildWithAllTests" (fun _ ->
|
35
|
-
MSBuildRelease buildDir "
|
36
|
-
|> Log "
|
35
|
+
MSBuildRelease buildDir "Rebuild" [solutionFile]
|
36
|
+
|> Log "Build with tests: "
|
37
37
|
)
|
38
38
|
|
39
39
|
Target "Test" (fun _ ->
|
data/tracks/fsharp/config.json
CHANGED
@@ -13,18 +13,18 @@
|
|
13
13
|
]
|
14
14
|
},
|
15
15
|
{
|
16
|
-
"slug": "
|
16
|
+
"slug": "leap",
|
17
17
|
"difficulty": 1,
|
18
18
|
"topics": [
|
19
|
-
"
|
20
|
-
"Control-flow (if-else statements)"
|
19
|
+
"Integers"
|
21
20
|
]
|
22
21
|
},
|
23
22
|
{
|
24
|
-
"slug": "
|
23
|
+
"slug": "bob",
|
25
24
|
"difficulty": 1,
|
26
25
|
"topics": [
|
27
|
-
"
|
26
|
+
"Strings",
|
27
|
+
"Control-flow (if-else statements)"
|
28
28
|
]
|
29
29
|
},
|
30
30
|
{
|
@@ -0,0 +1,4 @@
|
|
1
|
+
## Hints
|
2
|
+
For this exercise the following F# feature comes in handy:
|
3
|
+
- [BigInt](https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/numerics.biginteger-structure-%5Bfsharp%5D)
|
4
|
+
- [Seq.sumBy](https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/seq.sumby%5B't,%5Eu%5D-function-%5Bfsharp%5D) is a condensed format to apply a function to a sequence and then sum the results
|
@@ -0,0 +1,5 @@
|
|
1
|
+
## Hints
|
2
|
+
For this exercise the following F# feature comes in handy:
|
3
|
+
- [Match Expressions](https://fsharpforfunandprofit.com/posts/match-expression/) Also known as pattern matching which is like a switch statement on steriods. It's a very powerful ability in the F# language and will come in handy in many of the exercises. While this example can be trivially solved with an if/else, pattern matching is more idiomatic.
|
4
|
+
- [sprintf](https://fsharpforfunandprofit.com/posts/printf/) While F# supports string concatenation using sprintf leads to easier to read solutions and is also idiomatic
|
5
|
+
- [defaultArg](https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/operators.defaultarg%5B't%5D-function-%5Bfsharp%5D) Default arg is useful when extracting a value from an option type and providing a value when None is encountered.
|
data/tracks/fsharp/paket.lock
CHANGED
@@ -12,8 +12,8 @@
|
|
12
12
|
values of the items must match. But the order is not
|
13
13
|
important. Equality is tested with equal"
|
14
14
|
(assert-equal
|
15
|
-
(sort expected #'string< :key #'car)
|
16
|
-
(sort actual #'string< :key #'car)))
|
15
|
+
(sort (copy-seq expected) #'string< :key #'car)
|
16
|
+
(sort (copy-seq actual) #'string< :key #'car)))
|
17
17
|
|
18
18
|
(define-test count-one-word
|
19
19
|
(assert-assoc-equal '(("word" . 1))
|
@@ -16,28 +16,28 @@
|
|
16
16
|
return @[@(AllergenEggs), @(AllergenPeanuts), @(AllergenShellfish), @(AllergenStrawberries), @(AllergenTomatoes), @(AllergenChocolate), @(AllergenPollen), @(AllergenCats)];
|
17
17
|
}
|
18
18
|
|
19
|
-
- (void)testAllergicToEggs {
|
19
|
+
- (void)testAllergicToEggs { //!OCLint
|
20
20
|
Allergies *allergies = [[Allergies alloc] initWithScore:1];
|
21
21
|
XCTAssertTrue([allergies hasAllergy:AllergenEggs]);
|
22
22
|
XCTAssertFalse([allergies hasAllergy:AllergenPeanuts]);
|
23
23
|
XCTAssertFalse([allergies hasAllergy:AllergenPollen]);
|
24
24
|
}
|
25
25
|
|
26
|
-
- (void)testAllergicToChocolate {
|
26
|
+
- (void)testAllergicToChocolate { //!OCLint
|
27
27
|
Allergies *allergies = [[Allergies alloc] initWithScore:32];
|
28
28
|
XCTAssertTrue([allergies hasAllergy:AllergenChocolate]);
|
29
29
|
XCTAssertFalse([allergies hasAllergy:AllergenEggs]);
|
30
30
|
XCTAssertFalse([allergies hasAllergy:AllergenTomatoes]);
|
31
31
|
}
|
32
32
|
|
33
|
-
- (void)testBob {
|
33
|
+
- (void)testBob { //!OCLint
|
34
34
|
Allergies *allergies = [[Allergies alloc] initWithScore:34];
|
35
35
|
XCTAssertTrue([allergies hasAllergy:AllergenPeanuts], "Bob is allergic to peanuts");
|
36
36
|
XCTAssertTrue([allergies hasAllergy:AllergenChocolate], "Bob is allergic to chocolate");
|
37
37
|
XCTAssertFalse([allergies hasAllergy:AllergenCats], "Bob is not allergic to cats");
|
38
38
|
}
|
39
39
|
|
40
|
-
- (void)testEggsAndCats {
|
40
|
+
- (void)testEggsAndCats { //!OCLint
|
41
41
|
Allergies *allergies = [[Allergies alloc] initWithScore:129];
|
42
42
|
XCTAssertTrue([allergies hasAllergy:AllergenEggs]);
|
43
43
|
XCTAssertTrue([allergies hasAllergy:AllergenCats]);
|
@@ -1,8 +1,13 @@
|
|
1
1
|
#import "ClockExample.h"
|
2
2
|
|
3
|
-
@
|
4
|
-
|
5
|
-
|
3
|
+
@interface Clock ()
|
4
|
+
|
5
|
+
@property (nonatomic, assign) int hours;
|
6
|
+
@property (nonatomic, assign) int minutes;
|
7
|
+
|
8
|
+
@end
|
9
|
+
|
10
|
+
@implementation Clock
|
6
11
|
|
7
12
|
+ (Clock *)clockWithHours:(int)hours minutes:(int)minutes {
|
8
13
|
return [[Clock alloc] initWithHours:hours minutes:minutes];
|
@@ -23,27 +28,27 @@
|
|
23
28
|
}
|
24
29
|
|
25
30
|
- (void)normalize {
|
26
|
-
if (
|
27
|
-
|
28
|
-
|
31
|
+
if (self.minutes >= 60) {
|
32
|
+
self.hours += self.minutes / 60;
|
33
|
+
self.minutes = self.minutes % 60;
|
29
34
|
}
|
30
35
|
|
31
|
-
while (
|
32
|
-
|
33
|
-
|
36
|
+
while (self.minutes < 0) {
|
37
|
+
self.hours -= 1;
|
38
|
+
self.minutes += 60;
|
34
39
|
}
|
35
40
|
|
36
|
-
if (
|
37
|
-
|
41
|
+
if (self.hours >= 24) {
|
42
|
+
self.hours = self.hours % 24;
|
38
43
|
}
|
39
44
|
|
40
|
-
while (
|
41
|
-
|
45
|
+
while (self.hours < 0) {
|
46
|
+
self.hours += 24;
|
42
47
|
}
|
43
48
|
}
|
44
49
|
|
45
50
|
- (Clock *)addMinutes:(int)minutes {
|
46
|
-
return [Clock clockWithHours:
|
51
|
+
return [Clock clockWithHours: self.hours minutes: self.minutes + minutes];
|
47
52
|
}
|
48
53
|
|
49
54
|
- (Clock *)subtractMinutes:(int)minutes {
|
@@ -51,7 +56,7 @@
|
|
51
56
|
}
|
52
57
|
|
53
58
|
- (NSString *)description {
|
54
|
-
return [NSString stringWithFormat:@"%.2d:%.2d",
|
59
|
+
return [NSString stringWithFormat:@"%.2d:%.2d", self.hours, self.minutes];
|
55
60
|
}
|
56
61
|
|
57
62
|
- (BOOL)isEqual:(id)object {
|
@@ -8,58 +8,58 @@
|
|
8
8
|
|
9
9
|
@interface GigasecondTest : XCTestCase
|
10
10
|
|
11
|
+
@property (nonatomic, strong) NSDateFormatter *dateFormatter;
|
12
|
+
|
11
13
|
@end
|
12
14
|
|
13
|
-
@implementation GigasecondTest
|
14
|
-
NSDateFormatter *_dateFormatter;
|
15
|
-
}
|
15
|
+
@implementation GigasecondTest
|
16
16
|
|
17
17
|
- (void)setUp {
|
18
18
|
[super setUp];
|
19
|
-
|
20
|
-
[
|
21
|
-
[
|
19
|
+
self.dateFormatter = [[NSDateFormatter alloc] init];
|
20
|
+
[self.dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
|
21
|
+
[self.dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
|
22
22
|
}
|
23
23
|
|
24
24
|
- (void)test1 {
|
25
|
-
NSDate *startDate = [
|
25
|
+
NSDate *startDate = [self.dateFormatter dateFromString:@"2011-04-25T00:00:00"];
|
26
26
|
Gigasecond *gigasecond = [[Gigasecond alloc] initWithStartDate:startDate];
|
27
|
-
NSDate *expectedDate = [
|
27
|
+
NSDate *expectedDate = [self.dateFormatter dateFromString:@"2043-01-01T01:46:40"];
|
28
28
|
XCTAssertEqualObjects(expectedDate, [gigasecond gigasecondDate]);
|
29
29
|
}
|
30
30
|
|
31
31
|
- (void)test2 {
|
32
|
-
NSDate *startDate = [
|
32
|
+
NSDate *startDate = [self.dateFormatter dateFromString:@"1977-06-13T00:00:00"];
|
33
33
|
Gigasecond *gigasecond = [[Gigasecond alloc] initWithStartDate:startDate];
|
34
|
-
NSDate *expectedDate = [
|
34
|
+
NSDate *expectedDate = [self.dateFormatter dateFromString:@"2009-02-19T01:46:40"];
|
35
35
|
XCTAssertEqualObjects(expectedDate, [gigasecond gigasecondDate]);
|
36
36
|
}
|
37
37
|
|
38
38
|
- (void)test3 {
|
39
|
-
NSDate *startDate = [
|
39
|
+
NSDate *startDate = [self.dateFormatter dateFromString:@"1959-07-19T00:00:00"];
|
40
40
|
Gigasecond *gigasecond = [[Gigasecond alloc] initWithStartDate:startDate];
|
41
|
-
NSDate *expectedDate = [
|
41
|
+
NSDate *expectedDate = [self.dateFormatter dateFromString:@"1991-03-27T01:46:40"];
|
42
42
|
XCTAssertEqualObjects(expectedDate, [gigasecond gigasecondDate]);
|
43
43
|
}
|
44
44
|
|
45
45
|
- (void)test24HourTime {
|
46
|
-
NSDate *startDate = [
|
46
|
+
NSDate *startDate = [self.dateFormatter dateFromString:@"2015-01-24T22:00:00"];
|
47
47
|
Gigasecond *gigasecond = [[Gigasecond alloc] initWithStartDate:startDate];
|
48
|
-
NSDate *expectedDate = [
|
48
|
+
NSDate *expectedDate = [self.dateFormatter dateFromString:@"2046-10-02T23:46:40"];
|
49
49
|
XCTAssertEqualObjects(expectedDate, [gigasecond gigasecondDate]);
|
50
50
|
}
|
51
51
|
|
52
52
|
- (void)testTimeWithSeconds {
|
53
|
-
NSDate *startDate = [
|
53
|
+
NSDate *startDate = [self.dateFormatter dateFromString:@"1959-07-19T23:59:59"];
|
54
54
|
Gigasecond *gigasecond = [[Gigasecond alloc] initWithStartDate:startDate];
|
55
|
-
NSDate *expectedDate = [
|
55
|
+
NSDate *expectedDate = [self.dateFormatter dateFromString:@"1991-03-28T01:46:39"];
|
56
56
|
XCTAssertEqualObjects(expectedDate, [gigasecond gigasecondDate]);
|
57
57
|
}
|
58
58
|
|
59
59
|
- (void)testFullTimeWithDayRollOver {
|
60
|
-
NSDate *startDate = [
|
60
|
+
NSDate *startDate = [self.dateFormatter dateFromString:@"2015-01-24T23:59:59"];
|
61
61
|
Gigasecond *gigasecond = [[Gigasecond alloc] initWithStartDate:startDate];
|
62
|
-
NSDate *expectedDate = [
|
62
|
+
NSDate *expectedDate = [self.dateFormatter dateFromString:@"2046-10-03T01:46:39"];
|
63
63
|
XCTAssertEqualObjects(expectedDate, [gigasecond gigasecondDate]);
|
64
64
|
}
|
65
65
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#import "IsogramExample.h"
|
2
|
+
|
3
|
+
@implementation Isogram
|
4
|
+
|
5
|
+
+ (BOOL)isIsogram:(NSString *)string {
|
6
|
+
NSString *lowercasedString = string.lowercaseString;
|
7
|
+
NSCharacterSet *lowercaseLetterSet = [NSCharacterSet lowercaseLetterCharacterSet];
|
8
|
+
|
9
|
+
NSMutableSet<NSNumber *> *letters = [[NSMutableSet alloc] init];
|
10
|
+
|
11
|
+
for (int i = 0; i < [lowercasedString length]; i++) {
|
12
|
+
unichar character = [lowercasedString characterAtIndex:i];
|
13
|
+
if (![lowercaseLetterSet characterIsMember:character]) {
|
14
|
+
continue;
|
15
|
+
}
|
16
|
+
|
17
|
+
NSNumber *numberForCharacter = [NSNumber numberWithUnsignedShort:character];
|
18
|
+
if ([letters containsObject:numberForCharacter]) {
|
19
|
+
return NO;
|
20
|
+
}
|
21
|
+
|
22
|
+
[letters addObject:numberForCharacter];
|
23
|
+
}
|
24
|
+
|
25
|
+
return YES;
|
26
|
+
}
|
27
|
+
|
28
|
+
@end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#import <XCTest/XCTest.h>
|
2
|
+
|
3
|
+
#if __has_include("IsogramExample.h")
|
4
|
+
# import "IsogramExample.h"
|
5
|
+
# else
|
6
|
+
# import "Isogram.h"
|
7
|
+
#endif
|
8
|
+
|
9
|
+
@interface IsogramTest : XCTestCase
|
10
|
+
|
11
|
+
@end
|
12
|
+
|
13
|
+
@implementation IsogramTest
|
14
|
+
|
15
|
+
- (void)testEmptyString {
|
16
|
+
XCTAssertTrue([Isogram isIsogram:@""]);
|
17
|
+
}
|
18
|
+
|
19
|
+
- (void)testIsogramWithOnlyLowerCaseCharacters {
|
20
|
+
XCTAssertTrue([Isogram isIsogram:@"isogram"]);
|
21
|
+
}
|
22
|
+
|
23
|
+
- (void)testWordWithOneDuplicatedCharacter {
|
24
|
+
XCTAssertFalse([Isogram isIsogram:@"eleven"]);
|
25
|
+
}
|
26
|
+
|
27
|
+
- (void)testLongestReportedEnglishIsogram {
|
28
|
+
XCTAssertTrue([Isogram isIsogram:@"subdermatoglyphic"]);
|
29
|
+
}
|
30
|
+
|
31
|
+
- (void)testWordWithDuplicatedCharacterInMixedCase {
|
32
|
+
XCTAssertFalse([Isogram isIsogram:@"Alphabet"]);
|
33
|
+
}
|
34
|
+
|
35
|
+
- (void)testHypotheticalIsogrammicWordWithHyphen {
|
36
|
+
XCTAssertTrue([Isogram isIsogram:@"thumbscrew-japingly"]);
|
37
|
+
}
|
38
|
+
|
39
|
+
- (void)testIsogramWithDuplicatedNonLetterCharacter {
|
40
|
+
XCTAssertTrue([Isogram isIsogram:@"Hjelmqvist-Gryb-Zock-Pfund-Wax"]);
|
41
|
+
}
|
42
|
+
|
43
|
+
- (void)testMadeUpNameThatIsAnIsogram {
|
44
|
+
XCTAssertTrue([Isogram isIsogram:@"Emily Jung Schwartzkopf"]);
|
45
|
+
}
|
46
|
+
|
47
|
+
@end
|
@@ -5,7 +5,7 @@
|
|
5
5
|
}
|
6
6
|
|
7
7
|
- (instancetype)initWithNumberString:(NSString *)numberString {
|
8
|
-
if (self = [super init]) {
|
8
|
+
if (self = [super init]) { //!OCLint
|
9
9
|
NSMutableArray<NSNumber *> *numbers = [[NSMutableArray alloc] initWithCapacity:[numberString length]];
|
10
10
|
NSCharacterSet *decimalSet = [NSCharacterSet decimalDigitCharacterSet];
|
11
11
|
|
@@ -46,7 +46,7 @@
|
|
46
46
|
}
|
47
47
|
|
48
48
|
- (void)testCanGetTheLargestProductOfABigNumberProjectEuler {
|
49
|
-
XCTAssertEqual(23514624000, [[[LargestSeriesProduct alloc] initWithNumberString:@"7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"] largestProduct:13]);
|
49
|
+
XCTAssertEqual(23514624000, [[[LargestSeriesProduct alloc] initWithNumberString:@"7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"] largestProduct:13]); //!OCLINT
|
50
50
|
}
|
51
51
|
|
52
52
|
- (void)testReportsZeroIfTheOnlyDigitsAreZero {
|
@@ -14,7 +14,7 @@
|
|
14
14
|
return self;
|
15
15
|
}
|
16
16
|
|
17
|
-
- (NSDate *)dayForDayOfWeek:(MeetupDayOfWeek)dayOfWeek andOptions:(MeetupOptions)options {
|
17
|
+
- (NSDate *)dayForDayOfWeek:(MeetupDayOfWeek)dayOfWeek andOptions:(MeetupOptions)options { //!OCLINT
|
18
18
|
NSDateComponents *components = [[NSDateComponents alloc] init];
|
19
19
|
components.year = _year;
|
20
20
|
components.month = _month;
|
@@ -39,8 +39,6 @@
|
|
39
39
|
case MeetupOptionsTeenth:
|
40
40
|
components.day = 13;
|
41
41
|
break;
|
42
|
-
default:
|
43
|
-
break;
|
44
42
|
}
|
45
43
|
|
46
44
|
while ([self weekdayFromComponents:components] != dayOfWeek) {
|
@@ -13,27 +13,26 @@
|
|
13
13
|
+ (NSArray<NSString *> *)commandsForNumber:(int)number {
|
14
14
|
NSMutableArray *result = [[NSMutableArray alloc] init];
|
15
15
|
|
16
|
-
if (number & 1 << 0) {
|
16
|
+
if (number & 1 << 0) { //!OCLINT
|
17
17
|
[result addObject:@"wink"];
|
18
18
|
}
|
19
19
|
|
20
|
-
if (number & 1 << 1) {
|
20
|
+
if (number & 1 << 1) { //!OCLINT
|
21
21
|
[result addObject:@"double blink"];
|
22
22
|
}
|
23
23
|
|
24
|
-
if (number & 1 << 2) {
|
24
|
+
if (number & 1 << 2) { //!OCLINT
|
25
25
|
[result addObject:@"close your eyes"];
|
26
26
|
}
|
27
27
|
|
28
|
-
if (number & 1 << 3) {
|
28
|
+
if (number & 1 << 3) { //!OCLINT
|
29
29
|
[result addObject:@"jump"];
|
30
30
|
}
|
31
31
|
|
32
|
-
if (number & 1 << 4) {
|
32
|
+
if (number & 1 << 4) { //!OCLINT
|
33
33
|
return [[result reverseObjectEnumerator] allObjects];
|
34
|
-
} else {
|
35
|
-
return result;
|
36
34
|
}
|
35
|
+
return result;
|
37
36
|
}
|
38
37
|
|
39
38
|
@end
|
@@ -21,48 +21,48 @@ static const double AgeAccuracy = 0.01;
|
|
21
21
|
XCTAssertEqual(1000000, age.seconds);
|
22
22
|
}
|
23
23
|
|
24
|
-
- (void)testAgeInEarthYears {
|
24
|
+
- (void)testAgeInEarthYears { //!OCLINT
|
25
25
|
SpaceAge *age = [[SpaceAge alloc] initWithSeconds:1000000000];
|
26
26
|
XCTAssertEqualWithAccuracy(31.69, age.onEarth, AgeAccuracy);
|
27
27
|
}
|
28
28
|
|
29
|
-
- (void)testAgeInMercuryYears {
|
29
|
+
- (void)testAgeInMercuryYears { //!OCLINT
|
30
30
|
SpaceAge *age = [[SpaceAge alloc] initWithSeconds:2134835688];
|
31
31
|
XCTAssertEqualWithAccuracy(67.65, age.onEarth, AgeAccuracy);
|
32
32
|
XCTAssertEqualWithAccuracy(280.88, age.onMercury, AgeAccuracy);
|
33
33
|
}
|
34
34
|
|
35
|
-
- (void)testAgeInVenusYears {
|
35
|
+
- (void)testAgeInVenusYears { //!OCLINT
|
36
36
|
SpaceAge *age = [[SpaceAge alloc] initWithSeconds:189839836];
|
37
37
|
XCTAssertEqualWithAccuracy(6.02, age.onEarth, AgeAccuracy);
|
38
38
|
XCTAssertEqualWithAccuracy(9.78, age.onVenus, AgeAccuracy);
|
39
39
|
}
|
40
40
|
|
41
|
-
- (void)testAgeOnMars {
|
41
|
+
- (void)testAgeOnMars { //!OCLINT
|
42
42
|
SpaceAge *age = [[SpaceAge alloc] initWithSeconds:2329871239];
|
43
43
|
XCTAssertEqualWithAccuracy(73.83, age.onEarth, AgeAccuracy);
|
44
44
|
XCTAssertEqualWithAccuracy(39.25, age.onMars, AgeAccuracy);
|
45
45
|
}
|
46
46
|
|
47
|
-
- (void)testAgeOnJupiter {
|
47
|
+
- (void)testAgeOnJupiter { //!OCLINT
|
48
48
|
SpaceAge *age = [[SpaceAge alloc] initWithSeconds:901876382];
|
49
49
|
XCTAssertEqualWithAccuracy(28.58, age.onEarth, AgeAccuracy);
|
50
50
|
XCTAssertEqualWithAccuracy(2.41, age.onJupiter, AgeAccuracy);
|
51
51
|
}
|
52
52
|
|
53
|
-
- (void)testAgeOnSaturn {
|
53
|
+
- (void)testAgeOnSaturn { //!OCLINT
|
54
54
|
SpaceAge *age = [[SpaceAge alloc] initWithSeconds:3000000000];
|
55
55
|
XCTAssertEqualWithAccuracy(95.06, age.onEarth, AgeAccuracy);
|
56
56
|
XCTAssertEqualWithAccuracy(3.23, age.onSaturn, AgeAccuracy);
|
57
57
|
}
|
58
58
|
|
59
|
-
- (void)testAgeOnUranus {
|
59
|
+
- (void)testAgeOnUranus { //!OCLINT
|
60
60
|
SpaceAge *age = [[SpaceAge alloc] initWithSeconds:3210123456];
|
61
61
|
XCTAssertEqualWithAccuracy(101.72, age.onEarth, AgeAccuracy);
|
62
62
|
XCTAssertEqualWithAccuracy(1.21, age.onUranus, AgeAccuracy);
|
63
63
|
}
|
64
64
|
|
65
|
-
- (void)testAgeOnNeptune {
|
65
|
+
- (void)testAgeOnNeptune { //!OCLINT
|
66
66
|
SpaceAge *age = [[SpaceAge alloc] initWithSeconds:8210123456];
|
67
67
|
XCTAssertEqualWithAccuracy(260.16, age.onEarth, AgeAccuracy);
|
68
68
|
XCTAssertEqualWithAccuracy(1.58, age.onNeptune, AgeAccuracy);
|
@@ -70,7 +70,7 @@
|
|
70
70
|
XCTAssertEqualObjects([Transpose transpose:input], expected);
|
71
71
|
}
|
72
72
|
|
73
|
-
- (void)testManyLines {
|
73
|
+
- (void)testManyLines { //!OCLINT
|
74
74
|
NSArray<NSString *> *input = @[@"Chor. Two households, both alike in dignity,",
|
75
75
|
@"In fair Verona, where we lay our scene,",
|
76
76
|
@"From ancient grudge break to new mutiny,",
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
@implementation Triangle
|
4
4
|
|
5
|
-
+ (TriangleKind)kindForSides:(double)a :(double)b :(double)c {
|
5
|
+
+ (TriangleKind)kindForSides:(double)a :(double)b :(double)c { //!OCLINT
|
6
6
|
if (a <= 0 || b <= 0 || c <= 0) {
|
7
7
|
@throw [NSException exceptionWithName:@"Invalid triangle" reason:@"All lengths must be positive" userInfo:nil];
|
8
8
|
} else if (a + b <= c || b + c <= a || a + c <= b) {
|
@@ -13,7 +13,7 @@
|
|
13
13
|
return TriangleKindEquilateral;
|
14
14
|
} else if (a == b || b == c || a == c) {
|
15
15
|
return TriangleKindIsosceles;
|
16
|
-
} else {
|
16
|
+
} else { //!OCLINT
|
17
17
|
return TriangleKindScalene;
|
18
18
|
}
|
19
19
|
}
|
@@ -79,6 +79,8 @@
|
|
79
79
|
E9C1C02B1D9DB1830015E86E /* AcronymTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E9C1C02A1D9DB1830015E86E /* AcronymTest.m */; };
|
80
80
|
E9C1C02F1D9EC1130015E86E /* RunLengthEncodingExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E9C1C02E1D9EC1130015E86E /* RunLengthEncodingExample.m */; };
|
81
81
|
E9C1C0311D9EC1270015E86E /* RunLengthEncodingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E9C1C0301D9EC1270015E86E /* RunLengthEncodingTest.m */; };
|
82
|
+
E9F390071DFCA337005C5F46 /* IsogramExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E9F390061DFCA337005C5F46 /* IsogramExample.m */; };
|
83
|
+
E9F390091DFCA350005C5F46 /* IsogramTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E9F390081DFCA350005C5F46 /* IsogramTest.m */; };
|
82
84
|
E9FDCA191D5407D2004EE8DB /* RomanNumeralsExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E9FDCA181D5407D2004EE8DB /* RomanNumeralsExample.m */; };
|
83
85
|
E9FDCA1B1D540801004EE8DB /* RomanNumeralsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E9FDCA1A1D540801004EE8DB /* RomanNumeralsTest.m */; };
|
84
86
|
/* End PBXBuildFile section */
|
@@ -173,6 +175,9 @@
|
|
173
175
|
E9C1C02D1D9EC1130015E86E /* RunLengthEncodingExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RunLengthEncodingExample.h; path = "../../exercises/run-length-encoding/RunLengthEncodingExample.h"; sourceTree = "<group>"; };
|
174
176
|
E9C1C02E1D9EC1130015E86E /* RunLengthEncodingExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RunLengthEncodingExample.m; path = "../../exercises/run-length-encoding/RunLengthEncodingExample.m"; sourceTree = "<group>"; };
|
175
177
|
E9C1C0301D9EC1270015E86E /* RunLengthEncodingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RunLengthEncodingTest.m; path = "../../exercises/run-length-encoding/RunLengthEncodingTest.m"; sourceTree = "<group>"; };
|
178
|
+
E9F390051DFCA337005C5F46 /* IsogramExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsogramExample.h; path = ../../exercises/isogram/IsogramExample.h; sourceTree = "<group>"; };
|
179
|
+
E9F390061DFCA337005C5F46 /* IsogramExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IsogramExample.m; path = ../../exercises/isogram/IsogramExample.m; sourceTree = "<group>"; };
|
180
|
+
E9F390081DFCA350005C5F46 /* IsogramTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IsogramTest.m; path = ../../exercises/isogram/IsogramTest.m; sourceTree = "<group>"; };
|
176
181
|
E9FDCA171D5407D2004EE8DB /* RomanNumeralsExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RomanNumeralsExample.h; path = "../../exercises/roman-numerals/RomanNumeralsExample.h"; sourceTree = "<group>"; };
|
177
182
|
E9FDCA181D5407D2004EE8DB /* RomanNumeralsExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RomanNumeralsExample.m; path = "../../exercises/roman-numerals/RomanNumeralsExample.m"; sourceTree = "<group>"; };
|
178
183
|
E9FDCA1A1D540801004EE8DB /* RomanNumeralsTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RomanNumeralsTest.m; path = "../../exercises/roman-numerals/RomanNumeralsTest.m"; sourceTree = "<group>"; };
|
@@ -204,6 +209,7 @@
|
|
204
209
|
E9E8B6EE1D519DFE0012F12C /* GradeSchool */,
|
205
210
|
E9E8B6EF1D519E040012F12C /* Hamming */,
|
206
211
|
E9E8B6F01D519E0B0012F12C /* HelloWorld */,
|
212
|
+
E9F390041DFCA307005C5F46 /* Isogram */,
|
207
213
|
E9A7B2F41DA5ABA3009056B6 /* LargestSeriesProduct */,
|
208
214
|
E9E8B6F11D519E120012F12C /* Leap */,
|
209
215
|
E92FCC0A1D78F2AA00061017 /* Meetup */,
|
@@ -533,6 +539,16 @@
|
|
533
539
|
name = WordCount;
|
534
540
|
sourceTree = "<group>";
|
535
541
|
};
|
542
|
+
E9F390041DFCA307005C5F46 /* Isogram */ = {
|
543
|
+
isa = PBXGroup;
|
544
|
+
children = (
|
545
|
+
E9F390051DFCA337005C5F46 /* IsogramExample.h */,
|
546
|
+
E9F390061DFCA337005C5F46 /* IsogramExample.m */,
|
547
|
+
E9F390081DFCA350005C5F46 /* IsogramTest.m */,
|
548
|
+
);
|
549
|
+
name = Isogram;
|
550
|
+
sourceTree = "<group>";
|
551
|
+
};
|
536
552
|
E9FDCA161D540793004EE8DB /* RomanNumerals */ = {
|
537
553
|
isa = PBXGroup;
|
538
554
|
children = (
|
@@ -648,6 +664,7 @@
|
|
648
664
|
E907D0CA1D6B731600106C42 /* GigasecondExample.m in Sources */,
|
649
665
|
E9381D521D8F2DCC003F22A1 /* ClockExample.m in Sources */,
|
650
666
|
E99D1D811D5533BF0006A303 /* SumOfMultiplesExample.m in Sources */,
|
667
|
+
E9F390071DFCA337005C5F46 /* IsogramExample.m in Sources */,
|
651
668
|
E9C1C02F1D9EC1130015E86E /* RunLengthEncodingExample.m in Sources */,
|
652
669
|
E92FCC0F1D78F3B600061017 /* MeetupTest.m in Sources */,
|
653
670
|
E9381D4E1D8F2982003F22A1 /* RaindropsTest.m in Sources */,
|
@@ -664,6 +681,7 @@
|
|
664
681
|
1EFACAA91CCCAF3D006F2E69 /* GradeSchoolExample.m in Sources */,
|
665
682
|
1EFACABA1CCCAF3D006F2E69 /* SpaceAgeTest.m in Sources */,
|
666
683
|
1EFACAB91CCCAF3D006F2E69 /* SpaceAgeExample.m in Sources */,
|
684
|
+
E9F390091DFCA350005C5F46 /* IsogramTest.m in Sources */,
|
667
685
|
E951B6B71D4294E6009EB5B6 /* AllergiesExample.m in Sources */,
|
668
686
|
E9FDCA1B1D540801004EE8DB /* RomanNumeralsTest.m in Sources */,
|
669
687
|
E9C1C0231D9D993E0015E86E /* SecretHandshakeExample.m in Sources */,
|
data/tracks/perl6/.travis.yml
CHANGED
@@ -11,8 +11,8 @@ class Phone {
|
|
11
11
|
method new (:$number!) {
|
12
12
|
my $validated = $number;
|
13
13
|
$validated ~~ s:g/<:!Decimal_Number>//;
|
14
|
-
$validated ~~ /^ 1? (\d ** 10) $/ ?? ($validated = ~$0) !! X::Phone::Invalid.new(
|
15
|
-
self.bless(
|
14
|
+
$validated ~~ /^ 1? (\d ** 10) $/ ?? ($validated = ~$0) !! X::Phone::Invalid.new(payload => $number).throw;
|
15
|
+
self.bless(number => $validated);
|
16
16
|
}
|
17
17
|
|
18
18
|
method area-code {
|
@@ -7,13 +7,6 @@ use lib my $path = IO::Path.new($?FILE).parent.path;
|
|
7
7
|
BEGIN {
|
8
8
|
plan 12;
|
9
9
|
use-ok %*ENV<EXERCISM> ?? 'Example' !! 'Phone', 'Module loaded';
|
10
|
-
|
11
|
-
unless $*PERL.compiler.version ~~ v2016.10+ {
|
12
|
-
sub bail-out {};
|
13
|
-
note 'Perl 6 ' ~ $*PERL.compiler.version ~ ' is not supported. Please use v2016.10 or newer';
|
14
|
-
skip-rest;
|
15
|
-
exit;
|
16
|
-
}
|
17
10
|
}
|
18
11
|
|
19
12
|
my %tests = from-json open("$path/cases.json").slurp-rest;
|
@@ -23,7 +16,7 @@ subtest 'number, area-code and pretty methods', {
|
|
23
16
|
ok Phone.can('number'), 'can Phone.number';
|
24
17
|
ok Phone.can('area-code'), 'can Phone.area-code';
|
25
18
|
ok Phone.can('pretty'), 'can Phone.pretty';
|
26
|
-
} or
|
19
|
+
} or fail 'Missing method(s).';
|
27
20
|
|
28
21
|
for @(%tests<valid>) {
|
29
22
|
my $phone = Phone.new(number => .<input>);
|
data/tracks/scala/config.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
object SumOfMultiples {
|
2
|
-
def sumOfMultiples(factors:
|
2
|
+
def sumOfMultiples(factors: Set[Int], limit: Int): Int = {
|
3
3
|
def isDivisibleBy(x: Int)(y: Int): Boolean = x % y == 0
|
4
4
|
def isMultiple(x: Int): Boolean = factors exists isDivisibleBy(x)
|
5
5
|
|
@@ -2,61 +2,61 @@ import org.scalatest.{FunSuite, Matchers}
|
|
2
2
|
|
3
3
|
class SumOfMultiplesTest extends FunSuite with Matchers {
|
4
4
|
test("[3, 5] 1") {
|
5
|
-
SumOfMultiples.sumOfMultiples(
|
5
|
+
SumOfMultiples.sumOfMultiples(Set(3, 5), 1) should be (0)
|
6
6
|
}
|
7
7
|
|
8
8
|
test("[3, 5] 4") {
|
9
9
|
pending
|
10
|
-
SumOfMultiples.sumOfMultiples(
|
10
|
+
SumOfMultiples.sumOfMultiples(Set(3, 5), 4) should be (3)
|
11
11
|
}
|
12
12
|
|
13
13
|
test("[3, 5] 10") {
|
14
14
|
pending
|
15
|
-
SumOfMultiples.sumOfMultiples(
|
15
|
+
SumOfMultiples.sumOfMultiples(Set(3, 5), 10) should be (23)
|
16
16
|
}
|
17
17
|
|
18
18
|
test("[3, 5] 100") {
|
19
19
|
pending
|
20
|
-
SumOfMultiples.sumOfMultiples(
|
20
|
+
SumOfMultiples.sumOfMultiples(Set(3, 5), 100) should be (2318)
|
21
21
|
}
|
22
22
|
|
23
23
|
test("[3, 5] 1000") {
|
24
24
|
pending
|
25
|
-
SumOfMultiples.sumOfMultiples(
|
25
|
+
SumOfMultiples.sumOfMultiples(Set(3, 5), 1000) should be (233168)
|
26
26
|
}
|
27
27
|
|
28
28
|
test("[7, 13, 17] 20") {
|
29
29
|
pending
|
30
|
-
SumOfMultiples.sumOfMultiples(
|
30
|
+
SumOfMultiples.sumOfMultiples(Set(7, 13, 17), 20) should be (51)
|
31
31
|
}
|
32
32
|
|
33
33
|
test("[4, 6] 15") {
|
34
34
|
pending
|
35
|
-
SumOfMultiples.sumOfMultiples(
|
35
|
+
SumOfMultiples.sumOfMultiples(Set(4, 6), 15) should be (30)
|
36
36
|
}
|
37
37
|
|
38
38
|
test("[5, 6, 8] 150") {
|
39
39
|
pending
|
40
|
-
SumOfMultiples.sumOfMultiples(
|
40
|
+
SumOfMultiples.sumOfMultiples(Set(5, 6, 8), 150) should be (4419)
|
41
41
|
}
|
42
42
|
|
43
43
|
test("[5, 25] 51") {
|
44
44
|
pending
|
45
|
-
SumOfMultiples.sumOfMultiples(
|
45
|
+
SumOfMultiples.sumOfMultiples(Set(5, 25), 51) should be (275)
|
46
46
|
}
|
47
47
|
|
48
48
|
test("[43, 47] 10000") {
|
49
49
|
pending
|
50
|
-
SumOfMultiples.sumOfMultiples(
|
50
|
+
SumOfMultiples.sumOfMultiples(Set(43, 47), 10000) should be (2203160)
|
51
51
|
}
|
52
52
|
|
53
53
|
test("[1] 100") {
|
54
54
|
pending
|
55
|
-
SumOfMultiples.sumOfMultiples(
|
55
|
+
SumOfMultiples.sumOfMultiples(Set(1), 100) should be (4950)
|
56
56
|
}
|
57
57
|
|
58
58
|
test("[] 10000") {
|
59
59
|
pending
|
60
|
-
SumOfMultiples.sumOfMultiples(
|
60
|
+
SumOfMultiples.sumOfMultiples(Set(), 10000) should be (0)
|
61
61
|
}
|
62
62
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trackler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.3.
|
4
|
+
version: 2.0.3.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katrina Owen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -2443,6 +2443,7 @@ files:
|
|
2443
2443
|
- tracks/fsharp/exercises/diamond/Example.fs
|
2444
2444
|
- tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquaresTest.fs
|
2445
2445
|
- tracks/fsharp/exercises/difference-of-squares/Example.fs
|
2446
|
+
- tracks/fsharp/exercises/difference-of-squares/HINTS.md
|
2446
2447
|
- tracks/fsharp/exercises/diffie-hellman/DiffieHellmanTest.fs
|
2447
2448
|
- tracks/fsharp/exercises/diffie-hellman/Example.fs
|
2448
2449
|
- tracks/fsharp/exercises/dominoes/DominoesTest.fs
|
@@ -2466,6 +2467,7 @@ files:
|
|
2466
2467
|
- tracks/fsharp/exercises/grade-school/GradeSchoolTest.fs
|
2467
2468
|
- tracks/fsharp/exercises/grains/Example.fs
|
2468
2469
|
- tracks/fsharp/exercises/grains/GrainsTest.fs
|
2470
|
+
- tracks/fsharp/exercises/grains/HINTS.md
|
2469
2471
|
- tracks/fsharp/exercises/grep/Example.fs
|
2470
2472
|
- tracks/fsharp/exercises/grep/GrepTest.fs
|
2471
2473
|
- tracks/fsharp/exercises/hamming/Example.fs
|
@@ -2473,6 +2475,7 @@ files:
|
|
2473
2475
|
- tracks/fsharp/exercises/hangman/Example.fs
|
2474
2476
|
- tracks/fsharp/exercises/hangman/HangmanTest.fs
|
2475
2477
|
- tracks/fsharp/exercises/hello-world/Example.fs
|
2478
|
+
- tracks/fsharp/exercises/hello-world/HINTS.md
|
2476
2479
|
- tracks/fsharp/exercises/hello-world/HelloWorldTest.fs
|
2477
2480
|
- tracks/fsharp/exercises/house/Example.fs
|
2478
2481
|
- tracks/fsharp/exercises/house/HouseTest.fs
|
@@ -2546,6 +2549,7 @@ files:
|
|
2546
2549
|
- tracks/fsharp/exercises/rectangles/Example.fs
|
2547
2550
|
- tracks/fsharp/exercises/rectangles/RectanglesTest.fs
|
2548
2551
|
- tracks/fsharp/exercises/rna-transcription/Example.fs
|
2552
|
+
- tracks/fsharp/exercises/rna-transcription/HINTS.md
|
2549
2553
|
- tracks/fsharp/exercises/rna-transcription/RNATranscriptionTest.fs
|
2550
2554
|
- tracks/fsharp/exercises/robot-name/Example.fs
|
2551
2555
|
- tracks/fsharp/exercises/robot-name/RobotNameTest.fs
|
@@ -4712,6 +4716,9 @@ files:
|
|
4712
4716
|
- tracks/objective-c/exercises/hello-world/HelloWorldExample.h
|
4713
4717
|
- tracks/objective-c/exercises/hello-world/HelloWorldExample.m
|
4714
4718
|
- tracks/objective-c/exercises/hello-world/HelloWorldTest.m
|
4719
|
+
- tracks/objective-c/exercises/isogram/IsogramExample.h
|
4720
|
+
- tracks/objective-c/exercises/isogram/IsogramExample.m
|
4721
|
+
- tracks/objective-c/exercises/isogram/IsogramTest.m
|
4715
4722
|
- tracks/objective-c/exercises/largest-series-product/LargestSeriesProductExample.h
|
4716
4723
|
- tracks/objective-c/exercises/largest-series-product/LargestSeriesProductExample.m
|
4717
4724
|
- tracks/objective-c/exercises/largest-series-product/LargestSeriesProductTest.m
|
@@ -4771,7 +4778,6 @@ files:
|
|
4771
4778
|
- tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
4772
4779
|
- tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/xcshareddata/xcschemes/OCLint.xcscheme
|
4773
4780
|
- tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/xcshareddata/xcschemes/xobjectivecTest.xcscheme
|
4774
|
-
- tracks/objective-c/xcodeProject/compile_commands.json
|
4775
4781
|
- tracks/objective-c/xcodeProject/xobjectivecTest/Info.plist
|
4776
4782
|
- tracks/ocaml/.git
|
4777
4783
|
- tracks/ocaml/.gitignore
|
@@ -6603,6 +6609,7 @@ files:
|
|
6603
6609
|
- tracks/scala/exercises/sum-of-multiples/build.sbt
|
6604
6610
|
- tracks/scala/exercises/sum-of-multiples/example.scala
|
6605
6611
|
- tracks/scala/exercises/sum-of-multiples/src/main/scala/.keep
|
6612
|
+
- tracks/scala/exercises/sum-of-multiples/src/main/scala/SumOfMultiples.scala
|
6606
6613
|
- tracks/scala/exercises/sum-of-multiples/src/test/scala/SumOfMultiplesTest.scala
|
6607
6614
|
- tracks/scala/exercises/triangle/build.sbt
|
6608
6615
|
- tracks/scala/exercises/triangle/example.scala
|