Talk:Permutations with repetitions: Difference between revisions

From Rosetta Code
Content added Content deleted
(→‎REXX implementation limits: added another variant of REXX version 2. -- ~~~~)
(Is the Mathematica solution correct?)
Line 1: Line 1:
==Mathematica solution incorrect?==
The task description says combination must be produced one at a time.
The Mathematica solution uses Tuples, which return a list of all permutations at once.
Is this a correct solution?
--[[User:Soegaard|Soegaard]] ([[User talk:Soegaard|talk]]) 14:16, 21 May 2013 (UTC)

==REXX implementation limits==
==REXX implementation limits==


Line 6: Line 12:


For Regina REXX 3.3,   3.4,   3.5, REXX gives a SYNTAX error:
For Regina REXX 3.3,   3.4,   3.5, REXX gives a SYNTAX error:
:::::: Error 12 running "C:\xxxxxx.REX", line 29: [Clause > 1024 characters]
:::::: Error"C:\xxxxxx.REX", line 29: [Clause >]


For Regina REXX 3.6,   3.7, REXX "crashes" somewhere less than a statement length of 1932,
For Regina REXX 3.6,   3.7, REXX "crashes" somewhere less than a statement length of 1932,
Line 19: Line 25:
For what's it worth, I believe REXX should raise the SYNTAX condition.
For what's it worth, I believe REXX should raise the SYNTAX condition.


