实际算法函数为:
然而,我刚刚遇到了以下问题:
当被要求反转一个函数时,遵循的思路是代数上反转该函数。然而,第二个解决方案似乎以一种在数学上不合法的方式简化了反转后的函数!但它起作用了!请帮忙!
注:期望输出为[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
output[i] = ( (129 * input[i]) XOR input[i-1]) % 256 //input[-1] = 0
有几种解决方案。通常采用的方案是:
var output = [0, 129, 3, 129, 7, 129, 3, 129, 15, 129, 3, 129, 7, 129, 3, 129];
var outputToInputArray = function(array) {
var input = [];
var outputToInput = function(dig, lastInput) {
var current = dig;
while(true) {
if (!((current ^ lastInput) % 129)) {
return (current ^ lastInput)/129;
}
current += 256;
}
}
for(var i = 0; i < output.length; i++) {
input.push(outputToInput(output[i], i>0 ? input[i-1] : 0));
}
return input;
}
console.log(outputToInputArray(output));
然而,我刚刚遇到了以下问题:
output = [0, 129, 3, 129, 7, 129, 3, 129, 15, 129, 3, 129, 7, 129, 3, 129]
var input = [];
for(var i =0; i < output.length; i++) {
lastInput = input.length < 1 ? 0 : input[i-1];
input.push(((output[i] ^ lastInput) * 129) % 256);
}
console.log(input);
当被要求反转一个函数时,遵循的思路是代数上反转该函数。然而,第二个解决方案似乎以一种在数学上不合法的方式简化了反转后的函数!但它起作用了!请帮忙!
注:期望输出为[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
1+2 => 3
是可以的,但是3 -> ???
就不行了。有着无限多的可能性:sqrt(9)
,4-1
等等。 - Marc B