Ir al contenido principal

Determinar el biotipo de una persona en Rust

En nuestro blog mellizo, vimos como determinar el biotipo de una persona en Go. Ahora veremos el mismo programa implementado en Rust.

El programa solicitará al usuario su peso y talla, obteniendo así su biotipo.

Pero... ¿Qué es el biotipo?

El biotipo de una persona e refiere a las características corporales, como la estructura ósea, la musculatura y la predisposición al metabolismo, que influyen en la salud, el rendimiento físico y la respuesta a la dieta o ejercicio.


Existen varios biotipos, pero el general comprende estos tres:

  • Ectomorfo: Cuerpo delgado, extremidades largas, dificultad para ganar peso o masa muscular, metabolismo rápido. En otras palabras, sería Longitipo. 
  • Mesomorfo: Cuerpo atlético, facilidad para ganar músculo, estructura ósea equilibrada, metabolismo eficiente. En otras palabras, sería Normotipo. 
  • Endomorfo: Cuerpo con mayor tendencia a acumular grasa, estructura más ancha, metabolismo más lento. En otras palabras, sería Braquitipo.

biotipos.rs

use std::collections::HashMap;
use std::io;

fn obtener_valor(diccionario: &HashMap<&str, f64>, clave: &str) -> f64 {
    *diccionario.get(clave).unwrap_or(&-999.0)
}

fn main() {
    let  peso_dict: HashMap<&str, f64> = [
        ("85.54", 3.0), ("83.79", 2.75), ("82.04", 2.5), ("80.29", 2.25),
        ("78.54", 2.0), ("76.79", 1.75), ("75.04", 1.5), ("73.29", 1.25),
        ("71.54", 1.0), ("69.79", 0.75), ("68.04", 0.50), ("66.29", 0.25),
        ("64.54", 0.0), ("62.79", -0.25), ("61.04", -0.50), ("59.29", -0.75),
        ("57.54", -1.0), ("55.79", -1.25), ("54.04", -1.50), ("52.29", -1.75),
        ("50.54", -2.0), ("45.79", -2.25), ("47.04", -2.5), ("45.29", -2.75),
        ("43.54", -3.0)
    ].iter().cloned().collect();
    
    let  estatura_dict: HashMap<&str, f64> = [
        ("1.87", 3.0), ("1.86", 2.75), ("1.85", 2.50), ("1.83", 2.23),
        ("1.82", 2.0), ("1.81", 1.75), ("1.79", 1.50), ("1.78", 2.25),
        ("1.77", 1.0), ("1.75", 0.75), ("1.74", 0.50), ("1.73", 0.25),
        ("1.71", 0.0), ("1.7", -0.25), ("1.69", -0.50), ("1.67", -0.75),
        ("1.66", -1.0), ("1.65", -1.25), ("1.63", -1.50), ("1.62", -1.75),
        ("1.61", -2.0), ("1.59", -2.25), ("1.58", -2.50), ("1.57", -2.75),
        ("1.55", -3.0)
    ].iter().cloned().collect();
    
    let mut peso = String::new();
    let mut estatura = String::new();
    
    println!("Tu peso es de (ejemplo: 56.00): ");
    io::stdin().read_line(&mut peso).expect("Error al leer la entrada");
    let peso = peso.trim();
    
    println!("Tu estatura es de (ejemplo: 1.55): ");
    io::stdin().read_line(&mut estatura).expect("Error al leer la entrada");
    let estatura = estatura.trim();
    
    let valor_peso = obtener_valor(&peso_dict, peso);
    let valor_estatura = obtener_valor(&estatura_dict, estatura);
    
    println!("valor peso: {:.1}", valor_peso);
    println!("valor estatura: {:.1}", valor_estatura);
    
    if valor_peso == -999.0 || valor_estatura == -999.0 {
        println!("Error: Peso o estatura no válidos. Asegúrate de ingresar valores dentro del rango permitido.");
        return;
    }
    
    let desviacion = valor_peso - valor_estatura;
    
    if desviacion < 0.0 {
        println!("Tu biotipo es: longitipo. Largo. Delgado. De apariencia frágil.");
    } else if desviacion > 0.0 {
        println!("Tu biotipo es: braquitipo. Sobrepeso. Acumula grasas. Puede ganar musculatura si realiza ejercicio.");
    } else {
        println!("Tu biotipo es: normotipo. Fuerte. Atlético. Musculoso.");
    }
}

Dar formato al programa:

$ rustfmt biotipos.rs

Compilamos:

$ rustc biotipos.rs

Ejecutamos:

$ ./biotipos.exe

Salida:

biotipos.exe
Tu peso es de (ejemplo: 56.00):
55.79
Tu estatura es de (ejemplo: 1.55):
1.74
Tu biotipo es: longitipo. Largo. Delgado. De apariencia frágil.

El programa requiere mejoras, pero es funcional para los pesos y tallas de los hashmap definidos.

Enlaces:

https://codemonkeyjunior.blogspot.com/search/label/biotipo

Comentarios