每日一練---codewars

距離上次發(fā)布文章過去了很久,中間其實(shí)也沒有斷開學(xué)習(xí),只是都在ipad上面記錄了自己的學(xué)習(xí)過程?,F(xiàn)在開始新的算法練習(xí),也是記錄下自己每一次能不能有小小的進(jìn)步

每日一題

題目:recipe為配方是一個(gè)對(duì)象({ "cream": 200, "flour": 300, "sugar": 150, "milk": 100, "oil": 100 }),
available是可提供的原材料、暫稱為原料,也是一個(gè)對(duì)象({ "sugar": 1700, "flour": 20000, "milk": 20000, "oil": 30000, "cream": 5000 })。
現(xiàn)在需要計(jì)算出原材料能根據(jù)配方制作出多少的成品
題目難度:5kyu

recipe 是配方 available可提供的原料
首先判斷 原料里是否有我們需要的配方 如果沒有 就做不出
如果原料都有 那么原料的數(shù)量是否大于配方的數(shù)量 如果小于
得出需要配方最大的 然后得出與原料的比例 在依次比較 只要有一個(gè)不滿足 就說明不能滿足
這種思路寫下去 略微復(fù)雜了點(diǎn) 最后越接近實(shí)現(xiàn)的腳步 越復(fù)雜 所以果斷放棄這種方法

function cakes(recipe, available) {
    var count = 0;
    for (var i in recipe) {
        if (!(i in available)) {
            return count
        } else {
            if (recipe[i] > available[i]) {
                return count
            }
        }
    }
    var keyArr = Object.keys(recipe).sort((a, b) => {
        return recipe[b] - recipe[a]
    })
    var flag = Math.floor(available[keyArr[0]] / recipe[keyArr[0]])
    for (var i = 0; i < keyArr.length; i++) {
        var val = Math.floor(available[keyArr[0]] / recipe[keyArr[0]]);
        if (val < 1) {
            count = 0;
            return count;
        }
    }
    for (var i = 0; i < keyArr.length; i++) {
        var val = Math.floor(available[keyArr[0]] / recipe[keyArr[0]]);
        if (val < flag && val >= 1) {
            count = 1;
            return count;
        }
    }
    count = flag;
    console.log(count)
    return count;
}

cakes({ "cream": 200, "flour": 300, "sugar": 150, "milk": 100, "oil": 100 }, { "sugar": 1700, "flour": 20000, "milk": 20000, "oil": 30000, "cream": 5000 });

另一種思路 我把配方 recipe 按照子元素排序 得出一個(gè)數(shù)組 新建一個(gè)對(duì)象 然后與原料進(jìn)行 比較 得出差值 取最小值 如果原料沒有該配方 值為0


function cakes(recipe, available) {
    var keyArr = Object.keys(recipe).sort((a, b) => {
        return recipe[b] - recipe[a]
    })
    var obj = {};
    for (var i = 0; i < keyArr.length; i++) {
         obj[keyArr[i]] = available[keyArr[i]] ? Math.floor(available[keyArr[i]] / recipe[keyArr[i]]) : 0
    }
    var newobj = Object.keys(obj).sort((b, a) => {
        return obj[b] - obj[a]
    })
    return obj[newobj[0]];
}

優(yōu)化 一開始沒必要排序 只需要進(jìn)行取差值就哦尅

function cakes(recipe, available) {
    var obj = {};
    for (var i in recipe) {
        obj[i] = available[i] ? Math.floor(available[i] / recipe[i]) : 0
    }
    var newobj = Object.keys(obj).sort((b, a) => {
        return obj[b] - obj[a]
    })
    console.log(obj[newobj[0]])
    return obj[newobj[0]];
}

繼續(xù)優(yōu)化 沒有必要在生成一個(gè)新的對(duì)象 我只需要把所有的差值放進(jìn)數(shù)組 取最小值

function cakes(recipe, available) {
    var arr = []
    for (var i in recipe) {
        arr.push(available[i] ? Math.floor(available[i] / recipe[i]) : 0)
    }
    console.log(newArr
    return Math.min(...arr);
}

繼續(xù)優(yōu)化 使用 es6 新語法 進(jìn)行對(duì)象的遍歷 一行代碼解決 最終版!

function cakes(recipe, available) {
    return Math.min(...(Object.keys(recipe).map(i=>{
        return available[i] ? Math.floor(available[i] / recipe[i]) : 0
    })))
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文/書童 為何要在簡書上發(fā)這篇不用思考的文章? 正式以翻譯為飯碗第十五年了,無論事前準(zhǔn)備得多充分,卻常常在吃飯的細(xì)...
    素琴齋書童閱讀 8,257評(píng)論 6 6
  • [烘焙原料中英文對(duì)照表] 粉類Plain flour ...
    Emilyqueen閱讀 585評(píng)論 0 0
  • Welcome to C++! This exciting language, which blends the ...
    cppUncleSix閱讀 981評(píng)論 0 0
  • 久違的晴天,家長會(huì)。 家長大會(huì)開好到教室時(shí),離放學(xué)已經(jīng)沒多少時(shí)間了。班主任說已經(jīng)安排了三個(gè)家長分享經(jīng)驗(yàn)。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,822評(píng)論 16 22
  • 創(chuàng)業(yè)是很多人的夢想,多少人為了理想和不甘選擇了創(chuàng)業(yè)來實(shí)現(xiàn)自我價(jià)值,我就是其中一個(gè)。 創(chuàng)業(yè)后,我由女人變成了超人,什...
    亦寶寶閱讀 2,008評(píng)論 4 1

友情鏈接更多精彩內(nèi)容