Menu
Coddy logo textTech

データトランスフォーマー

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 56/56。

最終課題では、データセットをサマリーレポートに再構成します。フィルタリング、マッピング、グルーピング、エラーハンドリング、およびメソッド定義を1つのプログラムに組み合わせます。

challenge icon

チャレンジ

中級

配列 students が与えられています。各エントリは :id:grades(整数の配列、空の場合あり)、および :subjects(文字列の配列)を持つハッシュです。

2つのキーを持つハッシュを返すメソッド transform_dataset(students) を定義してください:

  • :qualified_ids:少なくとも1つの成績を持ち、かつすべての成績が 70 を厳密に超えている(all? を使用)生徒の :id をソートした配列。
  • :subject_counts:対象となる生徒が履修している各科目を、その科目を履修している対象生徒の数にマッピングしたハッシュ。

生徒の :grades 配列が空の場合、その生徒は対象外(not qualified)として、静かにスキップしてください。

次に、メソッドを呼び出して以下を出力してください:

  1. 対象となるIDを , で連結し、先頭に Qualified: を付けたもの。対象者がいない場合は、Qualified: (none) と出力してください。
  2. 各科目ごとに1行ずつ(アルファベット順にソート)、<subject>: <count> の形式で出力してください。

デフォルトの students の場合、出力は以下のようになります:

Qualified: S1, S4
biology: 1
history: 1
math: 2
physics: 1

自分で試してみよう

students = [
  { id: "S1", grades: [85, 92, 78], subjects: ["math", "physics"] },
  { id: "S2", grades: [65, 80, 90], subjects: ["math", "biology"] },
  { id: "S3", grades: [],          subjects: ["art"] },
  { id: "S4", grades: [88, 95],    subjects: ["math", "biology", "history"] },
  { id: "S5", grades: [70, 75],    subjects: ["chemistry"] }
]

# TODO: def transform_dataset(students) を定義し、{ qualified_ids:, subject_counts: } を返す
# TODO: 条件を満たすID(qualified IDs)と科目ごとの数(subject counts)を出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン