요약 보고서
Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 53번째.
최종 기능: 한 가지 카테고리만 진행하는 대신, 전체 퀴즈를 실행하고 마지막에 카테고리별 요약을 생성합니다.
당신은 모든 장의 내용을 한꺼번에 활용하게 될 것입니다. 반복을 위한 튜플 구조 분해(tuple destructuring), 문자열 장의 관대한 채점(lenient grading), 딕셔너리 장의 기본 서브스크립트 딕셔너리(default-subscript dictionaries), 그리고 결정론적 출력을 위한 정렬된 반복(sorted iteration)을 모두 사용합니다.
카테고리별 카운터를 두 개의 병렬 딕셔너리로 작성합니다:
var totals: [String: Int] = [:]
var rights: [String: Int] = [:]모든 질문에 대해 totals[cat, default: 0] += 1을 증가시키고, 정답인 경우에만 rights[cat, default: 0]를 증가시킵니다. 마지막에는 보고서를 출력하기 위해 카테고리를 알파벳 순서로 순회합니다.
챌린지
중급이전 레슨과 동일한 6개 질문 은행입니다. stdin에서 한 줄에 하나씩, 은행과 동일한 순서로 6개의 답변을 읽으세요. 관대한 채점(lenient grading) 방식을 사용하세요.
다음 순서대로 출력하세요:
- 카테고리별로 한 줄씩 알파벳 순으로 정렬하여
<category>: <right>/<total>형식으로 출력 - 마지막 한 줄: 전체 실행에 대한
Total: <right>/<total>출력
입력값이 4 / 3.14 / Paris / Atlantic / green / WATER인 경우, 출력은 다음과 같습니다:
geo: 1/2
math: 2/2
science: 2/2
Total: 5/6치트 시트
카테고리별 점수를 추적하기 위해 두 개의 병렬 딕셔너리를 사용합니다:
var totals: [String: Int] = [:]
var rights: [String: Int] = [:]
// 카테고리가 cat인 각 질문에 대해:
totals[cat, default: 0] += 1
// 정답인 경우:
rights[cat, default: 0] += 1결정론적인 출력을 위해 sorted()를 사용하여 카테고리를 알파벳 순서로 순회합니다:
for cat in totals.keys.sorted() {
let r = rights[cat, default: 0]
let t = totals[cat]!
print("\(cat): \(r)/\(t)")
}딕셔너리 값을 합산하여 모든 카테고리의 총계를 계산합니다:
let totalRight = rights.values.reduce(0, +)
let totalAll = totals.values.reduce(0, +)
print("Total: \(totalRight)/\(totalAll)")직접 해보기
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개의 답변 읽기; 관대한 채점; 카테고리별 총계/정답 수 집계;
// 정렬된 요약 행 + 합계 출력
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.