Menu
Coddy logo textTech

Küme Farkı

Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 24 / 65.

Bazen bir Set içinde bulunan ancak diğerinde bulunmayan öğeleri bulmanız gerekir. difference() yöntemi, yalnızca ilk kümede bulunan ancak ikinci kümede bulunmayan öğeleri içeren yeni bir küme oluşturarak bunu çözer.

Bunu kümeler için çıkarma işlemi gibi düşünün - ikinci kümenin tüm elemanlarını birinci kümeden çıkarıyorsunuz. difference() metodu, her iki orijinal kümeyi de değiştirmeden bırakarak, kalan elemanlarla yeni bir küme döndürür.

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

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

Bu işlem, neyin eksik olduğunu, yapılacak nelerin kaldığını veya bir koleksiyonda diğerine kıyasla neyin benzersiz olduğunu bulmak için özellikle kullanışlıdır. Ortak noktaları bulan kesişimin aksine fark, bir kümeyi diğerinden farklı kılan şeyleri öne çıkarır.

challenge icon

Görev

Kolay

Henüz tamamlanmamış, planlanmış görevleri belirleyerek bir proje yönetim sistemini yöneten bir program oluşturun. Programınız şunları yapmalıdır:

  1. Proje adını temsil eden bir dize girdisi okuyun
  2. Planlanmış görevleri temsil eden birden fazla dize girdisi okuyun (girdi, "planned_done" alındığında sona erecektir)
  3. Tamamlanmış görevleri temsil eden birden fazla dize girdisi okuyun (girdi, "completed_done" alındığında sona erecektir)
  4. Planlanmış görevleri ve tamamlanmış görevleri depolamak için iki ayrı Set oluşturun
  5. Henüz tamamlanmamış planlanmış görevleri bulmak için difference() yöntemini kullanın
  6. Proje durumu analizini aşağıda gösterilen tam biçimde yazdırın

Örneğin, proje adı "Website Launch", planlanmış görevler "Design mockups", "Write content", "Setup database", "Test functionality", "Deploy site" ve tamamlanmış görevler "Design mockups", "Setup database" ise programınız şunu üretmelidir:

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

Proje adı "Mobile App Development", planlanmış görevler "Create wireframes", "Develop UI", "Implement features" ve tamamlanmış görevler "Create wireframes", "Develop UI", "Implement features" ise programınız şunu üretmelidir:

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

Proje adı "Marketing Campaign", planlanmış görevler "Research target audience", "Create content", "Design graphics", "Launch campaign", "Analyze results" ve tamamlanmış görevler "Research target audience" ise programınız şunu üretmelidir:

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

Programınız, planlanmış görevler Set'inde bulunan ancak tamamlanmış görevler Set'inde bulunmayan görevleri bulmak için difference() yöntemini kullanmalıdır. Tamamlanmış görevleri toplam planlanmış görev sayısına bölüp 100 ile çarparak ve sonucu 1 ondalık basamağa yuvarlayarak ilerleme yüzdesini hesaplayın. Tüm görevler tamamlandıysa durum olarak "Proje başarıyla tamamlandı" ifadesini gösterin; aksi takdirde X'in kalan görev sayısı olduğu "Proje devam ediyor - X görev kaldı" ifadesini gösterin.

GEREKLİ ÇIKTI BİÇİMİ: [Çevrilmiş içeriğiniz burada]

Kendin dene

import 'dart:io';

void main() {
  // Proje adını oku
  String? projectName = stdin.readLineSync();
  
  // "planned_done" gelene kadar planlanan görevleri oku
  Set<String> plannedTasks = <String>{};
  String? task;
  while ((task = stdin.readLineSync()) != "planned_done") {
    if (task != null) {
      plannedTasks.add(task);
    }
  }
  
  // "completed_done" gelene kadar tamamlanan görevleri oku
  Set<String> completedTasks = <String>{};
  while ((task = stdin.readLineSync()) != "completed_done") {
    if (task != null) {
      completedTasks.add(task);
    }
  }
  
  // TODO: Kodunuzu aşağıya yazın
  // Kalan görevleri bulmak için difference() metodunu kullanın
  // İlerleme yüzdesini hesaplayın
  // Proje durumunu belirleyin
  
  // Sonuçları yazdır
  print("Project: $projectName");
  print("Planned tasks: $plannedTasks");
  print("Completed tasks: $completedTasks");
  // Kalan çıktı ifadelerini buraya ekleyin
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi