编程几乎已经成为了人类所知每个行业的必要组成部分,如今有越来越多的人开始了他们的编程之旅,越来越多的人加入了程序员的这个行列。
如果你正在在学习编程、工作编程,那么我可以告诉你一个提高技能的好方法,那就是敢于去解决编码过程中遇到的难题。解决不同类型的难题,可以帮助你成为一名优秀的问题解决者。
我整理了一些非常受欢迎的编程难题网站列表,并且做了简单介绍,希望它们可以在你的编程之旅中帮助到你:
1、TopCoder
这个网站可以说是一个程序设计比赛的网站,有近一百万程序员所支持,该网站每个星期都有两次网上在线比赛,根据比赛的结果对参赛者进行新的排名。参赛者可以使用他们的代码编辑器直接在线自行完成挑战。根据参赛者完成时间长短排名。
TopCoder上排名靠前的用户都是非常有潜力的程序员,他们会定期参加各种比赛。这些用户还可以通过名称为“ALGORITHMS WEEKLY BY PETR MITRICHEV”的博客平台去发表一些关于编程竞赛、算法、数学等方面的文章。
2、Coderbyte
Coderbyte 是 Kickstarter 资助的项目(在Kickstarter 支持之前这个网站就已经存在了),而且它针对完全的初学者和类似中级程序员。
Coderbyte 提供了 200 多种编码挑战,挑战者可以从 10 种编程语言任选一个,直接在线解决问题。挑战的范围从简单(查找字符串中的最大单词)到复杂。
他们还提供一系列算法教程,包括教程视频和面试准备课程。与HackerRank和其他类似网站不同的是,除了 Coderbyte 发布的官方解决方案外,用户还可以查看其他用户提供的解决方案。
3、Project Euler
Project Euler 提供了很多关于计算机科学和数学领域的挑战。Project Euler 大概是世界上最受欢迎的编程挑战网站,它们设立得并不是很难,反而更加需要关键的思考和解决问题,以此来帮助你成长和学习你所使用的语言。这一切都是为了锻炼你进步,确保你充分理解自己在做什么。
你不能直接在网站上的编辑器编码,所以你需要在自己的电脑上编写一个解决方案,然后在他们的网站上提交解决方案。
4、HackerRank
HackerRank提供了很多不同领域的挑战,比如算法、数学、SQL、函数式编程、人工智能等等。它关于人工智能的那部分挑战,它们非常酷,而且让高级程序员也有东西可以玩。它的背后是 Y Combinator、SVAngel 和许多其他公司。绝对有很多黑客在攻克这些。
HackerRank 还针对每一项挑战专门成立了讨论和领导委员会,而大多数挑战来自于一篇社论,它解释了更多的挑战,以及如何接近它提出解决方案。除了这篇社论,你目前还不能看到其他用户在 HackerRank 上的解决方案。
HackerRank 还支持用户提交应用程序,可以适用于工作、解决公司赞助编码的挑战。
5、CodeChef
CodeChef 是一家位于印度的编程竞赛网站,由 Directi 创造的,该网站提供了数百种挑战。挑战者可以通过在线编辑器进行编程,而且还可以根据自身的编程能力去查看适合于自己水平的挑战题目,CodeChef 有一个大小合理的编程社区,用户可以参与论坛讨论,编写教程,而且还能参加 CodeChef 的编码竞赛。
6、CodeEval
CodeEval 与 HackerRank 类似,它也提供了一系列公司赞助的编码挑战,如果能够很好的完成挑战,还可能帮助你找到工作或者是现金鼓励等。公司会举办竞争挑战赛,以此来招募新开发人员进行工作。参赛者在这里看到当前的挑战列表。
7、Codewars
Codewars 提供了很多由他们自己社区提交的编码挑战,挑战者可以选用多种语言在编辑器中直接在线完成挑战。用户还可以查看每个挑战的讨论以及其他用户的解决方案。很多人用过之后都表示很好用。
8、LeetCode
LeetCode 是一个很受欢迎的在线判题系统,它提供了几百道挑战题目,这些题目可以帮助挑战者为面试做好技术准备。挑战者可以用 9 种编程语言直接在线完成挑战。虽然该网站不支持查看其他用户的解决方案,但用户可以为自己的解决方案提供统计数据,例如与其他用户相比,代码运行速度等等。
网站还设有一个专门为面试准备的 Mock Interview 部分,这是由他们自己创办的编码竞赛,网站上有一些文章可以帮助你提供更好的解题思路
9、SPOJ
Sphere Online Judge(SPOJ)是一个在线判题系统,提供 20000 多个编程挑战。它支持所有你能想到的编程语言,而且在它背后还有一个优秀活跃的社区论坛。用户可以直接通过在线编辑器提交代码。SPOJ 还举办了自己的竞赛,并用户可以自由讨论编程挑战题目。不过,他们目前没有像其他网站那样提供任何官方解决方案或社论。
10、CodinGame
CodinGame 与其他网站有点不同,因为它不是简单地在编辑器中去完成编码挑战,而是让挑战者真正参与在线游戏代码的编写。用户可以在这里看到当前提供的游戏列表和一个示例。这个游戏有一个问题描述,测试用例,和一个编辑器,你可以在 20 多个编程语言中任选一种编写你的代码。
11、Codeforces
Codeforces 是一家为计算机编程爱好者提供的在线评测系统该网站由萨拉托夫国立大学的一个团体创立并负责运营。在编程挑战赛中,选手有 2 个小时的时间去解决 5 道题,通过得分排名,选手可以看到实时的排名(Standing),也可以选择查看好友的排名,还可以看到某题有多少人通过等信息。
在 cf,所有的用户根据在以往比赛中的表现被赋予一个 Rating 并冠以不同的头衔,名字也会以不同的颜色显示,比如 Expert 是蓝色,Master 是黄色。
12、hackerearth.com
HackerEarth 成立于2013年,是一家来自印度的、面向程序员的挑战比赛、招聘服务网站,通过编程比赛,帮助企业挑选优秀的程序员。HackerEarth 根据记录每个人的编程过程,通过特殊的算法模型来为企业主推荐合适的开发者,并最终由雇主决定人选。
13、atcoder.jp
这个网站是 日本最大的算法竞赛网站,题风很棒。有英文和日文题解,很贴心,但是我们应该很少有人能够用日语看题看网站,不过,你可以将网站调成英文的。
14、hihocoder.com
风格跟 ACM 很像,每周都会有一个竞赛题目,可以参与其中,每个月还会举办一般编程月赛,同其他参赛者们同台竞技,同时还有讨论社区可供用户讨论算法、分享经验等,而且也会像你推荐工作机会
15、codefights.com
CodeFights 是一家将练习编程的过程变为游戏过程的初创公司。参赛者既可以选择人机对战模式,也可以选择挑战其它玩家。目前拥有 50 万活跃用户!可以让用户在对战之中不断提高自己的编程技巧。社交游戏与编程的结合是这个网站最大的特点
16、Timus Online Judge URAL
Timus Online Judge 是一个俄罗斯最大的在线题库, 有很多自己独有的题目。由由乌拉尔联邦大学管理,该网站的比赛规则类似于ACM,比赛分为团队赛和个人挑战赛,比赛时间5个小时,通常有十几个问题,通过参赛者提交的解决方案计算得分。
17、lintcode.com
在线刷题网站,汇集了各大公司的算法面试题。有阶梯式训练题库,帮你选好应该刷的题目,特别适合小白和懒人。评测数独很快,最大的中文在线题库。
年度挑战赛类型:
18、Google Code Jam
Google Code Jam 是一项由 Google 主办的国际程序设计竞赛。该项赛事始于 2003 年,旨在帮助 Google 发掘潜在的工程领域顶级人才。比赛内容包括一系列的算法问题,参赛者必须在指定时间内解决。参赛者允许使用任意自选编程语言和开发环境来解答问题。
19、Facebook Hacker Cup
Facebook Hacker Cup 是一个由 Facebook 脸谱主办的国际性的编程比赛 。竞赛始于 2011 年,是作为一种手段来招募工程技术人才。比赛由必须要在一个固定的时间内解决的一组算法问题组成,参赛者可以使用任何编程语言和发展环境去找他们的解决方案。
Facebook 将这次竞赛作为一个重要的人才招募平台,用以吸引优秀的程序设计人员加盟。预选赛的前 25 名将被邀请到Facebook总部进行决赛,决赛胜者将被授予全球"最佳黑客"称号,同时获得 5000 美元奖金。
20、ACM 国际大学生程序设计竞赛
ACM 国际大学生程序设计竞赛(英文全称:ACM International Collegiate Programming Contest (简称 ACM-ICPC 或 ICPC))是由美国计算机协会(ACM)主办的,一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。经过近 40 年的发展,ACM 国际大学生程序设计竞赛已经发展成为全球最具影响力的大学生程序设计竞赛。赛事目前由 IBM 公司赞助。
本文所提及的都是根据以下内容整理出来的:一些是我本人浏览网站时关注到的,一些是通过谷歌搜索和基于 Quora 上的文章,还有一些在一些文章中遇到过的。我还经常逛一些类似于 r/learnprogramming 这样的论坛,查看论坛用户通常推荐哪些网站。