Calculadora con historial
Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 56 de 56.
Desafío
IntermedioConstruye una calculadora que procese un flujo de expresiones, tolere errores e informe un historial por operador al final.
Lee una sola línea de entrada: una lista separada por comas de expresiones a:op:b. Los operadores son +, -, *, /. Define un enum CalcError: Error con los casos parse, divideByZero, unknownOp.
Para cada expresión, en orden:
- Imprime
= <n>en caso de éxito - Imprime
parse,divZero, ounknownOppara cada caso de error
Después de las líneas por expresión, imprime una línea por cada operador que haya tenido éxito al menos una vez, en el orden fijo +, -, *, /:
<op>: count=<n> sum=<total>count es cuántas veces ese operador tuvo éxito; sum es el total de esos resultados exitosos.
Para la entrada 3:+:5,10:/:0,7:*:2,9:%:2,12:-:4,8:+:2, la salida es:
= 8
divZero
= 14
unknownOp
= 8
= 10
+: count=2 sum=18
-: count=1 sum=8
*: count=1 sum=14Pruébalo tú mismo
let exprs = readLine()!.components(separatedBy: ",")
let order = ["+", "-", "*", "/"]
// TODO: enum CalcError; func compute(...) throws -> Int;
// bucle, do/try, imprimir resultado; construir historial por operación;
// informe final en orden fijo, solo operaciones que tuvieron éxito
Todas las lecciones de Lógica y Flujo
1Strings a fondo
Conteo e índicesMayúsculas, minúsculas y TrimBúsqueda en StringsDividir y unirReemplazo de subcadenasResumen: Validación de usuario4Conjuntos
Crear conjuntosUnión e intersecciónResta y diferencia simétricaSubconjunto y superconjuntoResumen - Filtro de etiquetas7Proyecto - Seguimiento de hábitos
Descripción general del proyectoMarcar como completado10Proyecto - Motor de cuestionarios
Descripción general del proyectoHacer preguntas2Rangos e Intervalos
Cerrados vs. SemiabiertosSaltos (Stride)Métodos de RangosRangos en SwitchResumen - Cuadrícula de calendario5Funciones de orden superior Pt. 1
MapFilterReduceEncadenar map, filter, reduceResumen - Estadísticas de palabras