Averages/Mode: Difference between revisions

Content added Content deleted
(add BQN)
(Added solution for Action!)
Line 30: Line 30:
[6]
[6]
[1, 4]
[1, 4]
</pre>

=={{header|Action!}}==
<lang Action!>DEFINE MAX="100"
INT ARRAY keys(MAX)
INT ARRAY values(MAX)
BYTE count

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 ClearMap()
count=0
RETURN

PROC AddToMap(INT a)
INT i,index

index=-1
IF count>0 THEN
FOR i=0 TO count-1
DO
IF keys(i)=a THEN
index=i EXIT
FI
OD
FI
IF index=-1 THEN
keys(count)=a
values(count)=1
count==+1
ELSE
values(index)==+1
FI
RETURN

PROC Mode(INT ARRAY a INT aSize INT ARRAY m INT POINTER mSize)
INT i,mx

ClearMap()
FOR i=0 TO aSize-1
DO
AddToMap(a(i))
OD

mx=0
FOR i=0 TO count-1
DO
IF values(i)>mx THEN
mx=values(i)
FI
OD

mSize^=0
FOR i=0 TO count-1
DO
IF values(i)=mx THEN
m(mSize^)=keys(i)
mSize^==+1
FI
OD
RETURN

PROC Test(INT ARRAY a INT size)
INT ARRAY m(MAX)
INT mSize

PrintE("Array:") PrintArray(a,size)
Mode(a,size,m,@mSize)
PrintE("Mode:") PrintArray(m,mSize)
PutE()
RETURN

PROC Main()
INT ARRAY a=[1 3 5 7 3 1 3 7 7 3 3]
INT ARRAY b=[7 13 5 13 7 2 7 10 13]
INT ARRAY c=[5]

Test(a,11)
Test(b,9)
Test(c,1)
RETURN</lang>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Mode.png Screenshot from Atari 8-bit computer]
<pre>
Array:
[1 3 5 7 3 1 3 7 7 3 3]
Mode:
[3]

Array:
[7 13 5 13 7 2 7 10 13]
Mode:
[7 13]

Array:
[5]
Mode:
[5]
</pre>
</pre>