secret_handshake
This commit is contained in:
35
elixir/secret-handshake/lib/secret_handshake.ex
Normal file
35
elixir/secret-handshake/lib/secret_handshake.ex
Normal file
@@ -0,0 +1,35 @@
|
||||
defmodule SecretHandshake do
|
||||
@doc """
|
||||
Determine the actions of a secret handshake based on the binary
|
||||
representation of the given `code`.
|
||||
|
||||
If the following bits are set, include the corresponding action in your list
|
||||
of commands, in order from lowest to highest.
|
||||
|
||||
1 1 = wink
|
||||
2 10 = double blink
|
||||
4 100 = close your eyes
|
||||
8 1000 = jump
|
||||
|
||||
16 10000 = Reverse the order of the operations in the secret handshake
|
||||
"""
|
||||
|
||||
@coms %{
|
||||
1 => "wink",
|
||||
2 => "double blink",
|
||||
4 => "close your eyes",
|
||||
8 => "jump",
|
||||
16 => "reverse"
|
||||
}
|
||||
|
||||
@spec commands(code :: integer) :: list(String.t())
|
||||
def commands(code) do
|
||||
@coms
|
||||
|> Map.keys()
|
||||
|> Enum.reduce([], &if(Bitwise.band(code, &1) == &1, do: [@coms[&1] | &2], else: &2))
|
||||
|> case do
|
||||
["reverse" | tail] -> tail
|
||||
reversed_list -> Enum.reverse(reversed_list)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user