2017-07-02 11 views
-2

私はGoogle Foobarチャレンジpower_hungry(下記参照)を行っています。Google Foobarチャレンジで失敗する2件中2件のテストケース

次のコードが#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)) 

は挑戦です:

パワーハングリー

司令ラムダの宇宙ステーションは巨大です。そして巨大な宇宙ステーションはたくさんの力を持っています。最悪の日曜日のデバイスを搭載した巨大な宇宙ステーションは、さらに大きなパワーを奪う。駅の電力需要を満たすために、ラムダ司令官は駅の外面に太陽電池パネルを設置しました。しかし、ステーションは、太陽電池パネルに大混乱を引き起こすクェーサー量子束場の真ん中に座っている。あなたとあなたの仲間のチームはソーラーパネルを修理するように任命されていますが、宇宙ステーションをシャットダウンすることなくそれらを一度にダウンすることはできません。

アレイごとに最大出力電力を維持しながら、オフラインで修復することができる特定のアレイのパネルセットを把握しておく必要があります。各アレイの最大出力は実際には同じです。配列内の各パネルの出力レベルを表す整数のリストを取得し、それらの数字の空でないサブセットの最大積を返す関数解答(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以下の電源出力レベルが設定されています(一部のパネルは誤動作していますしかし、2つの負の出力パネルを組み合わせて、その電力値の倍数の正の出力を生成することができる、パネルの波安定剤を使ったトリックを知っています。最終的な製品は非常に大きくなる可能性があるので、答えを数値の文字列表現として与えてください。

言語

solution.java

テストケースを編集

入力、Javaソリューションを提供するためにsolution.py を編集し、Pythonのソリューションを提供する:2 - [(INTリスト)XS = 0、2、2、0]出力:(文字列) "8"

入力:(intリスト)xs = [-2、-3、4、-5]出力:(文字列) "60"

verify [file]を使用してソリューションをテストし、その結果を確認します。コードの編集が終わったら、submit [file]を使用して答えを提出してください。ソリューションがテストケースを通過すると、ホームフォルダから削除されます。

+0

ウェルコム他の人があなたをより効果的に助けることができるようにこれを見てください:https://stackoverflow.com/help/mcve – petezurich

+1

@petezurich:ありがとうございます。私のコードは、私が決定できる限り、最小限です。しかし、完全には、この問題の本質は、私が** 2つの失敗したテストケースの入力**を知らないということです。そのため、エラーに関する詳細は提供できません。エラーを検証できるという意味で、最初にエラーが何であったかを把握してここで確認することができれば、ロジックの瑕疵がどこにあるかを判断する際に助けを求めることはありません。私のコードはすべてのテストケースを通過するので、重要なケースをテストする必要はありません。 –

+1

私は自分のエラーを見つけました。私は最初に挑戦を誤解していました。何らかの理由で、絶対値が最も大きい2つのネガのみが製品に含まれると誤って考えました。 –

答えて

0

要するに、負の数に関係する2つのケースを適切に評価していないという点でコードにかなり間違っています。負のリストの長さが奇数で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を返し、リストをソートして、左端の2つのエントリの積を返します。 –

+0

私は自分のコードがあなたが言及している両方のケースを "扱う"が正しく扱われているとは思っていませんでした。だから私は誤解をあなたに告発して謝罪します。初心者のエラーを許して、本当にあなたの助けに感謝していることを知ってください! –

関連する問題