codewars挑戰系列(三):The Feast of Many Beasts and .....

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)
}
}

2.The Supermarket Queuejava

/**
超市排隊結算,第一個參數爲序列數組,元素表示時長,第二個參數爲收銀臺的個數,不容許插隊。計算出全部人結算的時間。

思路:要計算最後的時間,就要比較得出耗時最長的收銀臺。能夠定義數組存放每一個收銀臺的耗時,初始都爲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);
}

3.Build a Car數組

/**
設計一個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] + "'"
  }
}
相關文章
相關標籤/搜索