Range expansion: Difference between revisions
Content added Content deleted
(Added solution for Action!) |
|||
Line 94: | Line 94: | ||
<pre> |
<pre> |
||
[-6,-3,-2,-1,3,4,5,7,8,9,10,11,14,15,17,18,19,20] |
[-6,-3,-2,-1,3,4,5,7,8,9,10,11,14,15,17,18,19,20] |
||
</pre> |
|||
=={{header|Action!}}== |
|||
<lang Action!>BYTE FUNC Find(CHAR ARRAY text CHAR c BYTE start) |
|||
BYTE i |
|||
i=start |
|||
WHILE i<=text(0) |
|||
DO |
|||
IF text(i)=c THEN |
|||
RETURN (i) |
|||
FI |
|||
i==+1 |
|||
OD |
|||
RETURN (0) |
|||
PROC ProcessItem(CHAR ARRAY text INT ARRAY res INT POINTER size) |
|||
BYTE pos |
|||
INT start,end,i |
|||
CHAR ARRAY tmp(200) |
|||
pos=Find(text,'-,2) |
|||
IF pos=0 THEN |
|||
res(size^)=ValI(text) |
|||
size^==+1 |
|||
ELSE |
|||
SCopyS(tmp,text,1,pos-1) |
|||
start=ValI(tmp) |
|||
SCopyS(tmp,text,pos+1,text(0)) |
|||
end=ValI(tmp) |
|||
FOR i=start TO end |
|||
DO |
|||
res(size^)=i |
|||
size^==+1 |
|||
OD |
|||
FI |
|||
RETURN |
|||
PROC RangeExtraction(CHAR ARRAY text INT ARRAY res INT POINTER size) |
|||
BYTE i,pos |
|||
CHAR ARRAY tmp(200) |
|||
i=1 size^=0 |
|||
WHILE i<=text(0) |
|||
DO |
|||
pos=Find(text,',,i) |
|||
IF pos=0 THEN |
|||
SCopyS(tmp,text,i,text(0)) |
|||
i=text(0)+1 |
|||
ELSE |
|||
SCopyS(tmp,text,i,pos-1) |
|||
i=pos+1 |
|||
FI |
|||
ProcessItem(tmp,res,size) |
|||
OD |
|||
RETURN |
|||
PROC PrintArray(INT ARRAY a INT size) |
|||
INT i |
|||
Put('[) |
|||
FOR i=0 TO size-1 |
|||
DO |
|||
IF i>0 THEN Put(' ) FI |
|||
PrintI(a(i)) |
|||
OD |
|||
Put(']) PutE() |
|||
RETURN |
|||
PROC Main() |
|||
INT ARRAY res(100) |
|||
INT size |
|||
RangeExtraction("-6,-3--1,3-5,7-11,14,15,17-20",res,@size) |
|||
PrintArray(res,size) |
|||
RETURN</lang> |
|||
{{out}} |
|||
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Range_expansion.png Screenshot from Atari 8-bit computer] |
|||
<pre> |
|||
[-6 -3 -2 -1 3 4 5 7 8 9 10 11 14 15 17 18 19 20] |
|||
</pre> |
</pre> |
||