codewars刷题记录

2018-10-19

运算 : seven(times(five())
// 我的
function get(type, i, j) {
  switch (type) {
    case 0:
      return j + i
    case 1:
      return j - i
    case 2:
      return j * i
    case 3:
      return (j - (j % i)) / i
  }
}

function getN(callback, n) {
  if(!callback) return n
  return get(callback[0], callback[1], n)
}

function zero(callback) {
  return getN(callback, 0)
}
function one(callback) {
  return getN(callback, 1)
}
function two(callback) {
  return getN(callback, 2)
}
function three(callback) {
  return getN(callback, 3)
}
function four(callback) {
  return getN(callback, 4)
}
function five(callback) {
  return getN(callback, 5)
}
function six(callback) {
  return getN(callback, 6)
}
function seven(callback) {
  return getN(callback, 7)
}
function eight(callback) {
  return getN(callback, 8)
}
function nine(callback) {
  return getN(callback, 9)
}

function plus(i) { 
  return [0, i]
}
function minus(i) {
  return [1, i]
}
function times(i) {
 return[2, i]
 }
function dividedBy(i) {
 return [3, i]
} 


// 优秀解法
['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
.forEach(function (name, n) {
  this[name] = function (f) { return f ? f(n) : n }
});

function plus(n)      { return function (a) { return a + n } }
function minus(n)     { return function (a) { return a - n } }
function times(n)     { return function (a) { return a * n } }
function dividedBy(n) { return function (a) { return a / n } }
复制代码

2018-10-18

最近两个数之和是否等于第三个数
// 我的
function productFib(prod){
  const phi = (1 + Math.sqrt(5))/2
  const fn = (n) => Math.round(Math.pow(phi, n) / Math.sqrt(5))
  for(var i = 1;  fn(i) * fn(i+1) < prod; i++) {}
  return [fn(i), fn(i+1), fn(i)*fn(i+1) === prod]
}

// 优秀解法
function productFib(prod){
  let [a, b] = [0, 1];
  while(a * b < prod) [a, b] = [b, a + b];
  return [a, b, a * b === prod];
}
复制代码
求数组中最小2个数之和

sort(): 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

array.sort()方法默认是升序排序,如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

若 a 等于 b,则返回 0。

若 a 大于 b,则返回一个大于 0 的值。

// 我的
function sumTwoSmallestNumbers(numbers) {  
  //Code here
  const arr = numbers.sort((a, b) => {
  return a-b})
  return (arr[0] + arr[1])
};
// 优秀解法
function sumTwoSmallestNumbers(numbers) {  
  var [ a, b ] = numbers.sort((a, b) => a - b)
  return a + b
}
复制代码
编写一个接受10个整数(0到9之间)数组的函数,它以电话号码的形式返回这些数字的字符串
createPhoneNumber([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) // => returns "(123) 456-7890"
复制代码
// 我的
function createPhoneNumber(numbers){
  const area = numbers.slice(0, 3).join('')
  const num = numbers.slice(3, 6).join('')
  const phone = numbers.slice(6).join('')
  return `(${area}) ${num}-${phone}`
}

// 优秀解法
function createPhoneNumber(numbers){
  var format = "(xxx) xxx-xxxx";
  
  for(var i = 0; i < numbers.length; i++)
  {
    format = format.replace('x', numbers[i]);
  }
  
  return format;
}
function createPhoneNumber(numbers){
  return numbers.join('').replace(/(...)(...)(.*)/, '($1) $2-$3');
}
function createPhoneNumber(numbers){
  return numbers.join('').replace(/(\d{3})(\d{3})(\d{4})/,'($1) $2-$3');
}
复制代码

2018-10-15

从列表a中删除列表b中的所有值
// 我的
function array_diff(a, b) {
  const all = [...a, ...b]
  return all.filter(item => a.indexOf(item) > -1 && b.indexOf(item) <= -1)
}

// 优秀解法
function array_diff(a, b) {
  return a.filter(function(x) { return b.indexOf(x) == -1; });
}
function array_diff(a, b) {
  return a.filter(e => !b.includes(e));
}
复制代码
求字符串最小单词长度
// 我的
function findShort(s){
  let arr = s.split(' ').sort((a, b) => {
    return a.length - b.length
  }) 
  return arr[0].length
}

// 优秀解法
function findShort(s){
  return Math.min.apply(null, s.split(' ').map(w => w.length));
}
复制代码
求字符串元音字符个数
// 我的
function getCount(str) {
  var vowelsCount = 0;
  
  // enter your majic here
  const arr = ['a','e','i','o', 'u']
  for(let i = 0; i <= str.length; i++) {
    if(arr.indexOf(str[i]) > -1) {
      vowelsCount ++ 
    }
  }
  return vowelsCount;
}

// 优秀解法
function getCount(str) {
  return (str.match(/[aeiou]/ig)||[]).length;
}
复制代码

2018-10-11

返回第一个最长的字符串,该字符串由数组中的k个连续字符串组成
// 我的
function longestConsec(strarr, k) {
    if(k > strarr.length || k <= 0) {
      return ""
    }    
    let string = ""
    for(var i = 0 ; i <= strarr.length - k ; i ++ ) {
       string = strarr.slice(i, i + k).join('').length > string.length ?  strarr.slice(i, i + k).join('') : string
    }
    return string
}
// 优秀解法
function longestConsec(strarr, k) {
    var longest = "";
    for(var i=0;k>0 && i<=strarr.length-k;i++){
      var tempArray = strarr.slice(i,i+k);
      var tempStr = tempArray.join("");
      if(tempStr.length > longest.length){
        longest = tempStr;
      }
    }
    return longest;
}
复制代码

转载于:https://juejin.im/post/5bc44eee5188256baa21facb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值