<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
  <channel>
    <title>MaplePrimes - answers and comments on Question, How to produce 100 with Maple?</title>
    <link>http://www.mapleprimes.com/questions/141999-How-To-Produce-100-With-Maple</link>
    <language>en-us</language>
    <copyright>2026 Maplesoft, A Division of Waterloo Maple Inc.</copyright>
    <generator>Maplesoft Document System</generator>
    <lastBuildDate>Thu, 11 Jun 2026 02:45:16 GMT</lastBuildDate>
    <pubDate>Thu, 11 Jun 2026 02:45:16 GMT</pubDate>
    <itunes:subtitle />
    <itunes:summary />
    <description>The latest answers and comments added to the Question, How to produce 100 with Maple?</description>
    <image>
      <url>http://www.mapleprimes.com/images/mapleprimeswhite.jpg</url>
      <title>MaplePrimes - answers and comments on Question, How to produce 100 with Maple?</title>
      <link>http://www.mapleprimes.com/questions/141999-How-To-Produce-100-With-Maple</link>
    </image>
    <item>
      <title>Probably not what you're looking for, but</title>
      <link>http://www.mapleprimes.com/questions/141999-How-To-Produce-100-With-Maple?ref=Feed:MaplePrimes:How to produce 100 with Maple?:Comments#answer142005</link>
      <itunes:summary>&lt;p&gt;Probably not what you're looking for, but sounds like this:&amp;nbsp;&lt;a href="http://www.maplesoft.com/applications/view.aspx?SID=4901"&gt;http://www.maplesoft.com/applications/view.aspx?SID=4901&lt;/a&gt;&lt;/p&gt;</itunes:summary>
      <description>&lt;p&gt;Probably not what you're looking for, but sounds like this:&amp;nbsp;&lt;a href="http://www.maplesoft.com/applications/view.aspx?SID=4901"&gt;http://www.maplesoft.com/applications/view.aspx?SID=4901&lt;/a&gt;&lt;/p&gt;</description>
      <guid>142005</guid>
      <pubDate>Thu, 03 Jan 2013 17:46:31 Z</pubDate>
      <itunes:author>Samir Khan</itunes:author>
      <author>Samir Khan</author>
    </item>
    <item>
      <title>Dudney's Digital Century Puzzle</title>
      <link>http://www.mapleprimes.com/questions/141999-How-To-Produce-100-With-Maple?ref=Feed:MaplePrimes:How to produce 100 with Maple?:Comments#answer142023</link>
      <itunes:summary>&lt;p&gt;This is known as Dudney's Digital Century puzzle.&amp;nbsp; Coincidentally, I included a simplified version of it as an example in the Iterator package I added to the Maple Application Center a few weeks ago.&amp;nbsp; Actually, that isn't quite accurate; the example is in an update to the package that I haven't yet uploaded.&amp;nbsp; I've been adding various features to it over the holidays.&amp;nbsp; Here is how I solved the simplified version (restricting the operators to just&amp;nbsp; addition and&amp;nbsp; multiplication, with no parentheses).&lt;/p&gt;
