From 7787a6fdb28568692409d12ae32e8763c8aaeab4 Mon Sep 17 00:00:00 2001 From: Isaac Morcillo Garcia Date: Thu, 7 Dec 2023 20:44:51 +0100 Subject: [PATCH 1/2] reto #46 - c# --- .../c#/isaacus98.cs | 177 ++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 Retos/Reto #46 - LA CARRERA DE COCHES [Media]/c#/isaacus98.cs diff --git a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/c#/isaacus98.cs b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/c#/isaacus98.cs new file mode 100644 index 0000000000..dbdbc2f5bc --- /dev/null +++ b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/c#/isaacus98.cs @@ -0,0 +1,177 @@ +using System.IO; + +namespace RetosProgramacion +{ + /* + * Crea un programa que simule la competición de dos coches en una pista. + * - Los dos coches estarán representados por 🚙 y 🚗. Y la meta por 🏁. + * - Cada pista tendrá entre 1 y 3 árboles 🌲 colocados de forma aleatoria. + * - Las dos pistas tendrán una longitud configurable de guiones bajos "_". + * - Los coches comenzarán en la parte derecha de las pistas. Ejemplo: + * 🏁____🌲_____🚙 + * 🏁_🌲____🌲___🚗 + * + * El juego se desarrolla por turnos de forma automática, y cada segundo + * se realiza una acción sobre los coches (moviéndose a la vez), hasta que + * uno de ellos (o los dos a la vez) llega a la meta. + * - Acciones: + * - Avanzar entre 1 a 3 posiciones hacia la meta. + * - Si al avanzar, el coche finaliza en la posición de un árbol, + * se muestra 💥 y no avanza durante un turno. + * - Cada turno se imprimen las pistas y sus elementos. + * - Cuando la carrera finalice, se muestra el coche ganador o el empate. + */ + + internal class Program + { + static string[] iconoCoche = { "1", "2" }; + + static void Main(string[] args) + { + /* + * M = Meta + * A = Arbol + * E = Choque con arbol + * 1 = Coche 1 + * 2 = Coche 2 + */ + + Console.WriteLine("Introduzca la longitud del circuito: "); + int longitud = int.Parse(Console.ReadLine()); + int posmover; + int[] posicionesCoches = { longitud - 1, longitud - 1 }; + bool[] saltarTurno = { false, false }; + string[,] circuito = GenerarCircuito(longitud); + + ImprimirCircuito(circuito); + + Thread.Sleep(5000); + + Random rnd = new Random(); + while (!CarreraFinalizada(posicionesCoches)) + { + for (int i = 0; i < circuito.GetLength(0); i++) + { + if (!saltarTurno[i]) + { + if (posicionesCoches[i] != 0) + { + posmover = rnd.Next(1, 4); + + if ((posicionesCoches[i] - posmover) <= 0) + { + // Meta + if (circuito[i, posicionesCoches[i]] == "E") + circuito[i, posicionesCoches[i]] = "A"; + else + circuito[i, posicionesCoches[i]] = "_"; + + if ((posicionesCoches[i] - posmover) == 0) + { + posicionesCoches[i] -= posmover; + circuito[i, posicionesCoches[i]] = iconoCoche[i]; + } + else + { + posicionesCoches[i] -= posicionesCoches[i]; + circuito[i, posicionesCoches[i]] = iconoCoche[i]; + } + + } + else if (circuito[i, posicionesCoches[i] - posmover] == "A") + { + // Choque arbol + saltarTurno[i] = true; + if (circuito[i, posicionesCoches[i]] == "E") + circuito[i, posicionesCoches[i]] = "A"; + else + circuito[i, posicionesCoches[i]] = "_"; + + posicionesCoches[i] -= posmover; + circuito[i, posicionesCoches[i]] = "E"; + } + else if (circuito[i, posicionesCoches[i] - posmover] == "_") + { + // Avance coche + if (circuito[i, posicionesCoches[i]] == "E") + circuito[i, posicionesCoches[i]] = "A"; + else + circuito[i, posicionesCoches[i]] = "_"; + + posicionesCoches[i] -= posmover; + circuito[i, posicionesCoches[i]] = iconoCoche[i]; + } + } + } + else + { + saltarTurno[i] = false; + } + } + + ImprimirCircuito(circuito); + + if (posicionesCoches[0] == 0 && posicionesCoches[1] == 0) + Console.WriteLine("Empate!!!"); + + if (posicionesCoches[0] == 0) + Console.WriteLine("Ganador coche 1"); + + if (posicionesCoches[1] == 0) + Console.WriteLine("Ganador coche 2"); + + Thread.Sleep(1000); + } + + } + + static string[,] GenerarCircuito(int longitud) + { + Random rnd = new Random(); + string[,] circuito = new string[2, longitud]; + int probabilidadArbol = 20; + + for (int i = 0; i < circuito.GetLength(0); i++) + { + for (int j = 0; j < circuito.GetLength(1); j++) + { + if (j == 0) + { + circuito[i, j] = "M"; + } + else + { + int probalidad = rnd.Next(0, 101); + if (probalidad >= 0 && probalidad <= probabilidadArbol) + circuito[i, j] = "A"; + else + circuito[i, j] = "_"; + } + } + + circuito[i, circuito.GetUpperBound(1)] = iconoCoche[i]; + } + + return circuito; + } + + static void ImprimirCircuito(string[,] circuito) + { + for(int i = 0;i < circuito.GetLength(0); i++) + { + Console.WriteLine("Pista del jugador " + (i+1)); + for(int j = 0;j < circuito.GetLength(1); j++) + { + Console.Write(circuito[i,j]); + } + Console.WriteLine(); + Console.WriteLine(); + } + } + + static bool CarreraFinalizada(int[] posicionesCoche) + { + return posicionesCoche[0] == 0 || posicionesCoche[1] == 0; + } + } +} \ No newline at end of file From 288bbb6cc1b935927051133487c4e314601d4fcc Mon Sep 17 00:00:00 2001 From: Isaac Morcillo Garcia Date: Thu, 7 Dec 2023 20:49:25 +0100 Subject: [PATCH 2/2] Reto #43 - kotlin --- .../kotlin/isaacus98.kt" | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/kotlin/isaacus98.kt" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/kotlin/isaacus98.kt" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/kotlin/isaacus98.kt" new file mode 100644 index 0000000000..d5b5f49e27 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/kotlin/isaacus98.kt" @@ -0,0 +1,83 @@ +import java.util.* + +/* + * Crea una función que simule las condiciones climáticas (temperatura y probabilidad de lluvia) + * de un lugar ficticio al pasar un número concreto de días según estas reglas: + * - La temperatura inicial y el % de probabilidad de lluvia lo define el usuario. + * - Cada día que pasa: + * - 10% de posibilidades de que la temperatura aumente o disminuya 2 grados. + * - Si la temperatura supera los 25 grados, la probabilidad de lluvia al día + * siguiente aumenta en un 20%. + * - Si la temperatura baja de 5 grados, la probabilidad de lluvia al día + * siguiente disminuya en un 20%. + * - Si llueve (100%), la temperatura del día siguiente disminuye en 1 grado. + * - La función recibe el número de días de la predicción y muestra la temperatura + * y si llueve durante todos esos días. + * - También mostrará la temperatura máxima y mínima de ese periodo y cuántos días va a llover. + */ + +fun main(args: Array) { + println("Inserte el numero de dias de la predicción: ") + val dia: String = readln() + simularClima(dia.toInt()) +} + +fun simularClima(dia: Int){ + println("Inserte la temperatura inicial: ") + var temperatura: Int = readln().toInt() + println("Inserte la probabilidad de lluvia: ") + var probabilidadLluvia: Int = readln().toInt() + var contadorDiasLluvia: Int = 0 + var aumentarDisminuirTemperatura: Int + val listaTiempo: MutableList = mutableListOf() + val rnd: Random = Random() + + for (i in 1..dia){ + aumentarDisminuirTemperatura = rnd.nextInt(11) + 1 + + if (aumentarDisminuirTemperatura == 1){ + temperatura += 2 + } + + if (aumentarDisminuirTemperatura == 2){ + temperatura -= 2 + } + + if (temperatura > 25){ + if ((probabilidadLluvia + 20) > 100) + probabilidadLluvia = 100 + else + probabilidadLluvia += 20 + } + + if (temperatura < 5){ + if ((probabilidadLluvia - 20) < 0) + probabilidadLluvia = 0 + else + probabilidadLluvia -= 20 + } + + listaTiempo.add(Tiempo(temperatura, probabilidadLluvia)) + + if (probabilidadLluvia == 100){ + temperatura -= 1 + contadorDiasLluvia += 1 + } + } + + //Mostrar datos por consola + for (tiempo in listaTiempo){ + println(tiempo.toString()) + } + + listaTiempo.sortBy { it.temperatura } + println("Temperatura mínima: ${listaTiempo[0].temperatura}") + println("Temperatura máxima: ${listaTiempo[listaTiempo.lastIndex].temperatura}") + println("Número de dias que ha llovido: " + contadorDiasLluvia) +} + +data class Tiempo(val temperatura: Int, val probabilidadLluvia: Int){ + override fun toString(): String { + return "Temperatura: " + temperatura.toString() + ", ProbabilidadLluvia: " + probabilidadLluvia.toString() + } +} \ No newline at end of file