Решение на Форматиране на импорти от Карина Георгиева

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

Към профила на Карина Георгиева

Резултати

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

Код

use std::collections::BTreeMap;
pub struct Import<'a>(pub &'a [&'a str]);
#[derive(PartialEq)]
pub enum Order {
Original,
Sorted,
}
pub fn format_flat(imports: &[Import], order: Order) -> Vec<String> {
let mut imports_vec: Vec<String> = imports
.iter()
.map(|import| import.0.join("::"))
.collect();
if matches!(order, Order::Sorted) {
imports_vec.sort();
imports_vec.dedup();
}
imports_vec
}
pub fn format_nested(imports: &[Import], order: Order) -> Vec<String> {
let mut tree = Node::default();
for import in imports {
tree.add_path(import.0);
}
// Генерираме форматирането за дървото
let mut result = tree.format(0, order == Order::Sorted);
// Премахваме излишната запетая след последната затваряща скоба
if result.ends_with(",\n") {
result.truncate(result.len() - 2);
result.push('\n');
}
vec![result]
}
#[derive(Default)]
struct Node {
children: BTreeMap<String, Node>,
}
impl Node {
fn add_path(&mut self, path: &[&str]) {
if path.is_empty() {
return;
}
let first = path[0].to_string();
let rest = &path[1..];
self.children
.entry(first)
.or_insert_with(Node::default)
.add_path(rest);
}
fn format(&self, level: usize, sorted: bool) -> String {
let mut entries: Vec<_> = self.children.iter().collect();
if sorted {
entries.sort_by_key(|(key, _)| key.to_string());
}
let mut result = String::new();
for (i, (key, child)) in entries.iter().enumerate() {
let is_last_child = i == entries.len() - 1;
if child.children.is_empty() {
result.push_str(&format!(
"{:indent$}{},\n",
"",
key,
indent = level * 4
));
} else {
result.push_str(&format!(
"{:indent$}{}::{{\n",
"",
key,
indent = level * 4
));
result.push_str(&child.format(level + 1, sorted));
result.push_str(&format!(
"{:indent$}}}{}\n",
"",
if is_last_child { "" } else { "," },
indent = level * 4
));
}
}
result
}
}

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

Compiling solution v0.1.0 (/tmp/d20241203-1739405-17hi9wc/solution)
    Finished test [unoptimized + debuginfo] target(s) in 1.26s
     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 ... ok
test solution_test::test_nested_basic ... ok
test solution_test::test_nested_deep ... FAILED
test solution_test::test_nested_only_crate ... ok
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_empty ... FAILED
test solution_test::test_nested_original_multi_crate ... FAILED
test solution_test::test_nested_original_self ... FAILED
test solution_test::test_nested_sorted ... ok
test solution_test::test_nested_sorted_duplicates ... ok
test solution_test::test_nested_sorted_multi_crate ... FAILED
test solution_test::test_nested_sorted_self ... FAILED
test solution_test::test_nested_sorted_2 ... 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_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,\n            }\n        }\n    }\n}\n"]`,
 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_original stdout ----
thread 'solution_test::test_nested_original' panicked at 'assertion failed: `(left == right)`
  left: `["my_crate::{\n    a,\n    b::{\n        B1,\n        B2,\n    },\n    c,\n}\n"]`,
 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    a::{\n        A1,\n        inner::{\n            I1,\n        }\n    },\n    b::{\n        B1,\n        B2,\n    },\n    c,\n}\n"]`,
 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    a,\n    b::{\n        B1,\n        B2,\n    },\n    c,\n}\n"]`,
 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_empty stdout ----
thread 'solution_test::test_nested_empty' panicked at 'assertion failed: `(left == right)`
  left: `[""]`,
 right: `[]`', tests/solution_test.rs:122: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    a,\n    b,\n},\nstd::{\n    string::{\n        String,\n    }\n}\n"]`,
 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_original_self stdout ----
thread 'solution_test::test_nested_original_self' panicked at 'assertion failed: `(left == right)`
  left: `["my_crate::{\n    a,\n    b::{\n        B1,\n        B2,\n    },\n    c,\n}\n"]`,
 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_multi_crate stdout ----
thread 'solution_test::test_nested_sorted_multi_crate' panicked at 'assertion failed: `(left == right)`
  left: `["crate::{\n    a,\n    b,\n},\nstd::{\n    string::{\n        String,\n    }\n}\n"]`,
 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,\n    b::{\n        B1,\n        B2,\n    },\n    c,\n}\n"]`,
 right: `["my_crate::{\n    a,\n    b::{\n        self,\n        B1,\n        B2,\n    },\n    c,\n}\n"]`', tests/solution_test.rs:360: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,\n        inner::{\n            I1,\n        }\n    },\n    b::{\n        B1,\n        B2,\n    },\n    c,\n}\n"]`,
 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


failures:
    solution_test::test_flat_original_duplicates
    solution_test::test_nested_deep
    solution_test::test_nested_empty
    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_2
    solution_test::test_nested_sorted_multi_crate
    solution_test::test_nested_sorted_self

test result: FAILED. 9 passed; 11 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:11 (преди 9 месеца)