예제 #1
0
        private void Fetch(uint quad, SimpleList <int> buffer, SudokuRegion region, SudokuState state, ICollection <IEvent> events)
        {
            var reduced = false;
            var mask    = ~quad;

            foreach (var index in region)
            {
                if (buffer.Contains(index))
                {
                    continue;
                }
                var result = state.And <ReduceNakedTriples>(index, mask);
                if (result is ValueFound)
                {
                    events.Add(result);
                }
                else if (result is ReducedOption)
                {
                    reduced = true;
                }
            }

            if (reduced)
            {
                events.Add(ReducedOptions.Ctor <ReduceNakedTriples>());
            }
        }
예제 #2
0
        private void Fetch(uint value, SimpleList <int> intersection, SudokuRegion intersected, SudokuState state, ICollection <IEvent> events)
        {
            IEvent result = NoReduction.Instance;
            var    mask   = ~value;

            foreach (var index in intersected)
            {
                // items in the shared section should be skipped.
                if (intersection.Contains(index))
                {
                    continue;
                }
                var test = state.And <ReducePointingPairs>(index, mask);

                if (test is ValueFound)
                {
                    events.Add(test);
                }
                else if (test is ReducedOption)
                {
                    result = test;
                }
            }

            if (result is ReducedOption)
            {
                events.Add(ReducedOptions.Ctor <ReduceNakedPairs>());
            }
        }
예제 #3
0
 internal override IEnumerable <Variable> EnumerateFreeVariables(SimpleList <Variable> bound, HashSet <Variable> free)
 {
     if (!bound.Contains(var1))
     {
         if (free.Add(var1))
         {
             yield return(var1);
         }
     }
     if (!bound.Contains(var2))
     {
         if (free.Add(var2))
         {
             yield return(var2);
         }
     }
 }
예제 #4
0
        internal override MSOFormula <T> SubstituteVariables1(Dictionary <string, Variable> subst, SimpleList <string> bound)
        {
            var v1 = (bound.Contains(var1.Name) ? var1 : (subst.ContainsKey(var1.Name) ? subst[var1.Name] : var1));
            var v2 = (bound.Contains(var2.Name) ? var2 : (subst.ContainsKey(var2.Name) ? subst[var2.Name] : var2));

            if (v1 == var1 && v2 == var2)
            {
                return(this);
            }
            else
            {
                if (v1.IsFirstOrder != var1.IsFirstOrder || v2.IsFirstOrder != var2.IsFirstOrder)
                {
                    throw new ArgumentException("invalid substitution");
                }
                return(new MSOMin <T>(v1, v2));
            }
        }
예제 #5
0
    static void Main()
    {
        SimpleList test = new SimpleList();

        // Populate the List
        Console.WriteLine("Populate the List");
        test.Add("one");
        test.Add("two");
        test.Add("three");
        test.Add("four");
        test.Add("five");
        test.Add("six");
        test.Add("seven");
        test.Add("eight");
        test.PrintContents();
        Console.WriteLine();

        // Remove elements from the list
        Console.WriteLine("Remove elements from the list");
        test.Remove("six");
        test.Remove("eight");
        test.PrintContents();
        Console.WriteLine();

        // Add an element to the end of the list
        Console.WriteLine("Add an element to the end of the list");
        test.Add("nine");
        test.PrintContents();
        Console.WriteLine();

        // Insert an element into the middle of the list
        Console.WriteLine("Insert an element into the middle of the list");
        test.Insert(4, "number");
        test.PrintContents();
        Console.WriteLine();

        // Check for specific elements in the list
        Console.WriteLine("Check for specific elements in the list");
        Console.WriteLine("List contains \"three\": {0}", test.Contains("three"));
        Console.WriteLine("List contains \"ten\": {0}", test.Contains("ten"));
    }
예제 #6
0
        internal override MSOFormula <T> SubstituteVariables1(Dictionary <string, Variable> subst, SimpleList <string> bound)
        {
            var v = (bound.Contains(var.Name) ? var : (subst.ContainsKey(var.Name) ? subst[var.Name] : var));

            if (v == var)
            {
                return(this);
            }
            else
            {
                return(new MSOLast <T>(v));
            }
        }
예제 #7
0
        public void Contains()
        {
            SimpleList <StringBuilder> builders = new SimpleList <StringBuilder>(2);

            StringBuilder firstBuilder  = new StringBuilder();
            StringBuilder secondBuilder = new StringBuilder();

            builders.Add(firstBuilder);
            builders.Add(secondBuilder);

            Assert.AreEqual(true, builders.Contains(firstBuilder));
            Assert.AreEqual(false, builders.Contains(new StringBuilder()));

            SimpleList <int> numbers = new SimpleList <int>(new int[] { 1, 2, 3 });

            Assert.AreEqual(true, numbers.Contains(3));
            Assert.AreEqual(false, numbers.Contains(4));

            SimpleList <string> nulls = new SimpleList <string>(new string[] { null, null, null });

            Assert.ThrowsException <NullReferenceException>(() => nulls.Contains(null));
        }
예제 #8
0
        internal override MSOFormula <T> SubstituteVariables1(Dictionary <string, Variable> subst, SimpleList <string> bound)
        {
            var v = (bound.Contains(var.Name) ? var : (subst.ContainsKey(var.Name) ? subst[var.Name] : var));

            if (v == var)
            {
                return(this);
            }
            else
            {
                if (v.IsFirstOrder != var.IsFirstOrder)
                {
                    throw new ArgumentException("invalid substitution");
                }
                return(new MSOIsSingleton <T>(v));
            }
        }
예제 #9
0
        private void Solve(SudokuState state, SudokuRegion region, SudokuRegion intersected, uint value, ICollection <IEvent> events)
        {
            var count = 0;

            foreach (var index in region)
            {
                if ((state[index] & value) != 0)
                {
                    if (intersection.Contains(index))
                    {
                        count++;
                    }
                    else
                    {
                        return;
                    }
                }
            }
            if (count > 1)
            {
                Fetch(value, intersection, intersected, state, events);
            }
        }
예제 #10
0
        private bool Fetch(uint value, SudokuRegion region, SudokuState state, ICollection <IEvent> events)
        {
            var reducded = false;
            var mask     = ~value;

            foreach (var index in region)
            {
                if (buffer.Contains(index))
                {
                    continue;
                }
                var result = state.And <ReduceXWing>(index, mask);
                if (result is ValueFound)
                {
                    events.Add(result);
                }
                else if (result is ReducedOption)
                {
                    reducded = true;
                }
            }
            return(reducded);
        }
예제 #11
0
 public bool Contains(T item)
 {
     return(data.Contains(item));
 }
예제 #12
0
 public void listContainsASpecificValue()
 {
     var list = new SimpleList<int>(){ 1, 7, 8 };
     Assert.AreEqual(true, list.Contains(7));
 }