11月11日,一款在中国程序员中很受欢迎的游戏。第九个问题很难(对不起,该网址包含MD5和会话,我可以将其粘贴到此处)。有一些中文指南,带有英文关键字。甚至有人试图用哈斯克尔的一行来解决这个问题......
所以,问题:
给定一个字符串看起来像这样,并获取下一个问题的关键:
01001000 00110100 01110011 01001001 01000001 01000011 01001010 01001011
01101110 01101100 01000001 01000001 01000001 00101011 00110001 01011010
01000010 00110001
我将整个二进制字符串复制到此处的要点中:https://gist.github.com/4054140
根据指南,二进制代码可以读取为base64代码,然后可以显示为图像。
我的问题是:如何将这些二进制字符串解析为 base64 代码?
这些看起来像以 2 为基数的数字。如果是这种情况,您可以将每个数字的前 6 位(例如"010010")从第一组("01001000")中取出,并获取这 6 位的十进制值。在第一个数字的情况下,你会得到 18 个基数 10:
base10 = parseInt("010010", 2) -> 18
下一步是获取该十进制数的 base64。根据此表 http://en.wikipedia.org/wiki/Base64 18 将映射到"S"
然后,您取下一组 6 位,即第一组 8 ("00") 中的剩余 2 位加上下一段 ("0011") 中的 4 位并执行相同的操作:
base10 = parseInt("000011", 2) -> 3
同样,十进制 3 根据维基百科链接映射到"D"。
你会一直坚持下去,直到你处理完所有的位。
此页面包含有关如何将以 2 为基数的数字转换为以 10 为基数的一些信息: http://www.name-generators.com/javascript-2/how-to-make-binary-decimal-conversion-in-javascript.htm
我尽力解析它并得到了一个压缩包......到我的目的地只有一步,但是..
我在LiveScript中的解决方案,希望它有所帮助...
require! fs
require! buffer
require! path
require! zlib
{exec} = require child_process
show = console.log
fs.read-file string.txt utf8 (err, file) ->
# throw err if err?
res = file
.replace /_/g, '1'
.replace /n/g, ' '
.split ' '
.map -> parse-int it, 2
.map -> String.from-char-code it
.join ''
b = new Buffer res, base64
zlib.gunzip b, (err, data) ->
fs.write-file c.tar data