trackler 2.0.8.26 → 2.0.8.27

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.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/simple-cipher/description.md +4 -2
  3. data/lib/trackler/version.rb +1 -1
  4. data/tracks/csharp/appveyor.yml +4 -1
  5. data/tracks/ecmascript/README.md +1 -1
  6. data/tracks/haskell/exercises/sieve/src/Sieve.hs +2 -1
  7. data/tracks/haskell/exercises/simple-cipher/src/Cipher.hs +3 -3
  8. data/tracks/haskell/exercises/simple-linked-list/src/LinkedList.hs +7 -7
  9. data/tracks/haskell/exercises/sublist/src/Sublist.hs +1 -1
  10. data/tracks/haskell/exercises/sum-of-multiples/src/SumOfMultiples.hs +2 -1
  11. data/tracks/haskell/exercises/triangle/src/Triangle.hs +2 -1
  12. data/tracks/haskell/exercises/wordy/src/WordProblem.hs +2 -1
  13. data/tracks/haskell/exercises/zipper/src/Zipper.hs +9 -9
  14. data/tracks/javascript/config.json +7 -0
  15. data/tracks/javascript/exercises/perfect-numbers/example.js +67 -0
  16. data/tracks/javascript/exercises/perfect-numbers/perfect-numbers.spec.js +79 -0
  17. data/tracks/objective-c/config.json +9 -0
  18. data/tracks/objective-c/exercises/binary-search/BinarySearchExample.h +11 -0
  19. data/tracks/objective-c/exercises/binary-search/BinarySearchExample.m +56 -0
  20. data/tracks/objective-c/exercises/binary-search/BinarySearchTest.m +53 -0
  21. data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +41 -55
  22. data/tracks/python/exercises/difference-of-squares/difference_of_squares_test.py +24 -11
  23. data/tracks/python/exercises/rna-transcription/rna_transcription_test.py +2 -1
  24. metadata +7 -5
  25. data/tracks/java/exercises/binary-search/src/main/java/.keep +0 -0
  26. data/tracks/java/exercises/binary-search-tree/src/test/java/.keep +0 -0
  27. data/tracks/ocaml/exercises/hello-world/HINTS.md +0 -31
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: faebef83368ee490d149ffbaefd180c65a4a0d3a
4
- data.tar.gz: 507b81bff22dd1cabe62e51fd86ea00fd628203f
3
+ metadata.gz: b5c894b894e9f0f3d11e47d960d538044a4863cd
4
+ data.tar.gz: f0150355935cc408bc6fe6cfb8922fb32bd32267
5
5
  SHA512:
6
- metadata.gz: a37814a2b504762359eafc95f1fb91d7b3ca0015875fa51708fe13c3e1d277a1b781a6d391ae3e1dee4d6d19db457e337a5817a5ba79306fd3c374dacad3c72c
7
- data.tar.gz: 02b51347b6e00fd95e17695f9f24fe78e9cde2a28a12d77a511b67c9960299aa2bb1e26f323e9ae22e8be235901f3bb73a4687c6b58c34777f2d169132d56616
6
+ metadata.gz: 7c70f073bbd990f0d6dbbe5734a19016bc18435f151a009e7c6cd48dda5b2101d5096cc993a749c167a228d97ed29588478d4ace4d0c63ced64976b9234f88b6
7
+ data.tar.gz: af5c762cba7ea0dc69d25c8e8b05c7108754597a869cf7a5c20ea071a4d6a937c98a5be02d46530a0c8298aba7b7fe59c9ef4a7458e86fa126a949bcb4f6acda
@@ -19,7 +19,9 @@ being a couple letters off was sufficient so that people couldn't
19
19
  recognize the few words that they did know.
20
20
 
21
21
  Your task is to create a simple shift cipher like the Caesar Cipher.
22
- This image is a great example of the Caesar Cipher: ![Caesar Cipher][1]
22
+ This image is a great example of the Caesar Cipher:
23
+
24
+ ![Caesar Cipher][1]
23
25
 
24
26
  For example:
25
27
 
@@ -74,5 +76,5 @@ If you want to go farther in this field, the questions begin to be about
74
76
  how we can exchange keys in a secure way. Take a look at [Diffie-Hellman
75
77
  on Wikipedia][dh] for one of the first implementations of this scheme.
76
78
 
77
- [1]: http://upload.wikimedia.org/wikipedia/en/7/75/Caesar3.png
79
+ [1]: https://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Caesar_cipher_left_shift_of_3.svg/320px-Caesar_cipher_left_shift_of_3.svg.png
78
80
  [dh]: http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.0.8.26"
2
+ VERSION = "2.0.8.27"
3
3
  end
@@ -1,4 +1,7 @@
1
1
  image: Visual Studio 2017
2
+ environment:
3
+ DOTNET_CLI_TELEMETRY_OPTOUT: true
4
+ DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
2
5
  test: off
3
6
  build_script:
4
- - ps: ./build.ps1
7
+ - ps: ./build.ps1
@@ -1,4 +1,4 @@
1
- # xECMAScript [![Build Status](https://travis-ci.org/exercism/xecmascript.png?branch=master)](https://travis-ci.org/exercism/xecmascript)
1
+ # xECMAScript [![Build Status](https://travis-ci.org/exercism/xecmascript.svg?branch=master)](https://travis-ci.org/exercism/xecmascript)
2
2
 
3
3
  Exercism exercises in ECMAScript 6
4
4
 
@@ -1,3 +1,4 @@
1
1
  module Sieve (primesUpTo) where
2
2
 
3
- primesUpTo = error "You need to implement this function."
3
+ primesUpTo :: Integer -> [Integer]
4
+ primesUpTo n = error "You need to implement this function."
@@ -1,10 +1,10 @@
1
1
  module Cipher (caesarDecode, caesarEncode, caesarEncodeRandom) where
2
2
 
