Решение на FMI Buzz от Александър Димитров

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

Към профила на Александър Димитров

Резултати

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

Код

pub fn fizzbuzz( n: usize ) -> Vec<String> {
custom_buzz( n, 3, 5 )
}
pub fn custom_buzz( n: usize, k1: u8, k2: u8 ) -> Vec<String> {
FizzBuzzer {
k1,
k2,
labels: [
String::from( "Fizz" ),
String::from( "Buzz" ),
String::from( "Fizzbuzz" )
],
}.take( n )
}
pub struct FizzBuzzer {
pub k1: u8,
pub k2: u8,
pub labels: [ String; 3 ],
}
impl FizzBuzzer {
pub fn take( &self, n: usize ) -> Vec<String> {
if self.k1 == 0 || self.k1 == 1 || self.k2 == 0 || self.k2 == 1 {
panic!( "FizzBuzzer: k1/k2 expected [2, 255], found {}/{}", self.k1, self.k2 );
}
let mut res : Vec<String> = Vec::new();
for i in 1 ..= n {
let div_by_k1 = i % self.k1 as usize == 0;
let div_by_k2 = i % self.k2 as usize == 0;
if div_by_k1 && div_by_k2 {
res.push( self.labels[ 2 ].clone() );
}
else if div_by_k2 {
res.push( self.labels[ 1 ].clone() );
}
else if div_by_k1 {
res.push( self.labels[ 0 ].clone() );
}
else {
res.push( i.to_string() );
}
}
res
}
pub fn change_label( &mut self, index: usize, value: &String ) {
match index {
0 ..= 2 => self.labels[ index ] = value.clone(),
_ => panic!( "FizzBuzzer::change_label( index, value ): Index out of bounds! Expected [0, 2], found {}", index ),
}
}
}

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

Compiling solution v0.1.0 (/tmp/d20201028-2816268-czc5vf/solution)
    Finished test [unoptimized + debuginfo] target(s) in 2.09s
     Running target/debug/deps/solution-ebb42508826ef2b4

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

     Running target/debug/deps/solution_test-9e954a53ed808c89

running 10 tests
test solution_test::test_change_label_basic ... ok
test solution_test::test_change_label_invalid ... ok
test solution_test::test_classic1 ... ok
test solution_test::test_classic2 ... ok
test solution_test::test_coefficients1 ... ok
test solution_test::test_coefficients2 ... ok
test solution_test::test_coefficients_invalid ... ok
test solution_test::test_struct_basic ... ok
test solution_test::test_struct_invalid ... ok
test solution_test::test_zeroes ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

   Doc-tests solution

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

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

Александър качи първо решение на 22.10.2020 19:31 (преди почти 5 години)

Александър качи решение на 24.10.2020 00:51 (преди почти 5 години)

pub fn fizzbuzz( n: usize ) -> Vec<String> {
custom_buzz( n, 3, 5 )
}
pub fn custom_buzz( n: usize, k1: u8, k2: u8 ) -> Vec<String> {
FizzBuzzer {
k1,
k2,
labels: [
- String::from("Fizz"),
- String::from("Buzz"),
- String::from("Fizzbuzz")
+ String::from( "Fizz" ),
+ String::from( "Buzz" ),
+ String::from( "Fizzbuzz" )
],
- }.take(n)
+ }.take( n )
}
pub struct FizzBuzzer {
pub k1: u8,
pub k2: u8,
- pub labels: [String; 3],
+ pub labels: [ String; 3 ],
}
impl FizzBuzzer {
pub fn take( &self, n: usize ) -> Vec<String> {
- if n == 0 || n == 1 {
- panic!( "FizzBuzzer::take( n ): Expected [2, 255], found {0}", n );
+ if self.k1 == 0 || self.k1 == 1 || self.k2 == 0 || self.k2 == 1 {
+ panic!( "FizzBuzzer: k1/k2 expected [2, 255], found {}/{}", self.k1, self.k2 );
}
let mut res : Vec<String> = Vec::new();
- for i in 1..=n {
+ for i in 1 ..= n {
let div_by_k1 = i % self.k1 as usize == 0;
let div_by_k2 = i % self.k2 as usize == 0;
if div_by_k1 && div_by_k2 {
res.push( self.labels[ 2 ].clone() );
}
else if div_by_k2 {
res.push( self.labels[ 1 ].clone() );
}
else if div_by_k1 {
res.push( self.labels[ 0 ].clone() );
}
else {
res.push( i.to_string() );
}
}
res
}
pub fn change_label( &mut self, index: usize, value: &String ) {
match index {
0 ..= 2 => self.labels[ index ] = value.clone(),
- _ => panic!( "FizzBuzzer::change_label( index, value ): Index out of bounds! Expected [0, 2], found {0}", index ),
+ _ => panic!( "FizzBuzzer::change_label( index, value ): Index out of bounds! Expected [0, 2], found {}", index ),
}
}
}