W3CSchool闯关笔记(初级脚本算法)

时间:2022-05-04 14:19:07

W3C后台校验代码bug很多,有的时候跑不过不一定是自己代码写得有问题,也许是网页后台的bug,可以自己把代码放到本地的html文件中跑一下看看

 function reverseString(str) {

      /*
*******学过java的朋友特别注意******
***JS中数组处理方法默认行为与java中的数组处理方法默认行为有差异,跑不出来的话请学习W3C官方教程中JS的对应内容了解详情
*/
// var arr = str.split();
//这是把整个hello字符串作为数组的一个元素转化成数组,即便翻转数组元素只会翻转多个元素之间的位置,不会翻转元素内容
//例如["hello"],使用reverse之后结果仍然是["hello"]
//正确的思路应该是:吧字符串---逐个字母---存进数组,然后翻转数组输出 var arr = str.split(""); //括号内加引号是逐个字符存进数组 var temp = arr.reverse(); //Java中reverse方法可以直接翻转字符串,JS中不行,必须先转化成数组 str = temp.join(''); //括号内加引号是规定数组元素之间以空字符连接,即元素之间直接连接
//若括号内什么都不加,则默认数组元素之间是以逗号连接
return str;
} reverseString("hello");

1-字符串翻转

 function factorialize(num) {
var result = 1; //这里引入了新变量result用于存放结果,对于初学者推荐使用这种方式,逻辑较为清晰
for (var i = num; i >= 1; i--) {
result *= i;
}
return result; //注意return出来的值
} factorialize(5);

2-阶乘

 function palindrome(str) {

     for( var i = 0; i < 50; i++){
//将所有字符串中多余的标点符号和空格删除
str = str.replace( /[^a-zA-Z0-1]/i ,"" );
}
str = str.toLowerCase(); //将清除过后的字符串中的大写字母全部换成小写
var arr = str.split(""); //将得到的小写化的字符串逐个字符转为数组
var reArr = arr.reverse(); //将数组元素位置翻转 arr = str.split(""); //把数组arr的值恢复到翻转前的状态
str = arr.join(""); //把数组arr拼接成字符串,这里注意,将数组arr拼接形成的字符串和str不同 var reStr = reArr.join(""); //将翻转的数组拼接成字符串
return str === reStr; } palindrome("A man, a plan, a canal. Panama");

3-回文算法

 function findLongestWord(str) {
var arr = str.split(" ");
//引号中间不加空格时将逐个字符的转化成数组
//引号中间加上空格,将以空格为划分界限,将相邻空格之间的所有字符作为一个数组元素
//可以自己返回arr测试,进行比较
var len = 0;
for (var i = 0; i <= arr.length - 1 ; i++) {
if (len < arr[i].length) { //数组中单词长度比较
len = arr[i].length; //遇到更长的就把长度赋值给len
}
} return len;
} findLongestWord("The quick brown fox jumped over the lazy dog");

4-寻找最长单词

 function titleCase(str) {
var arr = str.toLowerCase().split(" ");
//把输入的字符串全部转为小写字母,再转化成数组,注意:::::会把字符串外面的引号消去
for(var i =0; i < arr.length ; i++){
//每个单词首字母取出转为大写后与剩余字母拼接
arr[i] = arr[i].substring(0,1).toUpperCase() + arr[i].substring(1);
}
str = arr.join(" "); //把转换完成的数组拼接成字符串 /* str = "\"" + str + "\""; 因为系统bug加上这句编译反而出错,实际上加上这句输出才与题目要求一致 */ return str ; //经过一系列的转换,字符串中的引号被消除了,最后要把引号加回来.
} titleCase("sHoRt AnD sToUt");

