21: Improve solution for Rust track exercise "Beer Song" (remove unnecessary `f64` casts/conversions).

[?]
Aaw9nJhsNmfzFih9mKyNw9mV8CgERXJkRa1kK1Kx3LQH
Aug 24, 2021, 3:12 PM
NQKFZ2HDGY562EU7GKIMOKTYVMZEKMJN5LZU7CUZQOBPUPDK5WBQC

Dependencies

  • [2] Z4YP3EEK 19: Improve performance of solution for Rust track exercise "Beer Song" at the cost of duplication.
  • [3] 6DOVDD66 15: Add solution for Rust track exercise "Beer Song".
  • [4] QK6XE5XF 13: Add Rust track exercises "Beer Song", "Proverb", "Difference Of Squares", "Sum Of Multiples", "Grains", "Prime Factors", "Armstrong Numbers" and "Reverse String".
  • [5] 7NUHCTMK 16: 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
    [3.2117][3.2117:2156]()
    fn integer_length(a: usize) -> usize {
    [3.2117]
    [3.2156]
    fn digits(a: usize) -> usize {
  • replacement in rust/beer-song/src/lib.rs at line 19
    [3.2257][2.639:722](),[2.722][3.3678:3819](),[3.3678][3.3678:3819]()
    // 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));
    [3.2257]
    [3.12075]
    // 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
    [3.12091][3.12091:12219]()
    (10_f64.powi(start_digits.try_into().unwrap()) - 1.0) as usize,
    10_f64.powi((end_digits - 1).try_into().unwrap()) as usize,
    [3.12091]
    [3.12219]
    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
    [3.12223][3.12223:12368]()
    (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)
    [3.12223]
    [3.12368]
    (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
    [3.12494][3.12494:12539]()
    + integer_range_length(3, s as usize)
    [3.12494]
    [3.12539]
    + range_digits(3, s as usize)