Range expansion: Difference between revisions

Rename Perl 6 -> Raku, alphabetize, minor clean-up
No edit summary
(Rename Perl 6 -> Raku, alphabetize, minor clean-up)
Line 95:
[-6,-3,-2,-1,3,4,5,7,8,9,10,11,14,15,17,18,19,20]
</pre>
 
=={{header|Ada}}==
The function Expand takes a string and returns a corresponding array of integers.
Line 387 ⟶ 388:
-6,-3,-2,-1,3,4,5,7,8,9,10,11,14,15,17,18,19,20
</pre>
 
 
=={{header|AppleScript}}==
Line 1,964:
{{out}}
<pre>-6, -3, -2, -1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20</pre>
 
 
=={{header|Liberty BASIC}}==
Line 2,671 ⟶ 2,670:
eval $range;
}</lang>
 
=={{header|Perl 6}}==
 
{{works with|Rakudo|2016.07}}
<lang Perl6>sub range-expand (Str $range-description) {
my token number { '-'? \d+ }
my token range { (<&number>) '-' (<&number>) }
$range-description
.split(',')
.map({ .match(&range) ?? $0..$1 !! +$_ })
.flat
say range-expand('-6,-3--1,3-5,7-11,14,15,17-20').join(', ');</lang>
 
{{out}}
<pre>-6, -3, -2, -1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20</pre>
 
<br>
Alternatively, using a grammar:
 
<lang perl6>grammar RangeList {
token TOP { <term>* % ',' { make $<term>.map(*.made) } }
token term { [<range>|<num>] { make ($<num> // $<range>).made } }
token range { <num> '-' <num> { make +$<num>[0] .. +$<num>[1] } }
token num { '-'? \d+ { make +$/ } }
 
say RangeList.parse('-6,-3--1,3-5,7-11,14,15,17-20').made.flat.join(', ');</lang>
 
{{out}}
<pre>-6, -3, -2, -1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20</pre>
 
=={{header|Phix}}==
Line 3,336 ⟶ 3,302:
'(1 2 30.0 31.0 32.0)
</pre>
 
=={{header|Perl 6Raku}}==
(formerly Perl 6)
 
{{works with|Rakudo|2016.07}}
<lang Perl6perl6>sub range-expand (Str $range-description) {
my token number { '-'? \d+ }
my token range { (<&number>) '-' (<&number>) }
$range-description
.split(',')
.map({ .match(&range) ?? $0..$1 !! +$_ })
.flat
say range-expand('-6,-3--1,3-5,7-11,14,15,17-20').join(', ');</lang>
 
{{out}}
<pre>-6, -3, -2, -1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20</pre>
 
<br>
Alternatively, using a grammar:
 
<lang perl6>grammar RangeList {
token TOP { <term>* % ',' { make $<term>.map(*.made) } }
token term { [<range>|<num>] { make ($<num> // $<range>).made } }
token range { <num> '-' <num> { make +$<num>[0] .. +$<num>[1] } }
token num { '-'? \d+ { make +$/ } }
 
say RangeList.parse('-6,-3--1,3-5,7-11,14,15,17-20').made.flat.join(', ');</lang>
 
{{out}}
<pre>-6, -3, -2, -1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20</pre>
 
=={{header|Raven}}==
10,327

edits