Twitter文本压缩挑战
规则
编码时 :
Latin1
文字,大概是英文。 你的程序必须输出一个可以表示的消息
U+0000
- U+10FFFF
范围内的140个代码点
排除非字符:
U+FFFE
U+FFFF
U+
n
FFFE
, U+
n
FFFF
其中n
是1
- 10
十六进制 U+FDD0
- U+FDEF
U+D800
- U+DFFF
(代理码点)。 它可以用您选择的任何合理编码输出; GNU iconv
支持的任何编码都将被认为是合理的,并且您的平台本地编码或区域设置编码可能是一个不错的选择。
解码时 :
输出文本应该可以被人读取,也可以是英文。
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图像编码挑战规则的变体。
不知道我是否有时间/精力来跟上实际代码,但这里是我的想法:
任何比这更长的事情,我们正在文本中开始丢失信息。 因此,执行以下步骤的最小数目以将字符串缩减为可以使用上述方法压缩/编码的长度。 此外,不要在整个字符串上执行这些替换,只要在子字符串上执行这些替换就会使它足够短(我可能会向后遍历字符串)。
好吧,现在我们已经消除了尽可能多的多余字符,因为我们可以合理摆脱。 现在我们要做更大幅度的缩减:
好的,就我们所能做的事情而言,文本是可读的。 除此之外,让我们看看我们是否可以想出一种方法,使文本看起来像原始文本,即使它不是最终可解析的(再次,从字符串末尾一次执行这一个字符,并停止当它足够短):
这应该给我们留下一个由5个可能的值(a,l,n,p和空格)组成的字符串,这将允许我们编码相当长的字符串。
除此之外,我们只需要截断。
我所能想到的其他技术只有基于字典的编码,用于常用字或字母组。 这可能会给我们一些正确的句子的好处,但可能不适用于任意字符串。
这是我的实际英语变体。
每个代码点都有类似1100000个可能的状态。 那么,这是一个很大的空间。
因此,我们将所有原始文本进行处理并从中获取Wordnet同义词。 数字被铸成英文名称(“四十二”)。 1,1M州将允许我们保持synset id(可以在0和82114之间),synset中的位置(约10个变体,我想)和同义词类型(其是四个名词,动词,形容词,副词之一) 。 我们甚至可能有足够的空间存储原始形式的单词(如动词时态id)。
解码器只是将同义词集提供给Wordnet并检索相应的单词。
源文本:
A white dwarf is a small star composed mostly of electron-degenerate matter. Because a
white dwarf's mass is comparable to that of the Sun and its volume is comparable to that
of the Earth, it is very dense.
变为:
A white dwarf be small star composed mostly electron degenerate matter because white
dwarf mass be comparable sun IT volume be comparable earth IT be very dense
(使用在线Wordnet进行测试)。 这个“代码”应该占用27个代码点。 当然,所有“大声笑”,如“大声笑”和“L33T”将永远失去。
PAQ8O10T << FTW
链接地址: http://www.djcxy.com/p/42741.html