Menu
CoddyTech

集計レポート

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

最後の機能です。1つのカテゴリーだけでなく、クイズ全体を実行し、最後にカテゴリーごとの概要を表示します。

この章では、反復処理のためのタプルの分割代入、文字列の章で学んだ寛容な採点、辞書の章で学んだデフォルト値付きの添字アクセスができる辞書、決定論的な出力を得るためのソート済み反復処理をすべて同時に活用します。

カテゴリごとのカウンターを、並行する2つの辞書として作成します。

var totals: [String: Int] = [:]
var rights: [String: Int] = [:]

すべての質問でtotals[cat, default: 0] += 1をインクリメントし、正解した場合にのみrights[cat, default: 0]をインクリメントします。最後に、カテゴリをアルファベット順に並べてレポートを出力します。

challenge icon

チャレンジ

中級

前のステップと同じ、この6問の問題バンクを使ってプログラムを始めましょう。

let questions: [(String, String, String)] = [
    ("math", "2 + 2?", "4"),
    ("math", "Value of pi to 2 decimals?", "3.14"),
    ("geo", "Capital of France?", "Paris"),
    ("geo", "Largest ocean?", "Pacific"),
    ("science", "Color of grass?", "green"),
    ("science", "H2O is?", "water")
]

stdin から6つの回答を、問題バンクと同じ順序で1行に1つずつ読み込みます。寛容な採点方式を使ってください。

次の順序で出力します。

  1. カテゴリごとに1行ずつ、アルファベット順に、<category>: <right>/<total> の形式で出力
  2. 実行全体の合計を示す最後の1行:Total: <right>/<total>

入力が 4 / 3.14 / Paris / Atlantic / green / WATER の場合、出力は次のとおりです。

geo: 1/2
math: 2/2
science: 2/2
Total: 5/6

自分で試してみよう

let questions: [(String, String, String)] = [
    ("math", "2 + 2?", "4"),
    ("math", "Value of pi to 2 decimals?", "3.14"),
    ("geo", "Capital of France?", "Paris"),
    ("geo", "Largest ocean?", "Pacific"),
    ("science", "Color of grass?", "green"),
    ("science", "H2O is?", "water")
]

// TODO: 6 件の回答を読み取り、寛容に採点し、カテゴリごとの問題数と正解数を集計する;
// ソート済みの集計行と Total を出力する
quiz icon腕試し

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

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

自分で練習してみよう: Swiftプレイグラウンド