实现计划:line事件中暂存输出行,利用debounce防抖,当暂定输出一段时间后将暂存的进行批量解决
以一道机试题为例
形容
明码要求:
1.长度超过8位
2.包含大小写字母.数字.其它符号,以上四种至多三种
3.不能有雷同长度大于2的子串反复
输出形容:
一组或多组长度超过2的字符串。每组占一行
输入形容:
如果符合要求输入:OK,否则输入NG
示例1
输出:
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
复制
输入:
OK
NG
NG
OK
const readline = require('readline');
function isRepeatStr(str){
let len = str.length - 2;
for(let i = 0; i<len;i++){
let subStr = str.substring(i,i+3);
let tmpStr1 = str.substring(0,i);
let tmpStr2 = str.substring(i+3);
if(tmpStr1.indexOf(subStr) > 0)
return true;
if(tmpStr2.indexOf(subStr) > 0)
return true;
}
return false;
}
function strWeight(str){
let numWeight = 0;
let upperWeight = 0;
let lowerWeight = 0;
let otherWeight = 0;
str.split('').forEach(item=>{
if(isNum(item)){
numWeight = numWeight?numWeight:1;
}
else if(isUpperChar(item)){
upperWeight = upperWeight?upperWeight:1;
}
else if(isLowerChar(item)){
lowerWeight = lowerWeight?lowerWeight:1;
}
else
otherWeight = otherWeight?otherWeight:1;
})
return numWeight+upperWeight+lowerWeight+otherWeight;
}
function isNum(str){
return str.match(/[0-9]/) != null;
}
function isUpperChar(str){
return str.match(/[A-Z]/) != null;
}
function isLowerChar(str){
return str.match(/[a-z]/) != null;
}
function debounce(func, delay) {
var timer;
return function() {
var context = this;
clearTimeout(timer);
timer = setTimeout(function() {
func.apply(context, arguments);
timer = undefined;
}, delay || 20);
};
};
function myProcess(str)
{
return (strWeight(str) >= 3) && (!isRepeatStr(str)) && (str.length > 8);
}
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let globalArray=[];
function processAll(){
globalArray.forEach(line=>{
if(myProcess(line) == true) {
console.log('OK');
} else {
console.log('NG');
}
})
}
let delayProcess = debounce(processAll,20);
rl.on('line', function (line) {
globalArray.push(line);
delayProcess();
});
发表回复