28 lines
946 B
Elixir
28 lines
946 B
Elixir
|
defmodule SecretHandshake do
|
||
|
import Bitwise
|
||
|
|
||
|
@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 = wink
|
||
|
10 = double blink
|
||
|
100 = close your eyes
|
||
|
1000 = jump
|
||
|
|
||
|
10000 = Reverse the order of the operations in the secret handshake
|
||
|
"""
|
||
|
@spec commands(code :: integer) :: list(String.t())
|
||
|
def commands(code) do
|
||
|
[]
|
||
|
|> (fn acc -> if (code &&& 1) == 1, do: ["wink" | acc], else: acc end).()
|
||
|
|> (fn acc -> if (code &&& 2) == 2, do: ["double blink" | acc], else: acc end).()
|
||
|
|> (fn acc -> if (code &&& 4) == 4, do: ["close your eyes" | acc], else: acc end).()
|
||
|
|> (fn acc -> if (code &&& 8) == 8, do: ["jump" | acc], else: acc end).()
|
||
|
|> (fn acc -> if (code &&& 16) == 16, do: acc, else: Enum.reverse(acc) end).()
|
||
|
end
|
||
|
end
|