Sha256: 78c3df170f53cc40362930aa68205b81d91cbebd36988cd90657af552f4b9a23

Contents?: true

Size: 1.15 KB

Versions: 188

Compression:

Stored size: 1.15 KB

Contents

defmodule SecretHandshake do
  use Bitwise

  @codes ["wink", "double blink", "close your eyes", "jump"]

  @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
    @codes
    |> Enum.with_index
    |> Enum.map(fn {command, i} -> { command, 2 <<< (i-1) } end)
    |> decode_commands(code, [])
  end

  defp decode_commands([], code, results) do
    case flag_set(code, 16) do
      true -> results
      _ -> Enum.reverse(results)
    end
  end
  defp decode_commands([{ command, flag } | flags], code, results) do
    case flag_set(code, flag) do
      true -> decode_commands(flags, code, [command | results])
      _ -> decode_commands(flags, code, results)
    end
  end

  defp flag_set(flags, flag_to_check), do: (flags &&& flag_to_check) == flag_to_check
end

Version data entries

188 entries across 188 versions & 1 rubygems

Version Path
trackler-2.2.1.109 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.108 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.107 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.106 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.105 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.104 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.103 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.102 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.101 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.100 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.99 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.98 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.97 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.96 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.95 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.94 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.93 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.92 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.91 tracks/elixir/exercises/secret-handshake/example.exs
trackler-2.2.1.90 tracks/elixir/exercises/secret-handshake/example.exs