3
3
  caesarDecode :: String -> String -> String
4
- caesarDecode = error "You need to implement this function."
4
+ caesarDecode key encodedText = error "You need to implement this function."
5
5
 
6
6
  caesarEncode :: String -> String -> String
7
- caesarEncode = error "You need to implement this function."
7
+ caesarEncode key text = error "You need to implement this function."
8
8
 
9
9
  caesarEncodeRandom :: String -> IO (String, String)
10
- caesarEncodeRandom = error "You need to implement this function."
10
+ caesarEncodeRandom text = error "You need to implement this function."
@@ -13,25 +13,25 @@ module LinkedList
13
13
  data LinkedList a = Dummy
14
14
 
15
15
  datum :: LinkedList a -> a
16
- datum = error "You need to implement this function."
16
+ datum linkedList = error "You need to implement this function."
17
17
 
18
18
  fromList :: [a] -> LinkedList a
19
- fromList = error "You need to implement this function."
19
+ fromList xs = error "You need to implement this function."
20
20
 
21
21
  isNil :: LinkedList a -> Bool
22
- isNil = error "You need to implement this function."
22
+ isNil linkedList = error "You need to implement this function."
23
23
 
24
24
  new :: a -> LinkedList a -> LinkedList a
25
- new = error "You need to implement this function."
25
+ new x linkedList = error "You need to implement this function."
26
26
 
27
27
  next :: LinkedList a -> LinkedList a
28
- next = error "You need to implement this function."
28
+ next linkedList = error "You need to implement this function."
29
29
 
30
30
  nil :: LinkedList a
31
31
  nil = error "You need to implement this function."
32
32
 
33
33
  reverseLinkedList :: LinkedList a -> LinkedList a
34
- reverseLinkedList = error "You need to implement this function."
34
+ reverseLinkedList linkedList = error "You need to implement this function."
35
35
 
36
36
  toList :: LinkedList a -> [a]
37
- toList = error "You need to implement this function."
37
+ toList linkedList = error "You need to implement this function."
@@ -3,4 +3,4 @@ module Sublist (Sublist(..), sublist) where
3
3
  data Sublist = Equal | Sublist | Superlist | Unequal deriving (Eq, Show)
4
4
 
5
5
  sublist :: [a] -> [a] -> Sublist
6
- sublist = error "You need to implement this function."
6
+ sublist xs ys = error "You need to implement this function."
@@ -1,3 +1,4 @@
1
1
  module SumOfMultiples (sumOfMultiples) where
2
2
 
3
- sumOfMultiples = error "You need to implement this function."
3
+ sumOfMultiples :: [Integer] -> Integer -> Integer
4
+ sumOfMultiples factors limit = error "You need to implement this function."
@@ -6,4 +6,5 @@ data TriangleType = Equilateral
6
6
  | Illegal
7
7
  deriving (Eq, Show)
8
8
 
9
- triangleType = error "You need to implement this function."
9
+ triangleType :: Num a => a -> a -> a -> TriangleType
10
+ triangleType a b c = error "You need to implement this function."
@@ -1,3 +1,4 @@
1
1
  module WordProblem (answer) where
2
2
 
3
- answer = error "You need to implement this function."
3
+ answer :: String -> Maybe Integer
4
+ answer problem = error "You need to implement this function."
@@ -19,28 +19,28 @@ data BinTree a = BT { btValue :: a
19
19
  data Zipper a = Dummy deriving (Eq, Show)
20
20
 
21
21
  fromTree :: BinTree a -> Zipper a
22
- fromTree = error "You need to implement this function."
22
+ fromTree tree = error "You need to implement this function."
23
23
 
24
24
  toTree :: Zipper a -> BinTree a
25
- toTree = error "You need to implement this function."
25
+ toTree zipper = error "You need to implement this function."
26
26
 
27
27
  value :: Zipper a -> a
28
- value = error "You need to implement this function."
28
+ value zipper = error "You need to implement this function."
29
29
 
30
30
  left :: Zipper a -> Maybe (Zipper a)
31
- left = error "You need to implement this function."
31
+ left zipper = error "You need to implement this function."
32
32
 
33
33
  right :: Zipper a -> Maybe (Zipper a)
34
- right = error "You need to implement this function."
34
+ right zipper = error "You need to implement this function."
35
35
 
36
36
  up :: Zipper a -> Maybe (Zipper a)
37
- up = error "You need to implement this function."
37
+ up zipper = error "You need to implement this function."
38
38
 
39
39
  setValue :: a -> Zipper a -> Zipper a
40
- setValue = error "You need to implement this function."
40
+ setValue x zipper = error "You need to implement this function."
41
41
 
42
42
  setLeft :: Maybe (BinTree a) -> Zipper a -> Zipper a
43
- setLeft = error "You need to implement this function."
43
+ setLeft tree zipper = error "You need to implement this function."
44
44
 
45
45
  setRight :: Maybe (BinTree a) -> Zipper a -> Zipper a
46
- setRight = error "You need to implement this function."
46
+ setRight tree zipper = error "You need to implement this function."
@@ -11,6 +11,7 @@
11
11
  "rna-transcription",
12
12
  "bob",
13
13
  "gigasecond",
14
+ "perfect-numbers",
14
15
  "word-count",
15
16
  "isogram",
16
17
  "pangram",
@@ -201,6 +202,12 @@
201
202
  "difficulty": 1,
202
203
  "topics": [
203
204
  ]
205
+ },
206
+ {
207
+ "slug": "perfect-numbers",
208
+ "difficulty": 1,
209
+ "topics": [
210
+ ]
204
211
  },
