问题描述
我正在练习Hackerrank JavaScript问题。我找到了一个名为Compare the triplets
的测试。这是问题所在:
a = [1,2,3]
b = [3,1]
For elements *0*,Bob is awarded a point because a[0] .
For the equal elements a[1] and b[1],no points are earned.
Finally,for elements 2,a[2] > b[2] so Alice receives a point.
The return array is [1,1] with Alice's score first and Bob's second.
我找到了这样的解决方案:
我想将ForLoop转换为ForEach
方法。但是我找不到做到这一点的方法。
解决方法
let a = [17,28,30];
let b = [99,16,8];
function compareTriplets(a,b) {
let scoreboard = [0,0];
a.forEach((element,i) => {
if (element > b[i]) scoreboard[0]++
else if (element < b[i]) scoreboard[1]++
});
return scoreboard
}
compareTriplets(a,b)
,
这不是您要的,但让我向您展示一些东西:
public static void main(String[] args) {
String input = "stuff\n blah\n--payload {'meh': 'kar\n'}";
// Wanted output: Output: "stuff blah --payload {'meh': 'kar\n'}"
String regexPayload = "--payload\\s[^\\}]+\\}";
Matcher matcherExtractPayload = Pattern.compile(regexPayload,Pattern.DOTALL).matcher(input);
Matcher matcherReplaceWithTag = Pattern.compile(regexPayload).matcher(input);
String tag = "#PAYLOAD#";
String taggedPayload = "EMPTY";
String payLoad = "NO_PAYLOAD_FOUND";
if(matcherExtractPayload.find()) {
payLoad = matcherExtractPayload.group();
taggedPayload = matcherReplaceWithTag.replaceFirst(tag);
}
String removedNewline = Pattern.compile("\n").matcher(taggedPayload).replaceAll("");
String restoredPayload = removedNewline.replaceFirst(tag," " + payLoad);
System.out.println(restoredPayload); // Output: "stuff blah --payload {'meh': 'kar\n'}"
}
或更小的噪音:
function compareTriplets(a,b) {
return [
(a[0] > b[0]) + (a[1] > b[1]) + (a[2] > b[2]),(a[0] < b[0]) + (a[1] < b[1]) + (a[2] < b[2])
]
}
更简单,更快,更短。
我的意思是,它的字面意思是“比较三胞胎”。没有任何动态长度或任何东西。而且循环很短。您可以轻松unroll the loop。
function compareTriplets([a,b,c],[d,e,f]) {
return [
(a > d) + (b > e) + (c > f),(a < d) + (b < e) + (c < f)
]
}