ðŸŽ‰ Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io ðŸŽ‰

# stevenhuey's solution

## to Secret Handshake in the Objective-C Track

Published at Jul 13 2018 · 0 comments
Instructions
Test suite
Solution

There are 10 types of people in the world: Those who understand binary, and those who don't.

You and your fellow cohort of those in the "know" when it comes to binary decide to come up with a secret "handshake".

``````1 = wink
1000 = jump

10000 = Reverse the order of the operations in the secret handshake.
``````

Given a decimal number, convert it to the appropriate sequence of events for a secret handshake.

Here's a couple of examples:

Given the input 3, the function would return the array ["wink", "double blink"] because 3 is 11 in binary.

Given the input 19, the function would return the array ["double blink", "wink"] because 19 is 10011 in binary. Notice that the addition of 16 (10000 in binary) has caused the array to be reversed.

## Setup

There are two different methods of getting set up to run the tests with Objective-C:

• Create an Xcode project with a test target which will run the tests.
• Use the ruby gem `objc` as a test runner utility.

Both are described in more detail here: http://exercism.io/languages/objective-c

### Submitting Exercises

When submitting an exercise, make sure your solution file is in the same directory as the test code.

The submit command will look something like:

``````exercism submit <path-to-exercism-workspace>/objective-c/secret-handshake/SecretHandshake.m
``````

You can find the Exercism workspace by running `exercism debug` and looking for the line beginning with Workspace.

## Source

Bert, in Mary Poppins http://www.imdb.com/title/tt0058331/quotes/qt0437047

## Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

### SecretHandshakeTest.m

``````#import <XCTest/XCTest.h>

#if __has_include("SecretHandshakeExample.h")
# import "SecretHandshakeExample.h"
# else
# import "SecretHandshake.h"
#endif

@interface SecretHandshakeTest : XCTestCase

@end

@implementation SecretHandshakeTest

- (void)testHandshake1ToWink {
SecretHandshake *handshake = [[SecretHandshake alloc] initWithNumber:1];
XCTAssertEqualObjects(@[@"wink"], handshake.commands);
}

SecretHandshake *handshake = [[SecretHandshake alloc] initWithNumber:2];
}

- (void)testHandshake100ToCloseYourEyes {
SecretHandshake *handshake = [[SecretHandshake alloc] initWithNumber:4];
}

- (void)testHandshake1000ToJump {
SecretHandshake *handshake = [[SecretHandshake alloc] initWithNumber:8];
XCTAssertEqualObjects(@[@"jump"], handshake.commands);
}

SecretHandshake *handshake = [[SecretHandshake alloc] initWithNumber:3];
NSArray<NSString *> *expected = @[@"wink", @"double blink"];
XCTAssertEqualObjects(expected, handshake.commands);
}

SecretHandshake *handshake = [[SecretHandshake alloc] initWithNumber:19];
NSArray<NSString *> *expected = @[@"double blink", @"wink"];
XCTAssertEqualObjects(expected, handshake.commands);
}

SecretHandshake *handshake = [[SecretHandshake alloc] initWithNumber:31];
XCTAssertEqualObjects(expected, handshake.commands);
}

- (void)testNonValidHandshake {
SecretHandshake *handshake = [[SecretHandshake alloc] initWithNumber:0];
XCTAssertEqualObjects(@[], handshake.commands);
}

@end``````
``````//
//  SecretHandshake.m
//  SecretHandshake
//
//  Created by Steve Huey on 6/15/17.
//

#import "SecretHandshake.h"

typedef enum : NSUInteger {
kSecretWink = 0b1,
kSecretCloseYourEyes = 0b100,
kSecretJump = 0b1000,
kSecretReverse = 0b10000
} Secret;

@interface SecretHandshake ()
@property (nonatomic, assign) NSUInteger number;
@end

@implementation SecretHandshake
- (instancetype)initWithNumber:(NSUInteger)number
{
self = [super init];

if (self)
{
_number = number;
}

return self;
}

- (NSArray<NSString*>*)commands
{
NSMutableArray* handshake = [NSMutableArray arrayWithCapacity:0];

if (self.number & kSecretWink)
{
}

{
}

if (self.number & kSecretCloseYourEyes)
{
}

if (self.number & kSecretJump)
{
}

if (self.number & kSecretReverse)
{
NSArray* reversedArray = [[handshake reverseObjectEnumerator] allObjects];
[handshake removeAllObjects];
}

return [NSArray arrayWithArray:handshake];
}
@end``````