关于javascript:JS-教练我想做习题3

43次阅读

共计 4447 个字符,预计需要花费 12 分钟才能阅读完成。

???? 前言

大家好呀,我是毛小悠,能够叫我二毛,在家中排行老二,是一名前端开发工程师。

本系列文章旨在通过练习来进步 JavaScript 的能力,一起欢快的做题吧。????????????

以下每道题,二毛我都有尝试做一遍。倡议限时训练,比方限定为半小时,如果半小时内想不进去,能够联合文章开端的参考答案来思考。

能够在下方评论区留言或者加我的微信:code_maomao。期待你的到来。

求关注求点赞????~~~????????????

???? 题目 1:海盗码

当海盗数量发生变化时,请帮忙 Amaro 确认下一次他的逻辑。

请记住,每次海盗发现宝藏,黄金的数量就等于海盗人数 * 20。

例:

如果海盗数量为 2,包含 Amaro,则 array = [40, 0],这样他就能够将所有黄金保留给本人。

如果包含 Amaro 在内的海盗数量是 3,则 array = [59, 0, 1],并且他要拿 59 金。

如果海盗数量为 4,包含 Amaro,则 array = [79, 0, 1, 0],而他要取 79 金。

如果包含 Amaro 在内的海盗数量为 5,则 array = [98, 0, 1, 0, 1],并且他要拿 98 金。

返回应该调配的计划数组。

习题代码

function amaroPlan(pirateNum){}

???? 题目 2:在路上

工作

您刚刚搬入一条齐全笔挺的街道,n 两边的屋宇完全相同。天然,您想找出这条街另一侧的人的门牌号码。这条街看起来像这样:

街道如图所示:

1| |6
3| |4
5| |2

左边的偶数减少;右边的逐步升高,门牌号码开始于 1 并且有距离地减少。当 n = 3,1 对抗 6,3 对抗 4 和 5 对抗 2。

例子:

给定您的门牌号 address 和街道长度,在街道 n 的另一侧给出门牌号。

overTheRoad(address, n)
overTheRoad(1, 3) = 6
overTheRoad(3, 3) = 4
overTheRoad(2, 3) = 5
overTheRoad(3, 5) = 8

习题代码

function overTheRoad(address, n){//code here}

???? 题目 3:音讯验证

您有一个输出字符串,应查看它是否是无效音讯。为此,您须要将字符串除以数字,而后将数字与以下子字符串中的字符数进行比拟。

例如,”3hey5hello2hi” 应分为 3, hey, 5, hello, 2, hi,函数应返回 true,因为它 ”hey” 是 3 个字符,”hello”5 个和 ”hi”2 个字符;当数字和字符数匹配时,后果为 true。

笔记:

  • 邮件仅由字母和数字组成
  • 数字能够有多个数字:例如 "4code13hellocodewars" 是无效的音讯
  • 每个数字都必须与以下子字符串中的字符数匹配,否则音讯有效:例如 "hello5""2hi2"有效
  • 如果音讯为空字符串,则应返回 true
function isAValidMessage(message){// your code}

???? 题目 4:让死鱼游泳

编写一个简略的解析器,将解析并运行 Deadfish。

死鱼有 4 个命令,每个命令长 1 个字符:

i 增加值(最后是 0)

d 缩小值

s 平方值

o 将值输入到返回数组

有效字符应被疏忽。

parse(“iiisdoso”) => [8, 64]

0+1+1+1——平方(后果为 9)- 1 输入为 8,平方,输入为 64。

// Return the output array, and ignore all non-op characters
function parse(data)
{}

???? 题目 5:他们是“一样的”吗?

给定两个数组,a 和 b 编写一个函数 comp(a, b)(compSame(a, b)在 Clojure 中),该函数查看两个数组是否具备“雷同”元素且具备雷同的多重性。“雷同”在这里是指其中的元素 b 是 a 平方的元素,与程序无关。

如果都是空数组,返回 true。

例子

无效数组

a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]

comp(a, b)返回 true,因为在 b121 中是 11 的平方,在 14641 中是 121 的平方,在 20736 中是 144 的平方,在 361 中是 19 的平方,在 25921 中是 161 的平方,依此类推。如果咱们用 b 平方来写元素,这将变得不言而喻:

a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]