205
212
  {
206
213
  "slug": "word-count",
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ var PerfectNumbers = function() {
4
+
5
+ };
6
+
7
+ /**
8
+ * Calculate all the divisors for a given number and return them as an array.
9
+ * Note: the actual number is not include in the returned array.
10
+ */
11
+ PerfectNumbers.prototype.getDivisors = function(number) {
12
+
13
+ var i;
14
+ var divs = new Array();
15
+
16
+ // Accepts only natura numbers greater than 1.
17
+ if (number <= 1) {
18
+ return divs;
19
+ }
20
+
21
+ // 1 always divides everyone!
22
+ divs.push(1);
23
+
24
+ // Calculate the divisors up the the half of the number + 1
25
+ for (i = 2; i <= number / 2; i++) {
26
+
27
+ if (number % i === 0) {
28
+ divs.push(i);
29
+ }
30
+ }
31
+
32
+ return divs;
33
+ };
34
+
35
+ PerfectNumbers.prototype.classify = function(number) {
36
+
37
+ var i, sum, result;
38
+
39
+ // Check if the input is valid
40
+ if (number <= 0) {
41
+ return 'Classification is only possible for natural numbers.';
42
+ }
43
+
44
+ // Factorize the current number.
45
+ var divsArray = this.getDivisors(number);
46
+
47
+ // Sum the factors.
48
+ sum = 0;
49
+ for (i = 0; i < divsArray.length; i++) {
50
+ sum = sum + divsArray[i];
51
+ }
52
+
53
+ // Check if the number is perfect.
54
+ if (sum === number) {
55
+ result = 'perfect';
56
+ }
57
+ else if (sum > number) {
58
+ result = 'abundant';
59
+ }
60
+ else {
61
+ result = 'deficient';
62
+ }
63
+
64
+ return result;
65
+ };
66
+
67
+ module.exports = PerfectNumbers;
@@ -0,0 +1,79 @@
1
+ var PerfectNumbers = require('./perfect-numbers');
2
+
3
+ describe('Exercise - Perfect Numbers', function() {
4
+
5
+ var perfectNumbers;
6
+
7
+ beforeEach(function () {
8
+ perfectNumbers = new PerfectNumbers();
9
+ });
10
+
11
+ describe('Perfect Numbers', function() {
12
+
13
+ it('Smallest perfect number is classified correctly', function() {
14
+ expect(perfectNumbers.classify(6)).toEqual('perfect');
15
+ });
16
+
17
+ it('Medium perfect number is classified correctly', function() {
18
+ expect(perfectNumbers.classify(28)).toEqual('perfect');
19
+ });
20
+
21
+ it('Large perfect number is classified correctly', function() {
22
+ expect(perfectNumbers.classify(33550336)).toEqual('perfect');
23
+ });
24
+
25
+ });
26
+
27
+ describe('Abundant Numbers', function() {
28
+
29
+ it('Smallest abundant number is classified correctly', function() {
30
+ expect(perfectNumbers.classify(12)).toEqual('abundant');
31
+ });
32
+
33
+ it('Medium abundant number is classified correctly', function() {
34
+ expect(perfectNumbers.classify(30)).toEqual('abundant');
35
+ });
36
+
37
+ it('Large abundant number is classified correctly', function() {
38
+ expect(perfectNumbers.classify(33550335)).toEqual('abundant');
39
+ });
40
+
41
+ });
42
+
43
+ describe('Deficient Numbers', function() {
44
+
45
+ it('Smallest prime deficient number is classified correctly', function() {
46
+ expect(perfectNumbers.classify(2)).toEqual('deficient');
47
+ });
48
+
49
+ it('Smallest non-prime deficient number is classified correctly', function() {
50
+ expect(perfectNumbers.classify(4)).toEqual('deficient');
51
+ });
52
+
53
+ it('Medium deficient number is classified correctly', function() {
54
+ expect(perfectNumbers.classify(32)).toEqual('deficient');
55
+ });
56
+
57
+ it('Large deficient number is classified correctly', function() {
58
+ expect(perfectNumbers.classify(33550337)).toEqual('deficient');
59
+ });
60
+
61
+ it('Edge case (no factors other than itself) is classified correctly', function() {
62
+ expect(perfectNumbers.classify(1)).toEqual('deficient');
63
+ });
64
+
65
+ });
66
+
67
+ describe('Invalid Inputs', function() {
68
+
69
+ it('Zero is rejected (not a natural number)', function() {
70
+ expect(perfectNumbers.classify(0)).toEqual('Classification is only possible for natural numbers.');
71
+ });
72
+
73
+ it('Negative integer is rejected (not a natural number)', function() {
74
+ expect(perfectNumbers.classify(-1)).toEqual('Classification is only possible for natural numbers.');
75
+ });
76
+
77
+ });
78
+
79
+ });
@@ -271,6 +271,15 @@
271
271
  "Transforming"
272
272
  ]
273
273
  },
274
+ {
275
+ "difficulty": 4,
276
+ "slug": "binary-search",
277
+ "topics": [
278
+ "Integers",
279
+ "Recursion",
280
+ "Searching"
281
+ ]
282
+ },
274
283
  {
275
284
  "difficulty": 5,
276
285
  "slug": "bracket-push",
@@ -0,0 +1,11 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ @interface BinarySearch : NSObject
4
+
5
+ @property (nonatomic, strong) NSArray *list;
6
+
7
+ - (instancetype)initWithArray:(NSArray<NSNumber *> *)array;
8
+ - (NSInteger)searchFor:(int)number;
9
+ - (NSInteger)middle;
10
+
11
+ @end
@@ -0,0 +1,56 @@
1
+ #import "BinarySearchExample.h"
2
+
3
+ @implementation BinarySearch
4
+
5
+ - (instancetype)initWithArray:(NSArray<NSNumber *> *)array {
6
+ self = [super init];
7
+
8
+ if (self) {
9
+ // This binary search algorithm only works if the array is already is ascending order.
10
+ if ([array isEqualToArray:[array sortedArrayUsingSelector:@selector(compare:)]]) {
11
+ _list = array;
12
+ } else {
13
+ return nil;
14
+ }
15
+ }
16
+
17
+ return self;
18
+ }
19
+
20
+ - (NSInteger)searchFor:(int)number {
21
+ NSInteger middleIndex = [self middle];
22
+ int middle = [self.list[middleIndex] intValue];
23
+
24
+ if (middle == number) {
25
+ return middleIndex;
26
+ } else if (middle > number) {
27
+ NSArray *sublist = [self.list subarrayWithRange:NSMakeRange(0, middleIndex)];
28
+
29
+ BinarySearch *binary = [[BinarySearch alloc] initWithArray:sublist];
30
+ if (!binary) {
31
+ return NSNotFound;
32
+ }
33
+
34
+ return [binary searchFor:number];
35
+ } else {
36
+ NSUInteger length = self.list.count - middleIndex;
37
+ NSArray *sublist = [self.list subarrayWithRange:NSMakeRange(middleIndex, length)];
38
+ if ([sublist isEqualToArray:self.list]) {
39
+ return NSNotFound;
40
+ }
41
+
42
+ BinarySearch *binary = [[BinarySearch alloc] initWithArray:sublist];
43
+ if (!binary) {
44
+ return NSNotFound;
45
+ }
46
+
47
+ return [binary searchFor:number] + middleIndex;
48
+ }
49
+ }
50
+
51
+ - (NSInteger)middle {
52
+ return self.list.count / 2;
53
+ }
54
+
55
+ @end
56
+
@@ -0,0 +1,53 @@
1
+ #import <XCTest/XCTest.h>
2
+
3
+ #if __has_include("BinarySearchExample.h")
4
+ # import "BinarySearchExample.h"
5
+ # else
6
+ # import "BinarySearch.h"
7
+ #endif
8
+
9
+ @interface BinarySearchTest : XCTestCase
10
+
11
+ @end
12
+
13
+ @implementation BinarySearchTest
14
+
15
+ - (void)testHasListData {
16
+ NSArray *array = @[@1, @3, @4, @6, @8, @9, @11];
17
+ BinarySearch *binary = [[BinarySearch alloc] initWithArray:array];
18
+ XCTAssertEqualObjects(binary.list, array);
19
+ }
20
+
21
+ - (void)testNilForUnsortedList {
22
+ BinarySearch *binary = [[BinarySearch alloc] initWithArray:@[@2, @1, @4, @3, @6]];
23
+ XCTAssertNil(binary);
24
+ }
25
+
26
+ - (void)testNotFoundForDataNotInList {
27
+ BinarySearch *binary = [[BinarySearch alloc] initWithArray:@[@1, @3, @6]];
28
+ XCTAssertEqual([binary searchFor:2], NSNotFound);
29
+ }
30
+
31
+ - (void)testFindsPositionOfMiddleItem {
32
+ BinarySearch *binary = [[BinarySearch alloc] initWithArray:@[@1, @3, @4, @6, @8, @9, @11]];
33
+ XCTAssertEqual(3, [binary middle]);
34
+ }
35
+
36
+ - (void)testFindsPositionOfSearchData {
37
+ BinarySearch *binary = [[BinarySearch alloc] initWithArray:@[@1, @3, @4, @6, @8, @9, @11]];
38
+ XCTAssertEqual(5, [binary searchFor:9]);
39
+ }
40
+
41
+ - (void)testFindsPositionInALargerList {
42
+ BinarySearch *binary = [[BinarySearch alloc] initWithArray:@[@1, @3, @5, @8, @13, @21, @34, @55, @89, @144]];
43
+ XCTAssertEqual(1, [binary searchFor:3]);
44
+ XCTAssertEqual(7, [binary searchFor:55]);
45
+ }
46
+
47
+ - (void)testFindsCorrectPositionInAListWithAnEvenNumberOfElements {
48
+ BinarySearch *binary = [[BinarySearch alloc] initWithArray:@[@1, @3, @5, @8, @13, @21, @34, @55, @89, @144, @233, @377]];
49
+ XCTAssertEqual(5, [binary searchFor:21]);
50
+ XCTAssertEqual(6, [binary searchFor:34]);
51
+ }
52
+
53
+ @end
@@ -47,23 +47,15 @@
47
47
  1EFACABA1CCCAF3D006F2E69 /* SpaceAgeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EFACA9F1CCCAF3D006F2E69 /* SpaceAgeTest.m */; };
48
48
  1EFACABB1CCCAF3D006F2E69 /* WordCountExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EFACAA11CCCAF3D006F2E69 /* WordCountExample.m */; };
49
49
  1EFACABC1CCCAF3D006F2E69 /* WordCountTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EFACAA21CCCAF3D006F2E69 /* WordCountTest.m */; };
50
-
50
+ A065F5781E3098080048E337 /* BeerSongExample.m in Sources */ = {isa = PBXBuildFile; fileRef = A065F5761E3098080048E337 /* BeerSongExample.m */; };
51
+ A065F5791E3098080048E337 /* BeerSongTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A065F5771E3098080048E337 /* BeerSongTest.m */; };
52
+ A097D40F1E363C2700EAF2C2 /* BracketPushExample.m in Sources */ = {isa = PBXBuildFile; fileRef = A097D40D1E363C2700EAF2C2 /* BracketPushExample.m */; };
53
+ A097D4101E363C2700EAF2C2 /* BracketPushTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A097D40E1E363C2700EAF2C2 /* BracketPushTest.m */; };
51
54
  A09A4C031E38761A00FEFB7A /* FlattenArrayExample.m in Sources */ = {isa = PBXBuildFile; fileRef = A09A4C021E38761A00FEFB7A /* FlattenArrayExample.m */; };
52
55
  A09A4C051E38763300FEFB7A /* FlattenArrayTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A09A4C041E38763300FEFB7A /* FlattenArrayTest.m */; };
