若是一张图片价值1000字,你能够在140个字符中放入多少图片? php
注意 :那就是你们! 赏金的最后期限就在这里,通过一番艰难的考虑后,我认为Boojum的进入只是勉强淘汰Sam Hocevar的 。 一旦我有机会写下来,我会发布更详细的笔记。 固然,每一个人都应该随时继续提交解决方案并改进人们投票的解决方案。 感谢全部提交和参赛的人; 我很喜欢他们。 这对我来讲很是有趣,我但愿这对参赛者和观众来讲都颇有趣。 html
我遇到了一篇关于尝试将图像压缩成Twitter评论的有趣帖子 ,该线程中的不少人(以及Reddit上的一个帖子 )都提出了有关不一样方法的建议。 因此,我认为这将是一个很好的编码挑战; 让人们将钱放在嘴边,并展现他们对编码的见解如何在有限的空间中提供更多细节。 python
我挑战你想出一个通用系统,用于将图像编码成140个字符的Twitter消息,并将它们再次解码为图像。 您可使用Unicode字符,所以每一个字符的字符数超过8位。 可是,即便容许使用Unicode字符,也须要将图像压缩到很是小的空间内; 这确定会是一种有损压缩,所以必须对每种结果的好看进行主观判断。 算法
如下是原做者Quasimondo从他的编码中得到的结果(图片根据知识共享署名 - 非商业许可证受权 ): 数据库
你能作得更好吗? 安全
U+0000
- U+10FFFF
,不包括非字符( U+FFFE
, U+FFFF
, U+
n FFFE
, U+
n FFFF
,其中n为1
- 10
十六进制,范围为U+FDD0
- U+FDEF
)和代理代码点( U+D800
- U+DFFF
)。 它能够以您选择的任何合理编码输出; GNU iconv
支持的任何编码都被认为是合理的,您的平台本机编码或区域设置编码多是一个不错的选择。 有关详细信息,请参阅下面的Unicode注释 为了用户界面的一致性,您的程序必须按以下方式运行: ide
encode
或decode
来设置模式。 您的程序必须经过如下一种或多种方式获取输入(若是您实现了带文件名的方法,若是文件名丢失,您也能够从stdin和stdout读取和写入): 单元测试
从标准输入获取输入并在标准输出上产生输出。 测试
my-program encode <input.png >output.txt my-program decode <output.txt >output.png
从第二个参数中指定的文件中获取输入,并在第三个参数中指定的文件中生成输出。 字体
my-program encode input.png output.txt my-program decode output.txt output.png
这些基本上是可能被破坏的规则,建议或评分标准:
做为我在选择我接受的解决方案时如何对解决方案进行排名的通常指南,让我说我可能会以25分的比例评估解决方案(这很是粗糙,我不会直接评分任何东西,只是使用这是一个基本准则):
有些人要求提供一些参考图像。 如下是一些您能够尝试的参考图像; 这里嵌入了较小的版本,若是您须要,它们都连接到更大版本的图像:
根据上述标准,我提供了500个表明奖金 (加上StackOverflow推出的50个奖励 ),用于我最喜欢的解决方案。 固然,我也鼓励其余人在这里投票选出他们最喜欢的解决方案。
这场比赛将持续到赏金用完,即5月30日星期六下午6点左右。我不能说它将结束的确切时间; 它多是从下午5点到7点。 我保证我会查看下午2点提交的全部参赛做品,我会尽力查看下午4点提交的全部参赛做品; 若是在此以后提交解决方案,我可能没有机会在我作出决定以前给他们一个公平的见解。 此外,您提交的越早,您投票的机会就越大,能够帮助我选择最佳解决方案,所以请尽早提交,而不是在截止日期前提交。
到底是什么容许Unicode字符也存在一些混淆。 可能的Unicode代码点范围是U+0000
到U+10FFFF
。 在任何开放的数据交换中,有一些代码点永远没法用做Unicode字符; 这些都是noncharacters和代理代码点 。 Noncharacters在所定义的Unidode标准5.1.0节16.7为值U+FFFE
, U+FFFF
, U+
Ñ FFFE
, U+
Ñ FFFF
,其中n为1
- 10
十六进制和范围U+FDD0
- U+FDEF
。 这些值旨在用于特定于应用程序的内部使用,而且符合要求的应用程序可能会将这些字符从它们处理的文本中删除。 代理点代码点在Unicode标准5.1.0第3.8节中定义为U+D800
- U+DFFF
,用于编码UTF-16中基本多语言平面以外的字符; 所以,不可能直接在UTF-16编码中表示这些代码点,而且在任何其余编码中对它们进行编码是无效的。 所以,为了本次比赛的目的,我将容许任何编码图像的程序从U+0000
- U+10FFFF
范围内不超过140个Unicode代码点的序列,不包括上面定义的全部非字符和代理对。
我更喜欢只使用指定字符的解决方案,甚至更喜欢使用指定字符的聪明子集或使用他们使用的字符集作一些有趣事情的解决方案。 有关指定字符的列表,请参阅Unicode字符数据库 ; 请注意,某些字符是直接列出的,而有些字符仅列为范围的开头和结尾。 另请注意,代理代码点列在数据库中,但如上所述是禁止的。 若是您但愿利用字符的某些属性来使输出的文本更有趣,则可使用各类字符信息数据库 ,例如命名代码块列表和各类字符属性 。
因为Twitter没有指定他们支持的确切字符集,所以我会对那些实际上不适用于Twitter的解决方案感到宽容,由于某些字符会计算额外的或某些字符被剥离。 优选但不要求全部编码输出应该可以经过Twitter或其余微博服务(例如identi.ca)无损地传输。 我已经看到一些文档声明Twitter实体编码<,>和&,所以分别计算为4个,4个和5个字符,但我没有本身测试过,他们的JavaScript字符计数器彷佛没有以那种方式来统计他们。
这种压缩很好。
http://www.intuac.com/userport/john/apt/
http://img86.imageshack.us/img86/4169/imagey.jpg http://img86.imageshack.us/img86/4169/imagey.jpg
我使用了如下批处理文件:
capt mona-lisa-large.pnm out.cc 20 dapt out.cc image.pnm Pause
生成的文件大小为559个字节。
关于此挑战的编码/解码部分。 base16b.org是我尝试指定一种标准方法,用于在更高的Unicode平面中安全有效地编码二进制数据。
一些功能:
对不起,这个答案对于原始比赛来讲太晚了。 我独立于这篇文章开始了这个项目,我在其中发现了一半。
好吧,我已经迟到了,但不过我作了个人项目。
这是一种玩具遗传算法,它使用半透明的彩色圆圈来重建初始图像。
特征:
误的feautres:
这是一个表明莉娜的例子:犭杨谷杌蒝螦匘匘匮匮匮匮匮刀刀刀刀刀刀刀嚎嚎嚎嚎嚎嚎嚎嚎嚎嚎嚎婊婊婊婊婊婊婊婊婊婊婊裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆裆岂掂戆耔攋斘眐奡萛狂昸箆亲嬎廙栃兡塅受橯恰应戞优猫僘莹吱赜卣朸杈腠綍蝘猕屐称悡诟来噩压罍尕熚帤厥虤嫐虲兙罨縨炘排叁抠堃从弅慌螎熰标宑箫柢橙拃丨蜊缩昔傥舭励癳冂囤璟彔榕兠摈侑蒖孂埮槃姠璐哠眛嫡琠枀訜苄暬厇廪焛瀻严啘刱垫仔
该代码位于bitbucket.org的Mercurial存储库中。 查看http://bitbucket.org/tkadlubo/circles.lua
想法:你能用字体做为调色板吗? 尝试在一系列向量中打破图像,试图用向量集的组合来描述它们(每一个字符本质上是一组向量)。 这是使用字体做为字典。 例如,我可使用al做为垂直线,使用 - 做为水平线? 只是一个想法。
个人解决方案的通常概述是:
我知道你要求代码,但我真的不想花时间来实际编写代码。 我认为有效的设计至少能够激励其余人编写代码。
我认为我提出的解决方案的主要好处是它正在尽量多地重用现有技术。 尝试编写一个好的压缩算法可能颇有趣,但确保有更好的算法,极可能是由拥有更高数学学位的人编写的。
另外一个重要的注意事项是,若是肯定utf16是首选编码,那么这个解决方案就会崩溃。 压缩到280字节时,jpegs不能正常工做。 虽然,对于这个特定的问题陈述,可能有比jpg更好的压缩算法。