I took a quick look for FindInstance and Solve-related questions but came up empty for the aspect that I am curious about. So here is my newbie question:
FindInstance[{
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0
},{s,e,n,d,m,o,r,y},Integers]
runs as quickly as one would expect. But
FindInstance[{
s!=e!=n!=d!=m!=o!=r!=y,
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0
},{s,e,n,d,m,o,r,y},Integers]
takes ages -- long enough that I ran out of patience before MMA was done.
And now I am curious: Why would Mathematica suddenly display less maths ability than a third-grader?
bill_s suggested something much faster, but it is not equivalent to the original problem. The original inequality required all variable values to be different from all other variable values, such that each value can only be used for one variable. The FindInstance statement in Bill's post only compares x[i] to the ith value, but not to the other n-1 values.
In other news,
FindInstance[{
(*s!=e,s!=n,s!=d,s!=m,s!=o,s!=r,s!=y,*)
(*e!=n,e!=d,e!=m,e!=o,e!=r,e!=y,*)
n!=d,n!=m,n!=o,n!=r,n!=y,
d!=m,d!=o,d!=r,d!=y,
m!=o,m!=r,m!=y,
o!=r,o!=y,
r!=y,
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0
},{s,e,n,d,m,o,r,y},Integers]
~1.1 seconds (on my laptop).
FindInstance[{
(*s!=e,s!=n,s!=d,s!=m,s!=o,s!=r,s!=y,*)
e!=n,e!=d,e!=m,e!=o,e!=r,e!=y,
n!=d,n!=m,n!=o,n!=r,n!=y,
d!=m,d!=o,d!=r,d!=y,
m!=o,m!=r,m!=y,
o!=r,o!=y,
r!=y,
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0
},{s,e,n,d,m,o,r,y},Integers]
2nd comment uncommentd. ~20 s.
FindInstance[{
s!=e,s!=n,s!=d,s!=m,s!=o,s!=r,s!=y,
e!=n,e!=d,e!=m,e!=o,e!=r,e!=y,
n!=d,n!=m,n!=o,n!=r,n!=y,
d!=m,d!=o,d!=r,d!=y,
m!=o,m!=r,m!=y,
o!=r,o!=y,
r!=y,
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0
},{s,e,n,d,m,o,r,y},Integers]
Both comments uncommented. ~1 minute.
The original version (multiple inequalities in one condition):
Timing[FindInstance[{
s!=e!=n!=d!=m!=o!=r!=y,
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0},
{s,e,n,d,m,o,r,y},Integers]]
150 seconds!
Reduce @ {s != e != n != d != m != o != r != y, s == 9, r == 8, d == 7, n == 6, e == 5, y == 2, m == 1, o == 0}to remove the inequalities, but this operation itself takes much longer than it arguably should. I would have expected both of your examples to be either fast or slow, rather than one of each. (continued) – Mr.Wizard Feb 02 '14 at 11:13FindInstanceignored the "obvious" values and began a brute-force search, but since it apparently recognizes these in the first example I don't know why it does not in the second. – Mr.Wizard Feb 02 '14 at 11:14a1!=a2!=a3!=a4!=a5is fine. Add!=a6, and MMA is off to the beach. Or add,a5!=a6(far less of a constraint), same thing. In short, I'll remember that it's cheaper to generate a large list of candidate solution by omitting some inequality constraints and to filter the list afterwards. Thanks for your remark onReduce, which reminded me of the possibility of not including the constraints in the first place. – Felix Kasza Feb 02 '14 at 11:46a!=b!=c!=...form and thea!=b,a!=c,a!=d,...,b!=c,b!=d,...,c!=d,...form. – Felix Kasza Feb 07 '14 at 13:06a!=b!=c!=...form and thea!=b,a!=c,a!=d,...,b!=c,b!=d,...,c!=d,...form." The latter takes, for eight vars, 2.5 times as long as the longhand version. The multiplicative factor in the timing here seems to grow more than linearly. (And how does one say that last in correct English? Sorry!) – Felix Kasza Feb 07 '14 at 13:10