53
- E907D0CA1D6B731600106C42 /* GigasecondExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E907D0C91D6B731600106C42 /* GigasecondExample.m */; };
54
-
55
-
56
56
  A0BBFCBF1E37719800230071 /* SublistExample.m in Sources */ = {isa = PBXBuildFile; fileRef = A0BBFCBE1E37719800230071 /* SublistExample.m */; };
57
57
  A0BBFCC31E37728100230071 /* SublistTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A0BBFCC21E37728100230071 /* SublistTest.m */; };
58
-
59
-
60
- A097D40F1E363C2700EAF2C2 /* BracketPushExample.m in Sources */ = {isa = PBXBuildFile; fileRef = A097D40D1E363C2700EAF2C2 /* BracketPushExample.m */; };
61
- A097D4101E363C2700EAF2C2 /* BracketPushTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A097D40E1E363C2700EAF2C2 /* BracketPushTest.m */; };
62
-
63
- A065F5781E3098080048E337 /* BeerSongExample.m in Sources */ = {isa = PBXBuildFile; fileRef = A065F5761E3098080048E337 /* BeerSongExample.m */; };
64
- A065F5791E3098080048E337 /* BeerSongTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A065F5771E3098080048E337 /* BeerSongTest.m */; };
65
-
66
- E907D0CA1D6B731600106C42 /* GigasecondExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E907D0C91D6B731600106C42 /* GigasecondExample.m */; };
58
+ E907D0CA1D6B731600106C42 /* GigasecondExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E907D0C91D6B731600106C42 /* GigasecondExample.m */; };
67
59
  E907D0CC1D6B734800106C42 /* GigasecondTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E907D0CB1D6B734800106C42 /* GigasecondTest.m */; };
68
60
  E907FE921D87547D00B93DA9 /* ScrabbleScoreExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E907FE911D87547D00B93DA9 /* ScrabbleScoreExample.m */; };
69
61
  E907FE941D87554500B93DA9 /* ScrabbleScoreTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E907FE931D87554500B93DA9 /* ScrabbleScoreTest.m */; };
@@ -83,6 +75,8 @@
83
75
  E94ACA151D41763800D56CC2 /* AllYourBaseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E94ACA141D41763800D56CC2 /* AllYourBaseTest.m */; };
84
76
  E951B6B71D4294E6009EB5B6 /* AllergiesExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E951B6B61D4294E6009EB5B6 /* AllergiesExample.m */; };
85
77
  E951B6B91D429550009EB5B6 /* AllergiesTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E951B6B81D429550009EB5B6 /* AllergiesTest.m */; };
78
+ E95C52551E81C82A0095D321 /* BinarySearchExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E95C52531E81C82A0095D321 /* BinarySearchExample.m */; };
79
+ E95C52561E81C82A0095D321 /* BinarySearchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E95C52541E81C82A0095D321 /* BinarySearchTest.m */; };
86
80
  E96993981DF60E1E009EA223 /* TransposeExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E96993971DF60E1E009EA223 /* TransposeExample.m */; };
87
81
  E969939A1DF60E5F009EA223 /* TransposeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E96993991DF60E5F009EA223 /* TransposeTest.m */; };
88
82
  E99D1D811D5533BF0006A303 /* SumOfMultiplesExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E99D1D801D5533BF0006A303 /* SumOfMultiplesExample.m */; };
