21: Improve solution for Rust track exercise "Beer Song" (remove unnecessary `f64` casts/conversions).
[?]
Aaw9nJhsNmfzFih9mKyNw9mV8CgERXJkRa1kK1Kx3LQH
Aug 24, 2021, 3:12 PM
NQKFZ2HDGY562EU7GKIMOKTYVMZEKMJN5LZU7CUZQOBPUPDK5WBQCDependencies
- [2]
Z4YP3EEK19: Improve performance of solution for Rust track exercise "Beer Song" at the cost of duplication. - [3]
6DOVDD6615: Add solution for Rust track exercise "Beer Song". - [4]
QK6XE5XF13: Add Rust track exercises "Beer Song", "Proverb", "Difference Of Squares", "Sum Of Multiples", "Grains", "Prime Factors", "Armstrong Numbers" and "Reverse String". - [5]
7NUHCTMK16: Apply `cargo fmt` and `cargo clippy` to the solution for Rust track exercise "Beer Song". Also add previous versions.
Change contents
- replacement in rust/beer-song/src/lib.rs at line 15
fn integer_length(a: usize) -> usize {fn digits(a: usize) -> usize { - replacement in rust/beer-song/src/lib.rs at line 19
// Might not work properly if results of `powi`s don't fit into the `usize` casts.fn integer_range_length(start: usize, end: usize) -> usize {let (start_digits, end_digits) = (integer_length(start), integer_length(end));// Present conversions and type casts could be problematic for certain inputs.fn range_digits(start: usize, end: usize) -> usize {let (start_digits, end_digits) = (digits(start), digits(end)); - replacement in rust/beer-song/src/lib.rs at line 23
(10_f64.powi(start_digits.try_into().unwrap()) - 1.0) as usize,10_f64.powi((end_digits - 1).try_into().unwrap()) as usize,10_usize.pow(start_digits.try_into().unwrap()) - 1,10_usize.pow((end_digits - 1).try_into().unwrap()) as usize, - replacement in rust/beer-song/src/lib.rs at line 26
(integer_length(a + 1)..=integer_length(b - 1)).fold(0, |acc, elem| {acc + 9 * elem * (10_f64.powi((elem - 1).try_into().unwrap()) as usize)(digits(a + 1)..=digits(b - 1)).fold(0, |acc, elem| {acc + 9 * elem * 10_usize.pow((elem - 1).try_into().unwrap()) - replacement in rust/beer-song/src/lib.rs at line 50
+ integer_range_length(3, s as usize)+ range_digits(3, s as usize)