Menu
Coddy logo textTech

まとめ:List Processor

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

challenge icon

チャレンジ

簡単

カスタマイズ可能なリストプロセッサを構築することで、高階関数を実証する柔軟なデータ処理システムを作成してください。プログラムは、さまざまな処理関数を作成し、リストデータに対して任意の操作を適用できるメインプロセッサ関数を使用します。

  1. カンマで区切られた数値を含む文字列入力を読み取ります(例:"10,20,30,40"
  2. 最初の操作タイプを表す文字列入力を読み取ります("multiply""add"、または "subtract"
  3. 最初の操作で使用する値を表す文字列入力を読み取ります(例:"3"
  4. 2番目の操作タイプを表す文字列入力を読み取ります("multiply""add"、または "subtract"
  5. 2番目の操作で使用する値を表す文字列入力を読み取ります(例:"5"
  6. 最初の入力を個々の数値に分割し、それぞれを整数に変換します
  7. 3つの操作関数を作成します:
    • multiplyBy - 2つの整数を受け取り、最初の数に2番目の数を掛けた値を返します
    • addTo - 2つの整数を受け取り、最初の数に2番目の数を足した値を返します
    • subtractFrom - 2つの整数を受け取り、最初の数から2番目の数を引いた値を返します
  8. processListWithOperation という名前のメイン関数を作成します。この関数は3つのパラメータを受け取ります:
    • 整数のリスト
    • 2つの整数を受け取り、整数を返す関数
    • 操作で使用する整数値
  9. processListWithOperation 関数は、指定された値を使用してリスト内の各数値に指定された関数を適用し、その結果を含む新しいリストを返す必要があります
  10. 元のリストに最初の操作を適用し、次に最初の操作の結果に2番目の操作を適用します
  11. 以下の正確な形式で結果を表示します

例えば、入力が "2,4,6""multiply""3""add""10" の場合、プログラムは次のように出力する必要があります:

Advanced List Processor
=======================
Original list: [2, 4, 6]
First operation: multiply by 3
After first operation: [6, 12, 18]
Second operation: add 10
Final result: [16, 22, 28]
Processing completed successfully

入力が "15,25,35""subtract""5""multiply""2" の場合、プログラムは次のように出力する必要があります:

Advanced List Processor
=======================
Original list: [15, 25, 35]
First operation: subtract 5
After first operation: [10, 20, 30]
Second operation: multiply by 2
Final result: [20, 40, 60]
Processing completed successfully

プログラムは、操作タイプの入力に基づいて適切な操作関数を processListWithOperation に渡すことで、高階関数を実証する必要があります。条件文を使用して、各操作にどの関数を渡すかを決定してください。processListWithOperation 関数は、入力リストを反復処理し、各要素に指定された値を使用して指定された関数を適用し、結果を新しいリストに収集する必要があります。最初の操作の結果を2番目の操作の入力として使用し、操作を順番に適用してください。

自分で試してみよう

import 'dart:io';

void main() {
  // 入力を読み込む
  String? numbersInput = stdin.readLineSync();
  String? firstOperation = stdin.readLineSync();
  String? firstValue = stdin.readLineSync();
  String? secondOperation = stdin.readLineSync();
  String? secondValue = stdin.readLineSync();
  
  // 文字列の入力を整数のリストに変換する
  List<int> originalList = numbersInput!.split(',').map((e) => int.parse(e.trim())).toList();
  int firstOpValue = int.parse(firstValue!);
  int secondOpValue = int.parse(secondValue!);
  
  // TODO: 以下にコードを記述してください
  // 3つの演算関数(multiplyBy, addTo, subtractFrom)を作成します
  // processListWithOperation 関数を作成します
  // 演算を順番に適用し、結果を保存します
  
  // 必要な形式で結果を出力します
  print('Advanced List Processor');
  print('=======================');
  print('Original list: $originalList');
  // 最初の演算とその結果を出力します
  // 2番目の演算と最終結果を出力します
  print('Processing completed successfully');
}

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