Ejemplo n.º 1
0
        /// <summary>
        /// 三链数
        /// </summary>
        /// <param name="method"></param>
        /// <param name="index"></param>
        private void HiddenTriplet(MethodDiction method, int index)
        {
            var        cellsDic  = GetCellsDic(method);
            var        listcells = cellsDic[index].Where(c => c.Value == 0).ToList();
            var        celllist  = listcells;
            var        list      = celllist.Where(c => c.GetRest().Count <= 3).ToList();
            List <int> listcount = new List <int>();

            if (celllist.Count != 3 && list.Count == 3)
            {
                foreach (var cell in list)
                {
                    listcount.AddRange(cell.GetRest());
                }

                var hiddenTripletList = listcount.Distinct().ToList();
                if (hiddenTripletList.Count == 3)
                {
                    var hiddenTripletstring = JsonConvert.SerializeObject(hiddenTripletList);
                    SolveMessage += "\r\n" + string.Join(",", list.Select(c => c.showPostion).ToList()) + "的取值只可能是" +
                                    hiddenTripletstring + ",\r\n所以第" + (index + 1) + GetDescription(method) +
                                    "的其余位置的备选项需要移除掉" + hiddenTripletstring + "等数据\r\n";
                    var keys = list.Select(c => c.ProgramPostion).ToList();
                    foreach (var VARIABLE in listcells)
                    {
                        if (!keys.Contains(VARIABLE.ProgramPostion))
                        {
                            VARIABLE.hiddenTripletList = hiddenTripletList;
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private void blockSingleColomn(MethodDiction method, int index)
        {
            var cellsDic  = GetCellsDic(method);
            var listcells = cellsDic[index].Where(c => c.Value == 0).ToList();
            var allRest   = new List <int>();

            foreach (var cell in listcells)
            {
                allRest.AddRange(cell.GetRest());
            }

            var distinct = allRest.Distinct().ToList();

            Dictionary <int, List <int> > temp = new Dictionary <int, List <int> >();

            foreach (var value in distinct)
            {
                temp.Add(value, new List <int>());
            }

            foreach (var cellInfo in listcells)
            {
                foreach (var value in distinct)
                {
                    if (cellInfo.GetRest().Contains(value))
                    {
                        temp[value].Add(cellInfo.column);
                    }
                }
            }


            foreach (var keyValuePair in temp)
            {
                if (keyValuePair.Value.Distinct().Count() == 1)
                {
                    var block       = index;
                    var SignleValue = keyValuePair.Key;
                    var column      = keyValuePair.Value.First();

                    foreach (var cellInfo in columnCells[column])
                    {
                        if (cellInfo.block != block)
                        {
                            cellInfo.blockList.Add(SignleValue);
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 数对
        /// </summary>
        /// <param name="method"></param>
        /// <param name="index"></param>
        private CellInfo PairNumbers(CellInfo cellInfo, MethodDiction method, int index)
        {
            var cellsDic  = GetCellsDic(method);
            var listcells = cellsDic[index].Where(c => c.Value == 0 && c.ProgramPostion != cellInfo.ProgramPostion)
                            .ToList();

            foreach (var newCellInfo in listcells)
            {
                if (newCellInfo.RestInfo == cellInfo.RestInfo)
                {
                    return(newCellInfo);
                }
            }

            return(null);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 取值在两个位置
        /// </summary>
        /// <param name="dirtion"></param>
        /// <param name="index"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        private CellInfo OtherPostion(CellInfo cellInfo, MethodDiction dirtion, int index, int value)
        {
            var             c      = GetCellsDic(dirtion)[index];
            List <CellInfo> temp   = new List <CellInfo>();
            var             result = c.Where(x => x.Value == 0).ToList();

            foreach (var cell in result)
            {
                if (cell.ProgramPostion != cellInfo.ProgramPostion && cell.GetRest().Contains(value))
                {
                    temp.Add(cell);
                }
            }

            if (temp.Count == 1)
            {
                return(temp.First());
            }

            return(null);
        }
Ejemplo n.º 5
0
        private static Dictionary <int, List <CellInfo> > GetCellsDic(MethodDiction method)
        {
            Dictionary <int, List <CellInfo> > cellsDic = null;

            switch (method)
            {
            case MethodDiction.Row:
                cellsDic = rowCells;
                break;

            case MethodDiction.Column:
                cellsDic = columnCells;
                break;

            case MethodDiction.Block:
                cellsDic = blockCells;
                break;
            }


            return(cellsDic);
        }