Решение на Matrix 4 от Николай Натов

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

Към профила на Николай Натов

Резултати

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

Код

use std::ops::{Add, Mul};
// ----------------------------------------------------- Cell ----------------------------------------------------------
#[derive(Debug, Clone, PartialEq)]
pub struct Cell<T>(pub T);
impl Add<Cell<String>> for Cell<i32>
{
type Output = Cell<String>;
fn add(self, rhs: Cell<String>) -> Self::Output
{
if self.0 >= 0
{
return Cell(format!("{} {}", self.0, rhs.0));
}
else
{
return Cell(format!("{} {}", rhs.0.chars().rev().collect::<String>(), -self.0));
}
}
}
impl Mul<Cell<String>> for Cell<i32>
{
type Output = Cell<String>;
fn mul(self, rhs: Cell<String>) -> Self::Output
{
if self.0 >= 0
{
return Cell(format!("{}", vec![rhs.0.clone(); self.0 as usize].concat()));
}
else
{
return Cell(format!("{}", vec![rhs.0.chars().rev().collect::<String>(); -self.0 as usize].concat()));
}
}
}
// ----------------------------------------------------- Matrix ----------------------------------------------------------
#[derive(Debug)]
pub struct Matrix<T: Clone>
{
m_Data: Vec<Cell<T>>
}
impl<T: Clone> Matrix<T>
{
// ------------------------------------------------------------------------------------------------------------------
pub fn new(data: &[T; 4]) -> Matrix<T>
{
let mut matrix = Matrix {
m_Data: Vec::with_capacity(4)
};
for i in 0..4
{
matrix.m_Data.push(Cell(data[i].clone()));
}
return matrix;
}
// ------------------------------------------------------------------------------------------------------------------
pub fn by_row(&self) -> Vec<Cell<T>>
{
let mut elements: Vec<Cell<T>> = Vec::with_capacity(4);
elements.push(self.m_Data[0].clone());
elements.push(self.m_Data[1].clone());
elements.push(self.m_Data[2].clone());
elements.push(self.m_Data[3].clone());
return elements;
}
// ------------------------------------------------------------------------------------------------------------------
pub fn by_col(&self) -> Vec<Cell<T>>
{
let mut elements: Vec<Cell<T>> = Vec::with_capacity(4);
elements.push(self.m_Data[0].clone());
elements.push(self.m_Data[2].clone());
elements.push(self.m_Data[1].clone());
elements.push(self.m_Data[3].clone());
return elements;
}
}
impl Add<Matrix<String>> for Matrix<i32>
{
type Output = Matrix<String>;
fn add(self, rhs: Matrix<String>) -> Self::Output
{
let mut result: Matrix<String> = Matrix {
m_Data: Vec::with_capacity(4)
};
result.m_Data.push(self.m_Data[0].clone() + rhs.m_Data[0].clone());
result.m_Data.push(self.m_Data[1].clone() + rhs.m_Data[1].clone());
result.m_Data.push(self.m_Data[2].clone() + rhs.m_Data[2].clone());
result.m_Data.push(self.m_Data[3].clone() + rhs.m_Data[3].clone());
return result;
}
}
impl Mul<Matrix<String>> for Matrix<i32>
{
type Output = String;
fn mul(self, rhs: Matrix<String>) -> Self::Output
{
let mut result: String = String::default();
result += ((self.m_Data[0].clone() * rhs.m_Data[0].clone()).0 + " ").as_str();
result += ((self.m_Data[1].clone() * rhs.m_Data[2].clone()).0 + " ").as_str();
result += ((self.m_Data[2].clone() * rhs.m_Data[1].clone()).0 + " ").as_str();
result += ((self.m_Data[3].clone() * rhs.m_Data[3].clone()).0).as_str();
return result;
}
}

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

Compiling solution v0.1.0 (/tmp/d20220112-2706256-b53u4e/solution)
warning: structure field `m_Data` should have a snake case name
  --> src/lib.rs:45:5
   |
45 |     m_Data: Vec<Cell<T>>
   |     ^^^^^^ help: convert the identifier to snake case: `m_data`
   |
   = note: `#[warn(non_snake_case)]` on by default

warning: `solution` (lib) generated 1 warning
    Finished test [unoptimized + debuginfo] target(s) in 7.56s
     Running tests/solution_test.rs (target/debug/deps/solution_test-4c880d3f0adaac34)

running 15 tests
test solution_test::test_adding_int_and_string_negative ... ok
test solution_test::test_adding_int_and_string_positive ... ok
test solution_test::test_adding_int_and_string_unicode ... ok
test solution_test::test_adding_int_and_string_zero ... ok
test solution_test::test_adding_matrices_1 ... ok
test solution_test::test_adding_matrices_2 ... ok
test solution_test::test_blank_strings ... ok
test solution_test::test_iterating_i32s ... ok
test solution_test::test_iterating_strings ... ok
test solution_test::test_multiplying_int_and_string_negative ... ok
test solution_test::test_multiplying_int_and_string_positive ... ok
test solution_test::test_multiplying_int_and_string_unicode ... ok
test solution_test::test_multiplying_int_and_string_zero ... ok
test solution_test::test_multiplying_matrices_1 ... ok
test solution_test::test_multiplying_matrices_2 ... ok

test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

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

Николай качи първо решение на 15.11.2021 21:53 (преди почти 4 години)