if I now understand your first question correctly,
you want to learn how to shorten a phrase with
much repetitive structure
first of all, you can define 'is' this way
is =: e. # [
your expression looks like
(v N2{g) is (v N1{g) is (v N0{g)
with v equal to mn etc.
if you want to factor out g, you can say
((N2 v@:{ ]) is (N1 v@:{ ]) is (N0 v@:{ ])) g
… and if you define
MN =: mn@:{
you get
((N2 MN ]) is (N1 MN ]) is (N0 MN ])) g
if what I wrote for a1, a2 and a3 is correct,
you may then do
> is&.>/ ((N2 MN ]);(N1 MN ]);(N0 MN ])) g
which may be further simplified to
> is&.>/ (N2;N1;N0) (MN&.>)"0 _ g
and we may substitute back
> is&.>/ (N2;N1;N0) (mn@:{&.>)"0 _ g
I hope this works; and maybe someone wants to
comment on different ways to reduce repetitive
expressions.
But if your main concern was solving the task
of writing a sudoku solver, take a look at the
wiki page Ric pointed to.
Am 14.10.21 um 01:04 schrieb Hauke Rehr:
Concerning the first question:
try adding ] where g used to be,
or inserting an & before the {
(but I didn’t study your code
enough to /know/ this will work)
Am 14.10.21 um 00:52 schrieb 'Viktor Grigorov' via Programming:
Hello,
Recently I saw an article in lobste.rs
(https://www.hillelwayne.com/post/sudoku/) about sudoku solving, and
though t, "it'd be nice to try it J". (Didn't even bother reading it,
but later glancing at it found the author had used J in the end. :D)
I reshape a list of integers of length 81 with blanks being 0s,
row-wise, from top, going left-to-right; into a 4-cube of length 3;
and define 3 auxiliary verbs.
g=:3 3 3 3 $ ...
q=:i.3NB. has missing
hm=:0&=@(<./)@,
NB. intersection
is=:([e.])#[
NB. missing numbers
mn=:13 :'((-.((>:@i.9)e.,y))#(>:@i.9))'
Although one usually solves sudoku (I think) by thinking of
exclusions, as the article's first paragraph or so suggested. I wanted
to find symmetries or something similar, thinking of it as a higher
dimmensional thing, hence the 4-cube. The constraints, or symmtetries,
or whatever they may be are the 9 rows, columns, and faces each
containing 1--9 once. My idea is to try each of the 81 cells until
once with only one overlap is found, break, then repeat until no change.
The sudoku given as an example in the english wikipedia article for
sudoku has an 'easy' example, wherein the center of the center
resolves to 5 using the intersection of the missing numbers of the 5.
row, 5. column, and 5. face; or within the tesseract:
(mn(<1;q;1;q){g)is(mn(<1;1;q;q){g)is(mn(<q;q;1;1){g)
((mn(<1;q;1;q)&{)is(...)is(...))g NB. nope
Taking out g and binding the from doesn't work, giving me just 1--9.
Trying to take out the coordinates doesn't fair well for me either.
How can one shorten the former expression using bindings?
My second question regards is/: if I define a1, a2, a3 as missing
numbers in the row, column, face of some cell, why does is/ a1 a2 a3
give a syntax error, when a1 is a2 is a3 doesn't?
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
--
----------------------
mail written using NEO
neo-layout.org
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm