Menu
CoddyTech

Selisih set

Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 24 dari 65.

Terkadang kamu perlu mencari elemen yang ada di satu Set, tetapi tidak ada di Set lainnya. Method difference() mengatasi hal ini dengan membuat set baru yang hanya berisi elemen dari set pertama yang tidak ada di set kedua.

Anggap saja ini seperti pengurangan pada set, kamu menghapus semua elemen dari set kedua dari set pertama. Method difference() mengembalikan set baru yang berisi elemen yang tersisa, tanpa mengubah kedua set asli.

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

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

Operasi ini sangat berguna untuk menemukan apa yang belum ada, apa yang masih harus dilakukan, atau apa yang unik pada satu kumpulan dibandingkan dengan kumpulan lainnya. Tidak seperti irisan yang menemukan kesamaan, selisih menyoroti hal yang membedakan satu set dari set lainnya.

challenge icon

Tantangan

Mudah

Buat program yang mengelola sistem manajemen proyek dengan mengidentifikasi tugas yang sudah direncanakan tetapi belum diselesaikan. Programmu harus:

  1. Membaca input string yang mewakili nama proyek
  2. Membaca beberapa input string yang mewakili tugas yang direncanakan (input akan berakhir saat kamu menerima "planned_done")
  3. Membaca beberapa input string yang mewakili tugas yang sudah diselesaikan (input akan berakhir saat kamu menerima "completed_done")
  4. Membuat dua set terpisah untuk menyimpan tugas yang direncanakan dan tugas yang sudah diselesaikan
  5. Menggunakan method difference() untuk menemukan tugas yang sudah direncanakan tetapi belum diselesaikan
  6. Mencetak analisis status proyek dalam format persis seperti yang ditunjukkan di bawah ini

Misalnya, jika nama proyeknya adalah "Website Launch", tugas yang direncanakan adalah "Design mockups", "Write content", "Setup database", "Test functionality", "Deploy site", dan tugas yang sudah diselesaikan adalah "Design mockups", "Setup database", programmu harus menampilkan:

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

Jika nama proyeknya adalah "Mobile App Development", tugas yang direncanakan adalah "Create wireframes", "Develop UI", "Implement features", dan tugas yang sudah diselesaikan adalah "Create wireframes", "Develop UI", "Implement features", programmu harus menampilkan:

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

Jika nama proyeknya adalah "Marketing Campaign", tugas yang direncanakan adalah "Research target audience", "Create content", "Design graphics", "Launch campaign", "Analyze results", dan tugas yang sudah diselesaikan adalah "Research target audience", programmu harus menampilkan:

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

Programmu harus menggunakan method difference() untuk menemukan tugas yang ada di set tugas yang direncanakan tetapi tidak ada di set tugas yang sudah diselesaikan. Hitung persentase progres dengan membagi jumlah tugas yang sudah diselesaikan dengan jumlah total tugas yang direncanakan, lalu mengalikannya dengan 100, dibulatkan hingga 1 angka desimal. Jika semua tugas sudah diselesaikan, tampilkan "Project completed successfully" sebagai status. Jika belum, tampilkan "Project in progress - X task(s) remaining", dengan X sebagai jumlah tugas yang tersisa.

Coba sendiri

import 'dart:io';

void main() {
  // Baca nama proyek
  String? projectName = stdin.readLineSync();
  
  // Baca tugas yang direncanakan hingga "planned_done"
  Set<String> plannedTasks = <String>{};
  String? task;
  while ((task = stdin.readLineSync()) != "planned_done") {
    if (task != null) {
      plannedTasks.add(task);
    }
  }
  
  // Baca tugas yang selesai hingga "completed_done"
  Set<String> completedTasks = <String>{};
  while ((task = stdin.readLineSync()) != "completed_done") {
    if (task != null) {
      completedTasks.add(task);
    }
  }
  
  // TODO: Tulis kodemu di bawah ini
  // Gunakan method difference() untuk menemukan tugas yang tersisa
  // Hitung persentase kemajuan
  // Tentukan status proyek
  
  // Tampilkan hasilnya
  print("Project: $projectName");
  print("Planned tasks: $plannedTasks");
  print("Completed tasks: $completedTasks");
  // Tambahkan pernyataan output yang tersisa di sini
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Dart online