Решение на Text Info от Пламен Пенев

Обратно към всички решения

Към профила на Пламен Пенев

Резултати

  • 15 точки от тестове
  • 0 бонус точки
  • 15 точки общо
  • 15 успешни тест(а)
  • 0 неуспешни тест(а)

Код

#[cfg(test)]
mod tests {
#[test]
fn it_works() {
}
}
pub struct TextInfo {
text: String
}
impl TextInfo {
pub fn new(s: &str) -> Self {
TextInfo {
text: String::from(s),
}
}
pub fn char_count(&self) -> usize {
self.text.chars().count()
}
pub fn cyrillic_letter_count(&self) -> usize {
let mut counter = 0;
for c in self.text.chars() {
if c.is_alphabetic() && c >= 'А' && c <= 'я' {
counter+=1;
}
}
counter
}
pub fn latin_letter_count(&self) -> usize {
let mut counter = 0;
for c in self.text.chars() {
if c.is_alphabetic() && c >= 'A' && c <= 'z' {
counter +=1 ;
}
}
counter
}
pub fn alphabetic_count(&self) -> usize {
let mut counter = 0;
for c in self.text.chars() {
if c.is_alphabetic() {
counter += 1;
}
}
counter
}
pub fn word_count(&self) -> usize {
let mut word_counter = 0;
let mut new_word : bool = false;
for c in self.text.chars() {
if c.is_alphabetic() {
if new_word == false {
new_word = true;
word_counter += 1;
}
} else {
new_word = false;
}
}
word_counter
}
pub fn sentence_count(&self) -> usize {
let mut sentence_counter = 0;
let mut new_sentese : bool = false;
for c in self.text.chars() {
if c!= '!' && c != '?' && c!='.' {
if new_sentese == false {
new_sentese = true;
}

Не ти трябва тази if-клауза. Ако new_sentence е true, тогава клаузата няма да се извика, но дори да се извика, просто променливата пак ще се set-не на true. Подозирам, че просто си го оставил, заради if-клаузата по-горе, но подозирам, че и тя може да се махне, ако внимаваш с логиката. Може да пробваш да си поиграеш тук с булевите променливи, като имаш подръка пълния тест в rust-homework репо-то.

Also, new_sentence, не new_sentese :). Написал си sentence_counter правилно, ама другата променлива не си я уцелил :).

} else if new_sentese == true {
new_sentese = false;
sentence_counter += 1;
}
}
sentence_counter
}
pub fn emotion(&self) -> String {
let mut new_sentese : bool = false;
let mut emotions : (u32,u32,u32) = (0,0,0);
for c in self.text.chars() {
if c!= '!' && c != '?' && c!='.' {
if new_sentese == false {
new_sentese = true;
}
} else if new_sentese == true {
new_sentese = false;
match c {
'!' => emotions.0 += 1,
'?' => emotions.1 += 1,
'.' => emotions.2 += 1,
_ => ()
};
}
}
if emotions.0 > emotions.1 && emotions.0 > emotions.2 {
String::from("😮")
} else if emotions.1 > emotions.0 && emotions.1 > emotions.2 {
String::from("🤔")
} else {
String::from("😐")
}
}
}

Лог от изпълнението

Compiling solution v0.1.0 (file:///tmp/d20171026-5817-18ervvz/solution)
    Finished dev [unoptimized + debuginfo] target(s) in 3.24 secs
     Running target/debug/deps/solution-f5dd4e94aa395cae

running 1 test
test tests::it_works ... ok

test result: ok. 1 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

История (1 версия и 1 коментар)

Пламен качи първо решение на 25.10.2017 13:17 (преди почти 8 години)