[Tutor] making math problems mmmm fun
max baseman
dos.fool at gmail.com
Tue Sep 11 05:02:09 CEST 2007
wow this is a bit over my range of knowledge im impressed :) ill be
happy to look at it but i think i will see if i can end up writing
my own :) worse case ill do it by hand will not take long hmm wow
thanks :)
On Sep 10, 2007, at 8:47 PM, John Fouhy wrote:
> #######
> import operator
>
> binops = { 'add':operator.add,
> 'sub':operator.sub,
> 'mul':operator.mul,
> 'div':operator.truediv,
> 'pow':operator.pow,
> 'join':lambda x, y: int(str(x)+str(y))
> }
>
> patterns = { 'add':'(%s) + (%s)',
> 'sub':'(%s) - (%s)',
> 'mul':'(%s) * (%s)',
> 'div':'(%s) / (%s)',
> 'pow':'(%s)^(%s)',
> 'join':'%s%s'
> }
>
> def combine(digits):
> """ digits :: set(int)
>
> output :: [ (value, expression) ]
> value :: int
> expression :: str -- string representation of math expression
> """
>
> # We're going to solve this instance in terms of the solution
> # for a list with one fewer digit.
>
> # Because of non-commutativity, we have to do this twice for each
> # possible start digit.
>
> res = []
>
> # Base case.
> if len(digits) == 1:
> return [(digit, str(digit)) for digit in digits]
>
> # Otherwise..
> for digit in digits:
> remainder = digits - set([digit])
>
> for val, exp in combine(remainder):
> for binop in binops:
> if binop == 'join':
> # Ensure we only join numbers, not expressions.
> try:
> int(exp)
> except ValueError:
> continue
>
> try:
> newval1 = binops[binop](digit, val)
> pattern1 = patterns[binop] % (str(digit), exp)
> res.append((newval1, pattern1))
> except ZeroDivisionError:
> pass
>
> try:
> newval2 = binops[binop](val, digit)
> pattern2 = patterns[binop] % (exp, str(digit))
> res.append((newval2, pattern2))
> except ZeroDivisionError:
> pass
>
> return res
>
> if __name__ == '__main__':
> res = combine(set(range(1, 4)))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/tutor/attachments/20070910/0e66d30b/attachment-0001.htm
More information about the Tutor
mailing list