Letter frequency: Difference between revisions

Content added Content deleted
(Added solution for Action!)
Line 223: Line 223:
(defun letter-freq (str)
(defun letter-freq (str)
(freq-table (coerce str 'list)))</lang>
(freq-table (coerce str 'list)))</lang>

=={{header|Action!}}==
{{libheader|Action! Tool Kit}}
<lang Action!>INCLUDE "D2:PRINTF.ACT" ;from the Action! Tool Kit

CARD ARRAY histogram(256)

PROC Clear()
INT i

FOR i=0 TO 255
DO histogram(i)=0 OD
RETURN

PROC ProcessLine(CHAR ARRAY line)
INT i

FOR i=1 TO line(0)
DO
histogram(line(i))==+1
OD
RETURN

PROC ProcessFile(CHAR ARRAY fname)
CHAR ARRAY line(255)
BYTE dev=[1]

Close(dev)
Open(dev,fname,4)
WHILE Eof(dev)=0
DO
InputSD(dev,line)
ProcessLine(line)
OD
Close(dev)
RETURN

PROC PrintResult()
INT i
CHAR ARRAY s(10)

FOR i=0 TO 255
DO
IF histogram(i) THEN
StrC(histogram(i),s)
PrintF(" %C:%-5S",i,s)
FI
OD
RETURN

PROC Main()
CHAR ARRAY fname="H6:LETTE_KJ.ACT"
BYTE LMARGIN=$52,old

old=LMARGIN
LMARGIN=0 ;remove left margin on the screen

Put(125) PutE() ;clear the screen
PrintF("Reading ""%S""...%E%E",fname)
ProcessFile(fname)
PrintResult()

LMARGIN=old ;restore left margin on the screen
RETURN</lang>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Letter_frequency.png Screenshot from Atari 8-bit computer]
<pre>
Reading "H6:LETTE_KJ.ACT"...

:150 !:1 ":12 $:1 %:5
(:27 ):27 +:1 ,:8 -:1
.:5 0:7 1:5 2:7 4:1
5:10 6:2 ::3 ;:4 =:13
A:25 B:2 C:19 D:12 E:16
F:10 G:4 H:8 I:13 J:1
K:2 L:9 M:5 N:15 O:20
P:16 R:44 S:4 T:20 U:6
W:1 Y:8 [:1 ]:1 _:1
a:16 c:9 d:10 e:49 f:9
g:8 h:9 i:36 l:20 m:14
n:29 o:23 p:2 r:25 s:24
t:24 u:5 v:7
</pre>


=={{header|Ada}}==
=={{header|Ada}}==