&lt;pre&gt;with(Iterator):&lt;br&gt;&lt;br&gt;# Assign a procedure that converts a boolean Vector to the relevant&lt;br&gt;# string.&lt;br&gt;&lt;br&gt;VecToStr := proc(V)&lt;br&gt;local i;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cat("",seq('(i,`if`(V[i]=0,"+","*"))',i=1..8),"9=100")&lt;br&gt;end proc:&lt;br&gt;&lt;br&gt;# Construct an iterator that steps through all 8-bit boolean Vectors,&lt;br&gt;# keeps those for which the equation is true, and returns the&lt;br&gt;# transformed string.&lt;br&gt;iter := BinaryGrayCode(8&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , 'accept' = (V -&amp;gt; evalb(parse(VecToStr(V))))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , 'transformer' = VecToStr&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ):&lt;br&gt;# Use the iterator to generate all the solutions.&lt;br&gt;seq(s, s=iter);&lt;br&gt;&amp;nbsp;&amp;nbsp; "1*2*3*4+5+6+7*8+9=100", "1*2*3+4+5+6+7+8*9=100", "1+2+3+4+5+6+7+8*9=100"&lt;/pre&gt;
&lt;p&gt;Here's a quick extension to handle all four arithmetic operations, but without parentheses.&lt;/p&gt;
&lt;pre&gt;VecToStr := proc(V)&lt;br&gt;local i,ops;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cat("",seq('(i,"+*/-"[V[i]+1])',i=1..8),"9=100")&lt;br&gt;end proc:&lt;br&gt;&lt;br&gt;iter := MixedRadixTuples([4$8]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , 'accept' = (V -&amp;gt; evalb(parse(VecToStr(V))))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , 'transformer' = VecToStr&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ):&lt;br&gt;seq(s, s=iter);&lt;br&gt;"1+2+3+4+5+6+7+8*9=100", "1+2+3-4*5+6*7+8*9=100", "1+2*3+4*5-6+7+8*9=100",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "1+2*3*4*5/6+7+8*9=100", "1+2-3*4+5*6+7+8*9=100", "1+2-3*4-5+6*7+8*9=100",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "1*2*3+4+5+6+7+8*9=100", "1*2*3*4+5+6+7*8+9=100", "1*2*3*4+5+6-7+8*9=100",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "1*2*3-4*5+6*7+8*9=100", "1-2+3*4*5+6*7+8-9=100", "1-2+3*4*5-6+7*8-9=100",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "1-2*3+4*5+6+7+8*9=100", "1-2*3-4+5*6+7+8*9=100", "1-2*3-4-5+6*7+8*9=100"&lt;br&gt;&lt;br&gt;&lt;/pre&gt;</itunes:summary>
      <description>&lt;p&gt;This is known as Dudney's Digital Century puzzle.&amp;nbsp; Coincidentally, I included a simplified version of it as an example in the Iterator package I added to the Maple Application Center a few weeks ago.&amp;nbsp; Actually, that isn't quite accurate; the example is in an update to the package that I haven't yet uploaded.&amp;nbsp; I've been adding various features to it over the holidays.&amp;nbsp; Here is how I solved the simplified version (restricting the operators to just&amp;nbsp; addition and&amp;nbsp; multiplication, with no parentheses).&lt;/p&gt;
