FCC 高階演算法

kkkkuuuu發表於2017-12-21

###1.Validate US Telephone Numbers 如果傳入字串是一個有效的美國電話號碼,則返回 true.

function telephoneCheck(str) {
    return /^1? ?(\d{3}|\(\d{3}\))[ -]?\d{3}[ -]?\d{4}$/.test(str);
}

telephoneCheck("555-555-5555");
複製程式碼

###2.Symmetric Difference 建立一個函式,接受兩個或多個陣列,返回所給陣列的 對等差分(symmetric difference) (△ or ⊕)陣列.

function sym(args) {
    let argsArr = Array.from(arguments);
    let result = argsArr.reduce((arr1, arr2) => {
        var arr1 = dis(arr1);
        var arr2 = dis(arr2);
        return symDif(arr1, arr2);
    }, [])

    return result.sort((a, b) => {
        return a - b;
    });
}

//去除每個陣列中重複的數字
dis = (arr) => {
    return arr.filter((item, index, array) => {
        return array.indexOf(item) == index;
    })

}

//兩個陣列對等差分
symDif = (arr1, arr2) => {
    var newArr = arr1.filter((item) => {
        var index = arr2.indexOf(item);
        if (index < 0) {
            return true;
        } else {
            arr2.splice(index, 1);
            return false;
        }
    });
    return newArr.concat(arr2);
}

sym([1, 2, 3], [5, 2, 1, 4]);
複製程式碼

###3.Exact Change 設計一個收銀程式 checkCashRegister() ,其把購買價格(price)作為第一個引數 , 付款金額 (cash)作為第二個引數, 和收銀機中零錢 (cid) 作為第三個引數.

cid 是一個二維陣列,存著當前可用的找零.

當收銀機中的錢不夠找零時返回字串 "Insufficient Funds". 如果正好則返回字串 "Closed".

否則, 返回應找回的零錢列表,且由大到小存在二維陣列中.

###4.Inventory Update 依照一個存著新進貨物的二維陣列,更新存著現有庫存(在 arr1 中)的二維陣列. 如果貨物已存在則更新數量 . 如果沒有對應貨物則把其加入到陣列中,更新最新的數量. 返回當前的庫存陣列,且按貨物名稱的字母順序排列.

自己驗證的時候沒問題

function updateInventory(arr1, arr2) {
    // 請保證你的程式碼考慮到所有情況

    const newArr = curInv.map((item) => item[1]);
    newInv.forEach((item, index, arr) => {
        var i = newArr.indexOf(item[1]);
        if (i >= 0) {
            curInv[i][0] += newInv[index][0];
        } else {
            curInv.push(newInv[index]);
        }
    })

    return curInv.sort((a, b) => {
        return a[1].charCodeAt(0) - b[1].charCodeAt(0);
    });
}

// 倉庫庫存示例
var curInv = [
    [21, "Bowling Ball"],
    [2, "Dirty Sock"],
    [1, "Hair Pin"],
    [5, "Microphone"]
];

var newInv = [
    [2, "Hair Pin"],
    [3, "Half-Eaten Apple"],
    [67, "Bowling Ball"],
    [7, "Toothpaste"]
];

updateInventory(curInv, newInv);
複製程式碼

5.No repeats please 把一個字串中的字元重新排列生成新的字串,返回新生成的字串裡沒有連續重複字元的字串個數.連續重複只以單個字元為準

例如, aab 應該返回 2 因為它總共有6中排列 (aab, aab, aba, aba, baa, baa), 但是隻有兩個 (aba and aba)沒有連續重複的字元 (在本例中是 a).

相關文章