我从谷歌那里得到了挑战。我很好奇为什么我的解决方案没有通过所有测试。在第二个测试用例中失败。
这是问题所在:(请注意,输出2是错误的,我已经为此向Google提交了错误反馈。)
Zombit感染
布尔博士继续对您的同伴进行恶性研究,但并非所有的研究都在实验室进行。报道说,这位疯狂的医生将目光投向了当地村庄的一只兔子,这种病毒会把兔子变成僵尸(僵尸兔子)!
布尔教授对病毒的传播能力充满信心,他只会感染一只兔子。不幸的是,您和您的其他抗药性人员都不知道目标是哪只兔子。您被要求预测如果没有感染,感染将如何传播,因此您决定创建一个模拟实验。在此模拟中,布尔博士最初感染的兔子将称为“患者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级挑战也没有提交,因为系统不再能够正确响应我的命令。
简而言之,他们的挑战系统仍然存在很多错误,从技术用户的角度来看,它仍然令人沮丧。
那么,您认为第二个测试用例是什么? Google并未真正提供任何信息。我的解决方案是否“足够好”?
最佳答案
我遇到了同样的问题,并通过用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]
之后,我可以提交解决方案。希望有帮助