Common list elements: Difference between revisions

Added solution for Action!
No edit summary
(Added solution for Action!)
Line 24:
<pre>
Set([3, 6, 9])
</pre>
 
=={{header|Action!}}==
{{libheader|Action! Tool Kit}}
<lang Action!>INCLUDE "D2:SORT.ACT" ;from the Action! Tool Kit
 
PROC PrintArray(BYTE ARRAY a BYTE len)
BYTE i
 
Print(" [")
IF len>0 THEN
FOR i=0 TO len-1
DO
PrintB(a(i))
IF i<len-1 THEN Put(' ) FI
OD
FI
PrintE("]")
RETURN
 
BYTE FUNC Contains(BYTE ARRAY a BYTE len,value)
BYTE i,count
 
count=0
IF len>0 THEN
FOR i=0 TO len-1
DO
IF a(i)=value THEN count==+1 FI
OD
FI
RETURN (count)
 
PROC CommonListElements(CARD ARRAY arrays
BYTE ARRAY lengths BYTE count
BYTE ARRAY res BYTE POINTER resLen)
BYTE ARRAY a
BYTE i,j,len,value,cnt,maxcnt
 
resLen^=0
IF count=0 THEN RETURN FI
FOR i=0 TO count-1
DO
IF lengths(i)=0 THEN RETURN FI
OD
 
a=arrays(0) len=lengths(0)
IF count=1 THEN
MoveBlock(res,a,len) RETURN
FI
 
FOR i=0 TO len-1
DO
value=a(i)
IF Contains(res,resLen^,value)=0 THEN
maxcnt=Contains(a,len,value)
FOR j=1 TO count-1
DO
cnt=Contains(arrays(j),lengths(j),value)
IF cnt<maxcnt THEN maxcnt=cnt FI
OD
IF maxcnt>0 THEN
FOR j=1 TO maxcnt
DO
res(resLen^)=value resLen^==+1
OD
FI
FI
OD
SortB(res,resLen^,0)
RETURN
 
PROC Test(CARD ARRAY arrays BYTE ARRAY lengths BYTE count)
BYTE ARRAY res(100)
BYTE len,i
 
CommonListElements(arrays,lengths,count,res,@len)
PrintE("Input:")
FOR i=0 TO count-1
DO
PrintArray(arrays(i),lengths(i))
OD
PrintE("Intersection:")
PrintArray(res,len) PutE()
RETURN
 
PROC Main()
CARD ARRAY arrays(3)
BYTE ARRAY
lengths(3)=[8 7 5],
a1(8)=[2 5 1 3 8 9 4 6],
a2(7)=[3 5 6 2 9 8 4],
a3(5)=[1 3 7 6 9],
a4(8)=[2 2 1 3 8 9 4 6],
a5(7)=[3 5 6 2 2 2 4],
a6(5)=[2 3 7 6 2],
a7(5)=[0 1 7 8 9]
BYTE len
 
Put(125) PutE() ;clear the screen
arrays(0)=a1 arrays(1)=a2 arrays(2)=a3
Test(arrays,lengths,3)
arrays(0)=a4 arrays(1)=a5 arrays(2)=a6
Test(arrays,lengths,3)
arrays(2)=a7
Test(arrays,lengths,3)
RETURN</lang>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Common_list_elements.png Screenshot from Atari 8-bit computer]
<pre>
Input:
[2 5 1 3 8 9 4 6]
[3 5 6 2 9 8 4]
[1 3 7 6 9]
Intersection:
[3 6 9]
 
Input:
[2 2 1 3 8 9 4 6]
[3 5 6 2 2 2 4]
[2 3 7 6 2]
Intersection:
[2 2 3 6]
 
Input:
[2 2 1 3 8 9 4 6]
[3 5 6 2 2 2 4]
[0 1 7 8 9]
Intersection:
[]
</pre>
 
Anonymous user