&lt;pre&gt;with(Iterator):&lt;br&gt;&lt;br&gt;# Assign a procedure that converts a boolean Vector to the relevant&lt;br&gt;# string.&lt;br&gt;&lt;br&gt;VecToStr := proc(V)&lt;br&gt;local i;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cat("",seq('(i,`if`(V[i]=0,"+","*"))',i=1..8),"9=100")&lt;br&gt;end proc:&lt;br&gt;&lt;br&gt;# Construct an iterator that steps through all 8-bit boolean Vectors,&lt;br&gt;# keeps those for which the equation is true, and returns the&lt;br&gt;# transformed string.&lt;br&gt;iter := BinaryGrayCode(8&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , 'accept' = (V -&amp;gt; evalb(parse(VecToStr(V))))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , 'transformer' = VecToStr&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ):&lt;br&gt;# Use the iterator to generate all the solutions.&lt;br&gt;seq(s, s=iter);&lt;br&gt;&amp;nbsp;&amp;nbsp; "1*2*3*4+5+6+7*8+9=100", "1*2*3+4+5+6+7+8*9=100", "1+2+3+4+5+6+7+8*9=100"&lt;/pre&gt;
&lt;p&gt;Here's a quick extension to handle all four arithmetic operations, but without parentheses.&lt;/p&gt;
&lt;pre&gt;VecToStr := proc(V)&lt;br&gt;local i,ops;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cat("",seq('(i,"+*/-"[V[i]+1])',i=1..8),"9=100")&lt;br&gt;end proc:&lt;br&gt;&lt;br&gt;iter := MixedRadixTuples([4$8]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , 'accept' = (V -&amp;gt; evalb(parse(VecToStr(V))))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , 'transformer' = VecToStr&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ):&lt;br&gt;seq(s, s=iter);&lt;br&gt;"1+2+3+4+5+6+7+8*9=100", "1+2+3-4*5+6*7+8*9=100", "1+2*3+4*5-6+7+8*9=100",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "1+2*3*4*5/6+7+8*9=100", "1+2-3*4+5*6+7+8*9=100", "1+2-3*4-5+6*7+8*9=100",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "1*2*3+4+5+6+7+8*9=100", "1*2*3*4+5+6+7*8+9=100", "1*2*3*4+5+6-7+8*9=100",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "1*2*3-4*5+6*7+8*9=100", "1-2+3*4*5+6*7+8-9=100", "1-2+3*4*5-6+7*8-9=100",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "1-2*3+4*5+6+7+8*9=100", "1-2*3-4+5*6+7+8*9=100", "1-2*3-4-5+6*7+8*9=100"&lt;br&gt;&lt;br&gt;&lt;/pre&gt;</description>
      <guid>142023</guid>
      <pubDate>Fri, 04 Jan 2013 10:09:40 Z</pubDate>
      <itunes:author>Joe Riel</itunes:author>
      <author>Joe Riel</author>
    </item>
    <item>
      <title>Handling Parentheses</title>
      <link>http://www.mapleprimes.com/questions/141999-How-To-Produce-100-With-Maple?ref=Feed:MaplePrimes:How to produce 100 with Maple?:Comments#answer142229</link>
      <itunes:summary>&lt;p&gt;You can use the Iterator package to solve this puzzle with nested parentheses.&amp;nbsp; To step through all possible groupings,&amp;nbsp; use the BinaryTrees iterator.&amp;nbsp; The following appliable module does that. Understanding precisely how it does it might take a bit of study. This isn't ideal; one really should prune the trees to prevent, for example, both the following branches (1 + 2) + 3 and 1 + (2 + 3) from appearing.&amp;nbsp; Doing so isn't hard but I'll leave that as an exercise.&amp;nbsp; Looping through all possibilities takes a while; here I illustrate the operation using n=6, which limits the tree to six internal nodes (7 leaves), so the digits are from 1 to 7 rather than 1 to 9.&lt;/p&gt;
