Решение на Polynomial от Радослав Върбанов

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

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

Резултати

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

Код

use std::ops::Add;
use std::ops::Mul;
use std::ops::Div;
#[derive(Debug, Clone)]
pub struct Polynomial {
coefs: Vec<f64>
}
impl Polynomial {
pub fn has(&self, point: &(f64, f64)) -> bool {
let mut coefs = self.coefs.clone();
let mut value_at_x = 0.0;
let (x, y) = *point;
coefs.reverse();
for i in 0..(self.coefs.len()) {
let mut pow_x = 1.0;
for _j in 0..i {
pow_x *= x;
}
value_at_x += coefs[i] * pow_x;
}
return y == value_at_x;
}
}
impl From<Vec<f64>> for Polynomial {
fn from(mut coefs: Vec<f64>) -> Self {
if coefs.len() < 1 {
return Polynomial { coefs: vec![0.0] };
}
while coefs[0] == 0.0 {
coefs.remove(0);
if coefs.len() < 1 {
return Polynomial { coefs: vec![0.0] };
}
}
return Polynomial { coefs: coefs };
}
}
impl Default for Polynomial {
fn default() -> Self {
return Polynomial::from(vec![0.0]);
}
}
impl PartialEq for Polynomial {
fn eq(&self, rhs: &Self) -> bool {
let mut left_coefs = self.coefs.clone();
let mut right_coefs = rhs.coefs.clone();
trim_zeroes(&mut left_coefs);
trim_zeroes(&mut right_coefs);
if left_coefs.len() != right_coefs.len() {
return false;
}
for i in 0..(self.coefs.len()) {
if self.coefs[i] != rhs.coefs[i] {
return false;
}
}
fn trim_zeroes(vector: &mut Vec<f64>) -> () {
while vector[0] == 0.0 {
vector.remove(0);
if vector.len() < 1 {
break;
}
}
}
return true;
}
}
impl Mul<f64> for Polynomial {
type Output = Polynomial;
fn mul(self, rhs: f64) -> Self::Output {
let mut new_coefs = self.coefs.clone();
for i in 0..(self.coefs.len()) {
new_coefs[i] *= rhs;
}
return Polynomial::from(new_coefs);
}
}
impl Div<f64> for Polynomial {
type Output = Polynomial;
fn div(self, rhs: f64) -> Self::Output {
let mut new_coefs = self.coefs.clone();
for i in 0..(self.coefs.len()) {
new_coefs[i] /= rhs;
}
return Polynomial::from(new_coefs);
}
}
impl Mul for Polynomial {
type Output = Polynomial;
fn mul(self, rhs: Polynomial) -> Self::Output {
let mut left_coefs = self.coefs.clone();
let mut right_coefs = rhs.coefs.clone();
let mut new_coefs: Vec<f64> = vec![];
for _i in 0..(left_coefs.len() * right_coefs.len()) {
new_coefs.push(0.0);
}
left_coefs.reverse();
right_coefs.reverse();
for i in 0..(left_coefs.len()) {
for j in 0..(right_coefs.len()) {
new_coefs[i + j] += left_coefs[i] * right_coefs[j];
}
}
new_coefs.reverse();
return Polynomial::from(new_coefs);
}
}
impl Add for Polynomial {
type Output = Polynomial;
fn add(self, rhs: Polynomial) -> Self::Output {
let mut left_coefs = self.coefs.clone();
let mut right_coefs = rhs.coefs.clone();
let mut new_coefs: Vec<f64>;
left_coefs.reverse();
right_coefs.reverse();
if left_coefs.len() > right_coefs.len() {
new_coefs = left_coefs;
for i in 0..(right_coefs.len()) {
new_coefs[i] += right_coefs[i];
}
}
else {
new_coefs = right_coefs;
for i in 0..(left_coefs.len()) {
new_coefs[i] += left_coefs[i];
}
}
new_coefs.reverse();
return Polynomial::from(new_coefs);
}
}

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

Compiling solution v0.1.0 (file:///tmp/d20171121-6053-12z5e9t/solution)
error[E0599]: no function or associated item named `interpolate` found for type `solution_test::polynomial::Polynomial` in the current scope
   --> tests/solution_test.rs:212:16
    |
212 |     let poly = Polynomial::interpolate(points.clone());
    |                ^^^^^^^^^^^^^^^^^^^^^^^

error[E0599]: no function or associated item named `interpolate` found for type `solution_test::polynomial::Polynomial` in the current scope
   --> tests/solution_test.rs:231:16
    |
231 |     let poly = Polynomial::interpolate(points.clone());
    |                ^^^^^^^^^^^^^^^^^^^^^^^

error[E0599]: no function or associated item named `interpolate` found for type `solution_test::polynomial::Polynomial` in the current scope
   --> tests/solution_test.rs:246:16
    |
246 |     let poly = Polynomial::interpolate(points.clone());
    |                ^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 3 previous errors

error: Could not compile `solution`.

To learn more, run the command again with --verbose.

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

Радослав качи първо решение на 20.11.2017 15:41 (преди почти 8 години)

Нямаш interpolate, което значи, че решението не ти се компилира! Направи празна имплементация, ако трябва, но ако не ти се компилира кода, получаваш 0 точки. Издължавам срока с час, понеже забравих да проверя домашните по-рано, но ако не прочетеш това навреме, кофти. Написали сме го в инструкциите: https://fmi.rust-lang.bg/tasks/guide.

Издължавам срока до утре, понеже намерих, да кажем, проблем в сайта, който спъва поне един колега. Това не е причината за 0та точки тук, така че приеми, че имаш късмет. Сложи имплементация на interpolate до утре, обаче.