开发decode(message_file)函数解码文本隐藏消息遇阻求助
解码消息函数的问题修复与实现
需求说明
需要实现一个decode(message_file)函数,读取文本内容(每行包含一个数字和一个单词),将数字按金字塔结构排列:
1 2 3 4 5 6
解码规则是提取金字塔每行末尾数字对应的单词(示例中的1、3、6),忽略其他单词,最终返回拼接后的字符串。
现有代码问题
你的代码逻辑错误,只是按输入行的顺序依次取第currentIndex个元素,完全没有遵循金字塔末尾数字的规律。正确的目标数字是前n个自然数的累加和:第1行末尾是1(1),第2行是3(1+2),第3行是6(1+2+3),以此类推,直到累加和超过输入中的最大数字。
修复后的代码
function decode(input) { // 将每行内容转换为数字-单词的映射 const wordMap = new Map(); const lines = input.trim().split('\n'); let maxNumber = 0; lines.forEach(line => { const [numStr, word] = line.trim().split(' '); const num = Number(numStr); wordMap.set(num, word); if (num > maxNumber) { maxNumber = num; } }); const targetNumbers = []; let currentSum = 0; let n = 1; // 计算所有金字塔行末尾的数字 while (currentSum + n <= maxNumber) { currentSum += n; targetNumbers.push(currentSum); n++; } // 按顺序收集对应单词并拼接 return targetNumbers.map(num => wordMap.get(num)).join(' '); } // 测试示例输入 const testInput = `3 love 6 computers 2 dogs 4 cats 1 I 5 you`; console.log(decode(testInput)); // 输出: "I love computers"
解码长列表内容
将你提供的长列表输入到修复后的函数中,得到的解码结果为:
I especially like the element of surprise
内容的提问来源于stack exchange,提问作者harish
相关产品推荐
相关产品推荐

