Решение на Форматиране на импорти от Йоанна Ненкова

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

Към профила на Йоанна Ненкова

Резултати

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

Код

struct Node {
value: String,
children: Vec<Node>,
}
impl Node {
fn new(value: String) -> Self {
Node {
value,
children: Vec::new(),
}
}
fn add(&mut self, path: &[&str]) {
if let Some((head, tail)) = path.split_first() {
let mut child = self.children.iter_mut().find(|child| child.value == *head);
if child.is_none() {
self.children.push(Node::new((*head).to_string()));
child = self.children.iter_mut().find(|child| child.value == *head);
}
if let Some(child) = child {
child.add(tail);
}
}
}
fn render(&self, depth: usize) -> Vec<String> {
let mut lines = Vec::new();
let last_child_index = self.children.len().saturating_sub(1);
for (index, child) in self.children.iter().enumerate() {
lines.push(format!("{:indent$}{}", "", child.value, indent = depth * 4));
if !child.children.is_empty() {
if let Some(last_line) = lines.last_mut() {
last_line.push_str("::{\n");
}
let child_lines = child.render(depth + 1);
for line in child_lines {
lines.push(format!("{:indent$}", line, indent = (depth + 1) * 4));
}
lines.push(format!("{:indent$}}}", "", indent = depth * 4));
}
if index != last_child_index {
lines.push(format!("{:indent$},", "", indent = depth * 4));
}
}
lines
}
}
struct Tree {
root: Node,
}
impl Tree {
fn new(root_value: String) -> Self {
Tree {
root: Node::new(root_value),
}
}
fn add(&mut self, path: &[&str]) {
self.root.add(path);
}
}
#[derive(Clone)]
pub struct Import<'a>(pub &'a [&'a str]);
pub enum Order {
Original,
Sorted,
}
pub fn format_flat(imports: &[Import], order: Order) -> Vec<String> {
let mut result: Vec<String> = imports
.iter()
.map(|import| import.0.join("::"))
.collect();
if let Order::Sorted = order {
result.sort();
}
result
}
pub fn format_nested(imports: &[Import], order: Order) -> Vec<String> {
let mut tree = Tree::new(String::new());
for import in imports {
tree.add(import.0);
}
if let Order::Sorted = order {
sort_tree(&mut tree.root);
}
tree.root.render(0)
}
fn sort_tree(node: &mut Node) {
node.children.sort_by(|a, b| a.value.cmp(&b.value));
for child in &mut node.children {
sort_tree(child);
}
}

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

Compiling solution v0.1.0 (/tmp/d20241203-1739405-cqbich/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::test_flat_empty ... ok
test solution_test::test_flat_multi_crate ... ok
test solution_test::test_flat_original ... ok
test solution_test::test_flat_original_duplicates ... FAILED
test solution_test::test_flat_sorted ... ok
test solution_test::test_flat_sorted_duplicates ... FAILED
test solution_test::test_nested_basic ... FAILED
test solution_test::test_nested_deep ... FAILED
test solution_test::test_nested_empty ... ok
test solution_test::test_nested_only_crate ... FAILED
test solution_test::test_nested_original ... FAILED
test solution_test::test_nested_original_2 ... FAILED
test solution_test::test_nested_original_duplicates ... FAILED
test solution_test::test_nested_original_multi_crate ... FAILED
test solution_test::test_nested_sorted ... FAILED
test solution_test::test_nested_original_self ... FAILED
test solution_test::test_nested_sorted_duplicates ... FAILED
test solution_test::test_nested_sorted_2 ... FAILED
test solution_test::test_nested_sorted_multi_crate ... FAILED
test solution_test::test_nested_sorted_self ... FAILED

failures:

---- solution_test::test_flat_original_duplicates stdout ----
thread 'solution_test::test_flat_original_duplicates' panicked at 'assertion failed: `(left == right)`
  left: `["std::string::String", "std::iter::once", "std::iter", "std::iter", "std::iter::repeat", "std::string::String"]`,
 right: `["std::string::String", "std::iter::once", "std::iter", "std::iter::repeat"]`', tests/solution_test.rs:44:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

---- solution_test::test_flat_sorted_duplicates stdout ----
thread 'solution_test::test_flat_sorted_duplicates' panicked at 'assertion failed: `(left == right)`
  left: `["std::iter", "std::iter", "std::iter::once", "std::iter::repeat", "std::string::String", "std::string::String"]`,
 right: `["std::iter", "std::iter::once", "std::iter::repeat", "std::string::String"]`', tests/solution_test.rs:88:5

---- solution_test::test_nested_basic stdout ----
thread 'solution_test::test_nested_basic' panicked at 'assertion failed: `(left == right)`
  left: `["std::{\n", "    a", "}"]`,
 right: `["std::{\n    a,\n}\n"]`', tests/solution_test.rs:140:5

---- solution_test::test_nested_deep stdout ----
thread 'solution_test::test_nested_deep' panicked at 'assertion failed: `(left == right)`
  left: `["std::{\n", "    a::{\n", "        b::{\n", "            c::{\n", "                d", "            }", "        }", "    }", "}"]`,
 right: `["std::{\n    a::{\n        b::{\n            c::{\n                d,\n            },\n        },\n    },\n}\n"]`', tests/solution_test.rs:160:5

---- solution_test::test_nested_only_crate stdout ----
thread 'solution_test::test_nested_only_crate' panicked at 'assertion failed: `(left == right)`
  left: `["my_crate"]`,
 right: `["my_crate\n"]`', tests/solution_test.rs:132:5

---- solution_test::test_nested_original stdout ----
thread 'solution_test::test_nested_original' panicked at 'assertion failed: `(left == right)`
  left: `["my_crate::{\n", "    c", "    ,", "    b::{\n", "        B2", "        ,", "        B1", "    }", "    ,", "    a", "}"]`,
 right: `["my_crate::{\n    c,\n    b::{\n        B2,\n        B1,\n    },\n    a,\n}\n"]`', tests/solution_test.rs:173:5

---- solution_test::test_nested_original_2 stdout ----
thread 'solution_test::test_nested_original_2' panicked at 'assertion failed: `(left == right)`
  left: `["my_crate::{\n", "    c", "    ,", "    b::{\n", "        B2", "        ,", "        B1", "    }", "    ,", "    a::{\n", "        inner::{\n", "            I1", "        }", "        ,", "        A1", "    }", "}"]`,
 right: `["my_crate::{\n    c,\n    b::{\n        B2,\n        B1,\n    },\n    a::{\n        inner::{\n            I1,\n        },\n        A1,\n    },\n}\n"]`', tests/solution_test.rs:198:5

---- solution_test::test_nested_original_duplicates stdout ----
thread 'solution_test::test_nested_original_duplicates' panicked at 'assertion failed: `(left == right)`
  left: `["my_crate::{\n", "    c", "    ,", "    b::{\n", "        B2", "        ,", "        B1", "    }", "    ,", "    a", "}"]`,
 right: `["my_crate::{\n    c,\n    b::{\n        B2,\n        B1,\n    },\n    a,\n}\n"]`', tests/solution_test.rs:283:5

---- solution_test::test_nested_original_multi_crate stdout ----
thread 'solution_test::test_nested_original_multi_crate' panicked at 'assertion failed: `(left == right)`
  left: `["crate::{\n", "    b", "    ,", "    a", "}", ",", "std::{\n", "    string::{\n", "        String", "    }", "}"]`,
 right: `["crate::{\n    b,\n    a,\n}\n", "std::{\n    string::{\n        String,\n    },\n}\n"]`', tests/solution_test.rs:385:5

---- solution_test::test_nested_sorted stdout ----
thread 'solution_test::test_nested_sorted' panicked at 'assertion failed: `(left == right)`
  left: `["my_crate::{\n", "    a", "    ,", "    b::{\n", "        B1", "        ,", "        B2", "    }", "    ,", "    c", "}"]`,
 right: `["my_crate::{\n    a,\n    b::{\n        B1,\n        B2,\n    },\n    c,\n}\n"]`', tests/solution_test.rs:227:5

---- solution_test::test_nested_original_self stdout ----
thread 'solution_test::test_nested_original_self' panicked at 'assertion failed: `(left == right)`
  left: `["my_crate::{\n", "    c", "    ,", "    b::{\n", "        B2", "        ,", "        B1", "    }", "    ,", "    a", "}"]`,
 right: `["my_crate::{\n    c,\n    b::{\n        self,\n        B2,\n        B1,\n    },\n    a,\n}\n"]`', tests/solution_test.rs:334:5

---- solution_test::test_nested_sorted_duplicates stdout ----
thread 'solution_test::test_nested_sorted_duplicates' panicked at 'assertion failed: `(left == right)`
  left: `["my_crate::{\n", "    a", "    ,", "    b::{\n", "        B1", "        ,", "        B2", "    }", "    ,", "    c", "}"]`,
 right: `["my_crate::{\n    a,\n    b::{\n        B1,\n        B2,\n    },\n    c,\n}\n"]`', tests/solution_test.rs:309:5

---- solution_test::test_nested_sorted_2 stdout ----
thread 'solution_test::test_nested_sorted_2' panicked at 'assertion failed: `(left == right)`
  left: `["my_crate::{\n", "    a::{\n", "        A1", "        ,", "        inner::{\n", "            I1", "        }", "    }", "    ,", "    b::{\n", "        B1", "        ,", "        B2", "    }", "    ,", "    c", "}"]`,
 right: `["my_crate::{\n    a::{\n        A1,\n        inner::{\n            I1,\n        },\n    },\n    b::{\n        B1,\n        B2,\n    },\n    c,\n}\n"]`', tests/solution_test.rs:252:5

---- solution_test::test_nested_sorted_multi_crate stdout ----
thread 'solution_test::test_nested_sorted_multi_crate' panicked at 'assertion failed: `(left == right)`
  left: `["crate::{\n", "    a", "    ,", "    b", "}", ",", "std::{\n", "    string::{\n", "        String", "    }", "}"]`,
 right: `["crate::{\n    a,\n    b,\n}\n", "std::{\n    string::{\n        String,\n    },\n}\n"]`', tests/solution_test.rs:414:5

---- solution_test::test_nested_sorted_self stdout ----
thread 'solution_test::test_nested_sorted_self' panicked at 'assertion failed: `(left == right)`
  left: `["my_crate::{\n", "    a", "    ,", "    b::{\n", "        B1", "        ,", "        B2", "    }", "    ,", "    c", "}"]`,
 right: `["my_crate::{\n    a,\n    b::{\n        self,\n        B1,\n        B2,\n    },\n    c,\n}\n"]`', tests/solution_test.rs:360:5


failures:
    solution_test::test_flat_original_duplicates
    solution_test::test_flat_sorted_duplicates
    solution_test::test_nested_basic
    solution_test::test_nested_deep
    solution_test::test_nested_only_crate
    solution_test::test_nested_original
    solution_test::test_nested_original_2
    solution_test::test_nested_original_duplicates
    solution_test::test_nested_original_multi_crate
    solution_test::test_nested_original_self
    solution_test::test_nested_sorted
    solution_test::test_nested_sorted_2
    solution_test::test_nested_sorted_duplicates
    solution_test::test_nested_sorted_multi_crate
    solution_test::test_nested_sorted_self

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

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

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

Йоанна качи първо решение на 03.12.2024 17:59 (преди 9 месеца)