52 lines
1.1 KiB
Elixir
52 lines
1.1 KiB
Elixir
|
defmodule PopCount do
|
||
|
@doc """
|
||
|
Given the number, count the number of eggs.
|
||
|
"""
|
||
|
@spec egg_count(number :: integer()) :: non_neg_integer()
|
||
|
def egg_count(number) do
|
||
|
for(<<bit::1 <- :binary.encode_unsigned(number)>>, do: bit) |> Enum.sum
|
||
|
end
|
||
|
|
||
|
# @spec egg_count(number :: integer()) :: non_neg_integer()
|
||
|
# def egg_count(number) do
|
||
|
# result =
|
||
|
# number
|
||
|
# |> Integer.digits(2)
|
||
|
# |> Enum.reduce(%{binary: "", count: 0, coop: "|", length: 0}, &egg_counter/2)
|
||
|
|
||
|
# """
|
||
|
# Chicken Coop:
|
||
|
# #{String.duplicate(" _", result.length)}
|
||
|
# #{result.coop}
|
||
|
|
||
|
# Resulting Binary:
|
||
|
# #{result.binary}
|
||
|
|
||
|
# Decimal number on the display:
|
||
|
# #{number}
|
||
|
|
||
|
# Actual eggs in the coop:
|
||
|
# #{result.count}
|
||
|
# """
|
||
|
# |> IO.puts()
|
||
|
|
||
|
|
||
|
# result.count
|
||
|
# end
|
||
|
|
||
|
# defp egg_counter(element, %{binary: binary, count: count, coop: coop, length: length} = _acc) do
|
||
|
# char =
|
||
|
# case element do
|
||
|
# 0 -> " "
|
||
|
# 1 -> "E"
|
||
|
# end
|
||
|
|
||
|
# %{
|
||
|
# coop: coop <> char <> "|",
|
||
|
# count: count + element,
|
||
|
# length: length + 1,
|
||
|
# binary: binary <> "#{element}"
|
||
|
# }
|
||
|
# end
|
||
|
end
|