Sorun:
Göreviniz, giriş yüksekliği (metre cinsinden) ve ağırlık (kilogram cinsinden) alan ve ilgili BMI kategorisini çıkaran bir program yazmaktır.
BMI , kilonuzun boyunuza olan oranının bir ölçüsüdür. Tarihli ve birçok insan için yanlış , ama bu burada önemli değil!
BMI, aşağıdaki denklem kullanılarak hesaplanabilir:
BMI = (mass in kilograms) / (height in meters)^2
Kategoriler aşağıdaki gibi tanımlanacaktır:
BMI <18.5: "Düşük Ağırlık"
18.5 <= BMI <25: "Normal"
25 <= BMI: "Aşırı kilo"
Mücadelenin uğruna, tüm "aşırı" kategorileri görmezden geliyorum. Ayrıca, "25" gibi bazı sayılar 2 kategori arasında oturduğundan, sınırları biraz ayarlayıp kesin bir cevap aldım.
Bir işlev veya tam bir program yazabilirsiniz.
Giriş:
Giriş herhangi bir makul biçimde olabilir. İki sayı (veya dize), 2 ayrı argüman veya tek bir dize olarak. 2 sayıdan oluşan bir dizi / liste, "weight" ve "height" tuşlarına sahip bir sözlük ... Ondalık değerler desteklenmelidir. Girişin her zaman geçerli olacağını varsayabilirsiniz (negatif değer yok ve yükseklik asla 0 olamaz).
Çıktı:
Çıktı büyük / küçük harf duyarlı olmayan kategori adlarını içeren bir dize olacaktır . Karakter dizileri, görmezden gelinme durumuna göre kategori adlarıyla tamamen aynı olmalıdır. Stdout'a gönderilebilir, geri döndürülebilir (bir işlev durumunda) veya dosyaya yazılabilir.
Test Durumları (ağırlık, boy => sonuç):
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)
İşte örnek bir uygulama gösteren bazı sahte kod:
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"
Bu kod golf, yani en az sayıda bayt kazanıyor.
(Evet, bu görev çoğu dilde son derece önemsizdir. Zorlukların çoğu son zamanlarda normalden daha zor gibi görünüyor, bu yüzden daha erişilebilir bir tane göndereceğimi düşündüm).
NOT! Bu zorluğu yayınladıktan bir saat sonra, belirtilen aralıkların yorumlarda belirtildiği gibi "delikler" olduğu için aralıkları biraz değiştirmek zorunda kaldım. Lütfen yeni aralıkları görün.