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, neyin yapılması gerektiğini veya bir koleksiyonun diğerine kıyasla neyin benzersiz olduğunu bulmak için özellikle yararlıdır. Ortak noktaları bulan kesişimin aksine, fark (difference), bir kümeyi diğerinden farklı kılan unsurları vurgular.

challenge icon

Görev

Kolay

Planlanan ancak henüz tamamlanmayan 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 (string) girdisi okuyun
  2. Planlanan görevleri temsil eden birden fazla dize girdisi okuyun (girdi "planned_done" aldığınızda sona erecektir)
  3. Tamamlanan görevleri temsil eden birden fazla dize girdisi okuyun (girdi "completed_done" aldığınızda sona erecektir)
  4. Planlanan görevleri ve tamamlanan görevleri saklamak için iki ayrı Set oluşturun
  5. Planlanan ancak henüz tamamlanmayan görevleri bulmak için difference() metodunu kullanın
  6. Proje durum analizini tam olarak aşağıda gösterilen formatta yazdırın

Örneğin, proje adı "Website Launch" ise, planlanan görevler "Design mockups", "Write content", "Setup database", "Test functionality", "Deploy site" ve tamamlanan görevler "Design mockups", "Setup database" ise, programınız şu çıktıyı vermelidir:

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

Eğer proje adı "Mobile App Development" ise, planlanan görevler "Create wireframes", "Develop UI", "Implement features" ve tamamlanan görevler "Create wireframes", "Develop UI", "Implement features" ise, programınız şu çıktıyı vermelidir:

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

Eğer proje adı "Marketing Campaign" ise, planlanan görevler "Research target audience", "Create content", "Design graphics", "Launch campaign", "Analyze results" ve tamamlanan görevler "Research target audience" ise, programınız şu çıktıyı vermelidir:

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, planlanan görevler Set'inde bulunan ancak tamamlanan görevler Set'inde bulunmayan görevleri bulmak için difference() metodunu kullanmalıdır. İlerleme yüzdesini, tamamlanan görevleri toplam planlanan görevlere bölüp 100 ile çarparak ve virgülden sonra 1 basamağa yuvarlayarak hesaplayın. Tüm görevler tamamlanmışsa durum olarak "Project completed successfully" gösterin, aksi takdirde X kalan görev sayısı olmak üzere "Project in progress - X task(s) remaining" gösterin.

Kopya kağıdı

difference() yöntemi, ilk kümede bulunan ancak ikinci kümede bulunmayan öğeleri içeren yeni bir küme oluşturur:

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 kümeler için çıkarma işlemi gibidir - ikinci kümenin tüm öğelerini ilk kümeden çıkarır, her iki orijinal kümeyi de değiştirmeden kalan öğelerle yeni bir küme döndürür.

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