2017-07-02 60 views
-2

我做了谷歌Foobar的挑战power_hungry(见下文)。谷歌Foobar的挑战失败2出5测试用例

我想不通,为什么下面的代码失败的测试案例#3,#5。任何人都可以看到我失踪的东西吗?我没有考虑边缘案例吗?

这里是我的Python代码:

from functools import reduce 
import operator 

def get_pair_prod(xs): 
    if len(xs) < 2: 
     return 1 
    xs.sort() 
    return xs[0] * xs[1] 

def answer(xs): 
    if len(xs) == 0: 
     return "0" 
    positive = [x for x in xs if x > 0] 
    negative = [x for x in xs if x < 0] 
    if len(negative) == 1 and len(positive) == 0: 
     return str(negative[0]) 
    elif len(negative) == 0 and len(positive) == 0: 
     return str("0") 
    positive.append(get_pair_prod(negative)) 
    return str(reduce(operator.mul, positive, 1)) 

我们的难题是:

耗电

指挥官拉姆达的空间站是巨大的。巨大的太空站需要很大的功率。拥有世界末日装置的巨大空间电台需要更多电力。为了满足车站的电力需求,司令员Lambda在车站外表面安装了太阳能电池板。但台站位于类星体量子通量场的中间,这对太阳能电池板造成严重破坏。你和你的追随者的队伍已经被分配来修复太阳能电池板,但你不能把他们全部下来,而无需关闭空间站一次(和所有那些讨厌的生命支持系统!)。

您需要弄清楚在任何给定阵列中哪些面板可以脱机修复,同时仍然保持每个阵列的最大输出功率,并且要做到这一点,首先需要弄清楚每个阵列的最大输出实际上是。编写一个函数答案(xs),其中包含表示数组中每个面板的功率输出级别的整数列表,并返回这些数字的某些非空子集的最大乘积。因此,例如,如果阵列包含与[2,-3,1,0,-5],则最大的产品会被发现功率输出电平的面板通过取子集:XS [0] = 2,XS [1 ] = -3,xs [4] = -5,给出乘积2 *( - 3)*( - 5)= 30。所以答案([2,-3,1,0,-5])将是“ 30" 。

太阳能电池板的每个阵列都包含至少1块但不超过50块的面板,每块面板的功率输出级别绝对值不会超过1000(某些面板故障严重,以至于会耗尽能量,但你知道面板波动稳定器的一个技巧,它可以让你将两个负输出面板组合成多个功率值的正输出。最终产品可能非常大,因此请以数字的字符串表示形式给出答案。

语言

为了提供一个Python溶液,编辑solution.py 为了提供Java解决方案,编辑solution.java

测试用例

输入:(INT表)XS = [2 ,0,2,2,0]输出:(字符串)“8”

输入:(int list)xs = [-2,-3,4,-5]输出:(字符串)“60”

使用verify [file]来测试你的解决方案,看看它是如何工作的。完成编码后,使用提交[文件]提交答案。如果您的解决方案通过测试用例,它将从您的主文件夹中删除。

+0

欢迎来到SO。请看看这个,以便其他人可以更有效地帮助你:https://stackoverflow.com/help/mcve – petezurich

+1

@petezurich:谢谢。据我所知,我的代码是最小的。然而,至于完整性,问题的本质是我不知道两个失败测试用例的输入**,所以我不能提供关于错误的更多信息。就可以验证的错误而言,如果我能够弄清楚错误是什么,以便我可以在这里验证它们,我不会要求帮助来确定我的逻辑中存在哪些缺陷。我的代码通过了我所有的测试用例,所以我不能测试一些重要的情况。 –

+1

我发现我的错误,这是我首先误解了挑战。出于某种原因,我错误地认为,只有绝对价值最高的两个负面因素才被纳入产品。 –

回答

0

总之,有相当多的问题与您的代码,你没有正确地评价了两种案件涉及到负数:其中负名单长度是奇数,大于1,其中负名单长度是偶数但大于长度2.一旦你解决了你的设置。

def answer(rg): 
    positives = [ x for x in rg if x > 0 ] 
    negatives = [ x for x in rg if x < 0 ] 
    if len(rg) == 1 or not positives and not negatives: 
     return rg[0] 
    negatives.sort() 
    if len(negatives) % 2 == 1: 
     negatives = negatives[:-1] 
    product = Decimal(1) 
    for x in chain(positives, negatives) 
     product *= Decimal(x) 
    return product 
+0

虽然我很欣赏你试图帮助我,但你没有正确解释我的代码。它已经处理你提到的两种情况。你读过我的函数get_pair_prod的定义吗?它输入数字列表,如果列表少于2个条目,则返回1,对列表进行排序,然后返回两个最左边条目的乘积。 –

+0

我说我的代码“处理”你提到的两种情况都是正确的,但是错误地认为它正确地处理了它们。所以我很抱歉指责你的误解。请原谅新手的错误,并知道我真的很感谢你的帮助! –