&lt;pre&gt;DigitalPuzzle := module()&lt;br&gt;export ModuleApply;&lt;br&gt;local Expr, Format;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Given the L and R Arrays from the BinaryTree iterator,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # construct an expression corresponding to the tree,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # where o[v[i]] is the arithmetic operator of the i-th&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # internal node (the v-Array is used to change the operators&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # for a give tree).&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Expr := proc(L,R)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; local leaf,prefix;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; global o,v;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; leaf := 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prefix := proc(i)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i=0 then leaf := leaf+1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else 'o'['v'[i]](prefix(L[i]),prefix(R[i]));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prefix(1);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc:&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Given the L and R arrays of the current tree, and an array, v,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # that maps the internal nodes to the arithmetic operators (stored&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # in o), return a string corresponding to the desired equality.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # This is only used for formatting a correct result; speed is&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # not a significant issue.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Format := proc(L,R,v,o,targ)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; local leaf,infix;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; leaf := 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infix := proc(i)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i=0 then leaf := leaf+1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else sprintf("(%A %A %A)", infix(L[i]), o[v[i]], infix(R[i]));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf("%s = %a", infix(1), targ);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc:&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModuleApply := proc(n::posint, targ:=100)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; local A,Accept,cnt,ops,Op,BT,LR,s;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uses Iterator;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Array of arithmetic operators&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ops := Array(0..3,[`+`,`*`,`-`,`/`]);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Template for the accept predicate.&amp;nbsp; The try/catch is&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # needed to handle division by zero.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Accept := proc(v,o:=ops)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evalb(_ex=targ);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; false;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end try;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A := ()-&amp;gt;NULL; # dummy procedure that is replaced&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Construct an iterator that generates all possible values of&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # arithmetic operators (as an Array with values from 0 to 3&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # corresponding to the four operations), but accepts (outputs)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # only those that meet the criteria.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Op := MixedRadixTuples([4$n], 'accept'=A);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Construct an iterator that generates all binary trees&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # with n-internal nodes (and n+1 leaves).&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BT := BinaryTrees(n);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt := 0; # success counter&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Loop through all binary trees&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for LR in BT do&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Reassign A, which is the accept predicate in&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # the Op[erator] iterator, specializing it to the&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # selected tree.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A := subs(_ex=Expr(LR),op(Accept));&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Loop through all possibilities of assigning&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # the arithmentic operators to the internal nodes of the&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # tree, keeping only those that evaluate to the target.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for s in Op do&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt := cnt+1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%s\n", Format(LR,s,ops,targ));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reset(Op);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc:&lt;br&gt;end module:&lt;br&gt;&lt;br&gt;CodeTools:-Usage(DigitalPuzzle(6));&lt;br&gt;(1 + (((((2 + 3) * 4) * 5) + 6) - 7)) = 100&lt;br&gt;((1 + ((((2 + 3) * 4) * 5) + 6)) - 7) = 100&lt;br&gt;(((1 + (((2 + 3) * 4) * 5)) + 6) - 7) = 100&lt;br&gt;(((1 - 2) + 3) + (((4 * 5) - 6) * 7)) = 100&lt;br&gt;(1 - ((2 * 3) - (((4 + 5) + 6) * 7))) = 100&lt;br&gt;(1 - ((2 - 3) - (((4 * 5) - 6) * 7))) = 100&lt;br&gt;((1 - (2 * 3)) + (((4 + 5) + 6) * 7)) = 100&lt;br&gt;((1 - (2 - 3)) + (((4 * 5) - 6) * 7)) = 100&lt;br&gt;((1 - 2) + (3 + (((4 * 5) - 6) * 7))) = 100&lt;br&gt;((1 * 2) * (3 + (((4 + 5) * 6) - 7))) = 100&lt;br&gt;(1 * (2 * (3 + (((4 + 5) * 6) - 7)))) = 100&lt;br&gt;(1 - (2 - (3 + (((4 * 5) - 6) * 7)))) = 100&lt;br&gt;((1 * 2) * ((3 + ((4 + 5) * 6)) - 7)) = 100&lt;br&gt;(1 * (2 * ((3 + ((4 + 5) * 6)) - 7))) = 100&lt;br&gt;((1 + ((2 * 3) * 4)) * ((5 + 6) - 7)) = 100&lt;br&gt;((1 + (2 * (3 * 4))) * ((5 + 6) - 7)) = 100&lt;br&gt;(1 - ((2 * 3) - ((4 + (5 + 6)) * 7))) = 100&lt;br&gt;((1 - (2 * 3)) + ((4 + (5 + 6)) * 7)) = 100&lt;br&gt;(1 + ((((2 + 3) * (4 * 5)) + 6) - 7)) = 100&lt;br&gt;((1 + (((2 + 3) * (4 * 5)) + 6)) - 7) = 100&lt;br&gt;(1 + ((((2 + 3) * 4) * 5) + (6 - 7))) = 100&lt;br&gt;((1 + (((2 + 3) * 4) * 5)) + (6 - 7)) = 100&lt;br&gt;(((1 + ((2 + 3) * (4 * 5))) + 6) - 7) = 100&lt;br&gt;((1 - (2 * 3)) * ((4 * 5) * (6 - 7))) = 100&lt;br&gt;((1 - (2 * 3)) * ((4 * 5) / (6 - 7))) = 100&lt;br&gt;((((1 - (2 * 3)) * 4) * 5) * (6 - 7)) = 100&lt;br&gt;((((1 - (2 * 3)) * 4) * 5) / (6 - 7)) = 100&lt;br&gt;(1 + (((2 + 3) * (4 * 5)) + (6 - 7))) = 100&lt;br&gt;((1 + ((2 + 3) * (4 * 5))) + (6 - 7)) = 100&lt;br&gt;((1 + ((2 * 3) * 4)) * (5 + (6 - 7))) = 100&lt;br&gt;(((1 - (2 * 3)) * (4 * 5)) * (6 - 7)) = 100&lt;br&gt;(((1 - (2 * 3)) * (4 * 5)) / (6 - 7)) = 100&lt;br&gt;(((1 - (2 * 3)) * 4) * (5 * (6 - 7))) = 100&lt;br&gt;(((1 - (2 * 3)) * 4) * (5 / (6 - 7))) = 100&lt;br&gt;((1 + (2 * (3 * 4))) * (5 + (6 - 7))) = 100&lt;br&gt;((1 - (2 * 3)) * (4 * (5 * (6 - 7)))) = 100&lt;br&gt;((1 - (2 * 3)) * (4 * (5 / (6 - 7)))) = 100&lt;br&gt;memory used=370.72MiB, alloc change=24.00MiB, cpu time=6.43s, real time=6.60s&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 37&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/pre&gt;</itunes:summary>
      <description>&lt;p&gt;You can use the Iterator package to solve this puzzle with nested parentheses.&amp;nbsp; To step through all possible groupings,&amp;nbsp; use the BinaryTrees iterator.&amp;nbsp; The following appliable module does that. Understanding precisely how it does it might take a bit of study. This isn't ideal; one really should prune the trees to prevent, for example, both the following branches (1 + 2) + 3 and 1 + (2 + 3) from appearing.&amp;nbsp; Doing so isn't hard but I'll leave that as an exercise.&amp;nbsp; Looping through all possibilities takes a while; here I illustrate the operation using n=6, which limits the tree to six internal nodes (7 leaves), so the digits are from 1 to 7 rather than 1 to 9.&lt;/p&gt;
