Решение на Думи на Фибоначи от Васил Тодоров

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

Към профила на Васил Тодоров

Резултати

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

Код

pub struct FibIter {
current: u32,
previous: u32,
}
impl FibIter {
pub fn new() -> FibIter {
let base = FibIter{
current: 1,
previous: 0,
};
return base;
}
pub fn next(&mut self) -> u32 {
self.current = self.current + self.previous;
self.previous = self.current - self.previous;
return self.current;
}
pub fn rev(self) -> RevFibIter {
let base_rev = RevFibIter{
current_rev: self.current + self.previous,
previous_rev: self.current * 2 + self.previous,
};
return base_rev;
}
}
pub struct RevFibIter {
current_rev: u32,
previous_rev: u32,
}
impl RevFibIter {
pub fn next(&mut self) -> Option<u32> {
if (self.previous_rev - self.current_rev) > 0{
self.current_rev = self.previous_rev - self.current_rev;
self.previous_rev = self.previous_rev - self.current_rev;
return Some(self.current_rev);
}
else{
return None;
}
}
}
fn string(vec:Vec<char>) -> String{
return vec.iter().collect::<String>();
}
pub fn fib_split(text: &str) -> Vec<String> {
let mut count_fib = FibIter{
current: 1,
previous: 0,
};
//let mut fib_word: &str;
let mut fib_chars: Vec<char>;
let mut current_letter: usize = 0;
let mut words: Vec<String> = Vec::new();
loop {
if text.chars().count() > current_letter + count_fib.current as usize {
fib_chars = text[current_letter..(current_letter + count_fib.current as usize)].chars().collect();
count_fib.next();
current_letter = current_letter + count_fib.previous as usize;
}
else{
fib_chars = text[current_letter..text.chars().count()].chars().collect();
words.push(string(fib_chars));
break words;
}
words.push(string(fib_chars));
}
}
pub fn fib_split_n(text: &str, n: u32) -> (Vec<String>, String) {
let mut count_fib = FibIter{
current: 1,
previous: 0,
};
let mut fib_chars: Vec<char>;
let mut current_letter: usize = 0;
let mut words: Vec<String> = Vec::new();
let mut count_n = 0;
loop {
if count_n < n {
if text.chars().count() > current_letter + count_fib.current as usize{
fib_chars = text[current_letter..(current_letter + count_fib.current as usize)].chars().collect();
count_fib.next();
current_letter = current_letter + count_fib.previous as usize;
count_n = count_n + 1;
}
else{
fib_chars = text[current_letter..text.chars().count()].chars().collect();
words.push(string(fib_chars));
fib_chars = text[text.chars().count()..text.chars().count()].chars().collect();
break (words,string(fib_chars));
}
words.push(string(fib_chars));
}
else{
fib_chars = text[current_letter..text.chars().count()].chars().collect();
break (words,string(fib_chars));
}
}
}
pub fn fib_split_n_symmetric(text: &str, n: u32) -> (Vec<String>, String) {
let mut count_fib = FibIter{
current: 1,
previous: 0,
};
let mut fib_chars: Vec<char>;
let mut current_letter: usize = 0;
let mut words: Vec<String> = Vec::new();
let mut count_n = 0;
loop {
if count_n < n {
if text.chars().count() > current_letter + count_fib.current as usize{
fib_chars = text[current_letter..(current_letter + count_fib.current as usize)].chars().collect();
count_fib.next();
current_letter = current_letter + count_fib.previous as usize;
count_n = count_n + 1;
}
else{
fib_chars = text[current_letter..text.chars().count()].chars().collect();
words.push(string(fib_chars));
fib_chars = text[text.chars().count()..text.chars().count()].chars().collect();
return (words,string(fib_chars));
}
words.push(string(fib_chars));
}
else if count_n == n{
count_n = n - 1;
let mut rev_count_fib = count_fib.rev();
rev_count_fib.next();
rev_count_fib.next();
loop{
if count_n > 0{
if text.chars().count() > current_letter + rev_count_fib.current_rev as usize{
fib_chars = text[current_letter..(current_letter + rev_count_fib.current_rev as usize)].chars().collect();
rev_count_fib.next();
current_letter = current_letter + rev_count_fib.previous_rev as usize;
count_n = count_n - 1;
}
else{
fib_chars = text[current_letter..text.chars().count()].chars().collect();
words.push(string(fib_chars));
fib_chars = text[text.chars().count()..text.chars().count()].chars().collect();
return (words,string(fib_chars));
}
}
else{
fib_chars = text[current_letter..current_letter + 1].chars().collect();
words.push(string(fib_chars));
fib_chars = text[current_letter + 1..text.chars().count()].chars().collect();
return (words,string(fib_chars));
}
words.push(string(fib_chars));
}
}
else{
fib_chars = text[current_letter..text.chars().count()].chars().collect();
return (words,string(fib_chars));
}
}
}

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

Compiling solution v0.1.0 (/tmp/d20241104-1739405-1l9tg5f/solution)
    Finished test [unoptimized + debuginfo] target(s) in 0.92s
     Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)

