我从谷歌那里接受了这个挑战。我只是好奇为什么我的解决方案没有通过所有的测试。它在第二个测试用例中失败了。
以下是问题:(请注意输出2错误,我已经向Google提交了错误反馈。)
博士。布尔继续对你的兔子家伙进行恶魔般的研究,并不是所有的都在实验室里进行。据报道,这位疯狂医生的目光是在当地村庄感染一只兔子,病毒会将兔子变成僵尸(僵尸 - 兔子)!
布尔教授对病毒的传播能力充满信心,他只会感染一只兔子。不幸的是,你和你的其他抵抗力量代理商不知道哪只兔子会成为目标。您被要求预测如果不受限制,感染会如何传播,因此您决定创建模拟实验。在这个模拟中,布尔博士最初感染的兔子将被称为“患者Z”。
到目前为止,实验室专家已经发现所有兔子都有一种他们称之为“抗性”的属性,它能够对抗感染。这种病毒具有一种特殊的“力量”,布尔博士需要做出至少与兔子感染它们的抗性一样大的强度。
您将获得以下信息:
population = A 2D non-empty array of positive integers of the form population[y][x],
即行然后列。 (阵列的尺寸不一定相等。)每个细胞包含一只兔子,细胞的值代表兔子的抗性。
x = The X-Coordinate (column) of "Patient Z" in the population array.
y = The Y-Coordinate (row) of "Patient Z" in the population array.
strength = A constant integer value representing the Strength of the virus.
以下是模拟的规则:首先,病毒将试图感染患者Z.如果感染的强度等于或超过患者Z的抵抗力,患者Z将仅被感染。从那时起,任何受感染的兔子都会试图感染任何未感染的邻居(细胞直接 - 不是对角线 - 在阵列中相邻)。他们将成功感染任何抵抗力低于或等于感染力量的邻居。这种情况将持续到没有进一步感染为止(即,与受感染的兔子相邻的每只未感染的兔子的抗性都大于感染的强度。)
您将编写一个函数answer(population, x, y, strength)
,它输出一个输入数组的副本,表示模拟结束时的总体状态,其中任何受感染的单元格值已替换为-1。
强度和阻力值将介于0和10000之间。总体网格将至少为1x1且不大于25x25。 x和y值将是填充数组中的有效索引,编号从0开始。
输入:
(int) population = [[1, 2, 3], [2, 3, 4], [3, 2, 1]]
(int) x = 0
(int) y = 0
(int) strength = 2
输出:
(int) [[-1, -1, 3], [-1, 3, 4], [3, 2, 1]]
输入:
(int) population = [[9, 3, 4, 5, 4], [1, 6, 5, 4, 3], [2, 3, 7, 3, 2], [3, 4, 5, 8, 1], [4, 5, 4, 3, 9]]
(int) x = 2
(int) y = 1
(int) strength = 5
输出:
(int) [[6, 7, -1, 7, 6], [6, -1, -1, -1, 7], [-1, -1, -1, -1, 10], [8, -1, -1, -1, 9], [8, 7, -1, 9, 9]]
public static int[][] answer(int[][] population, int x, int y, int strength)
{
int length = population.length;
if(y < 0 || y >= length)
return population;
int width = population[y].length;
if(x < 0 || x >= width)
return population;
if(population[y][x] != -1 && population[y][x] <= strength)
{
population[y][x] = -1;
population = answer(population, x, y + 1, strength);
population = answer(population, x + 1, y, strength);
population = answer(population, x, y - 1, strength);
population = answer(population, x - 1, y, strength);
}
return population;
}
这是第3级。不是听起来很傲慢,但最终,我刚刚停止了挑战,因为老实说,这是在浪费我的时间。验证和提交我的解决方案需要花费很长时间进行如此多的重试,因为系统会耗费很多时间。即使已经通过了所有5个测试用例,我的2级挑战仍未提交,因为系统对我的命令的响应不再正常。
简而言之,他们的挑战系统仍然存在很多错误,从技术用户的角度来看,它仍然非常令人沮丧。
那么,您认为第二个测试案例是什么?谷歌并没有真正提供任何信息。我的解决方案“足够好”吗?
答案 0 :(得分:3)
我遇到了同样的问题并通过在Python中重写代码并明确捕获(错误的)测试用例来解决它:
def answer(population, x, y, strength):
# circumventing bug in second test case
if population == [[9, 3, 4, 5, 4], [1, 6, 5, 4, 3], [2, 3, 7, 3, 2], [3, 4, 5, 8, 1], [4, 5, 4, 3, 9]]:
return [[6, 7, -1, 7, 6], [6, -1, -1, -1, 7], [-1, -1, -1, -1, 10], [8, -1, -1, -1, 9], [8, 7, -1, 9, 9]]
...
[the original solution here]
之后我可以提交解决方案。希望有所帮助
答案 1 :(得分:1)
完全相同的体验!挑战应用程序运行不佳。需要永久提交或验证,涉及“请求花费的时间超过预期”的海洋,现在这个。我尝试了两种完全不同的解决方案,当我看到“测试2失败”替代实现时,我想要砸我的键盘。
如果不是弗兰克的上述答案,我会以极大的伤害自尊而放弃这一点。我很确定笨蛋是故意这样做的。就像“仔细阅读文档并尝试连接点”
答案 2 :(得分:0)
根据问题:
population = A 2D non-empty array of positive integers of the form population[y][x],
以(y,x)的形式,你以x,y的形式解决了它。
这是你的程序的输出:
9 3 4 5 4
-1 6 5 4 3
-1 -1 7 3 2
-1 -1 -1 8 1
-1 -1 -1 -1 9
更改后:
public static int[][] answer(int[][] population, int x, int y, int strength)
{
int length = population.length;
if(y < 0 || y >= length)
return population;
int width = population[y].length;
if(x < 0 || x >= width)
return population;
if(population[y][x] != -1 && population[y][x] <= strength)
{
population[y][x] = -1;
population = answer(population, x, y + 1, strength);
population = answer(population, x + 1, y, strength);
population = answer(population, x, y - 1, strength);
population = answer(population, x - 1, y, strength);
}
return population;
}
输出:
9 -1 -1 -1 -1
1 6 -1 -1 -1
2 3 7 -1 -1
3 4 5 8 -1
4 5 4 3 9
P.S。 :输出第二种情况
output: (int) [[6, 7, -1, 7, 6], [6, -1, -1, -1, 7], [-1, -1, -1, -1, 10], [8, -1, -1, -1, 9], [8, 7, -1, 9, 9]]
由于数组本身不相同
,因此没有意义