Index finite lists of positive integers: Difference between revisions

Content added Content deleted
(Added Perl example, 1st part)
m (→‎{{header|REXX}}: added comments, added whitespace, used more decimal digits and a bigger integer, added wording to the REXX section header..)
Line 636: Line 636:


=={{header|REXX}}==
=={{header|REXX}}==
This REXX version can handle any sized (decimal) positive integers.
<lang rexx>/*REXX program assigns an integer for a finite list of arbitrary positive integers. */
<lang rexx>/*REXX program assigns an integer for a finite list of arbitrary positive integers. */
parse arg L /*obtain optional argument (int list).*/
parse arg $ /*obtain optional argument (int list).*/
if L='' then L=3 14 159 2653589793238 /*Not specified? Then use the default.*/
if $='' | $="," then $=3 14 159 265358979323846 /*Not specified? Then use the default.*/
L=translate(space(L), ',', " ") /*use a commatized list of integers. */
/* [↑] kinda use decimal digits of pi.*/
numeric digits max(9, 2*length(L)) /*ensure enough dec. digits to handle L*/
$= translate( space($), ',', " ") /*use a commatized list of integers. */
numeric digits max(9, 2 * length($) ) /*ensure enough dec. digits to handle $*/


say 'original list=' L /*display the original list of integers*/
say 'original list=' $ /*display the original list of integers*/
N=rank(L); say ' map integer=' N /*generate and display the map integer.*/
N= rank($); say ' map integer=' N /*generate and display the map integer.*/
O=unrank(N); say ' unrank=' O /*generate original integer and display*/
O= unrank(N); say ' unrank=' O /*generate original integer and display*/
exit /*stick a fork in it, we're all done. */
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
rank: return x2d( translate( space( arg(1) ), 'c', ",") )
rank: return x2d( translate( space( arg(1) ), 'c', ",") )
unrank: return space( translate( d2x( arg(1) ), ',', "C") )</lang>
unrank: return space( translate( d2x( arg(1) ), ',', "C") )</lang>
{{out|output|text=&nbsp; when using the default input:}}
{{out|output|text=&nbsp; when using the default input:}}
<pre>
<pre>
original list= 3,14,159,2653589793238
original list= 3,14,159,265358979323846
map integer= 72633563195984664801653304
map integer= 18594192178172074189223245894
unrank= 3,14,159,2653589793238
unrank= 3,14,159,265358979323846
</pre>
</pre>