~josealberto4444/numeros_y_letras

9a3fb84eec463cb5e2a54f955cd5faa94bc24526 — José Alberto Orejuela García 2 months ago bc867ea
Añade números hasta el 999999_999999

Empiezo a poner un separador en los millones porque ya me lío, y ya no
itero en todos esos números porque entonces el programa tarda demasiado.
1 files changed, 19 insertions(+), 2 deletions(-)

M src/main.rs
M src/main.rs => src/main.rs +19 -2
@@ 1,7 1,7 @@
// SPDX-FileCopyrightText: 2024 José Alberto Orejuela García <libre@josealberto4444.com>
// SPDX-License-Identifier: AGPL-3.0-or-later

const TESTED_NUMBERS : std::ops::RangeInclusive<usize> = 1..=1999999;
const TESTED_NUMBERS : std::ops::RangeInclusive<usize> = 1..=9_999999;

fn main() {
    for number in TESTED_NUMBERS {


@@ 72,6 72,7 @@ fn letters(number: usize) -> usize {
        ..=1999 => reduce(number, 1000, "mil".len()), // Hala, el 1000 también tiene 3 letras
        ..=999999 => split_number(number, 1000, "mil"),
        ..=1_999999 => reduce(number, 1000000, "unmillon".len()),
        ..=999999_999999 => split_number(number, 1_000000, "millones"),
        _ => panic!("El número {number} no está contemplado todavía."),
    }
}


@@ 163,6 164,22 @@ mod tests {

    #[test]
    fn millions() {
        assert_eq!(letters(1616432), 55);
        assert_eq!(letters(1_616432), 55);
        assert_eq!(letters(662_981177), 73);
        assert_eq!(letters(70302_866495), 84);
    }

    #[test]
    fn millions_ending_in_11() {
        assert_eq!(letters(11_624429), 62);
        assert_eq!(letters(611268_787682), 97);
        assert_eq!(letters(943111_003969), 76);
    }

    #[test]
    fn millions_ending_in_1() {
        assert_eq!(letters(521_769135), 72);
        assert_eq!(letters(10141_412806), 67);
        assert_eq!(letters(41739_633280), 89);
    }
}