&lt;pre&gt;DigitalPuzzle := module()&lt;br&gt;export ModuleApply;&lt;br&gt;local Expr, Format;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Given the L and R Arrays from the BinaryTree iterator,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # construct an expression corresponding to the tree,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # where o[v[i]] is the arithmetic operator of the i-th&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # internal node (the v-Array is used to change the operators&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # for a give tree).&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Expr := proc(L,R)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; local leaf,prefix;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; global o,v;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; leaf := 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prefix := proc(i)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i=0 then leaf := leaf+1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else 'o'['v'[i]](prefix(L[i]),prefix(R[i]));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prefix(1);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc:&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Given the L and R arrays of the current tree, and an array, v,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # that maps the internal nodes to the arithmetic operators (stored&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # in o), return a string corresponding to the desired equality.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # This is only used for formatting a correct result; speed is&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # not a significant issue.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Format := proc(L,R,v,o,targ)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; local leaf,infix;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; leaf := 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infix := proc(i)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i=0 then leaf := leaf+1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else sprintf("(%A %A %A)", infix(L[i]), o[v[i]], infix(R[i]));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf("%s = %a", infix(1), targ);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc:&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModuleApply := proc(n::posint, targ:=100)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; local A,Accept,cnt,ops,Op,BT,LR,s;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uses Iterator;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Array of arithmetic operators&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ops := Array(0..3,[`+`,`*`,`-`,`/`]);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Template for the accept predicate.&amp;nbsp; The try/catch is&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # needed to handle division by zero.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Accept := proc(v,o:=ops)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evalb(_ex=targ);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; false;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end try;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A := ()-&amp;gt;NULL; # dummy procedure that is replaced&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Construct an iterator that generates all possible values of&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # arithmetic operators (as an Array with values from 0 to 3&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # corresponding to the four operations), but accepts (outputs)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # only those that meet the criteria.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Op := MixedRadixTuples([4$n], 'accept'=A);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Construct an iterator that generates all binary trees&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # with n-internal nodes (and n+1 leaves).&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BT := BinaryTrees(n);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt := 0; # success counter&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Loop through all binary trees&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for LR in BT do&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Reassign A, which is the accept predicate in&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # the Op[erator] iterator, specializing it to the&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # selected tree.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A := subs(_ex=Expr(LR),op(Accept));&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Loop through all possibilities of assigning&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # the arithmentic operators to the internal nodes of the&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # tree, keeping only those that evaluate to the target.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for s in Op do&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt := cnt+1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%s\n", Format(LR,s,ops,targ));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reset(Op);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end proc:&lt;br&gt;end module:&lt;br&gt;&lt;br&gt;CodeTools:-Usage(DigitalPuzzle(6));&lt;br&gt;(1 + (((((2 + 3) * 4) * 5) + 6) - 7)) = 100&lt;br&gt;((1 + ((((2 + 3) * 4) * 5) + 6)) - 7) = 100&lt;br&gt;(((1 + (((2 + 3) * 4) * 5)) + 6) - 7) = 100&lt;br&gt;(((1 - 2) + 3) + (((4 * 5) - 6) * 7)) = 100&lt;br&gt;(1 - ((2 * 3) - (((4 + 5) + 6) * 7))) = 100&lt;br&gt;(1 - ((2 - 3) - (((4 * 5) - 6) * 7))) = 100&lt;br&gt;((1 - (2 * 3)) + (((4 + 5) + 6) * 7)) = 100&lt;br&gt;((1 - (2 - 3)) + (((4 * 5) - 6) * 7)) = 100&lt;br&gt;((1 - 2) + (3 + (((4 * 5) - 6) * 7))) = 100&lt;br&gt;((1 * 2) * (3 + (((4 + 5) * 6) - 7))) = 100&lt;br&gt;(1 * (2 * (3 + (((4 + 5) * 6) - 7)))) = 100&lt;br&gt;(1 - (2 - (3 + (((4 * 5) - 6) * 7)))) = 100&lt;br&gt;((1 * 2) * ((3 + ((4 + 5) * 6)) - 7)) = 100&lt;br&gt;(1 * (2 * ((3 + ((4 + 5) * 6)) - 7))) = 100&lt;br&gt;((1 + ((2 * 3) * 4)) * ((5 + 6) - 7)) = 100&lt;br&gt;((1 + (2 * (3 * 4))) * ((5 + 6) - 7)) = 100&lt;br&gt;(1 - ((2 * 3) - ((4 + (5 + 6)) * 7))) = 100&lt;br&gt;((1 - (2 * 3)) + ((4 + (5 + 6)) * 7)) = 100&lt;br&gt;(1 + ((((2 + 3) * (4 * 5)) + 6) - 7)) = 100&lt;br&gt;((1 + (((2 + 3) * (4 * 5)) + 6)) - 7) = 100&lt;br&gt;(1 + ((((2 + 3) * 4) * 5) + (6 - 7))) = 100&lt;br&gt;((1 + (((2 + 3) * 4) * 5)) + (6 - 7)) = 100&lt;br&gt;(((1 + ((2 + 3) * (4 * 5))) + 6) - 7) = 100&lt;br&gt;((1 - (2 * 3)) * ((4 * 5) * (6 - 7))) = 100&lt;br&gt;((1 - (2 * 3)) * ((4 * 5) / (6 - 7))) = 100&lt;br&gt;((((1 - (2 * 3)) * 4) * 5) * (6 - 7)) = 100&lt;br&gt;((((1 - (2 * 3)) * 4) * 5) / (6 - 7)) = 100&lt;br&gt;(1 + (((2 + 3) * (4 * 5)) + (6 - 7))) = 100&lt;br&gt;((1 + ((2 + 3) * (4 * 5))) + (6 - 7)) = 100&lt;br&gt;((1 + ((2 * 3) * 4)) * (5 + (6 - 7))) = 100&lt;br&gt;(((1 - (2 * 3)) * (4 * 5)) * (6 - 7)) = 100&lt;br&gt;(((1 - (2 * 3)) * (4 * 5)) / (6 - 7)) = 100&lt;br&gt;(((1 - (2 * 3)) * 4) * (5 * (6 - 7))) = 100&lt;br&gt;(((1 - (2 * 3)) * 4) * (5 / (6 - 7))) = 100&lt;br&gt;((1 + (2 * (3 * 4))) * (5 + (6 - 7))) = 100&lt;br&gt;((1 - (2 * 3)) * (4 * (5 * (6 - 7)))) = 100&lt;br&gt;((1 - (2 * 3)) * (4 * (5 / (6 - 7)))) = 100&lt;br&gt;memory used=370.72MiB, alloc change=24.00MiB, cpu time=6.43s, real time=6.60s&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 37&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/pre&gt;</description>
      <guid>142229</guid>
      <pubDate>Sat, 12 Jan 2013 12:30:48 Z</pubDate>
      <itunes:author>Joe Riel</itunes:author>
      <author>Joe Riel</author>
    </item>
    <item>
      <title>Partial solution</title>
      <link>http://www.mapleprimes.com/questions/141999-How-To-Produce-100-With-Maple?ref=Feed:MaplePrimes:How to produce 100 with Maple?:Comments#comment142006</link>
      <itunes:summary>&lt;p&gt;Yes, this is a solution in the case 123456 if&amp;nbsp; rearrangements of the digits are allowed.&lt;/p&gt;