@@ -145,27 +139,18 @@
145
139
  1EFACAA01CCCAF3D006F2E69 /* WordCountExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WordCountExample.h; path = "../../exercises/word-count/WordCountExample.h"; sourceTree = "<group>"; };
146
140
  1EFACAA11CCCAF3D006F2E69 /* WordCountExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WordCountExample.m; path = "../../exercises/word-count/WordCountExample.m"; sourceTree = "<group>"; };
147
141
  1EFACAA21CCCAF3D006F2E69 /* WordCountTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WordCountTest.m; path = "../../exercises/word-count/WordCountTest.m"; sourceTree = "<group>"; };
148
-
142
+ A065F5751E3098080048E337 /* BeerSongExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BeerSongExample.h; path = "../../exercises/beer-song/BeerSongExample.h"; sourceTree = "<group>"; };
143
+ A065F5761E3098080048E337 /* BeerSongExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BeerSongExample.m; path = "../../exercises/beer-song/BeerSongExample.m"; sourceTree = "<group>"; };
144
+ A065F5771E3098080048E337 /* BeerSongTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BeerSongTest.m; path = "../../exercises/beer-song/BeerSongTest.m"; sourceTree = "<group>"; };
145
+ A097D40C1E363C1A00EAF2C2 /* BracketPushExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BracketPushExample.h; path = "../../exercises/bracket-push/BracketPushExample.h"; sourceTree = "<group>"; };
146
+ A097D40D1E363C2700EAF2C2 /* BracketPushExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BracketPushExample.m; path = "../../exercises/bracket-push/BracketPushExample.m"; sourceTree = "<group>"; };
147
+ A097D40E1E363C2700EAF2C2 /* BracketPushTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BracketPushTest.m; path = "../../exercises/bracket-push/BracketPushTest.m"; sourceTree = "<group>"; };
149
148
  A09A4C011E38761A00FEFB7A /* FlattenArrayExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FlattenArrayExample.h; path = "../../exercises/flatten-array/FlattenArrayExample.h"; sourceTree = "<group>"; };
150
149
  A09A4C021E38761A00FEFB7A /* FlattenArrayExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FlattenArrayExample.m; path = "../../exercises/flatten-array/FlattenArrayExample.m"; sourceTree = "<group>"; };
151
150
  A09A4C041E38763300FEFB7A /* FlattenArrayTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FlattenArrayTest.m; path = "../../exercises/flatten-array/FlattenArrayTest.m"; sourceTree = "<group>"; };
152
-
153
-
154
- A0BBFCBD1E37719800230071 /* SublistExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SublistExample.h; path = ../../exercises/sublist/SublistExample.h; sourceTree = "<group>"; };
151
+ A0BBFCBD1E37719800230071 /* SublistExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SublistExample.h; path = ../../exercises/sublist/SublistExample.h; sourceTree = "<group>"; };
155
152
  A0BBFCBE1E37719800230071 /* SublistExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SublistExample.m; path = ../../exercises/sublist/SublistExample.m; sourceTree = "<group>"; };
156
153
  A0BBFCC21E37728100230071 /* SublistTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SublistTest.m; path = ../../exercises/sublist/SublistTest.m; sourceTree = "<group>"; };
157
-
158
-
159
- A097D40C1E363C1A00EAF2C2 /* BracketPushExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BracketPushExample.h; path = "../../exercises/bracket-push/BracketPushExample.h"; sourceTree = "<group>"; };
160
- A097D40D1E363C2700EAF2C2 /* BracketPushExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BracketPushExample.m; path = "../../exercises/bracket-push/BracketPushExample.m"; sourceTree = "<group>"; };
161
- A097D40E1E363C2700EAF2C2 /* BracketPushTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BracketPushTest.m; path = "../../exercises/bracket-push/BracketPushTest.m"; sourceTree = "<group>"; };
162
-
163
- A065F5751E3098080048E337 /* BeerSongExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BeerSongExample.h; path = "../../exercises/beer-song/BeerSongExample.h"; sourceTree = "<group>"; };
164
- A065F5761E3098080048E337 /* BeerSongExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BeerSongExample.m; path = "../../exercises/beer-song/BeerSongExample.m"; sourceTree = "<group>"; };
165
- A065F5771E3098080048E337 /* BeerSongTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BeerSongTest.m; path = "../../exercises/beer-song/BeerSongTest.m"; sourceTree = "<group>"; };
166
-
167
-
168
-
169
154
  E907D0C81D6B731600106C42 /* GigasecondExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GigasecondExample.h; path = ../../exercises/gigasecond/GigasecondExample.h; sourceTree = "<group>"; };
170
155
  E907D0C91D6B731600106C42 /* GigasecondExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GigasecondExample.m; path = ../../exercises/gigasecond/GigasecondExample.m; sourceTree = "<group>"; };
171
156
  E907D0CB1D6B734800106C42 /* GigasecondTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GigasecondTest.m; path = ../../exercises/gigasecond/GigasecondTest.m; sourceTree = "<group>"; };
@@ -196,6 +181,9 @@
196
181
  E951B6B51D4294E6009EB5B6 /* AllergiesExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AllergiesExample.h; path = ../../exercises/allergies/AllergiesExample.h; sourceTree = "<group>"; };
197
182
  E951B6B61D4294E6009EB5B6 /* AllergiesExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AllergiesExample.m; path = ../../exercises/allergies/AllergiesExample.m; sourceTree = "<group>"; };
198
183
  E951B6B81D429550009EB5B6 /* AllergiesTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AllergiesTest.m; path = ../../exercises/allergies/AllergiesTest.m; sourceTree = "<group>"; };
184
+ E95C52521E81C82A0095D321 /* BinarySearchExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BinarySearchExample.h; path = "../../exercises/binary-search/BinarySearchExample.h"; sourceTree = "<group>"; };
185
+ E95C52531E81C82A0095D321 /* BinarySearchExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BinarySearchExample.m; path = "../../exercises/binary-search/BinarySearchExample.m"; sourceTree = "<group>"; };
186
+ E95C52541E81C82A0095D321 /* BinarySearchTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BinarySearchTest.m; path = "../../exercises/binary-search/BinarySearchTest.m"; sourceTree = "<group>"; };
199
187
  E96993961DF60E1E009EA223 /* TransposeExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransposeExample.h; path = ../../exercises/transpose/TransposeExample.h; sourceTree = "<group>"; };
200
188
  E96993971DF60E1E009EA223 /* TransposeExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TransposeExample.m; path = ../../exercises/transpose/TransposeExample.m; sourceTree = "<group>"; };
201
189
  E96993991DF60E5F009EA223 /* TransposeTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TransposeTest.m; path = ../../exercises/transpose/TransposeTest.m; sourceTree = "<group>"; };
@@ -245,6 +233,7 @@
245
233
  E9E8B6EB1D519DE70012F12C /* Anagram */,
246
234
  E9386EEB1E0B68F90009A414 /* AtbashCipher */,
247
235
  A0CE03811E2F994200669F42 /* BeerSong */,
236
+ E95C52481E806BA20095D321 /* BinarySearch */,
248
237
  E9E8B6EC1D519DEF0012F12C /* Bob */,
249
238
  A09A906D1E28C1380087CCB7 /* BracketPush */,
250
239
  E9381D4F1D8F2DA4003F22A1 /* Clock */,
@@ -296,7 +285,6 @@
296
285
  name = Products;
297
286
  sourceTree = "<group>";
298
287
  };
