33 lines
728 B
Elixir
Raw Normal View History

2021-06-22 01:56:14 +00:00
defmodule Wabanex.IMC do
@moduledoc """
Body mass index calculation
"""
2021-06-22 01:56:14 +00:00
def calculate(%{"filename" => filename}) do
filename
|> File.read()
|> handle_file()
end
defp handle_file({:ok, content}) do
data =
content |> String.trim() |> String.split("\n") |> Enum.map(&parse_line/1) |> Enum.into(%{})
2021-06-22 01:56:14 +00:00
{:ok, data}
end
defp handle_file({:error, _reason}) do
{:error, "Error while opening the file"}
end
defp parse_line(line) do
line
|> String.split(",")
|> List.update_at(1, &String.to_float/1)
|> List.update_at(2, &String.to_float/1)
|> calculate_imc()
end
defp calculate_imc([name, height, weight]), do: {name, weight / :math.pow(height / 100, 2)}
end