running 20 tests
test solution_test::fib_split_ascii ... ok
test solution_test::fib_iter ... FAILED
test solution_test::fib_split_empty ... ok
test solution_test::fib_split_cyrillic ... FAILED
test solution_test::fib_split_n_ascii ... ok
test solution_test::fib_split_n_ascii_exact ... ok
test solution_test::fib_split_n_ascii_panic ... FAILED
test solution_test::fib_split_n_cyrillic ... FAILED
test solution_test::fib_split_n_cyrillic_panic ... ok
test solution_test::fib_split_n_cyrillic_exact ... FAILED
test solution_test::fib_split_n_symmetric_ascii_exact ... ok
test solution_test::fib_split_n_symmetric_ascii_panic ... FAILED
test solution_test::fib_split_n_symmetric_ascii ... ok
test solution_test::fib_split_n_symmetric_cyrillic ... FAILED
test solution_test::fib_split_n_symmetric_cyrillic_exact ... FAILED
test solution_test::fib_split_n_symmetric_cyrillic_panic ... ok
test solution_test::fib_split_n_symmetric_zero ... FAILED
test solution_test::fib_split_n_zero ... FAILED
test solution_test::rev_fib_iter ... FAILED
test solution_test::rev_fib_iter_empty ... FAILED

failures:

---- solution_test::fib_iter stdout ----
thread 'solution_test::fib_iter' panicked at 'assertion failed: `(left == right)`
  left: `2`,
 right: `1`', tests/solution_test.rs:11:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

---- solution_test::fib_split_cyrillic stdout ----
thread 'solution_test::fib_split_cyrillic' panicked at 'byte index 1 is not a char boundary; it is inside 'м' (bytes 0..2) of `манджа с грозде`', src/lib.rs:58:29

---- solution_test::fib_split_n_ascii_panic stdout ----
thread 'solution_test::fib_split_n_ascii_panic' panicked at 'assertion failed: catch_unwind(|| fib_split_n(\"\", 1)).is_err()', tests/solution_test.rs:95:5

---- solution_test::fib_split_n_cyrillic stdout ----
thread 'solution_test::fib_split_n_cyrillic' panicked at 'byte index 1 is not a char boundary; it is inside 'м' (bytes 0..2) of `манджа_with_грозде`', src/lib.rs:82:33

---- solution_test::fib_split_n_cyrillic_exact stdout ----
thread 'solution_test::fib_split_n_cyrillic_exact' panicked at 'byte index 1 is not a char boundary; it is inside 'м' (bytes 0..2) of `манджа_with_`', src/lib.rs:82:33

---- solution_test::fib_split_n_symmetric_ascii_panic stdout ----
thread 'solution_test::fib_split_n_symmetric_ascii_panic' panicked at 'assertion failed: catch_unwind(|| fib_split_n_symmetric(\"\", 1)).is_err()', tests/solution_test.rs:153:5

---- solution_test::fib_split_n_symmetric_cyrillic stdout ----
thread 'solution_test::fib_split_n_symmetric_cyrillic' panicked at 'byte index 1 is not a char boundary; it is inside 'м' (bytes 0..2) of `манджа_with_грозде`', src/lib.rs:113:33

---- solution_test::fib_split_n_symmetric_cyrillic_exact stdout ----
thread 'solution_test::fib_split_n_symmetric_cyrillic_exact' panicked at 'byte index 1 is not a char boundary; it is inside 'м' (bytes 0..2) of `манджа_with_гр`', src/lib.rs:113:33

---- solution_test::fib_split_n_symmetric_zero stdout ----
thread 'solution_test::fib_split_n_symmetric_zero' panicked at 'attempt to subtract with overflow', src/lib.rs:127:23

---- solution_test::fib_split_n_zero stdout ----
thread 'solution_test::fib_split_n_zero' panicked at 'assertion failed: `(left == right)`
  left: `"abcdгро"`,
 right: `"abcdгрозде"`', tests/solution_test.rs:72:5

---- solution_test::rev_fib_iter stdout ----
thread 'solution_test::rev_fib_iter' panicked at 'assertion failed: `(left == right)`
  left: `Some(21)`,
 right: `Some(13)`', tests/solution_test.rs:28:5

---- solution_test::rev_fib_iter_empty stdout ----
thread 'solution_test::rev_fib_iter_empty' panicked at 'assertion failed: `(left == right)`
  left: `Some(1)`,
 right: `None`', tests/solution_test.rs:43:5


failures:
    solution_test::fib_iter
    solution_test::fib_split_cyrillic
    solution_test::fib_split_n_ascii_panic
    solution_test::fib_split_n_cyrillic
    solution_test::fib_split_n_cyrillic_exact
    solution_test::fib_split_n_symmetric_ascii_panic
    solution_test::fib_split_n_symmetric_cyrillic
    solution_test::fib_split_n_symmetric_cyrillic_exact
    solution_test::fib_split_n_symmetric_zero
    solution_test::fib_split_n_zero
    solution_test::rev_fib_iter
    solution_test::rev_fib_iter_empty

test result: FAILED. 8 passed; 12 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

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

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

Васил качи първо решение на 30.10.2024 12:07 (преди 11 месеца)