履歴機能付き計算機
CoddyのSwiftジャーニー「ロジックとフロー」セクションの一部 — レッスン 56/56。
チャレンジ
中級式のストリームを処理し、エラーを許容し、最後に演算子ごとの履歴を報告する計算機を構築してください。
入力として、カンマ区切りの a:op:b 形式の式のリストを1行読み込みます。演算子は +、-、*、/ です。parse、divideByZero、unknownOp のケースを持つ enum CalcError: Error を定義してください。
各式について、順番に以下を行ってください:
- 成功した場合は
= <n>を出力します - 各エラーケースに応じて
parse、divZero、またはunknownOpを出力します
各式の出力行の後に、少なくとも1回成功した演算子ごとに、+、-、*、/ の固定順序で1行ずつ出力します:
<op>: count=<n> sum=<total>count はその演算子が成功した回数、sum はそれらの成功した結果の合計です。
入力が 3:+:5,10:/:0,7:*:2,9:%:2,12:-:4,8:+:2 の場合、出力は以下のようになります:
= 8
divZero
= 14
unknownOp
= 8
= 10
+: count=2 sum=18
-: count=1 sum=8
*: count=1 sum=14自分で試してみよう
let exprs = readLine()!.components(separatedBy: ",")
let order = ["+", "-", "*", "/"]
// TODO: enum CalcError; func compute(...) throws -> Int;
// ループ、do/try、結果を出力。演算ごとの履歴を構築。
// 固定順序での最終レポート、成功した演算のみ