const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; /** * 判断ip合法性 */ function valid(ip) { // 分割成数组 const arr = ip.split(".").filter((item) => item !== ""); // 如果长度小于4,则不合法 if (arr.length < 4) return false; // 如果数字为空或者不在0到255间,则不合法 return arr.every((item) => +item >= 0 && +item <= 255); } function ipToNum(ip) { let sum = 0; const ipArr = ip.split(".").reverse(); for (let i = 0; i < ipArr.length; i++) { sum += +ipArr[i] * 255 ** i; } return sum; } /** * ip分类统计 */ function sumIp(ip) { const ipArr = ip.split("."); if (+ipArr[0] === 0 || +ipArr[0] === 127) return; // ip转换成数字 const ipNum = ipToNum(ip); // ip分类统计 if (ipToNum("1.0.0.0") <= ipNum && ipNum <= ipToNum("127.255.255.255")) { contArr[0]++; } else if ( ipToNum("128.0.0.0") <= ipNum && ipNum <= ipToNum("191.255.255.255") ) { contArr[1]++; } else if ( ipToNum("192.0.0.0") <= ipNum && ipNum <= ipToNum("223.255.255.255") ) { contArr[2]++; } else if ( ipToNum("224.0.0.0") <= ipNum && ipNum <= ipToNum("239.255.255.255") ) { contArr[3]++; } else { contArr[4]++; } // 私有地址统计 if ( (ipToNum("10.0.0.0") <= ipNum && ipNum <= ipToNum("10.255.255.255")) || (ipToNum("172.16.0.0") <= ipNum && ipNum <= ipToNum("172.31.255.255")) || (ipToNum("192.168.0.0") <= ipNum && ipNum <= ipToNum("192.168.255.255")) ) { contArr[6]++; } } function ipToBety(ip) { let str = ""; const ipArr = ip.split("."); for (let i = 0; i < ipArr.length; i++) { str += Number(ipArr[i]).toString(2).padStart(8, "0"); } return str; } /** * 统计错误子网掩码 */ function validErrZwym(zwym) { const zwymArr = zwym.split(".").filter((item) => item !== ""); if (zwymArr.length < 4) return false; if (!zwymArr.every((item) => +item >= 0 && +item <= 255)) return false; const ipBety = ipToBety(zwym); if (/01/.test(ipBety) || !ipBety.includes("1") || !ipBety.includes("0")) return false; return true; } const contArr = [0, 0, 0, 0, 0, 0, 0]; void (async function () { // Write your code here while ((line = await readline())) { const arr = line.split("~"); const ip = arr[0]; const zwym = arr[1]; if (!valid(ip) || !validErrZwym(zwym)) { const ipArr = ip.split("."); if (+ipArr[0] === 0 || +ipArr[0] === 127) continue; contArr[5]++; continue; } sumIp(ip); } console.log(contArr.join(" ")); })();