Menu
CoddyTech

Ôn tập: danh sách khách mời không trùng lặp

Thuộc phần Logic và luồng điều khiển trong hành trình Dart của Coddy. Bài học 25 trên 65.

challenge icon

Thử thách

Dễ

Tạo một chương trình quản lý hệ thống lên kế hoạch sự kiện bằng cách phân tích danh sách khách mời từ hai nguồn thiệp mời khác nhau. Chương trình cần:

  1. Đọc một chuỗi đầu vào đại diện cho tên sự kiện
  2. Đọc nhiều chuỗi đầu vào đại diện cho khách mời trong danh sách thiệp mời thứ nhất (đầu vào kết thúc khi bạn nhận được "list1_done")
  3. Đọc nhiều chuỗi đầu vào đại diện cho khách mời trong danh sách thiệp mời thứ hai (đầu vào kết thúc khi bạn nhận được "list2_done")
  4. Chuyển cả hai danh sách khách mời thành tập hợp để tự động xử lý các phần tử trùng lặp trong mỗi danh sách
  5. Dùng phương thức union() để tìm tất cả khách mời duy nhất được mời tham dự sự kiện
  6. Dùng phương thức intersection() để tìm khách mời có tên trong cả hai danh sách thiệp mời
  7. Dùng phương thức difference() để tìm khách mời chỉ có tên trong danh sách thiệp mời thứ nhất
  8. In kết quả phân tích danh sách khách mời theo đúng định dạng bên dưới

Ví dụ, nếu tên sự kiện là "Birthday Party", danh sách thứ nhất có "Alice", "Bob", "Charlie", "Diana", còn danh sách thứ hai có "Bob", "Diana", "Eve", "Frank", chương trình của bạn sẽ in ra:

Event: Birthday Party
First invitation list: {Alice, Bob, Charlie, Diana}
Second invitation list: {Bob, Diana, Eve, Frank}
All unique guests: {Alice, Bob, Charlie, Diana, Eve, Frank}
Guests on both lists: {Bob, Diana}
Guests only on first list: {Alice, Charlie}
Total unique guests: 6
Duplicate invitations: 2
First list only: 2
Status: Guest list analysis completed

Nếu tên sự kiện là "Wedding Reception", danh sách thứ nhất có "John", "Mary", "Sarah", còn danh sách thứ hai có "Tom", "Lisa", "Mike", chương trình của bạn sẽ in ra:

Event: Wedding Reception
First invitation list: {John, Mary, Sarah}
Second invitation list: {Tom, Lisa, Mike}
All unique guests: {John, Mary, Sarah, Tom, Lisa, Mike}
Guests on both lists: {}
Guests only on first list: {John, Mary, Sarah}
Total unique guests: 6
Duplicate invitations: 0
First list only: 3
Status: Guest list analysis completed

Nếu tên sự kiện là "Company Meeting", danh sách thứ nhất có "Alex", "Jordan", "Taylor", "Morgan", "Alex", còn danh sách thứ hai có "Jordan", "Taylor", "Casey", "Jordan", chương trình của bạn sẽ in ra:

Event: Company Meeting
First invitation list: {Alex, Jordan, Taylor, Morgan}
Second invitation list: {Jordan, Taylor, Casey}
All unique guests: {Alex, Jordan, Taylor, Morgan, Casey}
Guests on both lists: {Jordan, Taylor}
Guests only on first list: {Alex, Morgan}
Total unique guests: 5
Duplicate invitations: 2
First list only: 2
Status: Guest list analysis completed

Chương trình của bạn phải thể hiện cả ba phép toán trên tập hợp: union() để kết hợp tất cả khách mời, intersection() để tìm khách mời có tên trong cả hai danh sách và difference() để tìm khách mời chỉ có tên trong danh sách thứ nhất. Trước tiên, hãy chuyển các danh sách đầu vào thành tập hợp để xử lý các phần tử trùng lặp trong từng danh sách, sau đó thực hiện các phép toán trên tập hợp để phân tích cách phân bố khách mời.

Tự làm thử

import 'dart:io';

void main() {
  // Đọc tên sự kiện
  String? eventName = stdin.readLineSync();
  
  // Đọc danh sách khách mời thứ nhất
  List<String> firstList = [];
  String? input;
  while ((input = stdin.readLineSync()) != "list1_done") {
    if (input != null) {
      firstList.add(input);
    }
  }
  
  // Đọc danh sách khách mời thứ hai
  List<String> secondList = [];
  while ((input = stdin.readLineSync()) != "list2_done") {
    if (input != null) {
      secondList.add(input);
    }
  }
  
  // Chuyển các danh sách thành tập hợp
  Set<String> firstSet = firstList.toSet();
  Set<String> secondSet = secondList.toSet();
  
  // TODO: Viết code của bạn bên dưới
  // Dùng các phương thức union(), intersection() và difference() để phân tích danh sách khách mời
  // Tính tất cả khách mời không trùng lặp, khách mời có trong cả hai danh sách và khách mời chỉ có trong danh sách thứ nhất
  
  // In kết quả theo định dạng yêu cầu
  print("Event: $eventName");
  print("First invitation list: $firstSet");
  print("Second invitation list: $secondSet");
  // Thêm các câu lệnh in ra còn lại tại đây
}

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Dart online