您的公司正在分析针对数字记录文件的恶意软件。
恶意软件在文件中的数字数组上使用滑动窗口,并尝试匹配以下模式:
T、-、-、X、-、-、-、T
位置“X”与每个位置“T”进行比较。窗口被移动,因此“X”穿过所有值。
该恶意软件具有以下规则:
.如果模式中的任何“T”位置大于或等于“X”,恶意软件会将“X”替换为 0。 如果图案中的“X”位置靠近左边界或右边界并且缺少“T”位置邻居,则仅考虑另一侧。 .恶意软件首先找到所有位置,然后将它们设置为 0。
例如,如果记录文件中的值如下:
[1, 2, 0, 5, 0, 2, 4, 3, 3, 3]
恶意软件运行后的预期值为: [1, 0, 0, 5, 0, 0, 0, 3, 3, 0]
在此示例中,数字 4 设置为 0,因为 5 是更大的数字。
实现模拟功能,以便复制恶意软件行为以供进一步研究。
function simulate(entries) {
let simEntries = [...entries];
let tempEntries = [];
for (let i = 0; i < simEntries.length; i++) {
let rightT;
if (i >= simEntries.length - 4) {
break;
} else {
rightT = i + 4;
if (simEntries[i] <= simEntries[rightT]) {
tempEntries.push(i);
}
}
}
for (let i = 0; i < simEntries.length; i++) {
let leftT = i;
if (leftT <= 2) {
continue;
} else {
leftT = i - 3;
if (simEntries[i] <= simEntries[leftT]) {
tempEntries.push(i);
}
}
}
for (let i = 0; i < simEntries.length; i++) {
if (tempEntries.includes(i)) {
simEntries[i] = 0;
}
}
return simEntries;
}
// Test the function
let result = simulate([1, 2, 0, 5, 0, 2, 4, 3, 3, 3]);
console.log(result);
// Expected output: [1, 0, 0, 5, 0, 0, 0, 3, 3, 0]