Решение на Думи на Фибоначи от Иван Стойнев

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

Към профила на Иван Стойнев

Резултати

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

Код

pub struct FibIter {
curr: u32,
next: u32,
sequence: Vec<u32>,
}
impl FibIter {
pub fn new() -> FibIter {
FibIter {
curr: 1,
next: 1,
sequence: vec![1, 1],
}
}
pub fn next(&mut self) -> u32 {
let current = self.curr;
let next_value = self.curr + self.next;
self.curr = self.next;
self.next = next_value;
self.sequence.push(current);
current
}
pub fn rev(self) -> RevFibIter {
RevFibIter {
sequence: self.sequence.iter().copied().rev().collect(),
index: 1
}
}
}
pub struct RevFibIter {
sequence: Vec<u32>,
index: usize,
}
impl RevFibIter {
pub fn next(&mut self) -> Option<u32> {
let value = self.sequence[self.index as usize];
self.index -= 1;
Some(value)
}
}
pub fn fib_split(text: &str) -> Vec<String> {
let mut result = Vec::new();
let mut fib_iter = FibIter::new();
let mut start = 0;
let text_len = text.len();
while start < text_len {
let length = fib_iter.next() as usize;
let end = if start + length > text_len {
text_len
} else {
start + length
};
result.push(text[start..end].to_string());
start = end;
}
result
}
pub fn fib_split_n(text: &str, n: u32) -> (Vec<String>, &str) {
let mut result = Vec::new();
let mut fib_iter = FibIter::new();
let mut start = 0;
let text_len = text.len();
for _ in 0..n {
let length = fib_iter.next() as usize;
if start + length > text_len {
panic!("Недостатъчно символи за n думи.");
}
result.push(text[start..start + length].to_string());
start += length;
}
(result, &text[start..])
}
pub fn fib_split_n_symmetric(text: &str, n: u32) -> (Vec<String>, &str) {
let mut result = Vec::new();
let mut fib_iter = FibIter::new();
let mut forward_lengths = Vec::new();
for _ in 0..n {
forward_lengths.push(fib_iter.next() as usize);
}
let mut symmetric_lengths = forward_lengths.clone();
symmetric_lengths.extend(forward_lengths.iter().rev().skip(1));
let mut start = 0;
let text_len = text.len();
for &length in &symmetric_lengths {
if start + length > text_len {
panic!("Недостатъчно символи за n симетрични думи.");
}
result.push(text[start..start + length].to_string());
start += length;
}
(result, &text[start..])
}

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

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

running 20 tests
test solution_test::fib_iter ... ok
test solution_test::fib_split_ascii ... ok
test solution_test::fib_split_cyrillic ... FAILED
test solution_test::fib_split_empty ... ok
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 ... ok
test solution_test::fib_split_n_cyrillic ... FAILED
test solution_test::fib_split_n_cyrillic_exact ... FAILED
test solution_test::fib_split_n_cyrillic_panic ... ok
test solution_test::fib_split_n_symmetric_ascii ... FAILED
test solution_test::fib_split_n_symmetric_ascii_exact ... FAILED
test solution_test::fib_split_n_symmetric_cyrillic ... FAILED
test solution_test::fib_split_n_symmetric_ascii_panic ... ok
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_zero ... ok
test solution_test::fib_split_n_symmetric_zero ... ok
test solution_test::rev_fib_iter ... FAILED
test solution_test::rev_fib_iter_empty ... FAILED

failures:

---- 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:21
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

---- 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:75:21

---- 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:75:21

---- solution_test::fib_split_n_symmetric_ascii stdout ----
thread 'solution_test::fib_split_n_symmetric_ascii' panicked at 'assertion failed: `(left == right)`
  left: `["a"]`,
 right: `["a", "b"]`', tests/solution_test.rs:136:5

---- solution_test::fib_split_n_symmetric_ascii_exact stdout ----
thread 'solution_test::fib_split_n_symmetric_ascii_exact' panicked at 'assertion failed: `(left == right)`
  left: `["a", "b", "cd", "1", "2"]`,
 right: `["a", "b", "cd", "12", "3", "4"]`', tests/solution_test.rs:147: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:99:21

---- 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:99:21

---- solution_test::rev_fib_iter stdout ----
thread 'solution_test::rev_fib_iter' panicked at 'assertion failed: `(left == right)`
  left: `Some(8)`,
 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_split_cyrillic
    solution_test::fib_split_n_cyrillic
    solution_test::fib_split_n_cyrillic_exact
    solution_test::fib_split_n_symmetric_ascii
    solution_test::fib_split_n_symmetric_ascii_exact
    solution_test::fib_split_n_symmetric_cyrillic
    solution_test::fib_split_n_symmetric_cyrillic_exact
    solution_test::rev_fib_iter
    solution_test::rev_fib_iter_empty

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

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

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

Иван качи първо решение на 30.10.2024 10:29 (преди 11 месеца)

sequence: self.sequence.iter().copied().rev().collect() Тука на ред 27 видях от интернет как да revers-na Vector. И използвам start..end -> което не го видях в материалите (мога и да съм го изпуснал), но това също го взех от интернет