Anonymous user
Ordered partitions: Difference between revisions
m
→{{header|REXX}}: added/changed comments and whitespace, added whitespace to the output, centered the output better.
SqrtNegInf (talk | contribs) (→{{header|Perl 6}}: provisional fix) |
m (→{{header|REXX}}: added/changed comments and whitespace, added whitespace to the output, centered the output better.) |
||
Line 1,764:
=={{header|REXX}}==
<lang rexx>//*REXX program displays the ordered partitions as:
call orderedPartitions 2,0,2 /*Note: 2,,2 will also work. */
call orderedPartitions 1,1,1
call orderedPartitions 1,2,0,1 /*Note: 1,2,,1
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
orderedPartitions: procedure; #=arg();
t=0 /*T: is the sum of all the arguments.*/
do i=1 for #;
end /*i*/
hdr= ' partitions for:
do j=1 for #; _= arg(j) /* _: is the Jth argument. */
len.j=max(1, _) /*LEN: length of args
bot.j=left(d, _); if _==0 then bot.j=0 /*define the bottom number
top.j=right(left(d,t),_); if _==0 then top.j=0 /* " " top " "
@.j=left(d, t); if _==0 then @.j=0 /*define the digits used for VERIFY. */
hdr=hdr _ /*build (by appending) display header.*/
low=low || bot.j; high=high || top.j /*the low and high numbers for DO below*/
end /*j*/
/* [↓] same as: okD=left('0'd, t+1) */
/*define the legal digits to be used. */
okD=left(0 || d, t + 1) /*define the legal digits to be used. */
say;
say /*show a blank line (as a separator). */
do g=low to high /* [↑] generate the ordered partitions*/
if verify(g, okD) \==0 then iterate /*filter out unwanted
p=1 /*P: is the position of a decimal dig.*/
$= /*$: will be the transformed numbers. */
Line 1,794 ⟶ 1,795:
if verify(_, @.k) \==0 then iterate g /*is the decimal digit not valid ? */
!= /* [↓] validate the decimal number. */
if @.k\==0 then do j=1 for length(_);
if pos(z, $)\==0 then iterate g
!=!','z /*add comma.*/
if j==1
if z<=substr(_, j-1, 1) then iterate g
if pos(z, _, 1 +pos(z, _))\==0 then iterate g
end /*j*/
p=p + len.k /*point to the next decimal
$=$ ' {'strip(
end /*k*/
say
end /*g*/
return</lang>
{{out|output|text= when using the default inputs:}}
<pre>
══════════════════ partitions for: 2 0 2 ══════════════════
{1,2} {} {3,4}
{1,3} {} {2,4}
{1,4} {} {2,3}
{2,3} {} {1,4}
{2,4} {} {1,3}
{3,4} {} {1,2}
══════════════════ partitions for: 1 1 1 ══════════════════
{1} {2} {3}
{1} {3} {2}
{2} {1} {3}
{2} {3} {1}
{3} {1} {2}
{3} {2} {1}
</pre>
|