W3CSchool闯关笔记(中级脚本算法)
坚持下去,编程是一门艺术,与君共勉!!!
function sumAll(arr) {
var result = 0;
var sn = Math.min(arr[0] , arr[1]);
var en = Math.max(arr[0] , arr[1]);
/************使用reduce只能在数组元素之间求和,对于数组中没有的数操作不了
* 如果享用这种方法解决问题需要把两个数字之间包括这两个数字全部存进一个新数组里对新数组求和
* var newArr = [];
for (var i = 0; i <= en - sn; i++) {
newArr[i] = i + sn;
}
result = newArr.reduce(function(prev ,cur){
return prev + cur;
},0);
*/
for (var i = sn; i <= en; i++) { //黑猫白猫,能抓老鼠就是好猫
result += i;
}
return result;
} sumAll([1, 5]);
1-区间求值
function diff(arr1, arr2) {
var newArr = []; pick(arr1,arr2); //两个数组都要遍历,算法写起来容易,但是时间复杂度很大
pick(arr2,arr1);
function pick(a1,a2){ //编写函数将两个数组中不同的元素放入新数组
for (var i in a1) {
if (a2.indexOf(a1[i]) < 0) {
newArr.push(a1[i]);
}
}
}
return newArr;
} diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);
2-找出数组差异
function convert(num) {
var one = ["I","II","III","IV","V","VI","VII","VIII","IX"];
var ten = ["X","XX","XXX","XL","L","LX","LXX","LXXX","XC"];
var hundred = ["C","CC","CCC","CD","D","DC","DCC","DCCC","CM"];
var thousand = "M";
var result = "";
var th = Math.floor(num / 1000);
var h = Math.floor((num % 1000) / 100);
var t = Math.floor((num % 100) / 10);
var o = Math.floor(num % 10);
for (var i = 0; i < th; i++) {
result += thousand;
}
if(h){
result += hundred[h - 1];
}
if(t){
result += ten[t - 1];
}
if(o){
result += one[o - 1];
} return result;
} convert(36);
3-数字转罗马数字
function where(collection, source) { /*******网友给出的更优解*********
var arr = [] ;
var status = null;
for (var i = 0; i < collection.length; i++) {
for(var imp in source){
if (source[imp] !== collection[i][imp]) {
status = 0;
break;
}
status = 1;
}
if(status == 1){
arr.push(collection[i]);
}
}
**********/ // console.log(Object.getOwnPropertyNames(source).length);
//获取对象属性个数
var arr = [], index = 0;
for (; index < collection.length; index++) {
for (var key in collection[index]) {
var count = 0;
for (var key2 in source) {
if (collection[index].hasOwnProperty(key2)) {
if (source[key2] == collection[index][key2]) {
count++;
}
if (count == Object.getOwnPropertyNames(source).length && key == key2) {
arr.push(collection[index]);
}
}
}
}
}
return arr;
} where([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });
4-对象搜索
function myReplace(str, before, after) {
/*
*本方法只适用于字符串首字母大写的情况
*如果涉及到目标字符串中其他字符大写则需要对temp数组进行遍历逐一比对
*在if外层嵌套for循环并设置temp数组中的索引变量即可解决
*/
var arr = str.split(" "); //把字符串按单词转化成数组
var index = arr.indexOf(before); //找到目标单词在数组中的索引
var temp1 = arr[index].split(""); //数组中的目标单词按字母分割成新数组
if(/[A-Z]/.test(temp1[0])){ //新数组中首字母大写判定
after = after.charAt(0).toUpperCase() + after.slice(1); //把用来替换的字符串首字符改成大写
}
arr[index] = arr[index].replace(arr[index] , after); //字符串替换
str = arr.join(" "); //数组中的单词以空格为间隔拼接成字符串
return str;
} myReplace("Let us go to the store", "store", "mall");
5-字符串查询替换
function translate(str) {
var vowel = ["a", "e", "i", "o", "u"];
if (vowel.indexOf(str[0]) != -1) {
return str + "way";
}
while (vowel.indexOf(str[0]) == -1) {
str = str.substr(1) + str.substr(0, 1);
}
return str + "ay";
} translate("consonant");
6-字符串移动插入
function pair(str) {
var arr = new Array(); //注意:这里的数组定义方式是实例化定义
str = str.split("");
for (var i in str) {
arr[i] = new Array();
arr[i].push(str[i]);
if (str[i] == "G" || str[i] == "C") {
(arr[i] == "G") ? arr[i].push("C") : arr[i].push("G");
} else {
(arr[i] == "A") ? arr[i].push("T") : arr[i].push("A");
}
}
return arr;
} pair("GCG");
7-字符配对
function fearNotLetter(str) {
/*******下面这种网友给出的方法只符合缺失一个字符的情况
* 如果缺失多个则只能输出缺失的第一个
var sub;
for (var index = 0; index < str.length - 1; index++){
sub = str.charCodeAt(index + 1) - str.charCodeAt(index);
if (sub == 1) {
if (index == str.length) {
return undefined;
}
} else {
return String.fromCharCode(str.charCodeAt(index) + 1);
}
}
*/ //下面本人字节写的可以返回缺失一段多个字符的情况,但是不符合缺失多端字符的情况如abeg
//缺失多段字符的方法可以将内层for循环写成功能函数,在外层循环中每当发现sub!=1时去调用即可
//调用结束过后使用continue让外层循环继续执行直到整个str都遍历完为止
var sub = 0;
var index = [];
for (var i = 0; i < str.length - 1; i++) {
sub = str.charCodeAt(i + 1) - str.charCodeAt(i);
if (sub == 1) {
if(i == str.length){
return undefined;
}
} else {
for(var j = 0 ; j < sub - 1; j++){
index[j] = String.fromCharCode(str.charCodeAt(i)+1+j);
return index[j];
}
}
}
} fearNotLetter("abeg");
-字符串查询补充
function boo(bool) {
// What is the new fad diet for ghost developers? The Boolean.
//这种情况只能做检查提示,开发过程中除了检查提示还应该让用户重新输入直到正确为止
//可以使用try catch结构处理输入异常,或使用while函数让用户输入直到输入正确为止
if (bool === true || bool === false) {
return true;
} else {
return false;
}
} boo(null);
-输入检查
function unite(arr1, arr2, arr3) { var args = Array.from(arguments);
var arr = args.reduce(function(prev,cur){
return prev.concat(cur);
});
return arr.filter(function(item,index,arr){
return arr.indexOf(item) === index;
});
} unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);
-数组去重
function convert(str) {
// :)
var arr = str.split("");
for (var i = 0; i < str.length; i++) {
switch (arr[i]) {
case '&':
arr[i] = "&";
break;
case '<':
arr[i] = "<";
break;
case '>':
arr[i] = ">";
break;
case '"':
arr[i] = """;
break;
case "'":
arr[i] = "'";
break;
}
}
return arr.join("");
} convert("Dolce & Gabbana");
11-html符号转实体
function spinalCase(str) { var array=str.split(" ");
if(array.length<=1){
array=str.split("_");
}
if(array.length<=1){
return str.replace(/([A-Z])/g,"-$1").toLowerCase();
}
str=array[0].toLowerCase();
for(var i=1;i<array.length;i++){
str=str.concat('-').concat(array[i].toLowerCase());
}
return str;
} spinalCase('This Is Spinal Tap');
12-字符串连接
function sumFibs(num) {
var fibo = [1, 1];
var nums = 2;
var temp = 0;
while(true){
temp = fibo[0] + fibo[1];
if(temp > num){
return nums;
}
if(temp % 2 !== 0){
nums += temp;
}
fibo[0] = fibo[1];
fibo[1] = temp;
}
} sumFibs(1000);
13-斐波那契
function sumPrimes(num) {
var sum = 0;
for(var i = 2; i <= num; i++){
var j = 2;
for( ; i%j !== 0; j++){}
if(i == j){
sum += i;
}
}
return sum;
} sumPrimes(10);
14-质数求和
W3CSchool闯关笔记(中级脚本算法)的更多相关文章
- W3CSchool闯关笔记(初级脚本算法)
W3C后台校验代码bug很多,有的时候跑不过不一定是自己代码写得有问题,也许是网页后台的bug,可以自己把代码放到本地的html文件中跑一下看看 function reverseString(str) ...
- W3CSchool闯关笔记(Bootstrap)
该闯关内容与JS闯关衔接. 每一题的答案均在注释处, 第一关:把所有的HTML内容放在一个包含有container-fluid的class名称的div下(注意,是所有的HTML内容,style标签属于 ...
- W3CSchool闯关笔记(JQuery)
<script> $(document).ready(function(){ }); </script> <!-- Only change code above this ...
- XSS Challenges闯关笔记
前言 做xss做疯了再来一个. 地址:https://xss-quiz.int21h.jp/ ,这个貌似是日本的一个安全研究员yamagata21做的. 做到第九关就跪了,而总共有二十关.一半都还没有 ...
- 某xss挑战赛闯关笔记
0x0 前言 在sec-news发现先知上师傅monika发了一个xss挑战赛的闯关wp([巨人肩膀上的矮子]XSS挑战之旅---游戏通关攻略(更新至18关)https://xianzhi.aliyu ...
- W3CSchool实战闯关笔记(JavaScript)
//handsome /** *ugly **/ 第一关注释 // 举例 var myName; // Define myName below this line 第二关声明变量 // Setup v ...
- The Python Challenge 闯关笔记
The Python Challenge : http://www.pythonchallenge.com/ Level 0: 看提示图片中为2**38,计算值为274877906944. Hint: ...
- 2018年全国多校算法寒假训练营练习比赛(第一场)闯关的lulu
闯关的lulu 链接:https://www.nowcoder.com/acm/contest/67/J 来源:牛客网 题目描述 勇者lulu某天进入了一个高度10,000,000层的闯关塔,在塔里每 ...
- 2018年全国多校算法寒假训练营练习比赛(第一场)J - 闯关的lulu
链接:https://www.nowcoder.com/acm/contest/67/J来源:牛客网 题目描述 勇者lulu某天进入了一个高度10,000,000层的闯关塔,在塔里每到一层楼,他都会获 ...
随机推荐
- https 自签名SSL证书
介绍 TLS或称传输层安全性,及其前身SSL(代表安全套接字层)是用于将正常流量包装在受保护的加密包装中的Web协议. 使用这种技术,服务器可以在服务器和客户端之间安全地发送流量,而不会被外部各方拦截 ...
- 空数组判断false、true的情况
- java &与&& |与||的区别
一.与操作和或操作的区别 (1)在Java程序中,使用与操作,要求所有表达式的判断结果都是TRUE,才为真,若有一个为FALSE,那么最终判断结果则为FALSE (2)使用或操作,只要其中有一个表达式 ...
- jquery笔记整理
01-jquery简介 1)功能: ·html元素选取 ·Html元素操作 ·Css操作 ·Html事件函数 ·JavaScript特效和动画 ·DOM ...
- Spring cloud zuul跨域(二)
使用 CorsFilter 解决ajax跨域问题 直接在zuul的main下面,创建corsFilter就可以了. @SpringBootApplication @EnableZuulProxy ...
- Luogu4363 [九省联考2018]一双木棋chess 【状压DP】【进制转换】
题目分析: 首先跑个暴力,求一下有多少种状态,发现只有18xxxx种,然后每个状态有10的转移,所以复杂度大约是200w,然后利用进制转换的技巧求一下每个状态的十进制码就行了. 代码: #includ ...
- jQuery动态添加、删除按钮及input输入框
输入框的加减实现: <html> <head> <meta charset="utf-8"> <title>动态创建按钮</t ...
- 洛谷P2179 骑行川藏
什么毒瘤... 解:n = 1的,发现就是一个二次函数,解出来一个v的取值范围,选最大的即可. n = 2的,猜测可以三分.于是先二分给第一段路多少能量,然后用上面的方法求第二段路的最短时间.注意剩余 ...
- Gcc 命令大全
gcc这条命令用来将源代码生成可执行程序,下面来看一下gcc的常用选项. 1.无选项编译链接 例:命令:gcc test.c //会默认生成a.out可执行程序 2.-E: 进行预处理和编译,生成汇编 ...
- PMP知识点(五)——资源管理表示方法
资源矩阵 最常用的为RACI责任矩阵 如下: 资源数据表: 即时间和资源类型的交叉表,是资源直方图的拓展: 资源甘特图: 一种是以任务为索引 一级目录为任务,二级目录为资源,横坐标为时间进度 一种是以 ...