public bool CreateNextStage() { if (pGPsel == null) { return(true); } UPuzzleMan Q = new UPuzzleMan(stageNo + 1); Q.GPMpre = this; this.GPMnxt = Q; pGNPX_Eng.pGP = pGPsel.Copy(stageNo + 1, 0); SDK_Ctrl.UGPMan = Q; return(false); }
public void btnTransRes() { if (pGP.AnsNum == null) { return; } UPbas = UPorg.Copy(0, 0); UPuzzle tGP = UPorg.Copy(0, 0); pGNP.SDKProbLst[ID] = tGP; pGNP.GNPX_Eng.pGP = tGP; TrPara = new int[18]; RCX = new int[4, 12]; for (int k = 0; k < 9; k++) { RCX[0, k] = RCX[1, k] = k; } for (int k = 0; k < 3; k++) { RCX[0, k + 9] = RCX[1, k + 9] = k * 3; } }
public bool AnalyzerControl(CancellationToken ct, ref int ret2, bool SolInfoB) { List <UCell> XYchainList = new List <UCell>(); Stopwatch AnalyzerLap = new Stopwatch(); AnMan.GStage++; bool ret = false; try{ pGP.Sol_ResultLong = ""; int lvlLow = SDK_Ctrl.lvlLow; int lvlHgh = SDK_Ctrl.lvlHgh; AnMan.SolversInitialize(); #region Solve int mCC = 0; do { ret = AnMan.VerifyRoule_SuDoKu(); if (!ret) { if (SolInfoB) { pGP.Sol_ResultLong = "No solution"; } ret2 = -999888777; return(false); } ret = false; //------------------------------------------- LblRestart: AnalyzerLap.Start(); DateTime MltAnsTimer = DateTime.Now; UPuzzle GPpre = null; if (SDK_Ctrl.MltAnsSearch) { GPpre = pGP.Copy(0, 0); } try{ if (AnMan.pBDL.All(p => (p.FreeB == 0))) { break; } pGP.SolCode = -1; bool L1SolFound = false; foreach (var P in MethodLst_Run) { if (ct != null && ct.IsCancellationRequested) { return(false); } int lvl = P.DifLevel; int lvlAbs = Abs(lvl); if (lvlAbs > lvlHgh) { continue; } try{ if (SDK_Ctrl.MltAnsSearch) //Multiple Solutions Analysis { if (L1SolFound && lvlAbs >= 2) { break; } if (lvlAbs > (int)SDK_Ctrl.MltAnsOption["MaxLevel"]) { continue; } if ((string)SDK_Ctrl.MltAnsOption["abortResult"] != "") { GNPX_AnalyzerMessage = (string)SDK_Ctrl.MltAnsOption["abortResult"]; break; } } else { if (lvl < 0) { continue; //(negative difficulty method is used only Multiple Solutions Analysis) } } if (__ChkPrint__) { WriteLine($"---> method{(mCC++)} :{P.MethodName}"); } GNPX_AnalyzerMessage = P.MethodName; if (ct != null && ct.IsCancellationRequested) /*ct.ThrowIfCancellationRequested();*/ return { (false); } if (pGP.DifLevel < P.DifLevel) { pGP.DifLevel = P.DifLevel; //БеTBDБе } if ((ret = P.Method())) { if (SDK_Ctrl.UGPMan != null && SDK_Ctrl.UGPMan.MltUProbLst != null && SDK_Ctrl.UGPMan.MltUProbLst.Any(q => q.SolCode == 1)) { L1SolFound = true; } P.UsedCC++; pGP.pMethod = P; if (SDK_Ctrl.UGPMan != null && SDK_Ctrl.UGPMan.pGPsel != null) { SDK_Ctrl.UGPMan.pGPsel.pMethod = P; } if (__ChkPrint__) { WriteLine($"========================> solved {P.MethodName}"); } if (!SDK_Ctrl.MltAnsSearch) { goto succeedBreak; } } } catch (Exception e) { WriteLine(e.Message + "\r" + e.StackTrace); using (var fpW = new StreamWriter("Exception_201_1.txt", true, Encoding.UTF8)){ fpW.WriteLine($"---{DateTime.Now} {e.Message} \r{e.StackTrace}"); } goto LblRestart; } } if (SDK_Ctrl.MltAnsSearch && SDK_Ctrl.UGPMan != null && SDK_Ctrl.UGPMan.MltUProbLst != null) { if (SDK_Ctrl.UGPMan.MltUProbLst.Count > 0) { pGP = SDK_Ctrl.UGPMan.MltUProbLst.First(); SDK_Ctrl.UGPMan.pGPsel = pGP; ret = true; goto succeedBreak; } } if (__ChkPrint__) { WriteLine("========================> can not solve"); } if (SolInfoB) { pGP.Sol_ResultLong = "can not solve"; } ret2 = -999888777; return(false); } catch (OperationCanceledException) {} catch (Exception e) { WriteLine(e.Message + "\r" + e.StackTrace); using (var fpW = new StreamWriter("ExceptionXXX_2.txt", true, Encoding.UTF8)){ fpW.WriteLine($"---{DateTime.Now} {e.Message} \r{e.StackTrace}"); } goto LblRestart; } finally{ AnalyzerLap.Stop(); SDK_Ctrl.solLevelNN = Min(SDK_Ctrl.solLevelNN, AnMan.pBDL.Count(p => (p.FreeB != 0))); } }while(false); } catch (ThreadAbortException ex) { WriteLine(ex.Message + "\r" + ex.StackTrace); } succeedBreak: //found SdkExecTime = AnalyzerLap.Elapsed; #endregion Solve return(ret); }