Решение на Text Info от Иван Велков

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

Към профила на Иван Велков

Резултати

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

Код

pub struct TextInfo {
text: String,
}
impl TextInfo {
pub fn new(s: &str) -> Self {
Self {
text: String::from(s),
}
}
pub fn char_count(&self) -> usize {
self.text.chars().count()
}
pub fn alphabetic_count(&self) -> usize {
let mut cnt = 0;
for i in self.text.chars() {
if TextInfo::is_alphabetic(i){
cnt = cnt + 1;
}
}
cnt
}
pub fn latin_letter_count(&self) -> usize {
let mut cnt = 0;
for i in self.text.chars() {
if TextInfo::is_latin(i) {
cnt = cnt + 1;
}
}
cnt
}
pub fn cyrillic_letter_count(&self) -> usize {
let mut cnt = 0;
for i in self.text.chars() {
if TextInfo::is_cyrillic(i) {
cnt = cnt + 1;
}
}
cnt
}
pub fn word_count(&self) -> usize {
let mut cnt = 0;
let mut is_last_alpha = false;
for i in self.text.chars() {
let check = TextInfo::is_alphabetic(i);
if is_last_alpha && !check {
cnt = cnt + 1;
}
is_last_alpha = check;
}
if TextInfo::is_alphabetic(self.text.chars().last().unwrap()) {
cnt = cnt + 1;
}
cnt
}
pub fn sentence_count(&self) -> usize {
let mut cnt = 0;
let mut is_last_alpha = false;
for i in self.text.chars() {
let current = TextInfo::is_punctuation(i);
if is_last_alpha && current {
cnt = cnt + 1;
}
is_last_alpha = !current;
}
cnt
}
pub fn emotion(&self) -> String{
let mut open_emoji = 0;
let mut thinking_emoji = 0;
let mut neutral_emoji = 0;
let mut is_last_alpha = false;
for i in self.text.chars() {
if is_last_alpha {
match i {
'!' => open_emoji += 1,
'?' => thinking_emoji += 1,
'.' => neutral_emoji += 1,
_ => (),
}
}
is_last_alpha = !TextInfo::is_punctuation(i);
}
let check1 = open_emoji > thinking_emoji;
let check2 = open_emoji > neutral_emoji;
let check3 = thinking_emoji > neutral_emoji;
if check1 && check2 {
return String::from("😮");
}
if !check1 && check3 {
return String::from("🤔");
}

check1 до check3 не са от най-добрите имена на променливи :). В случая, може би ще е по-четимо просто да не си правиш отделни променливи за тях, а да сложиш проверките в клаузите. Иначе няма как да прочетеш тези if-клаузи без да скачаш няколко реда по-нагоре да се консултираш със "чакай, какво беше check1?"

String::from("😐")
}
fn is_alphabetic(c: char) -> bool {
TextInfo::is_latin(c) || TextInfo::is_cyrillic(c)
}
fn is_latin(c: char) -> bool {
(c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')
}
fn is_cyrillic(c: char) -> bool {
(c >= 'А' && c <= 'Я') || (c >= 'а' && c <= 'я')
}
fn is_punctuation(c: char) -> bool {
c == '?' || c == '!' || c == '.'
}
}

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

Compiling solution v0.1.0 (file:///tmp/d20171026-5817-1bcr5nc/solution)
    Finished dev [unoptimized + debuginfo] target(s) in 3.45 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 ... FAILED
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

failures:

---- solution_test::test_empty_string stdout ----
	thread 'solution_test::test_empty_string' panicked at 'called `Option::unwrap()` on a `None` value', src/libcore/option.rs:335:20
note: Run with `RUST_BACKTRACE=1` for a backtrace.


failures:
    solution_test::test_empty_string

test result: FAILED. 14 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out

error: test failed, to rerun pass '--test solution_test'

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

Иван качи първо решение на 25.10.2017 21:03 (преди почти 8 години)