问题描述:

对输入的str按照sz个数进行分块,若一块内所有数字的立方和是偶数,则倒序;否则,向左移动一位。然后将修改过的块整合到一个字符串,作为输出。

The input is a string str of digits. Cut the string into chunks (a chunk here is a substring of the initial string) of size sz (ignore the last chunk if its size is less than sz).

If a chunk represents an integer such as the sum of the cubes of its digits is divisible by 2, reverse that chunk; otherwise rotate it to the left by one position. Put together these modified chunks and return the result as a string.

If

  • sz is <= 0 or if str is empty return ""
  • sz is greater (>) than the length of str it is impossible to take a chunk of size sz hence return "".
Examples:
revrot("123456987654", 6) --> "234561876549"
revrot("123456987653", 6) --> "234561356789"
revrot("66443875", 4) --> "44668753"
revrot("66443875", 8) --> "64438756"
revrot("664438769", 8) --> "67834466"
revrot("123456779", 8) --> "23456771"
revrot("", 8) --> ""
revrot("123456779", 0) --> ""
revrot("563000655734469485", 4) --> "0365065073456944"
我的答案
 function revrot(str, sz) {
if (sz<=0 || str==null || str.length<sz){
return "";
}else{
var num=parseInt(str.length/sz);
var a=[];b=[];
for(var i=0;i<num;i++){
a[i]=str.substr(sz*i,sz);
var sum=0;
for(var j=0;j<sz;j++){
sum=sum+Math.pow(a[i][j],3);
}
a[i]=sum%2==0?reverse(a[i]):rotate(a[i]);
var b=b.concat(a[i]);
}
return b.join("");
}
}
function reverse(str){
return str.split("").reverse().join("").toString();
}
function rotate(str){
return str.substr(1).concat(str.slice(0,1));
}

优秀答案:

 function revrot(str, sz) {
if (sz < 1 || sz > str.length)
return ''; let reverse = s => s.split('').reverse().join('');
let rotate = s => s.slice(1) + s.slice(0, 1);
let sum_cubes = c => c.split('').reduce((a, b) => a + +b ** 3, 0); return str
.match(new RegExp('.{' + sz + '}', 'g'))
.map(c => sum_cubes(c) % 2 ? rotate(c) : reverse(c))
.join('');
}

优秀答案精彩之处在于使用正则取块。

不过有一点小问题就是在b**2部分,chrome显示Uncaught SyntaxError: Unexpected token **。替换成Math.pow(b,3); 就可以啦。

知识点:

1,es6的定义变量

es6之前用var定义变量,存在诸多问题:

可重复定义变量;无块级作用域;甚至不需要声明就可以使用

es6 之后

let定义变量

const定义常量

2,箭头函数

参考 https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001438565969057627e5435793645b7acaee3b6869d1374000

 function(x,y){
return x*2;
}

等同于 (x,y) => x*2;

 

codewars--js--Reverse or rotate?----es6变量,箭头函数,正则取块的更多相关文章

  1. ES6中箭头函数的作用

    我们知道在ES6中,引入了箭头函数,其本质就是等同有ES5中的函数.类似于下面的写法: let test1=() => “abc”; let test2=() => { return “a ...

  2. Es6中箭头函数与普通函数的区别

    Es6中箭头函数与普通函数的区别? 普通function的声明在变量提升中是最高的,箭头函数没有函数提升 箭头函数没有属于自己的this,arguments 箭头函数不能作为构造函数,不能被new,没 ...

  3. es6变量和函数的提升、暂时性死区?

    es6变量和函数的提升.暂时性死区?

  4. es6的箭头函数和es5的function函数区别

    一.es6的箭头函数es6箭头函数内部没有this,使用时会上朔寻找最近的this不可以做构造函数,不能使用new命令,因为没有this函数体内没有arguments,可以使用rest参数代替不能用y ...

  5. ES6 学习 -- 箭头函数(=>)

    (1).只有一个参数且只有一句表达式语句的,函数表达式的花括号可以不写let test = a => a; // 只有一个参数a,这里的表达式相当于 "return a" ( ...

  6. ES6笔记② 箭头函数

    特性介绍 箭头函数是ES6新增的特性之一,它为JS这门语言提供了一种全新的书写函数的语法. //ES5 function fun(x,y){ return x+y; } console.log(fun ...

  7. 关于es6的箭头函数使用与内部this指向

    特型介绍:箭头函数是ES6新增的特性之一,它为JS这门语言提供了一种全新的书写函数的语法. 'use strcit'; let arr = [1,2,3]; //ES5 let es5 = arr.m ...

  8. 关于ES6 用箭头函数后的 this 指向问题

    最近写完小程序后, 开始学习React, 因为有编译器, 就直接用ES6 新语法了, 中间自然离不开  () => { console.log('箭头函数的this是指向哪的问题')}; var ...

  9. ES6使用箭头函数注意点

    新事物也是有两面性的,箭头函数有他的便捷有他的优点,但是他也有缺点,他的优点是代码简洁,this提前定义,但他的缺点也是这些,比如代码太过简洁,导致不好阅读,this提前定义,导致无法使用JS进行一些 ...

随机推荐

  1. 第二阶段冲刺个人任务——two

    今日任务: 优化作业查询结果,按学号排列. 昨日成果: 修改注册界面.

  2. 【转载】Notepad++源码分析

    在网上发现了一个哥们写了关于Notepad++源码的文章,不过就写了一就没有了,我就接着他的工作再说说吧! 大三了,也写了一点儿程序了,但是如果只是按照自己的思路写下去恐怕难以提高,于是准备开始阅读一 ...

  3. Python错误与异常

    1 异常和错误 1.1 错误和异常 从软件方面来说,错误是语法或者逻辑上的,语法错误指示软件的结构上有错误,导致不能被解释器解释.当程序的语法正确后,剩下的就是逻辑错误了,逻辑错误可能是由于不完整或者 ...

  4. 创建过滤扩展方法 Creating Filtering Extension Methods 精通ASP-NET-MVC-5-弗瑞曼 Listing 4-17

  5. Git详解之特殊配置与钩子应用

    前言 到目前为止,我阐述了 Git 基本的运作机制和使用方式,介绍了 Git 提供的许多工具来帮助你简单且有效地使用它. 在本章,我将会介绍 Git 的一些重要的配置方法和钩子机制以满足自定义的要求. ...

  6. CUDA 计算pi (π)

    通过简单的程序设计熟练CUDA的使用步骤 下面是cuda代码及相关注释 #include <stdio.h> #include <iostream> #include < ...

  7. SVM(2)-模式识别课堂笔记

    三.非线性支持向量机 问题起源:1.对于一些非线性可分的问题,我们希望能通过一个映射问题将特征映射到新的空间中去(可能是更高维的空间),寄希望于在新的空间中样本能够线性可分:2.我们注意到在线性支持向 ...

  8. 1755: N相关孪生素数

    #include<stdio.h>int f(int n,int L,int R){ int ch[10000],i,j,count=0; j=1; for(i=L;i<=R;i++ ...

  9. 再谈typedef(重点为函数指针)

    有种很方便的写法. typedef int *p: p pointer: 这时直接把pointer带入原式中,取代p然后去掉typedef,得到的结果就是int * pointer: 哈哈,这样直接替 ...

  10. web前端sprite,精灵图,雪碧图

    css sprite 俗称:精灵图,雪碧图,指将整个页面不同的图片or图标合并在一张图上:优点:使用CSS Sprite 可以减少网络请求,提高网页加载性能,不会出现网页上端加载完毕下面还在加载中这一 ...