如果你曾经尝试过 Google 的 Foobar 挑战,你是否遇到过这样的错误?
Verifying solution...
{
"bytes" : "CAAaIgogQ291bGQgbm90IGZpbmQgJ2Fuc3dlcicgZnVuY3Rpb24"
}
我已在Visual Studio中测试了我的解决方案,它正常工作并提供准确的输出。 我只剩下36小时提交我的解决方案,这是最后的挑战,所以我真的希望能得到完成的信用。 这是我试图验证的代码:
我已在 Visual Studio 中测试了我的解决方案,它运行良好且输出准确。 我只有 36 小时来提交我的解决方案,并且这是最终挑战,因此我真的很想获得完成它的学分。 这是我正在尝试验证的代码:
from fractions import *
from math import factorial as fac
def cycle_index(n):
return [(coeff(term), term) for term in foo(n, n)]
def foo(n, lim):
soln_set = []
if n > 0:
for x in range(lim, 0, -1):
if x == 1:
soln_set.append([(1, n)])
else:
for y in range(int(n / x), 0, -1):
recurse = foo(n - x * y, x - 1)
if len(recurse) == 0:
soln_set.append([(x, y)])
for soln in recurse:
soln_set.append([(x, y)] + soln)
return soln_set
def coeff(term):
val = 1
for x, y in term:
val *= fac(y) * x ** y
return Fraction(1, val)
def cross(cycle_a, cycle_b):
term = []
for len_a, freq_a in cycle_a:
for len_b, freq_b in cycle_b:
lcm = len_a * len_b / gcd(len_a, len_b)
term.append((lcm, int(len_a * freq_a * len_b * freq_b / lcm)))
return term
def answer(w, h, s):
total = 0
cycidx_cols = cycle_index(w)
cycidx_rows = cycle_index(h)
for col_coeff, col_cycle in cycidx_cols:
for row_coeff, row_cycle in cycidx_rows:
coeff = col_coeff * row_coeff
cycle = cross(col_cycle, row_cycle)
value = 1
for _, power in cycle:
value *= s ** power
total += coeff * value
return total
上周我找到了别人的解决方案,并通过 Foobar 进行验证,但我想自己编写代码以获得更深入的理解。我已将结果进行了逐一比较,它们完全相同,因此我知道我的代码能够给出准确的结果。
出于好奇心,我刚刚又尝试验证了另一个人的解决方案,但现在我得到了一个稍微不同的输出错误,尽管上周它在我尝试时运行良好。
Verifying solution...
{
"bytes" : "CAEQARABEAEQARABEAEQARABEAEQAQ"
}
我不确定还能去哪儿。我曾经为自己解决这个挑战感到非常兴奋,但现在我开始惊慌失措,担心它不重要。有什么建议吗?
更新-2018年6月29日,晚上6:00 CST
昨晚对我来说已经过期了,我没能及时提交我的代码。我确保在时间用完之前使用了recruitme
命令,以防我被踢出。然而,我仍然能够查看我的当前状态,并让我请求另一个Level 5挑战。因此,我将定期检查是否重新出现测试用例,并在出现时更新此内容。强烈建议低水平的任何人等待我确认此问题已解决后再尝试请求另一个挑战。
更新-2018年6月30日,早上5:00 CST
根据@RobertAnsel发现的模式,我已经完成了挑战。我通过将answer
函数硬编码为输出指令中给出的测试用例的解决方案来确认此模式。由此产生的错误与预测的输出完全匹配。我还在Google的支持论坛上发现了一个有趣的线程(链接在此),其中发生了类似的事情,一些Foobar挑战者。看起来他们的错误在大约三天后被Google修复了,但不幸的是,许多超时的人没有再次获得机会。尽管如此,这个问题可能会在接下来的一两天内解决。我将继续尝试验证和提交我的解决方案,直到成功为止。
更新-2018年7月4日,午夜12:00 CST
这个问题似乎已经得到了更多或更少的解决。有关详细信息,请参阅所选答案。感谢@RobertAnsel提供的所有帮助!其他一些信息:我能够验证当前的挑战,但在提交后,告诉我我的问题时间已过期。重新登录后,我可以请求新的挑战。我注意到我也能再次使用recruitme
命令。我不确定这是否意味着他们没有收到第一个请求,或者您可以多次使用该命令。无论如何,我很欣慰我能够继续进行Foobar。祝你们好运!