[The reason I mention the older versions of Regina REXX is that Regina REXX 3.3 uses less
[The reason I mention the older versions of Regina REXX is that Regina REXX<br>virtual memory for those REXX programs which use a ''lot'' of stemmed variables (possibly a
<br>virtual memory for those REXX programs which use a ''lot'' of stemmed variables (possibly a
<br>memory leak), so the use of the older Regina release is forced in lieu of a fix.
<br>memory leak), so the use of the older Regina release is forced in lieu of a fix.


For PC/REXX and Personal REXX, it depends on what the RXISA ('''SET''' environmental variable).
For PC/REXX and Personal REXX, it depends on what the RXISA ('''SET''' environmental variable).
<br>These two REXXes either give:
<br>These :
:::::: Error 11 on line 29 of c:\xxxxxx.REX" Control stack full
:::::: Error:\xxxxxx.REX" Control stack full
<br>
<br>
:::::: Memory full: symbol
:::::: Memory full: symbol
:::::: Error 5 on line 29 of C:\xxxxxx.REX: Machine resources exhausted
:::::: Error:\xxxxxx.REX: Machine resources exhausted


somewhere between 568 and 597 bytes.
somewhere between.


It should be noted that most people use the maximum for the RXISA &nbsp; (which is 40K).
It should be noted that most people use the maximum for the RXISA &nbsp; (which is.


As far as I can tell, R4 and ROO have no (real) limitation for the length of an INTERPRET instruction,
As far as I can tell, Rno (real) limitation for the length of an INTERPRET instruction,
<br>and that is probably true of CMS REXX and TSO REXX &nbsp; (it's been too long since I used those
<br>and that is probably true of CMS REXX and TSO REXX &nbsp; (it's been too long since I used those
<br>two flavors of REXX).
<br>.


::::::::::: -- [[User:Gerard Schildberger|Gerard Schildberger]] ([[User talk:Gerard Schildberger|talk]]) 20:52, 12 May 2013 (UTC)
::::::::::: -- [[User:Gerard Schildberger|Gerard Schildberger]] ([[User talk:Gerard Schildberger|talk]]) 20:2013 (UTC)


----
----


==another variant of the 2nd REXX version==
==another variant of the==
This REXX version:
This REXX version:
* simplifies many statements
* simplifies many statements
Line 53: Line 58:
* eliminates an extra &nbsp; ''';''' &nbsp; (semicolon) from the INTERPRET clause
* eliminates an extra &nbsp; ''';''' &nbsp; (semicolon) from the INTERPRET clause
* eliminates the need for counting the permutations
* eliminates the need for counting the permutations
<br>If any of these improvements could/would be of use, that's fine. &nbsp; I plan to delete this entry in a couple of weeks. -- [[User:Gerard Schildberger|Gerard Schildberger]] ([[User talk:Gerard Schildberger|talk]]) 04:32, 13 May 2013 (UTC)
<br>If any of these improvements could/would be of use, that's fine. &nbsp; I plan to delete this entry in a couple of weeks. -- [[User:Gerard Schildberger|Gerard Schildberger]] ([[User talk:Gerard Schildberger|talk]]) 04:2013 (UTC)
<lang rexx>/*REXX*/ parse arg n m s names
<lang rexx>/*REXX*/ parse arg n m s names
if n='' then n=3
if n='' then n=='' then m=(s,'N') then s=left('',s)
if m='' then m=2
if datatype(s,'N') then s=left('',s)


do k=1 to n
do k=names='' then e.k=k
if names='' then e.k=k
else parse var names e.k names
else parse var names e.k names
end /*k*/
end /*k*/
a=''
a=''
do i=1 to m; a=a'do d'i"=1 to n;"; end /*i*/
do i=; a=a'do d'i"=;"; end /*i*/
a=a'z=e.d1'
a=a'z=e.d1'
do j=2 to m; a=a"||s||e.d"j; end /*j*/
do j=; a=a"||s||e.d"j; end /*j*/


a=a';say z'copies(";end",m)
a=a';say z'copies(";end",m)
if m==0 then do; say '1 permutation, a "null".'; exit; end
if m==; say ', a "null".'; exit; end
interpret a
interpret a
say n**m 'permutations'</lang>
say n**m 'permutations'</lang>

Revision as of 14:16, 21 May 2013

Mathematica solution incorrect?

The task description says combination must be produced one at a time. The Mathematica solution uses Tuples, which return a list of all permutations at once. Is this a correct solution? --Soegaard (talk) 14:16, 21 May 2013 (UTC)

REXX implementation limits

Most REXX interpreters have implementation limits on the length of a REXX clause.

For Regina REXX, it depends on the release level.

For Regina REXX 3.3,   3.4,   3.5, REXX gives a SYNTAX error:

Error"C:\xxxxxx.REX", line 29: [Clause >]

For Regina REXX 3.6,   3.7, REXX "crashes" somewhere less than a statement length of 1932,
I haven't pursued this to find the exact byte count.

{By crashing, I mean Microsoft Windows displays a small error "window":

Regina Rexx Launcher (x86) has encountered a problem
and needs to close.   We are sorry for the inconvenience.
(more boilerplate follows).

For what's it worth, I believe REXX should raise the SYNTAX condition.

[The reason I mention the older versions of Regina REXX is that Regina REXX
virtual memory for those REXX programs which use a lot of stemmed variables (possibly a
memory leak), so the use of the older Regina release is forced in lieu of a fix.

For PC/REXX and Personal REXX, it depends on what the RXISA (SET environmental variable).
These :

Error:\xxxxxx.REX" Control stack full


Memory full: symbol
Error:\xxxxxx.REX: Machine resources exhausted

somewhere between.

It should be noted that most people use the maximum for the RXISA   (which is.

As far as I can tell, Rno (real) limitation for the length of an INTERPRET instruction,
and that is probably true of CMS REXX and TSO REXX   (it's been too long since I used those
.

-- Gerard Schildberger (talk) 20:2013 (UTC)

another variant of the

This REXX version:

  • simplifies many statements
  • minimizes the length of the INTERPRET statement
  • eliminates the SELECT statements
  • eliminates a DO loop
  • uses both kinds of quotes strings to make it easier to peruse
  • moves a couple of statements out of the INTERPRET clause
  • uses a positive (logic) instead of a negative IF statement
  • eliminates an extra   ;   (semicolon) from the INTERPRET clause
  • eliminates the need for counting the permutations


If any of these improvements could/would be of use, that's fine.   I plan to delete this entry in a couple of weeks. -- Gerard Schildberger (talk) 04:2013 (UTC) <lang rexx>/*REXX*/ parse arg n m s names if n= then n== then m=(s,'N') then s=left(,s)

       do k=names=   then e.k=k
                     else parse var names e.k names
       end   /*k*/

a=

                   do i=;   a=a'do d'i"=;";   end  /*i*/

a=a'z=e.d1'

                   do j=;   a=a"||s||e.d"j;         end  /*j*/

a=a';say z'copies(";end",m) if m==; say ', a "null".'; exit; end interpret a say n**m 'permutations'</lang>