53 lines
1.3 KiB
Text
53 lines
1.3 KiB
Text
use System.IO.File;
|
|
use Collection;
|
|
use RegEx;
|
|
|
|
class Rosetta {
|
|
function : Main(args : String[]) ~ Nil {
|
|
if(args->Size() <> 1) {
|
|
return;
|
|
};
|
|
|
|
input := FileReader->ReadFile(args[0]);
|
|
filter := RegEx->New("\\w+");
|
|
words := filter->Find(input);
|
|
|
|
word_counts := StringMap->New();
|
|
each(i : words) {
|
|
word := words->Get(i)->As(String);
|
|
if(word <> Nil & word->Size() > 0) {
|
|
word := word->ToLower();
|
|
if(word_counts->Has(word)) {
|
|
count := word_counts->Find(word)->As(IntHolder);
|
|
count->Set(count->Get() + 1);
|
|
}
|
|
else {
|
|
word_counts->Insert(word, IntHolder->New(1));
|
|
};
|
|
};
|
|
};
|
|
|
|
count_words := IntMap->New();
|
|
words := word_counts->GetKeys();
|
|
each(i : words) {
|
|
word := words->Get(i)->As(String);
|
|
count := word_counts->Find(word)->As(IntHolder);
|
|
count_words->Insert(count->Get(), word);
|
|
};
|
|
|
|
counts := count_words->GetKeys();
|
|
counts->Sort();
|
|
|
|
index := 1;
|
|
"Rank\tWord\tFrequency"->PrintLine();
|
|
"====\t====\t===="->PrintLine();
|
|
for(i := count_words->Size() - 1; i >= 0; i -= 1;) {
|
|
if(count_words->Size() - 10 <= i) {
|
|
count := counts->Get(i);
|
|
word := count_words->Find(count)->As(String);
|
|
"{$index}\t{$word}\t{$count}"->PrintLine();
|
|
index += 1;
|
|
};
|
|
};
|
|
}
|
|
}
|