Google Foobar Challenge

image

- 引子 -

这几年由于招聘的须要,筛过不少简历,也所以看到了不少颇有意思的简历。git

好比有两个印度老哥在简历里特意写上 “Father's Name”,用 Google 搜到了其中一个,貌似是个祖上就主持祭祀的家族,种姓(caste)大概得是婆罗门(Brahmin),像是借机显摆本身家族的显赫;有些人则会用 Jain (印度耆那教)或者 Islam 做为其 family name,或许是用宗教信仰来掩饰本身的低种姓吧。github

image

另有一个印度老哥,在简历上写了 “Completed all 5 levels in Google foobar challenge” ,看着也不明因此,搜了一下,发现还挺有意思。面试

- 这啥 -

搜到的是 @xiaohanyu 老哥在 2017 年写的一篇博客[1],说他某次搜索“Haskell QuickCheck”,看到页面上播放了一段动画,并问他是否要参加一个挑战,他选择了接受,而后开启了一段奇妙的旅程 —— 作了一个算法套题,被 Google 的 recruiter 邀请到悉尼参加了一场 onsite 面试(惋惜最后面挂了)。算法

因而我也搜了同一个 Query,当时没看到啥反应;回头把他的经历看完,准备关闭搜索页的时候,发现我错过了那段动画,只看到它最后的问题:后端

Curious developers are known to seek interesting problems. Solve one from Google?

image

(页面内容下陷,露出了隐藏空间)post

固然我也选择了 “I want to play”,开启了这个隐藏空间[2]。动画

- 入坑 -

下图是开场界面,Google 把它作成了一个仿 Linux 命令行的闯关游戏,有一个 storyline —— 你潜入了 Command Lambda 的太空飞船,任务是阻止他启动“末日装置”毁灭兔子星球,而且解救飞船上的兔子们。ui

image

(仿Linux命令行的闯关游戏)google

你能够用 help 查看可用命令,或者用 request 开启挑战(领取一道题目),Google 会根据题目的难度,给每一题留出相应的时间(2 到 30 天不等),你能够用 Java 或 Python2.7 来编码。编码

编码完成后可用 verify solution.py 校验答案,若是10个case(2个在题面中给出,8个隐藏)都经过,再用 submit solution.py 提交,而后用 request 领取下一题。

- 题目 -

这套题共 5 个 level,每一个 level 分别会从题库中随机选出 一、二、三、二、1 题。因为题面比较长,这里只简单介绍下,感兴趣的同窗能够到个人 Github 查看[3]。

其中 Level 1 & 2 的题目大体对应 LeetCode Easy 级别,好比我作的这几题分别是质数筛法、数列找规律、版本号比较,不太须要花心思。

Level 3的题目大体对应 LeetCode Medium 级别,我遇到的某题是二维迷宫搜索的一个简单变种(对BFS略加改造便可),其余 2 题比较琐碎,这里不展开。

Level 4 对应的应该是 LeetCode Hard,题目也比较有意思。我作的其中一题须要判断有向图中是否有负环(bellman-ford)、再枚举全部组合,暴力求解(由于只有5只兔子);另外一题带点计算几何的意思,不过想清楚了也很简单,最后也是枚举了全部可能的组合,大力出奇迹。

Level 5 就比较麻烦了,因此给了 30 天时间。题面大意是 w * h 矩阵中的每一个元素能够有 s 种状态,对矩阵的操做 [交换任意两行/两列] 获得的结果属于同一等价类 —— 求总共有几个等价类。

因为可能的状态总共有 pow(w * h, s) 中,大力已经不能出奇迹了;我没想到解法,只好偷偷去搜了一下题解,发现不只要用到波利亚计数定理(Pólya enumeration theorem),并且还得作一些额外的推导(例如 |G| = w! * h! ),具体就不在这里展开了(由于我还没AC)。

- 其余 -

虽然这个游戏的网址[2]能够直接访问,可是须要邀请码才能开始挑战,若是你也感兴趣的话,能够试着搜搜其余人中过奖的 Query (好比前述“Haskell QuickCheck”),碰碰运气。

值得一提的是,在 Level 3 结束的时候,游戏会给你一个邀请码,而且问你是否愿意留下你的我的信息,以便 Google Recruiter 联系你(这招聘项目可算是很上心了)。

image

(图中邀请码已经用掉了,别试了)

最后,若是你试来试去也没解锁游戏,能够考虑给咱们投个简历,咱们的面试也是个闯关游戏,每一面都会有算法题,并且编码时间更紧,挑战毫不亚于 foobar 的 level 3 ~

↓↓↓ 长期招聘 ↓↓↓

投放研发工程师 — 穿山甲 @上海

https://job.toutiao.com/s/JP6...

后端研发工程师 - 穿山甲 @北京

https://job.toutiao.com/s/JP6...

字节跳动全部职位

https://job.toutiao.com/s/JP6...

- 欢迎关注 -

weixin1.png

- 参考资料 -

1. Google foo.bar 面试记 - xiaohanyu
2. Foobar with google
3. My solution to google foobar challenge