&lt;p&gt;PS. Could you explain how to read your code?&lt;/p&gt;</itunes:summary>
      <description>&lt;p&gt;Yes, this is a solution in the case 123456 if&amp;nbsp; rearrangements of the digits are allowed.&lt;/p&gt;
&lt;p&gt;PS. Could you explain how to read your code?&lt;/p&gt;</description>
      <guid>142006</guid>
      <pubDate>Thu, 03 Jan 2013 18:19:06 Z</pubDate>
      <itunes:author>Markiyan Hirnyk</itunes:author>
      <author>Markiyan Hirnyk</author>
    </item>
    <item>
      <title>Vote up</title>
      <link>http://www.mapleprimes.com/questions/141999-How-To-Produce-100-With-Maple?ref=Feed:MaplePrimes:How to produce 100 with Maple?:Comments#comment142030</link>
      <itunes:summary>&lt;p&gt;Many thanks from me to you for your interest to the question and your constructive answer. The question is a hit: I saw it asked in a few places. The motivation to ask that in MaplePrimes was my longing to improve my programming skills. This aim is partially achieved. I still don't understand the difficulties with parentheses, substraction, and division (The Samir Khan's code admits the ones.). A good code is a commented code. As a George Soros Associate Professor I can firmly state that comments are useful&amp;nbsp; for both readers and&amp;nbsp; writers (When explaining something, your mind becomes better organized.).&lt;/p&gt;</itunes:summary>
      <description>&lt;p&gt;Many thanks from me to you for your interest to the question and your constructive answer. The question is a hit: I saw it asked in a few places. The motivation to ask that in MaplePrimes was my longing to improve my programming skills. This aim is partially achieved. I still don't understand the difficulties with parentheses, substraction, and division (The Samir Khan's code admits the ones.). A good code is a commented code. As a George Soros Associate Professor I can firmly state that comments are useful&amp;nbsp; for both readers and&amp;nbsp; writers (When explaining something, your mind becomes better organized.).&lt;/p&gt;</description>
      <guid>142030</guid>
      <pubDate>Fri, 04 Jan 2013 16:03:39 Z</pubDate>
      <itunes:author>Markiyan Hirnyk</itunes:author>
      <author>Markiyan Hirnyk</author>
    </item>
    <item>
      <title>The output of your suggested code</title>
      <link>http://www.mapleprimes.com/questions/141999-How-To-Produce-100-With-Maple?ref=Feed:MaplePrimes:How to produce 100 with Maple?:Comments#comment142036</link>
      <itunes:summary>&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Error, invalid input: too many and/or wrong type of arguments passed to MixedRadixTuples:-MixedRadixTuples; first unused argument is accept = (proc (V) options operator, arrow; evalb(parse(VecToStr(V))) end proc)&lt;/span&gt;&lt;br&gt;See &lt;a href="/view.aspx?sf=142036/451111/executed_code.mw"&gt;executed_code.mw&lt;/a&gt;&lt;/p&gt;</itunes:summary>
      <description>&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Error, invalid input: too many and/or wrong type of arguments passed to MixedRadixTuples:-MixedRadixTuples; first unused argument is accept = (proc (V) options operator, arrow; evalb(parse(VecToStr(V))) end proc)&lt;/span&gt;&lt;br&gt;See &lt;a href="/view.aspx?sf=142036/451111/executed_code.mw"&gt;executed_code.mw&lt;/a&gt;&lt;/p&gt;</description>
      <guid>142036</guid>
      <pubDate>Fri, 04 Jan 2013 21:11:22 Z</pubDate>
      <itunes:author>Markiyan Hirnyk</itunes:author>
      <author>Markiyan Hirnyk</author>
    </item>
  </channel>
</rss>