Anonymous user
Paraffins: Difference between revisions
m
→{{header|REXX}}: added whitespace, used a smaller font for the output.
m (→{{header|REXX}}: added whitespace, used a smaller font for the output.) |
|||
Line 2,366:
<lang rexx>/*REXX program enumerates (without repetition) the # of paraffins with N atoms of carbon*/
parse arg nodes . /*obtain optional argument from the CL.*/
if nodes=='' | nodes=="," then nodes=
rooted. = 0;
unrooted. = 0;
numeric digits max(9, nodes % 2)
w= length(nodes)
say right(0, w) unrooted.0
/* [↓] process all nodes (up to NODES)*/
do C=1 for nodes; h= C %
call tree 0, C, C, 1, 1 /* [↓] if # of carbon atoms is even···*/
if C//2==0 then unrooted.C= unrooted.C + rooted.h * (rooted.h + 1) % 2
say right(C, w) unrooted.C
end /*C*/
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
tree: procedure expose rooted. unrooted. nodes #. /*this function is recursive.*/
parse arg br,n,L,sum,cnt; nm= n - 1; LL= L + L; brp= br + 1
do b=brp to 4; sum= sum + n; if sum>nodes then leave
if b==4 then if LL>=sum then leave
if b==brp then #.br= rooted.n * cnt
else #.br= #.br * (rooted.n + b - brp) % (b - br)
if LL<sum then unrooted.sum= unrooted.sum + #.br
if b==4 then leave
rooted.sum = rooted.sum + #.br
do m=nm by -1 for nm; call tree b, m, L, sum, #.br; end /*m*/
end /*b*/ /* ↑↑↑↑↑↑↑↑↑ recursive invocation of TREE. */
return</lang>
{{out|output|text= when using the input of: <tt> 600 </tt>}}
<br><br>(Shown at
<pre style="font-size:
0 1
1 1
|