Esercizio 1 - Better Scores

Obiettivo

Realizzare con JavaScript un piccolo programma che gestisca i punteggi (interi, anche negativi) ricevuti dall’utente in un sito di Q&A, producendo un confronto immediato fra la serie originale e una versione “migliorata” ottenuta secondo le regole richieste.

Procedura/Spiegazione passo-passo

  1. Definizione dei dati di partenza

    Si crea un array letterale (const originalScores = [...]) che contiene, in ordine cronologico, tutti i punteggi ricevuti.

  2. Calcolo riutilizzabile della media

    Si implementa una funzione average(arr) che:

  3. Duplicazione e miglioramento dell’array

    1. Eliminazione dei punteggi negativi

      Con filter(score => score >= 0) si ottiene la copia “pulita” e si conteggia NN, pari alle eliminazioni effettuate.

    2. Rimozione dei due valori più bassi residui

      • Ordinamento ascendente tramite sort((a, b) => a - b).
      • Eliminazione con slice(2) dei primi due elementi.
    3. Inserimento dei nuovi punteggi

      • Si ricalcola la media dell’array corrente.
      • Si utilizza push() in un ciclo per aggiungere NN + 2 copie di tale media, come richiesto.
  4. Stampa di confronto

    Si visualizzano in console entrambe le versioni dell’array e le rispettive medie, permettendo il riscontro immediato dei benefici dell’elaborazione.

Codice (con commenti esaustivi)

'use strict';

// 1. Array originale di punteggi (esempio)
const originalScores = [5, -2, 10, 0, -7, 3, 9, -1, 4];
console.log('Array originale:', originalScores);

// Funzione di utilità per la media arrotondata
function average(arr) {
    return Math.round(
        arr.reduce((acc, v) => acc + v, 0) / arr.length // somma e divisione
    );
}

// 3.a - copia senza valori negativi
let improved = originalScores.filter(score => score >= 0);
const NN = originalScores.length - improved.length; // numero di negativi eliminati

// 3.b - rimozione dei due punteggi più bassi tra quelli rimasti
improved.sort((a, b) => a - b); // ordine crescente
improved = improved.slice(2);   // scarto dei primi due

// 3.c - aggiunta di (NN + 2) punteggi pari alla media attuale
const avg = average(improved);
for (let i = 0; i < NN; i++) {
    improved.push(avg);
}

// 4. Stampa dei risultati
console.log('Array migliorato:', improved);
console.log('Media originale:', average(originalScores));
console.log('Media migliorata:', average(improved));

Osservazioni critiche

Esercizio 2 - Gestione di una lista di utenti con le stringhe in JavaScript

Obiettivo

Scrivere un breve programma JS che, a partire da una stringa contenente più nomi separati da virgola, costituisca:

  1. Un array con i singoli nomi (senza spazi superflui).
  2. Un secondo array con gli acronimi (tutte le iniziali in maiuscolo).
  3. La stampa accoppiata di acronimo → nome (ordinata alfabeticamente sull’acronimo, parte “extra”).