Menu
Coddy logo textTech

まとめ:重複のないゲストリスト

CoddyのDartジャーニー「論理とフロー」セクションの一部 — レッスン 25/65。

challenge icon

チャレンジ

簡単

2つの異なる招待元からのゲストリストを分析して、イベント計画システムを管理するプログラムを作成してください。プログラムは以下の手順を実行する必要があります:

  1. イベント名を表す文字列入力を読み込む
  2. 最初の招待リストのゲストを表す複数の文字列入力を読み込む(入力は "list1_done" を受け取った時点で終了します)
  3. 2番目の招待リストのゲストを表す複数の文字列入力を読み込む(入力は "list2_done" を受け取った時点で終了します)
  4. 各リスト内の重複を自動的に処理するために、両方のゲストリストを Set に変換する
  5. union() メソッドを使用して、イベントに招待されたすべてのユニークなゲストを見つける
  6. intersection() メソッドを使用して、両方の招待リストに含まれているゲストを見つける
  7. difference() メソッドを使用して、最初の招待リストにのみ含まれているゲストを見つける
  8. 以下の形式でゲストリストの分析結果を出力する

例えば、イベント名が "Birthday Party" で、最初のリストに "Alice", "Bob", "Charlie", "Diana" が含まれ、2番目のリストに "Bob", "Diana", "Eve", "Frank" が含まれる場合、プログラムは以下のように出力する必要があります:

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

イベント名が "Wedding Reception" で、最初のリストに "John", "Mary", "Sarah" が含まれ、2番目のリストに "Tom", "Lisa", "Mike" が含まれる場合、プログラムは以下のように出力する必要があります:

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

イベント名が "Company Meeting" で、最初のリストに "Alex", "Jordan", "Taylor", "Morgan", "Alex" が含まれ、2番目のリストに "Jordan", "Taylor", "Casey", "Jordan" が含まれる場合、プログラムは以下のように出力する必要があります:

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

プログラムでは、3つのセット操作すべてを使用する必要があります。すべてのゲストを統合するための union()、両方のリストに現れるゲストを見つけるための intersection()、そして最初のリストにのみ存在するゲストを見つけるための difference() です。個別のリスト内の重複を処理するために、まず入力リストを Set に変換し、それからセット操作を実行してゲストの分布を分析してください。

自分で試してみよう

import 'dart:io';

void main() {
  // イベント名を読み込む
  String? eventName = stdin.readLineSync();
  
  // 1つ目の招待リストを読み込む
  List<String> firstList = [];
  String? input;
  while ((input = stdin.readLineSync()) != "list1_done") {
    if (input != null) {
      firstList.add(input);
    }
  }
  
  // 2つ目の招待リストを読み込む
  List<String> secondList = [];
  while ((input = stdin.readLineSync()) != "list2_done") {
    if (input != null) {
      secondList.add(input);
    }
  }
  
  // リストをセットに変換する
  Set<String> firstSet = firstList.toSet();
  Set<String> secondSet = secondList.toSet();
  
  // TODO: 以下にコードを記述してください
  // union()、intersection()、difference() メソッドを使用してゲストリストを分析します
  // すべてのユニークなゲスト、両方のリストに載っているゲスト、1つ目のリストにのみ載っているゲストを算出します
  
  // 結果を所定の形式で出力する
  print("Event: $eventName");
  print("First invitation list: $firstSet");
  print("Second invitation list: $secondSet");
  // 残りの出力ステートメントをここに追加してください
}

論理とフローのすべてのレッスン