有效的数组

如果咱们将第一个数字更改为其余数字,则 comp 可能不再返回 true:

a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [132, 14641, 20736, 361, 25921, 361, 20736, 361]

comp(a,b)返回 False,因为在 b132 中不是任何数的平方 a。

a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 36100, 25921, 361, 20736, 361]

comp(a,b)返回 false,因为在 b36100 中不是任意数量的平方 a。

备注

  • ab 可能是[](除 R,Shell 外的所有语言)。
  • ab 可能是 nilnullNonenothing(C ++,Elixir,Haskell,PureScript,Pascal,R,Rust,Shell 中除外)。

如果 a 或 b 有 nil(或 null 或 None),这个问题就没有意义了那么返回 FALSE。

注意事项

这两个数组的大小 (> 0) 与 function comp 中的参数雷同。

习题代码

function comp(array1, array2){//your code here}

答案

???? 题目 1 的答案

参考答案 1:

function amaroPlan(n){return [20*n-((n-1)/2|0),...[...Array(n-1)].map((_,i)=>i%2)]
}

参考答案 2:

function amaroPlan(pirateNum) {const result = Array(pirateNum).fill(0);
result[0] = pirateNum * 20;
for (let i = 2; i < pirateNum; i += 2) {result[0]--;
result[i]++;
}
return result;
}

参考答案 3:

function amaroPlan(pNum){const arr = Array.from({length:pNum}, (_, x)=> x % 2 ===0 ? 1 : 0)
arr[0] += pNum*20 - arr.reduce((a,b)=> a + b, 0)
return arr
}

???? 题目 2 的答案

function overTheRoad(address, n){return (n*2+1)-address;
}

???? 题目 3 的答案

function isAValidMessage(message){
// your code
if (!message) return true
while (message.length > 0) {let num = parseInt(message);
if (isNaN(num)) return false;
message = message.slice((num + "").length);
let str = message.slice(0, num);
let regex = RegExp('^[a-zA-Z]{' + num + '}$')
if (!regex.test(str)) return false;
message = message.slice(num);
}
return true;
}

参考答案 2

function isAValidMessage(message) {const number = message.split(/[a-z]/i).filter(e => e !== '')
const word = message.split(/[0-9]/).filter(e => e !== '')
const filtering = word.map((x,i) => x.length == number[i]).filter(e => e === true).length
return !message.length || (filtering === number.length && word.length === number.length && message.slice(0, 1).match(/[0-9]/) && !message.slice(-1).match(/[0-9]/)) ? true : false
}

参考答案 3

function isAValidMessage(message) {if (!/^(d+[a-z]+)*$/i.test(message))
return false;
let parts = message.match(/d+|[a-z]+/gi);
if (parts)
for (let i = 0; i < parts.length; i += 2)
if (+parts[i] !== parts[i + 1].length)
return false;
return true;
}

???? 题目 4 的答案

参考答案 1

// Return the output array, and ignore all non-op characters
function parse(data) {var v = 0, ret = []
for (var c of data) {switch (c) {
case 'i' : v++; break;
case 'd' : v--; break;
case 's' : v=v*v; break;
case 'o' : ret.push(v); break;
}
}
return ret;
}

参考答案 2

const parse = (data) => {let result = []
let val = 0
data.split('').forEach(x => {switch(x){
case 'i':
val++
break
case 'd':
val--
break
case 's':
val*=val
break
case 'o':
result.push(val)
}
})
return result
}

???? 题目 5 的答案

参考答案 1:

function comp(array1, array2) {if(array1 == null || array2 == null) return false;
array1.sort((a, b) => a - b); array2.sort((a, b) => a - b);
return array1.map(v => v * v).every((v, i) => v == array2[i]);
}

参考答案 2

function comp(a, b) {return !!a && !!b && a.map(x => x*x).sort().join() == b.sort().join();
}

???? 后序

本系列会定期更新的,题目会由浅到深的逐步提高。

求关注求点赞 ????~~????????????

能够关注我的公众号:前端毛小悠。欢送浏览

正文完
 0