Menu
Coddy logo textTech

Differenza tra insiemi

Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 24 di 65.

A volte devi trovare gli elementi che esistono in un Set ma non in un altro. Il metodo difference() risolve il problema creando un nuovo set che contiene solo gli elementi del primo set che non sono presenti nel secondo.

Consideralo una sottrazione tra insiemi: stai rimuovendo tutti gli elementi del secondo insieme dal primo. Il metodo difference() restituisce un nuovo insieme con gli elementi rimanenti, lasciando invariati entrambi gli insiemi originali.

Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};

Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks);  // {meeting, report}

Questa operazione è particolarmente utile per trovare ciò che manca, ciò che resta da fare o ciò che è presente in una sola raccolta rispetto a un'altra. A differenza dell'intersezione, che individua gli elementi comuni, la differenza mette in evidenza ciò che distingue un insieme da un altro.

challenge icon

Sfida

Facile

Crea un programma che gestisca un sistema di gestione dei progetti identificando le attività pianificate ma non ancora completate. Il tuo programma deve:

  1. Leggere una stringa in input che rappresenta il nome del progetto
  2. Leggere più stringhe in input che rappresentano le attività pianificate (l'input terminerà quando riceverai "planned_done")
  3. Leggere più stringhe in input che rappresentano le attività completate (l'input terminerà quando riceverai "completed_done")
  4. Creare due Set separati per memorizzare le attività pianificate e quelle completate
  5. Usare il metodo difference() per trovare le attività pianificate ma non ancora completate
  6. Stampare l'analisi dello stato del progetto nel formato esatto mostrato di seguito

Ad esempio, se il nome del progetto è "Website Launch", le attività pianificate sono "Design mockups", "Write content", "Setup database", "Test functionality", "Deploy site" e le attività completate sono "Design mockups", "Setup database", il programma dovrebbe produrre:

Project: Website Launch
Planned tasks: {Design mockups, Write content, Setup database, Test functionality, Deploy site}
Completed tasks: {Design mockups, Setup database}
Remaining tasks: {Write content, Test functionality, Deploy site}
Tasks completed: 2
Tasks remaining: 3
Progress: 40.0% complete
Status: Project in progress - 3 task(s) remaining

Se il nome del progetto è "Mobile App Development", le attività pianificate sono "Create wireframes", "Develop UI", "Implement features" e le attività completate sono "Create wireframes", "Develop UI", "Implement features", il programma dovrebbe produrre:

Project: Mobile App Development
Planned tasks: {Create wireframes, Develop UI, Implement features}
Completed tasks: {Create wireframes, Develop UI, Implement features}
Remaining tasks: {}
Tasks completed: 3
Tasks remaining: 0
Progress: 100.0% complete
Status: Project completed successfully

Se il nome del progetto è "Marketing Campaign", le attività pianificate sono "Research target audience", "Create content", "Design graphics", "Launch campaign", "Analyze results" e le attività completate sono "Research target audience", il programma dovrebbe produrre:

Project: Marketing Campaign
Planned tasks: {Research target audience, Create content, Design graphics, Launch campaign, Analyze results}
Completed tasks: {Research target audience}
Remaining tasks: {Create content, Design graphics, Launch campaign, Analyze results}
Tasks completed: 1
Tasks remaining: 4
Progress: 20.0% complete
Status: Project in progress - 4 task(s) remaining

Il programma deve usare il metodo difference() per trovare le attività presenti nel Set delle attività pianificate ma non in quello delle attività completate. Calcola la percentuale di avanzamento dividendo il numero di attività completate per il numero totale di attività pianificate e moltiplicando per 100; arrotonda a 1 cifra decimale. Se tutte le attività sono completate, mostra "Project completed successfully" come stato; altrimenti, mostra "Project in progress - X task(s) remaining", dove X è il numero di attività rimanenti.

Provalo tu

import 'dart:io';

void main() {
  // Leggi il nome del progetto
  String? projectName = stdin.readLineSync();
  
  // Leggi le attività pianificate fino a "planned_done"
  Set<String> plannedTasks = <String>{};
  String? task;
  while ((task = stdin.readLineSync()) != "planned_done") {
    if (task != null) {
      plannedTasks.add(task);
    }
  }
  
  // Leggi le attività completate fino a "completed_done"
  Set<String> completedTasks = <String>{};
  while ((task = stdin.readLineSync()) != "completed_done") {
    if (task != null) {
      completedTasks.add(task);
    }
  }
  
  // TODO: Scrivi il tuo codice qui sotto
  // Usa il metodo difference() per trovare le attività rimanenti
  // Calcola la percentuale di avanzamento
  // Determina lo stato del progetto
  
  // Mostra i risultati
  print("Project: $projectName");
  print("Planned tasks: $plannedTasks");
  print("Completed tasks: $completedTasks");
  // Aggiungi qui le istruzioni per mostrare i risultati rimanenti
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Dart online