题目标题:big data
题目描述:要吐就去wc,合并起来吐哦亲。
题目附件:bigdata.7z
看题目就知道是要用到很大的数据了,其实这道题说难不难,说简单也不简单。
首先下载题目的附件,发现有150.85Mb。
我用的是MacOS系统,安装p7zip后用以下命令解压7z压缩包:
1 | 7za x bigdata.7z |
下面是终端输出的解压信息:
1 | Extracting 0/0/1/0/3/1/3/3/400 |
感觉很牛B的样子,150多M的压缩包解压后有500多M,包含了46233个文件夹和11个文件。
其中有一张名为myboyfriend.png
的图片,还有10个文件,每个文件有50多M。
先打开图片看一下,居然是一张很猥琐的图片:
看来题目的提示就是Python image steganography
了。
Google一下关键字,点开第一个链接《Stepic》。
看介绍说是Python的图片隐写术,也就是把一些信息隐藏在图片里的技术。
按照官方教程先安装Stepic:
1 | easy_install stepic |
然后提取图片里的隐藏信息:
1 | stepic --decode --image-in=myboyfriend.png --out=tips |
执行后在目录下生成了一个tips文件,用MacVim打开文件,查看内容:
1 | <tip>有10个体积较大的文本文件随机散落在文件夹0的子目录中,文件内容为英文单词,请统计出这10个文件中出现次数最多的单词和出现次数最少的单词还有他们对应的个数,连接起来就是key。例如:出现次数最多的单词为max,次数为100,出现次数最少的单词为min,次数为1,那么key为maxmin1001.</tip> |
貌似是html编码,用浏览器打开tips,就能看到文字了:
有10个体积较大的文本文件随机散落在文件夹0的子目录中,文件内容为英文单词,请统计出这10个文件中出现次数最多的单词和出现次数最少的单词还有他们对应的个数,连接起来就是key。例如:出现次数最多的单词为max,次数为100,出现次数最少的单词为min,次数为1,那么key为maxmin1001.
好吧,看来要去wc吐了。
看一下前面的压缩包解压信息,10个文件就藏在这些文件夹里:
1 | Extracting 0/0/1/0/3/1/3/3/400 |
怎么把这些文件拼在一起呢?3条命令就搞定了:
1 | # 进入名字为0的文件夹。 |
执行后生成了一个名为bigdata的文件,这样就成功把10个文本拼接起来了。
用MacVim打开bigdata,发现有2600多万行:
观察发现,每一行可能有多个单词,每个单词之间用制表符(\t)隔开。
下面是自动统计单词个数的pyhon代码:
1 | #coding:utf-8 |
在终端执行这个脚本,占用4G多内存,跑了60多秒,终于出现了答案:
1 | key : Landsatproscriptions633444 |