Menu
Coddy logo textTech

履歴機能付き計算機

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

challenge icon

チャレンジ

中級

式のストリームを処理し、エラーを許容し、最後に演算子ごとの履歴を報告する計算機を構築してください。

入力として、カンマ区切りの a:op:b 形式の式のリストを1行読み込みます。演算子は +-*/ です。parsedivideByZerounknownOp のケースを持つ enum CalcError: Error を定義してください。

各式について、順番に以下を行ってください:

  • 成功した場合は = <n> を出力します
  • 各エラーケースに応じて parsedivZero、または 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、結果を出力。演算ごとの履歴を構築。
// 固定順序での最終レポート、成功した演算のみ

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