─────╷─────────── $𝖒𝖘𝖞𝖚/𝖒𝖆𝖘𝖞𝖚-𝖗𝖚𝖑𝖊𝖘.𝖘𝖆𝖕𝖕𝖍𝖎𝖗𝖊 ─────────────────────────────────────────────────────────
0┊----------------------------------| Masyu Rules in Sapphire |-----------------------------------
1┊--|∙‹https://www.nikoli.co.jp/en/puzzles/masyu›∙and∙‹https://en.wikipedia.org/wiki/Masyu›
2┊
3┊Idx={0⋯n⨫1}×{0⋯m⨫1}∙--|∙0∙based∙indexing∙by∙pairs
4┊
5┊x0∈{0⋯n⨫2}∙∧∙y0∈{0⋯m⨫2}∙∧∙⦗id∙x0∙y0⦘=0
6┊
7┊∀⟨x∙y⟩∈Idx
8┊∙∙⦗sol∙x∙y⦘∈{0⋯4}
9┊∙∙⦗id∙x∙y⦘∈{0⋯n·m}
10┊∙∙⦗id∙x∙y⦘=0∙⇐⇒∙x=x0∙∧∙y=y0
11┊∙∙⦗sol∙x∙y⦘∈{0⋯3}∙⇒∙y0<=y∙∧∙(y0=y∙⇒∙x0<=x)
12┊∙∙⦗sol∙x∙y⦘=4∙⇐⇒∙⦗id∙x∙y⦘=n·m
13┊
14┊∙∙x=0∙∙∙⇒∙⦗sol∙x∙y⦘∈{1∙3∙4}
15┊∙∙x=n⨫1∙⇒∙⦗sol∙x∙y⦘∈{0∙2∙4}
16┊∙∙y=0∙∙∙⇒∙⦗sol∙x∙y⦘∈{0∙3∙4}
17┊∙∙y=m⨫1∙⇒∙⦗sol∙x∙y⦘∈{1∙2∙4}
18┊
19┊∙∙--|∙if∙on∙path,∙here∙points∙somewhere∙else∙on∙the∙path
20┊∙∙⦗sol∙x∙y⦘=0∙⇒∙y<m⨫1∙∧∙⦗sol∙x∙y+1⦘∈{0∙2∙3}∙∧∙⦗id∙x∙y+1⦘=⦗id∙x∙y⦘+1
21┊∙∙⦗sol∙x∙y⦘=1∙⇒∙y>0∙∙∙∧∙⦗sol∙x∙y⨫1⦘∈{1∙2∙3}∙∧∙(⦗id∙x∙y⨫1⦘=⦗id∙x∙y⦘+1∙∨∙⦗id∙x∙y⨫1⦘=0)
22┊∙∙⦗sol∙x∙y⦘=2∙⇒∙x>0∙∙∙∧∙⦗sol∙x⨫1∙y⦘∈{0∙1∙2}∙∧∙⦗id∙x⨫1∙y⦘=⦗id∙x∙y⦘+1
23┊∙∙⦗sol∙x∙y⦘=3∙⇒∙x<n⨫1∙∧∙⦗sol∙x+1∙y⦘∈{0∙1∙3}∙∧∙⦗id∙x+1∙y⦘=⦗id∙x∙y⦘+1
24┊
25┊∙∙--|∙if∙on∙path,∙something∙points∙here
26┊∙∙⦗sol∙x∙y⦘¬=4∙⇒
27┊∙∙∙∙∙∙y<m⨫1∙∧∙⦗sol∙x∙y+1⦘=1∙∧∙∙⦗id∙x∙y⦘=⦗id∙x∙y+1⦘+1∙∨
28┊∙∙∙∙∙∙y>0∙∙∙∧∙⦗sol∙x∙y⨫1⦘=0∙∧∙∙⦗id∙x∙y⦘=⦗id∙x∙y⨫1⦘+1∙∨
29┊∙∙∙∙∙∙x>0∙∙∙∧∙⦗sol∙x⨫1∙y⦘=3∙∧∙∙⦗id∙x∙y⦘=⦗id∙x⨫1∙y⦘+1∙∨
30┊∙∙∙∙∙∙x<n⨫1∙∧∙⦗sol∙x+1∙y⦘=2∙∧∙∙⦗id∙x∙y⦘=⦗id∙x+1∙y⦘+1∙∨
31┊∙∙∙∙∙∙x=x0∙∧∙y=y0∙∧∙y<m⨫1∙∧∙⦗sol∙x∙y⦘=3∙∧∙⦗sol∙x∙y+1⦘=1∙∧∙⦗id∙x∙y⦘=0
32┊
33┊∙∙--|∙if∙not∙on∙path,∙nothing∙points∙here
34┊∙∙⦗sol∙x∙y⦘=4∙⇒
35┊∙∙∙∙y>0∙∙∙⇒∙⦗sol∙x∙y⨫1⦘¬=0
36┊∙∙∙∙y<m⨫1∙⇒∙⦗sol∙x∙y+1⦘¬=1
37┊∙∙∙∙x>0∙∙∙⇒∙⦗sol∙x⨫1∙y⦘¬=3
38┊∙∙∙∙x<n⨫1∙⇒∙⦗sol∙x+1∙y⦘¬=2
39┊
40┊∙∙⦗dot∙x∙y⦘=1∙⇒
41┊∙∙∙∙⦗sol∙x∙y⦘∈{0⋯3}
42┊∙∙∙∙⦗sol∙x∙y⦘=0∙⇒∙y<m⨫2∙∧∙⦗sol∙x∙y+1⦘=0∙∧
43┊∙∙∙∙∙∙∙∙(x>=2∙∧∙⦗sol∙x⨫1∙y⦘=3∙∧∙⦗sol∙x⨫2∙y⦘=3∙∨∙x<n⨫2∙∧∙⦗sol∙x+1∙y⦘=2∙∧∙⦗sol∙x+2∙y⦘=2)
44┊∙∙∙∙⦗sol∙x∙y⦘=1∙⇒∙y>=2∙∧∙⦗sol∙x∙y⨫1⦘=1∙∧
45┊∙∙∙∙∙∙∙∙(x>=2∙∧∙⦗sol∙x⨫1∙y⦘=3∙∧∙⦗sol∙x⨫2∙y⦘=3∙∨∙x<n⨫2∙∧∙⦗sol∙x+1∙y⦘=2∙∧∙⦗sol∙x+2∙y⦘=2)
46┊∙∙∙∙⦗sol∙x∙y⦘=2∙⇒∙x>=2∙∧∙⦗sol∙x⨫1∙y⦘=2∙∧
47┊∙∙∙∙∙∙∙∙(y>=2∙∧∙⦗sol∙x∙y⨫1⦘=0∙∧∙⦗sol∙x∙y⨫2⦘=0∙∨∙y<m⨫2∙∧∙⦗sol∙x∙y+1⦘=1∙∧∙⦗sol∙x∙y+2⦘=1)
48┊∙∙∙∙⦗sol∙x∙y⦘=3∙⇒∙x<n⨫2∙∧∙⦗sol∙x+1∙y⦘=3∙∧
49┊∙∙∙∙∙∙∙∙(y>=2∙∧∙⦗sol∙x∙y⨫1⦘=0∙∧∙⦗sol∙x∙y⨫2⦘=0∙∨∙y<m⨫2∙∧∙⦗sol∙x∙y+1⦘=1∙∧∙⦗sol∙x∙y+2⦘=1)
50┊
51┊∙∙⦗dot∙x∙y⦘=2∙⇒
52┊∙∙∙∙∙∙x>0∙∧∙x<n⨫1∙∧
53┊∙∙∙∙∙∙∙∙(⦗sol∙x∙y⦘=2∙∧∙⦗sol∙x+1∙y⦘=2∙∧
54┊∙∙∙∙∙∙∙∙∙∙(⦗sol∙x⨫1∙y⦘∈{0∙1}∙∨∙y>0∙∧∙⦗sol∙x+1∙y⨫1⦘=0∙∨∙y<m⨫1∙∧∙⦗sol∙x+1∙y+1⦘=1)
55┊∙∙∙∙∙∙∙∙∨
56┊∙∙∙∙∙∙∙∙⦗sol∙x∙y⦘=3∙∧∙⦗sol∙x⨫1∙y⦘=3∙∧
57┊∙∙∙∙∙∙∙∙∙∙(⦗sol∙x+1∙y⦘∈{0∙1}∙∨∙y>0∙∧∙⦗sol∙x⨫1∙y⨫1⦘=0∙∨∙y<m⨫1∙∧∙⦗sol∙x⨫1∙y+1⦘=1))
58┊∙∙∙∙∙∙∨
59┊∙∙∙∙∙∙y>0∙∧∙y<m⨫1∙∧
60┊∙∙∙∙∙∙∙∙(⦗sol∙x∙y⦘=1∧⦗sol∙x∙y+1⦘=1∙∧
61┊∙∙∙∙∙∙∙∙∙∙(⦗sol∙x∙y⨫1⦘∈{2∙3}∙∨∙x>0∙∧∙⦗sol∙x⨫1∙y+1⦘=3∙∨∙x<n⨫1∙∧∙⦗sol∙x+1∙y+1⦘=2)
62┊∙∙∙∙∙∙∙∙∨
63┊∙∙∙∙∙∙∙∙⦗sol∙x∙y⦘=0∧⦗sol∙x∙y⨫1⦘=0∙∧
64┊∙∙∙∙∙∙∙∙∙∙(⦗sol∙x∙y+1⦘∈{2∙3}∙∨∙x>0∙∧∙⦗sol∙x⨫1∙y⨫1⦘=3∙∨∙x<n⨫1∙∧∙⦗sol∙x+1∙y⨫1⦘=2))
65┊
66┊
67┊--|∙add∙to∙help∙solver∙(many∙x∙speedup∙in∙pure∙loop);∙want∙to∙automate∙this∙in∙future
68┊∀⟨x∙y⟩∈{0⋯n}×{0⋯m}
69┊∙∙⦗in?∙x∙y⦘∈{0∙1}
70┊∙∙x=0∙∨∙y=0∙∨∙x=n∙∨∙y=m∙⇒∙⦗in?∙x∙y⦘=0
71┊∙∙x>0∙∧∙y>0∙∧∙y<m∙⇒∙(⦗in?∙x∙y⦘=⦗in?∙x⨫1∙y⦘∙⇐⇒∙⦗sol∙x⨫1∙y⨫1⦘¬=0∧⦗sol∙x⨫1∙y⦘¬=1)
72┊∙∙x>0∙∧∙x<n∙∧∙y>0∙⇒∙(⦗in?∙x∙y⦘=⦗in?∙x∙y⨫1⦘∙⇐⇒∙⦗sol∙x⨫1∙y⨫1⦘¬=3∧⦗sol∙x∙y⨫1⦘¬=2)
73┊
74┊∙∙x>0∙∧∙y>0∙∧∙x<n∙∧∙y<m∙⇒
75┊∙∙∙∙⦗sol∙x⨫1∙y⨫1⦘=0∙⇒∙⦗in?∙x∙y⦘=0
76┊∙∙∙∙⦗sol∙x∙∙∙y⨫1⦘=0∙⇒∙⦗in?∙x∙y⦘=1
77┊∙∙∙∙⦗sol∙x⨫1∙y∙∙⦘=1∙⇒∙⦗in?∙x∙y⦘=1
78┊∙∙∙∙⦗sol∙x∙∙∙y∙∙⦘=1∙⇒∙⦗in?∙x∙y⦘=0
79┊∙∙∙∙⦗sol∙x∙∙∙y⨫1⦘=2∙⇒∙⦗in?∙x∙y⦘=0
80┊∙∙∙∙⦗sol∙x∙∙∙y∙∙⦘=2∙⇒∙⦗in?∙x∙y⦘=1
81┊∙∙∙∙⦗sol∙x⨫1∙y⨫1⦘=3∙⇒∙⦗in?∙x∙y⦘=1
82┊∙∙∙∙⦗sol∙x⨫1∙y∙∙⦘=3∙⇒∙⦗in?∙x∙y⦘=0
─────╵────────────────────────────────────────────────────────────────────────────────────────────────