5-首字母大写

 function largestOfFour(arr) {
// You can do this!
var newArr = [];
var max = 0;
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr[i].length ; j++) {
//小数组中找最大值赋值给max
if( arr[i][j] > max){
max = arr[i][j];
}
}
newArr.push(max);
max = 0; //每个小数组中的最大值插入新数组后要将max清零,否则会印象后续小数组最大值的寻找
}
return newArr;
} largestOfFour([[13, 27, 18, 26], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

6-数组中的最大值

 function confirmEnding(str, target) {
// "Never give up and good luck will find you."
// -- Falcor
/*
这种方法只适用于单字符,当目标是字符串时不适用
var n = str.lastIndexOf(target);
if ( n == str.length-1) {
return true;
} else {
return false;
}*/
/* return n;*/ //思路,从字符串末尾处截取与匹配字符串相同长度的字符串,进行匹配
return str.substr(str.length - target.length , target.length) == target; } confirmEnding("Bastia3", "3");

7-确认末尾字符串

 function repeat(str, num) {
// repeat after me
/*
******第一种,能跑过,返回值没有引号*****
if (num <= 0) {
return "";
} else {
return str.repeat(num);
}*/ /*******第二种,能跑过,返回值没有引号
if(num<=0){
return "";
}else{
var string="";
for (var i = 0; i <num; i++) {
string=string+str;
}
}
return string;*/ /***下面为第三种,本人自己写的,网页跑不过,本地html文件中测试能满足题目所有要求,返回值有引号*****/
if (num <= 0) {
return outStr;
} else {
for (var i = 0; i < num; i++) {
outStr += str;
}
return "\"" + outStr + "\"";
} } var outStr = "";
/*repeat("*", 3);
repeat("abc", 3);
repeat("abc", 4);
repeat("abc", 1);
repeat("*", 8);*/
repeat("abc", 5);

8-重复操作算法

 function truncate(str, num) {
// Clear out that junk in your trunk
if (num <= 3) {
return str.slice(0,num) + "...";
//注意:slice方法两个参数中,前一个参数是起始截取位置,后一个参数是截取的长度,不是截取的终止位置
} else if( num < str.length){
return str.slice(0,num-3) + "...";
}
else {
return str;
}
} truncate("A-", 1);

9-字符串截取

 function chunk(arr, size) {
// Break it up.
var newArr = [];
for (var i = 0; i < arr.length ; i += size) {
newArr.push(arr.slice(i,i+size));
}
return newArr;
} chunk(["a", "b", "c", "d"], 3);

10-数组分割

 function slasher(arr, howMany) {
// it doesn't always pay to be first return arr.slice(howMany);//slice只有一个参数n时表示将数组前面的n个元素剔除
} slasher([1, 2, 3,4,5,6,7,5,9], 2);

11-数组截断

 function mutation(arr) {
var str1 = arr[0].toLowerCase();
var str2 = arr[1].toLowerCase();
var newArr = str2.split("");
//使用到很多方法的时候注意每个方法的细节,一点不同可能效果完全不一样,可以逐一检查是哪一步与预想不同
for (var i = 0; i < newArr.length; i++) {
if( str1.indexOf(newArr[i]) < 0){
return false;
}
}
// var index = str1.indexOf(newArr[2]);
return true;
//本题还可以不适用indexOf方法解决,将两个字符串分别逐个字符存进两个数组,将第二个数组的所有元素在数组一中遍历
}
mutation(["hello", "neo"]);

12-数组查询

 function bouncer(arr) {
// Don't show a false ID to this bouncer.
/*filter方法的作用是将不符合括号内条件的元素删除*/
return arr.filter(function(val){
// 内层函数的作用是检测数组中每个元素是否为假值,即将值为false或者不为字符串或空字符串删除
return !(!val || val === "");
});
} bouncer([7, "ate", "", false, 9]);

13-删除数组中特定值

 function destroyer(arr) {
// Remove all the values
var newArr = arguments; //获取所有参数
for (var i = 0; i <= newArr.length ; i++) {
arr = arr.filter(function(val){
// 内层函数执行结果为真则删除其余元素,这里逻辑有点绕,得一层层理清楚
return newArr[i] !== val;
});
}
return arr;
} destroyer([1, 2, 3, 1, 2, 3], 2, 3);

14-去除数组任意多个值

 function where(arr, num) {
// Find my place in this sorted array.
function sortNumber(a,b){ //规定排序按数字大小排序
return a - b
}
arr.push(num); //将num插入数组
arr.sort(sortNumber); //将数组排序
for (var i = 0; i <= arr.length ; i++) {
//查找num并返回索引值
if(arr[i] == num){
return i;
}
}
} where([40, 70,90,150,30,60], 50);

15-数组排序并插入值

 function rot13(str) { // LBH QVQ VG!

     var start = "A".charCodeAt(0);
var end = "Z".charCodeAt(0);
var objstr = ""; var strs = str.split(" ");
for(var i=0 ; i<strs.length ; i++){
for(var j=0 ; j<strs[i].length ; j++){ if (strs[i].charCodeAt(j) >= start && strs[i].charCodeAt(j) <= end) {
if (strs[i].charCodeAt(j)-13 >= start && strs[i].charCodeAt(j)-13 <= end) {
objstr += String.fromCharCode(strs[i].charCodeAt(j)-13);
}else{
objstr += String.fromCharCode(strs[i].charCodeAt(j)+13);
}
} else {
objstr += strs[i][j];
}
}
objstr += " ";
}
return objstr.substr(0 , objstr.length-1);
} // Change the inputs below to test
rot13("SERR PBQR PNZC");

16-位移密码

W3CSchool闯关笔记(初级脚本算法)的更多相关文章

  1. W3CSchool闯关笔记&lpar;中级脚本算法&rpar;

    坚持下去,编程是一门艺术,与君共勉!!! function sumAll(arr) { var result = 0; var sn = Math.min(arr[0] , arr[1]); var ...

  2. W3CSchool闯关笔记&lpar;Bootstrap&rpar;

    该闯关内容与JS闯关衔接. 每一题的答案均在注释处, 第一关:把所有的HTML内容放在一个包含有container-fluid的class名称的div下(注意,是所有的HTML内容,style标签属于 ...

  3. W3CSchool闯关笔记&lpar;JQuery&rpar;

    <script> $(document).ready(function(){ }); </script> <!-- Only change code above this ...

  4. w3c编程挑战-初级脚本算法

    之前偶然看到了w3c上的编程挑战题,就像拿来试试手,先做的是初级脚本算法,总体不难,如果有更好的方法,希望能一起交流! 1.翻转字符串 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序 ...

  5. XSS Challenges闯关笔记

    前言 做xss做疯了再来一个. 地址:https://xss-quiz.int21h.jp/ ,这个貌似是日本的一个安全研究员yamagata21做的. 做到第九关就跪了,而总共有二十关.一半都还没有 ...

  6. 某xss挑战赛闯关笔记

    0x0 前言 在sec-news发现先知上师傅monika发了一个xss挑战赛的闯关wp([巨人肩膀上的矮子]XSS挑战之旅---游戏通关攻略(更新至18关)https://xianzhi.aliyu ...

  7. W3CSchool实战闯关笔记(JavaScript)

    //handsome /** *ugly **/ 第一关注释 // 举例 var myName; // Define myName below this line 第二关声明变量 // Setup v ...

  8. The Python Challenge 闯关笔记

    The Python Challenge : http://www.pythonchallenge.com/ Level 0: 看提示图片中为2**38,计算值为274877906944. Hint: ...

  9. &lbrack;读书笔记&rsqb;算法&lpar;Sedgewick著&rpar;&&num;183&semi;第二章&period;初级排序算法

    本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public s ...

随机推荐

  1. HDU 1556 Color the ball&lpar;线段树区间更新&rpar;

    Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ...

  2. 电商大促准备流程v2

    1 概述 对于电商企业而言,每年都会有几次大的促销活动,像双十一.店庆等,对于第一次参加这个活动的新手,难免会有些没有头绪,因而将自己参加双十一.双十二活动中的过程心得进行下总结,一方面供以后工作中继 ...

  3. 视频运动motion vector获取。

    http://victor.csie.org/blog/archives/362------------------------------------------------------------ ...

  4. windows上安装winsshd

    winsshd下载地址:http://www.bitvise.com/ssh-server-download 安装后默认配置即可使用:

  5. webpack之代码分离

    https://robertknight.github.io/posts/webpack-dll-plugins/ webpack一般会把一个文件里import/require的文件都会打包在一起,最 ...

  6. 全面解释java中StringBuilder、StringBuffer、String类之间的关系

    StringBuilder.StringBuffer.String类之间的关系 java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,在上一篇博文中我 ...

  7. Oracle总结第三篇【PLSQL】

    PLSQL介绍 PLSQL是Oracle对SQL99的一种扩展,基本每一种数据库都会对SQL进行扩展,Oracle对SQL的扩展就叫做PLSQL- SQL99是什么 (1)是操作所有关系型数据库的规则 ...

  8. 浏览器缓存机制&lt&semi;转&gt&semi;

    转这篇文章是感觉可以在图片加载的时候,也使用这样的缓存策略   作者:吴秦出处:http://www.cnblogs.com/skynet/本文基于署名 2.5 *许可协议发布,欢迎转载,演绎或 ...

  9. 深入理解Java虚拟机之JVM垃圾回收随笔

    1.对象已经死亡? 1.1引用计数法:给对象中添加一个引用计数器,每当有一个地方引用他时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器都为0的对象就是不可能再被使用 的.但是它很难解决 ...

  10. Set接口——HashSet集合

    不重复,无索引,不能重复元素,没有索引: HashSet集合: 此时实现Set接口,有哈希表(HashMap的一个实例)支持,哈希表意味着查询速度很快, 是无序的,即元素的存取的顺序可能不一致: 且此 ...