├── .classpath
├── .gitignore
├── .project
├── .settings
└── org.eclipse.core.resources.prefs
├── LICENSE
├── Make-Jar.jardesc
├── README.md
├── _config.yml
├── diuf
└── sudoku
│ ├── Cell.java
│ ├── Grid.java
│ ├── Link.java
│ ├── Settings.java
│ ├── SolvingTechnique.java
│ ├── applet
│ └── SudokuApplet.java
│ ├── generator
│ ├── Generator.java
│ ├── Point.java
│ └── Symmetry.java
│ ├── gui
│ ├── APE.html
│ ├── AboutDialog.java
│ ├── AdvancedPlayer.html
│ ├── AutoBusy.java
│ ├── BUGs.html
│ ├── BigClue.html
│ ├── Diabolical.html
│ ├── Easy.html
│ ├── EmptyRectangle.html
│ ├── Fiendish.html
│ ├── Fiendish2.html
│ ├── FourLinks.html
│ ├── GenerateDialog.java
│ ├── Grouped2StrongLinks.html
│ ├── Hard.html
│ ├── HintNode.java
│ ├── HintsTreeBuilder.java
│ ├── Knife.gif
│ ├── L1Ring.html
│ ├── Light.gif
│ ├── Medium.html
│ ├── Multiple.html
│ ├── Quintuplet.html
│ ├── SmallClue.html
│ ├── Sudoku.gif
│ ├── SudokuExplainer.java
│ ├── SudokuFrame.java
│ ├── SudokuPanel.java
│ ├── Superior.html
│ ├── SuperiorPlus.html
│ ├── TUVWXYZ.html
│ ├── TechniquesSelectDialog.java
│ ├── ThreeLinkER.html
│ ├── ThreeLinkEmL.html
│ ├── ThreeStrongLinks.html
│ ├── TwoStringKite.html
│ ├── UL10.html
│ ├── UL12Type3.html
│ ├── UVWXYZ.html
│ ├── Uniqueness.html
│ ├── VWXYZ.html
│ ├── Valid.html
│ ├── WXYZ.html
│ ├── Warning.gif
│ ├── Welcome.html
│ ├── XLoop.html
│ ├── XYorXYZ.html
│ └── gXLoop.html
│ ├── io
│ ├── ErrorMessage.java
│ ├── FastSinCos.java
│ └── SudokuIO.java
│ ├── solver
│ ├── DirectHint.java
│ ├── DirectHintProducer.java
│ ├── Hint.java
│ ├── HintProducer.java
│ ├── HintsAccumulator.java
│ ├── IndirectHint.java
│ ├── IndirectHintProducer.java
│ ├── Rule.java
│ ├── SingleHintAccumulator.java
│ ├── Solver.java
│ ├── WarningHint.java
│ ├── WarningHintProducer.java
│ ├── checks
│ │ ├── Analyser.java
│ │ ├── Analysis.html
│ │ ├── AnalysisInfo.java
│ │ ├── BruteForceAnalysis.java
│ │ ├── DoubleSolution.html
│ │ ├── DoubleSolutionWarning.java
│ │ ├── DoubleValue.html
│ │ ├── MissingCandidates.html
│ │ ├── NoDoubles.java
│ │ ├── NoSolution.html
│ │ ├── NumberOfFilledCells.java
│ │ ├── NumberOfValues.java
│ │ ├── Solution.html
│ │ ├── Solution.java
│ │ ├── SolutionHint.java
│ │ ├── SudokuSolved.html
│ │ ├── TooFewCells.html
│ │ ├── TooFewValues.html
│ │ ├── UnderConstruction.html
│ │ └── WarningMessage.java
│ └── rules
│ │ ├── AlignedExclusion.java
│ │ ├── AlignedExclusionHint.html
│ │ ├── AlignedExclusionHint.java
│ │ ├── AlignedPairExclusion.java
│ │ ├── AlignedPairExclusionHint.html
│ │ ├── DirectHiddenSetHint.html
│ │ ├── DirectHiddenSetHint.java
│ │ ├── DirectLockingHint.html
│ │ ├── DirectLockingHint.java
│ │ ├── Fisherman.java
│ │ ├── Grouped2LinksFishHint.html
│ │ ├── GroupedStrongLinksHint.html
│ │ ├── GroupedStrongLinksLoopHint.html
│ │ ├── GroupedTCFishHint.html
│ │ ├── HasParentPotentialHint.java
│ │ ├── HiddenSet.java
│ │ ├── HiddenSetHint.html
│ │ ├── HiddenSetHint.java
│ │ ├── HiddenSingle.java
│ │ ├── HiddenSingleHint.html
│ │ ├── HiddenSingleHint.java
│ │ ├── Locking.java
│ │ ├── LockingHint.html
│ │ ├── LockingHint.java
│ │ ├── NakedSet.java
│ │ ├── NakedSetGen.java
│ │ ├── NakedSetGenHint.html
│ │ ├── NakedSetGenHint.java
│ │ ├── NakedSetHint.html
│ │ ├── NakedSetHint.java
│ │ ├── NakedSingle.java
│ │ ├── NakedSingleHint.html
│ │ ├── NakedSingleHint.java
│ │ ├── SimpleLockingHint.html
│ │ ├── Single.html
│ │ ├── StrongLinks.java
│ │ ├── StrongLinksHint.html
│ │ ├── StrongLinksHint.java
│ │ ├── TUVWXYZWing.java
│ │ ├── TUVWXYZWing2Hint.html
│ │ ├── TUVWXYZWingHint.html
│ │ ├── TUVWXYZWingHint.java
│ │ ├── TurbotFish.java
│ │ ├── TurbotFishHint.html
│ │ ├── TurbotFishHint.java
│ │ ├── UVWXYZWing.java
│ │ ├── UVWXYZWing2Hint.html
│ │ ├── UVWXYZWingHint.html
│ │ ├── UVWXYZWingHint.java
│ │ ├── VLocking.html
│ │ ├── VLocking.java
│ │ ├── VLockingHint.java
│ │ ├── VWXYZWing.java
│ │ ├── VWXYZWing2Hint.html
│ │ ├── VWXYZWingHint.html
│ │ ├── VWXYZWingHint.java
│ │ ├── WXYZWing.java
│ │ ├── WXYZWing2Hint.html
│ │ ├── WXYZWingHint.html
│ │ ├── WXYZWingHint.java
│ │ ├── XYWing.java
│ │ ├── XYWingHint.html
│ │ ├── XYWingHint.java
│ │ ├── XYZWingHint.html
│ │ ├── chaining
│ │ ├── BinaryChainingHint.java
│ │ ├── CellChainingHint.java
│ │ ├── Chaining.java
│ │ ├── ChainingHint.java
│ │ ├── CycleHint.java
│ │ ├── DynamicCellReductionHint.html
│ │ ├── DynamicContradictionHint.html
│ │ ├── DynamicReductionHint.html
│ │ ├── DynamicRegionReductionHint.html
│ │ ├── ForcingChain.html
│ │ ├── ForcingChainHint.java
│ │ ├── ForcingXChain.html
│ │ ├── FullChain.java
│ │ ├── NishioHint.html
│ │ ├── Potential.java
│ │ ├── RegionChainingHint.java
│ │ ├── StaticCellReductionHint.html
│ │ ├── StaticRegionReductionHint.html
│ │ ├── UnderConstruction.html
│ │ ├── X-Cycle.html
│ │ ├── XY-Cycle.html
│ │ └── Y-Cycle.html
│ │ ├── forcingCellFNC.java
│ │ ├── forcingCellFNCHint.java
│ │ ├── forcingCellNC.html
│ │ ├── forcingCellNC.java
│ │ ├── forcingCellNCHint.java
│ │ ├── lockedFNC.java
│ │ ├── lockedFNCHint.java
│ │ ├── lockedNC.html
│ │ ├── lockedNC.java
│ │ ├── lockedNCHint.java
│ │ └── unique
│ │ ├── BivalueUniversalGrave.java
│ │ ├── BivalueUniversalGrave1.html
│ │ ├── BivalueUniversalGrave2.html
│ │ ├── BivalueUniversalGrave3.html
│ │ ├── BivalueUniversalGrave4.html
│ │ ├── Bug1Hint.java
│ │ ├── Bug2Hint.java
│ │ ├── Bug3Hint.java
│ │ ├── Bug4Hint.java
│ │ ├── BugHint.java
│ │ ├── UniqueLoopHint.java
│ │ ├── UniqueLoopType1.html
│ │ ├── UniqueLoopType1Hint.java
│ │ ├── UniqueLoopType2.html
│ │ ├── UniqueLoopType2Hint.java
│ │ ├── UniqueLoopType3Hidden.html
│ │ ├── UniqueLoopType3HiddenHint.java
│ │ ├── UniqueLoopType3Naked.html
│ │ ├── UniqueLoopType3NakedHint.java
│ │ ├── UniqueLoopType4.html
│ │ ├── UniqueLoopType4Hint.java
│ │ └── UniqueLoops.java
│ ├── test
│ └── serate.java
│ └── tools
│ ├── Asker.java
│ ├── CellSet.java
│ ├── CommonTuples.java
│ ├── HtmlLoader.java
│ ├── LinkedSet.java
│ ├── Pair.java
│ ├── Permutations.java
│ ├── SingletonBitSet.java
│ ├── StrongReference.java
│ ├── Twomutations.java
│ └── ValuesFormatter.java
└── doc
├── SukakuExplainer01.png
├── SukakuExplainer02.png
├── SukakuExplainer03.png
├── SukakuExplainer04.png
├── generateDiff.ods
└── rules.ods
/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .metadata
2 | bin/
3 | tmp/
4 | *.tmp
5 | *.bak
6 | *.swp
7 | *~.nib
8 | *.class
9 | local.properties
10 | .settings/
11 | .loadpath
12 | .recommenders
13 |
14 | # External tool builders
15 | .externalToolBuilders/
16 |
17 | # Locally stored "Eclipse launch configurations"
18 | *.launch
19 |
20 | # PyDev specific (Python IDE for Eclipse)
21 | *.pydevproject
22 |
23 | # CDT-specific (C/C++ Development Tooling)
24 | .cproject
25 |
26 | # CDT- autotools
27 | .autotools
28 |
29 | # Java annotation processor (APT)
30 | .factorypath
31 |
32 | # PDT-specific (PHP Development Tools)
33 | .buildpath
34 |
35 | # sbteclipse plugin
36 | .target
37 |
38 | # Tern plugin
39 | .tern-project
40 |
41 | # TeXlipse plugin
42 | .texlipse
43 |
44 | # STS (Spring Tool Suite)
45 | .springBeans
46 |
47 | # Code Recommenders
48 | .recommenders/
49 |
50 | # Annotation Processing
51 | .apt_generated/
52 |
53 | # Scala IDE specific (Scala & Java development for Eclipse)
54 | .cache-main
55 | .scala_dependencies
56 | .worksheet
57 |
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | SukakuExplainer
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 |
15 | org.eclipse.jem.workbench.JavaEMFNature
16 | org.eclipse.jdt.core.javanature
17 | org.eclipse.jem.beaninfo.BeanInfoNature
18 |
19 |
20 |
--------------------------------------------------------------------------------
/.settings/org.eclipse.core.resources.prefs:
--------------------------------------------------------------------------------
1 | #Mon Dec 24 18:30:39 CET 2007
2 | eclipse.preferences.version=1
3 | encoding/=ISO-8859-1
4 |
--------------------------------------------------------------------------------
/Make-Jar.jardesc:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Sukaku Explainer:
2 |
3 | Is a sukaku (Pencilmark Sudoku) and sudoku Solver/Rater with a command line entry point and a GUI. It is based on serate
4 | modification of "Sudoku Explainer" by Nicolas Juillerat
5 |
6 | 
7 |
8 | ## Installation:
9 |
10 | Visit the [releases page](https://github.com/SudokuMonster/SukakuExplainer/releases) to download the latest version(s) of Sukaku Explainer and Serate.
11 |
12 | ## Usage:
13 |
14 | Sukaku Explainer has both a GUI and command line point functionalities.
15 |
16 | Visit the [Command line parametrs page](https://github.com/SudokuMonster/SukakuExplainer/wiki/Batch-mode-command-line-parameters) for further information.
17 |
18 | ### INVOCATION
19 |
20 | GUI:
21 |
22 | java.exe -jar SukakuExplainer.jar
23 |
24 | Command Line:
25 |
26 | java.exe -Xrs -Xmx500m -cp SukakuExplainer.jar diuf.sudoku.test.serate ...
27 |
28 | ### GUI
29 |
30 | Functionality is retained with vanilla sudoku puzzles. It also accepts parsing most
31 | vanilla audokus, Pencilmark grids or Sukakus
32 |
33 | 
34 |
35 | 
36 |
37 | 
38 |
39 | ## Contributors:
40 |
41 | @dobrichev
42 |
43 | @1to9only
44 |
45 | @SudokuMonster
46 |
47 | @sudokuwiki
48 |
49 | ## About:
50 |
51 | Sudoku Explainer (Nicolas Juillerat 2006-2019) is a popular Sudoku solver/generator/rater which solves every known Sudoku
52 | puzzle using logical techniques. This popularity and consistency was the basis of the [Patterns game](http://forum.enjoysudoku.com/patterns-game-1-5-t5760.html) on
53 | the "New Sudoku Players Forum". It was further modified to incorporate "serate" which allowed
54 | the explainer rating (ER), the pearl rating (EP) and he diamond rating (ED).
55 |
56 | Pencilmark Sudoku (Sukaku) is the normal extension of Sudoku and [Sukaku Explainer was developed](http://forum.enjoysudoku.com/help-with-sudoku-explainer-t6677-60.html) based
57 | on the serate modification of Sudoku explainer
58 |
59 | ## Credits:
60 |
61 | Nicolas Juillerat, Sudoku Explainer author
62 |
63 | gsf, serate modification of Sudoku Explainer
64 |
65 | ## License:
66 |
67 | GNU Lesser General Public License v2.1
68 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-slate
--------------------------------------------------------------------------------
/diuf/sudoku/Link.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Project: Sudoku Explainer
3 | * Copyright (C) 2006-2007 Nicolas Juillerat
4 | * Available under the terms of the Lesser General Public License (LGPL)
5 | */
6 | package diuf.sudoku;
7 |
8 | /**
9 | * A link between two potential values (candidates) of two cells.
10 | */
11 | public class Link {
12 |
13 | private final Cell srcCell;
14 | private final int srcValue;
15 | private final Cell dstCell;
16 | private final int dstValue;
17 |
18 |
19 | public Link(Cell srcCell, int srcValue, Cell dstCell, int dstValue) {
20 | this.srcCell = srcCell;
21 | this.srcValue = srcValue;
22 | this.dstCell = dstCell;
23 | this.dstValue = dstValue;
24 | }
25 |
26 | public Cell getSrcCell() {
27 | return srcCell;
28 | }
29 |
30 | public int getSrcValue() {
31 | return srcValue;
32 | }
33 |
34 | public Cell getDstCell() {
35 | return dstCell;
36 | }
37 |
38 | public int getDstValue() {
39 | return dstValue;
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/diuf/sudoku/SolvingTechnique.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Project: Sudoku Explainer
3 | * Copyright (C) 2006-2007 Nicolas Juillerat
4 | * Available under the terms of the Lesser General Public License (LGPL)
5 | */
6 | package diuf.sudoku;
7 |
8 | public enum SolvingTechnique {
9 |
10 | HiddenSingle("Hidden Single"),
11 | DirectPointing("Direct Pointing"),
12 | DirectHiddenPair("Direct Hidden Pair"),
13 | NakedSingle("Naked Single"),
14 | forcingCellNC("Non-Consecutive Forcing Cell"),
15 | lockedNC("Locked Non-Consecutive"),
16 | forcingCellFNC("Ferz Non-Consecutive Forcing Cell"),
17 | lockedFNC("Ferz Locked Non-Consecutive"),
18 | DirectHiddenTriplet("Direct Hidden Triplet"),
19 | PointingClaiming("Pointing & Claiming"),
20 | VLocking("Generalized Intersections"),
21 | NakedPair("Naked Pair"),
22 | NakedPairGen("Generalized Naked Pair"),
23 | XWing("X-Wing"),
24 | HiddenPair("Hidden Pair"),
25 | NakedTriplet("Naked Triplet"),
26 | NakedTripletGen("Generalized Naked Triplet"),
27 | Swordfish("Swordfish"),
28 | HiddenTriplet("Hidden Triplet"),
29 | TurbotFish("Scraper, Kite, Turbot"),
30 | XYWing("XY-Wing"),
31 | XYZWing("XYZ-Wing"),
32 | // WWing("W-Wing"),
33 | WXYZWing("WXYZ-Wing"),
34 | UniqueLoop("Unique Rectangle / Loop"),
35 | NakedQuad("Naked Quad"),
36 | NakedQuadGen("Generalized Naked Quad"),
37 | Jellyfish("Jellyfish"),
38 | HiddenQuad("Hidden Quad"),
39 | ThreeStrongLinks("3 Strong-linked Fishes"),
40 | //VWXYZWing4("VWXYZ-Wing 4"),
41 | //VWXYZWing5("VWXYZ-Wing 5"),
42 | NakedQuintGen("Generalized Naked Quintuplet"),
43 | NakedSextGen("Generalized Naked Sextuplet"),
44 | VWXYZWing("VWXYZ-Wing"),
45 | BivalueUniversalGrave("Bivalue Universal Grave"),
46 | FourStrongLinks("4 Strong-Linked Fishes"),
47 | AlignedPairExclusion("Aligned Pair Exclusion"),
48 | FiveStrongLinks("5 Strong-Linked Fishes"),
49 | SixStrongLinks("6 Strong-Linked Fishes"),
50 | UVWXYZWing("UVWXYZ-Wing"),
51 | ForcingChainCycle("Forcing Chains & Cycles"),
52 | TUVWXYZWing("TUVWXYZ-Wing"),
53 | AlignedTripletExclusion("Aligned Triplet Exclusion"),
54 | NishioForcingChain("Nishio Forcing Chains"),
55 | MultipleForcingChain("Multiple Forcing Chains"),
56 | DynamicForcingChain("Dynamic Forcing Chains"),
57 | DynamicForcingChainPlus("Dynamic Forcing Chains (+)"),
58 | NestedForcingChain("Nested Forcing Chains");
59 |
60 | private final String name;
61 |
62 | private SolvingTechnique(String name) {
63 | this.name = name;
64 | }
65 |
66 | @Override
67 | public String toString() {
68 | return name;
69 | }
70 |
71 | }
72 |
--------------------------------------------------------------------------------
/diuf/sudoku/applet/SudokuApplet.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Project: Sudoku Explainer
3 | * Copyright (C) 2006-2007 Nicolas Juillerat
4 | * Available under the terms of the Lesser General Public License (LGPL)
5 | */
6 | package diuf.sudoku.applet;
7 |
8 | import java.applet.*;
9 |
10 | import javax.swing.*;
11 |
12 | import diuf.sudoku.gui.*;
13 |
14 | /**
15 | * Minimal applet support for the sudoku explainer.
16 | */
17 | public class SudokuApplet extends Applet {
18 |
19 | private static final long serialVersionUID = -1770658360372460892L;
20 |
21 |
22 | @Override
23 | public void init() {
24 | super.init();
25 | SwingUtilities.invokeLater(new Runnable() {
26 | public void run() {
27 | new Thread() {
28 | @Override
29 | public void run() {
30 | try {
31 | /*
32 | * It seems that IE want to get the focus just after the applet
33 | * has started, which result in bringing our main window to the
34 | * back. This small delay is a hack that solves this problem.
35 | */
36 | Thread.sleep(500);
37 | } catch (InterruptedException ex) {}
38 | SudokuExplainer.main(null);
39 | }
40 | }.start();
41 | }
42 | });
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/diuf/sudoku/generator/Point.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Project: Sudoku Explainer
3 | * Copyright (C) 2006-2007 Nicolas Juillerat
4 | * Available under the terms of the Lesser General Public License (LGPL)
5 | */
6 | package diuf.sudoku.generator;
7 |
8 |
9 | public class Point {
10 |
11 | public final int x;
12 | public final int y;
13 |
14 | public Point(int x, int y) {
15 | this.x = x;
16 | this.y = y;
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/diuf/sudoku/generator/Symmetry.java:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SudokuMonster/SukakuExplainer/362854eea4e983017726d406ac9ee8a28909bcc7/diuf/sudoku/generator/Symmetry.java
--------------------------------------------------------------------------------
/diuf/sudoku/gui/APE.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | APE: The Sudoku requires an Aligned Pair Exclusion to solve.
4 | Rating: 6.2
5 |
6 |
--------------------------------------------------------------------------------
/diuf/sudoku/gui/AdvancedPlayer.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | AdvancedPlayer: The Sudoku requires the use of Forcing Chains
4 | Rating: 7.0 - 8.0
5 |
6 |
--------------------------------------------------------------------------------
/diuf/sudoku/gui/BUGs.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | BUGs: The Sudoku requires Bivalue Universal Grave techniques to solve.
4 | Rating: 5.6 - 6.1
5 |
6 |
--------------------------------------------------------------------------------
/diuf/sudoku/gui/BigClue.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Big Clue
4 |
5 | {0}
6 |
7 |
8 |
--------------------------------------------------------------------------------
/diuf/sudoku/gui/Diabolical.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Diabolical: The Sudoku requires the use of Forcing Chains or trial & error.
4 | Rating: 6.1 - 10.0
5 |
6 |
--------------------------------------------------------------------------------
/diuf/sudoku/gui/Easy.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Easy: The Sudoku can be solved using Hidden Singles in blocks only.
4 | Rating: 1.0 - 1.2
5 |
6 |
--------------------------------------------------------------------------------
/diuf/sudoku/gui/EmptyRectangle.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Empty Rectangle: The Sudoku requires an 2 strong links one of which is an Empty rectangle to solve.
4 | No skyscrapers, 2-String Kites or XY-Wings allowed.
5 | Rating: 4.3
6 |
7 |
--------------------------------------------------------------------------------
/diuf/sudoku/gui/Fiendish.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Fiendish: The Sudoku requires techniques that can only be applied
4 | when the candidates are written in the empty cells. But Forcing Chains are not required.
5 | Rating: 2.6 - 6.0
6 |
7 |
--------------------------------------------------------------------------------
/diuf/sudoku/gui/Fiendish2.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Fiendish 2: The Sudoku requires techniques that can only be applied
4 | when the candidates are written in the empty cells. Beyond intersections
5 | and possibly difficult but Forcing Chains are not required.
6 | Rating: 3.0 - 7.0
7 |
8 |
--------------------------------------------------------------------------------
/diuf/sudoku/gui/FourLinks.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | 4 strong links: Requires a pattern with 4 single value strong links which can be grouped.
4 | Rating: 5.8-6.1
5 |
6 |
--------------------------------------------------------------------------------
/diuf/sudoku/gui/Grouped2StrongLinks.html:
--------------------------------------------------------------------------------
1 |
2 | 2 Grouped strong links: The Sudoku requires an 2 grouped strong links to solve.
3 | No XY or XYZ Wings allowed.
4 | Rating: 4.3
5 |
6 |