RosettaCodeData/Task/Remove-duplicate-elements/Action-/remove-duplicate-elements.a...

61 lines
1.0 KiB
Plaintext

INCLUDE "D2:SORT.ACT" ;from the Action! Tool Kit
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 RemoveDuplicates(INT ARRAY src INT srcLen
INT ARRAY dst INT POINTER dstLen)
INT i
CHAR curr,prev
IF srcLen=0 THEN
dstLen^=0
RETURN
FI
SortI(src,srcLen,0)
dst(0)=src(0)
dstLen^=1 prev=src(0)
FOR i=1 TO srcLen-1
DO
curr=src(i)
IF curr#prev THEN
dst(dstLen^)=curr
dstLen^==+1
FI
prev=curr
OD
RETURN
PROC Test(INT ARRAY src INT srcLen)
INT ARRAY dst(100)
INT dstLen
PrintE("Input array:")
PrintArray(src,srcLen)
RemoveDuplicates(src,srcLen,dst,@dstLen)
PrintE("Unique items:")
PrintArray(dst,dstLen)
PutE()
RETURN
PROC Main()
INT ARRAY src1(9)=[1 3 65534 0 12 1 65534 52 3]
INT ARRAY src2(26)=[3 2 1 3 2 5 2 1 6 3 4 2 5 3 1 5 3 5 2 1 3 7 4 5 7 6]
INT ARRAY src3(1)=[6502]
Put(125) PutE() ;clear screen
Test(src1,9)
Test(src2,26)
Test(src3,1)
RETURN