人在西邮 | Linux 兴趣小组免试题攻关指南

1

切记,这只是“指南”,没有一劳永逸,没有舒适区。

[图片上传失败...(image-b1f77c-1509644653387)]](http://upload-images.jianshu.io/upload_images/2558748-9c11c1cfd710240a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

时隔一年,2017,看到西邮 Linux 兴趣小组再出新一度的免试题,不免回想起去年大一的自己的经历,虽然当时很多关卡都是学长所指点,也依旧收获满满。这里贴上去年的免试题之我的攻略,作为给大一同学的小科普:

如果问我为什么要写攻略的话~

  • 让大家面对这种套路的免试题不再迷茫。
  • 鼓励 Linux 兴趣小组再创新第一个提出发布免试题的学长最棒

如果问我今年的攻略在哪里的话~

  • 你为什么不自己好好挑战一下呢?2017 免试题
  • 大一写攻略的接力棒,我想传递给你~

2

以下是我去年的攻略原文,曾发布在博客园。

4.28 的宣讲会圆满结束(就在写这段话之前不久),对于西邮Linux兴趣小组这一次纳新,身为局外人表示:还是有历史,还是会玩,还是厉害哈。
华丽的分割线里面是自己之前的攻关战略,最后补充了宣讲会上学长的解释,属于自己的攻关过程之外,但值得记录。
以下攻关内容叙述角度模拟一个人单独挑战时的思考,实则我是在各种指点下与学长共同完成的。。
因此,感谢帮我的学长,还有下方评论区的伙伴@奥尔德赛,对于技术,我们永远是朋友。

FREE OPEN SHARE

自己的攻关经历

4月伊始,西邮Linux小组为五月纳新进入了前期宣传阶段,免试题一放出,引来各个热爱技术的同学热情挑战。 免试题入门可从西邮Linux小组官网中戳入,或直接点西邮Linux小组2016免试题进入。
本想着从百度进入免试题入口,却意外发现2013年曾有外校学生写过13年的免试题攻略,对小组免试题考察风格有了初步的了解。详见西邮Linux小组2013免试题+继续之战

第一关

首页如图所示,看见START,就立刻戳了进去。

进去后是一张背景图片,中间写着2006的年份(西邮Linux兴趣小组2006年建立),点击后变成2007,再点击变成2008……到2015年后点击会重新跳到2006。那线索说不定在这里,如果能点出今年——2016,或许会有所发现。 打开源代码,在有关2015的源码下发现

<input type="hidden">

隐藏域,value值为2006,因此点击2015后会重新回到2006的界面,而2006的界面源码隐藏域value的值为2007…… 看来要出现2016的字样,就需要传递2016的value值,在任意年份的页面中将源码中隐藏域value改成2016后提交看看:

<input type="hidden" name="year" value="2006"></input>

修改后点击年份,不出所料,成功过关!

P.S:点击START之前的页面源码中也有相同隐藏域且value=2006,点击START之后跳到2006的界面中,更加证明了第一关需要出现的2016和该<input>
有关。 而在START页面将value直接修改成2016后点击START会怎么样?结果直接到了第二关!

第二关

一段名言、一副梵高作的《星空图》和背景的弹琴声是进入第二关首先注意到的三大线索。再没有其它什么显示的,那么应该还需要到源码里面看看。

分析源码,发现名言、图片之外,背景音乐所用的<audio>
标签多了一个,应该不会平白出现的,如图,没怎么接触过音频文件,不知道是.3gpp格式和.eop格式哪个是多余的。

复制该链接,全部下载出来,发现.3gpp就是背景音乐可以直接播放,而.eop没有相关软件可以打开。 百度 .eop格式 发现这需要拿键盘钢琴软件Everyone Piano打开,下载并打开之。 果然,这个源码中没用到的.eop文件用Everyone Piano打开后在键盘中敲出了线索————一个网址:

www.dreamchasinger.cn/movie/

第三关

跟着琴声来到第三关,一部还看不懂的微电影和一串01码,对于01码,西邮Linux兴趣小组2013年免试题第一关不就是这个01码么?老套路试试。

老套路无果,因为这串01和13年不同的是,中间有空格,莫非是摩尔斯电码?写一个小程序把0和1变成点和横杠再用在线翻译器翻译,发现第四关的入口链接——182.254.246.154。
如果翻译成乱码的话,是好事,只需改一下编码格式就好。这关打过去时间长了,当时好像用的是base64解码的。

第四关

怪不得纳新群之前有人说K炸,我还水了一句王炸。原来是他早已经打到这一关了,好可怕。

乱提交了一些发现并无用,源码里也毫无破绽,目瞪口呆之际盯着K玩,发现了一个神奇的现象——除了第三张方片国王是褐色胡子的中年人外,剩余三个国王都是白胡子老头!难道有猫腻,下载第三个图片之。下载出来后听说有一种叫“图种”的制作技术,可以将rar压缩文件和一张图片合并起来显示为一张图。那这张图或许就是用图种制作器做出来的——把这张图片名字3.png改为3.rar发现正是一个压缩文件~

如上图所示,压缩文件里面放着1.txt,拉出来名称改成1.exe后发现……是一个贪吃蛇游戏!过关再说。

一闪一闪的速成贪吃蛇游戏终于熬到了第四关,果然出现了

IMPORTANT MESSAGE:VHUUEFUDIXQHU

WHAT??!返回王炸的网页,在输入框输下VHUUEFUDIXQHU后居然还是没反应,那你还IMPORTANT! 好吧,肯定有出路的,不过我暂时就卡在了这里……

博客园评论区

评论区伙伴说该输入FREEOPENSHARE,果然到了第5.1关,也是可以从网址直接跳的。

自己的第一反应还是看源码,发现这是用HTML5的Canvas画布编写,由于自己从HTML+CSS直接跳至PHP服务端开发,之前没怎么深入了解过JavaScript,有些吃力。

但好歹现在也学C,并且JS也是面向对象的脚本语言,根据变量名还是能读出一些寓意的,如图所注释:

然而这时离宣讲会开始只剩一小时了,来不及思考了,要开车。

看完宣讲会官方攻略后的补充

官方详解如下,和自己的这篇博客相比的话各有优点哦:

其中,第五大关解题源码如下:

#include <iostream>
#include <cstring>
#include <math.h>
#include <cstdio>

using namespace std;

const int N = 25;
int dp[N][N][N][N];
int a[N][N];
int fa[2][N*N] = {};
char ans[2][100];
char str[10000];

int main()
{
    cin>>str;
    int len = strlen(str);

    int row, col;
    row = col = 0;
    int num = 0;
    //将方格数据转化为矩阵
    for(int i=0; i<len; i++)
    {
        if(str[i] >= '0' && str[i] <= '9')
        {
            num = num * 10 + str[i] - '0';
        }
        else if(i > 0 && str[i-1] >= '0' && str[i-1] <= '9')
        {
            if(str[i] == ']')
            {
                a[row][col] = num;
                num = 0;
                if(str[i+1] != ']')
                {
                    col++;
                    row = 0;
                }
            }
            else if(str[i] == ',')
            {
                a[row][col] = num;
                row++;
                num = 0;
            }
        }
    }

    int n = col;
    //动态规划
    for(int i=1; i<=row; i++)
        for(int j=1; j<=col; j++)
            for(int k=1; k<=row; k++)
                for(int l=1; l<=col; l++)
                {
                    int mx = 0;
                    if(mx < dp[i-1][j][k-1][l])
                    {
                        mx = dp[i-1][j][k-1][l];
                    }
                    if(mx < dp[i-1][j][k][l-1])
                    {
                        mx = dp[i-1][j][k][l-1];
                    }
                    if(mx < dp[i][j-1][k-1][l])
                    {
                        mx = dp[i][j-1][k-1][l];
                    }
                    if(mx < dp[i][j-1][k][l-1])
                    {
                        mx = dp[i][j-1][k][l-1];
                    }

                    if(i == k && j == l)
                        dp[i][j][k][l] = mx + a[i][j];
                    else
                        dp[i][j][k][l] = mx + a[i][j] + a[k][l];
                }

    cout<<"the ans = "<<dp[row][col][row][col]<<endl;

    //逆推得到路径
    int cnt = 0;
    int i=row, j=col, k=row, l=col;
    while(1)
    {
        if(i == 1 && j == 1 && k == 1 && l == 1)
            break;
        dp[i][j][k][l] -= a[i][j];
        if(i != k || j != l)
            dp[i][j][k][l] -= a[k][l];

        if(dp[i][j][k][l] == dp[i-1][j][k-1][l])
        {
            ans[0][cnt] = 'U';
            ans[1][cnt] = 'D';
            cnt++;
            i--;k--;
        }
        else if(dp[i][j][k][l] == dp[i-1][j][k][l-1])
        {
            ans[0][cnt] = 'U';
            ans[1][cnt] = 'R';
            cnt++;
            i--;l--;
        }
        else if(dp[i][j][k][l] == dp[i][j-1][k-1][l])
        {
            ans[0][cnt] = 'L';
            ans[1][cnt] = 'D';
            cnt++;
            j--;k--;
        }
        else
        {
            ans[0][cnt] = 'L';
            ans[1][cnt] = 'R';
            cnt++;
            j--;l--;
        }
    }

    //输出路径
    cout<<"load_one > ";
    for(int i=0; i<cnt; i++)
        cout<<ans[0][i]<<" > ";
    cout<<"end"<<endl;

    cout<<"load_two > ";
    for(int i=cnt-1; i>=0; i--)
        cout<<ans[1][i]<<" > ";
    cout<<"end"<<endl;

    return 0;
}

3

读完后,还可以看看前几个月的百度前端技术学院热身赛之我的攻略,你就知道为什么我说这是“套路”了~

有趣的百度前端热身赛@2017

也可以参考纯 URL 过关的智力游戏:Nazo_Game 找找灵感

Nazo_Game 官网

4

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,057评论 25 707
  • 1 练瑜伽的时候认识一位姐姐Y,看起来比我大三四岁的样子。聊到年龄,才知道她比我大了快10岁,已经有两个孩子。我一...
    郭姑娘说阅读 170评论 0 1
  • 1、关于身体健康方面: (1)06:30开始完成晨跑10公里并坚持听《超级个体》(下雨除外,预计用时1小时)。 2...
    清风_bd61阅读 235评论 0 0