編程競賽和邏輯謎題網站大集合
我們都知道,每天的編程生活可能有時候會有些乏味。
看這個:
Joanna: Peter,你在哪工作呢?
Peter: Initech.
Joanna: 在哪……?好吧,你在那里做什么呢?
Peter: 我在一個小黑屋里,給銀行的 2000 臺交換機更新軟件。
Joanna: 那是啥?
Peter: 明顯的問題,他們寫這些銀行軟件,額,為了節省空間,他們使用兩個數字替代 4 個數字來表示日期。比如,用 98 表示 1998?啊!讓我去看這些成千上萬行的代碼,額。。。這還沒什么關系。我,額,我不喜歡我的工作,并且,額,我不會再去那里了。*
好吧,盡管在我的辦公室里沒有這么沉悶,但是我依然喜歡在工作空余的時間里給大腦一些刺激。像大多數程序猿一樣,我喜歡練習那些有趣的代碼問題 和邏輯謎題。這比每周的辦公室娛樂活動便宜的多了,而且同樣有趣。我收集了以下我喜歡的程序和邏輯謎題網站,就是他們幫我的大腦一直處于活躍狀態,大家一 起來看看吧:
1. Project Euler – 大量的數學邏輯程序,可以使用任何你喜歡的語言解答。很多問題根本不用編程就可以解決,但是大多數還是需要一臺電腦的。一旦你解決了一個問題之后,你就可以看到其他人的一些解決方案。這些解決方案往往有助于解決類似主題的其他一些問題。
2. The Python Challenge – 專門針對學習 Python 語言的一系列程序設計挑戰。盡管任何語言都可以解決這些謎題,但是如果你用 Python,解決這些問題會更簡單一些。
3. Ruby Quiz – 一個可以使用任何語言解決程序挑戰問題的集合,但是如果你想查看這些問題的評價,他們會默認的使用 Ruby 來解決。相對應的還會有一本書,《 最好的 Ruby 問答題》,討論所選擇問題可能的解決方案。
4. Top Coder – 定期的不同類別(算法,測試,設計,組裝以及其他很多)程序設計比賽,同時會有來自微軟和 NSA 等贊助商為獲勝者提供的獎金。解決方案可以使用 JAVA,C++,C#,或者 VB。來看看比賽內容,感受一下你在比賽中可能遇到什么樣類型的難題吧。同樣這里還有大量,高水平的參賽者寫的不錯的指導教程。
5. UVa Online Judge – 數以百計來自過去編程比賽的問題,例如 ACM 國際編程大賽的題目。可以使用C,C++,Java 或者 Pascal 提交解決方案。一定要看看這本書,《Programming Challenges 挑戰編程:程序設計競賽訓練手冊 》,除此之外還有一本新書《From Baylor to Baylor》,收集了 1991 年到 2006 年期間 ,ACM-ICPC 比賽決賽中所有的問題。
6. Sphere Online Judge – 數以百計的各種在線編程競賽中的問題。最好的地方在于,你可以使用十幾種不同的語言提交解決方案(參見網站難題列表的頂端,看看你最喜歡的語言是否包括在內)。
7. C Puzzles – 在這個頁面上的謎題都是關于C語言常見的陷阱和常犯錯誤等。C語言的專家型人才可能會在很短的時間內漂亮的完成這些問題,但如果你不知道C語言的本質,這些問題可能會有點挑戰。
8. 非死book Puzzles – 一個小型的編程問題網站,非死book 用來評估潛在雇員們的能力。你可以使用 C++、Erlang、Haskell、Java、OCaml、Perl、PHP、Python 或者 Ruby 來提交解決方案。
9. Google Code Jam – 一個定期的編程比賽,參賽者使用指定的語言解決算法問題。我不確定 Google 有沒有在 2009 年舉辦比賽的計劃,不過你可以看看 2008 年比賽中的問題,掂量掂量一下自己。
10. Microsoft Interview Questions – 首先,我先說明,我完全反對在面試中使用這類謎題。很多問題都需要“靈光一現”來解決,而不需要現實世界中的邏輯思考能力。如果你使用這類問題面試應聘 者,需要警告你的是,你可能要先看看這個人以前看沒看過類似的問題。說到底,這些問題在面試之外做一做還是很有趣的。
11. wu:riddles – 數百個具有挑戰的邏輯謎題,各種各樣的難題。這些問題都標記了可能需要任何特殊的知識,例如:數學,物理,計算機科學或者國際象棋。
我忘記了什么了沒?如果你在上邊的列表中沒看到你最喜歡的編程挑戰或邏輯謎題網站,可以給我在留言里告訴我網站地址,我總是喜歡新的挑戰!
來自留言的更新
非常感謝大家留言讓我知道了新的謎題網站。下面這些是我以后會定期瀏覽的網站:
Programming Praxis 看起來是一個有希望的新博客,充滿了編程練習讓你“磨刀不誤砍柴工”。看起來新的問題將會在二月份定期發布。我已經收藏了網站的 RSS。
Code Kata 是 Dave Thomas 在 2007 年發行的《The Pragmatic Programmer 程序員修煉之道》這本書中的一系列簡短的問題。代碼器是“簡單的實際練習,讓我們的試驗和學習更簡單的一個環境。”正是我要找的。
所有語言的程序員都將會想看看編程比賽的 10 大 Prolog 問題(免費的 PDF 電子書),還有99 大 Prolog 問題。 (如果你不喜歡 Prolog,你也可以用 Haskell, Python, Scala, 或 Lisp 做這 99 個題目。)
如果你對組織編程比賽感興趣,可能需要看看美國計算機奧林匹克或者 ACM 編程競賽題(在這里能看到的問題你也能在前面提到的 UVA 在線中找到。)
Al Zimmermann’s Programming Contests (競賽名單) 目前比較經典的計算機編程問題,而且還有獎品哦。看起來競賽剛剛啟動幾個月不到一年,還有足夠時間參加本屆比賽。
Anarchy Golf 這里有幾百個問題,還有一個服務器,可以使用 69 種不同的語言提交解決方案。這個提醒了我,我忘記了 Code Golf。跟任何其他網站不同,code golf 是一個看誰的解決方案最短并且正確。JAVA 編程人員可以去玩,但是 Python 和 Perl 在 code golf 更多一些。
最后,提醒一些讀者,不僅僅有編程和邏輯類的謎題。國際象棋和圍棋同樣可以非常有趣。Chess.com 有一個每日一題,適合休閑玩家進行挑戰, GoGrinder 是圍棋問題中一個優秀的開源程序練習網站。
再次感謝那些花費時間分享他們的謎題網站的人們。希望不會影響到下周大家的工作狀態。:)
*如果你不知道 Office Space 的那種感覺,跑出去到最近的磁帶店**直接拿起一份拷貝看吧。
(譯者注:Office Space 是一部描寫在 Initech 公司上班的一位電腦工程師,在辦公室的那種崩潰的狀態的電影。 )
** 哈哈哈, “音像店”! 我怎么了,像 60 歲嘛?看這里吧 Netflix.