Add tags

Add tags to the following comment
一切コメント無しでも充分な可読性を目指しました。
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
//http://ja.doukaku.org/121/ 投稿用
using System;
using System.Collections.Generic;

class Program {
    const string Ranks = "A23456789TJQKA";
    const string Suits = "SDHC";
    static void Main(string[] args) {
        if(IsRoyalStraightFlush(args[0])) Console.WriteLine("Royal straight flush");
        else if(IsStraightFlush(args[0])) Console.WriteLine("Straight flush");
        else if(Is4cards(args[0])) Console.WriteLine("Four of a kind");
        else if(IsFullHouse(args[0])) Console.WriteLine("Full house");
        else if(IsFlush(args[0])) Console.WriteLine("Flush");
        else if(IsStraight(args[0])) Console.WriteLine("Straight");
        else if(Is3Cards(args[0])) Console.WriteLine("Three of a kind");
        else if(Is2Pair(args[0])) Console.WriteLine("Two pair");
        else if(Is1Pair(args[0])) Console.WriteLine("One pair");
        else Console.WriteLine("No pair");
        Console.ReadLine();
    }

    static bool IsRoyalStraightFlush(string cards){
        if(IsFlush(cards) && IsStraight(cards)){
            for(int i = 2; i <= 9; i++) {//2~9までの数字が含まれていたらNG
                if(cards.IndexOf(i.ToString()) != -1) return false;
            }
            return true;
        }
        return false;
    }

    static bool IsStraightFlush(string cards) {
        return IsFlush(cards) && IsStraight(cards);
    }

    static bool Is4cards(string cards) {
        return IsAnyCards(cards, 4);
    }

    static bool IsFullHouse(string cards) {
        return Is3Cards(cards) && Is1Pair(cards);
    }

    static bool IsFlush(string cards) {
        foreach(char suit in Suits.ToCharArray()) {//あるスーツの文字を切り取って
            if(cards.Length - cards.Replace(suit.ToString(),"").Length == 5) return true;
            //5文字減ったら5枚全て同じスーツ
        }
        return false;
    }

    static bool IsStraight(string cards) {
        List<string> rankListInCards = new List<string>();//カードのランクのみ
        //ランク切り出し
        for(int i = 1; i <= 9; i = i + 2) {
            rankListInCards.Add(cards[i].ToString());
        }
        //並び替え
        rankListInCards.Sort(cardRankSort);
        //ソート済みカードリスト作成
        string sortedCards = "";
        foreach(string card in rankListInCards) {
            sortedCards += card;
        }
        //判定
        if(Ranks.Contains(sortedCards)) return true;
        if(sortedCards[0] == 'A') {//先頭がAなら
            //末尾に移してもう一度判定
            if(Ranks.Contains(sortedCards.Remove(0, 1).PadRight(5, 'A'))) return true;
        }
        return false;
    }

    static bool Is3Cards(string cards) {
        return IsAnyCards(cards, 3);
    }

    static bool Is2Pair(string cards) {
        foreach(char Rank in Ranks.ToCharArray()) {
            if(cards.Length - cards.Replace(Rank.ToString(), "").Length == 2) {//One pairだったら
                return Is1Pair(cards.Replace(Rank.ToString(),""));//One pairが2回でTwo pair
            }
        }
        return false;
    }

    static bool Is1Pair(string cards) {
        return IsAnyCards(cards, 2);
    }

    //あるカードがany枚含まれているかどうかを判定
    static bool IsAnyCards(string cards, int any) {
        foreach(char Rank in Ranks.ToCharArray()) {
            if(cards.Length - cards.Replace(Rank.ToString(), "").Length == any) return true;
        }
        return false;
    }

    static int cardRankSort(string x, string y) {
        return Ranks.IndexOf(x) - Ranks.IndexOf(y); 
    }
}

Add tags

The input will be splited to tags with space.

Index

Feed

Other

Link

Pathtraq

loading...