gpt4 book ai didi

unicode - Twitter 文本压缩挑战

转载 作者:行者123 更新时间:2023-12-04 12:38:36 25 4
gpt4 key购买 nike

规则

  • 你的程序必须有两种模式:编码 解码 .
  • 编码 :
  • 您的程序必须将一些人类可读的输入作为输入 Latin1文字,大概是英文。
  • 忽略标点符号也没关系。
  • 您只需要担心实际的英语单词,而不是 L337。
  • 任何带重音的字母都可以转换为简单的 ASCII。
  • 您可以选择处理数字的方式。
  • 123
  • 一二三
  • 一百二十三
  • 123
  • 1 2 3
  • 一百二十三
  • 一二三
  • 一百二十三
  • 123
  • 1 2 3
  • 您的程序必须输出一条消息,该消息可以用
  • 范围内的 140 个代码点 U+0000U+10FFFF
    排除非字符:
  • U+FFFE
  • U+FFFF
  • U+ n FFFE , U+ n FFFF哪里n110十六进制
  • U+FDD0U+FDEF
  • U+D800U+DFFF (代理代码点)。

  • 它可以以您选择的任何合理编码输出;
    GNU iconv 支持的任何编码会被认为是合理的,
    并且您的平台 native 编码或区域设置编码可能是一个不错的选择。
  • 解码 :
  • 您的程序应该将 的输出作为输入。编码 模式。
  • 文本输出应该是输入文本的近似值。
  • 越接近原文越好。
  • 不需要任何标点符号。
  • 输出文本应该是人类可读的,也可能是英语。
  • 可以是L337,或者哈哈。
  • 解码过程可能无法访问编码过程的任何其他输出
    除了上面指定的输出;
    也就是说,你不能在某处上传文本并输出 URL
    用于下载解码过程,或任何类似的愚蠢行为。
  • 为了用户界面的一致性,您的程序必须如下所示:
  • 您的程序必须是一个可以在具有适当解释器的平台上设置为可执行的脚本,
    或者可以编译成可执行文件的程序。
  • 你的程序必须将 encode 作为它的第一个参数或 decode设置模式。
  • 您的程序必须至少以下列方式之一接收输入:
  • 从标准输入获取输入并在标准输出上产生输出。
  • my-program encode <input.txt >output.utf
  • my-program decode <output.utf >output.txt
  • 从第二个参数中命名的文件中获取输入,并在第三个参数中命名的文件中生成输出。
  • my-program encode input.txt output.utf
  • my-program decode output.utf output.txt
  • 对于您的解决方案,请发布:
  • 您的完整代码和/或其他地方托管的链接
    (如果它很长,或者需要很多文件来编译,或者其他什么)。
  • 对它如何工作的解释,如果它不是从代码中立即显而易见的
    或者如果代码很长并且人们会对摘要感兴趣。
  • 一个示例文本,包含原始文本、压缩后的文本和解码后的文本。
  • 如果您基于其他人的想法,请注明出处。
    尝试完善别人的想法是可以的,但是你必须归于他们。

  • 这些规则是 Twitter image encoding challenge 规则的变体.

    最佳答案

    不确定我是否有时间/精力用实际代码来跟进,但这是我的想法:

  • 任何特定长度下的任意 LATIN 1 字符串都可以简单地编码(甚至不压缩)而不会丢失为 140 个字符。幼稚的估计是 280 个字符,尽管由于比赛规则中的代码点限制,它可能比这短一点。
  • 比上述长度稍长的字符串(允许在 280 到 500 个字符之间进行推测)很可能可以使用标准压缩技术缩小为足够短的字符串以允许上述编码。

  • 任何比这更长的时间,我们都会开始丢失文本中的信息。因此,执行最少数量的以下步骤以将字符串减少到可以使用上述方法进行压缩/编码的长度。另外,如果只是在子字符串上执行这些替换会使其足够短(我可能会向后遍历字符串),请不要在整个字符串上执行这些替换。
  • 将 127 以上的所有 LATIN 1 字符(主要是重音字母和时髦符号)替换为最接近的非重音字母字符中的等效字符,或者可能替换为“#”之类的通用符号替换
  • 用等效的小写形式替换所有大写字母
  • 用空格替换所有非字母数字(任何剩余的符号或标点符号)
  • 将所有数字替换为 0

  • 好的,现在我们已经消除了尽可能多的多余字符。现在我们要做一些更显着的减少:
  • 用单个字母(气球)替换所有双字母(气球)。看起来很奇怪,但仍然希望读者能够理解。
  • 用较短的等价物替换其他常见字母组合(CK 与 K、WR 与 R 等)

  • 好的,这就是我们所能做到的,并使文本可读。除此之外,让我们看看我们是否可以想出一种方法,使文本类似于原始文本,即使它最终不是可解密的(同样,从字符串的末尾开始一次执行一个字符,并在它足够短):
  • 替换所有元音 (aeiouy)
  • 将所有“高”字母 (bdfhklt) 替换为 l
  • 将所有“短”字母 (cmnrsvwxz) 替换为 n
  • 将所有“悬挂”字母 (gjpq) 替换为 p

  • 这应该给我们留下一个由 5 个可能值(a、l、n、p 和空格)组成的字符串,这应该允许我们对非常长的字符串进行编码。

    除此之外,我们只需要截断即可。

    我能想到的唯一其他技术是对常见单词或字母组进行基于字典的编码。这可能会给我们一些正确的句子带来好处,但可能不会给任意字符串带来好处。

    关于unicode - Twitter 文本压缩挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1014271/

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