A evo i nesto u rustu:
Code:
use std::fs::File;
use std::io::prelude::*;
use std::collections::*;
fn main()-> Result<(),String> {
let args:Vec<_> = std::env::args().collect();
if args.len() != 2 {
return Err(format!("expected: {} file_name",args[0]));
}
let mut f = File::open(args[1].clone()).unwrap();
let mut contents = String::new();
let _ = f.read_to_string(&mut contents);
let filtered = contents.chars().filter(|c|c.is_alphabetic()).collect::<String>().to_lowercase();
let mut hm:HashMap<char,i32>=HashMap::new();
for l in filtered.chars() {
let r = hm.entry(l).or_insert(0);
*r += 1;
}
let mut sorted:Vec<(i32,char)> = Vec::new();
for (k,v) in hm {
sorted.push((v,k));
}
sorted.sort();
for (k,v) in sorted.iter().rev() {
println!("{} = {}",k,v);
}
println!("chars {}", sorted.iter().fold(0,|s,(num,_)|s+num));
Ok(())
}
za poredjenje izmenjeni python:
Code:
import sys
import re
import string
import operator
# Provera da su dati svi argumenti.
if len(sys.argv) != 2:
print("Unesi ime fajla za slovnu analizu. Npr. >> 154.py fajl.txt")
quit()
sva_slova = {}
# uklanjanje interpunkcije
try:
with open(sys.argv[1], 'r', encoding='utf-8') as f:
tekst = f.read()
tekst1 = tekst.lower()
samo_reci = re.sub('['+string.punctuation+', 0-9, r\n, ' ']', '', tekst1)
sorta = ''.join(sorted(samo_reci))
for slovo in sorta:
if slovo in sva_slova:
sva_slova[slovo] += 1
else:
sva_slova[slovo] = 1
except:
print("Dogodila se greška pri učitavanju fajla.")
quit()
# pravljenje liste sa tuplama, kako bi se dobio ispis
lista = [(k, v) for k, v in sva_slova.items()]
print()
print('Ovo je učestalost po broju ponavljanja:')
lista.sort(key = operator.itemgetter(1))
for item in lista:
print(str(item[1]) + str(' = ') + str(item[0]))
# izračunavanje ukupnog broja slova u tekst
zbir = 0
lista.reverse()
for char in lista:
zbir += char[1]
print('Ukupno u tekstu {} slova'.format(zbir))
/code]
A sad vreme izvrsavanja:
rust:
Code:
~/examples/rust >>> time ./letter_count bible.txt
437385 = e
323802 = t
292940 = h
291659 = a
253611 = o
236506 = n
214156 = s
209062 = i
179738 = r
160755 = d
140235 = l
91170 = u
90659 = m
83210 = f
66586 = w
61424 = c
59411 = y
58877 = g
52207 = b
46827 = p
32426 = v
26908 = k
13753 = j
4810 = z
2662 = x
953 = q
chars 3431732
./letter_count bible.txt 0.16s user 0.00s system 99% cpu 0.168 total
python:
Code:
/examples/rust >>> time python letter_count.py bible.txt
Ovo je učestalost po broju ponavljanja:
953 = q
2662 = x
4810 = z
13753 = j
26908 = k
31102 =
32426 = v
46827 = p
52207 = b
58877 = g
59411 = y
61424 = c
66586 = w
83210 = f
90659 = m
91170 = u
140235 = l
160755 = d
209062 = i
214156 = s
236506 = n
253611 = o
291659 = a
292940 = h
323802 = t
437385 = e
Ukupno u tekstu 3283096 slova
python letter_count.py bible.txt 1.02s user 0.08s system 99% cpu 1.097 total
Kao sto vidis rust je vise nego 5 puta brzi :)