RosettaCodeData/Task/Letter-frequency/8th/letter-frequency.8th
2023-07-01 13:44:08 -04:00

40 lines
887 B
Text

needs map/iter
8 var, numtasks
var tasks
0 args "Give filename as param" thrownull
f:slurp >s s:len numtasks @ n:/ n:ceil 1 a:close s:/ a:len numtasks ! constant work
m:new constant result
: print-character-count \ m s -- m
swap over m:@ rot s:size 1 n:= over -1 s:@ nip 31 n:< and if
-1 s:@ nip "<%d>" s:strfmt
else
"'%s'" s:strfmt
then
"%s: %d\n" s:strfmt . ;
: print-results
tasks @ a:len ( a:pop t:result nip ( result -rot m:[]! drop ) m:each drop ) swap times drop
result ( nip array? if ' n:+ 0 a:reduce then ) m:map
m:keys ' s:cmp a:sort ' print-character-count m:iter drop ;
: task \ slice --
"" s:/ ' noop a:group
( nip a:len nip ) m:map ;
: start-tasks
a:new
( work a:pop nip 1 ' task t:task-n a:push ) numtasks @ times
tasks ! ;
: wait-tasks
tasks @ t:wait ;
: app:main
start-tasks
wait-tasks
print-results
bye ;