Exemple #1
0
        private bool _ALSXZsub(int sz)
        {
            if (ALSMan.ALSLst.Count < 2)
            {
                return(false);
            }

            var cmb = new Combination(ALSMan.ALSLst.Count, 2);
            int nxt = 99;

            while (cmb.Successor(nxt))                          //Select two ALSs
            {
                UALS UA = ALSMan.ALSLst[cmb.Index[0]];
                nxt = 0; if (!UA.singly || UA.Size == 1 || UA.Size > (sz - 2))
                {
                    continue;
                }

                UALS UB = ALSMan.ALSLst[cmb.Index[1]];
                nxt = 1; if (!UB.singly || UB.Size == 1 || (UA.Size + UB.Size) != sz)
                {
                    continue;
                }

                int RCC = ALSMan.Get_AlsAlsRcc(UA, UB);          //Common numbers, House contact, Without overlap
                if (RCC == 0)
                {
                    continue;
                }

                if (RCC.BitCount() == 1)                          //===== Singly Linked =====
                {
                    int EnoB = (UA.FreeB & UB.FreeB).DifSet(RCC); //Exclude candidate digit
                    if (EnoB > 0 && _ALSXZ_SinglyLinked(UA, UB, RCC, EnoB))
                    {
                        SolCode = 2;
                        ALSXZ_SolResult(RCC, UA, UB);

                        if (__SimpleAnalizerB__)
                        {
                            return(true);
                        }
                        if (!pAnMan.SnapSaveGP(true))
                        {
                            return(true);
                        }
                    }
                }
                else if (RCC.BitCount() == 2)    //===== Doubly Linked =====
                {
                    if (_ALSXZ_DoublyLinked(UA, UB, RCC))
                    {
                        SolCode = 2;
                        ALSXZ_SolResult(RCC, UA, UB);

                        if (__SimpleAnalizerB__)
                        {
                            return(true);
                        }
                        if (!pAnMan.SnapSaveGP(true))
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }