# 记一次有意思的种树比赛 在招聘群里有位老哥发了个网址`http://geek.qq.com/tree/`,发现挺好玩,别说这玩意还真让人极其上头哈哈。这次种树实际上就是类似于一个闯关游戏,种树种到一定数量就会出现新的玩法,当然我也是个小菜鸡,弄了`100w`就种不下去了。在我玩的这几关就需要解密混淆的`js`等等一些操作,还是挺好玩的,注意这边是成功种一棵树后才能继续种下一棵树,因此开多线程并行刷接口没有意义。 ## 第一关 第一关是`1-1w`棵树,第一关还是很简单的,就是一个简单的发起请求,数组中就只有一个值,把这个值取出来再请求携带回去就好,实际上这个闯关游戏的处理都是在这边中间的处理过程。 ```javascript /** pull示例 http://159.75.70.9:8081/pull?u=0000081082CCDB14682A1505892071B1 返回示例 {"c":"A274075A","a":[73513],"t":"000010510000000086A11C1156D6202A"} push示例 http://159.75.70.9:8081/push?t=000010510000000086A11C1156D6202A&a=73513 返回示例 {"success":1,"score":1} ``` 实际上闯关的时候处理的只需要关注这个`a`即可,这个值就是从上边`push`的数组中取得的,所以直接`pop`即可。 ```javascript var f = function(obj){ return new Promise(resolve => { resolve(obj.a.pop()); }) } while(true){ try{ let token = "0000081082CCDB14682A1505892071B1" let pull = await (await fetch(`${cgi}/pull?u=${token}`)).json(); let val = await f(pull); let push = await (await fetch(`${cgi}/push?t=${pull.t}&a=${val}`)).json(); console.log(push); if(!push.success) throw push; }catch(e){ break; } } // 注:变量cgi已在全局定义 ``` ## 第二关 第二关是`1w-10w`棵树,实际上当请求第一次之后,会根据返回的`push`对象中的`c`属性的值动态插入一个`