题解 | #识别有效的IP地址和掩码并进行分类统计#

识别有效的IP地址和掩码并进行分类统计

https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
const arr = [];
rl.on('line', function (line) {
    arr.push(line)
});

rl.on('close', function() {
    const AIp = [1000000000, 126255255255]
    const BIp = [128000000000, 191255255255]
    const CIp = [192000000000, 223255255255]
    const DIp = [224000000000, 239255255255]
    const EIp = [240000000000, 255255255255]
    const privateIp1 = [10000000000, 10255255255]
    const privateIp2 = [172168000000, 172031255255]
    const privateIp3 = [192168000000, 192168255255]
    const ignoreIp = ['000', '127']
     
     let Acount = 0,
     Bcount = 0,Ccount = 0,
     Dcount = 0,Ecount = 0,
     Errorcount = 0,Pcount = 0;

    arr.forEach(item => {
    const [ipStr, maskStr] = item.split('~')
    if (ipStr.indexOf('..') > -1 || maskStr.indexOf('..') > -1) {
        Errorcount++
        return;
    }
    const ipArr = ipStr.split('.').map(item => {
      return item.padStart(3, '0')
    })
    if (ignoreIp.indexOf(ipArr[0]) !== -1) return;

    const maskArr = maskStr.split('.').map(item => {
      const temp = parseInt(item, 10).toString(2)
      return temp.padStart(8, '0')
    })

    const maskBit = maskArr.join('')
    if (/^1+0+$/.test(maskBit) === false) {
      Errorcount++
      return
    }

    const ipNum = parseInt(ipArr.join('', 10))

    switch(true) {
      case ipNum >= AIp[0] && ipNum <= AIp[1]:
        Acount++;
        break;
      case ipNum >= BIp[0] && ipNum <= BIp[1]:
        Bcount++;
        break;
      case ipNum >= CIp[0] && ipNum <= CIp[1]:
        Ccount++;
        break;
      case ipNum >= DIp[0] && ipNum <= DIp[1]:
        Dcount++;
        break;
      case ipNum >= EIp[0] && ipNum <= EIp[1]:
        Ecount++;
        break;
    }

    if (ipNum >= privateIp1[0] && ipNum <= privateIp1[1] ||
      ipNum >= privateIp2[0] && ipNum <= privateIp2[1] ||
      ipNum >= privateIp3[0] && ipNum <= privateIp3[1]) {
      Pcount++
    }
  })
  console.log(Acount,
    Bcount,Ccount,
    Dcount,Ecount,
    Errorcount,Pcount)
})

全部评论

相关推荐

11-17 11:15
门头沟学院 Java
金山办公终于发offer了,但薪资和平台都不如已有的offer打算拒了,A不了薪资,不满意直接拒了,留给需要的人嘿嘿嘿时间线:10.14线下一面&nbsp;,10.23线上二面,下午发测评,11月1日HR面,11月14日电话谈薪,11月17日直接发offer
star__plat...:好兄弟干的好啊,解气。金山第一次笔难度高的离谱,第二次简单的离谱全A了,用人部门筛选中估计最后还是要挂我,就这今早智联招聘还给我发信息让我投
offer帮选
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-04 05:12
kalistar:简历留六个字,北京大学(本科),黑体加粗,看看哪个hr不长眼敢碰瓷我们北大✌
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务