code challenge: generate minimal expressions using only digits 1,2,3

Tim Wintle tim.wintle at teamrubber.com
Fri Feb 20 13:22:27 EST 2009


On Fri, 2009-02-20 at 16:38 +0000, Nigel Rantor wrote:
> Luke Dunn wrote:

<snip>

That was my initial thought when I read this too - but I'm not certain
that is guaranteed to find a solution (i.e. a solution that's optimal).

I'd welcome a proof that it will though, a few minutes thought hasn't
found a counter-example.

> > yes power towers are allowed
> 
> right, okay, without coding it here's my thought.
> 
> factorise the numbers you have but only allowing primes that exist in 
> your digit set.
> 
> then take that factorisation and turn any repeated runs of digits 
> multiplied by themselves into power-towers
> 
> any remainder can then be created in other ways, starting with a way 
> other than exponentiation that is able to create the largest number, 
> i.e. multiplication, then addition...
> 
> I've not got time to put it into code right now  but it shouldn't be too 
> hard...
> 
> e.g.
> 
> digits : 3, 2, 1
> 
> n : 10
> 10 = 2*5 - but we don't have 5...
> 10 = 3*3 + 1
> 10 = 3^2+1
> 3 digits
> 
> n : 27
> 27 = 3*3*3
> 27 = 3^3
> 2 digits
> 
> n : 33
> 33 = 3*3*3 + 6
> 33 = 3*3*3 + 3*2
> 33 = 3^3+3*2
> 4 digits
> 
> > exponentiation, multiplication, division, addition and subtraction. 
> > Brackets when necessary but length is sorted on number of digits not 
> > number of operators plus digits.
> >  
> > I always try my homework myself first. in 38 years of life I've 
> > learned only to do what i want, if I wanted everyone else to do my work 
> > for me I'd be a management consultant !
> > On Fri, Feb 20, 2009 at 3:52 PM, Luke Dunn <luke.dunn at gmail.com 
> > <mailto:luke.dunn at gmail.com>> wrote:
> > 
> >     I am teaching myself coding. No university or school, so i guess its
> >     homework if you like. i am interested in algorithms generally, after
> >     doing some of Project Euler. Of course my own learning process is
> >     best served by just getting on with it but sometimes you will do
> >     that while other times you might just choose to ask for help. if no
> >     one suggests then i will probably shelve it and come back to it
> >     myself when I'm fresh.
> >      
> >     no it's not a real world problem but my grounding is in math so i
> >     like pure stuff anyway. don't see how that is a problem, as a math
> >     person i accept the validity of pure research conducted just for
> >     curiosity and aesthetic satisfaction. it often finds an application
> >     later anyway
> >      
> >     Thanks for your helpful suggestion of trying other methods and i
> >     will do that in time. my motive was to share an interesting problem
> >     because a human of moderate math education can sit down with this
> >     and find minimal solutions easily but the intuition they use is
> >     quite subtle, hence the idea of converting the human heuristic into
> >     an algorithm became of interest, and particularly a recursive one. i
> >     find that the development of a piece of recursion usually comes as
> >     an 'aha', and since i hadn't had such a moment, i thought i'd turn
> >     the problem loose on the public. also i found no online reference to
> >     this problem so it seemed ripe for sharing.
> > 
> >     On Fri, Feb 20, 2009 at 3:39 PM, Nigel Rantor <wiggly at wiggly.org
> >     <mailto:wiggly at wiggly.org>> wrote:
> > 
> >         Trip Technician wrote:
> > 
> >             anyone interested in looking at the following problem.
> > 
> > 
> >         if you can give me a good reason why this is not homework I'd
> >         love to hear it...I just don't see how this is a real problem.
> > 
> > 
> >             we are trying to express numbers as minimal expressions
> >             using only the
> >             digits one two and three, with conventional arithmetic. so for
> >             instance
> > 
> >             33 = 2^(3+2)+1 = 3^3+(3*2)
> > 
> >             are both minimal, using 4 digits but
> > 
> >             33 = ((3+2)*2+1)*3
> > 
> >             using 5 is not.
> > 
> >             I have tried coding a function to return the minimal
> >             representation
> >             for any integer, but haven't cracked it so far. The naive first
> >             attempt is to generate lots of random strings, eval() them
> >             and sort by
> >             size and value. this is inelegant and slow.
> > 
> > 
> >         Wow. Okay, what other ways have you tried so far? Or are you
> >         beating your head against the "search the entire problem space"
> >         solution still?
> > 
> >         This problem smells a lot like factorisation, so I would think
> >         of it in terms of wanting to reduce the target number using as
> >         few operations as possible.
> > 
> >         If you allow exponentiation that's going to be your biggest
> >         hitter so you know that the best you can do using 2 digits is
> >         n^n where n is the largest digit you allow yourself.
> > 
> >         Are you going to allow things like n^n^n or not?
> > 
> >          n
> > 
> > 
> > 
> > 
> 
> --
> http://mail.python.org/mailman/listinfo/python-list




More information about the Python-list mailing list