Volver a los desafíos
Fácil 0 resueltos 0% de aceptación

Sumar los números válidos

Suma las entradas que sean números enteros y omite todo lo demás, como maneja try/except la entrada incorrecta.

Lo que aprenderás

  • Saltar entradas no válidas en lugar de fallar
  • Quitar espacios antes de convertir texto en número
  • Reconocer un signo opcional seguido de dígitos

Problema

Ver original (inglés)

Los datos que escriben las personas son desordenados. Recibes una lista de cadenas y debes sumar las que sean números enteros, ignorando el resto en lugar de provocar un fallo.

Una entrada cuenta si, después de quitar los espacios al principio y al final, es un signo opcional + o - seguido de uno o más dígitos. Cualquier otra cosa (texto vacío, decimales como "2.5", palabras) se omite.

Implementa sum_valid_numbers(values).

Entrada

values: Las entradas que se deben leer.

Salida

Devuelve la suma de los números enteros válidos (0 si no hay ninguno).

Restricciones

0 ≤ número de entradas ≤ 1,000

Cada entrada tiene como máximo 20 caracteres; los números válidos caben en un entero de 64 bits

Ejemplos

Ejemplo 1
Entrada:
values = ["10", " 5 ", "abc", "-3"]

Salida esperada:
expected = 12
Entrada:
std::vector<std::string> values = {"10", " 5 ", "abc", "-3"};

Salida esperada:
long long expected = 12;
Entrada:
string[] values = new string[] {"10", " 5 ", "abc", "-3"};

Salida esperada:
long expected = 12;

Explicación

"10", " 5 " (los espacios se quitan) y "-3" son números enteros; "abc" se omite. 10 + 5 - 3 = 12.

Ejemplo 2
Entrada:
values = ["2.5", "", "seven"]

Salida esperada:
expected = 0
Entrada:
std::vector<std::string> values = {"2.5", "", "seven"};

Salida esperada:
long long expected = 0;
Entrada:
string[] values = new string[] {"2.5", "", "seven"};

Salida esperada:
long expected = 0;

Explicación

Ninguna de las entradas es un número entero, así que la suma es 0.

Cómo abordarlo

Inténtalo primero por tu cuenta y luego abre las pistas una a una.

Pista 1

Quita primero los espacios y luego decide si lo que queda es un entero válido.

Pista 2

Convertir dentro de try/except (o revisar los caracteres) te deja saltar entradas malas sin detenerte.

Pista 3

Un signo suelto como "+" no es un número.

Complejidad esperada

tiempo O(longitud total), espacio extra O(1)

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.