Решение на Text Info от Радослав Върбанов
Към профила на Радослав Върбанов
Резултати
- 15 точки от тестове
- 0 бонус точки
- 15 точки общо
- 15 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
Compiling solution v0.1.0 (file:///tmp/d20171026-5817-js3pqr/solution)
invalid expression
!4836 = !DIExpression(6, 34, 0, 6)
invalid expression
!4837 = !DIExpression(6, 34, 0, 6)
Finished dev [unoptimized + debuginfo] target(s) in 3.78 secs
Running target/debug/deps/solution-f5dd4e94aa395cae
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Running target/debug/deps/solution_test-c3b431457e2a7a27
running 15 tests
test solution_test::test_alpha_count ... ok
test solution_test::test_alpha_count_2 ... ok
test solution_test::test_char_count ... ok
test solution_test::test_cyrillic_letter_count ... ok
test solution_test::test_emotions ... ok
test solution_test::test_emotions_repeated_punctuation ... ok
test solution_test::test_empty_string ... ok
test solution_test::test_latin_letter_count ... ok
test solution_test::test_sentence_count ... ok
test solution_test::test_sentence_count_2 ... ok
test solution_test::test_triple_dots_count ... ok
test solution_test::test_unicode_char_count ... ok
test solution_test::test_word_count ... ok
test solution_test::test_word_count_2 ... ok
test solution_test::test_word_count_3 ... ok
test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Doc-tests solution
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
История (2 версии и 3 коментара)
Радослав качи решение на 25.10.2017 22:20 (преди около 8 години)
Вместо .map(...).filter, в случая мисля, че директно можеш да ползваш filter. А ако latin_char не ти е дефинирано върху self, а в глобалния scope (забележи, че това е безопасно -- ако я дефинираш с fn, вместо с pub fn, тя ще бъде видима само в този модул), то ще можеш да напишеш това: self.text.chars().filter(latin_char).count().
Не ти трябва да алокираш вектор тук. Мисля, че спокойно можеш вместо .collect(), да продължиш със .filter(...).count(). Това ти избягва алокирането на нова динамична памет за вектора, която ще се използва само за броене.
Този код като че ли се получава малко сложничък. И аз пробвах в един момент с нещо такова, и си мисля, че е по-лесно просто да се направи императивно:
pub fn sentence_count(&self) -> usize {
let mut count = 0;
let mut in_sentence = false;
for c in self.text.chars() {
if !in_sentence && !is_sentence_terminator(c) {
in_sentence = true;
} else if in_sentence && is_sentence_terminator(c) {
in_sentence = false;
count += 1;
}
}
count
}
Алтернативно, ето какво измислих като по-fancy решение:
pub fn sentence_count(&self) -> usize {
self.text
.split_terminator(is_sentence_terminator)
.filter(|s| s.len() > 0)
.count()
}
Нали, това в категория "да видиш някакви други интересни решения".

Вместо
.map(...).filter, в случая мисля, че директно можеш да ползвашfilter. А акоlatin_charне ти е дефинирано върхуself, а в глобалния scope (забележи, че това е безопасно -- ако я дефинираш сfn, вместо сpub fn, тя ще бъде видима само в този модул), то ще можеш да напишеш това:self.text.chars().filter(latin_char).count().Не ти трябва да алокираш вектор тук. Мисля, че спокойно можеш вместо
.collect(), да продължиш със.filter(...).count(). Това ти избягва алокирането на нова динамична памет за вектора, която ще се използва само за броене.Този код като че ли се получава малко сложничък. И аз пробвах в един момент с нещо такова, и си мисля, че е по-лесно просто да се направи императивно:
Алтернативно, ето какво измислих като по-fancy решение:
Нали, това в категория "да видиш някакви други интересни решения".