Problema
I dati inseriti dalle persone sono disordinati. Ricevi un elenco di stringhe e devi sommare quelle che sono numeri interi, ignorando il resto invece di andare in errore.
Un elemento conta se, dopo aver rimosso gli spazi all'inizio e alla fine, è un segno opzionale + o - seguito da una o più cifre. Qualsiasi altra cosa (testo vuoto, decimali come "2.5", parole) viene ignorata.
Implementa sum_valid_numbers(values).
Ingresso
values: Gli elementi da leggere.
Uscita
Restituisci la somma dei numeri interi validi (0 se non ce ne sono).
Vincoli
0 ≤ numero di voci ≤ 1,000
Ogni voce ha al massimo 20 caratteri; i numeri validi stanno in un intero a 64 bit
Esempi
Input:
values = ["10", " 5 ", "abc", "-3"]
Output atteso:
expected = 12
Input:
std::vector<std::string> values = {"10", " 5 ", "abc", "-3"};
Output atteso:
long long expected = 12;
Input:
string[] values = new string[] {"10", " 5 ", "abc", "-3"};
Output atteso:
long expected = 12;
Spiegazione
"10", " 5 " (gli spazi vengono rimossi) e "-3" sono numeri interi; "abc" viene ignorato. 10 + 5 - 3 = 12.
Input:
values = ["2.5", "", "seven"]
Output atteso:
expected = 0
Input:
std::vector<std::string> values = {"2.5", "", "seven"};
Output atteso:
long long expected = 0;
Input:
string[] values = new string[] {"2.5", "", "seven"};
Output atteso:
long expected = 0;
Spiegazione
Nessuno degli elementi è un numero intero, quindi la somma è 0.
Come affrontarlo
Prova prima da solo, poi apri un suggerimento alla volta.
Suggerimento 1
Togli prima gli spazi, poi decidi se ciò che resta è un intero valido.
Suggerimento 2
Convertire dentro try/except (o controllare i caratteri) ti permette di saltare le voci sbagliate senza fermarti.
Suggerimento 3
Un segno da solo come "+" non è un numero.
Complessità attesa
tempo O(lunghezza totale), spazio aggiuntivo O(1)
Riferimenti
Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.