Skip to content

Secret Handshake

Intro

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
2
3
4
5
1 = wink
10 = double blink
100 = close your eyes
1000 = jump
10000 = Reverse the order of the operations in the secret handshake.

Task

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.

The Code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "secret_handshake.h"
#include "algorithm"
#include <string>
#include <vector>

namespace secret_handshake {
std::vector<std::string> commands(int test) {
std::string wink = "wink", double_blink = "double blink",
            close_eyes = "close your eyes", jump = "jump";

std::vector<std::string> result{};
if (test & 0x01) {
    result.push_back(wink);
}
if (test & 0x02) {
    result.push_back(double_blink);
}
if (test & 0x04) {
    result.push_back(close_eyes);
}
if (test & 0x08) {
    result.push_back(jump);
}
if (test & 0x10) {
    std::reverse(result.begin(), result.end());
}

return result;
}
} // namespace secret_handshake
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#if !defined(SECRET_HANDSHAKE_H)
#define SECRET_HANDSHAKE_H
#include <vector>
#include "string"

namespace secret_handshake {
    std::vector<std::string> commands(int);
}  // namespace secret_handshake

#endif // SECRET_HANDSHAKE_H

Last update: February 13, 2021

Comments