println("Ejercicio 1") val temperaturas = List(28, 42, 35, 50, 22, 47, 30, 40, 55, 38) val criticas = temperaturas.filter(t=>t>35) val ajuste = criticas.map(t=>math.min(t+3,52)) val alerta = ajuste.map(t=> if(t<43) "Alerta Moderada" else if(t<49) "Alerta Alta" else "Alerta Extrema" ) println(s"La lista de temperaturas $temperaturas") println(s"Las críticas son $criticas") println(s"La lista ajustada es $ajuste") println(s"Alerta: $alerta") //-------------------- println("Ejercicio 2") val ventas = List(150.0, 450.0, 80.0, 600.0, 200.0) def procesarVenta(monto: Double, transformacion: Double => Double):Double = { transformacion(monto) } val bonoDesempenio: Double => Double = v => v * 1.15 val descuentoCorporativo: Double => Double = v => v * 0.95 val incentivoFijo: Double => Double = v => v + 30.0 val transformacionCombinada: Double => Double = v => descuentoCorporativo(bonoDesempenio(v)) val ventasProcesadas = ventas.map(v => procesarVenta(v, transformacionCombinada)) println(s"Ventas originales: $ventas") println(s"Ventas procesadas con transformación combinada:$ventasProcesadas") //-------------------- println("Ejercicio 3") val solicitudes = List(("Ana", 12), ("Carlos", 28), ("Beatriz", 5), ("David", 40), ("Elena", 18), ("Fernando", 3)) val calificadas = solicitudes.filter { case (_, monto) => monto >= 10 } val extendidas = calificadas.map { case (cliente, monto) => (cliente, monto * 1.20) } val categorizadas = extendidas.map { case (cliente, montoExt) => val cat = if (montoExt < 20.0) "Línea Estándar" else if (montoExt <= 35.0) "Línea Preferencial" else "Línea VIP" (cliente, cat) } println(s"Solicitudes iniciales: $solicitudes") println(s"Solicitudes calificadas: $calificadas") println(s"Solicitudes con extensión: $extendidas") println(s"Categorización de créditos: $categorizadas") //-------------------- println("Ejercicio 4") val preciosBase = List(100.0, 250.0, 50.0, 400.0) val f1: Double => Double = x => x + 12.0 val f2: Double => Double = x => x * 0.90 val f3: Double => Double = x => x * 1.08 val politicaFacturacion: Double => Double = f1 andThen f2 andThen f3 def aplicarEstrategia[A,B](lista: List[A], estrategia: A => B): List[B]={ lista.map(estrategia) } val preciosFinales = aplicarEstrategia(preciosBase, politicaFacturacion) println(s"Precios base: $preciosBase") println(s"Precios finales facturados: $preciosFinales") //-------------------- println("Ejercicio 5") val tarifas = List(45.0, 120.0, 8.0, 230.0, 15.0, 310.0) def filtrarPersonalizado[A](lista: List[A])(predicado: A => Boolean): List[A] = { def aux(restante: List[A], acm: List[A]): List[A] = restante match { case Nil => acm.reverse case x :: xs => if (predicado(x)) aux(xs, x :: acm) else aux(xs, acm) } aux(lista, Nil) } def mapearPersonalizado[A, B](lista: List[A])(transformacion: A => B): List[B] = { def aux(restante: List[A], acm: List[B]): List[B] = restante match { case Nil => acm.reverse case x :: xs => aux(xs, transformacion(x) :: acm) } aux(lista, Nil) } val filtradas = filtrarPersonalizado(tarifas)(t => t > 20.0) val reajustadas = mapearPersonalizado(filtradas)(t => if (t < 100.0) t * 1.10 else t * 1.05) val resultadoFinal = mapearPersonalizado(reajustadas)(t => f"Tarifa final: S/ $t%.2f") println(s"Tarifas originales: $tarifas") println(s"Tarifas filtradas (> 20): $filtradas") println(s"Resultado formateado: $resultadoFinal") //-------------------- println("Ejercicio 6") val reporteSucursales = List( ("Surco", List(150.0, 80.0, 320.0, 45.0)), ("Miraflores", List(500.0, 120.0, 90.0)), ("La Molina", List(60.0, 30.0, 110.0)) ) val reporteFiltrado = reporteSucursales.map { case (sede, ventas)=> (sede, ventas.filter(v => v > 70.0)) } val ventasConsolidadas = reporteFiltrado.flatMap { case (_, ventas) => ventas } val sumaTotal = ventasConsolidadas.foldLeft(0.0)((acum, v) => acum + v) val ventaMaxima = ventasConsolidadas.maxOption.getOrElse(0.0) val clasificacionSedes = reporteFiltrado.map { case (sede, ventas)=> val promedio = if (ventas.nonEmpty) ventas.sum / ventas.size else 0.0 val rendimiento = if (promedio >= 200.0) "Alto Rendimiento" else "Rendimiento Estándar" (sede, rendimiento) } println(s"Reporte filtrado por sede: $reporteFiltrado") println(s"Ventas consolidadas globales: $ventasConsolidadas") println(s"Suma total de ventas: S/ $sumaTotal") println(s"Venta máxima registrada: S/ $ventaMaxima") println(s"Clasificación por sede: $clasificacionSedes")