Ruby 来分析分析这段 Ruby 代码

nowazhu · 2013年08月14日 · 最后由 blackanger 回复于 2013年08月15日 · 2322 次阅读

都是黑客吗?吊。。。

操作一堆乱码的码位嘛,故弄玄虚 😄

那乱码怎么打出来的?你这 ASCII 艺术玩的不错。

这是针对特定字符集的编码压缩法

像第一个 euruko 文字用到的字符只有 "\n )/\\_|", 对应的码点是 [10, 32, 41, 47, 92, 95, 124], 然后找一个简单的可逆函数,可以把上述码点和比较小的区间如 0..15 做映射,然后就能把压缩算法搞出来了。关键就是怎么去搞这么一个函数...

除了 Euroku-golf, 今年的 ICFP 竞赛也和这个有点关系的:给定一个黑箱函数,你可以用 web api 去检查它的输入和输出的几个例子,然后去猜函数的实现,猜出来最多的队伍获胜

#2 楼 @blackanger 一定是先找到码点,生成字符,再复制的..

[33, 287, 179, 179, 179, 163, 33, 64665, 8865, 8865, 8801, 64793, 33, 34349, 2099, 12371, 2163, 61613, 33, 37017, 43169, 43169, 43105, 16665, 33, 2335, 32305, 34889, 32869, 16547, 33, 28817, 43177, 43177, 43177, 12433, 33, 63521, 4129, 2081, 2081, 4129, 33, 28837, 35043, 35011, 37043, 65197, 33, 16541, 61443, 43203, 43187, 43179, 61597, 33, 63521, 2213, 12575, 2209, 61473, 33, 165, 227, 195, 179, 173].pack("U*")

 => "!ğ³³³£!ﲙ⊡⊡≡ﴙ!蘭࠳こ\u0873!邙ꢡꢡꡡ䄙!ट縱衉聥䂣!炑ꢩꢩꢩゑ!အࠡࠡအ!炥裣裃邳ﺭ!䂝?ꣃꢳꢫ!\u08A5ㄟ\u08A1!¥ãó­"

#4 楼 @hooopo 噢,这么来的。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号