예제 #1
0
        public static void load(List <string> lines)
        {
            int total = 0;

            try
            {
                foreach (string str in lines)
                {
                    string[] strs  = str.Split(' ');
                    long     key   = long.Parse(strs[0]);
                    int      jiang = int.Parse(strs[1]);
                    double   p     = double.Parse(strs[2]);

                    List <AITableInfo> aiTableInfos;
                    if (table.ContainsKey(key))
                    {
                        aiTableInfos = table[key];
                    }
                    else
                    {
                        aiTableInfos = new List <AITableInfo>();
                        table[key]   = aiTableInfos;
                    }

                    AITableInfo aiTableInfo = new AITableInfo();
                    aiTableInfo.jiang = jiang != 0;
                    aiTableInfo.p     = p;
                    aiTableInfos.Add(aiTableInfo);
                    total++;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
예제 #2
0
        public static List <AITableInfo> getAITable(long card, Dictionary <int, HashSet <long> > tmpcards, AIProperty property, int[] remainCards)
        {
            int    N     = property.N;
            double baseP = property.baseP;

            int[] num = new int[N];
            long  tmp = card;

            for (int i = 0; i < N; i++)
            {
                num[N - 1 - i] = (int)(tmp % 10);
                tmp            = tmp / 10;
            }

            int total = 0;

            for (int i = 0; i < N; i++)
            {
                total += num[i];
            }

            Dictionary <int, AITableInfo> aiTableInfos = new Dictionary <int, AITableInfo>();

            AITableInfo aiTableInfo = new AITableInfo();

            aiTableInfo.p     = 0.0d;
            aiTableInfo.jiang = true;
            int key = aiTableInfo.jiang ? 1 : 0;

            aiTableInfos[key] = aiTableInfo;
            aiTableInfo       = new AITableInfo();
            aiTableInfo.p     = 0.0d;
            aiTableInfo.jiang = false;
            key = aiTableInfo.jiang ? 1 : 0;
            aiTableInfos[key] = aiTableInfo;

            for (int inputNum = 0; inputNum <= LEVEL; inputNum++)
            {
                HashSet <long> tmpcard = tmpcards[inputNum];

                HashSet <AIInfo> aiInfos = new HashSet <AIInfo>();

                int valid = 0;

                foreach (long tmpc in tmpcard)
                {
                    int[] tmpcnum = new int[N];
                    long  tt      = tmpc;
                    for (int i = 0; i < N; i++)
                    {
                        tmpcnum[N - 1 - i] = (int)(tt % 10);
                        tt = tt / 10;
                    }

                    bool max = false;
                    for (int i = 0; i < N; i++)
                    {
                        num[i] += tmpcnum[i];
                        if (num[i] > 4)
                        {
                            max = true;
                        }
                        if (tmpcnum[i] > remainCards[property.tileType + i])
                        {
                            max = true;
                        }
                    }

                    if (!max)
                    {
                        checkAI(aiInfos, num, -1, inputNum, property);
                        valid++;
                    }

                    for (int i = 0; i < N; i++)
                    {
                        num[i] -= tmpcnum[i];
                    }
                }

                foreach (AIInfo aiInfo in aiInfos)
                {
                    key = aiInfo.jiang != -1 ? 1 : 0;
                    if (aiInfo.inputNum == 0)
                    {
                        aiTableInfos[key].p = 1.0d;
                    }
                    //if (aiTableInfos[key].p != 1)
                    if (aiTableInfos[key].p != 1)
                    {
                        key = aiInfo.jiang != -1 ? 1 : 0;
                        aiTableInfos[key].p += baseP * 1.0d / valid;
                    }
                }
            }

            List <AITableInfo> tmpAI = new List <AITableInfo>();

            foreach (var o in aiTableInfos.Values)
            {
                tmpAI.Add(o);
            }
            return(tmpAI);
        }