初学者最难的 5 个编程挑战
最难的初学者挑战
挑战描述
分析
样品溶液
Coderbyte 提供约 100 个简单的代码挑战,非常适合正在学习编程并需要练习的初学者。我们分析了这些挑战的统计数据,找出用户最难获得满分的挑战。最终,我们从所有简单的挑战中筛选出 5 个最难的挑战,并将其列在“简单”部分——这里所说的“简单”是指初学者应该能在 15 到 25 分钟内完成的挑战。
最难的初学者挑战
-
问号:需要遍历字符串并检查是否满足某些条件。
-
元音方阵:需要在一个更大的矩阵中找到一个 2x2 的元音方阵。
-
天平平衡:需要遍历一个砝码数组,以确定天平是否可以完全平衡。
-
正确路径:需要在 NxN 矩阵中遍历部分完成的路径并完成该路径。
-
最近敌人 II:需要检查 NxM 矩阵中某些点之间的距离。
其中,用户最难获得满分且花费时间最长的挑战是问号题。
挑战描述
接收一个输入字符串参数,判断所有加起来等于 10 的数字对之间是否恰好存在 3 个问号。如果存在,则返回 true;否则返回 false。以下是一些测试用例示例:
"arrb6???4xxbl5???eee5" => true
"acc?7??sss?3rr1??????5" => true
"5??aaaaaaaaaaaaaaaaaaa?5?5" => false
"9???1???9???1???9" => true
"aa6?9" => false
在继续阅读之前,请试着思考一下你会如何解决这个难题。
分析
这个挑战需要多层逻辑才能正确解决,所以一开始很难找到解决方案。它需要遍历字符串,并记录所有和为 10 的数字对的位置。如果找到两个和为 10 的数字,则需要确定这两个数字之间是否存在三个特定的字符。
-
用 JavaScript 提交解决方案的用户中,有68%没有获得满分。
-
用 Ruby 提交解决方案的用户中,有35%没有获得满分。
-
平均而言,一个解决方案需要15-29行代码。
样品溶液
下面这个非常简洁优雅的解决方案是由 Coderbyte 上排名第 13 的用户Qlogin用 Python 编写的。
def QuestionsMarks(s):
qnum = 0
dig = 0
has_10 = False
for ch in s:
if ch.isdigit():
if int(ch) + dig == 10:
if qnum != 3:
return 'false'
has_10 = True
dig = int(ch)
qnum = 0
elif ch == '?':
qnum += 1
return 'true' if has_10 else 'false'
此外,Coderbyte 上的一位用户还用 Java 实现了一个巧妙的正则表达式解决方案来解决这个问题:
public static String QuestionsMarks(String str) {
str = str.replaceAll("[a-z]+","");
Pattern pattern = Pattern.compile("([0-9])([?])([?])([?])([0-9])");
Pattern pattern01 = Pattern.compile("([0-9])([?])([?])([0-9])");
Matcher matcher01 = pattern01.matcher(str);
Pattern pattern02 = Pattern.compile("([0-9])([?])([0-9])");
Matcher matcher02 = pattern02.matcher(str);
Matcher matcher = pattern.matcher(str);
if (matcher01.find() || matcher02.find()) {
return "false";
} else if (matcher.find()) {
return "true";
}
return "false";
}
欢迎在Coderbyte上亲自尝试这些挑战,并在下方评论区分享您对示例解决方案的看法!
本文最初发表于Medium。
文章来源:https://dev.to/coderbyte/the-5-hardest-code-challenges-for-beginners-5flc