Python错误-Google Foobar

科迪·普埃布拉

对于以前曾经完成过Google Foobar挑战的任何人,您是否遇到过这样的错误?

Verifying solution...
{
"bytes" : "CAAaIgogQ291bGQgbm90IGZpbmQgJ2Fuc3dlcicgZnVuY3Rpb24"
}

我已经在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"
}

我不确定还能去哪里。我非常激动,以至于我想出了自己的解决方案来应对挑战,但现在我很担心,这无关紧要。有什么建议么?

更新-CST 2018年6月29日下午6:00
昨晚我的截止日期过去了,我无法及时提交我的代码。我确保recruitme在时间用完之前使用该命令,以防万一我被引导了。但是,我仍然可以查看我的当前状态,这使我可以请求另一个5级挑战。因此,我将定期检查以查看测试用例是否再次开始出现,并且一定会在测试用例更新时进行更新。我强烈建议任何较低级别的人等到我确认此问题已解决,然后再尝试提出其他挑战。

更新-2018年6月30日,
美国中部标准时间上午5:00根据@RobertAnsel发现的模式,我已经完成了挑战。我通过对answer函数进行硬编码以输出说明中给出的测试用例的解决方案来确认了这种模式产生的误差与预测输出完全匹配。我还在Google的支持论坛(在此处链接上找到了一个有趣的话题,一群Foobar挑战者也遇到了类似的情况。似乎他们的错误已在大约三天后由Google修复,但不幸的是,看起来很多超时的人没有再获得机会。但是,这可能会在第二天或第二天内解决。在成功之前,我将继续尝试验证并提交解决方案。

更新-2018年7月4日,中部标准时间上午12:00似乎已经或多或少地解决了此问题。有关更多详细信息,请参考所选答案。感谢@RobertAnsel的所有帮助!其他一些信息:我能够核实当前的挑战,但是提交后,我被告知我解决问题的时间已经到期。再次登录后,我可以提出新的挑战。我注意到我也能够recruitme再次使用该命令。我不确定这是否意味着他们没有收到第一个请求,或者是否允许您多次使用该命令。无论如何,我对继续使用Foobar感到放心。祝您好运!

罗伯特·安塞尔

这可能不是您要查找的答案,但是第一个“字节”字符串是以下错误消息的base64编码:

“找不到'答案'功能”。

我本人已经完成了Foobar挑战,只有在您尝试验证缺少定义的“答案”功能的文件时,才应该发生这种情况,而您显然没有。您确定他们提供的规范具有3个参数,而不是具有3个项目的数组吗?

第二条消息(CAEQARABEAEQARABEAEQARABEAEQAQ)有效为base64,但未映射为ASCII或UTF-8。在仔细分析了其他发布的其他一些字符串之后,我得出结论,这是测试输出的base64编码版本。它不是很可读,但是我相信它是11个2字节的块,第一个无用,但是接下来的10个是每个相应测试用例的测试结果。对于此消息,它将转换为二进制:

0000100000000001 <- unknown pre-pended info
0001000000000001 <- passing test 1
0001000000000001 <- passing test 2
0001000000000001 <- passing test 3
0001000000000001 <- passing test 4
0001000000000001 <- passing test 5
0001000000000001 <- passing test 6
0001000000000001 <- passing test 7
0001000000000001 <- passing test 8
0001000000000001 <- passing test 9
0001000000000001 <- passing test 10

每行末尾的“ 1”表示所有10个测试都通过了。

失败的测试用例由以下字符串表示:

0001000000000000 <- failing test case

这应该可以帮助您(和其他人)继续测试以达到完全通过的测试(您可以使用如下工具来完成自己的分析:https : //cryptii.com/base64-to-binary),但是不幸的是,这对您没有帮助。继续进行您的最终提交,直到Google最终解决问题为止。

更新:太平洋标准时间(PDT)7月2日晚上8点,与几位Google招聘人员联系后,他们能够确认问题已被发现,并且可以立即解决。如果对代码进行了更改后重新保存了代码(空格应该可以),那么您应该能够正确测试并提交。另外,您现在仍然可以请求新的挑战。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章