Re: four digits must total 24



On Dec 10, 11:18�pm, Mensanator <mensana...@xxxxxxx> wrote:
On Dec 10, 10:08 pm, azure <k...@xxxxxx> wrote:

Given four digits, use each only once, use +, -, *, /, to make the
total of 24.
Some newspapers print such a puzzle, some are easy (relatively) some
more obscure, but how would a computer program solve such a puzzle?
2,7,8,9 = 2(7+9)-8
3,5,5,7 = (3*5 -7) *3
1,2,7,7 = (7*7 - 1 )*2
There are hundreds of possible numbers that can be used 1,1,1,8 is
the lowest (1+1+1)*8

No, it isn't. You used 1 more than once.

the highest (in ascending order of course) is
around 6,6,6,6 or a bit higher.
I think one would have to build a database of all solutions, and then
compare the given digits to the db?

You could just do Permutations Without Replacement
of 10 items taken 4 at a time to generate all the
digit patterns.

And a second set of items can be the Permutations
With Replacement of 4 operators taken 3 at a time.

I don't think a program could be
written to solve it.

It's a doddle.

Here's a quick Python solution. I made some
shortcuts to keep it reasonable. First, I made
the operators unique. Also, I'm using simple
integer arithmetic, so 8/9 evaluates to 0.
And no provision for parentheses. Basically,
this is to give you an idea about how to solve
something like this.

As you can see, the program is quite simple
(provided you have a decent language like
Python).

# Python 2.6

import itertools as it

n = '0123456789'

o = '+-*/'

# this is actually Permutations
# WITHOUT Replacement
nnnn = [i for i in it.permutations(n,4)]

# the simple case where operators arn't
# repeated either
ooo = [i for i in it.permutations(o,3)]

# but it.product is actually the Cartesian Product
# aka Permutations WITH Replacement
nnnnooo = [i for i in it.product(nnnn,ooo)]

def j(n,m):
if m:
return ''.join([n,m])
else:
return n

for i in nnnnooo:
# changes ('0123','+-*') to '0+1-2*3'
s = ''.join(map(j,i[0],i[1]))

# we'll try to evaluate every expression
# using whatever the standard operator
# precedence is
try:
v = eval(s)

# when errors happen (divide by 0),
# just ignore
except:
pass

# otherwise, see if it's a solution
# and print if so
else:
if v == 24: print s,


