I am doing some exercises while learning Elixir using Exercism.io.
Now, my objective is to do all exercises, extras included. This should give me a good grasp of the power of the language.
However I am having trouble. I don’t quite understand what some exercises want me to do, but I refuse to skip them either. One of these exercises is the following:
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.
Flags: 0b11011 Check: 0b11010
Flags &&& Check: 0b11010 (All checked bits are set)
Flags: 0b11011 Check: 0b10110
Flags &&& Check: 0b10010 (Third bit not set)
Could someone help me understand why
11 translates to
["wink", "double blink"] instead of translating to
["wink", "wink"] ? ( it has two 1, right ? )
I know I am missing something rather basic but I just can see what.