题解 | #识别有效的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)
})


