[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-apl] A long session with one abort (no damages)
From: |
Christian Robert |
Subject: |
[Bug-apl] A long session with one abort (no damages) |
Date: |
Wed, 30 Nov 2016 22:28:18 -0500 |
User-agent: |
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 |
A long session with one abort. Hopefully I did not lost anything. )copy worked.
My comprehend of the Sudoku and the rules/constraints of Quad-DLX are improving
a lot !
I'm near to having a Sudoku Solver made by myself (zero global variables).
Xtian.
Juergen, I would be surprised if you find anything in that session
who had caused the abort. The only unusual thing is when I renamed "Solve2" to
"Solve"
after erasing "Solve" (by editing the [0] line)
Xtian.
Display Solve2 StarBurst
┏━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┓
┃ 9 │ 5 │ 7 ┃ 1 │ 8 │ 4 ┃ 3 │ 6 │ 2 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 2 │ 8 │ 1 ┃ 9 │ 6 │ 3 ┃ 4 │ 7 │ 5 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 6 │ 4 │ 3 ┃ 7 │ 2 │ 5 ┃ 1 │ 9 │ 8 ┃
┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫
┃ 4 │ 9 │ 6 ┃ 3 │ 5 │ 7 ┃ 8 │ 2 │ 1 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 8 │ 7 │ 5 ┃ 4 │ 1 │ 2 ┃ 9 │ 3 │ 6 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 3 │ 1 │ 2 ┃ 8 │ 9 │ 6 ┃ 5 │ 4 │ 7 ┃
┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫
┃ 7 │ 2 │ 9 ┃ 5 │ 4 │ 8 ┃ 6 │ 1 │ 3 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 5 │ 3 │ 4 ┃ 6 │ 7 │ 1 ┃ 2 │ 8 │ 9 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 1 │ 6 │ 8 ┃ 2 │ 3 │ 9 ┃ 7 │ 5 │ 4 ┃
┗━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┛
df
Display
╔═══════════════════════════════════════════════════════════════════════════╗
║z←Display s
║
║z←1 43⍴"┏━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┓"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┗━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┛"
║
║→(1=≡s)/Ok1
║
║s←⊃s
║
║Ok1: →(81=⍴,s)/Ok2
║
║z←∊("Display: argument with wrong ravel (") (⍴,s) ("). Should be
81.") ⋄ →0║
║Ok2: →(' '=↑0⍴s←,s)/Chars
║
║s←⍕,s
║
║s←(s≠' ')/s
║
║Chars: ((s='0')/s)←' '
║
║(('8'=,z)/,z)←s
║
╚═══════════════════════════════════════════════════════════════════════════╝
GenConst ╔═══════════════════════╗
║z←GenConst;⎕io ║
║z←0 328⍴0 ║
║⊣{⊣z←z⍪RCD ⊃⍵}¨ ,⍳9 9 9║
╚═══════════════════════╝
GenRCD ╔══════════════════════╗
║z←GenRCD arg;R;C;D;⎕io║
║(R C D)←arg ║
║z←0 328⍴0 ║
║→(D=0)/AllKit ║
║z←RCD R C D ║
║→0 ║
║AllKit: ║
║⊣{⊣z←z⍪RCD R C ⍵}¨⍳9 ║
║→0 ║
╚══════════════════════╝
RCD ╔═════════════════════════════════════╗
║z←RCD arg;R;C;D;cel;row;col;box;B;⎕io║
║⎕io←1 ⋄ (R C D)←arg ║
║cel←row←col←box←81⍴0 ║
║cel[1+((R-1)×9)+(C-1)]←D ║
║row[1+((R-1)×9)+(D-1)]←D ║
║col[1+((C-1)×9)+(D-1)]←D ║
║B←1+(3×((⌊(R-1)÷3)))+(⌊(C-1)÷3) ║
║box[1+((B-1)×9)+(D-1)]←D ║
║z←R,C,B,D,cel,row,col,box ║
╚═════════════════════════════════════╝
Solve ╔════════════════════════════════════════════════════╗
║z←Solve s;R;C;D;m;t;⎕io ║
║⎕io←1 ⋄ →(2=⎕NC 'Const')/Good ║
║ Const←GenConst ║
║Good: m←Const ║
║R←0 ║
║NextR: →(9<R←R+1)/Solve ║
║C←0 ║
║NextC: →(9<C←C+1)/NextR ║
║→(0=s[R;C])/NextC ⍝ Ignore all 0 ║
║m←m Trim R,C,s[R;C] ║
║→NextC ║
║Solve: ║
║z←2 ⎕DLX 0≠ 0 4↓ m ║
║→(0=⍴z)/Unsolvable ║
║→(2>⍴z)/JustOne ║
║→TooMuch ║
║JustOne: z←⊃z[1] ║
║ t←m[z;4] ║
║((0=(,s))/,s)←t[⍋z] ║
║z←s ║
║→0 ║
║Unsolvable: z←"No Solutions" ⋄ →0 ║
║TooMuch: ║
║"" ║
║"/-----------------------------------------------\\"║
║"| WARNING: Only displaying the first solution... |"║
║"\\-----------------------------------------------/"║
║"" ║
║→JustOne ║
╚════════════════════════════════════════════════════╝
Solve2 ╔════════════════════════════════════════════════════╗
║z←Solve2 s;cs;⎕io ║
║cs←0 328⍴0 ║
║⊣{⊣cs←cs⍪ GenRCD ⍵}¨{⍵,⍵⌷s}¨,⍳9 9 ║
║z←2 ⎕DLX 0≠ 0 4↓cs ║
║→(0=⍴z)/Unsolvable ║
║→(2>⍴z)/JustOne ║
║→TooMuch ║
║JustOne: z←⊃z[1] ║
║a←z ⋄ b←cs[;1 2 4] ║
║⊣{⊣((2↑⍵)⌷s)←↑2↓⍵}⍤1 cs[z;1 2 4] ║
║z←s ║
║→0 ║
║Unsolvable: z←"No Solutions" ⋄ →0 ║
║TooMuch: ║
║"" ║
║"/-----------------------------------------------\\"║
║"| WARNING: Only displaying the first solution... |"║
║"\\-----------------------------------------------/"║
║"" ║
║→JustOne ║
╚════════════════════════════════════════════════════╝
)erase Solve GenConst
df
Display
╔═══════════════════════════════════════════════════════════════════════════╗
║z←Display s
║
║z←1 43⍴"┏━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┓"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┗━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┛"
║
║→(1=≡s)/Ok1
║
║s←⊃s
║
║Ok1: →(81=⍴,s)/Ok2
║
║z←∊("Display: argument with wrong ravel (") (⍴,s) ("). Should be
81.") ⋄ →0║
║Ok2: →(' '=↑0⍴s←,s)/Chars
║
║s←⍕,s
║
║s←(s≠' ')/s
║
║Chars: ((s='0')/s)←' '
║
║(('8'=,z)/,z)←s
║
╚═══════════════════════════════════════════════════════════════════════════╝
GenRCD ╔══════════════════════╗
║z←GenRCD arg;R;C;D;⎕io║
║(R C D)←arg ║
║z←0 328⍴0 ║
║→(D=0)/AllKit ║
║z←RCD R C D ║
║→0 ║
║AllKit: ║
║⊣{⊣z←z⍪RCD R C ⍵}¨⍳9 ║
║→0 ║
╚══════════════════════╝
RCD ╔═════════════════════════════════════╗
║z←RCD arg;R;C;D;cel;row;col;box;B;⎕io║
║⎕io←1 ⋄ (R C D)←arg ║
║cel←row←col←box←81⍴0 ║
║cel[1+((R-1)×9)+(C-1)]←D ║
║row[1+((R-1)×9)+(D-1)]←D ║
║col[1+((C-1)×9)+(D-1)]←D ║
║B←1+(3×((⌊(R-1)÷3)))+(⌊(C-1)÷3) ║
║box[1+((B-1)×9)+(D-1)]←D ║
║z←R,C,B,D,cel,row,col,box ║
╚═════════════════════════════════════╝
Solve2 ╔════════════════════════════════════════════════════╗
║z←Solve2 s;cs;⎕io ║
║cs←0 328⍴0 ║
║⊣{⊣cs←cs⍪ GenRCD ⍵}¨{⍵,⍵⌷s}¨,⍳9 9 ║
║z←2 ⎕DLX 0≠ 0 4↓cs ║
║→(0=⍴z)/Unsolvable ║
║→(2>⍴z)/JustOne ║
║→TooMuch ║
║JustOne: z←⊃z[1] ║
║a←z ⋄ b←cs[;1 2 4] ║
║⊣{⊣((2↑⍵)⌷s)←↑2↓⍵}⍤1 cs[z;1 2 4] ║
║z←s ║
║→0 ║
║Unsolvable: z←"No Solutions" ⋄ →0 ║
║TooMuch: ║
║"" ║
║"/-----------------------------------------------\\"║
║"| WARNING: Only displaying the first solution... |"║
║"\\-----------------------------------------------/"║
║"" ║
║→JustOne ║
╚════════════════════════════════════════════════════╝
)vars
Const StarBurst a b one vide
∇Solve2[⎕]
∇
[0] z←Solve2 s;cs;⎕io
[1] cs←0 328⍴0
[2] ⊣{⊣cs←cs⍪ GenRCD ⍵}¨{⍵,⍵⌷s}¨,⍳9 9
[3] z←2 ⎕DLX 0≠ 0 4↓cs
[4] →(0=⍴z)/Unsolvable
[5] →(2>⍴z)/JustOne
[6] →TooMuch
[7] JustOne: z←⊃z[1]
[8] a←z ⋄ b←cs[;1 2 4]
[9] ⊣{⊣((2↑⍵)⌷s)←↑2↓⍵}⍤1 cs[z;1 2 4]
[10] z←s
[11] →0
[12] Unsolvable: z←"No Solutions" ⋄ →0
[13] TooMuch:
[14] ""
[15] "/-----------------------------------------------\\"
[16] "| WARNING: Only displaying the first solution... |"
[17] "\\-----------------------------------------------/"
[18] ""
[19] →JustOne
∇
[20] [∆8]
[20] [⎕]
∇
[0] z←Solve2 s;cs;⎕io
[1] cs←0 328⍴0
[2] ⊣{⊣cs←cs⍪ GenRCD ⍵}¨{⍵,⍵⌷s}¨,⍳9 9
[3] z←2 ⎕DLX 0≠ 0 4↓cs
[4] →(0=⍴z)/Unsolvable
[5] →(2>⍴z)/JustOne
[6] →TooMuch
[7] JustOne: z←⊃z[1]
[9] ⊣{⊣((2↑⍵)⌷s)←↑2↓⍵}⍤1 cs[z;1 2 4]
[10] z←s
[11] →0
[12] Unsolvable: z←"No Solutions" ⋄ →0
[13] TooMuch:
[14] ""
[15] "/-----------------------------------------------\\"
[16] "| WARNING: Only displaying the first solution... |"
[17] "\\-----------------------------------------------/"
[18] ""
[19] →JustOne
∇
[20] [10] z←s ⋄ →0
[11] [∆11]
[11] [⎕]
∇
[0] z←Solve2 s;cs;⎕io
[1] cs←0 328⍴0
[2] ⊣{⊣cs←cs⍪ GenRCD ⍵}¨{⍵,⍵⌷s}¨,⍳9 9
[3] z←2 ⎕DLX 0≠ 0 4↓cs
[4] →(0=⍴z)/Unsolvable
[5] →(2>⍴z)/JustOne
[6] →TooMuch
[7] JustOne: z←⊃z[1]
[9] ⊣{⊣((2↑⍵)⌷s)←↑2↓⍵}⍤1 cs[z;1 2 4]
[10] z←s ⋄ →0
[12] Unsolvable: z←"No Solutions" ⋄ →0
[13] TooMuch:
[14] ""
[15] "/-----------------------------------------------\\"
[16] "| WARNING: Only displaying the first solution... |"
[17] "\\-----------------------------------------------/"
[18] ""
[19] →JustOne
∇
[20] [0] z←Solve s;cs;⎕io
[1] [1] ⎕io←1 ⋄ cs←0 328⍴0
[2] [⎕]
∇
[0] z←Solve s;cs;⎕io
[1] ⎕io←1 ⋄ cs←0 328⍴0
[2] ⊣{⊣cs←cs⍪ GenRCD ⍵}¨{⍵,⍵⌷s}¨,⍳9 9
[3] z←2 ⎕DLX 0≠ 0 4↓cs
[4] →(0=⍴z)/Unsolvable
[5] →(2>⍴z)/JustOne
[6] →TooMuch
[7] JustOne: z←⊃z[1]
[9] ⊣{⊣((2↑⍵)⌷s)←↑2↓⍵}⍤1 cs[z;1 2 4]
[10] z←s ⋄ →0
[12] Unsolvable: z←"No Solutions" ⋄ →0
[13] TooMuch:
[14] ""
[15] "/-----------------------------------------------\\"
[16] "| WARNING: Only displaying the first solution... |"
[17] "\\-----------------------------------------------/"
[18] ""
[19] →JustOne
∇
[20] ∇
df
Display
╔═══════════════════════════════════════════════════════════════════════════╗
║z←Display s
║
║z←1 43⍴"┏━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┓"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┗━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┛"
║
║→(1=≡s)/Ok1
║
║s←⊃s
║
║Ok1: →(81=⍴,s)/Ok2
║
║z←∊("Display: argument with wrong ravel (") (⍴,s) ("). Should be
81.") ⋄ →0║
║Ok2: →(' '=↑0⍴s←,s)/Chars
║
║s←⍕,s
║
║s←(s≠' ')/s
║
║Chars: ((s='0')/s)←' '
║
║(('8'=,z)/,z)←s
║
╚═══════════════════════════════════════════════════════════════════════════╝
GenRCD ╔══════════════════════╗
║z←GenRCD arg;R;C;D;⎕io║
║(R C D)←arg ║
║z←0 328⍴0 ║
║→(D=0)/AllKit ║
║z←RCD R C D ║
║→0 ║
║AllKit: ║
║⊣{⊣z←z⍪RCD R C ⍵}¨⍳9 ║
║→0 ║
╚══════════════════════╝
RCD ╔═════════════════════════════════════╗
║z←RCD arg;R;C;D;cel;row;col;box;B;⎕io║
║⎕io←1 ⋄ (R C D)←arg ║
║cel←row←col←box←81⍴0 ║
║cel[1+((R-1)×9)+(C-1)]←D ║
║row[1+((R-1)×9)+(D-1)]←D ║
║col[1+((C-1)×9)+(D-1)]←D ║
║B←1+(3×((⌊(R-1)÷3)))+(⌊(C-1)÷3) ║
║box[1+((B-1)×9)+(D-1)]←D ║
║z←R,C,B,D,cel,row,col,box ║
╚═════════════════════════════════════╝
Solve ╔════════════════════════════════════════════════════╗
║z←Solve s;cs;⎕io ║
║⎕io←1 ⋄ cs←0 328⍴0 ║
║⊣{⊣cs←cs⍪ GenRCD ⍵}¨{⍵,⍵⌷s}¨,⍳9 9 ║
║z←2 ⎕DLX 0≠ 0 4↓cs ║
║→(0=⍴z)/Unsolvable ║
║→(2>⍴z)/JustOne ║
║→TooMuch ║
║JustOne: z←⊃z[1] ║
║⊣{⊣((2↑⍵)⌷s)←↑2↓⍵}⍤1 cs[z;1 2 4] ║
║z←s ⋄ →0 ║
║Unsolvable: z←"No Solutions" ⋄ →0 ║
║TooMuch: ║
║"" ║
║"/-----------------------------------------------\\"║
║"| WARNING: Only displaying the first solution... |"║
║"\\-----------------------------------------------/"║
║"" ║
║→JustOne ║
╚════════════════════════════════════════════════════╝
Solve2 ╔════════════════════════════════════════════════════╗
║z←Solve2 s;cs;⎕io ║
║cs←0 328⍴0 ║
║⊣{⊣cs←cs⍪ GenRCD ⍵}¨{⍵,⍵⌷s}¨,⍳9 9 ║
║z←2 ⎕DLX 0≠ 0 4↓cs ║
║→(0=⍴z)/Unsolvable ║
║→(2>⍴z)/JustOne ║
║→TooMuch ║
║JustOne: z←⊃z[1] ║
║a←z ⋄ b←cs[;1 2 4] ║
║⊣{⊣((2↑⍵)⌷s)←↑2↓⍵}⍤1 cs[z;1 2 4] ║
║z←s ║
║→0 ║
║Unsolvable: z←"No Solutions" ⋄ →0 ║
║TooMuch: ║
║"" ║
║"/-----------------------------------------------\\"║
║"| WARNING: Only displaying the first solution... |"║
║"\\-----------------------------------------------/"║
║"" ║
║→JustOne ║
╚════════════════════════════════════════════════════╝
)erase Solve2
df
Display
╔═══════════════════════════════════════════════════════════════════════════╗
║z←Display s
║
║z←1 43⍴"┏━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┓"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┗━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┛"
║
║→(1=≡s)/Ok1
║
║s←⊃s
║
║Ok1: →(81=⍴,s)/Ok2
║
║z←∊("Display: argument with wrong ravel (") (⍴,s) ("). Should be
81.") ⋄ →0║
║Ok2: →(' '=↑0⍴s←,s)/Chars
║
║s←⍕,s
║
║s←(s≠' ')/s
║
║Chars: ((s='0')/s)←' '
║
║(('8'=,z)/,z)←s
║
╚═══════════════════════════════════════════════════════════════════════════╝
GenRCD ╔══════════════════════╗
║z←GenRCD arg;R;C;D;⎕io║
║(R C D)←arg ║
║z←0 328⍴0 ║
║→(D=0)/AllKit ║
║z←RCD R C D ║
║→0 ║
║AllKit: ║
║⊣{⊣z←z⍪RCD R C ⍵}¨⍳9 ║
║→0 ║
╚══════════════════════╝
RCD ╔═════════════════════════════════════╗
║z←RCD arg;R;C;D;cel;row;col;box;B;⎕io║
║⎕io←1 ⋄ (R C D)←arg ║
║cel←row←col←box←81⍴0 ║
║cel[1+((R-1)×9)+(C-1)]←D ║
║row[1+((R-1)×9)+(D-1)]←D ║
║col[1+((C-1)×9)+(D-1)]←D ║
║B←1+(3×((⌊(R-1)÷3)))+(⌊(C-1)÷3) ║
║box[1+((B-1)×9)+(D-1)]←D ║
║z←R,C,B,D,cel,row,col,box ║
╚═════════════════════════════════════╝
Solve ╔════════════════════════════════════════════════════╗
║z←Solve s;cs;⎕io ║
║⎕io←1 ⋄ cs←0 328⍴0 ║
║⊣{⊣cs←cs⍪ GenRCD ⍵}¨{⍵,⍵⌷s}¨,⍳9 9 ║
║z←2 ⎕DLX 0≠ 0 4↓cs ║
║→(0=⍴z)/Unsolvable ║
║→(2>⍴z)/JustOne ║
║→TooMuch ║
║JustOne: z←⊃z[1] ║
║⊣{⊣((2↑⍵)⌷s)←↑2↓⍵}⍤1 cs[z;1 2 4] ║
║z←s ⋄ →0 ║
║Unsolvable: z←"No Solutions" ⋄ →0 ║
║TooMuch: ║
║"" ║
║"/-----------------------------------------------\\"║
║"| WARNING: Only displaying the first solution... |"║
║"\\-----------------------------------------------/"║
║"" ║
║→JustOne ║
╚════════════════════════════════════════════════════╝
)vars
Const StarBurst a b one vide
)erase a b
)erase Const
)wsid
IS Sudoku2
)save
====================================================
SEGMENTATION FAULT
----------------------------------------
-- Stack trace at main.cc:85
----------------------------------------
0x7fcfc8842c30
0x449cb7
========================================
====================================================
Goodbye.
address@hidden:/home/xtian] $ apl
______ _ __ __ __ ___ ____ __
/ ____// | / // / / / / | / __ \ / /
/ / __ / |/ // / / / / /| | / /_/ // /
/ /_/ // /| // /_/ / / ___ | / ____// /___
\____//_/ |_/ \____/ /_/ |_|/_/ /_____/
Welcome to GNU APL version 1.6 / 813M
Copyright (C) 2008-2016 Dr. Jürgen Sauermann
Banner by FIGlet: www.figlet.org
This program comes with ABSOLUTELY NO WARRANTY;
for details run: apl --gpl.
This program is free software, and you are welcome to redistribute it
according to the GNU Public License (GPL) version 3 or later.
SAVED 2016-11-25 12:56:51 (GMT-5)
)load Sudoku2
*** workspace file /home/xtian/workspaces/Sudoku2.xml
seems to be incomplete (possibly caused by a crash on )SAVE?)
You may still be able to )COPY from it.
NOT COPIED
)copy Sudoku2
SAVED 2016-11-30 22:06:27 (GMT-5)
df
Display
╔═══════════════════════════════════════════════════════════════════════════╗
║z←Display s
║
║z←1 43⍴"┏━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┓"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┠────┼───┼────╂────┼───┼────╂────┼───┼────┨"
║
║z←z⍪ "┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃ 8 │ 8 │ 8 ┃"
║
║z←z⍪ "┗━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┛"
║
║→(1=≡s)/Ok1
║
║s←⊃s
║
║Ok1: →(81=⍴,s)/Ok2
║
║z←∊("Display: argument with wrong ravel (") (⍴,s) ("). Should be
81.") ⋄ →0║
║Ok2: →(' '=↑0⍴s←,s)/Chars
║
║s←⍕,s
║
║s←(s≠' ')/s
║
║Chars: ((s='0')/s)←' '
║
║(('8'=,z)/,z)←s
║
╚═══════════════════════════════════════════════════════════════════════════╝
GenRCD ╔══════════════════════╗
║z←GenRCD arg;R;C;D;⎕io║
║(R C D)←arg ║
║z←0 328⍴0 ║
║→(D=0)/AllKit ║
║z←RCD R C D ║
║→0 ║
║AllKit: ║
║⊣{⊣z←z⍪RCD R C ⍵}¨⍳9 ║
║→0 ║
╚══════════════════════╝
RCD ╔═════════════════════════════════════╗
║z←RCD arg;R;C;D;cel;row;col;box;B;⎕io║
║⎕io←1 ⋄ (R C D)←arg ║
║cel←row←col←box←81⍴0 ║
║cel[1+((R-1)×9)+(C-1)]←D ║
║row[1+((R-1)×9)+(D-1)]←D ║
║col[1+((C-1)×9)+(D-1)]←D ║
║B←1+(3×((⌊(R-1)÷3)))+(⌊(C-1)÷3) ║
║box[1+((B-1)×9)+(D-1)]←D ║
║z←R,C,B,D,cel,row,col,box ║
╚═════════════════════════════════════╝
Solve ╔════════════════════════════════════════════════════╗
║z←Solve s;cs;⎕io ║
║⎕io←1 ⋄ cs←0 328⍴0 ║
║⊣{⊣cs←cs⍪ GenRCD ⍵}¨{⍵,⍵⌷s}¨,⍳9 9 ║
║z←2 ⎕DLX 0≠ 0 4↓cs ║
║→(0=⍴z)/Unsolvable ║
║→(2>⍴z)/JustOne ║
║→TooMuch ║
║JustOne: z←⊃z[1] ║
║⊣{⊣((2↑⍵)⌷s)←↑2↓⍵}⍤1 cs[z;1 2 4] ║
║z←s ⋄ →0 ║
║Unsolvable: z←"No Solutions" ⋄ →0 ║
║TooMuch: ║
║"" ║
║"/-----------------------------------------------\\"║
║"| WARNING: Only displaying the first solution... |"║
║"\\-----------------------------------------------/"║
║"" ║
║→JustOne ║
╚════════════════════════════════════════════════════╝
)vars
StarBurst one vide
Display Solve StarBurst
┏━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┓
┃ 9 │ 5 │ 7 ┃ 1 │ 8 │ 4 ┃ 3 │ 6 │ 2 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 2 │ 8 │ 1 ┃ 9 │ 6 │ 3 ┃ 4 │ 7 │ 5 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 6 │ 4 │ 3 ┃ 7 │ 2 │ 5 ┃ 1 │ 9 │ 8 ┃
┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫
┃ 4 │ 9 │ 6 ┃ 3 │ 5 │ 7 ┃ 8 │ 2 │ 1 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 8 │ 7 │ 5 ┃ 4 │ 1 │ 2 ┃ 9 │ 3 │ 6 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 3 │ 1 │ 2 ┃ 8 │ 9 │ 6 ┃ 5 │ 4 │ 7 ┃
┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫
┃ 7 │ 2 │ 9 ┃ 5 │ 4 │ 8 ┃ 6 │ 1 │ 3 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 5 │ 3 │ 4 ┃ 6 │ 7 │ 1 ┃ 2 │ 8 │ 9 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 1 │ 6 │ 8 ┃ 2 │ 3 │ 9 ┃ 7 │ 5 │ 4 ┃
┗━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┛
)vars
StarBurst one vide
)fns
Display GenRCD RCD Solve df
)save
NOT SAVED: THIS WS IS CLEAR WS
)wsid Sudoku2
WAS CLEAR WS
)save
2016-11-30 22:08:39 (GMT-5) Sudoku2
Display Solve vide
/-----------------------------------------------\
| WARNING: Only displaying the first solution... |
\-----------------------------------------------/
┏━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┳━━━━┯━━━┯━━━━┓
┃ 1 │ 2 │ 3 ┃ 4 │ 5 │ 6 ┃ 7 │ 8 │ 9 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 7 │ 8 │ 9 ┃ 1 │ 2 │ 3 ┃ 4 │ 5 │ 6 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 4 │ 5 │ 6 ┃ 7 │ 8 │ 9 ┃ 1 │ 2 │ 3 ┃
┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫
┃ 3 │ 1 │ 2 ┃ 8 │ 4 │ 5 ┃ 9 │ 6 │ 7 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 6 │ 9 │ 7 ┃ 3 │ 1 │ 2 ┃ 8 │ 4 │ 5 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 8 │ 4 │ 5 ┃ 6 │ 9 │ 7 ┃ 3 │ 1 │ 2 ┃
┣━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━╋━━━━┿━━━┿━━━━┫
┃ 2 │ 3 │ 1 ┃ 5 │ 7 │ 4 ┃ 6 │ 9 │ 8 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 9 │ 6 │ 8 ┃ 2 │ 3 │ 1 ┃ 5 │ 7 │ 4 ┃
┠────┼───┼────╂────┼───┼────╂────┼───┼────┨
┃ 5 │ 7 │ 4 ┃ 9 │ 6 │ 8 ┃ 2 │ 3 │ 1 ┃
┗━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┻━━━━┷━━━┷━━━━┛
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Bug-apl] A long session with one abort (no damages),
Christian Robert <=