gpt4 book ai didi

javascript - 在 javascript 中编写一个与另一个函数相反的函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:28 25 4
gpt4 key购买 nike

我正在尝试编写一个与下面的函数相反的函数。

这样我就可以从函数 foo 中获取输出并生成它的输入参数。

我不完全确定这是否可能。

function foo(str){
var hexMap = {
"0":0,
"1":1,
"2":2,
"3":3,
"4":4,
"5":5,
"6":6,
"7":7,
"8":8,
"9":9,
"A":10,
"B":11,
"C":12,
"D":13,
"E":14,
"F":15
};
var charList = [];

str = str.toUpperCase();


for (var i = 0; i < str.length; i += 2) {
charList.push(hexMap[str.charAt(i)] * 16 + hexMap[str.charAt(i + 1)]);
}

charList.splice(0, 8);
charList.splice(0, 123);

var sliceEnd = charList[0] + charList[1] * 256;
charList.splice(0, 4);

charList = charList.slice(0, sliceEnd);
return charList;
}

最佳答案

您的函数接收一个字符串,希望它是一个仅使用字符 [0-9a-fA-F] 的十六进制字符串。然后它生成一个数组,其中每两个十六进制字符被转换为 0 到 255 之间的十进制整数。然后该函数立即从该数组中丢弃前 131 个元素。这意味着字符串的前 262 个字符对函数的输出没有影响(前 262 个字符可以是任何字符)。

然后就是这一行:

var sliceEnd = charList[0] + charList[1] * 256;

sliceEnd 变为 0 到 65535 之间的数字(结果数组的最大大小)。基于输入字符串中索引 262 - 265 处的字符。 (两个两位十六进制值转换为两个整数。位置 264 的值乘以 256 并添加到位置 262 的值)。

然后结果数组包含使用相同方法从位置 270 到 270 + sliceEnd*2 的字符转换的整数。

MSN 是正确的,这个函数不是 1 到 1,因此在数学上不可逆,但是你可以编写一个函数,给定一个少于 65536 个介于 0 到 255 之间的整数的数组,可以为 foo 生成一个输入字符串,它将返回那个数组。具体来说,以下函数将执行此操作:

function bar(arr){
var sliceEnd = arr.length;
var temp = '00' + (sliceEnd & 255).toString(16);
var first = temp.substring(temp.length - 2);
temp = '00' + Math.floor(sliceEnd/256).toString(16);
var second = temp.substring(temp.length - 2);
var str = '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' + first + second + '0000';
for(var i = 0; i < arr.length; i++){
temp = '00' + arr[i].toString(16);
str += temp.substring(temp.length - 2);
}
return str;
}

这为您提供了 foo(bar(x)) === x 的属性(如果 x 是一个少于 65536 个介于 0 和 255 之间的整数的数组,如前所述),但不是property bar(foo(x)) === x 因为正如 MSN 指出的那样,您的函数无法实现该属性。

例如。 bar([17,125,12,11]) 给出字符串:

"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000117dcb" which if you give as input to your function foo you get back the original array: [17,125,12,11],但还有许多其他输入(这些 0 中至少有 268 个可以是 [0-9a-fA-F] 中的任何其他值,而 04可以是大于 04 的任何值,这意味着 22^268*(255 - 4) 个不同的字符串乘以更多一点,因为在乘以 255 - 4 时只考虑小写或大写,但不会同时考虑两者>. 无论 22^268 无论如何对于一个输出来说都是一个荒谬的输入数量,并且忽略了这样一个事实,即它们是无限数量的字符串,这些字符串以上面的字符串开头并具有任何其他十六进制 s由于 sliceEnd 变量,附加到它们的 tring 将给出与 foo 相同的输出。

关于javascript - 在 javascript 中编写一个与另一个函数相反的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8767719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com