Ejemplo n.º 1
0
        public void AddTime(char[] arr)
        {
            if (Time > 23)
            {
                return;
            }

            char m1 = '\0', m2 = '\0';

            for (var i = 0; i < arr.Length; i++)
            {
                if (arr[i] == First || arr[i] == Second)
                {
                    continue;
                }

                if (m1 == '\0')
                {
                    m1 = arr[i];
                }
                else
                {
                    m2 = arr[i];
                }
            }

            Left  = new TimeNode(m1, m2, _helper);
            Right = new TimeNode(m2, m1, _helper);
        }
Ejemplo n.º 2
0
        private static int Mx(int A, int B, int C, int D, HashSet <string> hash)
        {
            if (A == B && B == C && C == D && A > 2)
            {
                return(0);
            }

            // 19 - is a maximum sum of all variables from which a valid time could be generated (e.g. 2,3,5,9)
            if (A + B + C + D > 19)
            {
                return(0);
            }

            char[] arr = new char[] { 'A', 'B', 'C', 'D' };
            int    i = 0, j = 0, n = arr.Length;

            var helper = new Helper(A, B, C, D);

            while (i < n)
            {
                if (arr[i] != arr[j])
                {
                    foreach (var pair in new Dictionary <char, char> {
                        { arr[i], arr[j] }, { arr[j], arr[i] }
                    })
                    {
                        var tn = new TimeNode(pair.Key, pair.Value, helper);
                        if (tn.Time < 24)
                        {
                            tn.AddTime(arr);
                        }

                        var clocks = tn.GenerateClocks();

                        if (clocks.Length > 0)
                        {
                            AddToHash(clocks, hash);
                        }
                    }
                }

                if (i + 1 == n)
                {
                    break;
                }

                if (j + 1 == n)
                {
                    j = 0;
                    i++;
                }

                j++;
            }

            return(hash.Count);
        }