Решение на Text Info от Юлиян Сербезки

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

Към профила на Юлиян Сербезки

Резултати

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

Код

pub struct TextInfo {
text: String
}
impl TextInfo {
pub fn new(s: &str) -> Self {
TextInfo {
text: String::from(s)
}
}
pub fn char_count(&self) -> usize {
let mut count: usize = 0;
for _ in self.text.chars() {
count += 1;
}
count
}
pub fn alphabetic_count(&self) -> usize {
let mut count: usize = 0;
for symbol in self.text.chars() {
if symbol.is_alphabetic() {
count += 1;
}
}
count
}
pub fn latin_letter_count(&self) -> usize {
let mut count: usize = 0;
//Тази глупав начин е колкото да работи..
//имах по-добра стратегия - да използвам AsciiExt и да проверя дали символа е от Ascii таблицата
//но компилатора гърмеше под предтекст че този feature е нестабилен.
let alphabet_lower = vec!['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
let alphabet_upper = vec!['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
for symbol in self.text.chars() {
if alphabet_lower.iter().any(|e| e == &symbol) || alphabet_upper.iter().any(|e| e == &symbol) {
count += 1;
}
}
count
}
pub fn cyrillic_letter_count(&self) -> usize {
self.alphabetic_count() - self.latin_letter_count()
}
//pub fn word_count(&self) -> usize {
//let mut count: usize = 0;
//Тук много исках да използвам РегЕкс, обаче поради някаква причина компилатора гърмеше..
//(да, бях добавил extern crate regex; по-горе и също regex = "0.2" в Cargo.toml)
//}
pub fn sentence_count(&self) -> usize {
let mut count: usize = 0;
let mut prev_symbol: char = '?';
for symbol in self.text.chars() {
if (symbol == '?' || symbol == '!' || symbol == '.') && (prev_symbol != '?' && prev_symbol != '!' && prev_symbol != '.') {
count += 1;
}
prev_symbol = symbol;
}
count
}
pub fn emotion(&self) -> String {
let mut count_question: usize = 0;
let mut count_exclamation: usize = 0;
let mut count_period: usize = 0;
let mut prev_symbol: char = 'a';
//Нещо емоджитата не ми излизат правилно затова използвам мои си

Няма как да проверим твоя вариант на емоджитата. Кода се проверява с автоматизирани тестове. Когато викнем метода emotion(), проверяваме за конкретния резултат. Ако теста има assert_eq!("🤔", text_info.emotion()), и ти върнеш :?, този тест ще fail-не.

let mut result: String = String::from(":|");
for symbol in self.text.chars() {
if symbol == '?' && prev_symbol != '?' {
count_question += 1;
}
if symbol == '!' && prev_symbol != '!' {
count_exclamation += 1;
}
if symbol == '.' && prev_symbol != '.' {
count_period += 1;
}
prev_symbol = symbol;
}
if count_question > count_exclamation && count_question > count_period {
result = String::from(":?");
}
if count_question < count_exclamation && count_exclamation > count_period {
result = String::from(":O");
}
result
}
}

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

Compiling solution v0.1.0 (file:///tmp/d20171026-5817-1c12cpw/solution)
invalid expression
!1894 = !DIExpression(6, 34, 0)
invalid expression
!2121 = !DIExpression(6, 34, 0, 6)
invalid expression
!1893 = !DIExpression(6, 34, 0)
invalid expression
!2120 = !DIExpression(6, 34, 0, 6)
error[E0599]: no method named `word_count` found for type `solution_test::solution::TextInfo` in the current scope
  --> tests/solution_test.rs:44:21
   |
44 |     assert_eq!(4, t.word_count());
   |                     ^^^^^^^^^^

error[E0599]: no method named `word_count` found for type `solution_test::solution::TextInfo` in the current scope
  --> tests/solution_test.rs:50:21
   |
50 |     assert_eq!(9, t.word_count());
   |                     ^^^^^^^^^^

error[E0599]: no method named `word_count` found for type `solution_test::solution::TextInfo` in the current scope
  --> tests/solution_test.rs:56:21
   |
56 |     assert_eq!(7, t.word_count());
   |                     ^^^^^^^^^^

error[E0599]: no method named `word_count` found for type `solution_test::solution::TextInfo` in the current scope
  --> tests/solution_test.rs:66:21
   |
66 |     assert_eq!(0, t.word_count());
   |                     ^^^^^^^^^^

error: aborting due to 4 previous errors

error: Could not compile `solution`.

To learn more, run the command again with --verbose.

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

Юлиян качи първо решение на 25.10.2017 22:57 (преди почти 8 години)

Имаш 0 точки, защото кода ти не се компилира. Домашните се проверяват с автоматизирани тестове, и ако не се компилират, нито един от тестовете не минава. Ако беше оставил word_count метода, дори да е празен, щеше поне да изкараш няколко точки.

Сложихме инструкции в guide-а да си пуснете примерния тест -- ако го беше направил, той щеше да гръмне с компилационна грешка. Казахме го и във форума:

Можете да намерите примерен тест в github репо-то rust-homework. Изтеглете си го, проверете дали върви както трябва (вижте коментара в горната част на теста), и се погрижете кода ви да се компилира и да минава поне този базов тест, преди да го submit-нете.

Ако беше пуснал домашното 7-8 часа по-рано, щях да го видя и да ти кажа поне, че кода ти не се компилира. Ако го беше пуснал ден по-рано, щях да ти кажа и това за емоджитата и може би други неща, които съм огледал. Но когато го пуснеш 3 минути преди крайния срок, ми връзваш ръцете.

Казах го няколко пъти на лекции, писах го във форума -- пускайте решения по-рано, ще коментираме по тях, ще ви помагаме. За следващите домашни, положи усилия да работиш върху него отдалеч, питай въпроси, пиши си тестове, които да хващат проблеми. Ще имаш възможност да компенсираш точки, но ще трябва да се потрудиш доста.

Здравейте,

Да, моя е вината - пуснах пробния тест и видях, че не се компилира, защото не съм направил всичко, но не заходих правилно. Трябваше да оставя методите с празни тела, колкото да се компилира, но не знаех, че се оценява изцяло автоматично.

Ако сте склонни да я приемете, бих ви дал следната обратна връзка: добавете на още 1-2 места с някакъв по-едър шрифт или червен цвят, че е абсолютно задължително кода да се компилира и че оценяването е изцяло автоматично. Може да ви се струва ненужно, но никога не подценявайте човешкия фактор - може на човек да му се спи, да чете по диагонал или просто да не е обърнал внимание конкретно на този ред, а това може да спаси от изгаряне някой следващия път :)

Поздрави, Юлиян