1.The Feast of Many Beastsjavascript
/** 判斷兩個字符串首尾字符是否一致 */ // 獲取首尾字符直接判斷 function feast(beast, dish) { return beast[0] === dish[0] && beast[beast.length-1] === dish[dish.length-1] } // slice substr startsWith 等方法都可以達到目的 function feast(beast, dish) { return beast.charAt(0)===dish.charAt(0)&&beast.substr(-1)===dish.substr(-1) } }
/** 超市排隊結算,第一個參數爲序列數組,元素表示時長,第二個參數爲收銀臺的個數,不容許插隊。計算出全部人結算的時間。 思路:要計算最後的時間,就要比較得出耗時最長的收銀臺。能夠定義數組存放每一個收銀臺的耗時,初始都爲0,長度爲n。而後將customers數組的第一個元素依次放入arr,優先放到值最小的位置。 */ function queueTime(customers, n) { //TODO if(customers.length <= 0) return 0 let arr = new Array(n); arr.fill(0); do { arr[arr.indexOf(Math.min.apply(null, arr))] += customers.shift() } while (customers.length > 0) return Math.max.apply(null, arr) } // 優化之後,對customers遍歷,並將值保存到合適的位置;使用擴展運算符計算最大最小值 function queueTime(customers, n) { let arr = new Array(n).fill(0); for (let i of customers) { arr[arr.indexOf(Math.min(...arr))] += i; } return Math.max(...arr); }
/** 設計一個Car構造函數,它的body屬性、chassis屬性都是對象,均有一個component屬性,存放表示三層的字符串。 第一層是" "+"_".repeat(n)這樣的字符串,長度爲length-2; 第二層是"|" + "[]".repeat(n) + " ".repeat(n) + "[]".repeat(n) + "\\"這樣的字符串,長度爲length-1; 第三層是"-o".repeat(n) + "-".repeat(n) + "o-".repeat(n) + "'"這樣的字符串,長度爲length。 _____________ ______ __________ |[][] [][][]\ |[][][]\ | []\ -o-o-o-----o-o-' -o----o-' -o-o------o-' 實例化時傳入length和doors兩個實參,構造函數的基礎形式以下。須要計算出first、second、third三個字符串,其實就是計算要多少 function Car(length, doors) { if(length<7 || doors === 0 || doors*2 > length-3){ throw new Error() } let first = second = third = "" this.body = { component: first + "\n" + second + "\n" } this.chassis = { component: third } } // first,這個很簡單,只有"_"會變化 first = ' '+'_'.repeat(length-3) // second, 主要是計算"[]"的左右位置的個數,左右老是相等或者左比右小一,因此用數組來存放而後根據doors/2 來計算 let secondDoors = ['[]'.repeat(doors/2|0),'[]'.repeat(Math.ceil(doors/2))]; second = "|" + secondDoors[0] + " ".repeat(length-3-doors*2) + secondDoors[1] + "\\"; //third,主要是輪子的個數及位置 let axlesElse = length-12 > 0 ? Math.floor((length-12)/2)+1 : 0; for(let i = 0; i < axlesElse; i++){ thirdAxles[(i%2)]+="o-" } let third = thirdAxles[0] + '-'.repeat(length-1-2*axlesElse-3*2) + thirdAxles[1] + "'"; */ // 最後簡化 function Car(length, doors) { if(length<7 || doors === 0 || doors*2 > length-3){ throw new Error() } let thirdAxles = ["-o-","-o-"]; let axlesElse = length-12 > 0 ? Math.floor((length-12)/2)+1 : 0; for(let i = 0; i < axlesElse; i++){ thirdAxles[(i%2)]+="o-" } let third = thirdAxles[0] + '-'.repeat(length-1-2*axlesElse-3*2) + thirdAxles[1] + "'"; this.body = { component: " " + "_".repeat(length-3) + "\n|" + '[]'.repeat(doors/2|0) + " ".repeat(length-3-doors*2) + '[]'.repeat(Math.ceil(doors/2)) + "\\\n" } this.chassis = { component: thirdAxles[0] + '-'.repeat(length-1-2*axlesElse-3*2) + thirdAxles[1] + "'" } }