## 0/1+3*8 0/1+4*6 0/1+6*4 0/1+8*3 0/2+3*8
## 0/2+4*6 0/2+6*4 0/2+8*3 0+3/1*8 0/3+4*6
## 0/3+6*4 0+3*8/1 0+4/1*6 0/4+3*8 0+4*6/1
## 0/4+8*3 0/5+3*8 0/5+4*6 0/5+6*4 0/5+8*3
## 0+6/1*4 0+6/2*8 0/6+3*8 0+6*4/1 0+6*8/2
## 0/6+8*3 0+7/2*8 0/7+3*8 0/7+4*6 0/7+6*4
## 0/7+8*3 0+8/1*3 0+8/2*6 0+8*3/1 0/8+4*6
## 0+8*6/2 0/8+6*4 0+8*9/3 0+9/2*6 0+9/3*8
## 0/9+3*8 0/9+4*6 0/9+6*4 0+9*8/3 0/9+8*3
## 1/2+3*8 1/2+4*6 1/2+6*4 1/2+8*3 1/3+4*6
## 1/3+6*4 1+3*9-4 1/4+3*8 1-4+3*9 1+4*7-5
## 1/4+8*3 1+4*8-9 1-4+9*3 1/5+3*8 1/5+4*6
## 1-5+4*7 1/5+6*4 1+5*6-7 1-5+7*4 1/5+8*3
## 1/6+3*8 1+6*5-7 1/6+8*3 1/7+3*8 1+7*4-5
## 1/7+4*6 1-7+5*6 1/7+6*4 1-7+6*5 1/7+8*3
## 1/8+4*6 1+8*4-9 1/8+6*4 1+9*3-4 1/9+3*8
## 1/9+4*6 1-9+4*8 1/9+6*4 1/9+8*3 1-9+8*4
## 2/1*9+6 2/3+4*6 2/3+6*4 2+3*9-5 2/4+3*8
## 2+4*7-6 2/4+8*3 2/5+3*8 2-5+3*9 2/5+4*6
## 2/5+6*4 2+5*6-8 2/5+8*3 2-5+9*3 2/6+3*8
## 2-6+4*7 2+6*5-8 2-6+7*4 2/6+8*3 2/7+3*8
## 2+7*4-6 2/7+4*6 2/7+6*4 2/7+8*3 2*8-1+9
## 2/8+4*6 2-8+5*6 2/8+6*4 2-8+6*5 2*8+9-1
## 2*9-0+6 2*9/1+6 2*9-1+7 2+9*3-5 2/9+3*8
## 2/9+4*6 2*9+6-0 2*9+6/1 2/9+6*4 2*9+7-1
## 2/9+8*3 3/1*5+9 3/1*8+0 3/1*8-0 3*5-0+9
## 3*5/1+9 3/5+4*6 3/5+6*4 3+5*6-9 3*5+9-0
## 3*5+9/1 3*6-1+7 3+6/2*7 3*6-2+8 3+6*5-9
## 3*6+7-1 3+6*7/2 3*6+8-2 3*7-1+4 3*7-2+5
## 3*7+4-1 3/7+4*6 3*7+5-2 3*7-5+8 3+7*6/2
## 3*7+6/2 3/7+6*4 3*7-6+9 3*7+8-5 3*7+9-6
## 3*8+0/1 3*8-0/1 3*8+0/2 3*8-0/2 3*8+0/4
## 3*8-0/4 3*8+0/5 3*8-0/5 3*8+0/6 3*8-0/6
## 3*8+0/7 3*8-0/7 3*8+0/9 3*8-0/9 3*8/1+0
## 3*8/1-0 3*8+1/2 3*8-1/2 3*8+1/4 3*8-1/4
## 3*8+1/5 3*8-1/5 3*8+1/6 3*8-1/6 3*8+1/7
## 3*8-1/7 3*8+1/9 3*8-1/9 3*8+2/4 3*8-2/4
## 3*8+2/5 3*8-2/5 3*8+2/6 3*8-2/6 3*8+2/7
## 3*8-2/7 3*8+2/9 3*8-2/9 3*8+4/5 3*8-4/5
## 3*8+4/6 3*8-4/6 3/8+4*6 3*8+4/7 3*8-4/7
## 3*8+4/9 3*8-4/9 3*8+5/6 3*8-5/6 3*8+5/7
## 3*8-5/7 3*8+5/9 3*8-5/9 3/8+6*4 3*8+6/7
## 3*8-6/7 3*8+6/9 3*8-6/9 3*8+7/9 3*8-7/9
## 3*9+1-4 3*9+2-5 3*9-4+1 3/9+4*6 3*9+4-7
## 3*9-5+2 3-9+5*6 3*9+5-8 3*9-6/2 3/9+6*4
## 3-9+6*5 3*9-7/2 3*9-7+4 3*9-8+5 4-1+3*7
## 4/1*6+0 4/1*6-0 4-1+7*3 4/2*9+6 4+3*7-1
## 4+3*9-7 4*5-2+6 4*5-3+7 4/5+3*8 4*5+6-2
## 4*5+7-3 4+5*8/2 4*5+8/2 4/5+8*3 4*5+9/2
## 4*6+0/1 4*6-0/1 4*6+0/2 4*6-0/2 4*6+0/3
## 4*6-0/3 4*6+0/5 4*6-0/5 4*6+0/7 4*6-0/7
## 4*6+0/8 4*6-0/8 4*6+0/9 4*6-0/9 4*6/1+0
## 4*6/1-0 4*6+1/2 4*6-1/2 4*6+1/3 4*6-1/3
## 4*6+1/5 4*6-1/5 4*6+1/7 4*6-1/7 4*6+1/8
## 4*6-1/8 4*6+1/9 4*6-1/9 4*6+2/3 4*6-2/3
## 4*6+2/5 4*6-2/5 4*6+2/7 4*6-2/7 4*6+2/8
## 4*6-2/8 4*6+2/9 4*6-2/9 4*6+3/5 4*6-3/5
## 4*6+3/7 4*6-3/7 4*6+3/8 4*6-3/8 4/6+3*8
## 4*6+3/9 4*6-3/9 4*6+5/7 4*6-5/7 4*6+5/8
## 4*6-5/8 4*6+5/9 4*6-5/9 4*6+7/8 4*6-7/8
## 4*6+7/9 4*6-7/9 4/6+8*3 4*6+8/9 4*6-8/9
## 4*7+1-5 4*7+2-6 4+7*3-1 4/7+3*8 4-7+3*9
## 4*7-5+1 4*7+5-9 4*7-6+2 4*7-8/2 4/7+8*3
## 4*7-9/2 4-7+9*3 4*7-9+5 4*8+1-9 4+8/2*5
## 4+8*5/2 4*8-9+1 4+9/2*5 4*9/2+6 4+9*3-7
## 4/9+3*8 4/9+8*3 5/1*3+9 5-2+3*7 5-2+7*3
## 5/2*9+6 5*3-0+9 5*3/1+9 5+3*7-2 5*3+9-0
## 5*3+9/1 5+3*9-8 5*4-2+6 5*4-3+7 5*4+6-2
## 5*4+7-3 5+4*7-9 5*4+8/2 5*4+9/2 5*6+1-7
## 5*6+2-8 5*6/2+9 5/6+3*8 5*6+3-9 5*6-7+1
## 5*6-8+2 5/6+8*3 5*6-9+3 5+7*3-2 5/7+3*8
## 5/7+4*6 5+7*4-9 5/7+6*4 5/7+8*3 5*8/2+4
## 5-8+3*9 5/8+4*6 5/8+6*4 5-8+9*3 5+9*3-8
## 5/9+3*8 5/9+4*6 5-9+4*7 5/9+6*4 5-9+7*4
## 5/9+8*3 6-0+2*9 6-0+9*2 6/1+2*9 6/1*4+0
## 6/1*4-0 6/1+9*2 6+2/1*9 6/2+3*7 6-2+4*5
## 6-2+5*4 6/2*5+9 6/2+7*3 6/2*7+3 6/2*8+0
## 6/2*8-0 6+2*9-0 6+2*9/1 6/2*9-3 6*3-1+7
## 6*3-2+8 6*3+7-1 6*3+8-2 6*4+0/1 6*4-0/1
## 6*4+0/2 6*4-0/2 6*4+0/3 6*4-0/3 6*4+0/5
## 6*4-0/5 6*4+0/7 6*4-0/7 6*4+0/8 6*4-0/8
## 6*4+0/9 6*4-0/9 6*4/1+0 6*4/1-0 6*4+1/2
## 6*4-1/2 6*4+1/3 6*4-1/3 6*4+1/5 6*4-1/5
## 6*4+1/7 6*4-1/7 6*4+1/8 6*4-1/8 6*4+1/9
## 6*4-1/9 6*4+2/3 6*4-2/3 6*4+2/5 6*4-2/5
## 6*4+2/7 6*4-2/7 6*4+2/8 6*4-2/8 6+4/2*9
## 6*4+2/9 6*4-2/9 6*4+3/5 6*4-3/5 6*4+3/7
## 6*4-3/7 6*4+3/8 6*4-3/8 6*4+3/9 6*4-3/9
## 6+4*5-2 6*4+5/7 6*4-5/7 6*4+5/8 6*4-5/8
## 6*4+5/9 6*4-5/9 6*4+7/8 6*4-7/8 6*4+7/9
## 6*4-7/9 6*4+8/9 6*4-8/9 6+4*9/2 6*5+1-7
## 6*5+2-8 6+5/2*9 6*5/2+9 6*5+3-9 6+5*4-2
## 6*5-7+1 6*5-8+2 6*5-9+3 6*7/2+3 6/7+3*8
## 6+7/3*9 6+7*8/3 6/7+8*3 6*8/2+0 6*8/2-0
## 6+8/3*9 6+8/4*9 6+8*7/3 6+8*9/4 6+9/1*2
## 6+9*2-0 6+9*2/1 6*9/2-3 6/9+3*8 6+9*4/2
## 6/9+8*3 6+9*8/4 7-1+2*9 7-1+3*6 7-1+6*3
## 7-1+9*2 7/2*5+9 7/2*8+0 7/2*8-0 7+2*9-1
## 7/2*9-3 7*3-1+4 7*3-2+5 7*3+4-1 7-3+4*5
## 7*3+5-2 7-3+5*4 7*3-5+8 7+3*6-1 7*3+6/2
## 7*3-6+9 7*3+8-5 7*3+9-6 7/3*9+6 7*4+1-5
## 7*4+2-6 7*4-5+1 7+4*5-3 7*4+5-9 7*4-6+2
## 7*4-8/2 7*4-9/2 7*4-9+5 7+5*4-3 7*6/2+3
## 7+6*3-1 7*8/2-4 7*8/3+6 7/8+4*6 7/8+6*4
## 7+9*2-1 7/9+3*8 7/9+4*6 7/9+6*4 7/9+8*3
## 8/1*3+0 8/1*3-0 8*2-1+9 8-2+3*6 8/2+4*5
## 8/2+5*4 8/2*5+4 8/2*6+0 8/2*6-0 8-2+6*3
## 8/2*7-4 8*2+9-1 8*3+0/1 8*3-0/1 8*3+0/2
## 8*3-0/2 8*3+0/4 8*3-0/4 8*3+0/5 8*3-0/5
## 8*3+0/6 8*3-0/6 8*3+0/7 8*3-0/7 8*3+0/9
## 8*3-0/9 8*3/1+0 8*3/1-0 8*3+1/2 8*3-1/2
## 8*3+1/4 8*3-1/4 8*3+1/5 8*3-1/5 8*3+1/6
## 8*3-1/6 8*3+1/7 8*3-1/7 8*3+1/9 8*3-1/9
## 8*3+2/4 8*3-2/4 8*3+2/5 8*3-2/5 8*3+2/6
## 8*3-2/6 8*3+2/7 8*3-2/7 8*3+2/9 8*3-2/9
## 8*3+4/5 8*3-4/5 8*3+4/6 8*3-4/6 8*3+4/7
## 8*3-4/7 8*3+4/9 8*3-4/9 8*3+5/6 8*3-5/6
## 8*3+5/7 8*3-5/7 8*3+5/9 8*3-5/9 8+3*6-2
## 8*3+6/7 8*3-6/7 8*3+6/9 8*3-6/9 8+3*7-5
## 8*3+7/9 8*3-7/9 8/3*9+6 8*4+1-9 8*4-9+1
## 8/4*9+6 8*5/2+4 8-5+3*7 8-5+7*3 8*6/2+0
## 8*6/2-0 8+6*3-2 8*7/2-4 8+7*3-5 8*7/3+6
## 8+9/2*4 8*9/3+0 8*9/3-0 8*9/4+6 8/9+4*6
## 8/9+6*4 9-0+3*5 9-0+5*3 9/1*2+6 9-1+2*8
## 9/1+3*5 9/1+5*3 9-1+8*2 9*2-0+6 9*2/1+6
## 9*2-1+7 9/2+4*5 9/2*4+8 9/2+5*4 9/2*5+4
## 9*2+6-0 9/2*6+0 9/2*6-0 9*2+6/1 9*2+7-1
## 9/2*7-4 9+2*8-1 9*3+1-4 9+3/1*5 9*3+2-5
## 9*3-4+1 9*3+4-7 9+3*5-0 9+3*5/1 9*3-5+2
## 9*3+5-8 9*3-6/2 9*3-7/2 9*3-7+4 9+3*7-6
## 9/3*8+0 9/3*8-0 9*3-8+5 9*4/2+6 9+5/1*3
## 9+5*3-0 9+5*3/1 9+5*6/2 9*6/2-3 9+6/2*5
## 9-6+3*7 9+6*5/2 9-6+7*3 9+7/2*5 9+7*3-6
## 9+8*2-1 9*8/3+0 9*8/3-0 9*8/4+6


