Esempio n. 1
0
        public bool TryCollapse(WcfSuperPosition _superPosition)
        {
            //returns true if collapsed to 1 or less...
            //returns false if more options left

            var TC_relativex = _superPosition.x - superPosition.x;
            var TC_relativey = _superPosition.y - superPosition.y;
            var TC_relativez = _superPosition.z - superPosition.z;

            var foundAcceptableItem = false;

            foreach (var superPositionItem in _superPosition.slots.Where(x => !x.Collapsed).Select(x => x.item))
            {
                if (
                    item.AcceptsInDirection(superPositionItem, TC_relativex, TC_relativey, TC_relativez)
                    )
                {
                    foundAcceptableItem = true;
                    break;
                }
            }
            if (!foundAcceptableItem)
            {
                collapsed = true;
                return(collapsed);
            }
            //check requirements are met
            if (!RequirementsMet())
            {
                collapsed = true;
                return(collapsed);
            }
            return(collapsed);
        }
Esempio n. 2
0
        public bool?Collapse(WcfSuperPosition context)
        {
            RecordPreviousStatesTemp();

            int remaining = 0;

            foreach (var slot in slots)
            {
                var remains = !slot.TryCollapse(context);
                if (remains)
                {
                    remaining += 1;
                }
            }
            //var remaining = slots.Select(x => x.TryCollapse(context)).Where(x=>x==false).Count();
            if (remaining == 0)
            {
                //undefined, we have no options left!
                return(null);
            }

            var justChanged = false;

            for (var i = 0; i < slots.Count; i++)
            {
                if (previousStatesTemp[i] != slots[i].Collapsed)
                {
                    justChanged = true;
                    break;
                }
            }

            //if (remaining > 0)
            return(justChanged);
        }
Esempio n. 3
0
        private int GetNeighborhoodEntropy(WcfSuperPosition superposition)
        {
            var neighborhood = GetSuperPositionNeighbors(superposition.x, superposition.y, superposition.z);

            neighborhood.Add(superposition);
            return(neighborhood.Sum(x => x.slots.Where(y => !y.Collapsed).Count()));
        }
Esempio n. 4
0
        public void PrintStatesToConsole2d()
        {
            return;

            //var updatedSuperPosition = SuperPositionsFlat.Where(x => x.hasUpdated);
            Console.WriteLine("");
            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    WcfSuperPosition thisSuperPosition = SuperPositions[x, y, 0];
                    //var isUpdated = updatedSuperPosition.Any(usp => usp.x == thisSuperPosition.x && usp.y == thisSuperPosition.y && thisSuperPosition.z == 0);
                    int numberOfPossibilities = thisSuperPosition.slots.Where(s => !s.Collapsed).Count();
                    //WcfCollapsableSlot firstOpenSlot = thisSuperPosition.slots.Where(s => !s.Collapsed).FirstOrDefault();

                    ConsoleColor color = ConsoleColor.White;
                    //if ( thisSuperPosition.hasUpdated)
                    //    color = ConsoleColor.Cyan;
                    //if ( thisSuperPosition.hasUpdated)
                    //    color = ConsoleColor.DarkMagenta; //should never happen?
                    //if ( !thisSuperPosition.hasUpdated)
                    //    color = ConsoleColor.Yellow;


                    if (numberOfPossibilities == 0)
                    {
                        Console.BackgroundColor = ConsoleColor.DarkRed;
                        Console.ForegroundColor = color;
                        Console.Write(" ");
                        Console.ResetColor();
                        continue;
                    }
                    if (numberOfPossibilities == 1)
                    {
                        Console.BackgroundColor = ConsoleColor.DarkGreen;
                        Console.ForegroundColor = color;
                        Console.Write(thisSuperPosition.slots.Where(_x => !_x.Collapsed).First().item.Name);
                        Console.ResetColor();
                        continue;
                    }

                    //Number of possibilities > 1
                    Console.ForegroundColor = color;
                    Console.Write(numberOfPossibilities.ToString());
                    Console.ResetColor();
                }
                Console.WriteLine("");
            }
            //Console.WriteLine("Press Enter to continue.");
            //Console.ReadLine();
        }
Esempio n. 5
0
        public bool handlePropagation(WcfSuperPosition previouslyCollapsed)
        {
            return(previouslyCollapsed.Propagate());

            //section deprecated - operational but not optimal
            //var propagationResult = previouslyCollapsed.Propagate();

            ////section depracted... super old
            ////if (propagationResult == false)
            ////{
            ////    SuperPositionsFlat.ForEach(sp => sp.RestorePreviousStates());
            ////    failures++;
            ////    if (failures > 100)
            ////        return false;
            ////}
            ////else
            ////{
            ////    failures = 0;
            ////}
            ////SuperPositionsFlat.ForEach(sp => sp.RecordPreviousStates());
            //return propagationResult;
        }
Esempio n. 6
0
        public void Init(int _width, int _height, int _depth, IEnumerable <IOpinionatedItem> items)
        {
            width              = _width;
            height             = _height;
            depth              = _depth;
            SuperPositions     = new WcfSuperPosition[_width, _height, _depth];
            SuperPositionsFlat = new List <WcfSuperPosition>();
            for (int x = 0; x < _width; x++)
            {
                for (int y = 0; y < _height; y++)
                {
                    for (int z = 0; z < _depth; z++)
                    {
                        SuperPositions[x, y, z] = new WcfSuperPosition(items, random, x, y, z, this);
                        SuperPositionsFlat.Add(SuperPositions[x, y, z]);
                    }
                }
            }

            var _influenceShape = new List <WcfVector>();

            for (int x = -1; x < 2; x++)
            {
                for (int y = -1; y < 2; y++)
                {
                    for (var z = -1; z < 2; z++)
                    {
                        if (!(x == 0 && y == 0 && z == 0))
                        {
                            _influenceShape.Add(new WcfVector(x, y, z));
                        }
                    }
                }
            }
            InfluenceShape = _influenceShape.ToArray();

            //SuperPositionsFlat.ForEach(sp => sp.RecordPreviousStates());
        }
Esempio n. 7
0
 public WcfCollapsableSlot(IOpinionatedItem _item, int _weight, WcfSuperPosition _superPosition)
 {
     weight        = _weight;
     item          = _item;
     superPosition = _superPosition;
 }