【问题标题】:How to parse and translate a string with words that contain identical parts如何解析和翻译包含相同部分的单词的字符串
【发布时间】:2020-12-30 20:11:50
【问题描述】:

我需要为一个小游戏制作一个“解码器”类型的东西。它给你一个像这样的字符串:

eGgeggEGgO

翻译成“猫”是因为:

c = eGg  
a = egg  
t = EGgO

问题是某些单词/字母具有相同的部分,例如 eGg 和 eGgo (K)。

所以理论上我会想象某种类型的“算法”找到“最长”匹配,它找到eGg,尝试eGgo,找不到它,然后它知道它是C。

我遇到的问题是它真的不高效,因为它找到了第一个匹配项,并且必须遍历所有单词以查看是否还有另一个匹配项。基本上必须遍历每个字母的所有字母。我觉得必须有更好的方法来处理它。

这是针对网络的,它可能有一个后端,但希望只在客户端上完成,所以我开始使用 JavaScript。我对伪代码版本或 JavaScript 或其他一些语言感到满意。我最困惑的是概念上的“如何”,而不是自己的实际编码。

更新:

这是完整的地图

  egg:  'A',
  Egg:  'B',
  eGg:  'C',
  EGg:  'D',
  egG:  'E',
  EgG:  'F',
  eGG:  'G',
  EGG:  'H',
  eggo: 'I',
  Eggo: 'J',
  eGgo: 'K',
  EGgo: 'L',
  egGo: 'M',
  EgGo: 'N',
  eGGo: 'O',
  EGGo: 'P',
  eggO: 'Q',
  EggO: 'R',
  eGgO: 'S',
  EGgO: 'T',
  egGO: 'U',
  EgGO: 'V',
  eGGO: 'W',
  EGGO: 'X',
  eggy: 'Y',
  eggs: 'Z'

【问题讨论】:

  • 请告诉我们编码算法,否则我们无能为力。示例不足以理解编码/解码方案是如何工作的。
  • 是的,如果你没有prefix code,就很难解码,你可能需要回溯,而且你可能根本不会成功。
  • 已更新,如果有帮助,它会拥有完整的映射。
  • 您可以轻松地标记您的输入,因为所有代码符号都以 e 开头但以不同的字母结尾。无需“为每个字母循环遍历所有字母。”
  • 哦,这很聪明,现在你提到它,找到开始的明显模式。谢谢!

标签: javascript algorithm parsing decode


【解决方案1】:

这是一个标记化问题,所以我们需要一个语法规则来分隔标记。

幸运的是,每个标记都以 'e' 的一种情况开始,所以这一切都是为了找到 e's 并在它们之前进行拆分。

const tokenMap = {
  egg:  'A',
  Egg:  'B',
  eGg:  'C',
  EGg:  'D',
  egG:  'E',
  EgG:  'F',
  eGG:  'G',
  EGG:  'H',
  eggo: 'I',
  Eggo: 'J',
  eGgo: 'K',
  EGgo: 'L',
  egGo: 'M',
  EgGo: 'N',
  eGGo: 'O',
  EGGo: 'P',
  eggO: 'Q',
  EggO: 'R',
  eGgO: 'S',
  EGgO: 'T',
  egGO: 'U',
  EgGO: 'V',
  eGGO: 'W',
  EGGO: 'X',
  eggy: 'Y',
  eggs: 'Z'
 }

const enciphered = 'eGgeggEGgO';
const tokens = enciphered.replace(/[e|E]/g, '^\$&');
const mappedTokens = tokens.split('^').map(key => tokenMap[key])
const deciphered = mappedTokens.join('')
console.log(deciphered)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多