You could easily do it in a database
also, a trivial excercise in SQL.



My bio-organic CPU (aka brain) looks for the factors of 24,
1,2,3,4,6,8,12 and tries to get one or more of these.
Any other suggestions?- Hide quoted text -

- Show quoted text -

.



Relevant Pages

  • Re: four digits must total 24
    ... Some newspapers print such a puzzle, ... You could just do Permutations Without Replacement ... digit patterns. ...
    (rec.puzzles)
  • Re: permutation problem on SAT
    ... from reduced samples numbers and multilpy the 4 probabilities.. ... Permutations with Replacement ... abba abbb abbc abbd abca abcb abcc abcd abda abdb ...
    (sci.math)
  • new itertools functions in Python 2.6
    ... With the new functions added to itertools in Python 2.6, ... the Carteisan Product will give me Permutaions With Replacement. ... print 'Permutations with replacement' ... ## cca ccb ccc ccd cce cda cdb cdc cdd cde cea ceb ...
    (comp.lang.python)
  • Re: Is this correct for combinations?
    ... � and Combinations without/replacement ... Permutations with/replacement, ... without replacement means items may NOT be repeated ... English allows repeated letters, so we want with/replacement. ...
    (sci.math)
  • Re: Permutations with Repetition
    ... Although this method will work for permutations with replacement, ... of many identical sets. ... the permsrep method runs faster by ...
    (comp.soft-sys.matlab)