-3

レースでは、次の戦略を使用して賭けます。賭けに負けると、次のラウンドの賭けの価値が2倍になります。あなたが勝つたびに、次のラウンドの賭けは1ドルになります。あなたは1ドルを賭けることからラウンドを開始します。

たとえば、20ドルから始めて、最初のラウンドで賭けに勝ち、次の2ラウンドで賭けに負け、次に4番目のラウンドで賭けに勝った場合、最終的に20+1-1-2になります。 +4=22ドル。

getFinalAmount次の2つの引数を取る関数を完了する必要があります。

  1. 最初の引数は整数initialAmountです。これは、賭けを開始したときに私たちが持っている最初の金額です。
  2. 2番目の引数は文字列betResultsです。結果のi番目の文字は、「W」(勝ち)または「L」(負け)のいずれかになり、i番目のラウンドの結果を示します。関数は、すべてのラウンドがプレイされた後に持つ金額を返す必要があります。

ある時点で、賭けの価値をカバーするのに十分なお金がアカウントにない場合は、その時点で持っている金額を停止して返す必要があります。

私はこのコードを試しましたが失敗しました:

var amountInHand = 15;
var possiblities = "LLLWLLLL";

static int Calculate(int amountInHand, string possibles)
{
    var lastBet = 1;

    foreach (char c in possiblities)
    {
        if (c == 'W')
        {
            amountInHand = amountInHand + 1;
        }
        else if (c == 'L')
        {

            var loss = 0;
            if (lastBet == 1)
            {
                loss = lastBet;
            }
            else if (lastBet > 1)
            {
                loss = lastBet * 2;
            }
            amountInHand = amountInHand - loss;
            lastBet++;
        }
    }
    return amountInHand;
}

期待される出力

1st round - Loss: 15-1 = 14
2nd round - Loss: 14-2 = 12 (Bet doubles)
3rd round - Loss: 12-4 = 8
4th round - Win: 8 + 8 = 16
5th round - Loss:16-1 = 15 (Since the previous bet was a win, this bet has a value of 1 dollar)
6th round - Loss: 15-2 = 13
7th round - Loss: 13-4 = 9
8th round - Loss: 9-8 = 1
4

2 に答える 2

1

これは RB の正解ですが、なぜ彼が削除したのかはわかりません。

      var amountInHand = 15;

        var possiblities = "LLLWLLLL";
        var lastBet = 1;



        foreach (char c in possiblities)
        {
            if (c == 'W')
            {
                amountInHand = amountInHand + lastBet;
                lastBet = 1;
            }
            else if (c == 'L')
            {
                amountInHand = amountInHand - lastBet;
                lastBet = lastBet * 2;
            }
            //handle running out of money
            if (lastBet > amountInHand) return amountInHand;
        }
于 2013-03-18T10:48:14.717 に答える
0

この質問についてブログ投稿コードゴルフを行いました。私の答えはこれであり、実際に機能します...:

return possibilities.Aggregate(new{b=1,c=amountInHand,x=1},(l,o)=>l.x<0?l:o=='W'?new{b=1,c=l.c+l.b,x=1}:new{b=l.b*2,c=l.c-l.b,x=(l.c-l.b)-(l.b*2)}).c;

非ゴルフ:

private static int getFinalAmount(string q, int w)
{
    return possibilities.Aggregate(new { b = 1, c = amountInHand, x = false }, //initial seed gets the flag for cancel set to false
                    (l, o) =>
        l.x     //if our cancel flag is set, 
            ? l      //just return the same result
            : o == 'W'   //if the outcome was a win
                        //do the math and now also set a cancel flag to false (if we won, we can make our next bet for sure)
                ? new { b = 1, c = l.c + l.b, x = false }
                        //do our math again, but this time the cancel flag is tricky.  
                : new { b = l.b * 2, c = l.c - l.b,
                                //we cancel if our new amount will be less than our new bet.  
                                //Note, we can't use the new values that we just set in the same section - 
                                //they're not available yet so we have duplicate math here.
                            x = (l.c - l.b) < (l.b * 2) })
                    .c;   //all the function returns is the current amount
}
于 2014-04-24T13:59:44.327 に答える