編程幾乎已經(jīng)成為了人類所知每個(gè)行業(yè)的必要組成部分,如今有越來(lái)越多的人開(kāi)始了他們的編程之旅。
如果你正在在學(xué)習(xí)編程,那么我可以告訴你一個(gè)提高技能的好方法,那就是敢于去解決編碼過(guò)程中遇到的難題。解決不同類型的難題,可以幫助你成為一名優(yōu)秀的問(wèn)題解決者。
我整理了一些非常受歡迎的編程難題網(wǎng)站列表,并且做了簡(jiǎn)單介紹,希望它們可以在你的編程之旅中幫助到你:
1、TopCoder
這個(gè)網(wǎng)站可以說(shuō)是一個(gè)程序設(shè)計(jì)比賽的網(wǎng)站,有近一百萬(wàn)程序員所支持,該網(wǎng)站每個(gè)星期都有兩次網(wǎng)上在線比賽,根據(jù)比賽的結(jié)果對(duì)參賽者進(jìn)行新的排名。參賽者可以使用他們的代碼編輯器直接在線自行完成挑戰(zhàn)。根據(jù)參賽者完成時(shí)間長(zhǎng)短排名。
TopCoder上排名靠前的用戶都是非常有潛力的程序員,他們會(huì)定期參加各種比賽。這些用戶還可以通過(guò)名稱為“ALGORITHMS WEEKLY BY PETR MITRICHEV”的博客平臺(tái)去發(fā)表一些關(guān)于編程競(jìng)賽、算法、數(shù)學(xué)等方面的文章。
2、Coderbyte
Coderbyte 是 Kickstarter 資助的項(xiàng)目(在Kickstarter 支持之前這個(gè)網(wǎng)站就已經(jīng)存在了),而且它針對(duì)完全的初學(xué)者和類似中級(jí)程序員。
Coderbyte 提供了 200 多種編碼挑戰(zhàn),挑戰(zhàn)者可以從 10 種編程語(yǔ)言任選一個(gè),直接在線解決問(wèn)題。挑戰(zhàn)的范圍從簡(jiǎn)單(查找字符串中的最大單詞)到復(fù)雜。
他們還提供一系列算法教程,包括教程視頻和面試準(zhǔn)備課程。與HackerRank和其他類似網(wǎng)站不同的是,除了?Coderbyte?發(fā)布的官方解決方案外,用戶還可以查看其他用戶提供的解決方案。
3、Project Euler
Project Euler 提供了很多關(guān)于計(jì)算機(jī)科學(xué)和數(shù)學(xué)領(lǐng)域的挑戰(zhàn)。Project Euler 大概是世界上最受歡迎的編程挑戰(zhàn)網(wǎng)站,它們?cè)O(shè)立得并不是很難,反而更加需要關(guān)鍵的思考和解決問(wèn)題,以此來(lái)幫助你成長(zhǎng)和學(xué)習(xí)你所使用的語(yǔ)言。這一切都是為了鍛煉你進(jìn)步,確保你充分理解自己在做什么。
你不能直接在網(wǎng)站上的編輯器編碼,所以你需要在自己的電腦上編寫(xiě)一個(gè)解決方案,然后在他們的網(wǎng)站上提交解決方案。
4、HackerRank
HackerRank提供了很多不同領(lǐng)域的挑戰(zhàn),比如算法、數(shù)學(xué)、SQL、函數(shù)式編程、人工智能等等。它關(guān)于人工智能的那部分挑戰(zhàn),它們非常酷,而且讓高級(jí)程序員也有東西可以玩。它的背后是 Y Combinator、SVAngel 和許多其他公司。絕對(duì)有很多黑客在攻克這些。
HackerRank 還針對(duì)每一項(xiàng)挑戰(zhàn)專門(mén)成立了討論和領(lǐng)導(dǎo)委員會(huì),而大多數(shù)挑戰(zhàn)來(lái)自于一篇社論,它解釋了更多的挑戰(zhàn),以及如何接近它提出解決方案。除了這篇社論,你目前還不能看到其他用戶在 HackerRank 上的解決方案。
HackerRank 還支持用戶提交應(yīng)用程序,可以適用于工作、解決公司贊助編碼的挑戰(zhàn)。
5、CodeChef
CodeChef 是一家位于印度的編程競(jìng)賽網(wǎng)站,由 Directi 創(chuàng)造的,該網(wǎng)站提供了數(shù)百種挑戰(zhàn)。挑戰(zhàn)者可以通過(guò)在線編輯器進(jìn)行編程,而且還可以根據(jù)自身的編程能力去查看適合于自己水平的挑戰(zhàn)題目,CodeChef 有一個(gè)大小合理的編程社區(qū),用戶可以參與論壇討論,編寫(xiě)教程,而且還能參加 CodeChef 的編碼競(jìng)賽。
6、CodeEval
CodeEval 與 HackerRank 類似,它也提供了一系列公司贊助的編碼挑戰(zhàn),如果能夠很好的完成挑戰(zhàn),還可能幫助你找到工作或者是現(xiàn)金鼓勵(lì)等。公司會(huì)舉辦競(jìng)爭(zhēng)挑戰(zhàn)賽,以此來(lái)招募新開(kāi)發(fā)人員進(jìn)行工作。參賽者在這里看到當(dāng)前的挑戰(zhàn)列表。
7、Codewars
Codewars 提供了很多由他們自己社區(qū)提交的編碼挑戰(zhàn),挑戰(zhàn)者可以選用多種語(yǔ)言在編輯器中直接在線完成挑戰(zhàn)。用戶還可以查看每個(gè)挑戰(zhàn)的討論以及其他用戶的解決方案。很多人用過(guò)之后都表示很好用。
8、LeetCode
LeetCode 是一個(gè)很受歡迎的在線判題系統(tǒng),它提供了幾百道挑戰(zhàn)題目,這些題目可以幫助挑戰(zhàn)者為面試做好技術(shù)準(zhǔn)備。挑戰(zhàn)者可以用 9 種編程語(yǔ)言直接在線完成挑戰(zhàn)。雖然該網(wǎng)站不支持查看其他用戶的解決方案,但用戶可以為自己的解決方案提供統(tǒng)計(jì)數(shù)據(jù),例如與其他用戶相比,代碼運(yùn)行速度等等。
網(wǎng)站還設(shè)有一個(gè)專門(mén)為面試準(zhǔn)備的 Mock Interview 部分,這是由他們自己創(chuàng)辦的編碼競(jìng)賽,網(wǎng)站上有一些文章可以幫助你提供更好的解題思路
9、SPOJ
Sphere Online Judge(SPOJ)是一個(gè)在線判題系統(tǒng),提供 20000 多個(gè)編程挑戰(zhàn)。它支持所有你能想到的編程語(yǔ)言,而且在它背后還有一個(gè)優(yōu)秀活躍的社區(qū)論壇。用戶可以直接通過(guò)在線編輯器提交代碼。SPOJ 還舉辦了自己的競(jìng)賽,并用戶可以自由討論編程挑戰(zhàn)題目。不過(guò),他們目前沒(méi)有像其他網(wǎng)站那樣提供任何官方解決方案或社論。
10、CodinGame
CodinGame 與其他網(wǎng)站有點(diǎn)不同,因?yàn)樗皇呛?jiǎn)單地在編輯器中去完成編碼挑戰(zhàn),而是讓挑戰(zhàn)者真正參與在線游戲代碼的編寫(xiě)。用戶可以在這里看到當(dāng)前提供的游戲列表和一個(gè)示例。這個(gè)游戲有一個(gè)問(wèn)題描述,測(cè)試用例,和一個(gè)編輯器,你可以在 20 多個(gè)編程語(yǔ)言中任選一種編寫(xiě)你的代碼。
11、Codeforces
Codeforces 是一家為計(jì)算機(jī)編程愛(ài)好者提供的在線評(píng)測(cè)系統(tǒng)該網(wǎng)站由薩拉托夫國(guó)立大學(xué)的一個(gè)團(tuán)體創(chuàng)立并負(fù)責(zé)運(yùn)營(yíng)。在編程挑戰(zhàn)賽中,選手有 2 個(gè)小時(shí)的時(shí)間去解決 5 道題,通過(guò)得分排名,選手可以看到實(shí)時(shí)的排名(Standing),也可以選擇查看好友的排名,還可以看到某題有多少人通過(guò)等信息。
在 cf,所有的用戶根據(jù)在以往比賽中的表現(xiàn)被賦予一個(gè) Rating 并冠以不同的頭銜,名字也會(huì)以不同的顏色顯示,比如 Expert 是藍(lán)色,Master 是黃色。
12、hackerearth.com
HackerEarth 成立于2013年,是一家來(lái)自印度的、面向程序員的挑戰(zhàn)比賽、招聘服務(wù)網(wǎng)站,通過(guò)編程比賽,幫助企業(yè)挑選優(yōu)秀的程序員。HackerEarth 根據(jù)記錄每個(gè)人的編程過(guò)程,通過(guò)特殊的算法模型來(lái)為企業(yè)主推薦合適的開(kāi)發(fā)者,并最終由雇主決定人選。
13、atcoder.jp
這個(gè)網(wǎng)站是 日本最大的算法競(jìng)賽網(wǎng)站,題風(fēng)很棒。有英文和日文題解,很貼心,但是我們應(yīng)該很少有人能夠用日語(yǔ)看題看網(wǎng)站,不過(guò),你可以將網(wǎng)站調(diào)成英文的。
14、hihocoder.com
風(fēng)格跟 ACM 很像,每周都會(huì)有一個(gè)競(jìng)賽題目,可以參與其中,每個(gè)月還會(huì)舉辦一般編程月賽,同其他參賽者們同臺(tái)競(jìng)技,同時(shí)還有討論社區(qū)可供用戶討論算法、分享經(jīng)驗(yàn)等,而且也會(huì)像你推薦工作機(jī)會(huì)
15、codefights.com
CodeFights 是一家將練習(xí)編程的過(guò)程變?yōu)橛螒蜻^(guò)程的初創(chuàng)公司。參賽者既可以選擇人機(jī)對(duì)戰(zhàn)模式,也可以選擇挑戰(zhàn)其它玩家。目前擁有 50 萬(wàn)活躍用戶!可以讓用戶在對(duì)戰(zhàn)之中不斷提高自己的編程技巧。社交游戲與編程的結(jié)合是這個(gè)網(wǎng)站最大的特點(diǎn)
16、Timus Online Judge URAL
Timus Online Judge 是一個(gè)俄羅斯最大的在線題庫(kù), 有很多自己獨(dú)有的題目。由由烏拉爾聯(lián)邦大學(xué)管理,該網(wǎng)站的比賽規(guī)則類似于ACM,比賽分為團(tuán)隊(duì)賽和個(gè)人挑戰(zhàn)賽,比賽時(shí)間5個(gè)小時(shí),通常有十幾個(gè)問(wèn)題,通過(guò)參賽者提交的解決方案計(jì)算得分。
17、lintcode.com
在線刷題網(wǎng)站,匯集了各大公司的算法面試題。有階梯式訓(xùn)練題庫(kù),幫你選好應(yīng)該刷的題目,特別適合小白和懶人。評(píng)測(cè)數(shù)獨(dú)很快,最大的中文在線題庫(kù)。
年度挑戰(zhàn)賽類型:
18、Google Code Jam
Google Code Jam 是一項(xiàng)由 Google 主辦的國(guó)際程序設(shè)計(jì)競(jìng)賽。該項(xiàng)賽事始于 2003 年,旨在幫助 Google 發(fā)掘潛在的工程領(lǐng)域頂級(jí)人才。比賽內(nèi)容包括一系列的算法問(wèn)題,參賽者必須在指定時(shí)間內(nèi)解決。參賽者允許使用任意自選編程語(yǔ)言和開(kāi)發(fā)環(huán)境來(lái)解答問(wèn)題。
19、Facebook Hacker Cup
Facebook Hacker Cup 是一個(gè)由 Facebook 臉譜主辦的國(guó)際性的編程比賽 。競(jìng)賽始于 2011 年,是作為一種手段來(lái)招募工程技術(shù)人才。比賽由必須要在一個(gè)固定的時(shí)間內(nèi)解決的一組算法問(wèn)題組成,參賽者可以使用任何編程語(yǔ)言和發(fā)展環(huán)境去找他們的解決方案。
Facebook 將這次競(jìng)賽作為一個(gè)重要的人才招募平臺(tái),用以吸引優(yōu)秀的程序設(shè)計(jì)人員加盟。預(yù)選賽的前 25 名將被邀請(qǐng)到Facebook總部進(jìn)行決賽,決賽勝者將被授予全球"最佳黑客"稱號(hào),同時(shí)獲得 5000 美元獎(jiǎng)金。
20、ACM 國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽
ACM 國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽(英文全稱:ACM International Collegiate Programming Contest (簡(jiǎn)稱 ACM-ICPC 或 ICPC))是由美國(guó)計(jì)算機(jī)協(xié)會(huì)(ACM)主辦的,一項(xiàng)旨在展示大學(xué)生創(chuàng)新能力、團(tuán)隊(duì)精神和在壓力下編寫(xiě)程序、分析和解決問(wèn)題能力的年度競(jìng)賽。經(jīng)過(guò)近 40 年的發(fā)展,ACM 國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽已經(jīng)發(fā)展成為全球最具影響力的大學(xué)生程序設(shè)計(jì)競(jìng)賽。賽事目前由 IBM 公司贊助。
本文所提及的都是根據(jù)以下內(nèi)容整理出來(lái)的:一些是我本人瀏覽網(wǎng)站時(shí)關(guān)注到的,一些是通過(guò)谷歌搜索和基于 Quora 上的文章,還有一些在一些文章中遇到過(guò)的。我還經(jīng)常逛一些類似于 r/learnprogramming 這樣的論壇,查看論壇用戶通常推薦哪些網(wǎng)站。