Corso di Raku / Appendice 🆕 / Mettere tutto insieme / Mini-progetti misti / Exercises / Punteggi da righe CSV
Soluzione: Punteggi da righe CSV
Ecco una possibile soluzione del compito.
Codice
my @lines = 'Anna,90', 'Bob,72', 'Cara,84';
my %score;
for @lines -> $line {
my ($name, $mark) = $line.split(',');
%score{$name} = $mark.Int;
}
my $average = ([+] %score.values) / %score.elems;
say "average: $average";
say "above average:";
for %score.sort -> $pair {
say " {$pair.key}" if $pair.value > $average;
}🦋 Trova il programma nel file csv-averages.raku.
Output
average: 82
above average:
Anna
CaraCommenti
Dividere ogni riga sulla virgola e assegnare a
($name, $mark)scompatta i due campi in una volta;.Inttrasforma il testo del punteggio in un numero.La media è la somma dei valori diviso il loro numero; chi la supera viene elencato. Qui la media risulta un intero
82.Quel ciclo finale si può scrivere come pipeline.
sortordina le coppie,grepconserva quelle sopra la media emapriduce ogni coppia sopravvissuta al proprio nome — così il corpo del ciclo non porta alcuna logica, solo la stampa:say " $_" for %score.sort.grep(*.value > $average).map(*.key);
Letta da sinistra a destra, dice esattamente ciò che fa: ordina, conserva quelli sopra la media, prendine i nomi. Ogni stadio è un passo piccolo e autosufficiente, e
*.value/*.keysono stelle Whatever che costruiscono al volo un blocco a un argomento.