C♯の勉強

C♯4.0 で TopCoder の過去問を解きます。

TopCoder SRM619: SplitStoneGame

全て要素が1の場合は、LOSE 。
素数が2つ以下の場合も、LOSE 。
3つ以上要素がある場合は、次のステップで2箇所に加算するため、2より大きい要素が少なくとも2つできる。よって要素が全て1になることはなく、要素数が2以下になるまで勝負がつかないため、要素数の偶奇だけで判定できる。

1ステップごとに要素数が1ずつ減ることから、奇数の場合はWINで、偶数の場合はLOSEになる。

public class SplitStoneGame {
    public string winOrLose(int[] number) {
        if (number.All(x => x == 1)) return "LOSE";
        if (number.Length <= 2) return "LOSE";
        return number.Length % 2 == 1 ? "WIN" : "LOSE";
    }
}