Problema:
Sua tarefa é escrever um programa que tenha como entrada uma altura (em metros) e peso (em quilogramas) e produza a categoria de IMC correspondente.
O IMC é uma medida da relação entre seu peso e sua altura. É datado e impreciso para muitas pessoas , mas isso não importa aqui!
O IMC pode ser calculado usando a seguinte equação:
BMI = (mass in kilograms) / (height in meters)^2
As categorias serão definidas da seguinte forma:
IMC <18,5: "Baixo peso"
18,5 <= IMC <25: "Normal"
25 <= IMC: "Excesso de peso"
Para o desafio, estou ignorando todas as categorias "extremas". Além disso, como alguns números como "25" se situam entre duas categorias, ajustei os limites levemente para que haja uma resposta definitiva.
Você pode escrever uma função ou um programa completo.
Entrada:
A entrada pode estar em qualquer forma razoável. Dois números (ou cadeias), como 2 argumentos separados ou como uma única cadeia. Uma matriz / lista de 2 números, um dicionário com as teclas "peso" e "altura" ... Os valores decimais devem ser suportados. Você pode assumir que a entrada sempre será válida (sem valores negativos e a altura nunca será 0).
Saída:
A saída será uma sequência que contém os nomes de categoria que não diferenciam maiúsculas de minúsculas . As strings devem corresponder aos nomes das categorias exatamente como acima, ignorando maiúsculas e minúsculas. Pode ser enviado para o stdout, retornado (no caso de uma função) ou gravado no arquivo.
Casos de teste (peso, altura => resultado):
80, 1 => "Overweight"
80, 2 => "Normal"
80, 3 => "Underweight"
50, 1 => "Overweight"
50, 1.5 => "Normal"
50, 2 => "Underweight"
Edge Cases:
41, 1.5 => "Underweight" (18.2 BMI)
42, 1.5 => "Normal" (18.667 BMI)
56, 1.5 => "Normal" (24.889 BMI)
57, 1.5 => "Overweight" (25.3 BMI)
73, 2 => "Underweight" (18.25 BMI)
74, 2 => "Normal" (18.5 BMI)
99, 2 => "Normal" (24.75 BMI)
100, 2 => "Overweight" (25 BMI)
Aqui está um pseudocódigo que mostra um exemplo de implementação:
function bmi_category(weight, height):
var bmi = (weight / (height**2))
if (bmi < 18.5):
return "Underweight"
if (18.5 <= bmi < 25):
return "Normal"
if (25 <= bmi):
return "Overweight"
Isso é código-golfe, então o menor número de bytes vence.
(Sim, essa tarefa é extremamente trivial na maioria dos idiomas. Atualmente, a maioria dos desafios parece ser mais difícil do que o normal, então pensei em publicar um mais acessível).
NOTA! Uma hora depois de postar esse desafio, tive que modificar os intervalos levemente, pois os intervalos declarados tinham "buracos", conforme apontado nos comentários. Por favor, veja os novos intervalos.