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
10 = double blink
100 = close your eyes
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.
use Bitwise (or div/rem)
If you use Bitwise, an easy way to see if a particular bit is set is to compare
the binary AND (&&&
) of a set of bits with the particular bit pattern you
want to check, and determine if the result is the same as the pattern you're
checking.
Example:
Flags: 0b11011 Check: 0b11010
Flags &&& Check: 0b11010 (All checked bits are set)
Another:
Flags: 0b11011 Check: 0b10110
Flags &&& Check: 0b10010 (Third bit not set)
Execute the tests with:
$ elixir secret_handshake_test.exs
In the test suites, all but the first test have been skipped.
Once you get a test passing, you can unskip the next one by
commenting out the relevant @tag :pending
with a #
symbol.
For example:
# @tag :pending
test "shouting" do
assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
end
Or, you can enable all the tests by commenting out the
ExUnit.configure
line in the test suite.
# ExUnit.configure exclude: :pending, trace: true
If you're stuck on something, it may help to look at some of the available resources out there where answers might be found.
Bert, in Mary Poppins http://www.imdb.com/title/tt0058331/quotes/qt0437047
It's possible to submit an incomplete solution so you can see how others have completed the exercise.