299
-
300
288
  A09A4C001E3875C200FEFB7A /* FlattenArray */ = {
301
289
  isa = PBXGroup;
302
290
  children = (
@@ -307,8 +295,16 @@
307
295
  name = FlattenArray;
308
296
  sourceTree = "<group>";
309
297
  };
310
-
311
-
298
+ A09A906D1E28C1380087CCB7 /* BracketPush */ = {
299
+ isa = PBXGroup;
300
+ children = (
301
+ A097D40C1E363C1A00EAF2C2 /* BracketPushExample.h */,
302
+ A097D40D1E363C2700EAF2C2 /* BracketPushExample.m */,
303
+ A097D40E1E363C2700EAF2C2 /* BracketPushTest.m */,
304
+ );
305
+ name = BracketPush;
306
+ sourceTree = "<group>";
307
+ };
312
308
  A0BBFCBC1E37703D00230071 /* Sublist */ = {
313
309
  isa = PBXGroup;
314
310
  children = (
@@ -319,19 +315,6 @@
319
315
  name = Sublist;
320
316
  sourceTree = "<group>";
321
317
  };
322
-
323
-
324
- A09A906D1E28C1380087CCB7 /* BracketPush */ = {
325
- isa = PBXGroup;
326
- children = (
327
- A097D40C1E363C1A00EAF2C2 /* BracketPushExample.h */,
328
- A097D40D1E363C2700EAF2C2 /* BracketPushExample.m */,
329
- A097D40E1E363C2700EAF2C2 /* BracketPushTest.m */,
330
- );
331
- name = BracketPush;
332
- sourceTree = "<group>";
333
- };
334
-
335
318
  A0CE03811E2F994200669F42 /* BeerSong */ = {
336
319
  isa = PBXGroup;
337
320
  children = (
@@ -340,11 +323,8 @@
340
323
  A065F5771E3098080048E337 /* BeerSongTest.m */,
341
324
  );
342
325
  name = BeerSong;
343
- sourceTree = "<group>";
326
+ sourceTree = "<group>";
344
327
  };
345
-
346
-
347
-
348
328
  E907D0C71D6B72B600106C42 /* Gigasecond */ = {
349
329
  isa = PBXGroup;
350
330
  children = (
@@ -425,6 +405,16 @@
425
405
  name = Triangle;
426
406
  sourceTree = "<group>";
427
407
  };
408
+ E95C52481E806BA20095D321 /* BinarySearch */ = {
409
+ isa = PBXGroup;
410
+ children = (
411
+ E95C52521E81C82A0095D321 /* BinarySearchExample.h */,
412
+ E95C52531E81C82A0095D321 /* BinarySearchExample.m */,
413
+ E95C52541E81C82A0095D321 /* BinarySearchTest.m */,
414
+ );
415
+ name = BinarySearch;
416
+ sourceTree = "<group>";
417
+ };
428
418
  E96993951DF60DF1009EA223 /* Transpose */ = {
429
419
  isa = PBXGroup;
430
420
  children = (
@@ -759,11 +749,9 @@
759
749
  E9C1C0291D9DB16B0015E86E /* AcronymExample.m in Sources */,
760
750
  1EFACAA41CCCAF3D006F2E69 /* AnagramTest.m in Sources */,
761
751
  E907FE921D87547D00B93DA9 /* ScrabbleScoreExample.m in Sources */,
762
-
763
752
  A09A4C051E38763300FEFB7A /* FlattenArrayTest.m in Sources */,
764
-
765
753
  A097D4101E363C2700EAF2C2 /* BracketPushTest.m in Sources */,
766
-
754
+ E95C52551E81C82A0095D321 /* BinarySearchExample.m in Sources */,
767
755
  1EFACABC1CCCAF3D006F2E69 /* WordCountTest.m in Sources */,
768
756
  1EFACAB11CCCAF3D006F2E69 /* NucleotideCountExample.m in Sources */,
769
757
  E9381D481D8EE00C003F22A1 /* DifferenceOfSquaresTest.m in Sources */,
@@ -779,11 +767,8 @@
779
767
  E9381D521D8F2DCC003F22A1 /* ClockExample.m in Sources */,
780
768
  E99D1D811D5533BF0006A303 /* SumOfMultiplesExample.m in Sources */,
781
769
  E9F390071DFCA337005C5F46 /* IsogramExample.m in Sources */,
782
-
783
770
  A09A4C031E38761A00FEFB7A /* FlattenArrayExample.m in Sources */,
784
-
785
771
  A0BBFCC31E37728100230071 /* SublistTest.m in Sources */,
786
-
787
772
  E9C1C02F1D9EC1130015E86E /* RunLengthEncodingExample.m in Sources */,
788
773
  E92FCC0F1D78F3B600061017 /* MeetupTest.m in Sources */,
789
774
  E9381D4E1D8F2982003F22A1 /* RaindropsTest.m in Sources */,
@@ -828,6 +813,7 @@
828
813
  E9C1C0251D9D99620015E86E /* SecretHandshakeTest.m in Sources */,
829
814
  E969939A1DF60E5F009EA223 /* TransposeTest.m in Sources */,
830
815
  E99D1D831D5533D80006A303 /* SumOfMultiplesTest.m in Sources */,
816
+ E95C52561E81C82A0095D321 /* BinarySearchTest.m in Sources */,
831
817
  1EFACAAA1CCCAF3D006F2E69 /* GradeSchoolTest.m in Sources */,
832
818
  );
833
819
  runOnlyForDeploymentPostprocessing = 0;
@@ -3,25 +3,38 @@ import unittest
3
3
  from difference_of_squares import difference, square_of_sum, sum_of_squares
4
4
 
5
5
 
6
- class DifferenceOfSquaresTest(unittest.TestCase):
6
+ # test cases adapted from `x-common//canonical-data.json` @ version: 1.0.0
7
7
 
8
+ class DifferenceOfSquaresTest(unittest.TestCase):
8
9
  def test_square_of_sum_5(self):
9
- self.assertEqual(225, square_of_sum(5))
10
+ self.assertEqual(square_of_sum(5), 225)
10
11
 
11
- def test_sum_of_squares_5(self):
12
- self.assertEqual(55, sum_of_squares(5))
13
-
14
- def test_difference_5(self):
15
- self.assertEqual(170, difference(5))
12
+ def test_square_of_sum_10(self):
13
+ self.assertEqual(square_of_sum(10), 3025)
16
14
 
17
15
  def test_square_of_sum_100(self):
18
- self.assertEqual(25502500, square_of_sum(100))
16
+ self.assertEqual(square_of_sum(100), 25502500)
17
+
18
+ def test_sum_of_squares_5(self):
19
+ self.assertEqual(sum_of_squares(5), 55)
20
+
21
+ def test_sum_of_squares_10(self):
22
+ self.assertEqual(sum_of_squares(10), 385)
19
23
 
20
24
  def test_sum_of_squares_100(self):
21
- self.assertEqual(338350, sum_of_squares(100))
25
+ self.assertEqual(sum_of_squares(100), 338350)
26
+
27
+ def test_difference_of_squares_0(self):
28
+ self.assertEqual(difference(0), 0)
29
+
30
+ def test_difference_of_squares_5(self):
31
+ self.assertEqual(difference(5), 170)
32
+
33
+ def test_difference_of_squares_10(self):
34
+ self.assertEqual(difference(10), 2640)
22
35
 
23
- def test_difference_100(self):
24
- self.assertEqual(25164150, difference(100))
36
+ def test_difference_of_squares_100(self):
37
+ self.assertEqual(difference(100), 25164150)
25
38
 
26
39
 
27
40
  if __name__ == '__main__':
@@ -3,8 +3,9 @@ import unittest
3
3
  from rna_transcription import to_rna
4
4
 
5
5
 
6
- class DNATests(unittest.TestCase):
6
+ # test cases adapted from `x-common//canonical-data.json` @ version: 1.0.0
7
7
 
8
+ class DNATests(unittest.TestCase):
8
9
  def test_transcribes_guanine_to_cytosine(self):
9
10
  self.assertEqual('C', to_rna('G'))
10
11
 
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.8.26
4
+ version: 2.0.8.27
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-21 00:00:00.000000000 Z
11
+ date: 2017-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -4223,11 +4223,9 @@ files:
4223
4223
  - tracks/java/exercises/binary-search-tree/build.gradle
4224
4224
  - tracks/java/exercises/binary-search-tree/src/example/java/BST.java
4225
4225
  - tracks/java/exercises/binary-search-tree/src/main/java/.keep
4226
- - tracks/java/exercises/binary-search-tree/src/test/java/.keep
4227
4226
  - tracks/java/exercises/binary-search-tree/src/test/java/BSTTest.java
4228
4227
  - tracks/java/exercises/binary-search/build.gradle
4229
4228
  - tracks/java/exercises/binary-search/src/example/java/BinarySearch.java
4230
- - tracks/java/exercises/binary-search/src/main/java/.keep
4231
4229
  - tracks/java/exercises/binary-search/src/main/java/BinarySearch.java
4232
4230
  - tracks/java/exercises/binary-search/src/test/java/.keep
4233
4231
  - tracks/java/exercises/binary-search/src/test/java/BinarySearchTest.java
@@ -4609,6 +4607,8 @@ files:
4609
4607
  - tracks/javascript/exercises/pangram/pangram.spec.js
4610
4608
  - tracks/javascript/exercises/pascals-triangle/example.js
4611
4609
  - tracks/javascript/exercises/pascals-triangle/pascals-triangle.spec.js
4610
+ - tracks/javascript/exercises/perfect-numbers/example.js
4611
+ - tracks/javascript/exercises/perfect-numbers/perfect-numbers.spec.js
4612
4612
  - tracks/javascript/exercises/phone-number/example.js
4613
4613
  - tracks/javascript/exercises/phone-number/phone-number.spec.js
4614
4614
  - tracks/javascript/exercises/pig-latin/example.js
@@ -5593,6 +5593,9 @@ files:
5593
5593
  - tracks/objective-c/exercises/beer-song/BeerSongExample.h
5594
5594
  - tracks/objective-c/exercises/beer-song/BeerSongExample.m
5595
5595
  - tracks/objective-c/exercises/beer-song/BeerSongTest.m
5596
+ - tracks/objective-c/exercises/binary-search/BinarySearchExample.h
5597
+ - tracks/objective-c/exercises/binary-search/BinarySearchExample.m
5598
+ - tracks/objective-c/exercises/binary-search/BinarySearchTest.m
5596
5599
  - tracks/objective-c/exercises/bob/BobExample.h
5597
5600
  - tracks/objective-c/exercises/bob/BobExample.m
5598
5601
  - tracks/objective-c/exercises/bob/BobTest.m
@@ -5786,7 +5789,6 @@ files:
5786
5789
  - tracks/ocaml/exercises/hangman/hangman.mli
5787
5790
  - tracks/ocaml/exercises/hangman/test.ml
5788
5791
  - tracks/ocaml/exercises/hello-world/.merlin
5789
- - tracks/ocaml/exercises/hello-world/HINTS.md
5790
5792
  - tracks/ocaml/exercises/hello-world/Makefile
5791
5793
  - tracks/ocaml/exercises/hello-world/example.ml
5792
5794
  - tracks/ocaml/exercises/hello-world/hello_world.ml
@@ -1,31 +0,0 @@
1
- ## Use of `option`
2
- The type signature of the `greet` function reads `string option -> string`. It
3
- could be that this is your first time to encounter an Option type.
4
-
5
- An option type is an explicit way to signal that a value could be missing for a
6
- legitimate reason.
7
-
8
- In OCaml Options types are implemented as
9
- a [variant type](https://realworldocaml.org/v1/en/html/variants.html) something
10
- like
11
-
12
- ```ocaml
13
- type 'a option =
14
- | None
15
- | Some of 'a
16
- ```
17
-
18
- In the case of `string option` you provide an argument using one of the
19
- following snippets
20
-
21
- 1. `None` to signal that no subject is passed.
22
- 2. `Some("Alice")` to provide an actual subject.
23
-
24
- Just like other variants types you can match on an option. The example below
25
- demonstrates how this can be done. Here `x` is an `string option`.
26
-
27
- ```ocaml
28
- match x with
29
- | None -> "no argument passed"
30
- | Some(argument) -> "argument passed"
31
- ```