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

相關文章
相關標籤/搜索