CoddityTeam / movaicode

Concours mensuel du Pire Développeur de France
123 stars 10 forks source link

La Bretagne to the moon - Challenge accepted #272

Open nexus9111 opened 1 year ago

nexus9111 commented 1 year ago

Voila ma solution au challenge et au défis caché !

/**
 * 
 * @author ~ Joss Coupet ~ 
 * @contact ~ contact@joss-coupet.eu ~
 * @website ~ www.joss-coupet.eu ~
 * 
 * @description Le défi caché est de savoir combien de farine, 
 *  d'oeuf, de lait, de beurre et de sucre sont nécessaires pour 
 *  recouvrir la lune d'une crèpe et d'en faire un fief breton. 
 *  Movai donne le prototype d'une fonction et c'est à nous de la définir 
 *  de la pire des manières.
 * @language ~ JavaScript ~
 * 
 */

const EGG_FOR_ONE_CREPE = 0.25;
const FLOUR_FOR_ONE_CREPE = 20;
const BUTTER_FOR_ONE_CREPE = 3.5;
const MILK_FOR_ONE_CREPE = 4;
const SUGAR_FOR_ONE_CREPE = 0.25;

const SURFACE_LUNE = 37_871_220_000_000 // m2

// cette fonction calcule le nombre maximum d'oeufs
const calculLeNombreMaximumeDOeufs = (nombre_d_oeuf) => {
    return Math.floor(nombre_d_oeuf / EGG_FOR_ONE_CREPE);
}

// cette fonction calcule le nombre maximum de farine
const calculLeNombreMaximumeDeFarine = (farine_en_gramme) => {
    return Math.floor(farine_en_gramme / FLOUR_FOR_ONE_CREPE);
}

// cette fonction calcule le nombre maximum de beurre
const calculLeNombreMaximumeDeBeurre = (beurre_en_gramme) => {
    return Math.floor(beurre_en_gramme / BUTTER_FOR_ONE_CREPE);
}

// cette fonction calcule le nombre maximum de lait
const calculLeNombreMaximumeDeLait = (lait_en_centilitres) => {
    return Math.floor(lait_en_centilitres / MILK_FOR_ONE_CREPE);
}

const calculLeNombreMaximumeDeSucre = (sucre_en_gramme) => {
    return Math.floor(sucre_en_gramme / SUGAR_FOR_ONE_CREPE);
}

// cette fonction calcule la surface d'une crèpe
const calculSurfaceCrepe = ({ oeuf, farine, beurre, lait, sucre }, unit = "m2") => {
    let nombreMaximumDeOeuf = calculLeNombreMaximumeDOeufs(oeuf);
    let nombreMaximumDeFarine = calculLeNombreMaximumeDeFarine(farine);
    let nombreMaximumDeBeurre = calculLeNombreMaximumeDeBeurre(beurre);
    let nombreMaximumDeLait = calculLeNombreMaximumeDeLait(lait);
    let nombreMaximumDeMorceauDeSucre = calculLeNombreMaximumeDeSucre(sucre);

    // nombre maximum de crèpes avec les ingrédients donnés dans les paramètres de la fonction
    let nombreMaximumDeCrepeAvecLesIngredientsDonnesDansLesParametresDeLaFonction = Math.min(nombreMaximumDeOeuf, nombreMaximumDeFarine, nombreMaximumDeBeurre, nombreMaximumDeLait, nombreMaximumDeMorceauDeSucre);
    if (unit === "cm2") {
        let surface = nombreMaximumDeCrepeAvecLesIngredientsDonnesDansLesParametresDeLaFonction * 572 // cm2
        return surface;
    } else if (unit === "km2") {
        let surface = nombreMaximumDeCrepeAvecLesIngredientsDonnesDansLesParametresDeLaFonction * 0.0000000572 // km2
        return surface;
    } else {
        let surface = nombreMaximumDeCrepeAvecLesIngredientsDonnesDansLesParametresDeLaFonction * 0.0572 // m2
        return surface;
    }
}

// oui, ce nom de fonction est horrible
const avoirLesIngredientsNecessairePourRecouvrirLaLune = () => {
    let surface_d_une_crepe = calculSurfaceCrepe({ oeuf: EGG_FOR_ONE_CREPE, farine: FLOUR_FOR_ONE_CREPE, beurre: BUTTER_FOR_ONE_CREPE, lait: MILK_FOR_ONE_CREPE, sucre: SUGAR_FOR_ONE_CREPE }, "m2");
    let nombre_de_crepe = Math.ceil(SURFACE_LUNE / surface_d_une_crepe);
    let nombre_d_oeuf = Math.ceil(nombre_de_crepe * EGG_FOR_ONE_CREPE);
    let nombre_de_farine = Math.ceil(nombre_de_crepe * FLOUR_FOR_ONE_CREPE);
    let nombre_de_beurre = Math.ceil(nombre_de_crepe * BUTTER_FOR_ONE_CREPE);
    let nombre_de_lait = Math.ceil(nombre_de_crepe * MILK_FOR_ONE_CREPE);
    let nombre_de_sucre = Math.ceil(nombre_de_crepe * SUGAR_FOR_ONE_CREPE);

    return {
        nombre_de_crepe,
        nombre_d_oeuf,
        nombre_de_farine,
        nombre_de_beurre,
        nombre_de_lait,
        nombre_de_sucre
    }
}

const main = () => {
    let {
        nombre_de_crepe, // nombre de crèpes
        nombre_d_oeuf, // nombre d'oeufs
        nombre_de_farine, // nombre de farine
        nombre_de_beurre, // nombre de beurre
        nombre_de_lait, // nombre de lait
        nombre_de_sucre // nombre de sucre
    } = avoirLesIngredientsNecessairePourRecouvrirLaLune();
    console.log(`Pour recouvrir la lune d'une crèpe il faut l'équivalent de ${nombre_de_crepe} crèpes, soit :`);
    console.log(`- ${Math.ceil(nombre_d_oeuf)} oeufs`);
    console.log(`- ${nombre_de_farine} g de farine`);
    console.log(`- ${nombre_de_beurre} g de beurre`);
    console.log(`- ${nombre_de_lait} cl de lait`);
    console.log(`- ${nombre_de_sucre} g de sucre`);

    let surface_en_km2 = calculSurfaceCrepe({ oeuf: nombre_d_oeuf, farine: nombre_de_farine, beurre: nombre_de_beurre, lait: nombre_de_lait, sucre: nombre_de_sucre }, "km2");
    let surface_en_m2 = calculSurfaceCrepe({ oeuf: nombre_d_oeuf, farine: nombre_de_farine, beurre: nombre_de_beurre, lait: nombre_de_lait, sucre: nombre_de_sucre }, "m2");
    let surface_en_cm2 = calculSurfaceCrepe({ oeuf: nombre_d_oeuf, farine: nombre_de_farine, beurre: nombre_de_beurre, lait: nombre_de_lait, sucre: nombre_de_sucre }, "cm2");
    console.log(`La surface de la lune recouverte par les crèpes est de ${surface_en_km2} km2, soit ${surface_en_m2} m2, soit ${surface_en_cm2} cm2`);

    console.log(`Cela représenterai une crepe de ${nombre_de_crepe * 27}cm de diamètre`);
}

main();