From 90109da7382eaf7b1e84b28bc56278f32b97a701 Mon Sep 17 00:00:00 2001 From: Carlos Rivera <49885608+CarlosRivera4726@users.noreply.github.com> Date: Sat, 14 Jan 2023 14:05:14 -0500 Subject: [PATCH 0001/2103] Partido de tenis --- .../CarlosRivera_main.py | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/CarlosRivera_main.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/CarlosRivera_main.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/CarlosRivera_main.py new file mode 100644 index 0000000000..06145fc082 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/CarlosRivera_main.py @@ -0,0 +1,74 @@ +''' + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ + ''' + + + +#6 puntuaciones -> 0,1,2,3,4,5 +PUNTUACIONES = ("Love", "15", "30", "30", "Deuce", "Ventaja") + + + + +def imprimirPuntuaciones(puntuaciones1, puntuaciones2): + limite = 4 + if puntuaciones1 == limite and puntuaciones2 == limite: + print("Deuce") + + elif puntuaciones1 >= limite or puntuaciones2 >= limite: + puntos = puntuaciones1 - puntuaciones2 + if puntos == 0: + print("Deuce") + elif puntos == 1: + print("Ventaja P1") + elif puntos == -1: + print("Ventaja P2") + elif puntos >= 2: + print("Ha ganado el P1") + return + else: + print("Ha ganado el P2") + return + + + else: + print(f"{PUNTUACIONES[puntuaciones1]} - {PUNTUACIONES[puntuaciones2]}") + + + +puntuacionP1 = 0 +puntuacionP2 = 0 +def anotador(equipo): + global puntuacionP1, puntuacionP2 + if(equipo == 'P1'): + puntuacionP1 += 1 + elif equipo == 'P2': + puntuacionP2 += 1 + + imprimirPuntuaciones(puntuacionP1, puntuacionP2) + + +def main(): + lista_secuencia = ['P1', 'P1', 'P2', 'P2', 'P1', 'P2', 'P1', 'P1'] + for secuencia in lista_secuencia: + anotador(secuencia) + + +if __name__ == '__main__': + main() From d8369e2bafa4a143914ed435cfbcc1d9b9561006 Mon Sep 17 00:00:00 2001 From: CarlosRivera4726 Date: Fri, 3 Feb 2023 08:39:23 -0500 Subject: [PATCH 0002/2103] CarlosRivera4726 reto programacion #3- generador --- .../python/CarlosRivera4726.py" | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/CarlosRivera4726.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/CarlosRivera4726.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/CarlosRivera4726.py" new file mode 100644 index 0000000000..b1d760e52e --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/CarlosRivera4726.py" @@ -0,0 +1,53 @@ +'''* +/* + * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + * Podrás configurar generar contraseñas con los siguientes parámetros: + * - Longitud: Entre 8 y 16. + * - Con o sin letras mayúsculas. + * - Con o sin números. + * - Con o sin símbolos. + * (Pudiendo combinar todos estos parámetros entre ellos) + */ + +''' +import string +import secrets + +def parameters(upperCase=True, numbers=True, symbols=True): + alphabet = "" + # si upperCase es verdadero + if upperCase: + # traemos todo el alfabeto en minusculas y mayusculas + alphabet = string.ascii_letters + else: + alphabet += string.ascii_lowercase + + if numbers: + alphabet += string.digits + + if symbols: + alphabet += string.punctuation + + #print(f"alphabet: {alphabet}") + + return alphabet + + + + +if __name__ == "__main__": + # menu + upperCase = input("Quieres que tu clave lleve Mayusculas?: (s) or (n): ") + numbers = input("Quieres que tu clave lleve Números?: (s) or (n): ") + symbols = input("Quieres que tu clave lleve Símbolos?: (s) or (n): ") + longitud = int(input("De que tamaño quieres tu contraseña?: (min: 8, max: 16): ")) + if (longitud >= 8) and (longitud <= 16): + upperCase = True if upperCase.lower() == 's' else False + numbers = True if numbers.lower() == 's' else False + symbols = True if symbols.lower() == 's' else False + + alphabet = parameters(upperCase=upperCase, numbers=numbers, symbols=symbols) + password = ''.join(secrets.choice(alphabet) for i in range(longitud)) + print(f"Tu contraseña: {password}") + else: + print("No se pudo completar la contraseña por la longitud!") \ No newline at end of file From 97f2fcc0eef2464e45d410b8b71b78dc661c471d Mon Sep 17 00:00:00 2001 From: mtirador <125604629+mtirador@users.noreply.github.com> Date: Wed, 27 Sep 2023 22:10:43 +0200 Subject: [PATCH 0003/2103] Reto#5 - Java --- .../Reto #5 - HOLA MUNDO [F\303\241cil]/java/mtirador.java" | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/java/mtirador.java" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/java/mtirador.java" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/java/mtirador.java" new file mode 100644 index 0000000000..c9de7c0923 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/java/mtirador.java" @@ -0,0 +1,6 @@ +public class mtirador{ + public static void main(String []args){ + System.out.println("hello world"); + + } +} \ No newline at end of file From 521f526bc14f9522203271e77e9080a21ec6e137 Mon Sep 17 00:00:00 2001 From: jmiguelmangas Date: Fri, 29 Sep 2023 12:30:24 +0200 Subject: [PATCH 0004/2103] Reto 33, Pintada Pantalla, y marcador con timer --- .../python/jmiguelmangas.py" | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 "Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/jmiguelmangas.py" diff --git "a/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/jmiguelmangas.py" "b/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/jmiguelmangas.py" new file mode 100644 index 0000000000..65c41bc858 --- /dev/null +++ "b/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/jmiguelmangas.py" @@ -0,0 +1,72 @@ +"""``` +/* + * Crea un programa capaz de gestionar una pieza de Tetris. + * - La pantalla de juego tiene 10 filas y 10 columnas representadas por símbolos 🔲 + * - La pieza de tetris a manejar será la siguiente (si quieres, puedes elegir otra): + * 🔳 + * 🔳🔳🔳 + * - La pieza aparecerá por primera vez en la parte superior izquierda de la pantalla de juego. + * 🔳🔲🔲🔲🔲🔲🔲🔲🔲🔲 + * 🔳🔳🔳🔲🔲🔲🔲🔲🔲🔲 + * 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲 + * 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲 + * 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲 + * 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲 + * 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲 + * 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲 + * 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲 + * 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲 + * - Debes desarrollar una función capaz de desplazar y rotar la pieza en el tablero, + * recibiendo una acción cada vez que se llame, mostrando cómo se visualiza en la pantalla de juego. + * - Las acciones que se pueden aplicar a la pieza son: derecha, izquierda, abajo, rotar. + * - Debes tener en cuenta los límites de la pantalla de juego. + */""" +import time + +from os import system + + +screen = [ + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], + +] + + +def print_screen(): + global screen + for row in screen: + print("".join(row)) + + +def main(): + timer = 0 + timer_max = 100 + game_score = 0 + while timer <= timer_max: + system("clear") + print(f"Time Remaining: {timer_max-timer} Segs\n") + print(f"Game Score: {game_score} points\n") + print_screen() + time.sleep(1) + timer += 1 + + print(f"Game Over, Final Score: {game_score}") + + +if __name__ == "__main__": + main() From 39ebd032e435edb36666995bb684387dcd08fa01 Mon Sep 17 00:00:00 2001 From: jmiguelmangas Date: Fri, 29 Sep 2023 13:51:17 +0200 Subject: [PATCH 0005/2103] Ya genera pieza random, implementando bajada automatica --- .../python/jmiguelmangas.py" | 46 +++++++++++++++---- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git "a/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/jmiguelmangas.py" "b/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/jmiguelmangas.py" index 65c41bc858..c6370e8dd7 100644 --- "a/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/jmiguelmangas.py" +++ "b/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/jmiguelmangas.py" @@ -25,6 +25,7 @@ from os import system +import random screen = [ ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], @@ -45,28 +46,55 @@ ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], ] - +cube = {"shape":[(0,0),(0,1),(1,0),(1,1)],"rotation_left": False,"rotation_right": False} +stick = {"shape":[(0,0),(0,1),(0,2),(0,3)],"rotation_left": False,"rotation_right": False} +hat = {"shape":[(0,1),(1,0),(1,1),(1,2)],"rotation_left": False,"rotation_right": False} +left_shoe = {"shape":[(0,0),(1,0),(1,1),(1,2)],"rotation_left": False,"rotation_right": False} +right_shoe = {"shape":[(0,2),(1,0),(1,1),(1,2)],"rotation_left": False,"rotation_right": False} +left_corner = {"shape":[(0,0),(0,1),(1,1),(1,2)],"rotation_left": False,"rotation_right": False} +right_corner = {"shape":[(0,1),(0,2),(1,0),(1,1)],"rotation_left": False,"rotation_right": False} +pieces = [ + cube,stick,hat,left_shoe,right_shoe,left_corner,right_corner +] +piece_blocked = 0 +position_piece = [] def print_screen(): global screen for row in screen: print("".join(row)) - - -def main(): +def print_piece(): + global screen + global pieces + global piece_blocked + global position_piece + piece = random.choice(pieces) + for element in piece["shape"]: + screen[element[0]][element[1]+4] = "🔲" + position_piece.append((element[0],element[1]+4)) + piece_blocked = 0 +def fall_piece(): + +def game(): timer = 0 timer_max = 100 game_score = 0 - while timer <= timer_max: - system("clear") + game_over = False + global piece_blocked + print_piece() + while timer <= timer_max and game_over == False: + #system("clear") print(f"Time Remaining: {timer_max-timer} Segs\n") print(f"Game Score: {game_score} points\n") print_screen() + fall_piece() time.sleep(1) + if piece_blocked == 1: + print_piece() timer += 1 - print(f"Game Over, Final Score: {game_score}") - + print(f"\nGame Over, Final Score: {game_score}") if __name__ == "__main__": - main() + + game() From b9ad30f3928bb2d3487e13bb3dc6c2c3b4fcfd31 Mon Sep 17 00:00:00 2001 From: npminit-dev Date: Fri, 29 Sep 2023 10:04:10 -0300 Subject: [PATCH 0006/2103] Reto #38 - JavaScript --- .../javascript/npminit-dev.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/javascript/npminit-dev.js b/Retos/Reto #38 - LAS SUMAS [Media]/javascript/npminit-dev.js index 8ab574c347..2dcd62428e 100644 --- a/Retos/Reto #38 - LAS SUMAS [Media]/javascript/npminit-dev.js +++ b/Retos/Reto #38 - LAS SUMAS [Media]/javascript/npminit-dev.js @@ -15,15 +15,14 @@ function getSumsLists(list, target) { let sList = list.filter(num => num <= target).sort() let result = [] - function backTracking(sub, start) { - let sum = sub?.reduce((acc, curr) => acc += curr, 0) || 0 + function backTracking(sub, start, sum) { if(sum === target) result.push(sub) for(let i = start; i < sList.length; i++) - if(sum + list[i] <= target) backTracking([...sub, list[i]], i + 1) + if(sum + list[i] <= target) backTracking([...sub, list[i]], i + 1, sum + list[i]) } for(let i = 0; i < sList.length - 1; i++) - backTracking([list[i]], i + 1) + backTracking([list[i]], i + 1, list[i]) return result } @@ -35,6 +34,6 @@ console.log(getSumsLists([3, 2, 1, 6, 8, 4, 3, 10], 12)) console.log(getSumsLists([3, 6, 9, 12, 15], 30)) /* result = [[ 3, 6, 9, 12 ], [ 3, 12, 15 ], [ 6, 9, 15 ]] */ console.log(getSumsLists([15, 10, 5, 2, 8, 10], 50)) -/* result = [[ 3, 6, 9, 12 ], [ 3, 12, 15 ], [ 6, 9, 15 ]] */ +/* result = [[15, 10, 5, 2, 8, 10]] */ console.log(getSumsLists([1, 2, 3, 2, 1], 3)) -/* result = [[ 3, 6, 9, 12 ], [ 3, 12, 15 ], [ 6, 9, 15 ]] */ +/* result = [[ 1, 2 ], [ 1, 2 ], [ 2, 1 ], [ 3 ], [ 2, 1 ]] */ From 5d82074e37a52c00a1a723c2b4411e733f19b6ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juli=C3=A1n=20Rodr=C3=ADguez?= Date: Fri, 29 Sep 2023 08:47:54 -0500 Subject: [PATCH 0007/2103] Reto #0 - PHP Reto #0 desarrollado por DestroyWolves en php --- .../php/destroywolves.php" | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/destroywolves.php" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/destroywolves.php" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/destroywolves.php" new file mode 100644 index 0000000000..58a841a1d8 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/destroywolves.php" @@ -0,0 +1,48 @@ + Date: Fri, 29 Sep 2023 18:40:24 +0200 Subject: [PATCH 0008/2103] Bajada automatica implementada, creo que el siguiente paso sera poner clases para las piezas y el juego --- .../python/jmiguelmangas.py" | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git "a/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/jmiguelmangas.py" "b/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/jmiguelmangas.py" index c6370e8dd7..b7c925b965 100644 --- "a/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/jmiguelmangas.py" +++ "b/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/jmiguelmangas.py" @@ -43,8 +43,7 @@ ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], - ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], - + ["🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳", "🔳"], ] cube = {"shape":[(0,0),(0,1),(1,0),(1,1)],"rotation_left": False,"rotation_right": False} stick = {"shape":[(0,0),(0,1),(0,2),(0,3)],"rotation_left": False,"rotation_right": False} @@ -56,7 +55,7 @@ pieces = [ cube,stick,hat,left_shoe,right_shoe,left_corner,right_corner ] -piece_blocked = 0 +piece_blocked = False position_piece = [] def print_screen(): @@ -70,10 +69,26 @@ def print_piece(): global position_piece piece = random.choice(pieces) for element in piece["shape"]: - screen[element[0]][element[1]+4] = "🔲" - position_piece.append((element[0],element[1]+4)) + screen[element[0]][element[1]+3] = "🔲" + position_piece.append((element[0],element[1]+3)) piece_blocked = 0 def fall_piece(): + global screen + global position_piece + global piece_blocked + old_position = position_piece + new_position = [] + for element in old_position: + if element[0] <= 15: + screen[element[0]][element[1]] = "🔳" + new_position.append((element[0]+1,element[1])) + else: + piece_blocked = True + for element in new_position: + if element[0] <= 15: + screen[element[0]][element[1]] = "🔲" + + position_piece = new_position def game(): timer = 0 @@ -83,13 +98,13 @@ def game(): global piece_blocked print_piece() while timer <= timer_max and game_over == False: - #system("clear") + system("clear") print(f"Time Remaining: {timer_max-timer} Segs\n") print(f"Game Score: {game_score} points\n") print_screen() fall_piece() time.sleep(1) - if piece_blocked == 1: + if piece_blocked == True: print_piece() timer += 1 From ee557c97bb93bc944b13f3b9eee7431951a5b3ff Mon Sep 17 00:00:00 2001 From: marco cruz Date: Wed, 4 Oct 2023 13:28:08 -0600 Subject: [PATCH 0009/2103] Reto #34 - Javascript --- .../javascript/marcode24.js | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Retos/Reto #34 - EL TXT [Media]/javascript/marcode24.js diff --git a/Retos/Reto #34 - EL TXT [Media]/javascript/marcode24.js b/Retos/Reto #34 - EL TXT [Media]/javascript/marcode24.js new file mode 100644 index 0000000000..fce913bdb7 --- /dev/null +++ b/Retos/Reto #34 - EL TXT [Media]/javascript/marcode24.js @@ -0,0 +1,87 @@ +/* + * Crea un programa capaz de interactuar con un fichero TXT. + * IMPORTANTE: El fichero TXT NO debe subirse como parte de la corrección. + * Únicamente el código. + * + * - Si no existe, debe crear un fichero llamado "text.txt". + * - Desde el programa debes ser capaz de introducir texto por consola y guardarlo + * en una nueva línea cada vez que se pulse el botón "Enter". + * - Si el fichero existe, el programa tiene que dar la opción de seguir escribiendo + * a continuación o borrar su contenido y comenzar desde el principio. + * - Si se selecciona continuar escribiendo, se tiene que mostrar por consola + * el texto que ya posee el fichero. + */ + +const fs = require('fs'); +const readline = require('readline'); + +const FILE_PATH = 'text.txt'; + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +const writeContent = (text) => { + fs.appendFile(FILE_PATH, text, (err) => { + !err && console.log('\nCONTENIDO GUARDADO!\nContinue escribiendo...'); + }); +}; + +const openLineEditor = () => { + rl.on('line', (input) => { + input === '' ? rl.close() : writeContent(`${input}\n`); + }); +}; + +const deleteContent = () => { + fs.truncate(FILE_PATH, 0, (err) => { + !err && console.log('CONTENIDO BORRADO!\nContinue escribiendo...'); + }); +}; + +const printContent = () => { + fs.readFile(FILE_PATH, 'utf8', (err, data) => { + if (err) { + console.error('Error al leer el archivo: ', err); + return; + } + console.log('CONTENIDO DEL ARCHIVO: \n'); + console.log('-------------------------'); + console.log(data.trim()); + console.log('-------------------------'); + }); +}; + +fs.access(FILE_PATH, fs.constants.F_OK, (err) => { + if (!err) { + const question = 'El archivo existe, desea: \n\n' + + '1. Continuar escribiendo\n2. Sobreescribirlo\n'; + rl.question(question, (input) => { + switch (input) { + case '1': + printContent(); + openLineEditor(); + break; + case '2': + deleteContent(''); + openLineEditor(); + break; + default: + console.log('opción no válida'); + break; + } + }); + } else { + fs.writeFile(FILE_PATH, '', (e) => { + if (e) { + console.error('Error al crear archivo: ', e); + return; + } + console.log('ARCHIVO CREADO!\nIngrese su contenido'); + openLineEditor(); + }); + } +}); + +// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges From 3e518285ca0dc26b94d660728ff646532cb20655 Mon Sep 17 00:00:00 2001 From: Jose <77416168+JoseAntonioRuizGarcia@users.noreply.github.com> Date: Sat, 7 Oct 2023 14:53:45 +0000 Subject: [PATCH 0010/2103] Reto #39 - Python --- .../python/JoseAntonioRuizGarcia.py" | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/JoseAntonioRuizGarcia.py" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/JoseAntonioRuizGarcia.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/JoseAntonioRuizGarcia.py" new file mode 100644 index 0000000000..ce6f4be971 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/JoseAntonioRuizGarcia.py" @@ -0,0 +1,32 @@ +def findPythagoreanTriple(number: int) -> list: + range_a = range_b = range_c = range(1, number + 1) + # Se crea validación y resultado, por simplificar la comprobación de los no repetidos + validation = [] + result = [] + + # Bucle para recorrer todas las opciones posibles + for a in range_a: + for b in range_b: + for c in range_c: + # Valida si existe combinación de triple pitagórico + if a**2 + b**2 == c**2: + # En caso de haber encontrado uno, se valida que ya no esté ya dentro del resultado + r = [a, b, c] + r.sort() + if not r in validation: + validation.append(r) + result.append((a, b, c)) + + print(f'Combinación de números pitagóricos para el valor {number}: {result}') + +if __name__ == '__main__': + run = True + + while run: + n = input('Introduce un número entero: ') + + if n.isnumeric(): + n = int(n) + run = False + + findPythagoreanTriple(n) From 44d3407944ecf2c0311987cfbba24097c6087fe0 Mon Sep 17 00:00:00 2001 From: Nefta Hernandez Date: Sat, 7 Oct 2023 12:03:35 -0600 Subject: [PATCH 0011/2103] Mi solucion --- .../javascript/nneshz.js" | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/nneshz.js" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/nneshz.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/nneshz.js" new file mode 100644 index 0000000000..07ba40d743 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/nneshz.js" @@ -0,0 +1,68 @@ +// # Reto #1: EL "LENGUAJE HACKER" +// #### Dificultad: Fácil | Publicación: 02/01/23 | Corrección: 09/01/23 + +// ## Enunciado + +// ``` +// /* +// * Escribe un programa que reciba un texto y transforme lenguaje natural a +// * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje +// * se caracteriza por sustituir caracteres alfanuméricos. +// * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) +// * con el alfabeto y los números en "leet". +// * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") +// */ +// ``` + +function leetSpeak(text) { + const dictionary = { + A: "4", + B: "8", + C: "(", + D: "[)", + E: "3", + F: "|=", + G: "6", + H: "#", + I: "1", + J: "_|", + K: "|<", + L: "|_", + M: "JVI", + N: "||", + O: "0", + P: "|>", + Q: "9", + R: "|2", + S: "5", + T: "7", + U: "|_|", + V: "\\/", + W: "\\/\\/", + X: "><", + Y: "`/", + Z: "2", + 1: "I", + 2: "Z", + 3: "E", + 4: "A", + 5: "S", + 6: "G", + 7: "T", + 8: "B", + 9: "g", + 0: "O", + }; + + const textArray = text.toUpperCase().split(""); + const textHacker = textArray.map((letter) => { + if (dictionary[letter]) { + return dictionary[letter]; + } else { + return letter; + } + }); + return textHacker.join(""); +} + +console.log(leetSpeak("Hola mundo! 2023")) From bb279c15ea60eca3846c48fe0655c8c2ffdfc5fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20L=C3=B3pez=20Ariza?= <52292080+DiegoSHS@users.noreply.github.com> Date: Sat, 7 Oct 2023 16:22:58 -0600 Subject: [PATCH 0012/2103] Reto #3 --- .../javascript/DiegoSHS.js" | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/DiegoSHS.js" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/DiegoSHS.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/DiegoSHS.js" new file mode 100644 index 0000000000..5312ae1e8b --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/DiegoSHS.js" @@ -0,0 +1,57 @@ +/** + * Generador de cadenas de carácteres + * @returns objeto con tres cadenas de carácteres: letras, digitos y símbolos + */ +const getChars = () => { + const letters = Array.from({ length: 26 }, (_, i) => String.fromCharCode(i + 65)).join('') + const digits = Array.from({ length: 10 }, (_, i) => i).join("") + const symbols = `!"#$%&'()*+,-./:;<=>?@[\\]^_\`{|}~` + return { + letters, + digits, + symbols + } +} +/** + * Concatena y devuelve una serie de carácteres de acuerdo a los parametros + * @param {Boolean} up Permite mayúsculas + * @param {Boolean} dig Permite digitos del 0 al 9 + * @param {Boolean} sym Permite símbolos + * @returns conjunto de carácteres + */ +const validChars = (up, dig, sym) => { + const { letters, digits, symbols } = getChars() + const chars = + letters.toLowerCase() + + (up ? letters : '') + + (dig ? digits : '') + + (sym ? symbols : '') + return chars +} +/** + * Devuelve un elemento aleatorio de un array + * @param {Array} Array array desde donde se toma el elemento + * @returns elemento del arreglo + */ +const randomInArray = (Array) => { + const randomIndex = Math.floor(Math.random() * Array.length) + return Array[randomIndex] +} +/** + * Genera una contraseña + * @param {*} len Tamaño de contraseña (8-16) + * @param {*} options opciones para la generación + * @returns contraseña + */ +const getPassword = (len = 8, { up = false, dig = false, sym = false }) => { + if (len < 8 || len > 16) { + console.log('solo se permiten longitudes de 8 a 16 carácteres') + } + len = len > 16 ? 16 : len + len = len < 8 ? 8 : len + const chars = validChars(up, dig, sym) + const password = Array.from({ length: len }, () => randomInArray(chars)).join('') + return password +} + +console.log(getPassword(16, { up: 1, dig: 1, sym: 1 })) \ No newline at end of file From ba9c56887ee1db3a86d0007ba44d4e0ee6a58105 Mon Sep 17 00:00:00 2001 From: FabianTorres Date: Sat, 7 Oct 2023 18:31:37 -0500 Subject: [PATCH 0013/2103] New Solution: Reto #3 - Python --- .../python/nftorres.py" | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/nftorres.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/nftorres.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/nftorres.py" new file mode 100644 index 0000000000..89e7809a04 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/nftorres.py" @@ -0,0 +1,57 @@ +"""This script shows the solution to the exercise "Reto #3: EL GENERADOR DE CONTRASEÑAS" from Brais Moure's official website.""" +from random import choice +import string + + +class PasswordGenerator: + """This class represents a password generator that generates a password based on user-specified conditions such as length, inclusion of uppercase letters, digits or symbols.""" + + def __init__(self) -> None: + """This methos initializes the default password conditions.""" + self.length: int = 12 + self.uppercase: bool = False + self.digits: bool = False + self.symbols: bool = False + + def ask_conditions(self) -> None: + """This method asks the user how they want their password. For example, if you want it to contain capital letters, digits, or symbols.""" + condition1: int = int(input("1. Length: ")) + self.length = condition1 if 4 < condition1 <= 40 else 12 + + condition2: str = input("2. Uppercase Letters (y/n): ") + self.uppercase = condition2.lower() == "y" + + condition3: str = input("3. Digits (y/n): ") + self.digits = condition3.lower() == "y" + + condition4: str = input("4. Symbols (y/n): ") + self.symbols = condition4.lower() == "y" + + def generate_password(self) -> str: + """This method generates a password based on user-specified conditions. + + Returns: + str: The generated password. + """ + characters: str = string.ascii_lowercase + if self.uppercase: + characters += string.ascii_uppercase + if self.digits: + characters += string.digits + if self.symbols: + characters += string.punctuation + + generated_password: str = "".join( + choice(characters) for _ in range(self.length) + ) + + return generated_password + + +if __name__ == "__main__": + generator = PasswordGenerator() + print("\nPassword Generator by nftorres") + print("\nhow do you want your password?") + generator.ask_conditions() + password = generator.generate_password() + print("\nYour Password:", password) From f7338289f7871f22a78e521f5f2502c3cbe05a77 Mon Sep 17 00:00:00 2001 From: Jherys Vargas Date: Sat, 7 Oct 2023 19:27:23 -0500 Subject: [PATCH 0014/2103] Reto #39 - typescript --- .../typescript/JherysVargas.ts" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/typescript/JherysVargas.ts" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/typescript/JherysVargas.ts" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/typescript/JherysVargas.ts" new file mode 100644 index 0000000000..da0e2f17eb --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/typescript/JherysVargas.ts" @@ -0,0 +1,29 @@ +const generateNumbers = (limit: number): number[] => { + return Array.from({ length: limit }, (_, index) => index + 1); +}; + +const searchForPythagoreanTriples = (limit: number): number[][] => { + const pythagoreanTriples: number[][] = []; + + if (limit <= 0) return pythagoreanTriples; + + const numbers: number[] = generateNumbers(limit); + + for (let i = 0; i < numbers.length; i++) { + for (let j = i + 1; j < numbers.length; j++) { + const a: number = numbers[i]; + const b: number = numbers[j]; + const cSquared: number = Math.pow(a, 2) + Math.pow(b, 2); + const c: number = Math.sqrt(cSquared); + + if (Number.isInteger(c)) { + pythagoreanTriples.push([a, b, c]); + } + } + } + + return pythagoreanTriples; +}; + +const triplesFound: number[][] = searchForPythagoreanTriples(17); +console.log(triplesFound); From d1b2eb5da07b964f734c8b7b11f494c89c350a83 Mon Sep 17 00:00:00 2001 From: Jherys Vargas Date: Sat, 7 Oct 2023 19:31:22 -0500 Subject: [PATCH 0015/2103] Reto #39 - dart --- .../dart/JherysVargas.dart" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/dart/JherysVargas.dart" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/dart/JherysVargas.dart" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/dart/JherysVargas.dart" new file mode 100644 index 0000000000..d49d134eb2 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/dart/JherysVargas.dart" @@ -0,0 +1,34 @@ +import 'dart:math' as math; + +void main() { + final triplesFound = searchForPythagoreanTriples(10); + print(triplesFound); +} + +List generateNumbers(int limit) { + return List.generate(limit, (int index) => (index + 1)); +} + +List> searchForPythagoreanTriples(int limit) { + final List> pythagoreanTriples = []; + + if (limit <= 0) return pythagoreanTriples; + + final List numbers = generateNumbers(limit); + + for (int i = 0; i < numbers.length; i++) { + for (int j = i + 1; j < numbers.length; j++) { + final int a = numbers[i]; + final int b = numbers[j]; + final num cSquare = math.pow(a, 2) + math.pow(b, 2); + + final num c = math.sqrt(cSquare); + + if (c is int) { + pythagoreanTriples.add([a, b, c.toInt()]); + } + } + } + + return pythagoreanTriples; +} From 580873ac42fe4d7efe807f6faaac0ea3b1bbad96 Mon Sep 17 00:00:00 2001 From: Cristian Santos Date: Sat, 7 Oct 2023 20:09:02 -0500 Subject: [PATCH 0016/2103] =?UTF-8?q?Reto=20#39=20-=20TRIPLES=20PITAG?= =?UTF-8?q?=C3=93RICOS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typescript/csantosr.ts" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/typescript/csantosr.ts" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/typescript/csantosr.ts" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/typescript/csantosr.ts" new file mode 100644 index 0000000000..4543f0cf83 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/typescript/csantosr.ts" @@ -0,0 +1,16 @@ +const findPythaTriple = (max: number): Array => { + const results: Array = []; + + for(let a = 1; a <= max; a++) { + for(let b = a; b <= max; b++) { + const c = Math.sqrt((a*a) + (b*b)); + if (c <= max && c === Math.floor(c)) { + results.push([a, b, c]); + } + } + } + + return results; +}; + +console.log(findPythaTriple(100)) \ No newline at end of file From 57afa7dedb6d5dbf171d873b2b1ccb1df28812d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20L=C3=B3pez=20Ariza?= <52292080+DiegoSHS@users.noreply.github.com> Date: Sat, 7 Oct 2023 19:48:47 -0600 Subject: [PATCH 0017/2103] Reto #0 - Python --- .../python/DiegoSHS.py" | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/DiegoSHS.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/DiegoSHS.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/DiegoSHS.py" new file mode 100644 index 0000000000..c6a4f6b4af --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/DiegoSHS.py" @@ -0,0 +1,14 @@ +def eval_fzbz(n, ref1=3, ref2=5): + """recibe un nuero y comprueba si es multiplo de 3, 5 o ambos y devuelve una palabra en cuestión""" + return 'fizzbuzz' if not n % (ref1*ref2) else 'fizz' if not n % ref1 else 'buzz' if not n % ref2 else n + + +def fizz_buzz(): + """hace una lista de los numeros del 1 al 100 y los evalúa con la función eval_fzbz e imprimer el resultado""" + count = list(range(1, 101)) + result = map(eval_fzbz, count) + print(*result, sep='\n') + + +if __name__ == "__main__": + fizz_buzz() From f71431df4118c2838983c060da37d947f3f9defe Mon Sep 17 00:00:00 2001 From: Jonathan Alberth Quispe Fuentes Date: Sat, 7 Oct 2023 23:14:34 -0500 Subject: [PATCH 0018/2103] reto 39 qf-jonathan python --- .../python/qf-jonathan.py" | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" new file mode 100644 index 0000000000..fe0fbee434 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" @@ -0,0 +1,51 @@ +import unittest + + +def pitagorean_tiples(k: int): + base_triples, all_triples, m = [], set(), 2 + while m * m < k: + n, c = 1, 0 + while n < m and (c := m * m + n * n) <= k: + a, b = m * m - n * n, 2 * m * n + base_triples.append(sorted([a, b, c])) + n += 1 + m += 1 + + for a, b, c in base_triples: + all_triples.update([(a * i, b * i, c * i) for i in range(1, k // c + 1)]) + + return sorted(all_triples) + + +class TestPitagoreanTripple(unittest.TestCase): + def test_basic(self): + self.assertEqual(pitagorean_tiples(10), [(3, 4, 5), (6, 8, 10)]) + self.assertEqual( + pitagorean_tiples(15), [(3, 4, 5), (5, 12, 13), (6, 8, 10), (9, 12, 15)] + ) + self.assertEqual( + pitagorean_tiples(17), + [(3, 4, 5), (5, 12, 13), (6, 8, 10), (8, 15, 17), (9, 12, 15)], + ) + self.assertEqual( + pitagorean_tiples(20), + [ + (3, 4, 5), + (5, 12, 13), + (6, 8, 10), + (8, 15, 17), + (9, 12, 15), + (12, 16, 20), + ], + ) + + def test_stress(self): + self.assertEqual(len(pitagorean_tiples(100)), 52) + self.assertEqual(len(pitagorean_tiples(1000)), 881) + self.assertEqual(len(pitagorean_tiples(10000)), 12471) + self.assertEqual(len(pitagorean_tiples(100000)), 161436) + self.assertEqual(len(pitagorean_tiples(123456)), 203405) + + +if __name__ == "__main__": + unittest.main() From c6b2a282a4cac500bb8819ea037af6759520e3a3 Mon Sep 17 00:00:00 2001 From: Jonathan Alberth Quispe Fuentes Date: Sat, 7 Oct 2023 23:15:57 -0500 Subject: [PATCH 0019/2103] fix type --- .../python/qf-jonathan.py" | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" index fe0fbee434..38d04aa66a 100644 --- "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" @@ -1,7 +1,7 @@ import unittest -def pitagorean_tiples(k: int): +def pythagorean_tiples(k: int): base_triples, all_triples, m = [], set(), 2 while m * m < k: n, c = 1, 0 @@ -19,16 +19,16 @@ def pitagorean_tiples(k: int): class TestPitagoreanTripple(unittest.TestCase): def test_basic(self): - self.assertEqual(pitagorean_tiples(10), [(3, 4, 5), (6, 8, 10)]) + self.assertEqual(pythagorean_tiples(10), [(3, 4, 5), (6, 8, 10)]) self.assertEqual( - pitagorean_tiples(15), [(3, 4, 5), (5, 12, 13), (6, 8, 10), (9, 12, 15)] + pythagorean_tiples(15), [(3, 4, 5), (5, 12, 13), (6, 8, 10), (9, 12, 15)] ) self.assertEqual( - pitagorean_tiples(17), + pythagorean_tiples(17), [(3, 4, 5), (5, 12, 13), (6, 8, 10), (8, 15, 17), (9, 12, 15)], ) self.assertEqual( - pitagorean_tiples(20), + pythagorean_tiples(20), [ (3, 4, 5), (5, 12, 13), @@ -40,11 +40,11 @@ def test_basic(self): ) def test_stress(self): - self.assertEqual(len(pitagorean_tiples(100)), 52) - self.assertEqual(len(pitagorean_tiples(1000)), 881) - self.assertEqual(len(pitagorean_tiples(10000)), 12471) - self.assertEqual(len(pitagorean_tiples(100000)), 161436) - self.assertEqual(len(pitagorean_tiples(123456)), 203405) + self.assertEqual(len(pythagorean_tiples(100)), 52) + self.assertEqual(len(pythagorean_tiples(1000)), 881) + self.assertEqual(len(pythagorean_tiples(10000)), 12471) + self.assertEqual(len(pythagorean_tiples(100000)), 161436) + self.assertEqual(len(pythagorean_tiples(123456)), 203405) if __name__ == "__main__": From 10d96da340d50f7a1444e61eb06b1b2d608bc6c5 Mon Sep 17 00:00:00 2001 From: Jonathan Alberth Quispe Fuentes Date: Sat, 7 Oct 2023 23:57:29 -0500 Subject: [PATCH 0020/2103] fix typo --- .../python/qf-jonathan.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" index 38d04aa66a..8b9286d9a5 100644 --- "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" @@ -17,7 +17,7 @@ def pythagorean_tiples(k: int): return sorted(all_triples) -class TestPitagoreanTripple(unittest.TestCase): +class PythagoreanTriplesTest(unittest.TestCase): def test_basic(self): self.assertEqual(pythagorean_tiples(10), [(3, 4, 5), (6, 8, 10)]) self.assertEqual( From 76863adab6b1f983b9420b39058fae9ab427303a Mon Sep 17 00:00:00 2001 From: Jonathan Alberth Quispe Fuentes Date: Sat, 7 Oct 2023 23:59:57 -0500 Subject: [PATCH 0021/2103] include typing --- .../python/qf-jonathan.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" index 8b9286d9a5..b6fb72073e 100644 --- "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/qf-jonathan.py" @@ -1,7 +1,7 @@ import unittest -def pythagorean_tiples(k: int): +def pythagorean_tiples(k: int) -> list[tuple[int, int, int]]: base_triples, all_triples, m = [], set(), 2 while m * m < k: n, c = 1, 0 From 9f468c102096239fdf384363a23cb8cc298fcde5 Mon Sep 17 00:00:00 2001 From: Jonathan Alberth Quispe Fuentes Date: Sun, 8 Oct 2023 00:58:29 -0500 Subject: [PATCH 0022/2103] reto 17 qf-jonathan --- .../python/qf-jonathan.py" | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/qf-jonathan.py" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/qf-jonathan.py" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/qf-jonathan.py" new file mode 100644 index 0000000000..80efe8948d --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/qf-jonathan.py" @@ -0,0 +1,62 @@ +import subprocess +import unittest +from unittest.mock import patch, Mock + + +def last_commits(n: int): + cmd = [ + "git", + "log", + "-n", + str(n), + "--pretty=format:%H|%an|%s|%ad", + "--date=format:%d/%m/%Y %H:%M:%S", + ] + result = subprocess.run(cmd, capture_output=True, text=True) + return list(map(lambda r: r.split("|"), result.stdout.strip().split("\n"))) + + +class LastCommitsTestCase(unittest.TestCase): + @patch("__main__.subprocess.run") + def test_get_git_log(self, mock_run): + # Mocking git result + mock_response = Mock() + mock_response.stdout = ( + "hash1|author1|message1|date1\nhash2|author2|message2|date2\n" + ) + mock_run.return_value = mock_response + + result = last_commits(2) + + # Verify result + self.assertEqual( + result, + [ + ["hash1", "author1", "message1", "date1"], + ["hash2", "author2", "message2", "date2"], + ], + ) + + # Check that the command is executed correctly + mock_run.assert_called_once_with( + [ + "git", + "log", + "-n", + "2", + "--pretty=format:%H|%an|%s|%ad", + "--date=format:%d/%m/%Y %H:%M:%S", + ], + capture_output=True, + text=True, + ) + + +if __name__ == "__main__": + print("Example, last 10 commits:") + last_10_commits = last_commits(10) + for commit in last_10_commits: + print(commit) + + print("\nUnit test:") + unittest.main() From aca9ffbd1e03f05bd6805a6582f00282e9e7f442 Mon Sep 17 00:00:00 2001 From: Jonathan Alberth Quispe Fuentes Date: Sun, 8 Oct 2023 01:02:17 -0500 Subject: [PATCH 0023/2103] add typehints --- .../python/qf-jonathan.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/qf-jonathan.py" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/qf-jonathan.py" index 80efe8948d..9fb7088ed2 100644 --- "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/qf-jonathan.py" +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/qf-jonathan.py" @@ -3,7 +3,7 @@ from unittest.mock import patch, Mock -def last_commits(n: int): +def last_commits(n: int) -> list[list[str]]: cmd = [ "git", "log", From 864ab7ec8d0bec09897d7be3efb0a65a43baa7ef Mon Sep 17 00:00:00 2001 From: Victor Cabral Vida Date: Sun, 8 Oct 2023 17:09:02 +0200 Subject: [PATCH 0024/2103] Create torvicv.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Añadido reto semanal 39 --- .../php/torvicv.php" | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/php/torvicv.php" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/php/torvicv.php" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/php/torvicv.php" new file mode 100644 index 0000000000..bc3a1408b3 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/php/torvicv.php" @@ -0,0 +1,40 @@ +"; + +triplesPitagoricosMenoresQueNumero(30); +*/ + +$numero = 20; + +$c = range(1, $numero); + +function getTriplesPitagoricos($numero, $array) { + array_map(function($numero2) use ($numero, $array) { + array_map(function($numero3) use ($numero, $numero2) { + if (pow($numero, 2) + pow($numero2, 2) === pow($numero3, 2) && + $numero < $numero2) { + echo "($numero, $numero2, $numero3)"; + } + }, $array); + }, $array); +} + +array_map('getTriplesPitagoricos', $c, array_fill(0, $numero, $c)); From 0655d826413e9e08975c731ebe690d5a90f08315 Mon Sep 17 00:00:00 2001 From: alperonoberto Date: Sun, 8 Oct 2023 17:51:33 +0200 Subject: [PATCH 0025/2103] Reto #39 - Javascript --- .../javascript/alperonoberto.js" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/javascript/alperonoberto.js" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/javascript/alperonoberto.js" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/javascript/alperonoberto.js" new file mode 100644 index 0000000000..8113047251 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/javascript/alperonoberto.js" @@ -0,0 +1,34 @@ +/* + * Crea una función que encuentre todos los triples pitagóricos + * (ternas) menores o iguales a un número dado. + * - Debes buscar información sobre qué es un triple pitagórico. + * - La función únicamente recibe el número máximo que puede + * aparecer en el triple. + * - Ejemplo: Los triples menores o iguales a 10 están + * formados por (3, 4, 5) y (6, 8, 10). + */ + +// Creamos dos punteros, uno para el primer elemento y otro para el segundo. +// Dada la fórmula de Pitágoras, a^2 + b^2 = c^2, de modo que c será igual a +// sqrt(a^2 + b^2). Para todos los números que encontremos que cumplan esta ecuación, +// comprobaremos si son enteros, menores o iguales al máximo dado y si i y j son iguales. +// Tras descartar todos los casos que no sirven, los agregamos al array que devolvemos. + +function findPythagoreanTriples(max) { + const triples = []; + for (let i = 1; i <= max; i++) { + for (let j = i + 1; j <= max; j++) { + const maxCandidate = Math.sqrt(Math.pow(i, 2) + Math.pow(j, 2)); + if (Number.isInteger(maxCandidate) && maxCandidate <= max && i !== j) { + triples.push([i, j, maxCandidate]); + } + } + } + + return triples; + } + + console.log(findPythagoreanTriples(5)); + console.log(findPythagoreanTriples(10)); + console.log(findPythagoreanTriples(15)); + console.log(findPythagoreanTriples(20)); \ No newline at end of file From f254a99a0e3c335fe347272371fcda7117ec05a1 Mon Sep 17 00:00:00 2001 From: alperonoberto Date: Sun, 8 Oct 2023 18:13:51 +0200 Subject: [PATCH 0026/2103] Reto #37 - javascript --- .../javascript/alperonoberto.js | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 Retos/Reto #37 - COLORES HEX Y RGB [Media]/javascript/alperonoberto.js diff --git a/Retos/Reto #37 - COLORES HEX Y RGB [Media]/javascript/alperonoberto.js b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/javascript/alperonoberto.js new file mode 100644 index 0000000000..60cdd4ab01 --- /dev/null +++ b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/javascript/alperonoberto.js @@ -0,0 +1,127 @@ +// transform rgb to hex: +// r: 0, g: 0, b: 0 -> #000000 +// +// transform hex to rgb: +// #000000 -> r: 0, g: 0, b: 0 + +export function RGBToHex(RGBCode) { + let hexString = "#"; + + for (const val of Object.values(RGBCode)) { + let hexVal = val; + let result = ""; + + while (hexVal > 16) { + let operation = Math.floor(hexVal / 16); + let resto = hexVal % 16; + hexVal = operation; + + switch (operation) { + case 10: + result += "A"; + break; + case 11: + result += "B"; + break; + case 12: + result += "C"; + break; + case 13: + result += "D"; + break; + case 14: + result += "E"; + break; + case 15: + result += "F"; + break; + default: + result += operation; + break; + } + + switch (resto) { + case 10: + resto = "A"; + break; + case 11: + resto = "B"; + break; + case 12: + resto = "C"; + break; + case 13: + resto = "D"; + break; + case 14: + resto = "E"; + break; + case 15: + resto = "F"; + break; + } + + result += resto; + } + + hexString += result; + } + return hexString; + } + + export function HexToRGB(hexCode) { + let hexArr = hexCode.split(""); + hexArr.shift(); + let newHexArr = []; + + for (let i = 0; i < hexArr.length; i += 2) { + newHexArr.push([hexArr[i], hexArr[i + 1]]); + } + + const rgbTranslation = { + r: newHexArr[0], + g: newHexArr[1], + b: newHexArr[2], + }; + + for (const [key, val] of Object.entries(rgbTranslation)) { + if (isNaN(val[0])) { + val[0] = val[0].toUpperCase(); + } else if (isNaN(val[1])) { + val[1] = val[1].toUpperCase(); + } + rgbTranslation[key] = hexValueToDecimal(val[0], 0) + hexValueToDecimal(val[1], 1); + } + + return rgbTranslation; + } + + function hexValueToDecimal(value, pos) { + switch (value) { + case "A": + return pos === 0 ? 10 * 16 : 10; + case "B": + return pos === 0 ? 11 * 16 : 11; + case "C": + return pos === 0 ? 12 * 16 : 12; + case "D": + return pos === 0 ? 13 * 16 : 13; + case "E": + return pos === 0 ? 14 * 16 : 14; + case "F": + return pos === 0 ? 15 * 16: 15; + default: + return pos === 0 ? Number(value) * 16 : Number(value); + } + } + + const rgbColor = { + r: 25, + g: 86, + b: 200, + }; + + const hexColor = "#2b0b17"; + + console.log(RGBToHex(rgbColor)); + console.log(HexToRGB(hexColor)); \ No newline at end of file From 8eb6456a16e72d62d46964be1fd4ee2917299843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Sun, 8 Oct 2023 19:53:46 +0200 Subject: [PATCH 0027/2103] feat: reto 39 didacdev --- .../python/didacdev.py" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/didacdev.py" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/didacdev.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/didacdev.py" new file mode 100644 index 0000000000..c7958b58ac --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/didacdev.py" @@ -0,0 +1,30 @@ +def main(): + print(get_ternas(10)) + + +def get_ternas(numero: int) -> list: + + ternas = [] + + for m in range(1, numero//2): + for n in range(1, numero//2): + if m > n: + a = m**2 - n**2 + b = 2*m*n + c = m**2 + n**2 + + if check_triple_pitagorico(a, b, c) and c <= numero: + ternas.append((a, b, c)) + + return ternas + + +def check_triple_pitagorico(a: int, b: int, c: int) -> bool: + if c**2 == a**2 + b**2: + return True + + return False + + +if __name__ == "__main__": + main() From 9e4e968a57708102d6a569da0a8d862abc599a81 Mon Sep 17 00:00:00 2001 From: Miguel-bc <58371119+Miguel-bc@users.noreply.github.com> Date: Sun, 8 Oct 2023 20:40:46 +0200 Subject: [PATCH 0028/2103] RETO #39 - Python --- .../python/miguelon.py" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/miguelon.py" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/miguelon.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/miguelon.py" new file mode 100644 index 0000000000..57fd14776d --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/miguelon.py" @@ -0,0 +1,44 @@ +''' + +/* +* Crea una función que encuentre todos los triples pitagóricos +* (ternas) menores o iguales a un número dado. +* - Debes buscar información sobre qué es un triple pitagórico. +* - La función únicamente recibe el número máximo que puede +* aparecer en el triple. +* - Ejemplo: Los triples menores o iguales a 10 están +* formados por (3, 4, 5) y (6, 8, 10). +*/ + +''' + +import math + +def combinaciones(numero): + lista = [] + for i in range(1, numero): + for n in range(i, numero): + combinacion = [i,n+1] + lista.append(combinacion) + return lista + +nmax = int(input("Numero máximo: ")) + +catetos = combinaciones(nmax) +resultados = list(range(1,nmax+1)) + +triples =[] + +for elemento in catetos: + hipotenusacuadrado = math.pow(elemento[0],2) + math.pow(elemento[1],2) + hipotenusa = math.sqrt(hipotenusacuadrado) + if hipotenusa in resultados: + triples.append([elemento[0],elemento[1],hipotenusa]) + +print(triples) + + + + + + \ No newline at end of file From d9aa3a9545efe8aefd2e7f671f4089fb1f70b9a8 Mon Sep 17 00:00:00 2001 From: rianojnicolas Date: Sun, 8 Oct 2023 14:07:32 -0500 Subject: [PATCH 0029/2103] Reto #1 Scala --- .../scala/rianojnicolas.scala" | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/scala/rianojnicolas.scala" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/scala/rianojnicolas.scala" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/scala/rianojnicolas.scala" new file mode 100644 index 0000000000..797e5c2297 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/scala/rianojnicolas.scala" @@ -0,0 +1,56 @@ +/* + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") +*/ +object Reto1 extends App { + val dict_leet = Map[Char, String]('A' -> "4", + 'B' -> "I3", + 'C' -> "[", + 'D' -> ")", + 'E' -> "3", + 'F' -> "|=", + 'G' -> "&", + 'H' -> "#", + 'I' -> "1", + 'J' -> ",_|", + 'K' -> ">|", + 'L' -> "1", + 'M' -> "/\\/\\", + 'N' -> "^/", + 'O' -> "0", + 'P' -> "|*", + 'Q' -> "(_,)", + 'R' -> "I2", + 'S' -> "5", + 'T' -> "7", + 'U' -> "(_)", + 'V' -> "\\/", + 'W' -> "\\/\\/", + 'X' -> "><", + 'Y' -> "j", + 'Z' -> "2", + '1' -> "L", + '2' -> "R", + '3' -> "E", + '4' -> "A", + '5' -> "S", + '6' -> "b", + '7' -> "T", + '8' -> "B", + '9' -> "g", + '0' -> "o" + ) + + println("Ingresa una frase o texto: ") + val input_1 = scala.io.StdIn.readLine() + val input_mayus = input_1.toUpperCase() + val outputMod = input_mayus + .map {char => dict_leet.getOrElse(char, char)} + .mkString + println("Tu frase codificada es: ") + println(outputMod) +} \ No newline at end of file From 433549efcbce7132e6fe4caa1b6d42063c6ab2a2 Mon Sep 17 00:00:00 2001 From: William_Pastor_DesktopWork Date: Sun, 8 Oct 2023 14:19:53 -0500 Subject: [PATCH 0030/2103] Reto # 3 - JavaScript --- .../javascript/wapastorv.js | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/wapastorv.js diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/wapastorv.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/wapastorv.js new file mode 100644 index 0000000000..2ac4742da8 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/wapastorv.js @@ -0,0 +1,91 @@ +let marcadorJugadorOne = 0; +let marcadorJugadorTwo = 0; +let resultados =["love", "15", "30", "40", "Deuce", "Ventaja"] +let aumetarJuadorOne=0; +let aumetarJuadorTwo=0; +let resuldatoOne; +let resuldatoTwo; +function juegoDeTenis(jugador){ + jugador =jugador.toLowerCase(); + + + if(jugador === 'p1'){ + ++aumetarJuadorOne; + marcadorJugadorOne = resultados[aumetarJuadorOne]; + marcadorJugadorTwo = resultados[aumetarJuadorTwo]; + resuldatoOne = marcadorJugadorOne + " - "+marcadorJugadorTwo; + + }else if(jugador === 'p2'){ + ++aumetarJuadorTwo; + marcadorJugadorTwo = resultados[aumetarJuadorTwo]; + marcadorJugadorOne = resultados[aumetarJuadorOne]; + resuldatoTwo = marcadorJugadorOne + " - "+marcadorJugadorTwo; + } + if(resuldatoOne === resuldatoTwo){ + console.log("Deuce"); + } + console.log(marcadorJugadorOne + " - "+marcadorJugadorTwo); +} + +juegoDeTenis("p1") +juegoDeTenis("p1") +juegoDeTenis("p2") +juegoDeTenis("p2") +juegoDeTenis("p1") +juegoDeTenis("p2") +juegoDeTenis("p1") +juegoDeTenis("p1") + + +// function jugarTenis(secuencia) { +// let puntuacion = { +// P1: 0, +// P2: 0 +// }; + +// const puntuaciones = ["Love", 15, 30, 40]; + +// for (const punto of secuencia) { +// if (punto === "P1") { +// puntuacion.P1++; +// } else if (punto === "P2") { +// puntuacion.P2++; +// } + +// if (puntuacion.P1 >= 3 && puntuacion.P2 >= 3) { +// if (puntuacion.P1 === puntuacion.P2) { +// if (puntuacion.P1 === 3) { +// console.log("Deuce"); +// } else { +// console.log("Deuce"); +// } +// } else if (puntuacion.P1 - puntuacion.P2 === 1) { +// console.log("Ventaja P1"); +// } else if (puntuacion.P2 - puntuacion.P1 === 1) { +// console.log("Ventaja P2"); +// } else if (puntuacion.P1 - puntuacion.P2 >= 2) { +// console.log("Ha ganado el P1"); +// return; +// } else if (puntuacion.P2 - puntuacion.P1 >= 2) { +// console.log("Ha ganado el P2"); +// return; +// } +// } else { +// const p1Score = puntuaciones[puntuacion.P1] || puntuaciones[0]; +// const p2Score = puntuaciones[puntuacion.P2] || puntuaciones[0]; +// console.log(`${p1Score} - ${p2Score}`); +// } +// } +// } + +// const secuencia = ["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"]; +// jugarTenis(secuencia); + +// const secuencia2 = ["P1", "P1", "P2", "P2", "P1","P2", "P1", "P1", "P2", "P1"]; +// jugarTenis(secuencia2); + +// const secuencia3 = ["P1", "P1"]; +// jugarTenis(secuencia3); + +// const secuencia4 = ["P1", "P1","P1", "P1","P1", "P1"]; +// jugarTenis(secuencia4); \ No newline at end of file From 268aa18df7e4498faa56de1abc983b080a48a8e8 Mon Sep 17 00:00:00 2001 From: William_Pastor_DesktopWork Date: Sun, 8 Oct 2023 14:23:23 -0500 Subject: [PATCH 0031/2103] Reto # 3 - JavaScript --- .../javascript/wapastorv.js | 129 ++++++------------ 1 file changed, 45 insertions(+), 84 deletions(-) diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/wapastorv.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/wapastorv.js index 2ac4742da8..6b767f08bc 100644 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/wapastorv.js +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/wapastorv.js @@ -1,91 +1,52 @@ -let marcadorJugadorOne = 0; -let marcadorJugadorTwo = 0; -let resultados =["love", "15", "30", "40", "Deuce", "Ventaja"] -let aumetarJuadorOne=0; -let aumetarJuadorTwo=0; -let resuldatoOne; -let resuldatoTwo; -function juegoDeTenis(jugador){ - jugador =jugador.toLowerCase(); - - - if(jugador === 'p1'){ - ++aumetarJuadorOne; - marcadorJugadorOne = resultados[aumetarJuadorOne]; - marcadorJugadorTwo = resultados[aumetarJuadorTwo]; - resuldatoOne = marcadorJugadorOne + " - "+marcadorJugadorTwo; - - }else if(jugador === 'p2'){ - ++aumetarJuadorTwo; - marcadorJugadorTwo = resultados[aumetarJuadorTwo]; - marcadorJugadorOne = resultados[aumetarJuadorOne]; - resuldatoTwo = marcadorJugadorOne + " - "+marcadorJugadorTwo; - } - if(resuldatoOne === resuldatoTwo){ - console.log("Deuce"); - } - console.log(marcadorJugadorOne + " - "+marcadorJugadorTwo); -} - -juegoDeTenis("p1") -juegoDeTenis("p1") -juegoDeTenis("p2") -juegoDeTenis("p2") -juegoDeTenis("p1") -juegoDeTenis("p2") -juegoDeTenis("p1") -juegoDeTenis("p1") - - -// function jugarTenis(secuencia) { -// let puntuacion = { -// P1: 0, -// P2: 0 -// }; +function jugarTenis(secuencia) { + let puntuacion = { + P1: 0, + P2: 0 + }; -// const puntuaciones = ["Love", 15, 30, 40]; + const puntuaciones = ["Love", 15, 30, 40]; -// for (const punto of secuencia) { -// if (punto === "P1") { -// puntuacion.P1++; -// } else if (punto === "P2") { -// puntuacion.P2++; -// } + for (const punto of secuencia) { + if (punto === "P1") { + puntuacion.P1++; + } else if (punto === "P2") { + puntuacion.P2++; + } -// if (puntuacion.P1 >= 3 && puntuacion.P2 >= 3) { -// if (puntuacion.P1 === puntuacion.P2) { -// if (puntuacion.P1 === 3) { -// console.log("Deuce"); -// } else { -// console.log("Deuce"); -// } -// } else if (puntuacion.P1 - puntuacion.P2 === 1) { -// console.log("Ventaja P1"); -// } else if (puntuacion.P2 - puntuacion.P1 === 1) { -// console.log("Ventaja P2"); -// } else if (puntuacion.P1 - puntuacion.P2 >= 2) { -// console.log("Ha ganado el P1"); -// return; -// } else if (puntuacion.P2 - puntuacion.P1 >= 2) { -// console.log("Ha ganado el P2"); -// return; -// } -// } else { -// const p1Score = puntuaciones[puntuacion.P1] || puntuaciones[0]; -// const p2Score = puntuaciones[puntuacion.P2] || puntuaciones[0]; -// console.log(`${p1Score} - ${p2Score}`); -// } -// } -// } + if (puntuacion.P1 >= 3 && puntuacion.P2 >= 3) { + if (puntuacion.P1 === puntuacion.P2) { + if (puntuacion.P1 === 3) { + console.log("Deuce"); + } else { + console.log("Deuce"); + } + } else if (puntuacion.P1 - puntuacion.P2 === 1) { + console.log("Ventaja P1"); + } else if (puntuacion.P2 - puntuacion.P1 === 1) { + console.log("Ventaja P2"); + } else if (puntuacion.P1 - puntuacion.P2 >= 2) { + console.log("Ha ganado el P1"); + return; + } else if (puntuacion.P2 - puntuacion.P1 >= 2) { + console.log("Ha ganado el P2"); + return; + } + } else { + const p1Score = puntuaciones[puntuacion.P1] || puntuaciones[0]; + const p2Score = puntuaciones[puntuacion.P2] || puntuaciones[0]; + console.log(`${p1Score} - ${p2Score}`); + } + } + } -// const secuencia = ["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"]; -// jugarTenis(secuencia); + const secuencia = ["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"]; + jugarTenis(secuencia); -// const secuencia2 = ["P1", "P1", "P2", "P2", "P1","P2", "P1", "P1", "P2", "P1"]; -// jugarTenis(secuencia2); + const secuencia2 = ["P1", "P1", "P2", "P2", "P1","P2", "P1", "P1", "P2", "P1"]; + jugarTenis(secuencia2); -// const secuencia3 = ["P1", "P1"]; -// jugarTenis(secuencia3); + const secuencia3 = ["P1", "P1"]; + jugarTenis(secuencia3); -// const secuencia4 = ["P1", "P1","P1", "P1","P1", "P1"]; -// jugarTenis(secuencia4); \ No newline at end of file + const secuencia4 = ["P1", "P1","P1", "P1","P1", "P1"]; + jugarTenis(secuencia4); \ No newline at end of file From 384b6f04c9fc0d8f1efb750615525acfb70f9548 Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Sun, 8 Oct 2023 21:44:55 +0200 Subject: [PATCH 0032/2103] Reto #39 - Java --- .../java/Qv1ko.java" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/java/Qv1ko.java" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/java/Qv1ko.java" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/java/Qv1ko.java" new file mode 100644 index 0000000000..86454fd7e1 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/java/Qv1ko.java" @@ -0,0 +1,21 @@ +public class Qv1ko { + + public static void main(String[] args) { + findPythagoreanTriple(10); + } + + public static void findPythagoreanTriple(int max) { + + for (int a = 1; a <= max; a++) { + for (int b = a; b <= max; b++) { + for (int c = b; c <= max; c++) { + if (a * a + b * b == c * c) { + System.out.println("(" + a + ", " + b + ", " + c + ")"); + } + } + } + } + + } + +} From d9218d3f0c9844c959f2608f2f727acc532af222 Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Sun, 8 Oct 2023 21:45:10 +0200 Subject: [PATCH 0033/2103] Reto #39 - Java --- .../java/Qv1ko.java" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/java/Qv1ko.java" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/java/Qv1ko.java" index 86454fd7e1..914ef42584 100644 --- "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/java/Qv1ko.java" +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/java/Qv1ko.java" @@ -4,7 +4,7 @@ public static void main(String[] args) { findPythagoreanTriple(10); } - public static void findPythagoreanTriple(int max) { + private static void findPythagoreanTriple(int max) { for (int a = 1; a <= max; a++) { for (int b = a; b <= max; b++) { From 4896412aa032a60abe8dee7fda44e91a6cf4e9a7 Mon Sep 17 00:00:00 2001 From: Sandy Date: Sun, 8 Oct 2023 15:49:56 -0400 Subject: [PATCH 0034/2103] Reto #3 - Javascript --- .../javascript/sandybierhoff.js" | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/sandybierhoff.js" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/sandybierhoff.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/sandybierhoff.js" new file mode 100644 index 0000000000..98049bd87f --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/sandybierhoff.js" @@ -0,0 +1,37 @@ +function generatePassword({ size, upperCaseLetters, numbers, symbols }) { + let password = ''; + if(size == null || size < 8 || size > 16) throw new RangeError('Size must between 8-16 characters'); + + let getRandomNumber = (max) => Math.floor(Math.random() * (max)); + + let availableCharCodes = Array.from(Array(25), (_, i) => i+97); + if(upperCaseLetters) + availableCharCodes = availableCharCodes.concat(Array.from(Array(25), (_, i) => i+65)); + if(numbers) + availableCharCodes = availableCharCodes.concat(Array.from(Array(10), (_, i) => i+48)); + if(symbols) + availableCharCodes = availableCharCodes.concat(Array.from(Array(10), (_, i) => i+33)); + + let availableCharCodeLength = availableCharCodes.length; + + for (let index = 0; index < size; index++) { + password += String.fromCharCode(availableCharCodes[getRandomNumber(availableCharCodeLength)]); + } + + return password; +} + +let options = { + size: 9, + numbers: true, + symbols: true, + upperCaseLetters: true +} + +try { + let password = generatePassword(options); + console.log(password); +} +catch(error){ + console.log(`ERROR: ${error.message}`); +} \ No newline at end of file From fd8e4ee5862e845d157f62b6e77bc1a2f3f02f9f Mon Sep 17 00:00:00 2001 From: Sandy Date: Sun, 8 Oct 2023 15:55:57 -0400 Subject: [PATCH 0035/2103] Un cambio menor --- .../javascript/sandybierhoff.js" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/sandybierhoff.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/sandybierhoff.js" index 98049bd87f..e89deedf42 100644 --- "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/sandybierhoff.js" +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/sandybierhoff.js" @@ -12,7 +12,7 @@ function generatePassword({ size, upperCaseLetters, numbers, symbols }) { if(symbols) availableCharCodes = availableCharCodes.concat(Array.from(Array(10), (_, i) => i+33)); - let availableCharCodeLength = availableCharCodes.length; + const availableCharCodeLength = availableCharCodes.length; for (let index = 0; index < size; index++) { password += String.fromCharCode(availableCharCodes[getRandomNumber(availableCharCodeLength)]); @@ -21,7 +21,7 @@ function generatePassword({ size, upperCaseLetters, numbers, symbols }) { return password; } -let options = { +const options = { size: 9, numbers: true, symbols: true, From 7d15defa9f3ffcf3e0e0d0b6a6a6c7ba85286168 Mon Sep 17 00:00:00 2001 From: Marco Antonio Gallardo Date: Sun, 8 Oct 2023 23:09:54 +0200 Subject: [PATCH 0036/2103] Reto #38 - typescript (v2 - con backtracking) --- .../typescript/mgallardodevV2.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/typescript/mgallardodevV2.ts diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/typescript/mgallardodevV2.ts b/Retos/Reto #38 - LAS SUMAS [Media]/typescript/mgallardodevV2.ts new file mode 100644 index 0000000000..5eeff2b604 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/typescript/mgallardodevV2.ts @@ -0,0 +1,26 @@ +const numeros:number[] = [1,6,3,2]; +const target: number = 6; + + +function buscar(nums: number[], target: number){ + + const result:number[][] = [ ] + + function encuentraSuma(nums: number[], target: number, comb: number[]=[]){ + for(let i = 0; i < nums.length; i++){ + const resta = target - nums[i] + const newComb = [...comb, nums[i]]; + if(resta === 0){ + result.push([...newComb]) + }else if(resta < 0) { + }else if(resta > 0){ + encuentraSuma(nums.slice(i+1), resta, newComb) + } + } + } + encuentraSuma(nums, target) + console.log(result) + +} + +buscar(numeros, target) From 53467b9d61051e92b966ffc355ee1a82bb6b2cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juli=C3=A1n=20Rodr=C3=ADguez?= Date: Sun, 8 Oct 2023 17:32:54 -0500 Subject: [PATCH 0037/2103] Rename destroywolves.php to julianpk19961.php Update name file based on rules of the repository --- .../php/julianpk19961.php" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/destroywolves.php" => "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/julianpk19961.php" (100%) diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/destroywolves.php" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/julianpk19961.php" similarity index 100% rename from "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/destroywolves.php" rename to "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/julianpk19961.php" From 2c74ca407f1eb0373cf0a6721a969c212ec97b1d Mon Sep 17 00:00:00 2001 From: Jonathan Alberth Quispe Fuentes Date: Sun, 8 Oct 2023 18:15:02 -0500 Subject: [PATCH 0038/2103] reto 38 python qf-jonathan --- .../python/qf-jonathan.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/qf-jonathan.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/qf-jonathan.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/qf-jonathan.py new file mode 100644 index 0000000000..110e2ca418 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/qf-jonathan.py @@ -0,0 +1,43 @@ +import unittest + + +def sum_to(arr: list[int], target: int) -> list[list[int]]: + ans, st, sarr = [], [(0, [], target)], sorted(arr) + while st: + start, comb, rest = st.pop() + if rest == 0: + ans.append(comb) + for i in range(start, len(sarr)): + if ( + i < len(sarr) + and (i <= start or sarr[i] != sarr[i - 1]) + and sarr[i] <= rest + ): + st.append((i + 1, comb + [sarr[i]], rest - sarr[i])) + return sorted(ans) + + +class SumToTestCase(unittest.TestCase): + def test_simple(self): + self.assertEqual(sum_to([1, 5, 3, 2], 6), [[1, 2, 3], [1, 5]]) + self.assertEqual( + sum_to([1, 2, 1, 1, 1, 1, 2, 1], 6), + [[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 2], [1, 1, 2, 2]], + ) + self.assertEqual( + sum_to([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2], 77), + [ + [1, 1, 2, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12], + [1, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], + [1, 2, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12], + [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], + ], + ) + + def test_stress(self): + self.assertEqual(len(sum_to([i + 1 for i in range(20)], 33)), 378) + self.assertEqual(len(sum_to([i + 1 for i in range(30)], 77)), 39687) + + +if __name__ == "__main__": + unittest.main() From 13c344d773e6293549e504416693f15094e33115 Mon Sep 17 00:00:00 2001 From: William_Pastor_DesktopWork Date: Sun, 8 Oct 2023 18:21:03 -0500 Subject: [PATCH 0039/2103] Acutlizacion de codigo para verificar errores --- .../javascript/wapastorv.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/wapastorv.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/wapastorv.js index 6b767f08bc..215241a7d9 100644 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/wapastorv.js +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/wapastorv.js @@ -7,12 +7,18 @@ function jugarTenis(secuencia) { const puntuaciones = ["Love", 15, 30, 40]; for (const punto of secuencia) { + if (punto !== "P1" && punto !== "P2") { + // Si el punto no es "P1" ni "P2", es un valor no válido + console.error(`Error: Valor no válido en la secuencia - ${punto}`); + return; // Detener el juego debido al error + } + // Comprar el valor de la secuencias y de acuerdo al valor se aumenta el puntaje if (punto === "P1") { puntuacion.P1++; } else if (punto === "P2") { puntuacion.P2++; } - + // validacion cuando llegovs a la maxima cantidad de puntos if (puntuacion.P1 >= 3 && puntuacion.P2 >= 3) { if (puntuacion.P1 === puntuacion.P2) { if (puntuacion.P1 === 3) { From 59e04a0455f9ed6c98446a2e385b36d2d56c984c Mon Sep 17 00:00:00 2001 From: arnodchirivi08 Date: Sun, 8 Oct 2023 19:24:41 -0500 Subject: [PATCH 0040/2103] solved exercise --- .../javascript/arnodchirivi08.js | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/arnodchirivi08.js diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/arnodchirivi08.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/arnodchirivi08.js new file mode 100644 index 0000000000..d03091d7eb --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/arnodchirivi08.js @@ -0,0 +1,50 @@ +/* + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ +const puntuacionNumerico = { 0: 'Love', 1: 15, 2: 30, 3: 40, 4: 50, 5: 60 } +const jugadores = { p1: 'P1', p2: 'P2' } + + +function puntuacionJuegodos(secuencia) { + let player1 = 0; + let player2 = 0; + + if(verificarValoresCorrectos(secuencia)) return console.log('Existe un error en la secuencia ingresada') + for (let i = 0; i < secuencia.length; i++) { + secuencia[i] === jugadores.p1 ? player1++ : player2++; + if (player1 === player2 && (player1 >= 3 || player2 >= 3)) { + console.log('Deuce'); + } + else if (player1 >= 5 || player2 >= 5) { + player1 > player2 ? console.log('Ha ganado P1') : console.log('Ha ganado P2'); + } + else if (player1 >= 4 || player2 >= 4) { + player1 > player2 ? console.log('Ventaja P1') : console.log('Ventaja P2'); + } + else if (player1 <= 3 || player2 <= 3) { + console.log(`${puntuacionNumerico[player1]} ${puntuacionNumerico[player2]}`) + } + } +} + +function verificarValoresCorrectos(secuencia) { + return secuencia.some(item => item !== jugadores.p1 && item !== jugadores.p2) +} + +puntuacionJuegodos(['P1', 'P1', 'P2', 'P2', 'P1', 'P2', 'P1', 'P1']); + From 8a91a070c52ec9a4b856ccbd940c1ed79256c45e Mon Sep 17 00:00:00 2001 From: arnodchirivi08 Date: Sun, 8 Oct 2023 19:32:25 -0500 Subject: [PATCH 0041/2103] modified soluction --- .../javascript/arnodchirivi08.js | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/arnodchirivi08.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/arnodchirivi08.js index d03091d7eb..2fde25259b 100644 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/arnodchirivi08.js +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/arnodchirivi08.js @@ -16,35 +16,39 @@ * - Si quieres, puedes controlar errores en la entrada de datos. * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. */ -const puntuacionNumerico = { 0: 'Love', 1: 15, 2: 30, 3: 40, 4: 50, 5: 60 } -const jugadores = { p1: 'P1', p2: 'P2' } +const punctuation = { 0: 'Love', 1: 15, 2: 30, 3: 40, 4: 50, 5: 60 }; +const players = { P1: 0, P2: 0 } -function puntuacionJuegodos(secuencia) { - let player1 = 0; - let player2 = 0; +function game(sequence) { + if (verifySequence(sequence)) { + console.log('Existe un error en la secuencia ingresada'); + } - if(verificarValoresCorrectos(secuencia)) return console.log('Existe un error en la secuencia ingresada') - for (let i = 0; i < secuencia.length; i++) { - secuencia[i] === jugadores.p1 ? player1++ : player2++; - if (player1 === player2 && (player1 >= 3 || player2 >= 3)) { - console.log('Deuce'); - } - else if (player1 >= 5 || player2 >= 5) { - player1 > player2 ? console.log('Ha ganado P1') : console.log('Ha ganado P2'); + for (let i = 0; i < sequence.length; i++) { + const player = sequence[i]; + + if (player === 'P1' || player === 'P2') { + players[player]++; } - else if (player1 >= 4 || player2 >= 4) { - player1 > player2 ? console.log('Ventaja P1') : console.log('Ventaja P2'); - } - else if (player1 <= 3 || player2 <= 3) { - console.log(`${puntuacionNumerico[player1]} ${puntuacionNumerico[player2]}`) + if (players.P1 === players.P2 && (players.P1 >= 3 || players.P2 >= 3)) { + imprimirResultados('Deuce'); + } else if (players.P1 >= 5 || players.P2 >= 5) { + imprimirResultados(players.P1 > players.P2 ? 'Ha ganado P1' : 'Ha ganado P2') + } else if (players.P1 >= 4 || players.P2 >= 4) { + imprimirResultados(players.P1 > players.P2 ? 'Ventaja P1' : 'Ventaja P2'); + } else { + imprimirResultados(`${punctuation[players.P1]} ${punctuation[players.P2]}`); } } } -function verificarValoresCorrectos(secuencia) { - return secuencia.some(item => item !== jugadores.p1 && item !== jugadores.p2) +function verifySequence(sequence) { + return sequence.some(item => item !== 'P1' && item !== 'P2') } -puntuacionJuegodos(['P1', 'P1', 'P2', 'P2', 'P1', 'P2', 'P1', 'P1']); +function imprimirResultados(resultado) { + console.log(resultado); +} +game(['P1', 'P1', 'P2', 'P2', 'P1', 'P2', 'P1', 'P1']) \ No newline at end of file From b461da4f917a76432b5f3debb33cb0d021bb21f8 Mon Sep 17 00:00:00 2001 From: Miguel Millones Date: Sun, 8 Oct 2023 21:04:27 -0500 Subject: [PATCH 0042/2103] Reto #10 - Python --- .../python/miguelmillones.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Retos/Reto #10 - LA API [Media]/python/miguelmillones.py diff --git a/Retos/Reto #10 - LA API [Media]/python/miguelmillones.py b/Retos/Reto #10 - LA API [Media]/python/miguelmillones.py new file mode 100644 index 0000000000..8ccb58e986 --- /dev/null +++ b/Retos/Reto #10 - LA API [Media]/python/miguelmillones.py @@ -0,0 +1,16 @@ +##* Llamar a una API es una de las tareas más comunes en programación. +#Implementa una llamada HTTP a una API (la que tú quieras) y muestra su +#resultado a través de la terminal. Por ejemplo: Pokémon, Marvel... +#Aquí tienes un listado de posibles APIs: +#https://github.com/public-apis/public-apis +#*/ +import requests + +URL="https://pokeapi.co/api/v2/pokemon/ditto" +response= requests.get(URL) + +if response.status_code==200: + data=response.json() + print(data) +else: + print("Error: ", response.status_code) From 67b77655e9e90ccc5976b887dad0ccb0f7561de2 Mon Sep 17 00:00:00 2001 From: arnodchirivi08 Date: Sun, 8 Oct 2023 21:53:37 -0500 Subject: [PATCH 0043/2103] new solution --- .../javascript/arnodchirivi08.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/arnodchirivi08.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/arnodchirivi08.js index 2fde25259b..bc2c044b9a 100644 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/arnodchirivi08.js +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/arnodchirivi08.js @@ -25,12 +25,14 @@ function game(sequence) { console.log('Existe un error en la secuencia ingresada'); } - for (let i = 0; i < sequence.length; i++) { - const player = sequence[i]; - + sequence.forEach(player => { if (player === 'P1' || player === 'P2') { players[player]++; } + + const puntuationP1 = punctuation[players.P1]; + const puntuationP2 = punctuation[players.P2]; + if (players.P1 === players.P2 && (players.P1 >= 3 || players.P2 >= 3)) { imprimirResultados('Deuce'); } else if (players.P1 >= 5 || players.P2 >= 5) { @@ -38,9 +40,9 @@ function game(sequence) { } else if (players.P1 >= 4 || players.P2 >= 4) { imprimirResultados(players.P1 > players.P2 ? 'Ventaja P1' : 'Ventaja P2'); } else { - imprimirResultados(`${punctuation[players.P1]} ${punctuation[players.P2]}`); + imprimirResultados(`${puntuationP1} ${puntuationP2}`); } - } + }); } function verifySequence(sequence) { From b91d6dd7352fbe447a2816c556bae4620614de37 Mon Sep 17 00:00:00 2001 From: William_Pastor_DesktopWork Date: Sun, 8 Oct 2023 22:22:04 -0500 Subject: [PATCH 0044/2103] Reto 3 - JavaScript --- .../javascript/wapastorv.js" | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/wapastorv.js" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/wapastorv.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/wapastorv.js" new file mode 100644 index 0000000000..e3726183bf --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/wapastorv.js" @@ -0,0 +1,42 @@ +function generarContrasena(longitud){ + + const caracteres = [ + ...Array.from({ length: 26 }, (_, i) => String.fromCharCode(65 + i)), // Mayúsculas A-Z + ...Array.from({ length: 26 }, (_, i) => String.fromCharCode(97 + i)), // Minúsculas a-z + ...Array.from({ length: 10 }, (_, i) => String(i)), // Números 0-9 + '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '[', ']', '{', '}', '|', '\\', ';', ':', ',', '.', '<', '>', '/', '?', '`', '~' + ]; + + let contrasena =''; + + const caracteresLen = caracteres.length; + + if (longitud < 8 || longitud > 16) { + console.error('La longitud de la contraseña debe estar entre 8 y 16 caracteres.'); + return null; + } + + // for(let i= 0; i< caracteres.length; i++){ + // const contrasenaAleatoria = caracteres[Math.floor(Math.random() * caracteres.length)]; + // contrasena += contrasenaAleatoria + + // } + // console.log(contrasena); + + for (let i = 0; i < longitud; i++) { + const caracterAleatorio = caracteres[Math.floor(Math.random() * caracteresLen)]; + contrasena += caracterAleatorio; + } + return contrasena; + } + + +const longitudAleatoria = Math.floor(Math.random() * 9) + 8; +const contrasenaGenerada = generarContrasena(longitudAleatoria); + +if (contrasenaGenerada) { + console.log(`Contraseña generada: ${contrasenaGenerada}`); +} + + + From 65f8afd85052443ff1fb417d2febfb1eb0dbeb27 Mon Sep 17 00:00:00 2001 From: pyRamsd Date: Sun, 8 Oct 2023 23:24:49 -0500 Subject: [PATCH 0045/2103] Reto #38 - python --- .../python/pyramsd.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/pyramsd.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/pyramsd.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/pyramsd.py new file mode 100644 index 0000000000..13dd56a8f5 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/pyramsd.py @@ -0,0 +1,19 @@ +def searchCombo(lista,objetivo): + def rev(restante, combActual, initIndex): + if restante == 0: + result.append(combActual[:]) + return + if restante < 0: + return + for i in range(initIndex, len(lista)): + combActual.append(lista[i]) + rev(restante - lista[i], combActual, i + 1) + combActual.pop() + + result = [] + rev(objetivo, [], 0) + return result + +lista=[1,5,3,2,4] +objetivo=10 +print(searchCombo(lista, objetivo)) \ No newline at end of file From ec2c5dbea4732215785dcde2590599c0a7554e02 Mon Sep 17 00:00:00 2001 From: William_Pastor_DesktopWork Date: Mon, 9 Oct 2023 00:27:13 -0500 Subject: [PATCH 0046/2103] Reto 4 - JavaScript --- .../javascript/wapastorv.js | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/wapastorv.js diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/wapastorv.js b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/wapastorv.js new file mode 100644 index 0000000000..f276e3f435 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/wapastorv.js @@ -0,0 +1,45 @@ +// Clase para verificar si un número es par o impar +class ParImparChecker { + esParImpar(numero) { + return numero % 2 === 0 ? "Es Par" : "Es Impar"; + } + } + + // Clase para verificar si un número es primo + class PrimoChecker { + esPrimo(numero) { + if (numero <= 1) { + return "No es primo"; + } + for (let i = 2; i < numero; i++) { + if (numero % i === 0) { + return "No es primo"; + } + } + return "Es primo"; + } + } + + // Clase para verificar si un número es parte de la secuencia Fibonacci + class FibonacciChecker { + esFibonacci(numero) { + let a = 0; + let b = 1; + while (a < numero) { + let temp = a; + a = b; + b = temp + b; + } + return a === numero ? "Es parte de la secuencia Fibonacci" : "No es parte de la secuencia Fibonacci"; + } + } + + const parImparChecker = new ParImparChecker(); + const primoChecker = new PrimoChecker(); + const fibonacciChecker = new FibonacciChecker(); + + const numero1 = 2; + const numero2 = 7; + + console.log(`El numero ${numero1}: ${primoChecker.esPrimo(numero1)}, ${fibonacciChecker.esFibonacci(numero1)}, ${parImparChecker.esParImpar(numero1)}`); + console.log(`El numero ${numero2}: ${primoChecker.esPrimo(numero2)}, ${fibonacciChecker.esFibonacci(numero2)}, ${parImparChecker.esParImpar(numero2)}`); \ No newline at end of file From 9a0785737b130f7f0b344edbd961560d02310eb7 Mon Sep 17 00:00:00 2001 From: Sergio Date: Mon, 9 Oct 2023 12:22:52 +0200 Subject: [PATCH 0047/2103] Reto #0 - Java --- .../java/Sdesantiago.java" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Sdesantiago.java" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Sdesantiago.java" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Sdesantiago.java" new file mode 100644 index 0000000000..8990742627 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Sdesantiago.java" @@ -0,0 +1,21 @@ +/* +* Escribe un programa que muestre por consola (con un print) los +* números de 1 a 100 (ambos incluidos y con un salto de línea entre +* cada impresión), sustituyendo los siguientes: +* - Múltiplos de 3 por la palabra "fizz". +* - Múltiplos de 5 por la palabra "buzz". +* - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". +*/ + +public class Sdesantiago { + public static void main(String[] args) { + for (int i=0;i<=100;i++) { + if (i%3==0 && i%5==0) + System.out.println(i+" fizzbuzz"); + else if (i%3==0) + System.out.println(i+" fizz"); + else if (i%5==0) + System.out.println(i+" buzz"); + } + } +} \ No newline at end of file From ec1fc4a5bb5097dd7d446c76910a6e2f786b0236 Mon Sep 17 00:00:00 2001 From: Sergio Date: Mon, 9 Oct 2023 12:27:12 +0200 Subject: [PATCH 0048/2103] =?UTF-8?q?Corregido=20Reto=20#0=20-=20Java:=20S?= =?UTF-8?q?e=20imprim=C3=ADan=20solo=20los=20casos=20en=20los=20que=20fuer?= =?UTF-8?q?a=20m=C3=BAltiplo;=20ahora=20se=20imprime=20todo=20y=20se=20sus?= =?UTF-8?q?tituye=20cuando=20corresponde?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/Sdesantiago.java" | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Sdesantiago.java" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Sdesantiago.java" index 8990742627..28d19815dc 100644 --- "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Sdesantiago.java" +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Sdesantiago.java" @@ -11,11 +11,13 @@ public class Sdesantiago { public static void main(String[] args) { for (int i=0;i<=100;i++) { if (i%3==0 && i%5==0) - System.out.println(i+" fizzbuzz"); + System.out.println("fizzbuzz"); else if (i%3==0) - System.out.println(i+" fizz"); + System.out.println("fizz"); else if (i%5==0) - System.out.println(i+" buzz"); + System.out.println("buzz"); + else + System.out.println(i); } } } \ No newline at end of file From 006056c173118fd923622d31d5733071dacedacb Mon Sep 17 00:00:00 2001 From: mortizp15 <92309665+mortizp15@users.noreply.github.com> Date: Mon, 9 Oct 2023 13:49:32 +0200 Subject: [PATCH 0049/2103] Reto #29 mortizp --- .../javascript/mortizp15.js" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/javascript/mortizp15.js" diff --git "a/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/javascript/mortizp15.js" "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/javascript/mortizp15.js" new file mode 100644 index 0000000000..4434bf0736 --- /dev/null +++ "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/javascript/mortizp15.js" @@ -0,0 +1,30 @@ +/* + * Crea una función que reciba dos cadenas de texto casi iguales, + * a excepción de uno o varios caracteres. + * La función debe encontrarlos y retornarlos en formato lista/array. + * - Ambas cadenas de texto deben ser iguales en longitud. + * - Las cadenas de texto son iguales elemento a elemento. + * - No se pueden utilizar operaciones propias del lenguaje + * que lo resuelvan directamente. + * + * Ejemplos: + * - Me llamo mouredev / Me llemo mouredov -> ["e", "o"] + * - Me llamo.Brais Moure / Me llamo brais moure -> [" ", "b", "m"] + */ + +const infiltrado = (cadena1, cadena2) => { + let caracteres = [] + if(cadena1.length != cadena2.length) { + return "Las cadenas deben tener la misma longitud" + } else { + for(i = 0; i <= cadena1.length; i++){ + if (cadena1[i] != cadena2[i]){ + caracteres.push(cadena2[i]) + } + } + return caracteres + } +} + +console.log(infiltrado("Me llamo mortizp ", "me.llamo mortizp/")) // = [ 'm', '.', '/' ] +console.log(infiltrado("Tengo un. perro llamado Nika", "t>ngo una perro .yamado nica")) // = [ 't', '>', 'a', '.', 'y', 'n', 'c' ] From bfdbcc225fd3bbbc81f9075badb71fecfd2fdb76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Jos=C3=A9=20Borges=20Medina?= <121818423+borgesmj@users.noreply.github.com> Date: Mon, 9 Oct 2023 10:33:39 -0500 Subject: [PATCH 0050/2103] =?UTF-8?q?a=C3=B1adiendo=20Reto=20#39=20borgesm?= =?UTF-8?q?j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/borgesmj.js" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/javascript/borgesmj.js" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/javascript/borgesmj.js" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/javascript/borgesmj.js" new file mode 100644 index 0000000000..87aa1eff6a --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/javascript/borgesmj.js" @@ -0,0 +1,27 @@ +const triplesPitagoricos = (limite) => { + if (isNaN(limite) || limite < 0){ + return 'invalid entry!' + } + // creamos el array de los resultados + const result = []; + // Creamos un array donde tendrá almacenado todos los + // numeros al cuadrado + const numSquare = []; + for (i = 1; i <= limite; i++){ + numSquare.push(Math.pow(i, 2)); + } + // Evaluamos en cada item del arreglo contenga la suma de dos de sus elementos + numSquare.forEach((item, index) => { + for (let i = index + 1; i < numSquare.length; i++){ + if (numSquare.includes(item + numSquare[i])){ + let a = Math.sqrt(item); + let b = Math.sqrt(numSquare[i]); + let c = Math.sqrt(item + numSquare[i]); + result.push([a, b, c]); + } + } + }); + return result; + }; + + console.log(triplesPitagoricos(10)); \ No newline at end of file From 92595bc3d2a0f31227636a302ddadc13a6fe020f Mon Sep 17 00:00:00 2001 From: Daniel Vieites Date: Mon, 9 Oct 2023 17:55:25 +0200 Subject: [PATCH 0051/2103] Reto #39 python --- .../python/vieitesss.py" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/vieitesss.py" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/vieitesss.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/vieitesss.py" new file mode 100644 index 0000000000..0200db8707 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/vieitesss.py" @@ -0,0 +1,46 @@ +""" + Crea una función que encuentre todos los triples pitagóricos + (ternas) menores o iguales a un número dado. + - Debes buscar información sobre qué es un triple pitagórico. + - La función únicamente recibe el número máximo que puede + aparecer en el triple. + - Ejemplo: Los triples menores o iguales a 10 están + formados por (3, 4, 5) y (6, 8, 10). +""" + +def get_pythagorean_triples(max_n: int) -> list: + """Devuelve los triples pitagóricos con valores menores al número dado + + Args: + max_n (int): valor máximo posible dentro de un triple pitagórico + + Returns: + list: lista de triples pitagóricos válidos + """ + triples = [] + stop = False + for i in range(3, max_n): + for j in range(i + 1, max_n): + result = (i**2 + j**2)**0.5 + # Si el resultado es mayor que el número máximo, salimos y seguimos + # con el siguiente valor de "i", ya que a partir de aquí siempre nos + # vamos a pasar del valor máximo + if result > max_n: + # Además, si el segundo número es justo el siguiente al primero, + # entonces dejaremos de buscar más triples + if j == i + 1: + stop = True + break + # Si el resultado es un número entero (no decimal) entonces estamos + # ante una solución + if result % int(result) == 0: + triples.append((i, j, int(result))) + + if stop: + break + + return triples + +p_triples = get_pythagorean_triples(20) +print(p_triples) +print(len(p_triples)) From fd081f6d6b703b68f92b22472355e89a52ee00cd Mon Sep 17 00:00:00 2001 From: Franco Giovanni Cirielli Date: Mon, 9 Oct 2023 13:10:54 -0300 Subject: [PATCH 0052/2103] Reto #[38] - [Python] --- .../python/FrancoCirielli16.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/FrancoCirielli16.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/FrancoCirielli16.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/FrancoCirielli16.py new file mode 100644 index 0000000000..81a4db95db --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/FrancoCirielli16.py @@ -0,0 +1,27 @@ +def find_nums(numbers: list, target: int) -> list: + + def find_combinations(start: int, current_combination: list): + if sum(current_combination) == target: + result.append(current_combination[:]) + return + + if sum(current_combination) > target or start == len(numbers): + return + + for i in range(start, len(numbers)): + if i > start and numbers[i] == numbers[i - 1]: + continue + + current_combination.append(numbers[i]) + find_combinations(i + 1, current_combination) + current_combination.pop() + + numbers.sort() + result = [] + find_combinations(0, []) + return result + + + +print(find_nums([1, 5, 3, 2], 6)) +print(find_nums([1, 2, 1, 1, 1, 1, 2, 1,0,10], 16)) \ No newline at end of file From 6c5bc1a21381a35d9ae193c2f2f8f705d8c0a3e1 Mon Sep 17 00:00:00 2001 From: patriciotrujilllo Date: Mon, 9 Oct 2023 13:11:40 -0300 Subject: [PATCH 0053/2103] Reto #36 resolve --- .../javascript/patriciotrujilllo.js | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Retos/Reto #36 - PERMUTACIONES [Media]/javascript/patriciotrujilllo.js diff --git a/Retos/Reto #36 - PERMUTACIONES [Media]/javascript/patriciotrujilllo.js b/Retos/Reto #36 - PERMUTACIONES [Media]/javascript/patriciotrujilllo.js new file mode 100644 index 0000000000..25d553a981 --- /dev/null +++ b/Retos/Reto #36 - PERMUTACIONES [Media]/javascript/patriciotrujilllo.js @@ -0,0 +1,28 @@ +/* + * Crea un programa que sea capaz de generar e imprimir todas las + * permutaciones disponibles formadas por las letras de una palabra. + * - Las palabras generadas no tienen por qué existir. + * - Deben usarse todas las letras en cada permutación. + * - Ejemplo: sol, slo, ols, osl, los, lso + */ + +const permutar = (word) =>{ + + if (word.length===1){ + return [word] + } + let permutations = [] + + for(let i=0; i Date: Mon, 9 Oct 2023 19:57:12 +0200 Subject: [PATCH 0054/2103] Update and rename miguelon.py to Miguel-bc.py renombrar fichero --- .../python/Miguel-bc.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/miguelon.py" => "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/Miguel-bc.py" (95%) diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/miguelon.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/Miguel-bc.py" similarity index 95% rename from "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/miguelon.py" rename to "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/Miguel-bc.py" index 57fd14776d..4555eed953 100644 --- "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/miguelon.py" +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/Miguel-bc.py" @@ -41,4 +41,4 @@ def combinaciones(numero): - \ No newline at end of file + From dc8d104d2ad9bb50f8a3a3ff2b886a1a072419f2 Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 9 Oct 2023 21:19:17 +0200 Subject: [PATCH 0055/2103] =?UTF-8?q?Correcci=C3=B3n=20Recto=20#39?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++-- .../python/mouredev.py" | 17 +++++++++++++++ .../ejercicio.md" | 21 +++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/mouredev.py" create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ejercicio.md" diff --git a/README.md b/README.md index 775b3f0962..e17ed2dac0 100644 --- a/README.md +++ b/README.md @@ -56,9 +56,10 @@ Aquí encontrarás el listado de retos, su fecha de publicación, dificultad y e * **#36** - 04/09/23 | Media | [`PERMUTACIONES`](./Retos/Reto%20%2336%20-%20PERMUTACIONES%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2336%20-%20PERMUTACIONES%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2336%20-%20PERMUTACIONES%20%5BMedia%5D/)] * **#37** - 18/09/23 | Media | [`COLORES HEX Y RGB`](./Retos/Reto%20%2337%20-%20COLORES%20HEX%20Y%20RGB%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2337%20-%20COLORES%20HEX%20Y%20RGB%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2337%20-%20COLORES%20HEX%20Y%20RGB%20%5BMedia%5D/)] * **#38** - 25/09/23 | Media | [`LAS SUMAS`](./Retos/Reto%20%2338%20-%20LAS%20SUMAS%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2338%20-%20LAS%20SUMAS%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2338%20-%20LAS%20SUMAS%20%5BMedia%5D/)] -* **#39** - 02/10/23 | Media | [`TRIPLES PITAGÓRICOS`](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/ejercicio.md) | Último reto publicado +* **#39** - 02/10/23 | Media | [`TRIPLES PITAGÓRICOS`](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/)] +* **#40** - 09/10/23 | Fácil | [`TABLA DE MULTIPLICAR`](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/ejercicio.md) | Último reto publicado -> **Corrección y Publicación próximo reto - 09/10/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1158304214913663008) en [Twitch](https://twitch.tv/mouredev)** +> **Corrección y Publicación próximo reto - 16/10/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1160805012558065775) en [Twitch](https://twitch.tv/mouredev)** *Puedes ejecutar el archivo [language_stats.py](./Retos/language_stats.py) para visualizar las estadísticas de uso de cada lenguaje.* diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/mouredev.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/mouredev.py" new file mode 100644 index 0000000000..5e56f99a4f --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/mouredev.py" @@ -0,0 +1,17 @@ +def pythagorean_triples(max: int) -> list: + triples = [] + + for a in range(1, max + 1): + for b in range(a, max + 1): + ab_squared = a**2 + b**2 + c = ab_squared**0.5 + if c > max: + break + if c.is_integer(): # ab_squared == int(c)**2 + triples.append((a, b, int(c))) + + return triples + +print(pythagorean_triples(9)) +print(pythagorean_triples(10)) +print(pythagorean_triples(20)) \ No newline at end of file diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ejercicio.md" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ejercicio.md" new file mode 100644 index 0000000000..40ad962d6a --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ejercicio.md" @@ -0,0 +1,21 @@ +# Reto #40: Tabla de multiplicar +#### Dificultad: Fácil | Publicación: 09/10/23 | Corrección: 16/10/23 + +## Enunciado + +``` +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file From 4cb2b18fc99cc1bebba656d8f175d3e77202eb49 Mon Sep 17 00:00:00 2001 From: AlbertoVf Date: Mon, 9 Oct 2023 21:27:25 +0200 Subject: [PATCH 0056/2103] reto#40 - typescript --- .../typescript/albertovf.ts" | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/albertovf.ts" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/albertovf.ts" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/albertovf.ts" new file mode 100644 index 0000000000..7d4ed6fa86 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/albertovf.ts" @@ -0,0 +1,6 @@ +const reto = (n: number) => { + for (let i = 0; i <= 10; i++) { + console.log(`${n} x ${i} = ${n * i}`); + } +} +reto(2) \ No newline at end of file From aa50e970ed034832a97584cac7f25b049a788f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Garc=C3=ADa=20Bernabeu?= Date: Mon, 9 Oct 2023 21:34:27 +0200 Subject: [PATCH 0057/2103] Reto #10 - Python --- Retos/Reto #10 - LA API [Media]/python/Bombkid85.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Retos/Reto #10 - LA API [Media]/python/Bombkid85.py diff --git a/Retos/Reto #10 - LA API [Media]/python/Bombkid85.py b/Retos/Reto #10 - LA API [Media]/python/Bombkid85.py new file mode 100644 index 0000000000..75a808c91f --- /dev/null +++ b/Retos/Reto #10 - LA API [Media]/python/Bombkid85.py @@ -0,0 +1,9 @@ +import requests + +url = "https://pokeapi.co/api/v2/pokemon/?limit=151" +response = requests.get(url) +data = response.json()["results"] +for i in data: + pokemon_name = i["name"] + pokemon_url = i["url"] + print(pokemon_name, pokemon_url) \ No newline at end of file From 2e57e63d4b7f37ac3f8f909e9c54d892bfa5971d Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Mon, 9 Oct 2023 21:37:32 +0200 Subject: [PATCH 0058/2103] Reto #40 - Java --- .../java/Qv1ko.java" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/Qv1ko.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/Qv1ko.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/Qv1ko.java" new file mode 100644 index 0000000000..5052101bb4 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/Qv1ko.java" @@ -0,0 +1,15 @@ +class Qv1ko { + + public static void main(String[] args) { + + for (int i = 1; i <= 10; i++) { + + for (int j = 1; j <= 10; j++) { + System.out.println(i + " x " + j + " = " + i * j); + } + + } + + } + +} From 4eccf632e95fde51031b4c32194e7649e3f3b17c Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 9 Oct 2023 21:41:56 +0200 Subject: [PATCH 0059/2103] =?UTF-8?q?Extensi=C3=B3n=20.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/vandresca.py" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/vandresca" => "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/vandresca.py" (100%) diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/vandresca" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/vandresca.py" similarity index 100% rename from "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/vandresca" rename to "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/vandresca.py" From 7a6bb2972749faab863e61c0f2d4d1e15e23395e Mon Sep 17 00:00:00 2001 From: jcdm60 Date: Mon, 9 Oct 2023 15:57:02 -0400 Subject: [PATCH 0060/2103] Reto #40 - Python --- .../python/jcdm60.py" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/jcdm60.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/jcdm60.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/jcdm60.py" new file mode 100644 index 0000000000..5aca77f8e8 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/jcdm60.py" @@ -0,0 +1,23 @@ +# Reto #40: Tabla de multiplicar +#### Dificultad: Fácil | Publicación: 09/10/23 | Corrección: 16/10/23 + +## Enunciado + +# +# Crea un programa que sea capaz de solicitarte un número y se +# encargue de imprimir su tabla de multiplicar entre el 1 y el 10. +# - Debe visualizarse qué operación se realiza y su resultado. +# Ej: 1 x 1 = 1 +# 1 x 2 = 2 +# 1 x 3 = 3 +# ... +# + +def multiplication_table(number): + for i in range(1, 11): + result = number * i + print(f"{number} x {i} = {result}") + +if __name__ == "__main__": + number = int(input("Ingrese un número: ")) + multiplication_table(number) \ No newline at end of file From 7eb70fe704cafad656a599e70ff329e88eb5d537 Mon Sep 17 00:00:00 2001 From: Cristian Santos Date: Mon, 9 Oct 2023 15:26:37 -0500 Subject: [PATCH 0061/2103] Reto #40 --- .../typescript/csantosr.ts" | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/csantosr.ts" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/csantosr.ts" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/csantosr.ts" new file mode 100644 index 0000000000..3dfc372f92 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/csantosr.ts" @@ -0,0 +1,7 @@ +const tabla = (num: number): string => { + return `\tTabla del ${num} + + \t${Array(10).fill(null).map((_, n) => `${num} x ${n+1} = ${num*(n+1)}`).join('\n\t')}` +} + +console.log(tabla(7)) \ No newline at end of file From ac1c0ec76fc5e2d00ef91c41046617b2c3389766 Mon Sep 17 00:00:00 2001 From: Aridane Mirabal Date: Mon, 9 Oct 2023 21:28:23 +0100 Subject: [PATCH 0062/2103] Reto #40 --- .../python/sri7ach1.py" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/sri7ach1.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/sri7ach1.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/sri7ach1.py" new file mode 100644 index 0000000000..72624d3679 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/sri7ach1.py" @@ -0,0 +1,15 @@ +''' + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... +''' + +def tabla(n): + for i in range(1,11): + print(f"{n} x {i} = {n * i}") + +tabla(9) \ No newline at end of file From 0b4988da19783df855f44326448b4c69c3aa6d81 Mon Sep 17 00:00:00 2001 From: blackriper Date: Mon, 9 Oct 2023 14:37:50 -0600 Subject: [PATCH 0063/2103] Reto#40-go --- .../go/blackriper.go" | 32 +++++++++++++++++++ .../java/blackriper.java" | 28 ++++++++++++++++ .../typescript/blackriper.ts" | 27 ++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/go/blackriper.go" create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/blackriper.java" create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/blackriper.ts" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/go/blackriper.go" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/go/blackriper.go" new file mode 100644 index 0000000000..f192e2c70b --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/go/blackriper.go" @@ -0,0 +1,32 @@ +package main + +import "fmt" + +// definir metodos de trabajos +type Table interface { + ReadNumber() + PrintTable() +} + +// implementar metodos de trabajo +type Multiplication struct { + Number int +} + +func (m *Multiplication) ReadNumber() { + fmt.Println("What multiplication table do you want to view?") + fmt.Scanf("%d", &m.Number) +} + +func (m *Multiplication) PrintTable() { + fmt.Printf("Multiplication table %v \n", m.Number) + for n := 1; n <= 10; n++ { + fmt.Printf("%v x %v = %v \n", m.Number, n, (m.Number * n)) + } +} + +func main() { + var multab Table = &Multiplication{} + multab.ReadNumber() + multab.PrintTable() +} diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/blackriper.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/blackriper.java" new file mode 100644 index 0000000000..8427a1a9d0 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/blackriper.java" @@ -0,0 +1,28 @@ +import java.io.*; +import java.util.Scanner; + +class Multiplicate { + + private int num=0; + Scanner sc = new Scanner(System.in); + + public void read_number(){ + System.out.println("What multiplication table do you want to see?"); + num=sc.nextInt(); + + } + + public void print_table(){ + System.out.println("multiplication table "+num); + for (int n=1;n<=10 ;n++ ){ + System.out.println(num+"x"+n+"="+(num*n)); + } + } + + + public static void main (String[] args) { + Multiplicate mult= new Multiplicate(); + mult.read_number(); + mult.print_table(); + } +} diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/blackriper.ts" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/blackriper.ts" new file mode 100644 index 0000000000..e590296244 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/blackriper.ts" @@ -0,0 +1,27 @@ + +// metodos de trabajo +interface Table { + read_number(num: number): void + print_table(): void +} +// implementar metodos de trabajo +class MultiplicationTables implements Table { + + private nu: number + + read_number(num: number): void { + this.nu = num + } + print_table(): void { + for (let n = 1; n <= 10; n++) { + console.log(`${this.nu} x ${n}= ${this.nu * n}`) + } + } + +} + +const multtab = new MultiplicationTables() +multtab.read_number(5) +multtab.print_table() + + From a3f4f770c00f6bdbd137ad7e836f60d3f684a9d4 Mon Sep 17 00:00:00 2001 From: Aridane Mirabal Date: Mon, 9 Oct 2023 21:59:11 +0100 Subject: [PATCH 0064/2103] =?UTF-8?q?Reto=20#40=20-=20Segunda=20soluci?= =?UTF-8?q?=C3=B3n=20a=C3=B1adida?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/sri7ach1.py" | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/sri7ach1.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/sri7ach1.py" index 72624d3679..eded7bd76a 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/sri7ach1.py" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/sri7ach1.py" @@ -7,9 +7,17 @@ * 1 x 3 = 3 * ... ''' - +# Primera solución, con bucle for. def tabla(n): for i in range(1,11): print(f"{n} x {i} = {n * i}") -tabla(9) \ No newline at end of file +# Segunda solución, con bucle while. +def tabla2(n): + i = 1 + while i < 11: + print(f"{n} x {i} = {n * i}") + i=i+1 + +tabla(9) +tabla2(5) \ No newline at end of file From 6099cb516c3617db984fb73d0ede58b2a99bb5be Mon Sep 17 00:00:00 2001 From: joaquinferrero Date: Mon, 9 Oct 2023 23:30:25 +0200 Subject: [PATCH 0065/2103] Reto #40 - Perl --- .../perl/joaquinferrero.pl" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/perl/joaquinferrero.pl" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/perl/joaquinferrero.pl" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/perl/joaquinferrero.pl" new file mode 100644 index 0000000000..0c4b3d1f5b --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/perl/joaquinferrero.pl" @@ -0,0 +1,22 @@ +#!/usr/bin/env perl +# +# Tabla de multiplicar +# +# Crea un programa que sea capaz de solicitarte un número y se +# encargue de imprimir su tabla de multiplicar entre el 1 y el 10. +# Debe visualizarse qué operación se realiza y su resultado. +# +# Ejemplo: +# 1 x 1 = 1 +# 1 x 2 = 2 +# 1 x 3 = 3 +# ... +# +# Joaquín Ferrero, 20231009 +# +use v5.10; + +print "Tabla de multiplicar del número: "; $numero = 0 + <>; + +say for map { "$numero x $_ = " . $numero * $_ } 1 .. 10; + From 2200d1d4ce18894437cee6bbbb65e6614470bc2a Mon Sep 17 00:00:00 2001 From: joaquinferrero Date: Mon, 9 Oct 2023 23:30:52 +0200 Subject: [PATCH 0066/2103] Reto #40 - Raku --- .../raku/joaquinferrero.raku" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/raku/joaquinferrero.raku" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/raku/joaquinferrero.raku" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/raku/joaquinferrero.raku" new file mode 100644 index 0000000000..90a5354f03 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/raku/joaquinferrero.raku" @@ -0,0 +1,22 @@ +#!/usr/bin/env raku +# +# Tabla de multiplicar +# +# Crea un programa que sea capaz de solicitarte un número y se +# encargue de imprimir su tabla de multiplicar entre el 1 y el 10. +# Debe visualizarse qué operación se realiza y su resultado. +# +# Ejemplo: +# 1 x 1 = 1 +# 1 x 2 = 2 +# 1 x 3 = 3 +# ... +# +# Joaquín Ferrero, 20231009 +# +use v6; + +my $número = prompt "Tabla de multiplicar del número: "; + +(1..10).map({ "$número × $_ = {$número * $_}" })».say; + From a3329c4ac905a96cfdd70430020cb6adb84d9a65 Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Mon, 9 Oct 2023 14:31:12 -0700 Subject: [PATCH 0067/2103] reto #40 - python --- .../python/KevinED11.py" | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/KevinED11.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/KevinED11.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/KevinED11.py" new file mode 100644 index 0000000000..5ab0dc4fde --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/KevinED11.py" @@ -0,0 +1,39 @@ +from typing import Protocol + + +class MultiplicationTableWriterFn(Protocol): + def __call__(self, number: int) -> None: + ... + + +def validate_user_input(func: MultiplicationTableWriterFn) -> MultiplicationTableWriterFn: + def wrapper(number: int) -> None: + if number < 1: + raise ValueError("Number must be greater than 0") + func(number) + + return wrapper + + +def read_input() -> int: + try: + return int(input("Enter a number: ")) + except ValueError: + raise + + +@validate_user_input +def write_multiplication_table_to_console(number: int) -> None: + count = 1 + while count <= 10: + print(f"{number} x {count} = {number * count}") + count += 1 + + +def main(writer_fn: MultiplicationTableWriterFn) -> None: + user_input = read_input() + writer_fn(user_input) + + +if __name__ == "__main__": + main(write_multiplication_table_to_console) From 225f811879445a4ab8f0d4c0b8aab5eb7dfa6b29 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez Lopez Date: Mon, 9 Oct 2023 23:55:08 +0200 Subject: [PATCH 0068/2103] Reto 40: Python. --- .../python/klyone.py" | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/klyone.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/klyone.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/klyone.py" new file mode 100644 index 0000000000..a0c4c48893 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/klyone.py" @@ -0,0 +1,9 @@ +#!/usr/bin/env python3 + +def print_mult_table(n): + for i in range(1, 11): + print("{} x {} = {}\n".format(n,i,n*i)) + +if __name__ == "__main__": + n = int(input("Number:")) + print_mult_table(n) From af117d67190435bbbaafcd44e142402e05eb0913 Mon Sep 17 00:00:00 2001 From: Jamer Rebolledo Date: Mon, 9 Oct 2023 17:01:48 -0500 Subject: [PATCH 0069/2103] =?UTF-8?q?=F0=9F=A4=B9=20soluci=C3=B3n=20reto?= =?UTF-8?q?=20#40,=20typescript?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typescript/jamerrq.ts" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/jamerrq.ts" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/jamerrq.ts" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/jamerrq.ts" new file mode 100644 index 0000000000..f2490e8cf8 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/jamerrq.ts" @@ -0,0 +1,15 @@ +function multiplicacion(i: number, j: number): string { + return `${i} x ${String(j).padStart(2)} = ${i * j}` +} + +function tablaMultiplicar(numero: number): string { + const lines = [] as string[] + for (let i = 1; i <= 10; i++) { + const line = multiplicacion(numero, i) + lines.push(line) + } + return lines.join('\n') +} + +let numero: number = 5 +console.log(tablaMultiplicar(numero)) From f43c07ec7fd2db81f2b462e70c5556c5e65262ba Mon Sep 17 00:00:00 2001 From: Jamer Rebolledo Date: Mon, 9 Oct 2023 17:04:49 -0500 Subject: [PATCH 0070/2103] =?UTF-8?q?Revert=20"=F0=9F=A4=B9=20soluci=C3=B3?= =?UTF-8?q?n=20reto=20#40,=20typescript"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit af117d67190435bbbaafcd44e142402e05eb0913. --- .../typescript/jamerrq.ts" | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/jamerrq.ts" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/jamerrq.ts" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/jamerrq.ts" deleted file mode 100644 index f2490e8cf8..0000000000 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/jamerrq.ts" +++ /dev/null @@ -1,15 +0,0 @@ -function multiplicacion(i: number, j: number): string { - return `${i} x ${String(j).padStart(2)} = ${i * j}` -} - -function tablaMultiplicar(numero: number): string { - const lines = [] as string[] - for (let i = 1; i <= 10; i++) { - const line = multiplicacion(numero, i) - lines.push(line) - } - return lines.join('\n') -} - -let numero: number = 5 -console.log(tablaMultiplicar(numero)) From 714b37031d27f09792e58ee74735ccc58684f49c Mon Sep 17 00:00:00 2001 From: Franz Fernandez Cobarrubia Date: Tue, 10 Oct 2023 00:05:28 +0200 Subject: [PATCH 0071/2103] =?UTF-8?q?Soluci=C3=B3n=20al=20reto=20mouredev#?= =?UTF-8?q?40=20-=20TABLA=20DE=20MULTIPLICA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../c/FranzxFernandez.c" | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c/FranzxFernandez.c" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c/FranzxFernandez.c" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c/FranzxFernandez.c" new file mode 100644 index 0000000000..da80d7b462 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c/FranzxFernandez.c" @@ -0,0 +1,28 @@ +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +#include + +void solve() +{ + int num; + (void)scanf("%d", &num); + + for (int i = 1; i < 11; i++) + { + printf("%d x %d = %d\n", num, i, num * i); + } +} + +int main() +{ + solve(); + return 0; +} From 2fbd8e631fa437d00197e39305602d5ef442be50 Mon Sep 17 00:00:00 2001 From: Jamer Rebolledo Date: Mon, 9 Oct 2023 17:06:10 -0500 Subject: [PATCH 0072/2103] =?UTF-8?q?=F0=9F=A4=B9=20soluci=C3=B3n=20reto?= =?UTF-8?q?=2040,=20typescript?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typescript/jamerrq.ts" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/jamerrq.ts" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/jamerrq.ts" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/jamerrq.ts" new file mode 100644 index 0000000000..c67610a4ed --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/jamerrq.ts" @@ -0,0 +1,27 @@ +function multiplicacion(i: number, j: number): string { + return `${i} x ${String(j).padStart(2)} = ${i * j}` +} + +function tablaMultiplicar(numero: number): string { + const lines = [] as string[] + for (let i = 1; i <= 10; i++) { + const line = multiplicacion(numero, i) + lines.push(line) + } + return lines.join('\n') +} + +let numero: number = 5 +console.log(tablaMultiplicar(numero)) +/** +5 x 1 = 5 +5 x 2 = 10 +5 x 3 = 15 +5 x 4 = 20 +5 x 5 = 25 +5 x 6 = 30 +5 x 7 = 35 +5 x 8 = 40 +5 x 9 = 45 +5 x 10 = 50 + */ From a2546f6796b76b50468100c17f093c31597f29db Mon Sep 17 00:00:00 2001 From: deathiwng Date: Tue, 10 Oct 2023 00:07:36 +0200 Subject: [PATCH 0073/2103] Reto #40 - C# --- .../c#/deathwing696.cs" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/deathwing696.cs" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/deathwing696.cs" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/deathwing696.cs" new file mode 100644 index 0000000000..778178aa08 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/deathwing696.cs" @@ -0,0 +1,36 @@ +/* + * Crea un programa que sea capaz de solicitarte un nmero y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qu operacin se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +using System; + +namespace deathwing696 +{ + public class Deathwing696 + { + static void Main(string[] args) + { + int numero; + + Console.Write("Introduce un nmero para ver su tabla de multiplicar:"); + + if (Int32.TryParse(Console.ReadLine(), out numero)) + { + for (int i = 1; i <= 10; i++) + Console.WriteLine($"{numero} x {i} = {i * numero}"); + } + else + { + Console.WriteLine("Lo que has introducido no es un nmero...fin del programa"); + } + + Console.ReadKey(); + } + } +} \ No newline at end of file From ea80f3da77a4f14787f975e8ead63410bc7d81b0 Mon Sep 17 00:00:00 2001 From: jcdm60 Date: Mon, 9 Oct 2023 18:15:24 -0400 Subject: [PATCH 0074/2103] Reto #40 - Python --- .../python/jcdm60.py" | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/jcdm60.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/jcdm60.py" index 5aca77f8e8..b2a3b31af6 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/jcdm60.py" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/jcdm60.py" @@ -14,9 +14,7 @@ # def multiplication_table(number): - for i in range(1, 11): - result = number * i - print(f"{number} x {i} = {result}") + [print(f"{number} x {i} = {number * i}") for i in range(1, 11)] if __name__ == "__main__": number = int(input("Ingrese un número: ")) From 6467397a37453a16d5e21f3b47b2ae22900d9159 Mon Sep 17 00:00:00 2001 From: Jesusway69 Mac mini macOS Date: Tue, 10 Oct 2023 00:26:17 +0200 Subject: [PATCH 0075/2103] Reto#40 --- .../java/JesusWay69.java" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/JesusWay69.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/JesusWay69.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/JesusWay69.java" new file mode 100644 index 0000000000..a1c5fc6c71 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/JesusWay69.java" @@ -0,0 +1,21 @@ +package reto_40; +import java.util.Scanner; +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ +public class JesusWay69 { + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + System.out.print("Ingrese el número de la tabla de multiplicar: "); + int n = sc.nextInt(); + for (int i = 1; i <= 10; i++) + System.out.println(n + " X " + i + " = " + n * i); + } +} From 314fcbd93b22cccfcbe36e65d43a5b457bde2151 Mon Sep 17 00:00:00 2001 From: Cesar Date: Mon, 9 Oct 2023 16:39:39 -0600 Subject: [PATCH 0076/2103] Muy buen reto aprendi bastante sobre como se comporta una funcion recursiva --- .../python/cesaracosta93.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/cesaracosta93.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/cesaracosta93.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/cesaracosta93.py new file mode 100644 index 0000000000..4a3cdc4d61 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/cesaracosta93.py @@ -0,0 +1,31 @@ +def find_sum(lista, target): + combinaciones=[] + encontrado=[] + listaCopy=[] + suma=0 + lista.sort() + for i, v in enumerate(lista): + listaCopy=lista.copy() + listaCopy.pop(i)#A la copia de la lisa le quita el elemento que esta verificando + suma=sum(lista)#Suma toda la lista + + combinaciones.append(lista) if suma==target else None #si la suma de la lista es igual al target la agrega a las combinaciones + + encontrado=find_sum(listaCopy,target)#Al volver a llamar la funcion sumara la lista completa sin el elemento que esta verificando + + #Aqui se detiene la funcion hasta que termine la recursion + + if encontrado != []:#si el resultado no esta vacio + for elemento in encontrado:#Por cada elemento encontrado y + if elemento not in combinaciones:#si no esta en la combinaciones + combinaciones.append(elemento)#Se agrega a combinaciones + + return combinaciones + +lista=[1, 5, 3, 2] +lista2=[1,2,2,1,3,4,-1] +lista3=[1,7] + +print(find_sum(lista, 6)) +print(find_sum(lista2, 4)) +print(find_sum(lista3, -1)) \ No newline at end of file From 26b85d0fbc861e14392ec45bbd7d9102c169adec Mon Sep 17 00:00:00 2001 From: Cesar Date: Mon, 9 Oct 2023 16:47:31 -0600 Subject: [PATCH 0077/2103] Muy buen reto me ayudo a comprender mejor el comportamiento de las funciones recursivas --- .../python/cesaracosta93.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/cesaracosta93.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/cesaracosta93.py index 4a3cdc4d61..069939ba85 100644 --- a/Retos/Reto #38 - LAS SUMAS [Media]/python/cesaracosta93.py +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/cesaracosta93.py @@ -5,16 +5,13 @@ def find_sum(lista, target): suma=0 lista.sort() for i, v in enumerate(lista): - listaCopy=lista.copy() - listaCopy.pop(i)#A la copia de la lisa le quita el elemento que esta verificando suma=sum(lista)#Suma toda la lista - - combinaciones.append(lista) if suma==target else None #si la suma de la lista es igual al target la agrega a las combinaciones - - encontrado=find_sum(listaCopy,target)#Al volver a llamar la funcion sumara la lista completa sin el elemento que esta verificando - - #Aqui se detiene la funcion hasta que termine la recursion - + combinaciones.append(lista) if suma==target else None #si la suma de la lista es igual al target la agrega a las combinaciones +#---------------------------------------------------------------------------------------------------------------------------------- + listaCopy=lista.copy() + listaCopy.pop(i)#A la copia de la lista le quitamos el elemento para ir reduciendo la lista y seguir con otra combinacion + encontrado=find_sum(listaCopy,target)#Al volver a llamar la funcion sumara la lista estara reducida para comprobar otra combinacion +#Aqui se detiene la funcion hasta que termine la recursion-------------------------------------------------------------------------------------- if encontrado != []:#si el resultado no esta vacio for elemento in encontrado:#Por cada elemento encontrado y if elemento not in combinaciones:#si no esta en la combinaciones From e0485a0a11637b653cd439b4dae59ad9202484da Mon Sep 17 00:00:00 2001 From: Jesusway69 Mac mini macOS Date: Tue, 10 Oct 2023 00:57:34 +0200 Subject: [PATCH 0078/2103] Reto#40 - Python --- .../python/JesusWay69.py" | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/JesusWay69.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/JesusWay69.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/JesusWay69.py" new file mode 100644 index 0000000000..90c4a2ff87 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/JesusWay69.py" @@ -0,0 +1,14 @@ +import os +os.system('clear') +""" + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... +""" +n = int(input("Ingrese el número de la tabla de multiplicar ")) +for i in range(1,10+1): + print(n, " X ", i, " = ", i*n) \ No newline at end of file From 245442bad6c3008b4ad98eb670303964c77b4392 Mon Sep 17 00:00:00 2001 From: Jamer Rebolledo Date: Mon, 9 Oct 2023 18:02:47 -0500 Subject: [PATCH 0079/2103] =?UTF-8?q?=F0=9F=90=BA=20soluci=C3=B3n=20reto?= =?UTF-8?q?=2040,=20haskell?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../haskell/jamerrq.hs" | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/haskell/jamerrq.hs" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/haskell/jamerrq.hs" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/haskell/jamerrq.hs" new file mode 100644 index 0000000000..680c52ec08 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/haskell/jamerrq.hs" @@ -0,0 +1,25 @@ +import Text.Printf + +-- Función que imprime la tabla de multiplicar de un número +-- Recibe un número entero +-- Devuelve una cadena con la tabla de multiplicar +-- Ejemplo (para n = 5): +-- 5 x 1 = 5 +-- 5 x 2 = 10 +-- 5 x 3 = 15 +-- ... +-- 5 x 10 = 50 +tablaMultiplicar :: Int -> String +tablaMultiplicar n = unlines [printf "%d x %d = %d" n i (n * i) | i <- [1..10]] + +-- Función principal +main = do + -- Pedimos el número + putStrLn "Introduce un número:" + numero <- getLine + -- Imprimimos la tabla de multiplicar + putStrLn $ tablaMultiplicar $ read numero + +-- Cómo compilar y ejecutar: +-- $ ghc jamerrq.hs -o reto40hs +-- $ ./reto40hs From f722b6ab23b0726a91d1efcd74306ae686247d8d Mon Sep 17 00:00:00 2001 From: Ruperto Date: Tue, 10 Oct 2023 01:41:19 -0300 Subject: [PATCH 0080/2103] Reto #[40] [RUBY] --- .../Ruby/djbetho.rb" | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/Ruby/djbetho.rb" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/Ruby/djbetho.rb" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/Ruby/djbetho.rb" new file mode 100644 index 0000000000..340fabe8b8 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/Ruby/djbetho.rb" @@ -0,0 +1,8 @@ + puts "Ingrese valor" + n = gets.chomp.to_i + + puts "************" + 11.times do |j| + puts "#{n} * #{j} = #{(n) * j}" + end + \ No newline at end of file From 8d1bbda3b62ea983b774ef6075d90d5426d7d353 Mon Sep 17 00:00:00 2001 From: Leandro Espino Date: Mon, 9 Oct 2023 23:23:33 -0600 Subject: [PATCH 0081/2103] Reto #37 - java --- .../java/EspinoLeandroo.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Retos/Reto #37 - COLORES HEX Y RGB [Media]/java/EspinoLeandroo.java diff --git a/Retos/Reto #37 - COLORES HEX Y RGB [Media]/java/EspinoLeandroo.java b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/java/EspinoLeandroo.java new file mode 100644 index 0000000000..66d94fc5b6 --- /dev/null +++ b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/java/EspinoLeandroo.java @@ -0,0 +1,26 @@ +public class EspinoLeandroo { + + public static String rgbToHex(int r, int g, int b) { + return String.format("#%02X%02X%02X", r, g, b); + } + + public static String hexToRgb(String hex) { + hex = hex.replace("#", ""); + int bigint = Integer.parseInt(hex, 16); + int r = (bigint >> 16) & 255; + int g = (bigint >> 8) & 255; + int b = bigint & 255; + return String.format("r: %d, g: %d, b: %d", r, g, b); + } + + public static void main(String[] args) { + // rgbToHex: + int r = 250, g = 186, b = 218; + String hexColor = rgbToHex(r, g, b); + System.out.println(hexColor); + // hexToRgb: + hexColor = "#fabada"; + String rgbColor = hexToRgb(hexColor); + System.out.println(rgbColor); + } +} From 921b8f41c74307f188b40562b09f77e14a9ad499 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Tue, 10 Oct 2023 07:32:20 +0200 Subject: [PATCH 0082/2103] Reto #40 - Kotlin --- .../kotlin/pisanowp.kt" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/pisanowp.kt" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/pisanowp.kt" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/pisanowp.kt" new file mode 100644 index 0000000000..ad8e62bc7e --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/pisanowp.kt" @@ -0,0 +1,49 @@ +fun main() { + + /* + * Reto #40 10/10/2023 TABLA DE MULTIPICAR + * + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + + val numero = pideNumeroPositivo("Tabla de Multipicar") + pintarTablaMultiplicar(numero) + +} + +fun pintarTablaMultiplicar(numero: Int) { + (1..10).forEach(){ + println("$numero x $it = ${numero * it}") + } +} + +fun pideNumeroPositivo( etiqueta : String): Int { + var numero: Int? = null + var valido = false + + while (!valido) { + print("Introduce $etiqueta >") + val input = readLine() + + try { + numero = input?.toInt() + if (numero != null) { + if (numero > 0){ + valido = true + } else { + println("Entrada inválida. Debes ingresar un número entero positivo.") + } + } + + } catch (e: NumberFormatException) { + println("Entrada inválida. Debes ingresar un número entero positivo.") + } + } + return numero!! +} \ No newline at end of file From a3699903435a22778e58c764c9b8917915802978 Mon Sep 17 00:00:00 2001 From: miguel Date: Tue, 10 Oct 2023 01:39:40 -0500 Subject: [PATCH 0083/2103] - --- .../c++/riverosmejia.cpp" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c++/riverosmejia.cpp" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c++/riverosmejia.cpp" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c++/riverosmejia.cpp" new file mode 100644 index 0000000000..fba421d2e1 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c++/riverosmejia.cpp" @@ -0,0 +1,36 @@ + +//se que se pudo hacer en un bucle normal pero me dio por repasar las funciones recursivas :,D + +#include + +using namespace std; + +void tabla(int num, int sob=1); + +int main(){ + + cout<<"dame un numero:"; + + int num; + + cin>>num; + + tabla(num,1); + + return 0; + +} + +void tabla(int num, int sob){ + + if(sob<11){ + + int operacion=num*sob;+1; + + cout< Date: Tue, 10 Oct 2023 09:29:16 +0200 Subject: [PATCH 0084/2103] Create vandresca --- .../python/vandresca" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vandresca" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vandresca" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vandresca" new file mode 100644 index 0000000000..37baa33e9b --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vandresca" @@ -0,0 +1,17 @@ +""" +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + """ + +def printTable(number:int)->int: + for x in range(1,11): + print(f"{number} x {x} = {number*x}") + +printTable(7) From 66d7397fc778c909b3b6082cd954e5583a86d4b6 Mon Sep 17 00:00:00 2001 From: Othamae Date: Tue, 10 Oct 2023 10:34:21 +0200 Subject: [PATCH 0085/2103] Reto #40 - javascript --- .../javascript/othamae.js" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/othamae.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/othamae.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/othamae.js" new file mode 100644 index 0000000000..0aa1a68820 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/othamae.js" @@ -0,0 +1,34 @@ +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + + +const readline = require('readline') + +function multiplicationTable(){ + console.log('Please enter a number:') + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }) + + rl.on('line', (input) => { + if(isNaN(input)){ + console.log('Please enter a valid number') + } else { + for (let i = 1; i <= 10; i++) { + console.log(`${input} x ${i} = ${input * i}`) + } + rl.close() + } + }) +} + +multiplicationTable() \ No newline at end of file From c0eb22220602863e4263a5296e8c6d8c52d3fa52 Mon Sep 17 00:00:00 2001 From: blfuentes Date: Tue, 10 Oct 2023 10:56:43 +0200 Subject: [PATCH 0086/2103] Added F# solution --- .../f#/blfuentes.fsx" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/f#/blfuentes.fsx" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/f#/blfuentes.fsx" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/f#/blfuentes.fsx" new file mode 100644 index 0000000000..e1c998f32a --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/f#/blfuentes.fsx" @@ -0,0 +1,21 @@ +// Crea un programa que sea capaz de solicitarte un número y se +// encargue de imprimir su tabla de multiplicar entre el 1 y el 10. +// - Debe visualizarse qué operación se realiza y su resultado. +// Ej: 1 x 1 = 1 +// 1 x 2 = 2 +// 1 x 3 = 3 +// ... + +// Solución +let rec ReadNumber() = + printf "Introduce un número: " + let userInput = System.Console.ReadLine() + match System.Int32.TryParse(userInput) with + | (true, value) -> value + | _ -> ReadNumber() + +let printTable(number: int) = + [1..10] |> List.iter(fun v -> printfn "%d x %d = %d" number v (number * v)) + +let number = ReadNumber() +printTable(number) \ No newline at end of file From 1c00e93f20bd14925b9b994a95a94d7bfcd5a15c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Andr=C3=A9s?= <102297884+vandresca@users.noreply.github.com> Date: Tue, 10 Oct 2023 11:16:07 +0200 Subject: [PATCH 0087/2103] Create vandresca.java --- .../java/vandresca.java" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/vandresca.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/vandresca.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/vandresca.java" new file mode 100644 index 0000000000..d1365898c6 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/vandresca.java" @@ -0,0 +1,23 @@ +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +import java.util.Scanner; + +public class vandresca{ + public static void main(String[] args) { + Scanner scanner =new Scanner(System.in); + System.out.println("¿Qué tabla de multiplicar quieres?. Escribe un número: "); + int number = scanner.nextInt(); + scanner.close(); + for(int i=1; i<=10; i++){ + System.out.printf("%d x %d = %d \n", number, i, number*i); + } + } + } From 086d45f820e3a1521f61113832290ddeb0087c5f Mon Sep 17 00:00:00 2001 From: Luis Herrera Collado Date: Tue, 10 Oct 2023 11:25:23 +0200 Subject: [PATCH 0088/2103] Create HerreraColladoLuis.py --- .../python/HerreraColladoLuis.py" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/HerreraColladoLuis.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/HerreraColladoLuis.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/HerreraColladoLuis.py" new file mode 100644 index 0000000000..d59c093011 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/HerreraColladoLuis.py" @@ -0,0 +1,30 @@ +# +#Crea un programa que sea capaz de solicitarte un número y se +#encargue de imprimir su tabla de multiplicar entre el 1 y el 10. +#- Debe visualizarse qué operación se realiza y su resultado. +# Ej: 1 x 1 = 1 +# 1 x 2 = 2 +# 1 x 3 = 3 +# ... +# + +def show_mult_table(number: int): + + print("") + + for index in range(1,11): + print(str(number) + " x " + str(index) + " = " + str(number * index)) + +def request_number() -> int: + + while True: + try: + number = int(input("Enter an integer to know its multiplication table: ")) + break + except ValueError: + print("Only integer numbers are allowed!!") + + return number + +n: int = request_number() +show_mult_table(n) From c3ddcc0c09010415320d1d7482695ac0ef0e1c47 Mon Sep 17 00:00:00 2001 From: DHiebl <108873454+sirnas1983@users.noreply.github.com> Date: Tue, 10 Oct 2023 07:15:47 -0300 Subject: [PATCH 0089/2103] Reto #40 - Python --- .../python/sirnas1983.py" | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/sirnas1983.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/sirnas1983.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/sirnas1983.py" new file mode 100644 index 0000000000..a77913d71c --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/sirnas1983.py" @@ -0,0 +1,3 @@ +def tabla_multiplicar(n): + for i in range(1,11): + print(n,"x",i,"=",n*i) From a9e8c58a7b1aaaac9ebabecb77fbf032c81d137a Mon Sep 17 00:00:00 2001 From: DHiebl <108873454+sirnas1983@users.noreply.github.com> Date: Tue, 10 Oct 2023 09:23:31 -0300 Subject: [PATCH 0090/2103] Reto #8 - Python --- .../python/sirnas1983.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/sirnas1983.py diff --git a/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/sirnas1983.py b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/sirnas1983.py new file mode 100644 index 0000000000..490e97bdeb --- /dev/null +++ b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/sirnas1983.py @@ -0,0 +1,19 @@ +import time + +def random(): + now = str(time.time()) + ms = now[-5:] + rand = int(float(ms)//999) + return rand + +#Pruebas +resp = [] +for i in range(1000): + time.sleep(0.00001) #Debe haber un minimo desfasaje de tiempo + resp.append(random()) + + +print("Lista de numeros aleatorios:\n",resp) +print("Media aritmetica:",sum(resp)/len(resp)) +print("Maximo:",max(resp)) +print("Minimo:",min(resp)) From 8aeaa65e9647711e7c5c960e448d504e72f36d14 Mon Sep 17 00:00:00 2001 From: Hector Date: Tue, 10 Oct 2023 15:09:07 +0200 Subject: [PATCH 0091/2103] Reto 40 - Python --- .../python/HectorIglesias.py" | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/HectorIglesias.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/HectorIglesias.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/HectorIglesias.py" new file mode 100644 index 0000000000..e24854408d --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/HectorIglesias.py" @@ -0,0 +1,19 @@ +""" +* Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + """ + +def tabla_multiplicar(numero): + if(type(numero) == int or type(numero) == float): + for index in range(1, 11): + multiplicacion = index*numero + print(f'{numero} X {index} = {multiplicacion}') + +tabla_multiplicar(10) +tabla_multiplicar(10.0) +tabla_multiplicar(-10) \ No newline at end of file From f031b0af73e918fe40a45ce8f9a79fec7dfaf9a7 Mon Sep 17 00:00:00 2001 From: Victor Terroso <93841909+Vterroso@users.noreply.github.com> Date: Tue, 10 Oct 2023 16:36:39 +0200 Subject: [PATCH 0092/2103] Create vterroso.java --- .../java/vterroso.java" | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/vterroso.java" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/vterroso.java" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/vterroso.java" new file mode 100644 index 0000000000..cf701517cf --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/vterroso.java" @@ -0,0 +1,26 @@ +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ +public class Main { + public static void main(String[] args) { + for(int i = 0; i < 100; i++) { + if(i % 3 == 0 && i % 5 == 0){ + System.out.println("FizzBuzz"); + } + else if(i % 3 == 0){ + System.out.println("Fizz"); + } + else if(i % 5 == 0){ + System.out.println("Buzz"); + } + else{ + System.out.println(i); + } + } + } +} From 4ce7a4e7b8c576ac5eda4aa8daa2dd6571f99871 Mon Sep 17 00:00:00 2001 From: ivancastroroel Date: Tue, 10 Oct 2023 19:08:35 +0200 Subject: [PATCH 0093/2103] Reto #40 Python --- .../python/ivaaancastro.py" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ivaaancastro.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ivaaancastro.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ivaaancastro.py" new file mode 100644 index 0000000000..dbd2a4427f --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ivaaancastro.py" @@ -0,0 +1,10 @@ +def print_tabla(): + num_solicitado = input("Dame un número: ") + num_solicitado = int(num_solicitado) + print('\nTabla del número ' + str(num_solicitado) + '\n') + for i in range(0,10): + resultado = num_solicitado * i + print(str(num_solicitado) + " x " + str(i) + " = " + str(resultado)) + + +print_tabla() \ No newline at end of file From 82bc57ce382f53c605f6179c5a467f92b996115a Mon Sep 17 00:00:00 2001 From: Miguel-bc Date: Tue, 10 Oct 2023 19:49:35 +0200 Subject: [PATCH 0094/2103] mi codigo en python --- .../python/Miguel-bc.py" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Miguel-bc.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Miguel-bc.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Miguel-bc.py" new file mode 100644 index 0000000000..6c10b970f5 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Miguel-bc.py" @@ -0,0 +1,30 @@ +# Reto #40: Tabla de multiplicar +#### Dificultad: Fácil | Publicación: 09/10/23 | Corrección: 16/10/23 + +## Enunciado + +''' +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ +''' + +numero = 0 + +while True: + numero = int(input("Introduce un número del 1 al 10: ")) + if numero < 1 or numero > 10: + print(f"El numero ", numero, " no esta comprendido entre 1 y 10") + else: + break + +for i in range(10): + resultado = numero * (i+1) + print (numero," x ", i+1 ,"=", resultado) + From e7b2b07a84ab8b3a74eb27fa2104a21c39853ebf Mon Sep 17 00:00:00 2001 From: Miguipasto Date: Tue, 10 Oct 2023 20:09:37 +0200 Subject: [PATCH 0095/2103] Reto #40 - Python --- .../python/miguipasto.py" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/miguipasto.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/miguipasto.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/miguipasto.py" new file mode 100644 index 0000000000..02217d7543 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/miguipasto.py" @@ -0,0 +1,21 @@ +""" /* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ """ + +def tabla(num : int): + print("La tabla de multiplicar del número",num, "es:") + for index in range(1,11): + resultado = num * index + print(num,"x",index,"=",resultado) + +try: + numero = int(input("Introduce un número: ")) + tabla(numero) +except ValueError: + print("Por favor, ingresa un número entero válido.") \ No newline at end of file From cff374a80203b999aa9990eed317f55c6726ddb2 Mon Sep 17 00:00:00 2001 From: Hans Escobar <60953384+hdescobarh@users.noreply.github.com> Date: Tue, 10 Oct 2023 13:46:21 -0500 Subject: [PATCH 0096/2103] Reto #40 --- .../rust/hdescobarh.rs" | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/rust/hdescobarh.rs" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/rust/hdescobarh.rs" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/rust/hdescobarh.rs" new file mode 100644 index 0000000000..0042a1dd22 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/rust/hdescobarh.rs" @@ -0,0 +1,40 @@ +// author: Hans D. Escobar H. (hdescobarh) + +const PROMPT_MSG: &str = "Ingrese el número del que desea ver la tabla de multiplicar:"; +const PARSE_ERR_MSG: &str = "El valor ingresado no es valido; Debe ser número entero no negativo."; +const READ_ERR_MSG: &str = "Error inesperado al leer la linea."; +type Number = u128; + +fn main() { + let mut input_buffer = String::new(); + loop { + println!("{}", PROMPT_MSG); + std::io::stdin() + .read_line(&mut input_buffer) + .expect(READ_ERR_MSG); + match input_buffer.trim().parse::() { + Ok(number) => { + println!("{}", MultiplicationTable::format_from_multiplicand(&number)); + std::process::exit(0); + } + Err(_) => { + println!("{}", PARSE_ERR_MSG); + input_buffer.clear(); + continue; + } + } + } +} + +pub struct MultiplicationTable {} + +impl MultiplicationTable { + pub fn format_from_multiplicand(multiplicand: &Number) -> String { + let mut text: String = String::new(); + for multiplier in 1..11 { + let product = multiplicand * multiplier; + text.push_str(&format!("{multiplicand} x {multiplier} = {product}\n")); + } + text + } +} From 6eb5b598d259c7990577200cf05f8599d2eb4b28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vanesa=20P=C3=A9rez?= Date: Tue, 10 Oct 2023 21:17:58 +0200 Subject: [PATCH 0097/2103] Reto #40 - Python --- .../python/vanesaprz.py" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vanesaprz.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vanesaprz.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vanesaprz.py" new file mode 100644 index 0000000000..fd490f3b3e --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vanesaprz.py" @@ -0,0 +1,23 @@ +""" + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... +""" + +#Solicito un número al usuario y me aseguro que el input recibido es un int. +while True: + try: + num = int(input ("Indica número para realizar tabla de multiplicar: ")) #guarda la variable del usuario + break + except ValueError: + print("Input no válido, indica un número entero: ") + +#Calcula el resultado y le da el formato deseado +for i in range (1,11): + resultado = i * num + print(f"{num} x {i} = {resultado}") + From 8f09f8f2bf363aab2ac2e62b44db5d042e0cce48 Mon Sep 17 00:00:00 2001 From: mstrnilsson Date: Tue, 10 Oct 2023 21:20:46 +0200 Subject: [PATCH 0098/2103] Reto #40 - Python --- .../python/MstrNilsson_40.py" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson_40.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson_40.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson_40.py" new file mode 100644 index 0000000000..e379930b1e --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson_40.py" @@ -0,0 +1,17 @@ +""" + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + """ + +def MultiplicationTable(n): + for i in range(1, 11): + print(f"{n} x {i} = {n*i}") + +if __name__ == "__main__": + n = int(input("¿De qué número quieres la tabla de multiplicar?: ")) + MultiplicationTable(n) \ No newline at end of file From c1c7ccf60045642b502344f2fd23f45fb656ecb4 Mon Sep 17 00:00:00 2001 From: Fabian Triana Date: Tue, 10 Oct 2023 14:23:45 -0500 Subject: [PATCH 0099/2103] Reto #40 - Python --- .../python/wilmertri.py" | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/wilmertri.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/wilmertri.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/wilmertri.py" new file mode 100644 index 0000000000..183af0637e --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/wilmertri.py" @@ -0,0 +1,6 @@ +def multiplication_table(n: int) -> None: + for i in range(1, 11): + print(f"{n} x {i} = {i*n}") + +number = int(input("Ingrese un número para imprimir su tabla de multiplicar: ")) +multiplication_table(number) \ No newline at end of file From c305ec1c7e0fabfaadd48259b8370238733d29b1 Mon Sep 17 00:00:00 2001 From: Johan Restrepo <62318029+JohanRestrepo19@users.noreply.github.com> Date: Tue, 10 Oct 2023 14:54:18 -0500 Subject: [PATCH 0100/2103] Reto #40 - Typescript. --- .../typescript/johanrestrepo19.ts" | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/johanrestrepo19.ts" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/johanrestrepo19.ts" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/johanrestrepo19.ts" new file mode 100644 index 0000000000..e4bffcba75 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/johanrestrepo19.ts" @@ -0,0 +1,12 @@ +import { stdin as input, stdout as output } from "node:process"; +import { createInterface } from "node:readline/promises"; +const rl = createInterface({ input, output }); + +const printMultiplicationTable = async (): Promise => { + const num = Number(await rl.question("Ingresa un número: ")); + for (let i = 1; i <= 10; i++) { + console.log(`${num} x ${i} = ${num * i}`); + } +}; + +printMultiplicationTable(); From 61e508707e0eccba2d72ffa6512265e2809af366 Mon Sep 17 00:00:00 2001 From: nuriatv Date: Tue, 10 Oct 2023 21:01:11 +0100 Subject: [PATCH 0101/2103] Reto #40 - java --- .../java/Nutegreen.java" | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/Nutegreen.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/Nutegreen.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/Nutegreen.java" new file mode 100644 index 0000000000..3dcd0e0556 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/Nutegreen.java" @@ -0,0 +1,32 @@ + +/* RETO 40: TABLA DE MULTIPLICAR + * Crea un programa que sea capaz de solicitarte un número y se encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +public class Nutegreen { + + private static void tablaMultiplicar(int numero) { + System.out.println("Tabla de multiplicar del número " + numero); + for (int i = 1; i < 11; i++) { + System.out.println(numero + " x " + i + " = " + (numero * i)); + } + } + + public static void main(String[] args) { + if (args == null || args.length != 1) { + System.out.println("Error: Debe indicar el número de la tabla de multiplicar"); + return; + } + try { + int numero = Integer.parseInt(args[0]); + tablaMultiplicar(numero); + } catch (NumberFormatException e) { + System.out.println("Error: El parámetro indicado no es válido. Debe ser un número"); + } + } +} \ No newline at end of file From 5393647fecc3a4b1c67f41c36820ac879a8de472 Mon Sep 17 00:00:00 2001 From: Fabian Triana Date: Tue, 10 Oct 2023 15:12:03 -0500 Subject: [PATCH 0102/2103] Reto #40 - PHP --- .../php/wilmertri.php" | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/php/wilmertri.php" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/php/wilmertri.php" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/php/wilmertri.php" new file mode 100644 index 0000000000..b0b0610b33 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/php/wilmertri.php" @@ -0,0 +1,18 @@ + Date: Tue, 10 Oct 2023 22:30:48 +0200 Subject: [PATCH 0103/2103] Add files via upload --- .../java/pauortega.java" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortega.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortega.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortega.java" new file mode 100644 index 0000000000..1168d78ce3 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortega.java" @@ -0,0 +1,15 @@ +import java.util.Scanner; +public class Program +{ + public static void main(String[] args) { + Scanner numero = new Scanner(System.in); + int num = numero.nextInt(); + int total = 0; + String text= ""; + for(int i =1; i<=10; i++){ + total = num * i; + text = num+" x "+i + " = "+total; + System.out.println(text); + } + } +} \ No newline at end of file From 1ba314253840d3fa6944ddd793aaadbe7cbcd028 Mon Sep 17 00:00:00 2001 From: SantiALS Date: Tue, 10 Oct 2023 17:38:58 -0300 Subject: [PATCH 0104/2103] Reto #40 Python --- .../python/SantiALS.py" | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/SantiALS.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/SantiALS.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/SantiALS.py" new file mode 100644 index 0000000000..5bf15e92c9 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/SantiALS.py" @@ -0,0 +1,25 @@ +from rich import print + +def tablas(number: int) ->str: + + control = True + + while control == True: + if 1> number or number > 10: + print('Valor fuera de rango.') + number = int(input('Ingrese un valor entre 1 y 10:')) + else: + control = False + + print(f'[bold green]*** RESULTADOS TABLA DEL "{number}" ***[bold]\n') + + for n in range(10): + + result = (n + 1) * number + print(f'[skyblue]{number} x {n + 1} = {result}') + + print('[bold yellow]--o--o--o--o--') + +if __name__ == '__main__': + + tablas(int(input(f'Ingrese una tabla del 1 al 10: '))) From 8eea92c9bc7b44adcf74a9e95461cd16d08c41f5 Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Tue, 10 Oct 2023 15:58:27 -0500 Subject: [PATCH 0105/2103] Reto #14 - Python --- .../python/sublian.py" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/sublian.py" diff --git "a/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/sublian.py" "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/sublian.py" new file mode 100644 index 0000000000..820c9adf57 --- /dev/null +++ "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/sublian.py" @@ -0,0 +1,36 @@ +### Reto #14: OCTAL Y HEXADECIMAL ### +# MEDIA | Publicación: 03/04/23 | Resolución: 10/10/23 + +""" + * Crea una función que reciba un número decimal y lo trasforme a Octal + * y Hexadecimal. + * - No está permitido usar funciones propias del lenguaje de programación que + * realicen esas operaciones directamente. +""" + +def octal_and_hex(entero: int): + + #octal + current_int = entero + octal = "" + while current_int >= 0: + octal = str(current_int % 8) + octal + current_int //=8 + + octal=0 if octal == "" else octal + print(f"{entero} en Octal es {octal}") + + #hexadecimal + current_int = entero + hex_values = "0123456789ABCDEF" + hex = "" + while current_int >= 0: + hex = hex_values[current_int % 16] + hex + current_int //=16 + + hex=0 if hex == "" else hex + print(f"{entero} en Hexagesimal es {hex}") + +octal_and_hex(15) +octal_and_hex(30) +octal_and_hex(50) \ No newline at end of file From 428d00868f34a50bbaa78e002a960db51cd5f4b6 Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Tue, 10 Oct 2023 16:04:14 -0500 Subject: [PATCH 0106/2103] Reto #14 - Python- correccion --- .../python/sublian.py" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/sublian.py" "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/sublian.py" index 820c9adf57..c80b8a2755 100644 --- "a/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/sublian.py" +++ "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/sublian.py" @@ -13,7 +13,7 @@ def octal_and_hex(entero: int): #octal current_int = entero octal = "" - while current_int >= 0: + while current_int > 0: octal = str(current_int % 8) + octal current_int //=8 @@ -24,7 +24,7 @@ def octal_and_hex(entero: int): current_int = entero hex_values = "0123456789ABCDEF" hex = "" - while current_int >= 0: + while current_int > 0: hex = hex_values[current_int % 16] + hex current_int //=16 From b1a298b8e05416d7c9d59611331d6c02deb3c41c Mon Sep 17 00:00:00 2001 From: deathiwng Date: Tue, 10 Oct 2023 23:50:45 +0200 Subject: [PATCH 0107/2103] Reto #19 - C# --- .../c#/deathiwng696.cs" | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 "Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/c#/deathiwng696.cs" diff --git "a/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/c#/deathiwng696.cs" "b/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/c#/deathiwng696.cs" new file mode 100644 index 0000000000..8075b495f8 --- /dev/null +++ "b/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/c#/deathiwng696.cs" @@ -0,0 +1,78 @@ +/* + * Crea un programa que analice texto y obtenga: + * - Nmero total de palabras. + * - Longitud media de las palabras. + * - Nmero de oraciones del texto (cada vez que aparecen un punto). + * - Encuentre la palabra ms larga. + * + * Todo esto utilizando un nico bucle. + */ + +using System; + +namespace deathwing696 +{ + public class Deathwing696 + { + static void Main(string[] args) + { + string texto1 = "Lorem ipsum dolor sit amet. "; + string texto2 = $"\r\n\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ut eros ipsum. Proin tincidunt venenatis augue, tempus scelerisque nunc. Etiam in suscipit sapien, laoreet facilisis diam. Duis in scelerisque dui, sed sodales arcu. Vivamus tempor faucibus augue eu fringilla. Pellentesque tincidunt nec leo at molestie. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent vulputate neque nec dui placerat rutrum accumsan id nulla. Donec a luctus urna. Suspendisse sodales erat nisi, sed fermentum erat porta id. Nullam tristique id augue vitae porta. Curabitur eu mauris finibus, dictum risus fringilla, pharetra felis. Integer orci neque, mollis ac eleifend non, imperdiet eu felis. Sed dictum quam quis nulla faucibus rutrum. Donec egestas enim est, in feugiat magna pellentesque nec. Curabitur tincidunt, velit nec eleifend malesuada, odio lorem pharetra quam, vitae laoreet libero orci at dui.\r\n\r\nAenean mattis mauris ut sollicitudin feugiat. Quisque id finibus elit, vel blandit nulla. Curabitur ullamcorper, enim at lobortis pharetra, nisi nisi sagittis turpis, vitae lacinia risus nibh ut nisl. Nunc porttitor tellus metus, et pharetra neque pharetra sit amet. Fusce ornare laoreet felis, vel dapibus purus auctor ut. Proin quis porta nunc. Mauris ac semper nulla. Sed rhoncus sapien ipsum, eget blandit mi pharetra sit amet.\r\n\r\nPellentesque malesuada sapien vitae tellus cursus condimentum. Ut eget tellus elementum, imperdiet nibh quis, malesuada dolor. Nunc molestie fringilla placerat. Suspendisse volutpat porttitor sapien vel ullamcorper. Nunc euismod vehicula felis a finibus. Duis quis hendrerit lacus. Donec euismod magna purus, sed hendrerit neque molestie at. Ut vitae dolor elit. Donec vel porttitor ex. Ut condimentum scelerisque tortor, sed accumsan nisi tempus nec. Donec id lacinia ipsum. Praesent molestie vulputate finibus. Praesent ultrices aliquam elementum. Proin convallis, ex sit amet tempor mollis, dui diam laoreet arcu, vel bibendum elit turpis ut arcu. Donec porttitor, nulla sit amet dictum eleifend, nisi lacus feugiat nunc, eu varius orci mi eu enim.\r\n\r\nIn interdum tellus eros, sit amet euismod neque ornare eu. Ut mattis aliquam lacus sed lobortis. Nam pulvinar lectus a fringilla efficitur. Donec sed mauris id mi maximus auctor. Pellentesque quis rhoncus nunc, id facilisis mauris. Vivamus porta ut nisl nec pharetra. Proin sapien tortor, pretium non tempor sed, vehicula at magna.\r\n\r\nDonec feugiat, arcu a lacinia tempus, nisl felis imperdiet risus, eu ultrices leo augue id nisi. Pellentesque pellentesque lacus id quam laoreet tempor. Praesent vel tincidunt tellus. Mauris blandit eros quam, laoreet rutrum libero congue at. Vestibulum eget porta neque, in ultrices neque. Suspendisse pretium tempor velit eu posuere. Cras pellentesque sem urna, vel iaculis mauris interdum quis. Integer cursus ultricies dolor. In consectetur nulla tristique tellus ullamcorper laoreet vel ac augue. Vestibulum porttitor tristique libero in tincidunt. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. "; + + int total_letras = 0, total_palabras = 0, num_oraciones = 0, total_longitudes_palabras = 0; + string palabra_mas_larga = "", palabra = ""; + + foreach (char caracter in texto2) + { + if (char.IsLetterOrDigit(caracter)) + { + total_letras++; + palabra += caracter; + } + else if (caracter == ' ' || caracter == '\t' || caracter == '\n' || caracter == '\r' || Es_simbolo_puntuacion(caracter)) + { + Add_palabra_y_comprueba_palabra_mas_larga(ref total_letras, ref total_palabras, ref total_longitudes_palabras, ref palabra_mas_larga, ref palabra); + } + else if (caracter == '.') + { + num_oraciones++; + Add_palabra_y_comprueba_palabra_mas_larga(ref total_letras, ref total_palabras, ref total_longitudes_palabras, ref palabra_mas_larga, ref palabra); + } + } + + Add_palabra_y_comprueba_palabra_mas_larga(ref total_letras, ref total_palabras, ref total_longitudes_palabras, ref palabra_mas_larga, ref palabra); + + double longitud_media = (double)total_longitudes_palabras / total_palabras; + + Console.WriteLine($"El nmero total de palabras es {total_palabras}"); + Console.WriteLine($"La longitud media de las palabras es {longitud_media}"); + Console.WriteLine($"El nmero de oraciones en el texto es {num_oraciones}"); + Console.WriteLine($"La palabra ms larga es \"{palabra_mas_larga}\""); + + Console.ReadKey(); + } + + private static void Add_palabra_y_comprueba_palabra_mas_larga(ref int total_letras, ref int total_palabras, ref int total_longitudes_palabras, + ref string palabra_mas_larga, ref string palabra) + { + if (total_letras > 0) + { + total_palabras++; + total_longitudes_palabras += total_letras; + + if (total_letras > palabra_mas_larga.Length) + { + palabra_mas_larga = palabra; + } + + total_letras = 0; + palabra = ""; + } + } + + private static bool Es_simbolo_puntuacion(char caracter) + { + return caracter == ',' || caracter == ':' || caracter == ';' || caracter == '?' || caracter == ')' || caracter == '!'; + } + } +} \ No newline at end of file From 80f4897204204b6e0b7e9dd389b07b48e4730fcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CFrancisco=E2=80=9D?= <72509322+franpua@users.noreply.github.com> Date: Tue, 10 Oct 2023 23:57:53 +0200 Subject: [PATCH 0108/2103] Reto#40 - Swift --- .../swift/franpua.swift" | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/swift/franpua.swift" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/swift/franpua.swift" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/swift/franpua.swift" new file mode 100644 index 0000000000..f0b7206d15 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/swift/franpua.swift" @@ -0,0 +1,9 @@ +import Foundation + +func multiplicationTable(num: Int) { + + for i in 1...10 { + print("\(num) x \(i) = \(num * i)" ) + } +} +multiplicationTable(num: 5) \ No newline at end of file From 297cb83bd468ffa1a588ce59234d6554fd1d0335 Mon Sep 17 00:00:00 2001 From: FabianTorres Date: Tue, 10 Oct 2023 17:46:28 -0500 Subject: [PATCH 0109/2103] New Solution: Reto #4 - Python --- .../python/nftorres.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/nftorres.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/nftorres.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/nftorres.py new file mode 100644 index 0000000000..fbf10bd4b4 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/nftorres.py @@ -0,0 +1,70 @@ +"""This script shows the solution to the exercise "Reto #4: PRIMO, FIBONACCI Y PAR" from Brais Moure's official website.""" + + +class Number: + """This class represents a number with methods to describe whether it is prime, fibonacci and even.""" + + def __init__(self, number: int) -> None: + """This method initializes the attributes of the number. + + Args: + number (int): number + """ + self.number: int = number + self.prime: bool = False + self.fibonacci: bool = False + self.even: bool = False + + def is_prime(self) -> None: + """This method checks if the number is prime.""" + self.factors: list = [ + f for f in range(1, (self.number + 1)) if self.number % f == 0 + ] + self.prime = ( + True + if (len(self.factors) == 2) + and (1 in self.factors) + and (self.number in self.factors) + else False + ) + + def is_fibonacci(self) -> None: + """This method checks if the number belongs to the fibonacci series.""" + self.fibonacci_series: list = [0, 1] + for f in self.fibonacci_series: + sum: int = self.fibonacci_series[-1] + self.fibonacci_series[-2] + self.fibonacci_series.append(sum) + if f <= self.number: + self.fibonacci = True if self.number in self.fibonacci_series else False + else: + break + + def is_even(self) -> None: + """This method checks if the number is even.""" + self.even = True if (-1) ** self.number > 0 else False + + def describe_number(self) -> str: + """This method elaborates the description of the number. + + Returns: + str: the description of the number. + """ + self.description: str = f"{self.number} " + + self.description += "es primo" if self.prime else "no es primo" + self.description += ", fibonacci" if self.fibonacci else ", no es fibonacci" + self.description += " y es par" if self.even else " y es impar" + + return self.description + + +if __name__ == "__main__": + # Initializing the program + print("\nNúmeros by nftorres") + number = Number(int(input("\nIngresa un número: "))) + # Validating if the number is prime, fibonacci and odd or even. + number.is_prime() + number.is_fibonacci() + number.is_even() + # Displays the description of the number. + print(number.describe_number()) From d8f8af119c849ccfdf5b615b607295b5bdc505e8 Mon Sep 17 00:00:00 2001 From: Rodolfo Date: Tue, 10 Oct 2023 20:02:43 -0300 Subject: [PATCH 0110/2103] Reto #40 Python --- .../python/rBaku.py" | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/rBaku.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/rBaku.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/rBaku.py" new file mode 100644 index 0000000000..6d8d46d475 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/rBaku.py" @@ -0,0 +1,3 @@ +Number = int(input("por favor ingrese un numero: ")) +for i in range(10): + print(str(Number) + " x " + str(i+1) + " = "+ str(Number*(i+1))) \ No newline at end of file From e1a08f04681536d6d67f0afc2031aeec834dfc98 Mon Sep 17 00:00:00 2001 From: DanielR Date: Tue, 10 Oct 2023 18:29:16 -0500 Subject: [PATCH 0111/2103] reto #0 --- .../python/danielzx9.py" | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/danielzx9.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/danielzx9.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/danielzx9.py" new file mode 100644 index 0000000000..604f279a0d --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/danielzx9.py" @@ -0,0 +1,19 @@ +"""/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */""" +for i in range(1,101): + if i % 3 == 0 and i % 5 == 0: + print(i," fizzbuzz") + elif i % 3 == 0: + print(i," fizz") + elif i % 5 == 0: + print(i," buzz") + else: + print(i) + + \ No newline at end of file From 7ebd452f00eba48b1a8ffb0a6c124485a4eb0c2e Mon Sep 17 00:00:00 2001 From: Hugovrc Date: Tue, 10 Oct 2023 18:21:52 -0600 Subject: [PATCH 0112/2103] Reto #40 - Python --- .../python/Hugovrc.py" | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Hugovrc.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Hugovrc.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Hugovrc.py" new file mode 100644 index 0000000000..2266eebf94 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Hugovrc.py" @@ -0,0 +1,6 @@ +numero = int(input("Ingresa un numero del que desees generar su tabla: ")) + +for num in range(1, 11): + resultado = numero * num + + print(f"{numero} X {num} = {resultado}") \ No newline at end of file From 53c375a0b579a8b4689351b8b986caa2751423a3 Mon Sep 17 00:00:00 2001 From: lucas-mercado Date: Tue, 10 Oct 2023 22:01:36 -0300 Subject: [PATCH 0113/2103] [Reto #40] solucion para el ejercicio --- .../python/LucasMercado.py" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/LucasMercado.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/LucasMercado.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/LucasMercado.py" new file mode 100644 index 0000000000..244aca4a6f --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/LucasMercado.py" @@ -0,0 +1,23 @@ +def tabla_multiplicacion(number: int) -> str: + """ Funcion encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + Args: + number (int): Numero del cual se quiere obtener la tabla de multiplicar. + Returns: + str: Tabla de multiplicar del numero ingresado. + Nota: + Debe visualizarse qué operación se realiza y su resultado. + Ej: 1 x 1 = 1 + 1 x 2 = 2 + 1 x 3 = 3 + """ + return "\n".join([f"{number} x {inicio} = {number*inicio}" for inicio in range(1, 11)]) + +if __name__ == "__main__": + continuar = 'si' + while continuar.lower() == "si": + valor = int(input('Ingrese un numero para obtener su tabla de multiplicar \n')) + if valor >= 0: + print(tabla_multiplicacion(valor)) + continuar = input('¿Desea continuar? (si/no) \n') + continue + print('El numero ingresado debe ser positivo') From a58e48a99bd552668d82f7e893a42f8c876640c0 Mon Sep 17 00:00:00 2001 From: lucas-mercado Date: Tue, 10 Oct 2023 22:10:37 -0300 Subject: [PATCH 0114/2103] [Reto #40] se cambio el nombre del fichero --- .../python/lucas-mercado.py" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/LucasMercado.py" => "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/lucas-mercado.py" (100%) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/LucasMercado.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/lucas-mercado.py" similarity index 100% rename from "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/LucasMercado.py" rename to "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/lucas-mercado.py" From a868e3ebdeabac3fc67d0b9f4cb35f99087fa51c Mon Sep 17 00:00:00 2001 From: lucas-mercado Date: Tue, 10 Oct 2023 22:20:44 -0300 Subject: [PATCH 0115/2103] [Reto #40][FIX] solucion cuando ingresamos un valor que no es un numero entero. --- .../python/lucas-mercado.py" | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/lucas-mercado.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/lucas-mercado.py" index 244aca4a6f..70f3827817 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/lucas-mercado.py" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/lucas-mercado.py" @@ -15,9 +15,10 @@ def tabla_multiplicacion(number: int) -> str: if __name__ == "__main__": continuar = 'si' while continuar.lower() == "si": - valor = int(input('Ingrese un numero para obtener su tabla de multiplicar \n')) + valor = input('Ingrese un numero para obtener su tabla de multiplicar \n') + valor = int(valor) if valor.isnumeric() else -1 if valor >= 0: - print(tabla_multiplicacion(valor)) + print(tabla_multiplicacion(int(valor))) continuar = input('¿Desea continuar? (si/no) \n') continue print('El numero ingresado debe ser positivo') From 8047fc46e5ee17503f9dbdfbabb82437460bb9e5 Mon Sep 17 00:00:00 2001 From: Leandro Espino Date: Tue, 10 Oct 2023 20:43:49 -0600 Subject: [PATCH 0116/2103] Reto #37 - python --- .../python/EspinoLeandroo.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/EspinoLeandroo.py diff --git a/Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/EspinoLeandroo.py b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/EspinoLeandroo.py new file mode 100644 index 0000000000..3bfdae9da7 --- /dev/null +++ b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/EspinoLeandroo.py @@ -0,0 +1,19 @@ +def rgb_to_hex(r, g, b): + return "#{:02X}{:02X}{:02X}".format(r, g, b) + +def hex_to_rgb(hex_color): + hex_color = hex_color.lstrip("#") + r = int(hex_color[0:2], 16) + g = int(hex_color[2:4], 16) + b = int(hex_color[4:6], 16) + return "r: {}, g: {}, b: {}".format(r, g, b) + +# rgb_to_hex +r, g, b = 250, 186, 218 +hex_color = rgb_to_hex(r, g, b) +print(hex_color) # Imprime "#000000" + +# hex_to_rgb +hex_color = "#fabada" +rgb_color = hex_to_rgb(hex_color) +print(rgb_color) # Imprime "r: 0, g: 0, b: 0" From e6e972874f8cebafbb329e24c1110f526ad6adb3 Mon Sep 17 00:00:00 2001 From: HydraDarkNg Date: Tue, 10 Oct 2023 21:56:49 -0600 Subject: [PATCH 0117/2103] Reto #40 - Common lisp --- .../lisp/HydraDarkNg.lisp" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/lisp/HydraDarkNg.lisp" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/lisp/HydraDarkNg.lisp" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/lisp/HydraDarkNg.lisp" new file mode 100644 index 0000000000..207f8cbd84 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/lisp/HydraDarkNg.lisp" @@ -0,0 +1,16 @@ +;;; +;;; Crea un programa que sea capaz de solicitarte un número y se +;;; encargue de imprimir su tabla de multiplicar entre el 1 y el 10. +;;; - Debe visualizarse qué operación se realiza y su resultado. +;;; Ej: 1 x 1 = 1 +;;; 1 x 2 = 2 +;;; 1 x 3 = 3 +;;; ... +;;; + +(defun main () + (let ((number (parse-integer (read-line)))) + (loop for i from 1 to 10 do + (format t "~a x ~2,' d = ~a~%" number i (* number i))))) + +(main) From bac713f4e16198013ac8ca2ce13de2c8f6f1592d Mon Sep 17 00:00:00 2001 From: HydraDarkNg Date: Tue, 10 Oct 2023 21:58:31 -0600 Subject: [PATCH 0118/2103] Reto #40 - Common lisp --- .../lisp/HydraDarkNg.lisp" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/lisp/HydraDarkNg.lisp" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/lisp/HydraDarkNg.lisp" index 207f8cbd84..261b5a3954 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/lisp/HydraDarkNg.lisp" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/lisp/HydraDarkNg.lisp" @@ -9,6 +9,8 @@ ;;; (defun main () + (format t "Ingresa un número: ") + (force-output) (let ((number (parse-integer (read-line)))) (loop for i from 1 to 10 do (format t "~a x ~2,' d = ~a~%" number i (* number i))))) From 04cff5c4307e4038e340c1a188d5736a4723a83f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Andr=C3=A9s?= <102297884+vandresca@users.noreply.github.com> Date: Wed, 11 Oct 2023 06:46:06 +0200 Subject: [PATCH 0119/2103] Rename vandresca to vandresca.py - Add extension --- .../python/vandresca.py" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vandresca" => "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vandresca.py" (100%) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vandresca" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vandresca.py" similarity index 100% rename from "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vandresca" rename to "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/vandresca.py" From d59fd4ce4923b004ba5da1bce35b2e2119d9e395 Mon Sep 17 00:00:00 2001 From: Marco Antonio Gallardo Date: Wed, 11 Oct 2023 08:36:10 +0200 Subject: [PATCH 0120/2103] Reto #40 - typescript --- .../typescript/mgallardodev.ts | 65 +++++++++++++------ .../typescript/mgallardodevV2.ts | 26 -------- 2 files changed, 46 insertions(+), 45 deletions(-) delete mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/typescript/mgallardodevV2.ts diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/typescript/mgallardodev.ts b/Retos/Reto #38 - LAS SUMAS [Media]/typescript/mgallardodev.ts index d2400d568d..947248f598 100644 --- a/Retos/Reto #38 - LAS SUMAS [Media]/typescript/mgallardodev.ts +++ b/Retos/Reto #38 - LAS SUMAS [Media]/typescript/mgallardodev.ts @@ -1,26 +1,53 @@ const list: number[] = [1, 5, 3, 2]; const target: number = 5; //obtener todas las combinaciones -const getCombinations = (array: number[]) => { - const combinations: number[][] = [[]]; +function sumasFuerzaBruta(nums: number[], target: number) { + const getCombinations = (array: number[]) => { + const combinations: number[][] = [[]]; - for (let i in array) { - const mainPositionValue = array[Number(i)]; + for (let i in array) { + const mainPositionValue = array[Number(i)]; - const tempCombinations: number[][] = combinations.map( - (combination) => [mainPositionValue, ...combination] - ); - combinations.push(...tempCombinations); - } - return combinations; -}; -//obtener el total de los valores de un array de numeros -const totalize = (arr: number[]) => { - return arr.reduce((acc, value) => acc + value, 0); -}; + const tempCombinations: number[][] = combinations.map( + (combination) => [mainPositionValue, ...combination] + ); + combinations.push(...tempCombinations); + } + return combinations; + }; + //obtener el total de los valores de un array de numeros + const totalize = (arr: number[]) => { + return arr.reduce((acc, value) => acc + value, 0); + }; + + const result = getCombinations(list).filter( + (combination) => totalize(combination) === target + ); + + console.log(result); +} -const result = getCombinations(list).filter( - (combination) => totalize(combination) === target -); +function sumasBackTracking(nums: number[], target: number) { + const result: number[][] = []; + + function encuentraSuma( + nums: number[], + target: number, + comb: number[] = [] + ) { + for (let i = 0; i < nums.length; i++) { + const resta = target - nums[i]; + const newComb = [...comb, nums[i]]; + if (resta === 0) { + result.push([...newComb]); + } else if (resta < 0) { + } else if (resta > 0) { + encuentraSuma(nums.slice(i + 1), resta, newComb); + } + } + } + encuentraSuma(nums, target); + console.log(result); +} -console.log(result); +sumasBackTracking(list, target); diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/typescript/mgallardodevV2.ts b/Retos/Reto #38 - LAS SUMAS [Media]/typescript/mgallardodevV2.ts deleted file mode 100644 index 5eeff2b604..0000000000 --- a/Retos/Reto #38 - LAS SUMAS [Media]/typescript/mgallardodevV2.ts +++ /dev/null @@ -1,26 +0,0 @@ -const numeros:number[] = [1,6,3,2]; -const target: number = 6; - - -function buscar(nums: number[], target: number){ - - const result:number[][] = [ ] - - function encuentraSuma(nums: number[], target: number, comb: number[]=[]){ - for(let i = 0; i < nums.length; i++){ - const resta = target - nums[i] - const newComb = [...comb, nums[i]]; - if(resta === 0){ - result.push([...newComb]) - }else if(resta < 0) { - }else if(resta > 0){ - encuentraSuma(nums.slice(i+1), resta, newComb) - } - } - } - encuentraSuma(nums, target) - console.log(result) - -} - -buscar(numeros, target) From 0d1d221ca03076fdbd6c23fe343a94c79745ce36 Mon Sep 17 00:00:00 2001 From: Luis Herrera Collado Date: Wed, 11 Oct 2023 10:30:28 +0200 Subject: [PATCH 0121/2103] Create HerreraColladoLuis.py --- .../python/HerreraColladoLuis.py" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/HerreraColladoLuis.py" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/HerreraColladoLuis.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/HerreraColladoLuis.py" new file mode 100644 index 0000000000..6551e34f95 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/HerreraColladoLuis.py" @@ -0,0 +1,49 @@ +#/* +# * Crea una función que encuentre todos los triples pitagóricos +# * (ternas) menores o iguales a un número dado. +# * - Debes buscar información sobre qué es un triple pitagórico. +# * - La función únicamente recibe el número máximo que puede +# * aparecer en el triple. +# * - Ejemplo: Los triples menores o iguales a 10 están +# * formados por (3, 4, 5) y (6, 8, 10). +# */ + +def is_triple(triple: list) -> bool: + + if len(triple) == 3: + return triple[0]*triple[0] + triple[1]*triple[1] == triple[2]*triple[2] + + +def find_triples(max: int) -> list: + + numbers: list = [] + for i in range(1, max+1): + numbers.append(i) + + # función recursiva + def find_triple(start: int, triple: list): + + # triple encontrado + if (is_triple(triple)): + triples.append(triple[:]) + return + + # ningún triple más encontrado + if start > max: + return + + # backtrack + for index in range(start, len(numbers)): + + if index > start and numbers[index] == numbers[index-1]: + continue + + triple.append(numbers[index]) + find_triple(index + 1, triple) + triple.pop() + + triples: list = [] + find_triple(0, []) + return triples + +print(find_triples(10)) From f1f45aef7ce53f56588131cc2b31bf5e26d7a5d9 Mon Sep 17 00:00:00 2001 From: Marco Antonio Gallardo Date: Wed, 11 Oct 2023 10:30:28 +0200 Subject: [PATCH 0122/2103] Reto #37 - typescript --- .../typescript/mgallardodev.ts | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Retos/Reto #37 - COLORES HEX Y RGB [Media]/typescript/mgallardodev.ts diff --git a/Retos/Reto #37 - COLORES HEX Y RGB [Media]/typescript/mgallardodev.ts b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/typescript/mgallardodev.ts new file mode 100644 index 0000000000..1c16ab9636 --- /dev/null +++ b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/typescript/mgallardodev.ts @@ -0,0 +1,51 @@ +/* + * Crea las funciones capaces de transformar colores HEX + * a RGB y viceversa. + * Ejemplos: + * RGB a HEX: r: 0, g: 0, b: 0 -> #000000 + * HEX a RGB: hex: #000000 -> (r: 0, g: 0, b: 0) + */ + + + +function isValidHex(color: string) { + return /^#[A-Fa-f0-9]{6}$|^#[A-Fa-f0-9]{3}$/.test(color); +} +function isValidRgbColor(color: string) { + return /^\((\s?)r:(\s?)(\d{1,3}),(\s?)g:(\s?)(\d{1,3}),(\s?)b:(\s?)(\d{1,3})\)/.test(color); +} + +function convertHexToRgb(hexColor: string): string { + const rHex = + hexColor.length === 7 ? hexColor.substring(1, 3) : hexColor[1]; + const gHex = + hexColor.length === 7 ? hexColor.substring(3, 5) : hexColor[2]; + const bHex = + hexColor.length === 7 ? hexColor.substring(5) : hexColor[3]; + + return `(r: ${Number.parseInt(rHex, 16)}, g: ${Number.parseInt(gHex,16)}, b: ${Number.parseInt(bHex, 16)})`; +} + +function convertRgbToHex(rgbColor:string):string { + + const rValueIndex = rgbColor.indexOf('r:')+2 + const gValueIndex = rgbColor.indexOf('g:')+2 + const bValueIndex = rgbColor.indexOf('b:')+2 + + const red = rgbColor.substring(rValueIndex, rgbColor.indexOf(',', rValueIndex )) + const green = rgbColor.substring(gValueIndex, rgbColor.indexOf(',', gValueIndex )) + const blue = rgbColor.substring(bValueIndex, rgbColor.indexOf(')')) + + + return `#${Number(red).toString(16)}${Number(green).toString(16)}${Number(blue).toString(16)}` +} + + +const convertColorFormat = (color: string): string => { + if (!isValidHex(color) && !isValidRgbColor(color)) throw new Error('Invalid color format'); + return isValidHex(color) ? convertHexToRgb(color) : convertRgbToHex(color) + +}; + + +console.log(convertColorFormat('(r: 85, g: 105, b: 108)')) \ No newline at end of file From 6a92fd9c29e1796e145e6f0acb0d363d2c178689 Mon Sep 17 00:00:00 2001 From: Josep Monclus Date: Wed, 11 Oct 2023 15:57:54 +0200 Subject: [PATCH 0123/2103] Solucion reto 39 --- .../python/josepmonclus.py" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/josepmonclus.py" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/josepmonclus.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/josepmonclus.py" new file mode 100644 index 0000000000..54a16e3907 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/josepmonclus.py" @@ -0,0 +1,30 @@ +''' +Crea una función que encuentre todos los triples pitagóricos +(ternas) menores o iguales a un número dado. +- Debes buscar información sobre qué es un triple pitagórico. +- La función únicamente recibe el número máximo que puede + aparecer en el triple. +- Ejemplo: Los triples menores o iguales a 10 están + formados por (3, 4, 5) y (6, 8, 10). +''' + +def find_pitagoric_triplet(max_n): + if max_n <= 0: + return 'Max N debe ser mayor que 0' + + triplets = [] + for a in range(1, max_n + 1): + for b in range(a, max_n + 1): + for c in range(b, max_n + 1): + if a**2 + b**2 == c**2: + triplets.append((a, b, c)) + return triplets + +print('Tripletas pitagoricas por debajo de 10:') +print(find_pitagoric_triplet(10)) + +print('Tripletas pitagoricas por debajo de 50:') +print(find_pitagoric_triplet(50)) + +print('Tripletas pitagoricas por debajo de -1:') +print(find_pitagoric_triplet(-1)) \ No newline at end of file From 3566eaf056b1a0955836eae0718ab6f708cabe68 Mon Sep 17 00:00:00 2001 From: Josep Monclus Date: Wed, 11 Oct 2023 16:08:00 +0200 Subject: [PATCH 0124/2103] Solucion reto 40 --- .../python/josepmonclus.py" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/josepmonclus.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/josepmonclus.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/josepmonclus.py" new file mode 100644 index 0000000000..817baf5ea4 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/josepmonclus.py" @@ -0,0 +1,22 @@ +''' +Crea un programa que sea capaz de solicitarte un número y se +encargue de imprimir su tabla de multiplicar entre el 1 y el 10. +- Debe visualizarse qué operación se realiza y su resultado. + Ej: 1 x 1 = 1 + 1 x 2 = 2 + 1 x 3 = 3 + ... +''' + +def tabla_multiplicar(n): + for i in range(1, 11): + print(n, 'x', i, '=', n * i) + +print('Tabla de multiplicar del 5') +tabla_multiplicar(5) + +print('Tabla de multiplicar del 11') +tabla_multiplicar(11) + +print('Tabla de multiplicar del 439') +tabla_multiplicar(439) \ No newline at end of file From ad55ba5b27354ac34613edec8a69c0aed95c067d Mon Sep 17 00:00:00 2001 From: Ruperto Date: Wed, 11 Oct 2023 12:04:53 -0300 Subject: [PATCH 0125/2103] Cambio nombre carpeta a minuscula Reto #40 - djbetho.rb --- .../ruby/djbetho.rb" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/Ruby/djbetho.rb" => "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ruby/djbetho.rb" (100%) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/Ruby/djbetho.rb" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ruby/djbetho.rb" similarity index 100% rename from "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/Ruby/djbetho.rb" rename to "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ruby/djbetho.rb" From d20e7666e9f0c974c674adcee0252e0d37b08ec7 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 11 Oct 2023 17:31:41 +0200 Subject: [PATCH 0126/2103] Reto #40 python --- .../python/javierfiestasbotella.py" | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/javierfiestasbotella.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/javierfiestasbotella.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/javierfiestasbotella.py" new file mode 100644 index 0000000000..a0f9bfe5e1 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/javierfiestasbotella.py" @@ -0,0 +1,18 @@ +''' +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */''' + + +numero = int(input("Elige un número entre 1 y 10: ")) +while numero not in range(1, 11): + numero = int(input("Número fuera de rango. Elige un número entre 1 y 10:")) + +for i in range(1,11): + print(f'{numero} x {i} = {numero*i}') \ No newline at end of file From e676bc62b1712f1202b7d6e04d8dc3953dc2e7ad Mon Sep 17 00:00:00 2001 From: patriciotrujilllo Date: Wed, 11 Oct 2023 12:34:24 -0300 Subject: [PATCH 0127/2103] Reto #34 resolve --- .../javascript/patriciotrujilllo.js | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Retos/Reto #34 - EL TXT [Media]/javascript/patriciotrujilllo.js diff --git a/Retos/Reto #34 - EL TXT [Media]/javascript/patriciotrujilllo.js b/Retos/Reto #34 - EL TXT [Media]/javascript/patriciotrujilllo.js new file mode 100644 index 0000000000..d835fb72ae --- /dev/null +++ b/Retos/Reto #34 - EL TXT [Media]/javascript/patriciotrujilllo.js @@ -0,0 +1,100 @@ +/* + * Crea un programa capaz de interactuar con un fichero TXT. + * IMPORTANTE: El fichero TXT NO debe subirse como parte de la corrección. + * Únicamente el código. + * + * - 💚Si no existe, debe crear un fichero llamado "text.txt". + * - 💚Desde el programa debes ser capaz de introducir texto por consola y guardarlo + * en una nueva línea cada vez que se pulse el botón "Enter". + * - 💚Si el fichero existe, el programa tiene que dar la opción de seguir escribiendo + * a continuación o borrar su contenido y comenzar desde el principio. + * - 💚Si se selecciona continuar escribiendo, se tiene que mostrar por consola + * el texto que ya posee el fichero. + */ + +const fs = require('fs') +const readline = require('readline') + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}) +//Leer archivo +const Read = () =>{ + fs.readFile('text.txt','utf-8', (err,data) => { + if (err){ + console.error(err) + }else{ + console.log(data) + } + + }) +} + +//Crear archivo de texto +const Create = (texto) =>{ + fs.writeFile('text.txt',`${texto}\n`, (err) =>{ + if(err) throw err + console.log('Se creo archivo') + }) +} +//Añadir texto a archivo existente +const Add = (newTexto) =>{ + fs.appendFile('text.txt',`${newTexto}\n`, (err) =>{ + if (err) throw err + console.log('Se agrego texto') + }) +} +//Eliminar archivo +const Delete = () =>{ + fs.unlink('text.txt', (err) => { + if(err) throw err + }) + return 'archivo eliminado' +} + + +//Comprobar si esta creado el archivo +fs.access('text.txt', fs.constants.F_OK, (err)=>{ + //si no existe archivo, se crea uno nuevo + if(err){ + rl.question('Ingrese texto: ',(texto) =>{ + + Create(texto) + + rl.close() + }) + + } + else{ + //si ya existe se agrega mas texto o se elimina + rl.question('El archivo ya existe, desea agregar(1) o eliminar(2): ',(option) =>{ + + if(option==='1'){ + Read() + rl.question('Ingrese texto para agregar: ',(texto) =>{ + + Add(texto) + + rl.close() + }) + + + } + else if(option==='2'){ + const textdeleted = Delete() + console.log(textdeleted) + rl.question('Ingrese texto para el nuevo archivo: ',(texto) =>{ + + Create(texto) + + rl.close() + }) + }else{ + console.log('Opcion no valida') + rl.close() + } + }) + } +}) + From 8c9c2fbcf918230180fa6982f283a096706f2ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateo=20=C3=81lvarez?= Date: Wed, 11 Oct 2023 11:04:10 -0500 Subject: [PATCH 0128/2103] Reto #40 - Python --- .../python/drifterDev.py" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/drifterDev.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/drifterDev.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/drifterDev.py" new file mode 100644 index 0000000000..95dc953b63 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/drifterDev.py" @@ -0,0 +1,17 @@ +def show(n:int)->None: + print("Tabla del "+str(n)) + for i in range(1,11): + print(str(n)+" x "+str(i)+" = "+str(n*i)) + print() + +def main()->None: + n=int(input("Ingrese un numero: ")) + show(n) + # Casos de prueba + # show(0) + # show(1) + # show(-2) + # show(238945) + +if __name__ == "__main__": + main() From 1191c526369daa98e020560712b3d3de12560ca7 Mon Sep 17 00:00:00 2001 From: Kevin Rodriguez Date: Wed, 11 Oct 2023 11:11:52 -0500 Subject: [PATCH 0129/2103] =?UTF-8?q?Kevin=20Rodr=C3=ADguez=20submission?= =?UTF-8?q?=20for=20challenge=20#40?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/kevyder.py" | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/kevyder.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/kevyder.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/kevyder.py" new file mode 100644 index 0000000000..a76aa928b3 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/kevyder.py" @@ -0,0 +1,12 @@ +def times_tables(number: int) -> str: + result = [] + + for n in range(1, 11): + result.append(f"{number} x {n} = {n * number}") + + return "\n".join(result) + + +if __name__ == "__main__": + multiplications = times_tables(5) + print(multiplications) From a0bf057963d242e6d9651df41d5d8fb978cd694f Mon Sep 17 00:00:00 2001 From: Jose <77416168+JoseAntonioRuizGarcia@users.noreply.github.com> Date: Wed, 11 Oct 2023 16:45:07 +0000 Subject: [PATCH 0130/2103] Reto #40 - Python --- .../python/JoseAntonioRuizGarcia.py" | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/JoseAntonioRuizGarcia.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/JoseAntonioRuizGarcia.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/JoseAntonioRuizGarcia.py" new file mode 100644 index 0000000000..46850946fe --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/JoseAntonioRuizGarcia.py" @@ -0,0 +1,14 @@ +def printTable(number: int) -> None: + print(f'Tabla de multiplacar del número {number}') + for n in range(1, 11): + print(f'{number} x {n} = {number * n}') + +if __name__=='__main__': + run = True + while run: + number_table = input('Introduce un número: ') + if number_table.isnumeric(): + printTable(number=int(number_table)) + run = False + else: + print('Error: No has introducido un múmero') From 16ce727b75d960bb969a9c7c25fe39bb88bc8b34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vanesa=20P=C3=A9rez?= Date: Wed, 11 Oct 2023 19:45:38 +0200 Subject: [PATCH 0131/2103] Reto #0-Python --- .../python/vanesaprz.py" | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/vanesaprz.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/vanesaprz.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/vanesaprz.py" new file mode 100644 index 0000000000..a2f946b5d3 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/vanesaprz.py" @@ -0,0 +1,19 @@ +""" + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". +""" + +for number in range(1,101): + if number % 5 == 0 and number % 3 == 0: + print("fizzbuzz") + elif number % 5 == 0: + print("buzz") + elif number % 3 == 0: + print("fizz") + else: + print(number) + From 13bf7ba7b113f6fd28cc934224479aca354c081a Mon Sep 17 00:00:00 2001 From: Jose <77416168+JoseAntonioRuizGarcia@users.noreply.github.com> Date: Wed, 11 Oct 2023 17:46:18 +0000 Subject: [PATCH 0132/2103] Reto #2 - Python --- .../python/JoseAntonioRuizGarcia.py | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/JoseAntonioRuizGarcia.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/JoseAntonioRuizGarcia.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/JoseAntonioRuizGarcia.py new file mode 100644 index 0000000000..61e6a04bf9 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/JoseAntonioRuizGarcia.py @@ -0,0 +1,77 @@ +POINTS = { + 0: 'Love', + 1: '15', + 2: '30', + 3: '40', +} + +class GameTennis(): + def __init__(self, plays: list): + self.__cleanSecuence__(plays) + self.__is_deuce__ = False + self.points = [0, 0] + + def __cleanSecuence__(self, plays: list): + self.__plays__ = ( + plays.replace('[', '') + .replace(']', '') + .replace(' ', '') + .split(',') + ) + + def __sumPoint__(self, player: str): + if player == 'P1': + self.points[0] += 1 + + else: + self.points[1] += 1 + + def __printResultPartial__(self): + p1 = POINTS.get(self.points[0]) + p2 = POINTS.get(self.points[1]) + + print(f'{p1} - {p2}') + + def runGame(self): + # Recorre todas las jugadas + for p in self.__plays__: + # Suma 1 punto al jugador correspondiente + self.__sumPoint__(p) + + ''' + Comprueba si hay un ganador + Siempre que ambos jugadores tengan más de 3 puntos + Si la diferencia entre ambos es mayor que 1 + ''' + if (any([self.points[0] > 3, self.points[1] > 3])) and abs(self.points[0] - self.points[1]) > 1: + if self.points[0] > self.points[1]: + print('Ha gana el jugardor P1') + break + + else: + print('Ha gana el jugardor P2') + break + + ''' + Comprueba si entrar en modo Deuce + Si hay empate a 3 puntos se pasa a puntación > 10 puntos + Gana el primero que tenga más de un punto de diferencia con el otro jugador + ''' + if (self.points[0] == 3) and (self.points[1] == 3): + self.points = [10, 10] + self.__is_deuce__ = True + + # Imprime la puntación normal o del modo deuce + if self.__is_deuce__: + if self.points[0] == self.points[1]: + print('Deuce') + else: + print(f'Ventaja {p}') + else: + self.__printResultPartial__() + + +if __name__ == '__main__': + games = '[P1, P1, P2, P2, P1, P2, P1, P1]' + gt = GameTennis(plays = games) + gt.runGame() From 3c59938c6ba6f9ca22ed2f39f86317b7131a3401 Mon Sep 17 00:00:00 2001 From: PedroGF Date: Wed, 11 Oct 2023 20:15:15 +0200 Subject: [PATCH 0133/2103] Reto #40 Javascript y Python --- .../javascript/pedrogf.js" | 17 +++++++++++++++++ .../python/pedrogf.py" | 15 +++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/pedrogf.js" create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/pedrogf.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/pedrogf.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/pedrogf.js" new file mode 100644 index 0000000000..f99b7b1d5c --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/pedrogf.js" @@ -0,0 +1,17 @@ +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +function timesTable (table) { + for (let n = 0; n <= 10; n++) { + console.log(`${table} x ${n} = ${table * n}`) + } +} + +timesTable(3) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/pedrogf.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/pedrogf.py" new file mode 100644 index 0000000000..21fa8a157b --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/pedrogf.py" @@ -0,0 +1,15 @@ +# +# Crea un programa que sea capaz de solicitarte un número y se +# encargue de imprimir su tabla de multiplicar entre el 1 y el 10. +# - Debe visualizarse qué operación se realiza y su resultado. +# Ej: 1 x 1 = 1 +# 1 x 2 = 2 +# 1 x 3 = 3 +# ... +# + +def tablaDel(tabla:int): + for num in range(11): + print(f"{tabla} + {num} = {tabla * num}") + +tablaDel(3) \ No newline at end of file From 4dbbc2d0e2b83d50bc314af02464d1b5ebfbfd64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Jos=C3=A9=20Borges=20Medina?= <121818423+borgesmj@users.noreply.github.com> Date: Wed, 11 Oct 2023 13:26:01 -0500 Subject: [PATCH 0134/2103] =?UTF-8?q?a=C3=B1adiendo=20tabla=20de=20multipl?= =?UTF-8?q?icar=20borgesmj?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ejercicio.md" | 21 +++++++++++++++++++ .../javascript/borgesmj.js" | 7 +++++++ 2 files changed, 28 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ejercicio.md" create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/borgesmj.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ejercicio.md" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ejercicio.md" new file mode 100644 index 0000000000..4b335cf26d --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ejercicio.md" @@ -0,0 +1,21 @@ +# Reto #40: Tabla de multiplicar +#### Dificultad: Fácil | Publicación: 09/10/23 | Corrección: 16/10/23 + +## Enunciado + +``` +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/borgesmj.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/borgesmj.js" new file mode 100644 index 0000000000..e442a3f36d --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/borgesmj.js" @@ -0,0 +1,7 @@ +const tablaDeMultiplicar = (num) => { + for (let index = 1; index <= 10; index++) { + console.log(`${num} x ${index} = ${num * index}`) + } +} + +tablaDeMultiplicar(8) \ No newline at end of file From f42210acd47f7c175cd7792f7adfbf2cf81ab05b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Jos=C3=A9=20Borges=20Medina?= <121818423+borgesmj@users.noreply.github.com> Date: Wed, 11 Oct 2023 13:30:47 -0500 Subject: [PATCH 0135/2103] =?UTF-8?q?Delete=20Retos/Reto=20#40=20-=20TABLA?= =?UTF-8?q?=20DE=20MULTIPLICAR=20[F=C3=A1cil]=20directory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ejercicio.md" | 21 ------------------- .../javascript/borgesmj.js" | 7 ------- 2 files changed, 28 deletions(-) delete mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ejercicio.md" delete mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/borgesmj.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ejercicio.md" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ejercicio.md" deleted file mode 100644 index 4b335cf26d..0000000000 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/ejercicio.md" +++ /dev/null @@ -1,21 +0,0 @@ -# Reto #40: Tabla de multiplicar -#### Dificultad: Fácil | Publicación: 09/10/23 | Corrección: 16/10/23 - -## Enunciado - -``` -/* - * Crea un programa que sea capaz de solicitarte un número y se - * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. - * - Debe visualizarse qué operación se realiza y su resultado. - * Ej: 1 x 1 = 1 - * 1 x 2 = 2 - * 1 x 3 = 3 - * ... - */ -``` -#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. - -Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. - -> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/borgesmj.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/borgesmj.js" deleted file mode 100644 index e442a3f36d..0000000000 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/borgesmj.js" +++ /dev/null @@ -1,7 +0,0 @@ -const tablaDeMultiplicar = (num) => { - for (let index = 1; index <= 10; index++) { - console.log(`${num} x ${index} = ${num * index}`) - } -} - -tablaDeMultiplicar(8) \ No newline at end of file From c5bfc3bc37f9e61a29f35b169f8445dc227d35fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Jos=C3=A9=20Borges=20Medina?= <121818423+borgesmj@users.noreply.github.com> Date: Wed, 11 Oct 2023 13:31:17 -0500 Subject: [PATCH 0136/2103] =?UTF-8?q?a=C3=B1adiendo=20tablas=20de=20multip?= =?UTF-8?q?licar=20borgesmj?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/borgesmj.js" | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/borgesmj.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/borgesmj.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/borgesmj.js" new file mode 100644 index 0000000000..e442a3f36d --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/borgesmj.js" @@ -0,0 +1,7 @@ +const tablaDeMultiplicar = (num) => { + for (let index = 1; index <= 10; index++) { + console.log(`${num} x ${index} = ${num * index}`) + } +} + +tablaDeMultiplicar(8) \ No newline at end of file From 914ff4584ba683f3085c311f6ef72b7ff7a0bebd Mon Sep 17 00:00:00 2001 From: PedroGF Date: Wed, 11 Oct 2023 21:10:39 +0200 Subject: [PATCH 0137/2103] Reto #40 incorporada entrada de datos --- .../javascript/pedrogf.js" | 9 ++++++++- .../python/pedrogf.py" | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/pedrogf.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/pedrogf.js" index f99b7b1d5c..dba718a70e 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/pedrogf.js" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/pedrogf.js" @@ -7,6 +7,14 @@ * 1 x 3 = 3 * ... */ +const readline = require('readline'); + +let read = readline.createInterface(process.stdin, process.stdout); + + read.question('Tabla de multiplicar del:', (answer) => { + timesTable(answer) + read.close() +}) function timesTable (table) { for (let n = 0; n <= 10; n++) { @@ -14,4 +22,3 @@ function timesTable (table) { } } -timesTable(3) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/pedrogf.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/pedrogf.py" index 21fa8a157b..1451158f36 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/pedrogf.py" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/pedrogf.py" @@ -8,8 +8,10 @@ # ... # +tabla = int(input('Que tabla de multiplicar quieres ver:')) + def tablaDel(tabla:int): for num in range(11): print(f"{tabla} + {num} = {tabla * num}") -tablaDel(3) \ No newline at end of file +tablaDel(tabla) \ No newline at end of file From 037aaa194b8a396d226ff067e95241c7a59f483f Mon Sep 17 00:00:00 2001 From: Pau Ortega Garcia Date: Wed, 11 Oct 2023 21:20:11 +0200 Subject: [PATCH 0138/2103] Update and rename pauortega.java to pauortegarcia.java --- .../java/pauortegarcia.java" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortega.java" => "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortegarcia.java" (95%) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortega.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortegarcia.java" similarity index 95% rename from "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortega.java" rename to "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortegarcia.java" index 1168d78ce3..b9b4bfcfb5 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortega.java" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortegarcia.java" @@ -12,4 +12,4 @@ public static void main(String[] args) { System.out.println(text); } } -} \ No newline at end of file +} From 9e0a34bcdd3c8050171134941fd4689b94e74f55 Mon Sep 17 00:00:00 2001 From: Mathias Hidalgo Caja Date: Wed, 11 Oct 2023 15:26:23 -0400 Subject: [PATCH 0139/2103] Reto #40 - Javascript - Mathbucks --- .../javascript/mathbucks.js" | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/mathbucks.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/mathbucks.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/mathbucks.js" new file mode 100644 index 0000000000..0dc0221728 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/mathbucks.js" @@ -0,0 +1,8 @@ +function XTable(n, t){ + for(let i=1; i<= t; i++){ + const res = i * n; + console.log(`${n} x ${i} = ${res}`); + } +} + +XTable(5, 10) From 233a7bff9ee9f6d95042891a60dbfb6aeac63be6 Mon Sep 17 00:00:00 2001 From: Pau Ortega Garcia Date: Wed, 11 Oct 2023 21:29:43 +0200 Subject: [PATCH 0140/2103] =?UTF-8?q?Actualizaci=C3=B3n=20de=20optimizaci?= =?UTF-8?q?=C3=B3n=20de=20variables=20-=20=20pauortegarcia.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/pauortegarcia.java" | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortegarcia.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortegarcia.java" index b9b4bfcfb5..aae585fba3 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortegarcia.java" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/pauortegarcia.java" @@ -3,13 +3,9 @@ public class Program { public static void main(String[] args) { Scanner numero = new Scanner(System.in); - int num = numero.nextInt(); - int total = 0; - String text= ""; - for(int i =1; i<=10; i++){ - total = num * i; - text = num+" x "+i + " = "+total; - System.out.println(text); + int num = numero.nextInt(); + for(int i =1; i<=10; i++){ + System.out.println(num+" x "+ i+" = "+num * i); } } } From 33255632715d1279c1ea82176d6a8cd316d555f6 Mon Sep 17 00:00:00 2001 From: Mathias Hidalgo Caja Date: Wed, 11 Oct 2023 15:29:52 -0400 Subject: [PATCH 0141/2103] Reto #40 - Javascript --- .../javascript/mathbucks.js" | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/mathbucks.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/mathbucks.js" index 0dc0221728..8fb192a43d 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/mathbucks.js" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/mathbucks.js" @@ -1,8 +1,11 @@ +// Creo una funcion para tomar tanto el numero que quieres saber la tabla (n), como la cantidad de numberos los cuales se multiplica (t) function XTable(n, t){ + // se utiliza un loop para poder interactuar con la cantidad de la tabla for(let i=1; i<= t; i++){ - const res = i * n; - console.log(`${n} x ${i} = ${res}`); + const res = i * n; // se almacena el resultado como respuesta para terminar la fila de la multiplicacion + console.log(`${n} x ${i} = ${res}`); // se printea cada resultado como se requiere en el problema } } XTable(5, 10) +XTable(2, 10) From c397823a97b8c54a909d792d045bb87ba2c80fe5 Mon Sep 17 00:00:00 2001 From: Mathias Hidalgo Caja Date: Wed, 11 Oct 2023 15:32:42 -0400 Subject: [PATCH 0142/2103] Reto #40 - Javascript --- .../javascript/MathiasHidalgo.js" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/mathbucks.js" => "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/MathiasHidalgo.js" (100%) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/mathbucks.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/MathiasHidalgo.js" similarity index 100% rename from "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/mathbucks.js" rename to "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/MathiasHidalgo.js" From ef32cd8ef76181c2f1edc069c213566a804df8fb Mon Sep 17 00:00:00 2001 From: mstrnilsson Date: Wed, 11 Oct 2023 21:44:04 +0200 Subject: [PATCH 0143/2103] cambio de nombre fichero --- .../python/MstrNilsson.py" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson_40.py" => "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" (100%) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson_40.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" similarity index 100% rename from "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson_40.py" rename to "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" From 83927f94044361d301111058e2152e438cc472b5 Mon Sep 17 00:00:00 2001 From: mstrnilsson Date: Wed, 11 Oct 2023 21:49:37 +0200 Subject: [PATCH 0144/2103] Reto mouredev#40 - Python --- .../python/MstrNilsson.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" index e379930b1e..561a9b52cb 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" @@ -6,7 +6,7 @@ * 1 x 2 = 2 * 1 x 3 = 3 * ... - """ +""" def MultiplicationTable(n): for i in range(1, 11): From df50ed89a86dbbc9588f92cb26ba25287eaae7d5 Mon Sep 17 00:00:00 2001 From: mstrnilsson Date: Wed, 11 Oct 2023 21:59:39 +0200 Subject: [PATCH 0145/2103] Reto#40 - Python --- .../python/MstrNilsson.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" index 561a9b52cb..e379930b1e 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" @@ -6,7 +6,7 @@ * 1 x 2 = 2 * 1 x 3 = 3 * ... -""" + """ def MultiplicationTable(n): for i in range(1, 11): From aea4f156ae6c9539f2ff310b208e96e807715a29 Mon Sep 17 00:00:00 2001 From: rialfrodriguez Date: Wed, 11 Oct 2023 17:54:48 -0300 Subject: [PATCH 0146/2103] Create rialfrodriguez.java --- .../java/rialfrodriguez.java" | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/rialfrodriguez.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/rialfrodriguez.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/rialfrodriguez.java" new file mode 100644 index 0000000000..cc5820b3e3 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/rialfrodriguez.java" @@ -0,0 +1,35 @@ +package programacion; + +import java.util.Scanner; + +public class rialfrodriguez { + + public static void main(String[] args) { + + int number = askNumber(); + calculateTable (number); + } + + public static int askNumber() { + Scanner sc = new Scanner(System.in); + int number; + do { + System.out.println("Por favor ingrese un numero positivo: "); + while (!sc.hasNextInt()) { + System.out.println("No es un numero!"); + sc.next(); + } + number = sc.nextInt(); + } while (number <= 0); + return number; + } + + public static void calculateTable(int number) { + + System.out.println("Tabla de multiplicar de: " + number); + for(int i = 1; i <= 10; i++) { + String cal = String.format("%d x %d = %d", number, i, (number * i)); + System.out.println(cal); + } + } +} From 719bff6ebaef5f9f713b8426b4d205c4503920c3 Mon Sep 17 00:00:00 2001 From: rialfrodriguez Date: Wed, 11 Oct 2023 17:57:24 -0300 Subject: [PATCH 0147/2103] Retos/[40]/[java]/[rialfrodriguez] --- .../java/rialfrodriguez.java" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/rialfrodriguez.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/rialfrodriguez.java" index cc5820b3e3..f5d34a13b4 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/rialfrodriguez.java" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/rialfrodriguez.java" @@ -1,4 +1,4 @@ -package programacion; +package retosprogramacion; import java.util.Scanner; From ed39bc7f1a564a09ce3cc10323ca9188cb85a528 Mon Sep 17 00:00:00 2001 From: Marcelo Santos Date: Wed, 11 Oct 2023 21:02:26 -0300 Subject: [PATCH 0148/2103] Reto #40 - rust --- .../rust/marcelosantos.rs" | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/rust/marcelosantos.rs" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/rust/marcelosantos.rs" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/rust/marcelosantos.rs" new file mode 100644 index 0000000000..bd625db5bd --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/rust/marcelosantos.rs" @@ -0,0 +1,26 @@ +use std::io; + +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +fn main() { + let mut numero = String::new(); + + println!("Digite um número: "); + + io::stdin() + .read_line(&mut numero) + .expect("Erro ao ler o número"); + let numero = numero.trim().parse::().unwrap(); + + for i in 1..=10 { + println!("{} x {} = {}", numero, i, numero * i); + } +} From dd7828292b5be96bfaae8856e5a5f27cc5aa23f2 Mon Sep 17 00:00:00 2001 From: Marco Torres Date: Wed, 11 Oct 2023 18:45:37 -0700 Subject: [PATCH 0149/2103] Reto #30 - Python --- .../python/marcoatrs.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Retos/Reto #30 - EL TECLADO T9 [Media]/python/marcoatrs.py diff --git a/Retos/Reto #30 - EL TECLADO T9 [Media]/python/marcoatrs.py b/Retos/Reto #30 - EL TECLADO T9 [Media]/python/marcoatrs.py new file mode 100644 index 0000000000..e740fc1978 --- /dev/null +++ b/Retos/Reto #30 - EL TECLADO T9 [Media]/python/marcoatrs.py @@ -0,0 +1,15 @@ +teclado_t9 = [" ", ",.?", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"] + +def convertir_pulsaciones(texto: str) -> str: + pulsaciones = texto.split("-") + salida = "" + for pulsacion in pulsaciones: + if not pulsacion.isdigit(): + print("Formato incorrecto") + return + if not all([c == pulsacion[0] for c in pulsacion]): + print(f"La pulsacion {pulsacion} no es igual") + salida += teclado_t9[int(pulsacion[0])][len(pulsacion) - 1] + return salida + +print(convertir_pulsaciones("6-2-777-222-666-0-2-66-8-666-66-444-666")) From 1b016b23339cd2559e7cda4ad2093bc400e8093f Mon Sep 17 00:00:00 2001 From: Leandro Espino Date: Wed, 11 Oct 2023 21:50:53 -0600 Subject: [PATCH 0150/2103] Reto #40 - java --- .../java/EspinoLeandroo.java" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/EspinoLeandroo.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/EspinoLeandroo.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/EspinoLeandroo.java" new file mode 100644 index 0000000000..1027dd5cd2 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/EspinoLeandroo.java" @@ -0,0 +1,21 @@ +import java.util.Scanner; + +public class EspinoLeandroo { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + // Solicitar al usuario que ingrese un número + System.out.print("Ingresa un número: "); + int numero = scanner.nextInt(); + + // Imprimir la tabla de multiplicar + System.out.println("Tabla de multiplicar del " + numero + ":"); + for (int i = 1; i <= 10; i++) { + int resultado = numero * i; + System.out.println(numero + " x " + i + " = " + resultado); + } + + // Cerrar el scanner + scanner.close(); + } +} From 9b6b254862f8d0d1167dd877dd35152d0c1a2300 Mon Sep 17 00:00:00 2001 From: Gabi Date: Thu, 12 Oct 2023 07:57:14 +0200 Subject: [PATCH 0151/2103] Create icedrek.py --- .../python/icedrek.py" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/icedrek.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/icedrek.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/icedrek.py" new file mode 100644 index 0000000000..83c9b40e0b --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/icedrek.py" @@ -0,0 +1,27 @@ +""" + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... +""" + + +def main(): + try: + inputNumber = int(input("Introduce un numero: ")) + + except ValueError: + print("ERROR: El valor introducido debe ser un número entero.") + return + + + + for _ in range(1, 11): + print(f"{inputNumber} x {_} = {inputNumber * _}") + + +if __name__ == "__main__": + main() From 62299f02cd21ba05d5b65d120b00c710b04c46dc Mon Sep 17 00:00:00 2001 From: Juan Pablo Patino Lopez Date: Thu, 12 Oct 2023 11:13:57 +0200 Subject: [PATCH 0152/2103] Juanppdev - Reto #40- python --- .../python/juanppdev.py" | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/juanppdev.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/juanppdev.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/juanppdev.py" new file mode 100644 index 0000000000..e5a257c5a1 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/juanppdev.py" @@ -0,0 +1,4 @@ +n = int(input("Ingrese el número de la tabla de multiplicar ")) + +for i in range(1,10+1): + print(n, "x", i, "=", n*i) \ No newline at end of file From 94cb590af4d23ed783394156838c78187f56b1ca Mon Sep 17 00:00:00 2001 From: oniricoh <46753856+oniricoh@users.noreply.github.com> Date: Thu, 12 Oct 2023 10:42:30 +0100 Subject: [PATCH 0153/2103] Retos/Reto #40/python/oniricoh.py --- .../python/oniricoh.py" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/oniricoh.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/oniricoh.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/oniricoh.py" new file mode 100644 index 0000000000..6978f6a2b5 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/oniricoh.py" @@ -0,0 +1,21 @@ +""" +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + + """ + +Tabla = int(input("¿Que tabla quieres aprender?:")) + +print(f"\n\nLa tabla del {Tabla} es la siguiente:", end = '\n\n') + +sol = 0 +for i in range(0, 11): + sol = i * Tabla + print(Tabla, "*", i, "=", sol) From b10bcdb572b8b82d543d73354ac30692f5a1ad55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex?= Date: Thu, 12 Oct 2023 12:15:42 +0200 Subject: [PATCH 0154/2103] Reto #38 - javascript --- .../javascript/alexgarcia.js | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/javascript/alexgarcia.js diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/javascript/alexgarcia.js b/Retos/Reto #38 - LAS SUMAS [Media]/javascript/alexgarcia.js new file mode 100644 index 0000000000..fe2a65c4f9 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/javascript/alexgarcia.js @@ -0,0 +1,31 @@ +function find_sums(numbers, target) { + // Sort numbers and filter in case we have negative numbers + let sortedAndFilteredNumbers = numbers.sort().filter((number) => { + return number > 0 + }) + if (sortedAndFilteredNumbers.length === 0) return [] + + function find_sum(start, target, combination) { + // find solution + if (target === 0) { + result.push([...combination]) + } + + // backtracking + for (let i = start; i < sortedAndFilteredNumbers.length; i++) { + if (i > start && sortedAndFilteredNumbers[i] === sortedAndFilteredNumbers[i - 1]) { + continue + } + + combination.push(sortedAndFilteredNumbers[i]); + find_sum(i + 1, target - sortedAndFilteredNumbers[i], combination); + combination.pop(); + } + } + + let result = [] + find_sum(0, target, []) + return result +} + +console.log(find_sums([1, 5, 2, 2, 1, 1], 6)) \ No newline at end of file From 85b0bdb801821c05de8d2d7c6721f44bc2481658 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vanesa=20P=C3=A9rez?= Date: Thu, 12 Oct 2023 12:31:46 +0200 Subject: [PATCH 0155/2103] Reto #1 - Python --- .../python/vanesaprz.py" | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/vanesaprz.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/vanesaprz.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/vanesaprz.py" new file mode 100644 index 0000000000..3610299d2b --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/vanesaprz.py" @@ -0,0 +1,68 @@ +""" +# Reto #1: EL "LENGUAJE HACKER" +#### Dificultad: Fácil | Publicación: 02/01/23 | Corrección: 09/01/23 + +## Enunciado +/* + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + */ +""" +#creación de diccionario leet conteniendo las equivalencias. +leet= { + + "a": "4", + "b": "I3", + "c":"[", + "d":")", + "e":"3", + "f":"|=", + "g":"&", + "h":"#", + "i":"1", + "j":",_|", + "k":">|", + "l":"1", + "m": "/\/\ ", + "n":"^/", + "o":"0", + "P":"|*", + "q":"(_,)", + "r":"I2", + "s":"5", + "t":"7", + "u":"(_)", + "v":"\/", + "w":"\/\/", + "x":"><", + "y":"j", + "z":"2", + "1":"L", + "2":"R", + "3":"E", + "4":"A", + "5":"S", + "6":"b", + "7":"T", + "8":"B", + "9":"g", + "0":"o", +} + +def translate_to_leet(text:str) -> str: + in_leet= "" #empty list en la que se guardará la traducción. + for letter in text.lower(): #se convierten las letras a minúsculas para poder compararlas con el diccionario + try: + in_leet += leet[letter] #se añaden las traducciones a la lista vacía. + except KeyError: + in_leet += letter #En caso de que se emplee una letra/símbolo no incluidos en el diccionario, se incluirá el símbolo tal cual + return in_leet + +texto=input("Indica el texto a traducir a leet: ") + +print(translate_to_leet(texto)) + From 37c5ab6193cdc8c3d124fb7ef659cd545957f9e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex?= Date: Thu, 12 Oct 2023 12:49:32 +0200 Subject: [PATCH 0156/2103] Reto #40 - javascript --- .../javascript/alexgarcia.js" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alexgarcia.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alexgarcia.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alexgarcia.js" new file mode 100644 index 0000000000..c631d0d47a --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alexgarcia.js" @@ -0,0 +1,22 @@ +const prompt = require("prompt-sync")(); + +// Ask and validate whether is a number +function askAndValidateNumber() { + let number = parseInt(prompt("Ingrese un valor para imprimir su tabla de multiplicar del 1 hasta el 10: ")); + + if (typeof number === 'number' && !isNaN(number)) { + generateMultiplicationTable(number); + } else { + console.log("Debes ingresar un numero.") + } +} + +// Generate multiplication table for entered number +function generateMultiplicationTable(number) { + for (let i = 1; i <= 10; i++) { + let multiplicationResult = number * i + console.log(`${number} x ${i} = ${multiplicationResult}`) + } +} + +askAndValidateNumber() \ No newline at end of file From 823db0b26132c39b04dba4a685d0bd86254f72bb Mon Sep 17 00:00:00 2001 From: deathiwng Date: Thu, 12 Oct 2023 15:30:36 +0200 Subject: [PATCH 0157/2103] Reto #20 - C# --- .../c#/deathwing696.cs | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 Retos/Reto #20 - LA TRIFUERZA [Media]/c#/deathwing696.cs diff --git a/Retos/Reto #20 - LA TRIFUERZA [Media]/c#/deathwing696.cs b/Retos/Reto #20 - LA TRIFUERZA [Media]/c#/deathwing696.cs new file mode 100644 index 0000000000..47af855cf3 --- /dev/null +++ b/Retos/Reto #20 - LA TRIFUERZA [Media]/c#/deathwing696.cs @@ -0,0 +1,95 @@ +/* + * El nuevo "The Legend of Zelda: Tears of the Kingdom" ya est disponible! + * + * Crea un programa que dibuje una Trifuerza de "Zelda" + * formada por asteriscos. + * - Debes indicarle el nmero de filas de los tringulos con un entero positivo (n). + * - Cada tringulo calcular su fila mayor utilizando la frmula 2n-1. + * + * Ejemplo: Trifuerza 2 + * + * * + * *** + * * * + * *** *** + * + */ + +using System; + +namespace deathwing696 +{ + public class Deathwing696 + { + static void Main(string[] args) + { + Console.Write("Introduce el nmero de pisos que tendrn los tringulos de la trifuerza:"); + + int pisos; + + if (Int32.TryParse(Console.ReadLine(), out pisos)) + { + DibujarTrifuerza(pisos); + } + else + { + Console.WriteLine("Lo introducido no es un nmero...fin del programa"); + } + + Console.ReadKey(); + } + + private static void DibujarTrifuerza(int pisos) + { + Dibuja_triangulo_arriba(pisos); + Dibuja_triangulos_abajo(pisos); + + } + + private static void Dibuja_triangulo_arriba(int pisos) + { + for (int i = 0; i < pisos; i++) + { + for (int j = 0; j < (2 * pisos - 1) - i; j++) + { + Console.Write(' '); + } + + for (int j = 0; j < (2 * i) + 1; j++) + { + Console.Write('*'); + } + + Console.WriteLine(); + } + } + + private static void Dibuja_triangulos_abajo(int pisos) + { + for (int i = 0; i < pisos; i++) + { + for (int j = 0; j < pisos - 1 - i; j++) + { + Console.Write(' '); + } + + for (int j = 0; j < (2 * i) + 1; j++) + { + Console.Write('*'); + } + + for (int j = 0; j < 2 * pisos - 1 - 2 * i; j++) + { + Console.Write(' '); + } + + for (int j = 0; j < (2 * i) + 1; j++) + { + Console.Write('*'); + } + + Console.WriteLine(); + } + } + } +} \ No newline at end of file From 051f1b6709bd41334e6c8e71e9cfd7dec19eb9aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vanesa=20P=C3=A9rez?= Date: Thu, 12 Oct 2023 15:32:40 +0200 Subject: [PATCH 0158/2103] Reto #2 - Python --- .../python/vanesaprz.py | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/vanesaprz.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/vanesaprz.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/vanesaprz.py new file mode 100644 index 0000000000..536866d713 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/vanesaprz.py @@ -0,0 +1,121 @@ +# Reto #2: EL PARTIDO DE TENIS +#### Dificultad: Media | Publicación: 09/01/23 | Corrección: 16/01/23 + +## Enunciado + +""" +/* + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ +""" + +#La idea es que mi programa va a ir solicitando quien gana los puntos uno a uno, hasta que uno de los jugadores gane. + +def gana_punto (): #Solicita el jugador que ha ganado el punto al usuario. + + while True: #se comprueba que el input es válido, comparándolo con P1 y P2. + puntuador = input ("Qué jugador ha ganado el punto? (P1/P2): ") + if puntuador == "P1" or puntuador =="P2": + break + else: #Si no es válido, se introduce un mensaje de error y se vuelve a preguntar. + print("No has indicado el jugador correctamente. ") + return puntuador + + +def actualizar_puntos (puntuador, p_j1, p_j2): + #comprueba quien ha ganado punto y actualiza las puntuaciones + if puntuador == "P1": + p_j1 += 1 + else: + p_j2 +=1 + + return p_j1, p_j2 + +def in_duece (p_j1, p_j2): #comprueba si hemos llegado a un punto en el que ha habido deuce al menos una vez. A partir de aquí será siempre deuce o ventaja + if p_j1 >=3 and p_j2 >=3: + return True + else: + return False + +def imprimir_marcador (p_j1, p_j2): + #funcion encargada de imprimir el marcador. Recibe la puntuación de ambos jugadores. + duece = in_duece(p_j1, p_j2) + if not duece: + #si no hay deuce o ventaja, simplemente muestra el marcador normal según los posibles ["Love", "15", "30", "40"] + print (f"{posibles[p_j1]} - {posibles[p_j2]}") + + #Si ya ha habido deuce, compara las puntuaciones: + elif p_j1 == p_j2: + print("Deuce") + elif p_j1 > p_j2: + print("Ventajan P1") + else: + print ("Ventaja_P2") + + +def comprueba_ganador(p_j1, p_j2): #Comprueba si se dan las condiciones para que alguno de los jugadores haya ganado. Recibe ambas puntuaciones. + + #en caso de ganador, imprime quien ha ganado y devuelve True + if (p_j2 - p_j1 >= 2 ) and p_j2 >3: + print("Ha ganado el P2") + return True + + elif (p_j1 - p_j2 >= 2 ) and p_j1 >3: + print("Ha ganado el P1") + return True + + #si nadie ha ganado, devuelve falso. + else: + return False + + + +#posibles puntuaciones antes de deuce +posibles= ["Love", "15", "30", "40"] + +#desarrollo del juego: + +puntos_j1 = 0 +puntos_j2 = 0 + +hay_ganador = False + +while not hay_ganador: + puntuador = gana_punto() #tenemos el jugador que gana el punto P1 o P2 + puntos_j1, puntos_j2 = actualizar_puntos(puntuador, puntos_j1, puntos_j2) #se suma el punto al jugador que corresponda + hay_ganador = comprueba_ganador(puntos_j1, puntos_j2) + #si esta función devuelve True, se nos indica que hay un ganador y por lo tanto, saldríamos del loop y se acaba el partido. + + if not hay_ganador: #si no hay ganador, imprimimos marcador y seguimos en loop. + imprimir_marcador(puntos_j1, puntos_j2) + + + + + + + + + + + + + + + + \ No newline at end of file From 974db1c7722a6a9d5682e7ab5c002dd3ccaccce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20Silanes?= Date: Thu, 12 Oct 2023 17:23:57 +0200 Subject: [PATCH 0159/2103] Reto #38 - Python --- .../python/isilanes.py | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/isilanes.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/isilanes.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/isilanes.py new file mode 100644 index 0000000000..418ffeddc1 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/isilanes.py @@ -0,0 +1,77 @@ +# Solution to Reto #38 - LAS SUMAS. +from typing import Optional + + +def grow(initial: list[int], remaining: list[int], left: int) -> list[tuple[list, Optional[list], int]]: + """ + Dadas dos lista de enteros 'initial' y 'remaining', y un entero 'left', devolver todas las tuplas + (a, b, c), tales que: + - a: lista compuesta por la adición a 'initial' de UN elemento 'x' de 'remaining' tal que x <= left + - b: lista compuesta por los elementos de 'remaining' a la derecha de 'x' + - c: resultante de restar 'x' a 'left' + + Args: + initial (list): lista de enteros que queremos crecer en un elemento. + remaining (list): lista de enteros de la que tomaremos un elemento + para añadir a 'initial'. + left (int): entero cuyo valor no puede sobrepasar el elemento + de 'remaining' que añadamos a 'initial'. + + Returns: + Conjunto de todos los tríos de valores (a, b, c) que cumplan las condiciones expuestas. + """ + results = [] + for i, value in enumerate(remaining): + if value > left: + break + + new_initial = initial + [value] # no uso list.append() pq quiero copiar, no modificar in place + new_remaining = [] if value == left else remaining[i+1:] + new_left = left - value + results.append((new_initial, new_remaining, new_left)) + + return results + + +def run(numbers: list[int], target: int, verbose: bool = False) -> list: + """ + Resuelve el problema. + """ + so_far = [([], sorted(numbers), target)] + + growth = True + while growth: + growth = False + new_so_far = [] + for combo in so_far: + # Los combos que ya están bien, los dejamos tal cual: + if combo[-1] == 0 and combo not in new_so_far: + new_so_far.append(combo) + continue + + # Los combos que pueden crecer, los hacemos crecer: + new = grow(*combo) + if new: + growth = True + + for new_combo in new: + new_so_far.append(new_combo) + + so_far = new_so_far + + result = [c[0] for c in so_far] + + if verbose: + print(f"Requested target '{target}' from list '{numbers}'.\nResults:") + for combo in result: + print(combo) + + return result + + +if __name__ == "__main__": + run(numbers=[1, 5, 3, 2], target=4, verbose=True) + run(numbers=[1, 5, 3, 2, 2, 4, 1], target=4, verbose=True) + run(numbers=[1, 1, 1, 2, 2, 2], target=3, verbose=True) + + From b11eae32b107d36ffc09b54ea7cd73bdca6d4615 Mon Sep 17 00:00:00 2001 From: burdas Date: Thu, 12 Oct 2023 17:39:12 +0200 Subject: [PATCH 0160/2103] Reto #40 - Python --- .../python/burdas.py" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/burdas.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/burdas.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/burdas.py" new file mode 100644 index 0000000000..a6218dd0b1 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/burdas.py" @@ -0,0 +1,20 @@ +# /* +# * Crea un programa que sea capaz de solicitarte un número y se +# * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. +# * - Debe visualizarse qué operación se realiza y su resultado. +# * Ej: 1 x 1 = 1 +# * 1 x 2 = 2 +# * 1 x 3 = 3 +# * ... +# */ + +def tabla10(num: int): + try: + num = int(num) + + for i in range(1, 11): + print(f"{num} x {i} = {i*num}") + except ValueError: + print("El número introducido no es un valor entero") + +tabla10(input("Introduce el número a multiplicar por la tabla del 10: ")) \ No newline at end of file From b8f8ab3f3d78f62d3bb7c83c3c519003c189e711 Mon Sep 17 00:00:00 2001 From: Jordi Ayala Date: Thu, 12 Oct 2023 09:49:28 -0600 Subject: [PATCH 0161/2103] Reto #40 - Java --- .../java/asjordi.java" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/asjordi.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/asjordi.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/asjordi.java" new file mode 100644 index 0000000000..81a5d9b55f --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/asjordi.java" @@ -0,0 +1,10 @@ +public class MultiplicationTable { + + public void calculate(int n){ + + for (int i = 1; i <= 10; i++) { + System.out.printf("%d x %d = %d%n", n, i, n * i); + } + } + +} From 42607a61c8bf40c404652d6fa632e81a2dc2a64c Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Thu, 12 Oct 2023 10:00:02 -0700 Subject: [PATCH 0162/2103] reto #40 - go --- .../go/KevinED11.go" | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/go/KevinED11.go" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/go/KevinED11.go" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/go/KevinED11.go" new file mode 100644 index 0000000000..f79d61ad0b --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/go/KevinED11.go" @@ -0,0 +1,48 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strconv" + "strings" +) + +type MultiplicationTableWriterFunc func(number int) + +func writeMultiplicationTable(number int) { + for n := 1; n <= 10; n++ { + fmt.Printf("%d x %d = %d\n", number, n, number*n) + } +} +func convertUserInputToInt(input string) (int, error) { + return strconv.Atoi(input) +} +func readUserInput() (int, error) { + fmt.Println("Enter a number: ") + + reader := bufio.NewReader(os.Stdin) + input, err := reader.ReadString('\n') + + if err != nil { + return 0, err + } + + input = strings.TrimSpace(input) + + return convertUserInputToInt(input) +} + +func execute(writerFunc MultiplicationTableWriterFunc) { + input, err := readUserInput() + if err != nil { + fmt.Println(err) + return + } + + writerFunc(input) +} + +func main() { + execute(writeMultiplicationTable) +} From 5fdc33dbce6d9bb6961034474d46e6694915efc4 Mon Sep 17 00:00:00 2001 From: Diego Dominguez Date: Thu, 12 Oct 2023 15:09:26 -0300 Subject: [PATCH 0163/2103] solucion reto 40 --- .../java/diegobackdev.java" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/diegobackdev.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/diegobackdev.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/diegobackdev.java" new file mode 100644 index 0000000000..a313e03fc8 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/diegobackdev.java" @@ -0,0 +1,23 @@ +import java.util.Scanner; + +/* RETO 40: TABLA DE MULTIPLICAR + * Crea un programa que sea capaz de solicitarte un número y se encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +class diegobackdev { + public static void main(String[] args) { + Scanner read = new Scanner(System.in); + System.out.print("Input a number: "); + int number = read.nextInt(); + + for (int i = 1; i<=10; i++) { + System.out.println(number + " x " + i + " = " + number*i); + } + } + +} \ No newline at end of file From a56cad3727099e9c6e04a96b9d5d9717dce7ab3e Mon Sep 17 00:00:00 2001 From: mlarrarte Date: Thu, 12 Oct 2023 20:17:42 +0200 Subject: [PATCH 0164/2103] first_commit --- .../python/garbanzo.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/garbanzo.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/garbanzo.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/garbanzo.py new file mode 100644 index 0000000000..f1991fe8ac --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/garbanzo.py @@ -0,0 +1,30 @@ +def find_sums(numbers: list, target: int) -> list: + + def find_sum(start: int, target: int, combination: list): + + # Solución encontrada + if target == 0: + result.append(combination[:]) + return + + # No posee solución + if target < 0 or start == len(numbers): + return + + # Búsqueda + for index in range(start, len(numbers)): + + if index > start and numbers[index] == numbers[index - 1]: + continue + + combination.append(numbers[index]) + find_sum(index + 1, target - numbers[index], combination) + combination.pop() + + numbers.sort() + result = [] + find_sum(0, target, []) + return result + +result = find_sums([1, 5, 3, 2], 6) +print(result) From 7422a390cfa51af36a191b09338e03e6f9b52632 Mon Sep 17 00:00:00 2001 From: mlarrarte Date: Thu, 12 Oct 2023 22:30:01 +0200 Subject: [PATCH 0165/2103] Reto mouredev#40 - Python --- .../python/mlarrarte.py" | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mlarrarte.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mlarrarte.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mlarrarte.py" new file mode 100644 index 0000000000..9bea690ff6 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mlarrarte.py" @@ -0,0 +1,19 @@ +''' + Crea un programa que sea capaz de solicitarte un número y se + encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + - Debe visualizarse qué operación se realiza y su resultado. + Ej: 1 x 1 = 1 + 1 x 2 = 2 + 1 x 3 = 3 + ... + ''' + +def mul_table(num: int): + for i in range(1, 11): + print(f"{num} x {i} = {num * i}\n") + + +if __name__ == "__main__": + num = int(input("Welcome! Please enter a number to print its multiplication table:")) + mul_table(num) + print("Have a nice day!") From ca251de92330f760b697af286a6a99bf9bd1a75d Mon Sep 17 00:00:00 2001 From: mlarrarte Date: Thu, 12 Oct 2023 22:35:05 +0200 Subject: [PATCH 0166/2103] Deleted file --- .../python/garbanzo.py | 30 ------------------- 1 file changed, 30 deletions(-) delete mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/garbanzo.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/garbanzo.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/garbanzo.py deleted file mode 100644 index f1991fe8ac..0000000000 --- a/Retos/Reto #38 - LAS SUMAS [Media]/python/garbanzo.py +++ /dev/null @@ -1,30 +0,0 @@ -def find_sums(numbers: list, target: int) -> list: - - def find_sum(start: int, target: int, combination: list): - - # Solución encontrada - if target == 0: - result.append(combination[:]) - return - - # No posee solución - if target < 0 or start == len(numbers): - return - - # Búsqueda - for index in range(start, len(numbers)): - - if index > start and numbers[index] == numbers[index - 1]: - continue - - combination.append(numbers[index]) - find_sum(index + 1, target - numbers[index], combination) - combination.pop() - - numbers.sort() - result = [] - find_sum(0, target, []) - return result - -result = find_sums([1, 5, 3, 2], 6) -print(result) From b45fc3509a2e1310b255f38328c77bbfb54a53a7 Mon Sep 17 00:00:00 2001 From: mlarrarte Date: Thu, 12 Oct 2023 22:37:50 +0200 Subject: [PATCH 0167/2103] Reto mouredev#40 Python --- .../python/mlarrarte.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mlarrarte.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mlarrarte.py" index 9bea690ff6..1fd94d9eb2 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mlarrarte.py" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mlarrarte.py" @@ -16,4 +16,4 @@ def mul_table(num: int): if __name__ == "__main__": num = int(input("Welcome! Please enter a number to print its multiplication table:")) mul_table(num) - print("Have a nice day!") + print("Have a nice day!\n") From d0c8c05710ce2b10539626d3e89c8efc29b08ee6 Mon Sep 17 00:00:00 2001 From: deathiwng Date: Thu, 12 Oct 2023 23:18:10 +0200 Subject: [PATCH 0168/2103] Reto #21 - C# --- .../c#/deathwing696.cs" | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 "Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/c#/deathwing696.cs" diff --git "a/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/c#/deathwing696.cs" "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/c#/deathwing696.cs" new file mode 100644 index 0000000000..15030bcb9a --- /dev/null +++ "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/c#/deathwing696.cs" @@ -0,0 +1,75 @@ +/* + * Crea un programa que encuentre y muestre todos los pares de nmeros primos + * gemelos en un rango concreto. + * El programa recibir el rango mximo como nmero entero positivo. + * + * - Un par de nmeros primos se considera gemelo si la diferencia entre + * ellos es exactamente 2. Por ejemplo (3, 5), (11, 13) + * + * - Ejemplo: Rango 14 + * (3, 5), (5, 7), (11, 13) + */ + +using System; +using System.Collections.Generic; + + +namespace reto21 +{ + public class Reto21 + { + static void Main(string[] args) + { + int rango = 14; + List list = new List(); + List> gemelos = new List>(); + + list = Get_primos_menores_rango(rango); + + for (int i = 0; i < list.Count - 1; i++) + { + if (list[i + 1] - list[i] == 2) + { + var par = new List() { list[i], list[i + 1] }; + gemelos.Add(par); + } + } + + Console.WriteLine($"Rango {rango}"); + + for (int i = 0; i < gemelos.Count; i++) + { + Console.Write($"({gemelos[i][0]}, {gemelos[i][1]})"); + + if (i < gemelos.Count - 1) + Console.Write(", "); + } + + Console.ReadKey(); + } + + private static List Get_primos_menores_rango(int rango) + { + var primos = new List(); + + for (int i = 1; i <= rango; i++) + { + bool primo = false; + + for (int j = i - 1; j >= 2; j--) + { + if (i % j == 0) + { + primo = true; + break; + } + } + + if (!primo) + primos.Add(i); + } + + return primos; + } + } +} \ No newline at end of file From b3746718a18320dbb8a684a52287a461f5e1220a Mon Sep 17 00:00:00 2001 From: deathiwng Date: Thu, 12 Oct 2023 23:44:50 +0200 Subject: [PATCH 0169/2103] Reto #23 - C# --- .../c#/deathwing696.cs | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Retos/Reto #23 - LA BASE DE DATOS [Media]/c#/deathwing696.cs diff --git a/Retos/Reto #23 - LA BASE DE DATOS [Media]/c#/deathwing696.cs b/Retos/Reto #23 - LA BASE DE DATOS [Media]/c#/deathwing696.cs new file mode 100644 index 0000000000..ad8083203b --- /dev/null +++ b/Retos/Reto #23 - LA BASE DE DATOS [Media]/c#/deathwing696.cs @@ -0,0 +1,65 @@ +/* + * Realiza una conexin desde el lenguaje que hayas seleccionado a la siguiente base de datos MySQL: + * - Host: mysql-5707.dinaserver.com + * - Port: 3306 + * - User: mouredev_read + * - Password: mouredev_pass + * - Database: moure_test + * + * Una vez realices la conexin, lanza la siguiente consulta e imprime el resultado: + * - SELECT * FROM `challenges` + * + * Se pueden usar libreras para realizar la lgica de conexin a la base de datos. + */ + +using System; +using MySql.Data.MySqlClient; + +namespace Reto23 +{ + public class Reto23 + { + static void Main(string[] args) + { + string connectionString = "Server=mysql-5707.dinaserver.com;Database=moure_test;Port=3306;User ID=mouredev_read;Password=mouredev_pass"; + + using (MySqlConnection connection = new MySqlConnection(connectionString)) + { + try + { + // Abrir la conexin + connection.Open(); + + // Realizar operaciones en la base de datos aqu + + // Ejemplo: Obtener datos de una tabla + using (MySqlCommand command = new MySqlCommand("SELECT * FROM challenges", connection)) + { + using (MySqlDataReader reader = command.ExecuteReader()) + { + int num_columnas = reader.FieldCount; + + while (reader.Read()) + { + for (int i = 0; i < num_columnas; i++) + { + Console.Write($"{reader[i].ToString()} | "); + } + + Console.WriteLine(); + } + } + } + + connection.Close(); + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + } + } + + Console.ReadKey(); + } + } +} \ No newline at end of file From c1a43ff35ab73646d8e648a2d6021d5a901f1ea0 Mon Sep 17 00:00:00 2001 From: DayronBG <139827189+DayronbermudezG@users.noreply.github.com> Date: Thu, 12 Oct 2023 17:58:37 -0400 Subject: [PATCH 0170/2103] Reto #40 - C++ --- .../c++/DayronbermudezG.cpp" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c++/DayronbermudezG.cpp" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c++/DayronbermudezG.cpp" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c++/DayronbermudezG.cpp" new file mode 100644 index 0000000000..1ec014d699 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c++/DayronbermudezG.cpp" @@ -0,0 +1,31 @@ +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +#include + +int main() +{ + int num; + + do { + + std::cout << "Ingrese un numero: "; std::cin >> n; + std::cout << std::endl; + + for(int i=0;i<=10;i++) { + + std::cout << n << " x " << i << " = "<< n*i << std::endl; + } + std::cout << std::endl; + + } while(true); + + return 0; +} From 6f138a93766f32ef91cfdf435d9e8a1dcf66e0fa Mon Sep 17 00:00:00 2001 From: deathiwng Date: Fri, 13 Oct 2023 00:36:59 +0200 Subject: [PATCH 0171/2103] Reto #24 - C# MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maldita "ñ" --- .../c#/deathwing696.cs" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/c#/deathwing696.cs" diff --git "a/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/c#/deathwing696.cs" "b/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/c#/deathwing696.cs" new file mode 100644 index 0000000000..2ff5652303 --- /dev/null +++ "b/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/c#/deathwing696.cs" @@ -0,0 +1,65 @@ +/* + * Crea un programa que realize el cifrado Csar de un texto y lo imprima. + * Tambin debe ser capaz de descifrarlo cuando as se lo indiquemos. + * + * Te recomiendo que busques informacin para conocer en profundidad cmo + * realizar el cifrado. Esto tambin forma parte del reto. + */ + +using System; + +namespace reto24 +{ + public class Reto24 + { + static void Main(string[] args) + { + int desplazamiento = 3; + string texto = "Con diez caones por banda,\r\nviento en popa a toda vela,\r\nno corta el mar, sino vuela\r\nun velero bergantin; "; + string texto_cifrado = "Frq glhc fdrqhv sru edqgd, \r\nylhqwr hq srsd d wrgd yhod, \r\nqr fruwd ho pdu, vlqr yxhod \r\nxq yhohur ehujdqwlq;"; + + Console.WriteLine($"Texto:\r\n{texto}"); + Console.WriteLine($"Texto cifrado:\r\n{Cifra_texto(desplazamiento, texto)}"); + Console.WriteLine($"Texto descifrado:\r\n{Descifra_texto(desplazamiento, texto_cifrado)}"); + + Console.ReadKey(); + } + + private static string Cifra_texto(int desplazamiento, string texto) + { + string texto_cifrado = ""; + + foreach (var caracter in texto) + { + if (caracter == '') + { + texto_cifrado += caracter; + } + else if (char.IsLetter(caracter)) + { + int codigoAscii; + + if (char.IsUpper(caracter)) + codigoAscii = ((int)caracter - (int)'A' + desplazamiento + 26) % 26 + (int)'A'; + else + codigoAscii = ((int)caracter - (int)'a' + desplazamiento + 26) % 26 + (int)'a'; + + char letra_codificada = (char)codigoAscii; + + texto_cifrado += letra_codificada; + } + else + { + texto_cifrado += caracter; + } + } + + return texto_cifrado; + } + + private static string Descifra_texto(int desplazamiento, string texto) + { + return Cifra_texto(-desplazamiento, texto); + } + } +} \ No newline at end of file From 8e148a766be89a6a60fd1083c9393f9b21a71e04 Mon Sep 17 00:00:00 2001 From: deathiwng Date: Fri, 13 Oct 2023 00:56:32 +0200 Subject: [PATCH 0172/2103] Reto #25 - C# --- .../c#/deathwing696.cs" | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 "Retos/Reto #25 - EL C\303\223DIGO KONAMI [Media]/c#/deathwing696.cs" diff --git "a/Retos/Reto #25 - EL C\303\223DIGO KONAMI [Media]/c#/deathwing696.cs" "b/Retos/Reto #25 - EL C\303\223DIGO KONAMI [Media]/c#/deathwing696.cs" new file mode 100644 index 0000000000..13073cc7bb --- /dev/null +++ "b/Retos/Reto #25 - EL C\303\223DIGO KONAMI [Media]/c#/deathwing696.cs" @@ -0,0 +1,78 @@ +/* + * Crea un programa que detecte cuando el famoso "Cdigo Konami" se ha introducido correctamente + * desde el teclado. Si sucede esto, debe notificarse mostrando un mensaje en la terminal. + */ + +using System; + +namespace reto25 +{ + public class Reto25 + { + static void Main(string[] args) + { + bool codigo_konami = false; + + do + { + var tecla = Console.ReadKey(); + + if (tecla.Key == ConsoleKey.UpArrow) + { + tecla = Console.ReadKey(); + + if (tecla.Key == ConsoleKey.UpArrow) + { + tecla = Console.ReadKey(); + + if (tecla.Key == ConsoleKey.DownArrow) + { + tecla = Console.ReadKey(); + + if (tecla.Key == ConsoleKey.DownArrow) + { + tecla = Console.ReadKey(); + + if (tecla.Key == ConsoleKey.LeftArrow) + { + tecla = Console.ReadKey(); + + if (tecla.Key == ConsoleKey.RightArrow) + { + tecla = Console.ReadKey(); + + if (tecla.Key == ConsoleKey.LeftArrow) + { + tecla = Console.ReadKey(); + + if (tecla.Key == ConsoleKey.RightArrow) + { + tecla = Console.ReadKey(); + + if (tecla.Key == ConsoleKey.B) + { + tecla = Console.ReadKey(); + + if (tecla.Key == ConsoleKey.A) + { + codigo_konami = true; + } + } + } + } + } + } + } + } + } + } + + } while (!codigo_konami); + + Console.WriteLine(); + Console.WriteLine("Enhorabuena! Has introducido el cdigo Konami"); + + Console.ReadKey(); + } + } +} \ No newline at end of file From 58d6e6c19bc091ab25235c4af8df1ef4c42564e1 Mon Sep 17 00:00:00 2001 From: jmedinac1987 Date: Thu, 12 Oct 2023 18:16:29 -0500 Subject: [PATCH 0173/2103] Reto #40 - JavaScript --- .../javascript/jmedinac1987.js" | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/jmedinac1987.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/jmedinac1987.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/jmedinac1987.js" new file mode 100644 index 0000000000..17665d7f33 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/jmedinac1987.js" @@ -0,0 +1,37 @@ +function ask() { + process.stdout.write( + "Ingresa el número del cual deseas conocer su tabla de multiplicar: \n" + ); +} + +function getMultiplicationTable(userNumber) { + let answers = ""; + + for (let index = 1; index <= 10; index++) { + answers += `${userNumber} X ${index} = ${userNumber * index} \n`; + } + + return answers; +} + +process.stdin.on("data", (data) => { + try { + let userNumber = parseFloat(data.toString().trim()); + + if (isNaN(userNumber)) { + console.log("Debes ingresar un valor numérico"); + process.exit(); + } + + console.log( + `\n-----------TABLA DE MULTIPLICAR DEL NÚMERO ${userNumber}-----------\n` + ); + console.log(getMultiplicationTable(userNumber)); + process.exit(); + } catch (error) { + console.error(error); + process.exit(); + } +}); + +ask(); From 5088df814f52ffb1da5533df10c02eba76f050fd Mon Sep 17 00:00:00 2001 From: deathiwng Date: Fri, 13 Oct 2023 01:20:50 +0200 Subject: [PATCH 0174/2103] Reto #26 - C# --- .../c#/deathwing696.cs | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Retos/Reto #26 - TESTING [Media]/c#/deathwing696.cs diff --git a/Retos/Reto #26 - TESTING [Media]/c#/deathwing696.cs b/Retos/Reto #26 - TESTING [Media]/c#/deathwing696.cs new file mode 100644 index 0000000000..47f34e54e4 --- /dev/null +++ b/Retos/Reto #26 - TESTING [Media]/c#/deathwing696.cs @@ -0,0 +1,50 @@ +/* + * Crea tres test sobre el reto 12: "Viernes 13". + * - Puedes copiar una solucin ya creada por otro usuario en + * el lenguaje que ests utilizando. + * - Debes emplear un mecanismo de ejecucin de test que posea + * el lenguaje de programacin que hayas seleccionado. + * - Los tres test deben de funcionar y comprobar + * diferentes situaciones (a tu eleccin). + */ + +using System; +using NUnit.Framework; +using reto_26; + +namespace reto26 +{ + [TestFixture] + public class Reto26 + { + [Test] + public void Test_existe_viernes_13() + { + var viernes13 = new Viernes13(); + + bool tiene_viernes_13 = viernes13.Tiene_viernes_13(2023, 1); + + Assert.IsTrue(tiene_viernes_13); + } + + [Test] + public void Test_no_existe_viernes_13() + { + var viernes13 = new Viernes13(); + + bool tiene_viernes_13 = viernes13.Tiene_viernes_13(2023, 9); + + Assert.IsFalse(tiene_viernes_13); + } + + [Test] + public void Test_viernes_13_anyo_bisiesto() + { + var viernes13 = new Viernes13(); + + bool tiene_viernes_13 = viernes13.Tiene_viernes_13(2024, 9); + + Assert.IsTrue(tiene_viernes_13); + } + } +} \ No newline at end of file From fa09825c09038259990a85f03078005775633101 Mon Sep 17 00:00:00 2001 From: jmedinac1987 Date: Thu, 12 Oct 2023 19:08:07 -0500 Subject: [PATCH 0175/2103] Reto #40 - Java --- .../java/jmedinac1987.java" | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/jmedinac1987.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/jmedinac1987.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/jmedinac1987.java" new file mode 100644 index 0000000000..65d21b2a06 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/jmedinac1987.java" @@ -0,0 +1,39 @@ +import java.util.Scanner; + +public class MultiplicationTable { + + private static double userNumber = 0; + private static Scanner sc = new Scanner(System.in); + + public static void main(String[] args) { + if (readNumber()) { + printMultiplicationTable(); + } + } + + private static boolean readNumber() { + try { + System.out.println("Enter the number for which you want to know its multiplication table: \n"); + userNumber = sc.nextDouble(); + sc.close(); + return true; + } catch (Exception e) { + System.out.println("Error: please verify the data entered and try again"); + sc.close(); + return false; + } + + } + + private static void printMultiplicationTable() { + try { + System.out.println("\n-----------MULTIPLICATION TABLE OF NUMBER " + userNumber +"-----------\n"); + for (int i = 1; i <= 10; i++) { + System.out.println(userNumber + " x " + i + " = " + (userNumber * i)); + } + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + } + } + +} \ No newline at end of file From 794a06eb14fbed509ce28661733618fc460f6312 Mon Sep 17 00:00:00 2001 From: Leandro Espino Date: Thu, 12 Oct 2023 21:59:46 -0600 Subject: [PATCH 0176/2103] Reto #40 - python --- .../python/EspinoLeandroo.py" | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/EspinoLeandroo.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/EspinoLeandroo.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/EspinoLeandroo.py" new file mode 100644 index 0000000000..3d958c5713 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/EspinoLeandroo.py" @@ -0,0 +1,8 @@ +# Solicitar al usuario que ingrese un número +numero = int(input("Ingresa un número: ")) + +# Imprimir la tabla de multiplicar +print(f"Tabla de multiplicar del {numero}:") +for i in range(1, 11): + resultado = numero * i + print(f"{numero} x {i} = {resultado}") From b8ad4feeae0b7403bc12c044091898a48563c23f Mon Sep 17 00:00:00 2001 From: DanielR Date: Thu, 12 Oct 2023 23:26:24 -0500 Subject: [PATCH 0177/2103] reto #1 --- .../python/danielzx9.py" | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/danielzx9.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/danielzx9.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/danielzx9.py" new file mode 100644 index 0000000000..22e0e99ae8 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/danielzx9.py" @@ -0,0 +1,33 @@ +"""``` +/* + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + */ +```""" + +print("Ingrese un texto para transformar en lenguaje hacker") +diccionario={"a":"4","b":"I3","c":"[","d":")","e":"3","f":"|=","g":"&","h":"#","i":"1","j":",_|","k":">|","l":"1",'m' : '/\/\\', 'n' : '^/', 'o' : '0', 'p' : '|*', 'q' : '(_,)', 'r' : 'I2', 's' : '5', 't' : '7', 'u' : '(_)', 'v' : '\/', 'w' : '\/\/', 'x' : '><', 'y' : 'j', 'z' : '2','1' : 'L','2' : 'R','3' : 'E','4' : 'A','5' : 'S','6' : 'b','7' : 'T','8' : 'B', '9' : 'g','0' : 'o'} + + +text = input() + +for caracter in text: + caracter = caracter.lower() + hacker_text = "" + + if caracter in diccionario: + hacker_text += diccionario[caracter] + else: + hacker_text += caracter + print(hacker_text) + + + + + + + From c5297bbe06525fb8ea4192b3435257579a0ac86e Mon Sep 17 00:00:00 2001 From: George Erazo Date: Fri, 13 Oct 2023 11:07:06 -0500 Subject: [PATCH 0178/2103] Reto #40 - Java --- .../java/george24.java" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/george24.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/george24.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/george24.java" new file mode 100644 index 0000000000..54d27280cd --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/george24.java" @@ -0,0 +1,22 @@ +import java.util.Scanner; + +public class george24 +{ + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int num = 0; + System.out.println("Ingrese el número: "); + num = sc.nextInt(); + sc.close(); + System.out.println("Tabla de multiplicar del " + num + ": "); + tabla_multip(num); + + } + + public static void tabla_multip(int num){ + for (int i= 1; i <=10; i++){ + int total = num *i; + System.out.println(num + " x " + i + " = " + total ); + } + } +} \ No newline at end of file From 00ee6bbc5dcef709c2ca641ed2f1f5ae02d66c73 Mon Sep 17 00:00:00 2001 From: George Erazo Date: Fri, 13 Oct 2023 11:16:42 -0500 Subject: [PATCH 0179/2103] Reto#40 - Python --- .../python/george24.py" | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/george24.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/george24.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/george24.py" new file mode 100644 index 0000000000..3a3a4ea78f --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/george24.py" @@ -0,0 +1,18 @@ +''' +Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... +''' + +def tabla_multiplicar(numero): + for i in range(1, 11): + total = numero * i + print(f"{numero} x {i} = {total}") + +numero = int(input("Ingrese un numero: ")) +print("Tabla de multiplicar del numero:", numero) +tabla_multiplicar(numero) \ No newline at end of file From 44795942729a40081f1f6441907cbe933bf740b6 Mon Sep 17 00:00:00 2001 From: puertalex <47542001+puertalex@users.noreply.github.com> Date: Fri, 13 Oct 2023 11:38:58 -0600 Subject: [PATCH 0180/2103] Add files via upload --- .../python/puertalex.py" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/puertalex.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/puertalex.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/puertalex.py" new file mode 100644 index 0000000000..38c160470e --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/puertalex.py" @@ -0,0 +1,24 @@ +def genera_tabla(numero :int) -> str: + + tabla = "" + i = 1 + + while i <= 10: + resultado = numero * i + tabla += (f"{numero} X {i} = {resultado}\n") + i += 1 + + return tabla + +while(True): + print("Introduce un numero entre 1 y 10:") + try: + entrada = int(input()) + if entrada >= 1 and entrada <= 10: + print(genera_tabla(entrada)) + break + else: + print("Debes introducir un número entre 1 y 10") + except Exception as e: + print("Solo esta permitido introducir números") + \ No newline at end of file From bc24cd58a8ef9b4692b7b57417c3bc88e83dea92 Mon Sep 17 00:00:00 2001 From: Oscar Hernandez Date: Fri, 13 Oct 2023 12:51:42 -0600 Subject: [PATCH 0181/2103] Solucion reto #1 --- .../go/ozkar503sv.go" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/ozkar503sv.go" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/ozkar503sv.go" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/ozkar503sv.go" new file mode 100644 index 0000000000..7d4e789ce2 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/ozkar503sv.go" @@ -0,0 +1,46 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strings" +) + +/* + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + */ +func main() { + reader := bufio.NewReader(os.Stdin) + fmt.Println("*********CONVIERTE TEXTO NORMAL A TEXTO HACKER*********") + fmt.Println("Introduce un texto: ") + input, err := reader.ReadString('\n') + + if err != nil { + fmt.Println("Error al leer el texto") + return + } + + fmt.Println(leetTranslator(strings.ToUpper(input))) +} + +func leetTranslator(text string) string { + var alphabet = map[rune]string{'A': "4", 'B': "I3", 'C': "[", 'D': ")", 'E': "3", 'F': "|=", 'G': "&", 'H': "#", 'I': "1", 'J': ",_|", 'K': ">|", 'L': "1", 'M': "JVI", 'N': "^/", 'O': "0", 'P': "|*", 'Q': "(_,)", 'R': "I2", 'S': "5", 'T': "7", 'U': "(_)", 'V': "|/", 'W': "(n)", 'X': "><", 'Y': "j", 'Z': "2"} + + hackerText := "" + + for _, char := range text { + if replacement, ok := alphabet[char]; ok { + hackerText += replacement + } else { + hackerText += string(char) + } + } + + return hackerText +} From 0ac75af3f18e5007a08c95184bcb0773dc49d951 Mon Sep 17 00:00:00 2001 From: DayronBG <139827189+DayronbermudezG@users.noreply.github.com> Date: Fri, 13 Oct 2023 14:58:40 -0400 Subject: [PATCH 0182/2103] Reto #27 - C++ --- .../c++/DayronbermudezG.cpp" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "Retos/Reto #27 - CUENTA ATR\303\201S [Media]/c++/DayronbermudezG.cpp" diff --git "a/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/c++/DayronbermudezG.cpp" "b/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/c++/DayronbermudezG.cpp" new file mode 100644 index 0000000000..e6a9ead6ba --- /dev/null +++ "b/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/c++/DayronbermudezG.cpp" @@ -0,0 +1,41 @@ +/* + * Crea una función que reciba dos parámetros para crear una cuenta atrás. + * - El primero, representa el número en el que comienza la cuenta. + * - El segundo, los segundos que tienen que transcurrir entre cada cuenta. + * - Sólo se aceptan números enteros positivos. + * - El programa finaliza al llegar a cero. + * - Debes imprimir cada número de la cuenta atrás. + */ + +#include +#include + +void cuentaAtras(int inicio, int segundos) { + + for(int i = inicio; i >= 0; i--) { + + std::cout << i << std::endl; + + if (i == 0) break; + Sleep(segundos*1000); + } +} + +int main(){ + + int inicio_cuenta; + int segundos; + + do { + + std::cout << "Represente el número en el que comienza la cuenta: "; std::cin >> inicio_cuenta; + std::cout << "Ingrese los segundos que tienen que transcurrir entre cada cuenta: "; std::cin >> segundos; + std::cout << std::endl; + + cuentaAtras(inicio_cuenta, segundos); + std::cout << std::endl; + + }while(true); + + return 0; +} From 869314779e2513761620fc7acfdf392fa38c954d Mon Sep 17 00:00:00 2001 From: puertalex <47542001+puertalex@users.noreply.github.com> Date: Fri, 13 Oct 2023 13:19:59 -0600 Subject: [PATCH 0183/2103] Add files via upload --- .../c#/puertalex.cs" | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/puertalex.cs" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/puertalex.cs" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/puertalex.cs" new file mode 100644 index 0000000000..7d140c6ec7 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/puertalex.cs" @@ -0,0 +1,39 @@ +using System; +class Reto40 +{ + public static void Main (string[] args) + { + while (true) + { + try + { + int entrada; + Console.WriteLine("Ingrese un número entero entre 1 y 10"); + entrada = Int16.Parse(Console.ReadLine()); + if (entrada >= 1 && entrada <= 10) + { + Console.WriteLine(generaTabla(entrada)); + break; + } + else + { + Console.WriteLine("Debe introducir un numero entero entre 1 y 10"); + } + } + catch + { + Console.WriteLine("Debe ingresar solo numeros enteros"); + } + } + + string generaTabla(int numero) + { + string tabla = ""; + for(int i = 1; i <= 10; i++) + { + tabla += $"{numero} X {i} = {numero * i}\n"; + } + return tabla; + } + } +} \ No newline at end of file From 52f5073275d43c13b3c06eaf744c9c4e58e78a1b Mon Sep 17 00:00:00 2001 From: devjmv <145607413+devjmv@users.noreply.github.com> Date: Fri, 13 Oct 2023 16:07:57 -0400 Subject: [PATCH 0184/2103] Create devjmv.php Reto #0 FizzBuzz by devjmv --- .../php/devjmv.php" | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/devjmv.php" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/devjmv.php" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/devjmv.php" new file mode 100644 index 0000000000..12f889d3f6 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/devjmv.php" @@ -0,0 +1,3 @@ +for ($i=0; $i < 101; $i++) { + echo (is_int($i/3) && is_int($i/5) && ($i != 0) ? 'fizzbuzz' : (is_int($i/3) && ($i != 0) ? 'fizz' : (is_int($i/5) && ($i != 0) ? 'buzz' : $i))). '
'; +} From d868f7931b2df99e5752168386ee9a5cc993bd25 Mon Sep 17 00:00:00 2001 From: devjmv <145607413+devjmv@users.noreply.github.com> Date: Fri, 13 Oct 2023 16:25:59 -0400 Subject: [PATCH 0185/2103] Update devjmv.php --- .../Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/devjmv.php" | 1 + 1 file changed, 1 insertion(+) diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/devjmv.php" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/devjmv.php" index 12f889d3f6..b432c05797 100644 --- "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/devjmv.php" +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/devjmv.php" @@ -1,3 +1,4 @@ +'; } From 107185899bfa63be5461ee4739fe09077e1b1bef Mon Sep 17 00:00:00 2001 From: deathiwng Date: Fri, 13 Oct 2023 23:00:45 +0200 Subject: [PATCH 0186/2103] Reto #27 - C# --- .../c#/deathwing696.cs" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "Retos/Reto #27 - CUENTA ATR\303\201S [Media]/c#/deathwing696.cs" diff --git "a/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/c#/deathwing696.cs" "b/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/c#/deathwing696.cs" new file mode 100644 index 0000000000..ed5609c016 --- /dev/null +++ "b/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/c#/deathwing696.cs" @@ -0,0 +1,49 @@ +/* + * Crea una funcin que reciba dos parmetros para crear una cuenta atrs. + * - El primero, representa el nmero en el que comienza la cuenta. + * - El segundo, los segundos que tienen que transcurrir entre cada cuenta. + * - Slo se aceptan nmeros enteros positivos. + * - El programa finaliza al llegar a cero. + * - Debes imprimir cada nmero de la cuenta atrs. + */ + +using System; +using System.Threading; + +namespace reto27 +{ + public class Reto27 + { + static void Main(string[] args) + { + Cuenta_atras(10, 1); + + Cuenta_atras(5, 3); + + Console.ReadKey(); + } + + private static void Cuenta_atras(int numero, int segundos) + { + if (numero > 0) + { + if (segundos > 0) + { + for (int i = numero; i >= 0; i--) + { + Console.WriteLine(i); + Thread.Sleep(segundos * 1000); + } + } + else + { + Console.WriteLine("Los segundos entre cada nmero de la cuenta atrs deben de ser nmeros enteros positivos"); + } + } + else + { + Console.WriteLine("El inicio de la cuentra atrs debe de ser un nmero entero positivo"); + } + } + } +} \ No newline at end of file From f02588ad768ec53e72ffc839bad56a6421b9f705 Mon Sep 17 00:00:00 2001 From: deathiwng Date: Fri, 13 Oct 2023 23:08:08 +0200 Subject: [PATCH 0187/2103] Reto #28 - C# --- .../c#/deathwing696.cs" | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 "Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/c#/deathwing696.cs" diff --git "a/Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/c#/deathwing696.cs" "b/Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/c#/deathwing696.cs" new file mode 100644 index 0000000000..5f857c091d --- /dev/null +++ "b/Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/c#/deathwing696.cs" @@ -0,0 +1,42 @@ +/* + * Crea una funcin que reciba una expresin matemtica (String) + * y compruebe si es correcta. Retornar true o false. + * - Para que una expresin matemtica sea correcta debe poseer + * un nmero, una operacin y otro nmero separados por espacios. + * Tantos nmeros y operaciones como queramos. + * - Nmeros positivos, negativos, enteros o decimales. + * - Operaciones soportadas: + - * / % + * + * Ejemplos: + * "5 + 6 / 7 - 4" -> true + * "5 a 6" -> false + */ + +using System; +using System.Text.RegularExpressions; + +namespace reto28 +{ + public class Reto28 + { + static void Main(string[] args) + { + string expresion1 = "5 + 6 / 7 - 4", expresion2 = "5 a 6", expresion3 = "2 + 2", expresion4 = ""; + + Console.WriteLine($"{expresion1} -> {Es_expresion_matematica_correcta(expresion1)}"); + Console.WriteLine($"{expresion2} -> {Es_expresion_matematica_correcta(expresion2)}"); + Console.WriteLine($"{expresion3} -> {Es_expresion_matematica_correcta(expresion3)}"); + Console.WriteLine($"{expresion4} -> {Es_expresion_matematica_correcta(expresion4)}"); + + Console.ReadKey(); + } + + private static bool Es_expresion_matematica_correcta(string expresion) + { + string pattern = @"(?:\d+\s*[+\-*/%]\s*)+\d+|(?:\d+\s*[+\-*/%]\s*\d+)"; + Regex regex = new Regex(pattern); + + return regex.IsMatch(expresion); + } + } +} \ No newline at end of file From 6b3825031a4d038bcfe1234bafa3c46e1786bed5 Mon Sep 17 00:00:00 2001 From: deathiwng Date: Fri, 13 Oct 2023 23:22:44 +0200 Subject: [PATCH 0188/2103] Reto #29 - C# --- .../c#/deathwing696.cs" | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 "Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/c#/deathwing696.cs" diff --git "a/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/c#/deathwing696.cs" "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/c#/deathwing696.cs" new file mode 100644 index 0000000000..473a54c29f --- /dev/null +++ "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/c#/deathwing696.cs" @@ -0,0 +1,81 @@ +/* + * Crea una funcin que reciba dos cadenas de texto casi iguales, + * a excepcin de uno o varios caracteres. + * La funcin debe encontrarlos y retornarlos en formato lista/array. + * - Ambas cadenas de texto deben ser iguales en longitud. + * - Las cadenas de texto son iguales elemento a elemento. + * - No se pueden utilizar operaciones propias del lenguaje + * que lo resuelvan directamente. + * + * Ejemplos: + * - Me llamo mouredev / Me llemo mouredov -> ["e", "o"] + * - Me llamo.Brais Moure / Me llamo brais moure -> [" ", "b", "m"] + */ + +using System; +using System.Collections.Generic; + +namespace reto29 +{ + public class Reto29 + { + static void Main(string[] args) + { + string cadena1 = "Me llamo mouredev", cadena2 = "Me llemo mouredov"; + string cadena3 = "Me llamo.Brais Moure", cadena4 = "Me llamo brais moure"; + List diferencias = new List(); + + diferencias = Encuentra_diferencias(cadena1, cadena2); + + if (diferencias.Count > 0) + { + Console.Write($"{cadena1} / {cadena2} -> "); + Dibuja_por_pantalla(diferencias); + Console.WriteLine(); + } + + diferencias.Clear(); + diferencias = Encuentra_diferencias(cadena3, cadena4); + + if (diferencias.Count > 0) + { + Console.Write($"{cadena3} / {cadena4} -> "); + Dibuja_por_pantalla(diferencias); + Console.WriteLine(); + } + + Console.ReadKey(); + } + + private static List Encuentra_diferencias(string cadena1, string cadena2) + { + List diferencias = new List(); + + if (cadena1.Length == cadena2.Length) + { + for (int i = 0; i < cadena1.Length; i++) + { + if (cadena1[i] != cadena2[i]) + diferencias.Add(cadena2[i]); + } + } + + return diferencias; + } + + private static void Dibuja_por_pantalla(List diferencias) + { + Console.Write("["); + + for (int i = 0; i < diferencias.Count; i++) + { + Console.Write($"\"{diferencias[i]}\""); + + if (i < diferencias.Count - 1) + Console.Write(", "); + } + + Console.Write("]"); + } + } +} \ No newline at end of file From 4bc5a1c5c5bfc0586078ececa3f7c45cf07c76d3 Mon Sep 17 00:00:00 2001 From: deathiwng Date: Sat, 14 Oct 2023 00:04:44 +0200 Subject: [PATCH 0189/2103] Reto #30 - C# --- .../c#/deathwing696.cs | 202 ++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 Retos/Reto #30 - EL TECLADO T9 [Media]/c#/deathwing696.cs diff --git a/Retos/Reto #30 - EL TECLADO T9 [Media]/c#/deathwing696.cs b/Retos/Reto #30 - EL TECLADO T9 [Media]/c#/deathwing696.cs new file mode 100644 index 0000000000..eea3576a14 --- /dev/null +++ b/Retos/Reto #30 - EL TECLADO T9 [Media]/c#/deathwing696.cs @@ -0,0 +1,202 @@ +/* + * Los primeros dispositivos mviles tenan un teclado llamado T9 + * con el que se poda escribir texto utilizando nicamente su + * teclado numrico (del 0 al 9). + * + * Crea una funcin que transforme las pulsaciones del T9 a su + * representacin con letras. + * - Debes buscar cul era su correspondencia original. + * - Cada bloque de pulsaciones va separado por un guin. + * - Si un bloque tiene ms de un nmero, debe ser siempre el mismo. + * - Ejemplo: + * Entrada: 6-666-88-777-33-3-33-888 + * Salida: MOUREDEV + */ + +using System; +using System.Text.RegularExpressions; + +namespace reto30 +{ + public class Reto30 + { + static void Main(string[] args) + { + string entrada1 = "6-666-88-777-33-3-33-888", entrada2 = "44-666-555-2-0-222-666-6-666-0-33-7777-8-2-7777-111"; + + Console.WriteLine($"Entrada:{entrada1}"); + Console.WriteLine($"Salida:{Teclado_T9(entrada1)}"); + + Console.WriteLine($"Entrada:{entrada2}"); + Console.WriteLine($"Salida:{Teclado_T9(entrada2)}"); + + Console.ReadKey(); + } + + private static string Teclado_T9(string entrada) + { + string salida = "", pattern = @"^(\d)\1*$"; + Regex regex = new Regex(pattern); + var pulsaciones = entrada.Split('-'); + int i = 0; + + foreach (var conjunto_letras in pulsaciones) + { + if (regex.IsMatch(pulsaciones[i])) + { + switch(conjunto_letras[0]) + { + case '0': + salida += ' '; + break; + case '1': + switch (conjunto_letras.Length) + { + case 1: + salida += ','; + break; + case 2: + salida += '.'; + break; + case 3: + salida += '?'; + break; + case 4: + salida += '!'; + break; + } + break; + case '2': + switch (conjunto_letras.Length) + { + case 1: + salida += 'A'; + break; + case 2: + salida += 'B'; + break; + case 3: + salida += 'C'; + break; + } + break; + case '3': + switch (conjunto_letras.Length) + { + case 1: + salida += 'D'; + break; + case 2: + salida += 'E'; + break; + case 3: + salida += 'F'; + break; + } + break; + case '4': + switch (conjunto_letras.Length) + { + case 1: + salida += 'G'; + break; + case 2: + salida += 'H'; + break; + case 3: + salida += 'I'; + break; + } + break; + case '5': + switch (conjunto_letras.Length) + { + case 1: + salida += 'J'; + break; + case 2: + salida += 'K'; + break; + case 3: + salida += 'L'; + break; + } + break; + case '6': + switch (conjunto_letras.Length) + { + case 1: + salida += 'M'; + break; + case 2: + salida += 'N'; + break; + case 3: + salida += 'O'; + break; + } + break; + case '7': + switch (conjunto_letras.Length) + { + case 1: + salida += 'P'; + break; + case 2: + salida += 'Q'; + break; + case 3: + salida += 'R'; + break; + case 4: + salida += 'S'; + break; + } + break; + case '8': + switch (conjunto_letras.Length) + { + case 1: + salida += 'T'; + break; + case 2: + salida += 'U'; + break; + case 3: + salida += 'V'; + break; + } + break; + case '9': + switch (conjunto_letras.Length) + { + case 1: + salida += 'W'; + break; + case 2: + salida += 'X'; + break; + case 3: + salida += 'Y'; + break; + case 4: + salida += 'Z'; + break; + } + break; + } + } + else + { + Console.WriteLine("Conjunto de entrada no vlido"); + salida = ""; + break; + } + + i++; + } + + return salida; + } + } +} \ No newline at end of file From 90dd9cdabd7f0f47c73a5e2b60c36fd1aa18a86f Mon Sep 17 00:00:00 2001 From: Daniel Vieites Date: Sat, 14 Oct 2023 00:16:56 +0200 Subject: [PATCH 0190/2103] Reto #18 - Python --- .../python/vieitesss.py" | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/vieitesss.py" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/vieitesss.py" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/vieitesss.py" new file mode 100644 index 0000000000..c0d11ab156 --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/vieitesss.py" @@ -0,0 +1,35 @@ +import re +import requests +from bs4 import BeautifulSoup + +URL = "https://holamundo.day" +# Cadena de texto principal, desde dónde queremos empezar a obtener los datos +TARGET = "Agenda 8 de mayo" + +# Obtiene los datos de la página +page = requests.get(URL) + +# Busca dónde aparece el text objetivo +coincidence = re.search(f".*{TARGET}", page.text) + +if coincidence: + end = coincidence.end() + # Si encuentra el texto, se queda únicamente con el contenido que se encuentra + # justo después + new_text = page.text[end:] + +# Parsea el nuevo texto +soup = BeautifulSoup(new_text, "html.parser") + +# Busca todos los tags "blockquote", los cuales incluyen los "span" con el texto +# que se busca +blockquotes = soup.findAll("blockquote") + +for block in blockquotes: + text = "" + # Dentro de cada "blockquote", por cada uno de los "span" con el atributo + # "data-slate-string" = "true", obtiene su texto y lo va encadenando + for span in block.findAll("span", {"data-slate-string": "true"}): + text = f"{text}{span.text}" + + print(text) From b8d83cae3aa5896eeb442f24c73518e7ac0a8fbc Mon Sep 17 00:00:00 2001 From: deathiwng Date: Sat, 14 Oct 2023 00:22:02 +0200 Subject: [PATCH 0191/2103] Reto #31 - C# --- .../c#/deathwing696.cs" | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 "Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/c#/deathwing696.cs" diff --git "a/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/c#/deathwing696.cs" "b/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/c#/deathwing696.cs" new file mode 100644 index 0000000000..97f05426ae --- /dev/null +++ "b/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/c#/deathwing696.cs" @@ -0,0 +1,61 @@ +/* + * Crea una funcin que sea capaz de leer el nmero representado por el baco. + * - El baco se representa por un array con 7 elementos. + * - Cada elemento tendr 9 "O" (aunque habitualmente tiene 10 para realizar operaciones) + * para las cuentas y una secuencia de "---" para el alambre. + * - El primer elemento del array representa los millones, y el ltimo las unidades. + * - El nmero en cada elemento se representa por las cuentas que estn a la izquierda del alambre. + * + * Ejemplo de array y resultado: + * ["O---OOOOOOOO", + * "OOO---OOOOOO", + * "---OOOOOOOOO", + * "OO---OOOOOOO", + * "OOOOOOO---OO", + * "OOOOOOOOO---", + * "---OOOOOOOOO"] + * + * Resultado: 1.302.790 + */ + +using System; +using System.Collections.Generic; + +namespace reto31 +{ + public class Reto31 + { + static void Main(string[] args) + { + List abaco = new List() {"O---OOOOOOOO", "OOO---OOOOOO", "---OOOOOOOOO", "OO---OOOOOOO", "OOOOOOO---OO", "OOOOOOOOO---", "---OOOOOOOOO" }; + string cadena_numero = ""; + int numero; + + foreach (string fila in abaco) + { + var valor = fila.Split('-'); + var num_ceros = Dame_num_ceros(valor[0]).ToString(); + cadena_numero += num_ceros; + } + + numero = Int32.Parse(cadena_numero); + + Console.WriteLine($"Resultado: {numero.ToString("N0")}"); + + Console.ReadKey(); + } + + private static int Dame_num_ceros(string cadena) + { + int num_ceros = 0; + + foreach (char caracter in cadena) + { + if (caracter == 'O') + num_ceros++; + } + + return num_ceros; + } + } +} \ No newline at end of file From f19b446fd43982fe7ba5c22197159c32a2d165ec Mon Sep 17 00:00:00 2001 From: Ricardo Alfaro Date: Fri, 13 Oct 2023 17:15:13 -0600 Subject: [PATCH 0192/2103] Reto #2 - Java --- .../java/rearalf.java | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/java/rearalf.java diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/java/rearalf.java b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/java/rearalf.java new file mode 100644 index 0000000000..99b0714df5 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/java/rearalf.java @@ -0,0 +1,67 @@ +import java.util.Scanner; + +public class rearalf { + public static void main(String[] args) throws Exception { + Scanner scanner = new Scanner(System.in); + + int shifts = 0; + int p1 = 0; + int p2 = 0; + + do { + System.out.print("The point is (P1 or P2): "); + String input = scanner.next(); + + if (input.equals("P1")) { + p1++; + shifts++; + } else if (input.equals("P2")) { + p2++; + shifts++; + } else if (input != "P1" || input != "P2") { + System.out.println("Invalid input"); + } + + System.out.println(GetPoint(p1) + " - " + GetPoint(p2)); + + } while (shifts < 6); + + System.out.println(""); + if (p1 == 3 && p2 == 3) { + System.out.println(GetPoint(p1) + " - " + GetPoint(p2)); + System.out.println("Deuce"); + } else if (p1 > p2) { + System.out.println(GetPoint(p1) + " - " + GetPoint(p2)); + System.out.println("Ventaja P1"); + System.out.println("Ha ganado el P1"); + } else if (p1 < p2) { + System.out.println(GetPoint(p1) + " - " + GetPoint(p2)); + System.out.println("Ventaja P2"); + System.out.println("Ha ganado el P2 "); + } + System.out.println(""); + + scanner.close(); + } + + public static String GetPoint(int point) { + String textPoint = ""; + switch (point) { + case 0: + textPoint = "Love"; + break; + case 1: + textPoint = "15"; + break; + case 2: + textPoint = "30"; + break; + case 3: + textPoint = "40"; + break; + default: + break; + } + return textPoint; + } +} From cb9c048c0acb8f9bbd3b704e7fd8371526dacb6b Mon Sep 17 00:00:00 2001 From: codigocaballer Date: Sat, 14 Oct 2023 01:25:15 +0200 Subject: [PATCH 0193/2103] Reto #40 Typescript --- .../typescript/rellabacode.ts" | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/rellabacode.ts" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/rellabacode.ts" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/rellabacode.ts" new file mode 100644 index 0000000000..db1644da2d --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/rellabacode.ts" @@ -0,0 +1,33 @@ +import {createInterface, Interface} from 'readline'; +const util = require('util'); + +const rl: Interface = createInterface({ + input: process.stdin, + output: process.stdout, +}); + +const questionAsync = util.promisify(rl.question).bind(rl); + +async function readNumber(): Promise { + let number: number; + do { + const answer: string = await questionAsync('Insert an integer number: '); + number = parseInt(answer, 10); + if (isNaN(number)) { + console.log('Error: This is not a valid integer. Try Again'); + } + } while (isNaN(number)); + + return number; +} + +async function main() { + const number: number = await readNumber(); + for (let i = 1; i <= 10; i++) { + console.log(`${number} x ${i} = ${number * i}`); + } + + process.exit(0); +} + +main(); From a94d95bd6d9e5e0da53c7df5f0754476b7f967de Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Fri, 13 Oct 2023 18:56:18 -0500 Subject: [PATCH 0194/2103] [RETO 0] Done --- .../go/ddaniel27.go" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/go/ddaniel27.go" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/go/ddaniel27.go" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/go/ddaniel27.go" new file mode 100644 index 0000000000..9eba652b86 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/go/ddaniel27.go" @@ -0,0 +1,16 @@ +package main + +func main() { + for i := 1; i <= 100; i++ { + switch { + case i%3 == 0 && i%5 == 0: + println("fizzbuzz") + case i%3 == 0: + println("fizz") + case i%5 == 0: + println("buzz") + default: + println(i) + } + } +} From 4542c6936d8e69e6d0ec46559ed334941f88ab31 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Fri, 13 Oct 2023 19:14:28 -0500 Subject: [PATCH 0195/2103] [RETO 1] Done --- .../go/ddaniel27.go" | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/ddaniel27.go" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/ddaniel27.go" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/ddaniel27.go" new file mode 100644 index 0000000000..aa64f1a1af --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/ddaniel27.go" @@ -0,0 +1,56 @@ +package main + +import ( + "bufio" + "os" + "strings" +) + +func main() { + dict := map[rune]string{ + 'a': "4", + 'b': "I3", + 'c': "[", + 'd': ")", + 'e': "3", + 'f': "|=", + 'g': "&", + 'h': "#", + 'i': "1", + 'j': ",_|", + 'k': "|<", + 'l': "|", + 'm': "[v]", + 'n': "^/", + 'o': "0", + 'p': "?", + 'q': "9", + 'r': "2", + 's': "5", + 't': "7", + 'u': "(_)", + 'v': "\\", + 'w': "N/", + 'x': "><", + 'y': "v/", + 'z': "%", + ' ': " ", + } + + var result string + + println("Enter text to translate:") + reader := bufio.NewReader(os.Stdin) + input, _ := reader.ReadString('\n') + input = strings.ToLower(input) + + for _, char := range input { + if val, ok := dict[char]; ok { + result += val + } else { + result += string(char) + } + } + + println(result) +} From f368df7e352114fd1e7684641177120e1cb5968f Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Fri, 13 Oct 2023 19:53:21 -0500 Subject: [PATCH 0196/2103] [RETO 2] Done --- .../go/ddaniel27.go | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/go/ddaniel27.go diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/go/ddaniel27.go b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/go/ddaniel27.go new file mode 100644 index 0000000000..60a96fb2b0 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/go/ddaniel27.go @@ -0,0 +1,42 @@ +package main + +func main() { + sequence := []string{"P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1", "P1", "P1", "P1"} + difference := map[int8]string{ + 0: "Deuce", + 1: "Advantage P1", + 2: "Win P1", + -1: "Advantage P2", + -2: "Win P2", + } + scores := map[int8]string{ + 0: "Love", + 1: "15", + 2: "30", + 3: "40", + } + + p1Score, p2Score := 0, 0 + + for _, status := range sequence { + switch status { + case "P1": + p1Score++ + case "P2": + p2Score++ + } + diff := int8(p1Score - p2Score) + + switch { + case (p1Score > 3 || p2Score > 3) && (diff < 2 || -diff > -2): + println(difference[diff]) + case p1Score >= 3 && p2Score >= 3 && diff == 0: + println(difference[diff]) + case (p1Score >= 3 || p2Score >= 3) && (diff == 2 || diff == -2): + println(difference[diff]) + return + default: + println(scores[int8(p1Score)], "-", scores[int8(p2Score)]) + } + } +} From 6ef2e69fdb2e1cb3f1ecd7cde8bdd545b586c762 Mon Sep 17 00:00:00 2001 From: Unkn0wnN4m3 <87839850+Unkn0wnN4m3@users.noreply.github.com> Date: Fri, 13 Oct 2023 18:54:10 -0600 Subject: [PATCH 0197/2103] Reto #40 - Python --- .../python/Unkn0wnN4m3.py" | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Unkn0wnN4m3.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Unkn0wnN4m3.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Unkn0wnN4m3.py" new file mode 100644 index 0000000000..445b8fc420 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Unkn0wnN4m3.py" @@ -0,0 +1,28 @@ +# Crea un programa que sea capaz de solicitarte un número y se +# encargue de imprimir su tabla de multiplicar entre el 1 y el 10. +# - Debe visualizarse qué operación se realiza y su resultado. +# Ej: 1 x 1 = 1 +# 1 x 2 = 2 +# 1 x 3 = 3 +# ... + + +def m_table(number: int) -> None: + txt = "{} x {} = {}" + + for i in range(1, 11): + result = i * number + print(txt.format(number, i, result)) + + +def main(): + try: + n = int(input("Give me a number: ")) + except ValueError as e: + print("Invalid number:", e) + else: + m_table(n) + + +if __name__ == "__main__": + main() From bf6b161e691b32a9ca4aaa216bc670e25ee2f81e Mon Sep 17 00:00:00 2001 From: devjmv <145607413+devjmv@users.noreply.github.com> Date: Fri, 13 Oct 2023 21:02:42 -0400 Subject: [PATCH 0198/2103] Reto #1 devjmv --- .../php/Reto #1 devjmv" | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/Reto #1 devjmv" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/Reto #1 devjmv" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/Reto #1 devjmv" new file mode 100644 index 0000000000..8a4f076988 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/Reto #1 devjmv" @@ -0,0 +1,43 @@ + '4', + 'b' => 'I3', + 'c' => '[', + 'd' => ')', + 'e' => '3', + 'f' => '|=', + 'g' => '&', + 'h' => '#', + 'i' => '1', + 'j' => ',_|', + 'k' => '>|', + 'l' => '1', + 'm' => '/\\/\\', + 'n' => '^/', + 'o' => '0', + 'p' => '|*', + 'q' => '(_,)', + 'r'=> 'I2', + 's' => '5', + 't' => '7', + 'u' => '(_)', + 'v' => '\/', + 'w' => '\/\/', + 'x' => '><', + 'y' => 'j', + 'z' => '2', + '1' => 'L', + '2' => 'R', + '3' => 'E', + '4' => 'A', + '5' => 'S', + '6' => 'b', + '7' => 'T', + '8' => 'B', + '9' => 'g', + '0' => 'o' + ]; + return strtr($text, $diccionario); +} +echo hacktext('Texto maximo a convertir ejemplo'); From 97186d1ab66ee7fa66fa6053e6638047d9d075d8 Mon Sep 17 00:00:00 2001 From: Jherys Vargas Date: Fri, 13 Oct 2023 20:16:17 -0500 Subject: [PATCH 0199/2103] Reto #40 - typescript --- .../typescript/JherysVargas.ts" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/JherysVargas.ts" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/JherysVargas.ts" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/JherysVargas.ts" new file mode 100644 index 0000000000..82116bf858 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/JherysVargas.ts" @@ -0,0 +1,15 @@ +const getNumber = (): number => { + const value = prompt("Ingrese un número"); + + return Number(value); +}; + +const generateMultiplicationTable = (): void => { + const value: number = getNumber(); + + for (let i = 1; i <= 10; i++) { + console.log(`${value} x ${i} = ${value * i}`); + } +}; + +generateMultiplicationTable(); From 38bae50dbb2cf36a134ddabd52a511f12ad8e631 Mon Sep 17 00:00:00 2001 From: Jherys Vargas Date: Fri, 13 Oct 2023 20:16:57 -0500 Subject: [PATCH 0200/2103] Reto #40 - dart --- .../dart/JherysVargas.dart" | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/dart/JherysVargas.dart" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/dart/JherysVargas.dart" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/dart/JherysVargas.dart" new file mode 100644 index 0000000000..b95d0a4e31 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/dart/JherysVargas.dart" @@ -0,0 +1,18 @@ +import 'dart:io'; + +void main(List arguments) { + generateMultiplicationTable(); +} + +int getNumber() { + print('Ingrese un número:'); + return int.parse(stdin.readLineSync()!); +} + +void generateMultiplicationTable() { + final int value = getNumber(); + + for (var i = 1; i <= 10; i++) { + print('$value x $i = ${value * i}'); + } +} From c64dd4238efb28672a025c3f9e1bdfa647d18718 Mon Sep 17 00:00:00 2001 From: DayronBG <139827189+DayronbermudezG@users.noreply.github.com> Date: Fri, 13 Oct 2023 21:19:34 -0400 Subject: [PATCH 0201/2103] Reto #40 - Java --- .../java/DayronbermudezG.java" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/DayronbermudezG.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/DayronbermudezG.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/DayronbermudezG.java" new file mode 100644 index 0000000000..abcdfa3c4b --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/DayronbermudezG.java" @@ -0,0 +1,31 @@ +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +import java.util.Scanner; + +public class DayronbermudezG { + public static void main(String[] args) { + + Scanner scanner = new Scanner(System.in); + + do { + + System.out.print("Ingrese un numero: "); + int n = scanner.nextInt(); + System.out.println(); + + for(int i=0;i<=10;i++) { + + System.out.println(n + " x " + i + " = " + n*i); + } + System.out.println(); + }while(true); + } +} From 5abad1f567d76694694be1906420db2ce26d849b Mon Sep 17 00:00:00 2001 From: DayronBG <139827189+DayronbermudezG@users.noreply.github.com> Date: Fri, 13 Oct 2023 21:42:47 -0400 Subject: [PATCH 0202/2103] Reto #40 - Python --- .../python/DayronbermudezG.py" | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/DayronbermudezG.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/DayronbermudezG.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/DayronbermudezG.py" new file mode 100644 index 0000000000..93fe24b057 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/DayronbermudezG.py" @@ -0,0 +1,19 @@ +""" + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + """ + +while True: + n = int(input("Ingrese un numero: ")) + print() + + for i in range(0,11): + + print(str(n) + " x " + str(i) + " = " + str(n*i)) + + print() From 124150f7ea3185fc486f220af40b2870230f628e Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Fri, 13 Oct 2023 21:02:32 -0500 Subject: [PATCH 0203/2103] [RETO 3] Done --- .../go/ddaniel27.go" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/go/ddaniel27.go" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/go/ddaniel27.go" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/go/ddaniel27.go" new file mode 100644 index 0000000000..28d803186c --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/go/ddaniel27.go" @@ -0,0 +1,46 @@ +package main + +import "math/rand" + +type Password struct { + Length int + HasUpper bool + HasNumbers bool + HasSymbols bool +} + +func main() { + passwordType := Password{ + Length: 14, + HasUpper: true, + HasNumbers: true, + HasSymbols: false, + } + + println(passwordType.Generate()) +} + +func (p *Password) Generate() string { + baseUpperRune := 'A' + baseLowerRune := 'a' + baseNumberRune := '0' + ss := []string{"!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+"} + rand.Shuffle(len(ss), func(i, j int) { ss[i], ss[j] = ss[j], ss[i] }) + + var password string + + for len(password) < p.Length { + password += string(baseLowerRune + rune(rand.Intn(26))) + if p.HasUpper { + password += string(baseUpperRune + rune(rand.Intn(26))) + } + if p.HasNumbers { + password += string(baseNumberRune + rune(rand.Intn(10))) + } + if p.HasSymbols { + password += ss[rand.Intn(len(ss))] + } + } + + return password[:p.Length] +} From 9b4424cf8d077ccdf1b1872362c4a38f5a1f9a9f Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Fri, 13 Oct 2023 21:09:18 -0500 Subject: [PATCH 0204/2103] [RETO 4] Done --- .../go/ddaniel27.go | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/go/ddaniel27.go diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/go/ddaniel27.go b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/go/ddaniel27.go new file mode 100644 index 0000000000..f55d7b6286 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/go/ddaniel27.go @@ -0,0 +1,54 @@ +package main + +import "fmt" + +func main() { + nTest := 13 + response := fmt.Sprintf("%d is ", nTest) + if isPrime(nTest) { + response += "prime, " + } else { + response += "not prime, " + } + + if isFibonacci(nTest) { + response += "fibonacci, " + } else { + response += "not fibonacci, " + } + + if isEven(nTest) { + response += "even" + } else { + response += "odd" + } + + fmt.Println(response) +} + +func isPrime(n int) bool { + if n <= 1 { + return false + } + for i := 2; i < n; i++ { + if (n % i) == 0 { + return false + } + } + return true +} + +func isFibonacci(n int) bool { + if n <= 1 { + return true + } + a, b := 0, 1 + for a < n { + a, b = b, a+b + } + return a == n +} + +func isEven(n int) bool { + return n%2 == 0 +} From 7f4164b4d4b290cfae80865ad63f5de1a7122127 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Fri, 13 Oct 2023 21:11:33 -0500 Subject: [PATCH 0205/2103] [RETO 5] Done --- "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/go/ddaniel27.go" | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/go/ddaniel27.go" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/go/ddaniel27.go" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/go/ddaniel27.go" new file mode 100644 index 0000000000..16e2b22ac7 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/go/ddaniel27.go" @@ -0,0 +1,5 @@ +package main + +func main() { + println("Hello, World!") +} From dedb35056f2a40cc897787441d3cd6034baaf6fc Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Fri, 13 Oct 2023 21:30:47 -0500 Subject: [PATCH 0206/2103] [RETO 6] Done --- .../go/ddaniel27.go | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/go/ddaniel27.go diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/go/ddaniel27.go b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/go/ddaniel27.go new file mode 100644 index 0000000000..15ffdd2e84 --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/go/ddaniel27.go @@ -0,0 +1,78 @@ +package main + +func main() { + g1 := [][]string{{"🗿", "📄"}, {"🗿", "✄"}, {"🗿", "🦎"}} // Player 1 + g2 := [][]string{{"🖖", "📄"}, {"🦎", "📄"}, {"🖖", "🖖"}} // Tie + g3 := [][]string{{"🦎", "🦎"}, {"📄", "🖖"}, {"🗿", "🦎"}} // Player 1 + g4 := [][]string{{"🗿", "📄"}, {"🗿", "✄"}, {"🦎", "🦎"}} // Tie + g5 := [][]string{{"✄", "🖖"}, {"🦎", "✄"}, {"📄", "✄"}} // Player 2 + + play(g1) + play(g2) + play(g3) + play(g4) + play(g5) +} + +func play(games [][]string) { + stateMachine := map[string]map[string]int8{ + "stone": { + "stone": 0, + "paper": -1, + "scisor": 1, + "lizard": 1, + "spock": -1, + }, + "paper": { + "stone": 1, + "paper": 0, + "scisor": -1, + "lizard": -1, + "spock": 1, + }, + "scisor": { + "stone": -1, + "paper": 1, + "scisor": 0, + "lizard": 1, + "spock": -1, + }, + "lizard": { + "stone": -1, + "paper": 1, + "scisor": -1, + "lizard": 0, + "spock": 1, + }, + "spock": { + "stone": 1, + "paper": -1, + "scisor": 1, + "lizard": -1, + "spock": 0, + }, + } + + emojiToString := map[string]string{ + "🗿": "stone", + "📄": "paper", + "✄": "scisor", + "🦎": "lizard", + "🖖": "spock", + } + + var sum int8 + for _, game := range games { + player1 := emojiToString[game[0]] + player2 := emojiToString[game[1]] + sum += stateMachine[player1][player2] + } + switch { + case sum == 0: + println("Tie") + case sum > 0: + println("Player 1 wins") + case sum < 0: + println("Player 2 wins") + } +} From f76baed4b9dcf95dd79fc1fff3b35fd1b19274ac Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Fri, 13 Oct 2023 21:35:46 -0500 Subject: [PATCH 0207/2103] [RETO 7] Done --- .../go/ddaniel27.go | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/go/ddaniel27.go diff --git a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/go/ddaniel27.go b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/go/ddaniel27.go new file mode 100644 index 0000000000..ae326752e5 --- /dev/null +++ b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/go/ddaniel27.go @@ -0,0 +1,84 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strings" +) + +func main() { + reader := bufio.NewReader(os.Stdin) + + fmt.Println("¡Bienvenido al Sombrero Seleccionador de Hogwarts!") + fmt.Println("Responde a las siguientes preguntas para determinar en qué casa debes estar.") + + var respuestas [5]string + + preguntas := []string{ + "Pregunta 1: ¿Qué cualidad valoras más?\n1. Valentía\n2. Astucia\n3. Lealtad\n4. Inteligencia", + "Pregunta 2: ¿Qué animal te gustaría tener como mascota?\n1. León\n2. Serpiente\n3. Tejón\n4. Águila", + "Pregunta 3: ¿Cuál es tu asignatura favorita?\n1. Defensa contra las Artes Oscuras\n2. Pociones\n3. Cuidado de Criaturas Mágicas\n4. Adivinación", + "Pregunta 4: ¿Qué tipo de magia prefieres?\n1. Hechizos ofensivos\n2. Magia sigilosa\n3. Magia curativa\n4. Magia adivinatoria", + "Pregunta 5: En una situación de peligro, ¿qué harías?\n1. Enfrentar el peligro de frente\n2. Encontrar una solución astuta\n3. Proteger a tus amigos\n4. Predecir el peligro y evitarlo", + } + + for i, pregunta := range preguntas { + fmt.Println(pregunta) + respuesta, _ := reader.ReadString('\n') + respuestas[i] = strings.TrimSpace(respuesta) + } + + casa := determinarCasa(respuestas) + fmt.Printf("¡Eres un miembro de la casa %s!\n", casa) +} + +func determinarCasa(respuestas [5]string) string { + valorGryffindor := 0 + valorSlytherin := 0 + valorHufflepuff := 0 + valorRavenclaw := 0 + + for _, respuesta := range respuestas { + switch respuesta { + case "1": + valorGryffindor++ + case "2": + valorSlytherin++ + case "3": + valorHufflepuff++ + case "4": + valorRavenclaw++ + default: + } + } + + maxValor := max(valorGryffindor, valorSlytherin, valorHufflepuff, valorRavenclaw) + + switch maxValor { + case valorGryffindor: + return "Gryffindor" + case valorSlytherin: + return "Slytherin" + case valorHufflepuff: + return "Hufflepuff" + case valorRavenclaw: + return "Ravenclaw" + default: + return "No se puede determinar la casa" + } +} + +func max(a, b, c, d int) int { + max := a + if b > max { + max = b + } + if c > max { + max = c + } + if d > max { + max = d + } + return max +} From 588c3cdd206ccba6019ab8baf3f652b4d22dcc15 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Fri, 13 Oct 2023 22:06:01 -0500 Subject: [PATCH 0208/2103] [RETO 8] Done --- .../go/ddaniel27.go | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/go/ddaniel27.go diff --git a/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/go/ddaniel27.go b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/go/ddaniel27.go new file mode 100644 index 0000000000..47e535f419 --- /dev/null +++ b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/go/ddaniel27.go @@ -0,0 +1,25 @@ +package main + +import "time" + +const MAXINT64 = 9223372036854775807 + +func main() { + seed := time.Now().UnixNano() + var x int64 = 1 + + for i := 0; i < 10; i++ { + if x == 0 { + x = 1 + } + x = (((MAXINT64 + seed) / x) + x) / 2 + x = x % 137 + if x == 0 { + x = 1 + } + x = (((MAXINT64 + seed) / x) + x) / 2 + x = x % 100 + } + + println(x) +} From 041f95a09fbc1a07e7f2a8c2bf6ced2e209c8ca1 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Fri, 13 Oct 2023 22:15:27 -0500 Subject: [PATCH 0209/2103] [RETO 9] Done --- .../go/ddaniel27.go" | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 "Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/go/ddaniel27.go" diff --git "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/go/ddaniel27.go" "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/go/ddaniel27.go" new file mode 100644 index 0000000000..95d625a98b --- /dev/null +++ "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/go/ddaniel27.go" @@ -0,0 +1,87 @@ +package main + +func main() { + println(isPangram("the quick brown fox jumps over the lazy dog")) + println(isIsogram("uncopyrightable")) + println(isHeterogram("jumping")) +} + +func isHeterogram(word string) bool { + letters := make(map[rune]bool) + for _, letter := range word { + if letter == ' ' || letter == '-' { + continue + } + if letters[letter] { + return false + } + letters[letter] = true + } + return true +} + +func isIsogram(word string) bool { + letters := make(map[rune]int) + for _, letter := range word { + if letter == ' ' || letter == '-' { + continue + } + letters[letter] += 1 + } + var aux int + for _, count := range letters { + if aux == 0 { + aux = count + continue + } + if aux != count { + return false + } + } + return true +} + +func isPangram(word string) bool { + dict := map[rune]bool{ + 'a': false, + 'b': false, + 'c': false, + 'd': false, + 'e': false, + 'f': false, + 'g': false, + 'h': false, + 'i': false, + 'j': false, + 'k': false, + 'l': false, + 'm': false, + 'n': false, + 'o': false, + 'p': false, + 'q': false, + 'r': false, + 's': false, + 't': false, + 'u': false, + 'v': false, + 'w': false, + 'x': false, + 'y': false, + 'z': false, + } + + for _, letter := range word { + if letter == ' ' || letter == '-' { + continue + } + dict[letter] = true + } + + for _, value := range dict { + if !value { + return false + } + } + return true +} From 21ed6273d47d1835508bbedfedf2e31622ac5bbb Mon Sep 17 00:00:00 2001 From: devjmv <145607413+devjmv@users.noreply.github.com> Date: Fri, 13 Oct 2023 23:23:19 -0400 Subject: [PATCH 0210/2103] Reto#2 devjmv.php --- .../php/devjmv.php | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/php/devjmv.php diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/php/devjmv.php b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/php/devjmv.php new file mode 100644 index 0000000000..39ec77f67b --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/php/devjmv.php @@ -0,0 +1,38 @@ + $jugada) { + $puntuacion = ''; + //sumo los puntos segun el jugador + $jugada == 'P1' ? $puno += 15 : ($jugada == 'P2' ? $pdos += 15 : null); + //compruebo que sean iguales solo en 45 puntos o mayor + if ($puno >= 45 && $puno == $pdos){ + $puntuacion = 'Deuce'; + echo $puntuacion. '
'; + continue; + } + //compruebo al ganador + if (($puno - $pdos >= 30 || $pdos - $puno >= 30) && ($puno > 45 || $pdos > 45)) { + $puntuacion = 'Ha ganado el ' .$jugada; + echo $puntuacion. '
'; + break; + } + //compruebo la ventaja del jugador + if (($puno > $pdos || $puno < $pdos) && ($puno > 45 || $pdos > 45)) { + $puntuacion = 'Ventaja ' .$jugada; + echo $puntuacion. '
'; + continue; + } + //muestro los puntos de los competidores + $puno == 0 ? $puntuacion .= 'Love -' .$pdos : + ($pdos == 0 ? $puntuacion .= $puno. ' - Love' : + (($puno != 0 && $pdos != 0) ? $puntuacion .= $puno. ' - ' .$pdos : + null)); + echo $puntuacion. '
'; +} From a96a86621d8b5286bd6ca8f1e0aacc7d64abcf06 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Fri, 13 Oct 2023 22:29:01 -0500 Subject: [PATCH 0211/2103] [RETO 10] Done --- .../Reto #10 - LA API [Media]/go/ddaniel27.go | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Retos/Reto #10 - LA API [Media]/go/ddaniel27.go diff --git a/Retos/Reto #10 - LA API [Media]/go/ddaniel27.go b/Retos/Reto #10 - LA API [Media]/go/ddaniel27.go new file mode 100644 index 0000000000..c2d81fc8ae --- /dev/null +++ b/Retos/Reto #10 - LA API [Media]/go/ddaniel27.go @@ -0,0 +1,49 @@ +package main + +import ( + "encoding/json" + "fmt" + "io" + "net/http" +) + +type Response struct { + Content []Content `json:"content"` +} + +type Content struct { + ID string `json:"id"` + Name string `json:"name"` + Symbol string `json:"symbol"` + Slug string `json:"slugName"` + Status string `json:"status"` + Type string `json:"type"` + URL string `json:"url"` +} + +func main() { + resp, err := http.Get("https://api.bravenewcoin.com/v3/asset?symbol=LTC") + if err != nil { + fmt.Println("Error: ", err) + } + + data, err := io.ReadAll(resp.Body) + if err != nil { + fmt.Println("Error: ", err) + } + + var response Response + if err := json.Unmarshal(data, &response); err != nil { + fmt.Println("Error: ", err) + } + + fmt.Printf("ID: %s\nName: %s\nSymbol: %s\nSlug: %s\nStatus: %s\nType: %s\nURL: %s\n", + response.Content[0].ID, + response.Content[0].Name, + response.Content[0].Symbol, + response.Content[0].Slug, + response.Content[0].Status, + response.Content[0].Type, + response.Content[0].URL, + ) +} From e20ebcdf010f20857668c355d6bf7790207e9464 Mon Sep 17 00:00:00 2001 From: devjmv <145607413+devjmv@users.noreply.github.com> Date: Fri, 13 Oct 2023 23:43:08 -0400 Subject: [PATCH 0212/2103] Reto#30 devjmv.php --- .../php/devjmv.php | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Retos/Reto #30 - EL TECLADO T9 [Media]/php/devjmv.php diff --git a/Retos/Reto #30 - EL TECLADO T9 [Media]/php/devjmv.php b/Retos/Reto #30 - EL TECLADO T9 [Media]/php/devjmv.php new file mode 100644 index 0000000000..bfd357a6fd --- /dev/null +++ b/Retos/Reto #30 - EL TECLADO T9 [Media]/php/devjmv.php @@ -0,0 +1,24 @@ + $numeros) { + $tecla = str_split($numeros); + $salida .= $teclas[$tecla[0]][strlen($numeros)-1]; + } + return $salida; + } + + echo tecleando('6-666-88-777-33-3-33-888'); From 6d3b30a21f015997c75c3145d94575f1f28765a5 Mon Sep 17 00:00:00 2001 From: devjmv <145607413+devjmv@users.noreply.github.com> Date: Fri, 13 Oct 2023 23:44:54 -0400 Subject: [PATCH 0213/2103] Reto #1 devjmv --- .../Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/devjmv.php" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/Reto #1 devjmv" => "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/devjmv.php" (100%) diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/Reto #1 devjmv" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/devjmv.php" similarity index 100% rename from "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/Reto #1 devjmv" rename to "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/devjmv.php" From 1038c9b85a9b5fc6828841ce5268f33f099e539e Mon Sep 17 00:00:00 2001 From: Isaac Morcillo Garcia Date: Sat, 14 Oct 2023 09:23:29 +0200 Subject: [PATCH 0214/2103] Reto #40 - Kotlin --- .../kotlin/isaacus98.kt" | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/isaacus98.kt" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/isaacus98.kt" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/isaacus98.kt" new file mode 100644 index 0000000000..24f556b307 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/isaacus98.kt" @@ -0,0 +1,38 @@ +import java.util.InputMismatchException +import java.util.Scanner + +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +fun main(args: Array) { + var scan = Scanner(System.`in`) + var number: Int = 0 + var loopFirstTime: Boolean = true + + println("Inserte un número del 1 al 10:") + + do { + if (!loopFirstTime){ + println("El valor insertado no es correcto.\nInserte un número del 1 al 10:") + } + + try { + number = scan.nextInt() + } catch (e: InputMismatchException){ + scan = Scanner(System.`in`) + } + + loopFirstTime = false + } while (number < 1 || number > 11) + + for (i in 1..10){ + println("$number x $i = ${number * i}") + } +} \ No newline at end of file From 0c94f0a1e518e916df53c0f358e27f71d3caa793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20Silanes?= Date: Sat, 14 Oct 2023 10:47:10 +0200 Subject: [PATCH 0215/2103] [reto-040] Completado --- .../python/isilanes.py" | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/isilanes.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/isilanes.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/isilanes.py" new file mode 100644 index 0000000000..b304c22053 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/isilanes.py" @@ -0,0 +1,54 @@ +def print_table_of(num: int | float) -> None: + """ + Dado un número 'num' (no se especifica si entero, real, + positivo o negativo), imprime su "tabla de multiplicar", + tal que: + num x 1 = ... + num x 2 = ... + ... + num x 10 = ... + + Args: + num (int, float): número cuya tabla queremos imprimir. + + Returns: + Nada. Imprime directamente. + """ + if not isinstance(num, (int, float)): + print(f"{num} no es un número válido. Ignorando...") + return + + for i in range(1, 11): + print(f"{num} x {i:2d} = {num*i}") + + +def get_number() -> int | float | None: + """ + Solicita un número al usuario. Introducir un valor que no pueda + procesarse no eleva un error, sino que ignora e imprime un mensaje. + + Returns: + Devuelve el input del usuario, convertido en int o float. Si el usuario + desea salir, introducirá una "q", y la función devolverá None. + """ + while True: + number = input("Introduce un número (q = salir): ") + + if number == "q": + return None + + try: + if "." in number: + return float(number) + else: + return int(number) + except ValueError: + print("Ese valor es inválido. Introduce un número, o la letra 'q' para salir.") + + +if __name__ == "__main__": + while True: + input_number = get_number() + if input_number is None: + break + print_table_of(input_number) From 89eb4271986315cc4f729bc23123601b06f25be2 Mon Sep 17 00:00:00 2001 From: ShinMugenNoKabe Date: Sat, 14 Oct 2023 13:30:07 +0200 Subject: [PATCH 0216/2103] Reto #40 - Python --- .../python/ShinMugenNoKabe.py" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ShinMugenNoKabe.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ShinMugenNoKabe.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ShinMugenNoKabe.py" new file mode 100644 index 0000000000..e83506edc4 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ShinMugenNoKabe.py" @@ -0,0 +1,10 @@ +def print_mult_table(num: int): + if num < 1 or num > 10: + raise ValueError("Introduce a number between 1 and 10") + + print("\n".join([f"{num} x {n} = {num * n}" for n in range(1, 11)])) + + +if __name__ == "__main__": + num = int(input("Input a number: ")) + print_mult_table(num) \ No newline at end of file From 7857c7613990f97d35f1ef93efcc04c358a91568 Mon Sep 17 00:00:00 2001 From: mstrnilsson Date: Sat, 14 Oct 2023 15:30:29 +0200 Subject: [PATCH 0217/2103] Reto #38 - python --- .../python/mstrnilsson.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/mstrnilsson.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/mstrnilsson.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/mstrnilsson.py new file mode 100644 index 0000000000..b19d74f70b --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/mstrnilsson.py @@ -0,0 +1,36 @@ +""" + * Crea una función que encuentre todas las combinaciones de los números + * de una lista que suman el valor objetivo. + * - La función recibirá una lista de números enteros positivos + * y un valor objetivo. + * - Para obtener las combinaciones sólo se puede usar + * una vez cada elemento de la lista (pero pueden existir + * elementos repetidos en ella). + * - Ejemplo: Lista = [1, 5, 3, 2], Objetivo = 6 + * Soluciones: [1, 5] y [1, 3, 2] (ambas combinaciones suman 6) + * (Si no existen combinaciones, retornar una lista vacía) +""" + +import itertools + +def combination(num: list, target: int): + sumlist = () + comb = 0 + for ele in range(len(num)+1): + for iterable in itertools.combinations(num, ele): + for i in iterable: + if iterable[:-1] == (): + next + else: + if target == sum(list(iterable)) and list(iterable) != sumlist: + sumlist = (list(iterable)) + print(sumlist) + comb += 1 + if comb == 0: + print(list(sumlist)) + + +if __name__ == "__main__": + combination([1, 5, 3, 2], 6) + + \ No newline at end of file From 58d525e7f3c117c09402d0942f876cc779e42f49 Mon Sep 17 00:00:00 2001 From: mstrnilsson Date: Sat, 14 Oct 2023 15:53:49 +0200 Subject: [PATCH 0218/2103] Reto mouredev#38 - Python --- Retos/Reto #38 - LAS SUMAS [Media]/python/mstrnilsson.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/mstrnilsson.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/mstrnilsson.py index b19d74f70b..c3517e7835 100644 --- a/Retos/Reto #38 - LAS SUMAS [Media]/python/mstrnilsson.py +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/mstrnilsson.py @@ -30,7 +30,6 @@ def combination(num: list, target: int): print(list(sumlist)) -if __name__ == "__main__": - combination([1, 5, 3, 2], 6) +combination([1, 5, 3, 2], 6) \ No newline at end of file From d881758d4e1b349e8878bf012513199f85b5817b Mon Sep 17 00:00:00 2001 From: erosmarziani Date: Sat, 14 Oct 2023 11:52:09 -0300 Subject: [PATCH 0219/2103] =?UTF-8?q?"Reto=20#40=20-=20python=E2=80=9D.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/erosmarziani.py" | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/erosmarziani.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/erosmarziani.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/erosmarziani.py" new file mode 100644 index 0000000000..271dd6d83f --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/erosmarziani.py" @@ -0,0 +1,28 @@ +''' + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... +''' + +def PedirNumero(): + while True: + ingresado=input("Ingrese un numero: ") + try: + numero=int(ingresado) + if numero<10 and numero>0: + return numero + else: + print("Ingrese un numero del 1 al 10") + except ValueError: + print("Ingrese un numero correcto") + +def TablaMultiplicar(numero): + print(f"TABLA DEL {numero} ") + for i in range(1,11): + print(f"{numero} x {i} = {numero*i}") + +TablaMultiplicar(PedirNumero()) \ No newline at end of file From 62bd2c27f219b308c515daef13409a52d6f59bed Mon Sep 17 00:00:00 2001 From: deathiwng Date: Sat, 14 Oct 2023 17:12:25 +0200 Subject: [PATCH 0220/2103] Reto #32 - C# --- .../c#/deathwing696.cs | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/c#/deathwing696.cs diff --git a/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/c#/deathwing696.cs b/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/c#/deathwing696.cs new file mode 100644 index 0000000000..0a6471fee1 --- /dev/null +++ b/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/c#/deathwing696.cs @@ -0,0 +1,49 @@ +/* + * Crea una funcin que calcule el nmero de la columna de una hoja de Excel + * teniendo en cuenta su nombre. + * - Las columnas se designan por letras de la "A" a la "Z" de forma infinita. + * - Ejemplos: A = 1, Z = 26, AA = 27, CA = 79. + */ + +using System; +using System.Linq; +using System.Text.RegularExpressions; + +namespace reto32 +{ + public class Reto32 + { + static void Main(string[] args) + { + string columna1 = "A", columna2 = "Z", columna3 = "AA", columna4 = "CA", columna5 = "ABC"; + + Console.WriteLine($"{columna1} = {Calcula_columna_excel(columna1)}"); + Console.WriteLine($"{columna2} = {Calcula_columna_excel(columna2)}"); + Console.WriteLine($"{columna3} = {Calcula_columna_excel(columna3)}"); + Console.WriteLine($"{columna4} = {Calcula_columna_excel(columna4)}"); + Console.WriteLine($"{columna5} = {Calcula_columna_excel(columna5)}"); + + Console.ReadKey(); + } + + private static int Calcula_columna_excel(string columna) + { + int retorno = 0, posicion = 0, i = 0; + string pattern = @"[A-Z]+"; + Regex regex = new Regex(pattern); + string reverse_columna = new string(columna.Reverse().ToArray()); + + if (regex.IsMatch(columna)) + { + foreach (var letra in reverse_columna) + { + posicion = (((int)letra - (int)'A') % 26) + 1; + retorno += posicion * Convert.ToInt32(Math.Pow(26, i)); + i++; + } + } + + return retorno; + } + } +} \ No newline at end of file From 1937d070bfd16a7d26290ba8dcfcfa97a46b01f7 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Sat, 14 Oct 2023 10:22:30 -0500 Subject: [PATCH 0221/2103] [RETO 11] Done --- .../go/ddaniel27.go" | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 "Retos/Reto #11 - URL PARAMS [F\303\241cil]/go/ddaniel27.go" diff --git "a/Retos/Reto #11 - URL PARAMS [F\303\241cil]/go/ddaniel27.go" "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/go/ddaniel27.go" new file mode 100644 index 0000000000..ee90e6c332 --- /dev/null +++ "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/go/ddaniel27.go" @@ -0,0 +1,28 @@ +package main + +import ( + "fmt" + "regexp" +) + +func main() { + str1 := "https://retosdeprogramacion.com?year=2023&challenge=0" + str2 := "http://www.baidu.com?name=abcd&age=456" + str3 := "http://www.baidu.com?name=abcde&age=456&sex=%20M%20" + str4 := "http://www.baidu.com" + + fmt.Printf("%q\n", GetParams(str1)) + fmt.Printf("%q\n", GetParams(str2)) + fmt.Printf("%q\n", GetParams(str3)) + fmt.Printf("%q\n", GetParams(str4)) +} + +func GetParams(str string) []string { + re := regexp.MustCompile(`=([^&]+)`) + match := re.FindAllStringSubmatch(str, -1) + var params []string + for _, v := range match { + params = append(params, v[1]) + } + return params +} From b8b050c8d273c07bc65458da71b09eba1bce806b Mon Sep 17 00:00:00 2001 From: DayronBG <139827189+DayronbermudezG@users.noreply.github.com> Date: Sat, 14 Oct 2023 11:22:32 -0400 Subject: [PATCH 0222/2103] Reto #40 - C++ --- .../c++/DayronbermudezG.cpp" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c++/DayronbermudezG.cpp" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c++/DayronbermudezG.cpp" index 1ec014d699..399100c673 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c++/DayronbermudezG.cpp" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c++/DayronbermudezG.cpp" @@ -12,7 +12,7 @@ int main() { - int num; + int n; do { From 3786129d92acb5e5f5bda4b4d723d8c41f5c35e2 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Sat, 14 Oct 2023 10:41:18 -0500 Subject: [PATCH 0223/2103] [RETO 12] Done --- .../go/ddaniel27.go" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "Retos/Reto #12 - VIERNES 13 [F\303\241cil]/go/ddaniel27.go" diff --git "a/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/go/ddaniel27.go" "b/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/go/ddaniel27.go" new file mode 100644 index 0000000000..74f9f1e338 --- /dev/null +++ "b/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/go/ddaniel27.go" @@ -0,0 +1,24 @@ +package main + +import ( + "fmt" + "time" +) + +func main() { + years := []string{"2019", "2020", "2021", "2022", "2023"} + months := []string{"01", "02", "03", "04", "10"} + for i := 0; i < len(years); i++ { + fmt.Println(IsFryday(years[i], months[i]), years[i], months[i]) + } +} + +func IsFryday(year, month string) bool { + layout := "2006-01-02" + dateToParse := fmt.Sprintf("%s-%s-13", year, month) + date, err := time.Parse(layout, dateToParse) + if err != nil { + return false + } + return date.Weekday() == time.Friday +} From 7305f47e8b6793d49bb34a87f784657be205bcf4 Mon Sep 17 00:00:00 2001 From: Marco Torres Date: Sat, 14 Oct 2023 08:56:11 -0700 Subject: [PATCH 0224/2103] Reto #31 - Python --- .../python/marcoatrs.py" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/python/marcoatrs.py" diff --git "a/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/python/marcoatrs.py" "b/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/python/marcoatrs.py" new file mode 100644 index 0000000000..f47cdcf3d9 --- /dev/null +++ "b/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/python/marcoatrs.py" @@ -0,0 +1,24 @@ +from typing import List + +def leer_abaco(abaco: List[str]) -> int: + numero = "" + for linea in abaco: + if linea.startswith("---"): + numero += "0" + continue + if linea.endswith("---"): + numero += "9" + continue + numero += str(len(linea.split("-")[0])) + return numero + + +abaco = ["O---OOOOOOOO", + "OOO---OOOOOO", + "---OOOOOOOOO", + "OO---OOOOOOO", + "OOOOOOO---OO", + "OOOOOOOOO---", + "---OOOOOOOOO"] + +print(leer_abaco(abaco)) From c5edb041f33d2154f07c59061c877bc7150db2e1 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Sat, 14 Oct 2023 11:16:50 -0500 Subject: [PATCH 0225/2103] [RETO 13] Done --- .../go/ddaniel27.go | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 Retos/Reto #13 - ADIVINA LA PALABRA [Media]/go/ddaniel27.go diff --git a/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/go/ddaniel27.go b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/go/ddaniel27.go new file mode 100644 index 0000000000..226709967a --- /dev/null +++ b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/go/ddaniel27.go @@ -0,0 +1,103 @@ +package main + +import ( + "fmt" + "math/rand" + "strings" +) + +type Word struct { + CurrentState string + targetState string + MaxGuesses int + Guessed bool +} + +func main() { + newWord := NewWord() + newWord.Play() +} + +func (w *Word) Play() { + for !w.Guessed && w.MaxGuesses > 0 { + println(w.CurrentState) + println("Guesses left:", w.MaxGuesses) + println("Enter your guess:") + var guess string + _, _ = fmt.Scanln(&guess) + w.Guess(guess) + } + + println(w.targetState) + if w.Guessed { + println("You won!") + } else { + println("You lost!") + } +} + +func (w *Word) Guess(guess string) { + if guess == w.targetState { + w.CurrentState = w.targetState + w.Guessed = true + return + } + + if len(guess) > 1 { + w.MaxGuesses-- + return + } + + if strings.Contains(w.targetState, guess) && !strings.Contains(w.CurrentState, guess) { + for i, char := range w.targetState { + if string(char) == guess { + w.CurrentState = w.CurrentState[:i] + guess + w.CurrentState[i+1:] + } + } + if w.CurrentState == w.targetState { + w.Guessed = true + } + return + } + + w.MaxGuesses-- +} + +func NewWord() *Word { + wordsPool := []string{ + "cigarette", + "fabricate", + "absorption", + "champagne", + "sentiment", + "negotiation", + "eavesdrop", + "reservoir", + } + + rand.Shuffle(len(wordsPool), func(i, j int) { + wordsPool[i], wordsPool[j] = wordsPool[j], wordsPool[i] + }) + + currentState, targetState := wordsPool[0], wordsPool[0] + lettersToRemove := len(currentState) - int(float64(len(currentState))*0.6) + + shuffled := strings.Split(currentState, "") + rand.Shuffle(len(shuffled), func(i, j int) { + shuffled[i], shuffled[j] = shuffled[j], shuffled[i] + }) + + for _, char := range shuffled { + currentState = strings.ReplaceAll(currentState, string(char), "_") + count := strings.Count(currentState, "_") + if count >= lettersToRemove { + break + } + } + + return &Word{ + CurrentState: currentState, + targetState: targetState, + MaxGuesses: 3, + } +} From 65217fa4496cc0cb5087a8a4178ad16062904198 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Sat, 14 Oct 2023 11:24:22 -0500 Subject: [PATCH 0226/2103] [RETO 14] Done --- .../go/ddaniel27.go" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/go/ddaniel27.go" diff --git "a/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/go/ddaniel27.go" "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/go/ddaniel27.go" new file mode 100644 index 0000000000..ee1a74171f --- /dev/null +++ "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/go/ddaniel27.go" @@ -0,0 +1,27 @@ +package main + +func main() { + println(DecToOctal(15), DecToHex(15)) +} + +func DecToOctal(dec int) string { + oct := "" + for dec > 0 { + oct = string(dec%8+48) + oct + dec /= 8 + } + return oct +} + +func DecToHex(dec int) string { + hex := "" + for dec > 0 { + if dec%16 > 9 { + hex = string(dec%16+55) + hex + } else { + hex = string(dec%16+48) + hex + } + dec /= 16 + } + return hex +} From 8bdaec26902df166c919be90c2cf47dac63e0748 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Sat, 14 Oct 2023 11:31:55 -0500 Subject: [PATCH 0227/2103] [RETO 15] Done --- .../go/ddaniel27.go" | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 "Retos/Reto #15 - AUREBESH [F\303\241cil]/go/ddaniel27.go" diff --git "a/Retos/Reto #15 - AUREBESH [F\303\241cil]/go/ddaniel27.go" "b/Retos/Reto #15 - AUREBESH [F\303\241cil]/go/ddaniel27.go" new file mode 100644 index 0000000000..8b1aae8468 --- /dev/null +++ "b/Retos/Reto #15 - AUREBESH [F\303\241cil]/go/ddaniel27.go" @@ -0,0 +1,62 @@ +package main + +var aurebesh = map[rune]string{ + 'a': "æ", + 'b': "“", + 'c': "¢", + 'd': "ð", + 'e': "€", + 'f': "đ", + 'g': "ŋ", + 'h': "ħ", + 'i': "→", + 'j': "ˀ", + 'k': "ĸ", + 'l': "ł", + 'm': "µ", + 'n': "µ", + 'o': "ø", + 'p': "þ", + 'q': "@", + 'r': "¶", + 's': "ß", + 't': "ŧ", + 'u': "↓", + 'v': "„", + 'w': "ſ", + 'x': "»", + 'y': "←", + 'z': "«", +} + +func main() { + testSpanish := "¡hola! ¿cómo estás?" + testAurebesh := "æ“¢ð€đŋħ→ˀĸłµµøþ@¶ßŧ↓„ſ»←«" + + println(SpanishToAurebesh(testSpanish)) + println(AurebeshToSpanish(testAurebesh)) +} + +func SpanishToAurebesh(s string) string { + var result string + for _, c := range s { + if val, ok := aurebesh[c]; ok { + result += val + } else { + result += string(c) + } + } + return result +} + +func AurebeshToSpanish(s string) string { + var result string + for _, c := range s { + for k, v := range aurebesh { + if v == string(c) { + result += string(k) + } + } + } + return result +} From 9c414e8d5d656ea03eac5741615735fa69933a14 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Sat, 14 Oct 2023 12:23:55 -0500 Subject: [PATCH 0228/2103] [RETO 16] Done --- .../go/ddaniel27.go | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Retos/Reto #16 - LA ESCALERA [Media]/go/ddaniel27.go diff --git a/Retos/Reto #16 - LA ESCALERA [Media]/go/ddaniel27.go b/Retos/Reto #16 - LA ESCALERA [Media]/go/ddaniel27.go new file mode 100644 index 0000000000..4d9b465620 --- /dev/null +++ b/Retos/Reto #16 - LA ESCALERA [Media]/go/ddaniel27.go @@ -0,0 +1,34 @@ +package main + +import "strings" + +func main() { + println(stairs(4)) + println(stairs(0)) + println(stairs(-4)) +} + +func stairs(n int) string { + var str string + switch { + case n == 0: + return "__" + case n > 0: + str = strings.Repeat(" ", (2*n)) + "_\n" + case n < 0: + str = "_\n" + } + str += stairsRecursive(n) + return str +} + +func stairsRecursive(n int) string { + switch { + case n > 0: + return strings.Repeat(" ", (2*(n-1))) + "_|\n" + stairsRecursive(n-1) + case n < 0: + return stairsRecursive(n+1) + strings.Repeat(" ", -(2*n+1)) + "|_\n" + default: + return "" + } +} From 27db1cbfd8cfc3c0475565cd02f49db0a1f08834 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Sat, 14 Oct 2023 12:36:08 -0500 Subject: [PATCH 0229/2103] [RETO 17] Done --- .../go/ddaniel27.go" | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/go/ddaniel27.go" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/go/ddaniel27.go" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/go/ddaniel27.go" new file mode 100644 index 0000000000..5ae9088d14 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/go/ddaniel27.go" @@ -0,0 +1,28 @@ +package main + +import "github.com/tsuyoshiwada/go-gitlog" + +func main() { + git := gitlog.New( + &gitlog.Config{}, + ) + commits, err := git.Log( + &gitlog.RevNumber{Limit: 10}, + &gitlog.Params{ + MergesOnly: false, + IgnoreMerges: false, + Reverse: false, + }, + ) + if err != nil { + panic(err) + } + for _, commit := range commits { + println(commit.Hash) + println(commit.Author.Name) + println(commit.Author.Email) + println(commit.Subject) + println(commit.Body) + + } +} From 722f2d736335706b579db3e4b6901b0b256b8b6f Mon Sep 17 00:00:00 2001 From: jarkillo <107489788+jarkillo@users.noreply.github.com> Date: Sat, 14 Oct 2023 19:41:56 +0200 Subject: [PATCH 0230/2103] "Reto #0 - Python" --- .../python/jarkillo.py" | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/jarkillo.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/jarkillo.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/jarkillo.py" new file mode 100644 index 0000000000..17e5712839 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/jarkillo.py" @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +""" +Created on Sat Oct 14 19:19:05 2023 + +@author: Jarkillo +""" + +# Challengue FizzBuzz + +# Escribe un programa que muestre por consola ( con un print) +# Los numeros de 1 a 100 (ambos incluidos y con un salto de linea entre cada impresion) +# sustituyendo los siguientes: + +# - Multiplos de 3 por la palabra fizz +# - Multiplos de 5 por la palabra buzz +# - Multiplos de 3 y de 5 a la vez por la palabra fizzbuzz + + +def fizzbuzz(): + + for i in range (1,101): + + if i%3 == 0: + print ("fizz") + + elif i%5 == 0: + print ("buzz") + + elif i%3 == 0 and i%5 == 0: + + print ("fizzbuzz") + + else: + print (i) + + + + + + + + + + + + + + + + + + + \ No newline at end of file From cbe2bca5f01b7934be744abf91f2ab8dabf5000f Mon Sep 17 00:00:00 2001 From: mjordanaam Date: Sat, 14 Oct 2023 20:41:51 +0200 Subject: [PATCH 0231/2103] Reto #40 - Python --- .../python/mjordanaam.py" | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mjordanaam.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mjordanaam.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mjordanaam.py" new file mode 100644 index 0000000000..e1b866ff34 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mjordanaam.py" @@ -0,0 +1,33 @@ +""" +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ +""" + +def print_table(number: int) -> None: + for i in range(1, 11): + print(f"{number} x {i} = {number * i}") + + +def main(): + number = input("Enter a number: ") + + try: + number = int(number) + + while number < 0 or number > 10: + number = input("Enter a number between (0 and 10): ") + number = int(number) + + print_table(number) + except Exception as e: + print(f"Error: + {str(e)})") + +if __name__ == "__main__": + main() From 5badeda360125e99a3c0140e71035e6ad0088b0d Mon Sep 17 00:00:00 2001 From: FabianTorres Date: Sat, 14 Oct 2023 15:51:02 -0500 Subject: [PATCH 0232/2103] New Solution: Reto #5 - Java --- .../java/nftorres.java" | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/java/nftorres.java" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/java/nftorres.java" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/java/nftorres.java" new file mode 100644 index 0000000000..8600ba73b4 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/java/nftorres.java" @@ -0,0 +1,8 @@ +/* +This script shows the solution to the exercise "Reto #5: HOLA MUNDO" from Brais Moure's official website. +*/ +public class nftorres { + public static void main(String[] args) { + System.out.println("Hola Mundo!"); + } +} From 60e511ee5e4ddede4f9f23b6473164787d0bb8da Mon Sep 17 00:00:00 2001 From: FabianTorres Date: Sat, 14 Oct 2023 15:52:42 -0500 Subject: [PATCH 0233/2103] New Solution: Reto #5 - JavaScript --- .../javascript/nftorres.js" | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/nftorres.js" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/nftorres.js" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/nftorres.js" new file mode 100644 index 0000000000..2614aeafe4 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/nftorres.js" @@ -0,0 +1,4 @@ +/* +This script shows the solution to the exercise "Reto #5: HOLA MUNDO" from Brais Moure's official website. +*/ +console.log("Hola Mundo!"); \ No newline at end of file From 9c9f7d42bacaf680954f521e85ae6c394d615309 Mon Sep 17 00:00:00 2001 From: FabianTorres Date: Sat, 14 Oct 2023 15:53:32 -0500 Subject: [PATCH 0234/2103] New Solution: Reto #5 - Python --- .../Reto #5 - HOLA MUNDO [F\303\241cil]/python/nftorres.py" | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/nftorres.py" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/nftorres.py" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/nftorres.py" new file mode 100644 index 0000000000..7891f5aa87 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/nftorres.py" @@ -0,0 +1,4 @@ +"""This script shows the solution to the exercise "Reto #5: HOLA MUNDO" from Brais Moure's official website.""" + +if __name__ == '__main__': + print("Hola Mundo!") From e64f66436051f9e8b8be1b57d5430e6cd13da508 Mon Sep 17 00:00:00 2001 From: Heiber Perez Date: Sat, 14 Oct 2023 16:01:13 -0500 Subject: [PATCH 0235/2103] Reto #40 Typescript --- .../typescript/mxtrar23.ts" | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/mxtrar23.ts" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/mxtrar23.ts" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/mxtrar23.ts" new file mode 100644 index 0000000000..699f15a45e --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/mxtrar23.ts" @@ -0,0 +1,64 @@ + +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +interface MultiplicationTable { + multiplicand:number, + multiplier:number, + product:number, +} + + +const doMultiplicationTableByNumber = (multiplicand:number) => { + + const dataTable = multiplicationTable(multiplicand) + printTable(multiplicand,dataTable) +} + +const multiplicationTable = (multiplicand:number) :MultiplicationTable[] => { + const dataTable :MultiplicationTable[] = [] + + for (let index = 1; index <= 10; index++) { + dataTable.push({ + multiplicand, + multiplier : index, + product: (multiplicand*index) + }) + } + + return dataTable +} + +const printTable = (multiplicand:number,dataMultiplicationTable:MultiplicationTable[]) => { + console.log(`==== TABLE OF x${multiplicand} ====`) + dataMultiplicationTable.forEach(row=>{ + const {multiplicand,multiplier,product} = row + console.log(` ${multiplicand} X ${multiplier} = ${product}`); + }) + console.log(`====================`) + +} + + +doMultiplicationTableByNumber(5); + + +/*==== TABLE OF x5 ==== + 5 X 1 = 5 + 5 X 2 = 10 + 5 X 3 = 15 + 5 X 4 = 20 + 5 X 5 = 25 + 5 X 6 = 30 + 5 X 7 = 35 + 5 X 8 = 40 + 5 X 9 = 45 + 5 X 10 = 50 +====================*/ \ No newline at end of file From 9b6a7faa6e8206bb480b04f5d242c176ba6894dd Mon Sep 17 00:00:00 2001 From: Agustin Ramos <145476259+AgusWorld@users.noreply.github.com> Date: Sat, 14 Oct 2023 23:04:29 +0200 Subject: [PATCH 0236/2103] Added AgusWorld.java --- .../java/AgusWorld.java" | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/AgusWorld.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/AgusWorld.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/AgusWorld.java" new file mode 100644 index 0000000000..0d10906a69 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/AgusWorld.java" @@ -0,0 +1,42 @@ +import java.util.InputMismatchException; +import java.util.Scanner; + +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ +public class AgusWorld { + + public static void main(String[] args) { + Scanner src = new Scanner(System.in); + + Double inputNumber = null; + + do { + System.out.print("Please, write a number: "); + try { + inputNumber = src.nextDouble(); + } catch (Exception e) { + if (e instanceof InputMismatchException) + System.out.println("That's not a number!"); + else + System.out.println("Unexpected error" + e); + + src.next(); + } + } while (inputNumber == null); + + for (int i = 1; i <= 10; i++) { + System.out.printf(inputNumber.intValue() == inputNumber ? "%.0f x %d = %.0f\n" : "%.2f x %d = %.2f\n", + inputNumber, i, i * inputNumber); + } + + src.close(); + } + +} \ No newline at end of file From df095b0470665194beb81e6d3543e5e8ee728334 Mon Sep 17 00:00:00 2001 From: Unkn0wnN4m3 <87839850+Unkn0wnN4m3@users.noreply.github.com> Date: Sat, 14 Oct 2023 15:54:47 -0600 Subject: [PATCH 0237/2103] Reto #40 - JavaScript --- .../javascript/Unkn0wnN4m3.js" | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/Unkn0wnN4m3.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/Unkn0wnN4m3.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/Unkn0wnN4m3.js" new file mode 100644 index 0000000000..16462f32d7 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/Unkn0wnN4m3.js" @@ -0,0 +1,37 @@ +import * as readline from "node:readline/promises"; +import { stdin as input, stdout as output } from "node:process"; + +/** + * @param {number} number number to get the table + * @returns {void} returns nothing, just prints to console + */ +function m_table(number) { + if ((typeof number) !== "number") + throw new Error(`${number} is not number`); + + if (number % 1 !== 0) + throw new Error(`${number} is not integer`); + + let i, result; + + for (i = 1; i <= 10; i++) { + result = number * i; + console.log(`${number} x ${i} = ${result}`); + } +} + +async function main() { + const rl = readline.createInterface({ input, output }); + + try { + const n = await rl.question("Give me a number: "); + m_table(parseInt(n)); + } catch (e) { + console.error(e.message); + } + finally { + rl.close(); + } +} + +main(); From 98eb1a866f85c5292a60bbfc224037eeef4ceb30 Mon Sep 17 00:00:00 2001 From: Oscar Hernandez Date: Sat, 14 Oct 2023 20:40:38 -0600 Subject: [PATCH 0238/2103] Solucion reto #1 --- .../go/oscar503sv.go" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/oscar503sv.go" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/oscar503sv.go" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/oscar503sv.go" new file mode 100644 index 0000000000..7d4e789ce2 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/oscar503sv.go" @@ -0,0 +1,46 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strings" +) + +/* + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + */ +func main() { + reader := bufio.NewReader(os.Stdin) + fmt.Println("*********CONVIERTE TEXTO NORMAL A TEXTO HACKER*********") + fmt.Println("Introduce un texto: ") + input, err := reader.ReadString('\n') + + if err != nil { + fmt.Println("Error al leer el texto") + return + } + + fmt.Println(leetTranslator(strings.ToUpper(input))) +} + +func leetTranslator(text string) string { + var alphabet = map[rune]string{'A': "4", 'B': "I3", 'C': "[", 'D': ")", 'E': "3", 'F': "|=", 'G': "&", 'H': "#", 'I': "1", 'J': ",_|", 'K': ">|", 'L': "1", 'M': "JVI", 'N': "^/", 'O': "0", 'P': "|*", 'Q': "(_,)", 'R': "I2", 'S': "5", 'T': "7", 'U': "(_)", 'V': "|/", 'W': "(n)", 'X': "><", 'Y': "j", 'Z': "2"} + + hackerText := "" + + for _, char := range text { + if replacement, ok := alphabet[char]; ok { + hackerText += replacement + } else { + hackerText += string(char) + } + } + + return hackerText +} From ad5968273c55a85f439554b07a268298d0b48329 Mon Sep 17 00:00:00 2001 From: Oscar Hernandez Date: Sat, 14 Oct 2023 20:49:28 -0600 Subject: [PATCH 0239/2103] Deleted file --- .../go/oscar503sv.go" | 46 ------------------- 1 file changed, 46 deletions(-) delete mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/oscar503sv.go" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/oscar503sv.go" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/oscar503sv.go" deleted file mode 100644 index 7d4e789ce2..0000000000 --- "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/oscar503sv.go" +++ /dev/null @@ -1,46 +0,0 @@ -package main - -import ( - "bufio" - "fmt" - "os" - "strings" -) - -/* - * Escribe un programa que reciba un texto y transforme lenguaje natural a - * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje - * se caracteriza por sustituir caracteres alfanuméricos. - * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) - * con el alfabeto y los números en "leet". - * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") - */ -func main() { - reader := bufio.NewReader(os.Stdin) - fmt.Println("*********CONVIERTE TEXTO NORMAL A TEXTO HACKER*********") - fmt.Println("Introduce un texto: ") - input, err := reader.ReadString('\n') - - if err != nil { - fmt.Println("Error al leer el texto") - return - } - - fmt.Println(leetTranslator(strings.ToUpper(input))) -} - -func leetTranslator(text string) string { - var alphabet = map[rune]string{'A': "4", 'B': "I3", 'C': "[", 'D': ")", 'E': "3", 'F': "|=", 'G': "&", 'H': "#", 'I': "1", 'J': ",_|", 'K': ">|", 'L': "1", 'M': "JVI", 'N': "^/", 'O': "0", 'P': "|*", 'Q': "(_,)", 'R': "I2", 'S': "5", 'T': "7", 'U': "(_)", 'V': "|/", 'W': "(n)", 'X': "><", 'Y': "j", 'Z': "2"} - - hackerText := "" - - for _, char := range text { - if replacement, ok := alphabet[char]; ok { - hackerText += replacement - } else { - hackerText += string(char) - } - } - - return hackerText -} From 47e5b4858e7b64e8f6316ff7fbcaaa7c841e9ef9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Hern=C3=A1ndez?= <47469379+oscar503sv@users.noreply.github.com> Date: Sat, 14 Oct 2023 20:51:58 -0600 Subject: [PATCH 0240/2103] Rename ozkar503sv.go to oscar503sv.go --- .../Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/oscar503sv.go" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/ozkar503sv.go" => "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/oscar503sv.go" (100%) diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/ozkar503sv.go" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/oscar503sv.go" similarity index 100% rename from "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/ozkar503sv.go" rename to "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/go/oscar503sv.go" From 32876ff0c50b67d328e0ddc3dfee1662f487fbd9 Mon Sep 17 00:00:00 2001 From: ycanas Date: Sat, 14 Oct 2023 22:00:20 -0500 Subject: [PATCH 0241/2103] Reto #40 - Python --- .../python/ycanas.py" | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ycanas.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ycanas.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ycanas.py" new file mode 100644 index 0000000000..3fb3e7aac6 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ycanas.py" @@ -0,0 +1,7 @@ +def tabla(n): + max = len(str(n * 10)) + for i in range(1, 11): + print(f"{n} x {str(i):>2s} = {str(n * i):>{max}s}") + +n = int(input("Ingrese un número: ")) +tabla(n) From 9ce8fbe79b2a60c08e47be6d3d8c71a139ee4689 Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Sun, 15 Oct 2023 00:07:59 -0700 Subject: [PATCH 0242/2103] reto #40 - go --- .../go/KevinED11.go" | 171 ++++++++++++++++++ 1 file changed, 171 insertions(+) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/go/KevinED11.go" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/go/KevinED11.go" index f79d61ad0b..c48cc0b91e 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/go/KevinED11.go" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/go/KevinED11.go" @@ -8,6 +8,7 @@ import ( "strings" ) +// First solution type MultiplicationTableWriterFunc func(number int) func writeMultiplicationTable(number int) { @@ -43,6 +44,176 @@ func execute(writerFunc MultiplicationTableWriterFunc) { writerFunc(input) } +// Second solution +type IReader interface { + Read() +} + +type IWriter interface { + Write() +} + +type ITableWriter interface { + IReader + IWriter +} + +type MathOperationFunc func(n1, n2 int) int + +var ( + divideFunc = func(n1, n2 int) int { + return n1 / n2 + } + + addFunc = func(n1, n2 int) int { + return n1 + n2 + } + + subtractFunc = func(n1, n2 int) int { + return n1 - n2 + } + + multiplyFunc = func(n1, n2 int) int { + return n1 * n2 + } +) + +type PrintTableConfig struct { + Number, RangeEnd int + OperationFunc MathOperationFunc +} + +func printTableToConsole(config PrintTableConfig) { + number := config.Number + for n := 1; n <= config.RangeEnd; n++ { + fmt.Printf("%d x %d = %d\n", number, n, config.OperationFunc(number, n)) + } +} + +func readUserInput() (int, error) { + var numberToUse int + fmt.Println("Enter a number: ") + + _, err := fmt.Scanf("%d", &numberToUse) + if err != nil { + return 0, err + } + + return numberToUse, nil + +} + +type MultiplicationTableConsoleWriter struct { + Number int +} + +func (m *MultiplicationTableConsoleWriter) Read() { + fmt.Println("What multiplication table do you want to view?") + + result, err := readUserInput() + if err != nil { + fmt.Println(err) + return + } + m.Number = result +} + +func (m *MultiplicationTableConsoleWriter) Write() { + fmt.Printf("Multiplication table %v \n", m.Number) + printTableToConsole(PrintTableConfig{ + Number: m.Number, + RangeEnd: 10, + OperationFunc: multiplyFunc, + }) +} + +type DivisionTableConsoleWriter struct { + Number int +} + +func (d *DivisionTableConsoleWriter) Read() { + fmt.Println("What division table do you want to view?") + + result, err := readUserInput() + if err != nil { + fmt.Println(err) + return + } + + if result == 0 { + fmt.Println("Cannot divide by zero") + return + } + d.Number = result +} + +func (d *DivisionTableConsoleWriter) Write() { + fmt.Printf("Division table %v \n", d.Number) + printTableToConsole(PrintTableConfig{ + Number: d.Number, + RangeEnd: 10, + OperationFunc: divideFunc, + }) +} + +type AdditionTableConsoleWriter struct { + Number int +} + +func (a *AdditionTableConsoleWriter) Read() { + fmt.Println("What addition table do you want to view?") + + result, err := readUserInput() + if err != nil { + fmt.Println(err) + return + } + a.Number = result +} + +func (a *AdditionTableConsoleWriter) Write() { + fmt.Printf("Addition table %v \n", a.Number) + printTableToConsole(PrintTableConfig{ + Number: a.Number, + RangeEnd: 10, + OperationFunc: addFunc, + }) +} + +type SubtractionTableConsoleWriter struct { + Number int +} + +func (s *SubtractionTableConsoleWriter) Read() { + fmt.Println("What substraction table do you want to view?") + + if result, err := readUserInput(); err != nil { + fmt.Println(err) + return + } else { + s.Number = result + } +} + +func (s *SubtractionTableConsoleWriter) Write() { + fmt.Printf("Substraction table %v \n", s.Number) + printTableToConsole(PrintTableConfig{ + Number: s.Number, + RangeEnd: 10, + OperationFunc: subtractFunc, + }) + +} + +func execute(tableWriter ITableWriter) { + tableWriter.Read() + tableWriter.Write() +} + func main() { execute(writeMultiplicationTable) + execute(&MultiplicationTableConsoleWriter{}) + execute(&DivisionTableConsoleWriter{}) + execute(&AdditionTableConsoleWriter{}) + execute(&SubtractionTableConsoleWriter{}) } From 460424b167afad43765a8b892b65c3fc2decdce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Sun, 15 Oct 2023 11:18:12 +0200 Subject: [PATCH 0243/2103] feat: reto 40 didacdev --- .../python/didacdev.py" | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/didacdev.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/didacdev.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/didacdev.py" new file mode 100644 index 0000000000..210d694ca2 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/didacdev.py" @@ -0,0 +1,8 @@ +def main(): + numero = int(input("Ingresa un número: ")) + for i in range(1, 11): + print(f"{numero} x {i} = {numero * i}") + + +if __name__ == '__main__': + main() From ad7b8e9e606f9e734d76eaba19943237bcb92747 Mon Sep 17 00:00:00 2001 From: Antonio Ruiz <3speedemon3@gmail.com> Date: Sun, 15 Oct 2023 14:08:33 +0200 Subject: [PATCH 0244/2103] Reto #40 Java --- .../java/SpeeDemon3.java" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/SpeeDemon3.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/SpeeDemon3.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/SpeeDemon3.java" new file mode 100644 index 0000000000..1b221be5a3 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/SpeeDemon3.java" @@ -0,0 +1,34 @@ +import java.util.Scanner; + +/** + * @author -> Antonio Ruiz Benito = speeDemon + */ +public class SpeeDemon3 { + public static void main(String[] args) { + + /* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + + System.out.println("Enter a number"); + + Scanner sc = new Scanner(System.in); + + int num = sc.nextInt(); + + for (int i = 1; i < 11; i++) { + + int result = num * i; + + System.out.println(num + " X " + i + " = " + result); + + } + + } +} \ No newline at end of file From 1b10cc126f36c6546c9dd82feeb4e3f0c4125ae8 Mon Sep 17 00:00:00 2001 From: Marco Torres Date: Sun, 15 Oct 2023 09:08:30 -0700 Subject: [PATCH 0245/2103] Reto #32 - Python --- .../python/marcoatrs.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/python/marcoatrs.py diff --git a/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/python/marcoatrs.py b/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/python/marcoatrs.py new file mode 100644 index 0000000000..5ce6e0e198 --- /dev/null +++ b/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/python/marcoatrs.py @@ -0,0 +1,18 @@ +from string import ascii_uppercase + + +def excel_column(column: str) -> int: + result = ascii_uppercase.find(column[-1]) + 1 + if len(column) == 1: + return result + for i, chr in enumerate(column[::-1]): + result += 26 * i * (ascii_uppercase.find(chr) + 1) + return result + + +print(excel_column("A")) +print(excel_column("Z")) +print(excel_column("AA")) +print(excel_column("CA")) +print(excel_column("FE")) +print(excel_column("RF")) From 0f3fce42676b9750ba92d13c0fab34ebcb90490d Mon Sep 17 00:00:00 2001 From: George Date: Sun, 15 Oct 2023 13:32:27 -0300 Subject: [PATCH 0246/2103] #0 done --- .../javascript/georgePhD.js" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/georgePhD.js" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/georgePhD.js" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/georgePhD.js" new file mode 100644 index 0000000000..e35b2e06fa --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/georgePhD.js" @@ -0,0 +1,27 @@ + + +const numbs = () => { + + for(let i = 1; i <= 100; i++) { + + if (i % 3 === 0 && i % 5 === 0) { + + console.log('FizzBuzz'); + + } else if (i % 3 === 0) { + + console.log('Fizz'); + + } else if (i % 5 === 0) { + + console.log('Buzz') + + } else { + + console.log(i) + } + } +} +numbs(); + + From 8b82f83686c72e589e216effabc6bcecdce9be1e Mon Sep 17 00:00:00 2001 From: Ricardo Hernandez Date: Sun, 15 Oct 2023 11:16:28 -0600 Subject: [PATCH 0247/2103] Reto #40 - JavaScript --- .../javascript/ricardo-fdz.js" | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/ricardo-fdz.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/ricardo-fdz.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/ricardo-fdz.js" new file mode 100644 index 0000000000..dce5c88314 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/ricardo-fdz.js" @@ -0,0 +1,7 @@ +const printMultiplicationTable = (num) => { + for (let count = 1; count <= 10; count++) { + console.log(`${num}X${count}=${count*num}`); + } +} + +printMultiplicationTable(3); From fdfd492ed2b9a573917560e8334cb0f0fee4f615 Mon Sep 17 00:00:00 2001 From: George Date: Sun, 15 Oct 2023 19:41:07 -0300 Subject: [PATCH 0248/2103] reto #1 done --- .../javascript/georgePhD.js" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/georgePhD.js" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/georgePhD.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/georgePhD.js" new file mode 100644 index 0000000000..847aff2543 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/georgePhD.js" @@ -0,0 +1,17 @@ + + +function leetChange(text) { + + const leet = {"A": "4", "B": "I3", "C": "[", "D": "|)", "E": "3", "F": "ph", "G": "6", "H": "#", "I": "1", "J": "]", "K": "|<", "L": "1", "M": "/\\/\\", "N": "|\\|", "O": "0", "P": "|>", "Q": "0_", "R": "I2", "S": "5", "T": "7", "U": "(_)", "V": "\\/", "W": "\\/\\/", "X": "><", "Y": "j", "Z": "2", "1": "L", "2": "R", "3": "E", "4": "A", "5": "S", "6": "b", "7": "T", "8": "B", "9": "g", "0": "o"} + + return text.split('').map(e => leet[e.toUpperCase()]||e).join(''); +} + +console.log(leetChange('nb beats superman')); + + + + + + + From 19d4a211c03d4da17f5cbbdab1e8248d8d12fd08 Mon Sep 17 00:00:00 2001 From: soydz Date: Sun, 15 Oct 2023 18:31:22 -0500 Subject: [PATCH 0249/2103] Reto #40 python --- .../python/soydz.py" | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/soydz.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/soydz.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/soydz.py" new file mode 100644 index 0000000000..62866aa187 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/soydz.py" @@ -0,0 +1,14 @@ +def tabla_multiplicar(numero): + multiplicacion = [] + for i in range(1,11): + multiplicacion.append(numero * i) + return multiplicacion + +def imprimir(multiplicacion, numero): + for i in range(len(multiplicacion)): + print(numero, "x", (i + 1) ,"=",multiplicacion[i]) + + +numero = int(input("Ingresa un numero: ")) +multiplicacion = tabla_multiplicar(numero) +imprimir(multiplicacion, numero) From d26c4a9406fc8a655cf444e469c4cb0b3f923731 Mon Sep 17 00:00:00 2001 From: pyRamsd Date: Sun, 15 Oct 2023 20:58:13 -0500 Subject: [PATCH 0250/2103] Reto #39 - python --- .../python/pyramsd.py" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/pyramsd.py" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/pyramsd.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/pyramsd.py" new file mode 100644 index 0000000000..0f85ba4637 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/pyramsd.py" @@ -0,0 +1,10 @@ +def encontrar_triples_pitagoricos(numero): + triples = [] + for a in range(1, numero + 1): + for b in range(a, numero + 1): + c = (a**2 + b**2)**0.5 + if c.is_integer() and c <= numero: + triples.append((a, b, int(c))) + return triples + +print(encontrar_triples_pitagoricos(10)) \ No newline at end of file From 329bde1cd8e93815503e06470a34f315bc9f9e1a Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Sun, 15 Oct 2023 22:29:24 -0500 Subject: [PATCH 0251/2103] [RETO 18] Done --- .../go/ddaniel27.go" | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/go/ddaniel27.go" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/go/ddaniel27.go" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/go/ddaniel27.go" new file mode 100644 index 0000000000..5bb12b71db --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/go/ddaniel27.go" @@ -0,0 +1,35 @@ +// A quien lea esto +// No es la mejor solucion a decir verdad +// Pero es lo mas practico que se me ocurrio +// No se si es la mejor forma de hacerlo +// Pero funciona y tampoco quiero +// Pasar mucho tiempo en esto +// Ademas en la web no hay mucho que identifique +// A los articulos de la pagina +// Esta hecho con notion +package main + +import ( + "fmt" + + "github.com/PuerkitoBio/goquery" + "github.com/gocolly/colly" +) + +func main() { + c := colly.NewCollector() + + count := 0 + + c.OnHTML("article[class]", func(e *colly.HTMLElement) { + count++ + if count == 8 { + children := e.DOM.Children() + children.Slice(13, 28).Each(func(_ int, s *goquery.Selection) { + fmt.Println(s.Text()) + }) + } + }) + + c.Visit("https://holamundo.day") +} From a41af908446da4bcf1a7cb0e8a082189f9e4b1d9 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Sun, 15 Oct 2023 22:40:11 -0500 Subject: [PATCH 0252/2103] [RETO 19] Done --- .../go/ddaniel27.go" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/go/ddaniel27.go" diff --git "a/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/go/ddaniel27.go" "b/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/go/ddaniel27.go" new file mode 100644 index 0000000000..a9b038acbf --- /dev/null +++ "b/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/go/ddaniel27.go" @@ -0,0 +1,29 @@ +package main + +import "regexp" + +func main() { + str := "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In mattis elementum ultrices. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin ullamcorper feugiat diam ultricies dapibus. Donec ut nisl eros. Aliquam cursus interdum enim, eget porttitor neque hendrerit aliquet." + wordsRe := regexp.MustCompile(`\w+`) + sentencesRe := regexp.MustCompile(`[.!?]`) + + words := wordsRe.FindAllString(str, -1) + sentences := sentencesRe.FindAllString(str, -1) + + var maxWord string + maxLengthWord := 0 + medianLengthWord := 0 + for _, word := range words { + medianLengthWord += len(word) + if len(word) > maxLengthWord { + maxLengthWord = len(word) + maxWord = word + } + } + medianLengthWord /= len(words) + + println("Total words count:", len(words)) + println("Median words length:", medianLengthWord) + println("Sentences count:", len(sentences)) + println("Max words count and word:", maxLengthWord, maxWord) +} From b284c51d157a15c84b187c655b225d5e10995d9d Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Sun, 15 Oct 2023 23:13:35 -0500 Subject: [PATCH 0253/2103] [RETO 20] Done --- .../go/ddaniel27.go | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Retos/Reto #20 - LA TRIFUERZA [Media]/go/ddaniel27.go diff --git a/Retos/Reto #20 - LA TRIFUERZA [Media]/go/ddaniel27.go b/Retos/Reto #20 - LA TRIFUERZA [Media]/go/ddaniel27.go new file mode 100644 index 0000000000..4d9e002fc2 --- /dev/null +++ b/Retos/Reto #20 - LA TRIFUERZA [Media]/go/ddaniel27.go @@ -0,0 +1,27 @@ +package main + +import "strings" + +func main() { + println(triangle(10)) +} + +func triangle(n int) string { + s := 0 + tri := strings.Trim(triangleRecursive(n, s), "\n") + var result string + for _, v := range strings.Split(tri, "\n") { + result += strings.Repeat(" ", n) + v + "\n" + } + for _, v := range strings.Split(tri, "\n") { + result += v + " " + v + "\n" + } + return strings.Trim(result, "\n") +} + +func triangleRecursive(n, s int) string { + if n == 0 { + return "" + } + return strings.Repeat(" ", n-1) + strings.Repeat("*", 2*s+1) + strings.Repeat(" ", n-1) + "\n" + triangleRecursive(n-1, s+1) +} From b1000651db08f26063c4993263bb7d237386da5e Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Sun, 15 Oct 2023 23:17:55 -0500 Subject: [PATCH 0254/2103] [RETO 21] Done --- .../go/ddaniel27.go" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/go/ddaniel27.go" diff --git "a/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/go/ddaniel27.go" "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/go/ddaniel27.go" new file mode 100644 index 0000000000..7ab75867c8 --- /dev/null +++ "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/go/ddaniel27.go" @@ -0,0 +1,30 @@ +package main + +func main() { + max := 14 + twinPrimes := map[int]int{} + + for i := 2; i <= max-2; i++ { + if IsPrime(i) && IsPrime(i+2) { + twinPrimes[i] = i + 2 + } + } + + for key, value := range twinPrimes { + println(key, value) + } +} + +func IsPrime(num int) bool { + if num == 1 { + return false + } + + for i := 2; i <= num/2; i++ { + if num%i == 0 { + return false + } + } + + return true +} From 942499a9047b7824dcf5f7c6b0aa54b8351ff282 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Mon, 16 Oct 2023 00:07:30 -0500 Subject: [PATCH 0255/2103] [RETO 22] Done --- .../go/ddaniel27.go | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Retos/Reto #22 - LA ESPIRAL [Media]/go/ddaniel27.go diff --git a/Retos/Reto #22 - LA ESPIRAL [Media]/go/ddaniel27.go b/Retos/Reto #22 - LA ESPIRAL [Media]/go/ddaniel27.go new file mode 100644 index 0000000000..6497d70d68 --- /dev/null +++ b/Retos/Reto #22 - LA ESPIRAL [Media]/go/ddaniel27.go @@ -0,0 +1,48 @@ +package main + +import "strings" + +func main() { + println(spiral(5)) +} + +func spiral(side int) string { + symbols := []string{"═", "║", "╗", "╔", "╝", "╚"} + result := strings.Repeat(symbols[0], side-1) + symbols[2] + "\n" + for i := 1; i < side; i++ { + if i <= side/2 { + result += strings.Repeat( + symbols[1], + i-1, + ) + + symbols[3] + + strings.Repeat( + symbols[0], + side-(i*2+1), + ) + + symbols[2] + + strings.Repeat( + symbols[1], + i, + ) + + "\n" + } else { + result += strings.Repeat( + symbols[1], + side-i-1, + ) + + symbols[5] + + strings.Repeat( + symbols[0], + i*2-side, + ) + + symbols[4] + + strings.Repeat( + symbols[1], + side-i-1, + ) + + "\n" + } + } + return result +} From 2b61746faa14d0029cba2423986e5e1234807ad6 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Mon, 16 Oct 2023 00:14:51 -0500 Subject: [PATCH 0256/2103] [RETO 23] Done --- .../go/ddaniel27.go | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Retos/Reto #23 - LA BASE DE DATOS [Media]/go/ddaniel27.go diff --git a/Retos/Reto #23 - LA BASE DE DATOS [Media]/go/ddaniel27.go b/Retos/Reto #23 - LA BASE DE DATOS [Media]/go/ddaniel27.go new file mode 100644 index 0000000000..1b5e6dbd27 --- /dev/null +++ b/Retos/Reto #23 - LA BASE DE DATOS [Media]/go/ddaniel27.go @@ -0,0 +1,32 @@ +package main + +import ( + "database/sql" + + _ "github.com/go-sql-driver/mysql" +) + +func main() { + db, err := sql.Open("mysql", "mouredev_read:mouredev_pass@tcp(mysql-5707.dinaserver.com:3306)/moure_test") + if err != nil { + panic(err.Error()) + } + defer db.Close() + + rows, err := db.Query("SELECT * FROM challenges") + if err != nil { + panic(err.Error()) + } + defer rows.Close() + + for rows.Next() { + var id int + var name, difficulty, date string + + err = rows.Scan(&id, &name, &difficulty, &date) + if err != nil { + panic(err.Error()) + } + println(id, name, difficulty, date) + } +} From 27f8302886d99bf61c99e9678abd2d073a9ddb58 Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Mon, 16 Oct 2023 00:26:29 -0500 Subject: [PATCH 0257/2103] [RETO 24] Done --- .../go/ddaniel27.go" | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 "Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/go/ddaniel27.go" diff --git "a/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/go/ddaniel27.go" "b/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/go/ddaniel27.go" new file mode 100644 index 0000000000..6f7ea96bbb --- /dev/null +++ "b/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/go/ddaniel27.go" @@ -0,0 +1,42 @@ +package main + +func main() { + str := "Hello, World!" + shift := 3 + encrypted := encrypt(str, shift) + decripted := decrypt(encrypted, shift) + println(encrypted) + println(decripted) +} + +func encrypt(str string, shift int) string { + var encrypted string + for _, c := range str { + if (c < 'a' || c > 'z') && (c < 'A' || c > 'Z') { + encrypted += string(c) + continue + } + aux := c + rune(shift) + if (aux > 'Z' && aux < 'a') || aux > 'z' { + aux -= 26 + } + encrypted += string(aux) + } + return encrypted +} + +func decrypt(str string, shift int) string { + var decrypted string + for _, c := range str { + if (c < 'a' || c > 'z') && (c < 'A' || c > 'Z') { + decrypted += string(c) + continue + } + aux := c - rune(shift) + if (aux < 'a' && aux > 'Z') || aux < 'A' { + aux += 26 + } + decrypted += string(aux) + } + return decrypted +} From 749121b476e7e2148d2cd0efa0bf3f8f9834a57e Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Mon, 16 Oct 2023 01:04:53 -0500 Subject: [PATCH 0258/2103] [RETO 25] Done --- .../go/ddaniel27.go" | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 "Retos/Reto #25 - EL C\303\223DIGO KONAMI [Media]/go/ddaniel27.go" diff --git "a/Retos/Reto #25 - EL C\303\223DIGO KONAMI [Media]/go/ddaniel27.go" "b/Retos/Reto #25 - EL C\303\223DIGO KONAMI [Media]/go/ddaniel27.go" new file mode 100644 index 0000000000..84ec9046fc --- /dev/null +++ "b/Retos/Reto #25 - EL C\303\223DIGO KONAMI [Media]/go/ddaniel27.go" @@ -0,0 +1,74 @@ +package main + +import ( + "fmt" + + "github.com/nsf/termbox-go" +) + +func main() { + var inputUser []rune + err := termbox.Init() + if err != nil { + panic(err) + } + defer termbox.Close() + + for { + switch ev := termbox.PollEvent(); ev.Type { + case termbox.EventError: + panic(ev.Err) + case termbox.EventInterrupt: + return + case termbox.EventKey: + termbox.Sync() + inputUser = append(inputUser, getKey(ev)) + if checkKonamiCode(inputUser) { + fmt.Println("Konami Code") + return + } + } + } +} + +func checkKonamiCode(k []rune) bool { + println(string(k)) + konamiCode := []rune{'↑', '↑', '↓', '↓', '←', '→', '←', '→', 'B', 'A'} + if len(k) < len(konamiCode) { + return false + } + if len(k) > len(konamiCode) { + k = k[len(k)-len(konamiCode):] + } + for i := 0; i < len(konamiCode); i++ { + if k[i] != konamiCode[i] { + return false + } + } + return true +} + +func getKey(key termbox.Event) rune { + switch key.Key { + case termbox.KeyArrowUp: + return '↑' + case termbox.KeyArrowDown: + return '↓' + case termbox.KeyArrowLeft: + return '←' + case termbox.KeyArrowRight: + return '→' + case termbox.KeySpace: + return ' ' + case termbox.KeyEnter: + return '\n' + case termbox.KeyTab: + return '\t' + case termbox.KeyBackspace: + return '\b' + case termbox.KeyEsc: + return 27 + default: + return key.Ch + } +} From b8cce0db5dabd595a2f38deea9ca937572a7fe60 Mon Sep 17 00:00:00 2001 From: Jorge Marchan <8100110+jorma16@users.noreply.github.com> Date: Mon, 16 Oct 2023 08:33:53 +0200 Subject: [PATCH 0259/2103] Reto #40 - Python --- .../python/jorma16.py" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/jorma16.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/jorma16.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/jorma16.py" new file mode 100644 index 0000000000..a4268af356 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/jorma16.py" @@ -0,0 +1,23 @@ +def get_table(number: int) -> list: + result = [] + for i in range(0, 10): + result.append((i+1)*number) + + return result + +def request_input() -> int: + try: + number = int(input('Enter an integer to write the multiplication table: ')) + return number + except ValueError: + print('Not integer value detected...') + + return number + +def print_table(number: int): + table = get_table(number) + for idx, value in enumerate(table): + print(f"{number} x {idx + 1} = {value}") + +number = request_input() +print_table(number) From a81195dcd836da5d868a4b41ac82d91fada0e64f Mon Sep 17 00:00:00 2001 From: alexgarcia1907 <72034975+alexgarcia1907@users.noreply.github.com> Date: Mon, 16 Oct 2023 12:40:18 +0200 Subject: [PATCH 0260/2103] Rename alexgarcia.js to alexgarcia1907.js --- .../javascript/alexgarcia1907.js" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alexgarcia.js" => "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alexgarcia1907.js" (96%) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alexgarcia.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alexgarcia1907.js" similarity index 96% rename from "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alexgarcia.js" rename to "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alexgarcia1907.js" index c631d0d47a..ffd00fa33a 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alexgarcia.js" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alexgarcia1907.js" @@ -19,4 +19,4 @@ function generateMultiplicationTable(number) { } } -askAndValidateNumber() \ No newline at end of file +askAndValidateNumber() From 7b27526d0dd01c3d2f171877a6f41f8a3b50d44a Mon Sep 17 00:00:00 2001 From: alexgarcia1907 <72034975+alexgarcia1907@users.noreply.github.com> Date: Mon, 16 Oct 2023 12:42:30 +0200 Subject: [PATCH 0261/2103] Rename alexgarcia.js to alexgarcia1907.js --- .../javascript/{alexgarcia.js => alexgarcia1907.js} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Retos/Reto #38 - LAS SUMAS [Media]/javascript/{alexgarcia.js => alexgarcia1907.js} (95%) diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/javascript/alexgarcia.js b/Retos/Reto #38 - LAS SUMAS [Media]/javascript/alexgarcia1907.js similarity index 95% rename from Retos/Reto #38 - LAS SUMAS [Media]/javascript/alexgarcia.js rename to Retos/Reto #38 - LAS SUMAS [Media]/javascript/alexgarcia1907.js index fe2a65c4f9..124e4f6be6 100644 --- a/Retos/Reto #38 - LAS SUMAS [Media]/javascript/alexgarcia.js +++ b/Retos/Reto #38 - LAS SUMAS [Media]/javascript/alexgarcia1907.js @@ -28,4 +28,4 @@ function find_sums(numbers, target) { return result } -console.log(find_sums([1, 5, 2, 2, 1, 1], 6)) \ No newline at end of file +console.log(find_sums([1, 5, 2, 2, 1, 1], 6)) From 323ee2220e7c51a3bc5877135ee73b34c04f251f Mon Sep 17 00:00:00 2001 From: jlcontini Date: Mon, 16 Oct 2023 10:48:55 -0300 Subject: [PATCH 0262/2103] Se agrega archivo jlcontini.py en Retos #2 - EL PARTIDO DE TENIS --- .../python/jlcontini.py | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/jlcontini.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/jlcontini.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/jlcontini.py new file mode 100644 index 0000000000..b9ff846c39 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/jlcontini.py @@ -0,0 +1,104 @@ +""" +# Reto #2: EL PARTIDO DE TENIS +#### Dificultad: Media | Publicación: 09/01/23 | Corrección: 16/01/23 + +## Enunciado + +``` +/* + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. +""" + +# ['P1', 'P1', 'P2', 'P2', 'P1', 'P2', 'P1', 'P1'] +# Caso con datos que sobran +# ['P1', 'P1', 'P1', 'P1', 'P1', 'P2', 'P1', 'P1'] +# Caso con falta de datos +# ['P1', 'P1', 'P1', 'P2', 'P2', 'P2', 'P1', 'P2'] + +point_winner_list: [str] = ['P1', 'P1', 'P2', 'P2', 'P1', 'P2', 'P1', 'P1'] + +GAME_SCORE: tuple = ("Love", 15, 30, 40, "Deuce", "Advantage") + +# Titulo +TITLE: str = ("TENIS GAME SIMULATION") +print(f"\n\n{'*' * 70}\n{(TITLE).center(70, '-')}\n{'*' * 70}\n") + + +def tennis_game_scoring(point_winner_list: list[str]) -> str: + game_winner = '' + + while game_winner not in ['P1', 'P2', 'No one']: + p1 = 0 + p2 = 0 + + for point_winner in point_winner_list: + + # Sum points + if point_winner == "P1": + p1 += 1 + if point_winner == "P2": + p2 += 1 + + # Logic for winner and Deuce # Show game score + if p1 > 3 or p2 > 3 or (p1 == 3 and p2 == 3): + result = int(p1 - p2) + if result == 0: # Deuce + print(f"{GAME_SCORE[4]}") + if result == 1: # Advantage P1 + print(f"{GAME_SCORE[5]} P1") + if result == -1: # Advantage P2 + print(f"{GAME_SCORE[5]} P2") + if result >= 2: + game_winner = "P1" + if result <= -2: + game_winner = "P2" + + else: + print(f"{GAME_SCORE[p1]} - {GAME_SCORE[p2]}") + + if game_winner not in ['P1', 'P2']: + game_winner = 'No one' + print("Missing points to finish game") + + return game_winner + + +def display_game_winner(game_winner) -> str: + display = (str(f""" + {('*' * 25)} + {(str(game_winner) + str(' wins the game')).center(25, '-')} + {('*' * 25)} + """)) + return(display) + + + +def main(): + game_winner = tennis_game_scoring(point_winner_list) + print(display_game_winner(game_winner)) + + +if __name__ == "__main__": + main() From e56c45cdcac0689549515ca6c75beeb65c82da15 Mon Sep 17 00:00:00 2001 From: mstrnilsson Date: Mon, 16 Oct 2023 16:36:56 +0200 Subject: [PATCH 0263/2103] Reto mouredev#40 - Python incluye menu --- .../python/MstrNilsson.py" | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" index e379930b1e..c6c9b3e23d 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/MstrNilsson.py" @@ -1,3 +1,4 @@ + """ * Crea un programa que sea capaz de solicitarte un número y se * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. @@ -8,10 +9,24 @@ * ... """ -def MultiplicationTable(n): +def MultiplicationTable(n:int): for i in range(1, 11): print(f"{n} x {i} = {n*i}") + menu() if __name__ == "__main__": - n = int(input("¿De qué número quieres la tabla de multiplicar?: ")) - MultiplicationTable(n) \ No newline at end of file + + def menu(): + chosen_element = input("\nElegir numero de tabla de multiplicar, X:Salir \n") + + if chosen_element.isnumeric() and int(chosen_element) <= 10: + n = int(chosen_element) + MultiplicationTable(n) + + elif chosen_element == "X" or chosen_element == "x": + exit + + else: + print("\nOpción no válida, vuelve a intentarlo") + menu() + menu() \ No newline at end of file From 2631fca8a5f7bfe35307aa7f1fcdd03d1770365b Mon Sep 17 00:00:00 2001 From: George Erazo Date: Mon, 16 Oct 2023 09:37:29 -0500 Subject: [PATCH 0264/2103] Cambio de nombre a mis archivos --- .../java/George241915.java" | 0 .../python/George241915.py" | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/george24.java" => "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/George241915.java" (100%) rename "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/george24.py" => "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/George241915.py" (100%) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/george24.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/George241915.java" similarity index 100% rename from "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/george24.java" rename to "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/George241915.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/george24.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/George241915.py" similarity index 100% rename from "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/george24.py" rename to "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/George241915.py" From a23e4c06e51c0b528df459b7b9803c9a5783050b Mon Sep 17 00:00:00 2001 From: Oscar Hernandez Date: Mon, 16 Oct 2023 09:01:47 -0600 Subject: [PATCH 0265/2103] Solucion ejercicio #2 --- .../python/oscar503sv.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/oscar503sv.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/oscar503sv.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/oscar503sv.py new file mode 100644 index 0000000000..9e96282d0c --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/oscar503sv.py @@ -0,0 +1,67 @@ +''' +* Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. +* El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien +* gane cada punto del juego. +* +* - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. +* - Ante la secuencia[P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. +''' + +def calcular_puntuacion(puntuacion): + if puntuacion == 0: + return "Love" + elif puntuacion == 1: + return 15 + elif puntuacion == 2: + return 30 + elif puntuacion == 3: + return 40 + else: + return "Ventaja" + +def mostrar_puntuacion(p1_puntuacion, p2_puntuacion): + if p1_puntuacion >= 3 and p2_puntuacion >= 3: + if p1_puntuacion == p2_puntuacion: + return "Deuce" + elif p1_puntuacion > p2_puntuacion: + return "Ventaja P1" + else: + return "Ventaja P2" + else: + return f"{calcular_puntuacion(p1_puntuacion)} - {calcular_puntuacion(p2_puntuacion)}" + +def jugar_tenis(secuencia): + p1_puntuacion = 0 + p2_puntuacion = 0 + + for punto in secuencia: + if punto == "P1": + p1_puntuacion += 1 + elif punto == "P2": + p2_puntuacion += 1 + else: + print("Error: Entrada inválida") + return + + puntuacion_actual = mostrar_puntuacion(p1_puntuacion, p2_puntuacion) + print(puntuacion_actual) + + if puntuacion_actual == "Ventaja P1": + print("Ha ganado el P1") + return + elif puntuacion_actual == "Ventaja P2": + print("Ha ganado el P2") + return + +secuencia = ["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"] +jugar_tenis(secuencia) From e60e95d61a184783c6df8a303c770147ce933b51 Mon Sep 17 00:00:00 2001 From: isra Date: Mon, 16 Oct 2023 12:12:11 -0300 Subject: [PATCH 0266/2103] Reto #40 - python --- .../python/isravm89w.py" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/isravm89w.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/isravm89w.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/isravm89w.py" new file mode 100644 index 0000000000..f3f25ed9eb --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/isravm89w.py" @@ -0,0 +1,15 @@ + +if __name__ == "__main__": + + while True: + try: + number = int(input("Enter a number between 1 and 10: \n")) + if number < 1 or number > 10: + raise ValueError + + for index in range(1, 11): + print(f"{number} x {index} = {number * index}") + except ValueError: + continue + else: + break \ No newline at end of file From cef34e765cd1a5792c74e977166caf40e9c354fa Mon Sep 17 00:00:00 2001 From: Mario Ruano Date: Mon, 16 Oct 2023 17:33:00 +0200 Subject: [PATCH 0267/2103] Reto #40 - PHP --- .../php/mrf1989.php" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/php/mrf1989.php" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/php/mrf1989.php" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/php/mrf1989.php" new file mode 100644 index 0000000000..6d08f77ce2 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/php/mrf1989.php" @@ -0,0 +1,16 @@ + Date: Mon, 16 Oct 2023 10:38:22 -0500 Subject: [PATCH 0268/2103] Reto #39 - python --- .../python/pyramsd.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/pyramsd.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/pyramsd.py" index 0f85ba4637..09d6c337f2 100644 --- "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/pyramsd.py" +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/pyramsd.py" @@ -7,4 +7,4 @@ def encontrar_triples_pitagoricos(numero): triples.append((a, b, int(c))) return triples -print(encontrar_triples_pitagoricos(10)) \ No newline at end of file +print(encontrar_triples_pitagoricos(10)) From 038d4b448e344375f4c2abd84073c51fe2a4badf Mon Sep 17 00:00:00 2001 From: Oscar Hernandez Date: Mon, 16 Oct 2023 09:57:27 -0600 Subject: [PATCH 0269/2103] Correcciones ejercicio #2 --- .../python/oscar503sv.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/oscar503sv.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/oscar503sv.py index 9e96282d0c..de1739683b 100644 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/oscar503sv.py +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/oscar503sv.py @@ -34,8 +34,12 @@ def mostrar_puntuacion(p1_puntuacion, p2_puntuacion): if p1_puntuacion == p2_puntuacion: return "Deuce" elif p1_puntuacion > p2_puntuacion: + if p1_puntuacion >= p2_puntuacion+2: + return "Ha ganado P1" return "Ventaja P1" else: + if p2_puntuacion >= p1_puntuacion+2: + return "Ha ganado P2" return "Ventaja P2" else: return f"{calcular_puntuacion(p1_puntuacion)} - {calcular_puntuacion(p2_puntuacion)}" @@ -56,12 +60,10 @@ def jugar_tenis(secuencia): puntuacion_actual = mostrar_puntuacion(p1_puntuacion, p2_puntuacion) print(puntuacion_actual) - if puntuacion_actual == "Ventaja P1": - print("Ha ganado el P1") - return - elif puntuacion_actual == "Ventaja P2": - print("Ha ganado el P2") - return + if puntuacion_actual == "Ha ganado P1" or puntuacion_actual == "Ha ganado P2": + return puntuacion_actual + + -secuencia = ["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"] +secuencia = ["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P2", "P2", "P2"] jugar_tenis(secuencia) From b0495bb62ea1e599efea18a9bb379407a1255dfa Mon Sep 17 00:00:00 2001 From: "alvaro.rod" Date: Mon, 16 Oct 2023 17:58:05 +0200 Subject: [PATCH 0270/2103] Reto #40-Java --- .../java/alvaruncio.java" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/alvaruncio.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/alvaruncio.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/alvaruncio.java" new file mode 100644 index 0000000000..9819aff179 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/alvaruncio.java" @@ -0,0 +1,15 @@ +import java.util.Scanner; + +class alvaruncio { + public static void main(String[] args) { + // Tabla multiplicar + Scanner scanner = new Scanner(System.in); // Creacion del scanner + System.out.print("Escriba el numero cuya tabla de multiplicacion quieres hacer: "); + int numberTableOfMultiplication = scanner.nextInt(); // El usuario introduce el numero del que quiere la tabla de multiplicar + System.out.printf("Tabla de multiplicacion de %d\n", numberTableOfMultiplication); + for (int i = 1; i < 11; i++) { + int result = i * numberTableOfMultiplication; + System.out.printf("%d x %d = %d\n", numberTableOfMultiplication, i, result ); + } + } +} \ No newline at end of file From 55450b8d700bfb5cc107df36f63a59860b4a0e07 Mon Sep 17 00:00:00 2001 From: willbipo Date: Mon, 16 Oct 2023 10:30:25 -0600 Subject: [PATCH 0271/2103] Reto #40 java --- .../java/willbipo.java" | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/willbipo.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/willbipo.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/willbipo.java" new file mode 100644 index 0000000000..9302b76234 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/willbipo.java" @@ -0,0 +1,33 @@ +import java.util.InputMismatchException; +import java.util.Scanner; + +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ +public class willbipo{ + public static void main(String[] args){ + try { + Scanner scanner = new Scanner(System.in); + System.out.print("Ingrese el numero de la tabla deseada: "); + int number = scanner.nextInt(); + imprimeTabla(number); + } catch (InputMismatchException e) { + System.out.println("Inserte un numero entero valido"); + } + + } + + public static void imprimeTabla(int number){ + for (int i = 1; i <= 10; i++) { + System.out.println(number + " x " + i + " = " + number * i ); + } + } + + +} \ No newline at end of file From c7a3bf8b5913dc482ad1fa2eab0bc746fcbec41d Mon Sep 17 00:00:00 2001 From: Dario <143911303+dariomacielpy@users.noreply.github.com> Date: Mon, 16 Oct 2023 14:03:35 -0300 Subject: [PATCH 0272/2103] Create dariomacielpy.py --- .../python/dariomacielpy.py" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/dariomacielpy.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/dariomacielpy.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/dariomacielpy.py" new file mode 100644 index 0000000000..1f44897c4a --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/dariomacielpy.py" @@ -0,0 +1,24 @@ +#Reto #0 +#EL FAMOSO "FIZZ BUZZ" +#Fecha publicación enunciado: 27/12/21 +#Fecha publicación resolución: 03/01/22 +#Dificultad: FÁCIL +#Enunciado: Escribe un programa que muestre por consola (con un print) los números de 1 a 100 (ambos incluidos y con un salto de línea entre cada impresión), sustituyendo los siguientes: +#Múltiplos de 3 por la palabra "fizz". +#Múltiplos de 5 por la palabra "buzz". +#Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + +def fizzbuzz(): + for i in range(1,101): + if i%3 == 0: + print("FIZZ") + elif i%5 == 0: + print("BUZZ") + elif i%15 == 0: + print("FIZZBUZZ") + else: + print(i) + + + +fizzbuzz() From 101efb417a9ddbff51aff76a69fcc75995b5510e Mon Sep 17 00:00:00 2001 From: Dario <143911303+dariomacielpy@users.noreply.github.com> Date: Mon, 16 Oct 2023 14:13:54 -0300 Subject: [PATCH 0273/2103] Create dariomacielpy.py --- .../python/dariomacielpy.py" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/dariomacielpy.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/dariomacielpy.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/dariomacielpy.py" new file mode 100644 index 0000000000..6cb6518e45 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/dariomacielpy.py" @@ -0,0 +1,20 @@ +#Escribe un programa que reciba un texto y transforme lenguaje natural a +#"lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje +#se caracteriza por sustituir caracteres alfanuméricos. +#Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) +#con el alfabeto y los números en "leet". +#(Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + +def traductor(): + frase = input("Ingrese un texto ") + diccionario = {"A": "4", "B": "I3", "C": "[", "D": ")", "E": "3", "F": "|=", "G": "&", "H": "#", "I": "1", + "J": ",_|", "K": ">|", "L": "1", "M": "/\/\\", "N": " ^/", "O": "0", "P": " |*", "Q": "(_,)", + "R": "I2", "S": "5", "T": "7", "U": "(_)", "V": "\/", "W": "\/\/", "X": "><", "Y": "j", "Z": "2", + "1": "L", "2": "R", "3": "E", "4": "A", "5": "S", "6": "b", "7": "T", "8": "B", "9": "g", "0": "o"} + frase_traducida = "" + for letra in frase.upper(): + if letra in diccionario: + frase_traducida += diccionario[letra] + return print(frase_traducida) + +traductor() From 0dc302f6cc1cd83c6fbb59872252d3a9d9b11989 Mon Sep 17 00:00:00 2001 From: Dario <143911303+dariomacielpy@users.noreply.github.com> Date: Mon, 16 Oct 2023 14:27:03 -0300 Subject: [PATCH 0274/2103] Create dariomacielpy.py --- .../python/dariomacielpy.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/dariomacielpy.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/dariomacielpy.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/dariomacielpy.py new file mode 100644 index 0000000000..adf480ba80 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/dariomacielpy.py @@ -0,0 +1,43 @@ +#Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. +#El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien +#gane cada punto del juego +#Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. +#Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: +# 15 - Love +# 30 - Love +# 30 - 15 +# 30 - 30 +# 40 - 30 +#Deuce +#Ventaja P1 +#Ha ganado el P1 +#Si quieres, puedes controlar errores en la entrada de datos. +#Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + + + + +def tenis_game(juego: list): + puntos = {0 : "Love", 1 : 15, 2 : 30, 3 : 40} + pp1 = 0 + pp2 = 0 + for i in juego: + pp1 += 1 if i == "P1" else 0 + pp2 += 1 if i == "P2" else 0 + if pp1 > 4 and pp1 == pp2 + 1: + print("Ventaja P1") + elif pp2 > 4 and pp2 == pp1 + 1: + print("Ventaja P2") + if pp1 >= 4 and pp1 >= pp2 + 2 : + print( "Gano P1") + quit() + elif pp2 >= 4 and pp2 >= pp1 + 2 : + print( "Gano P2") + quit() + if pp1 and pp2 <3: + print(f"{(puntos[pp1])} - {(puntos[pp2])}") + + + + +tenis_game(["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1", "P2", "P1"]) From 14afa5cd4d12de1ab47eb80099bae83c1d558983 Mon Sep 17 00:00:00 2001 From: Neus Roman Date: Mon, 16 Oct 2023 19:31:59 +0200 Subject: [PATCH 0275/2103] Reto #40 - JavaScript --- .../javascript/NeusRomanP.js" | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/NeusRomanP.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/NeusRomanP.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/NeusRomanP.js" new file mode 100644 index 0000000000..574b683da5 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/NeusRomanP.js" @@ -0,0 +1,7 @@ +function multiplicationTable(num){ + for(let i = 1; i <= 10; i++){ + console.log(`${num} x ${i} = ${num * i}`); + } +} + +multiplicationTable(7); \ No newline at end of file From 5a49c8b95d3cce1e9aedb584735ed1cbf597ed81 Mon Sep 17 00:00:00 2001 From: Raul-Martineze <131296826+Raul-Martineze@users.noreply.github.com> Date: Mon, 16 Oct 2023 20:10:47 +0200 Subject: [PATCH 0276/2103] Reto #40 - Python --- .../python/Raul-Martineze.py" | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Raul-Martineze.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Raul-Martineze.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Raul-Martineze.py" new file mode 100644 index 0000000000..aa389cb882 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Raul-Martineze.py" @@ -0,0 +1,9 @@ +def multiply(number): + number = int(number) + for multiplier in range(1,11): + result = number * multiplier + print(f"{number} x {multiplier} = {result}") + +number = input("Introduce un número: ") + +multiply(number) From 425eb46dc3d9a5580aa52661d5c623e4a8fe3557 Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 16 Oct 2023 21:00:32 +0200 Subject: [PATCH 0277/2103] =?UTF-8?q?Correcci=C3=B3n=20Reto=20#40?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++- .../python/mouredev.py" | 9 +++++ .../ejercicio.md" | 37 +++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mouredev.py" create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/ejercicio.md" diff --git a/README.md b/README.md index e17ed2dac0..d29f11b16c 100644 --- a/README.md +++ b/README.md @@ -57,9 +57,10 @@ Aquí encontrarás el listado de retos, su fecha de publicación, dificultad y e * **#37** - 18/09/23 | Media | [`COLORES HEX Y RGB`](./Retos/Reto%20%2337%20-%20COLORES%20HEX%20Y%20RGB%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2337%20-%20COLORES%20HEX%20Y%20RGB%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2337%20-%20COLORES%20HEX%20Y%20RGB%20%5BMedia%5D/)] * **#38** - 25/09/23 | Media | [`LAS SUMAS`](./Retos/Reto%20%2338%20-%20LAS%20SUMAS%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2338%20-%20LAS%20SUMAS%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2338%20-%20LAS%20SUMAS%20%5BMedia%5D/)] * **#39** - 02/10/23 | Media | [`TRIPLES PITAGÓRICOS`](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/)] -* **#40** - 09/10/23 | Fácil | [`TABLA DE MULTIPLICAR`](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/ejercicio.md) | Último reto publicado +* **#40** - 09/10/23 | Fácil | [`TABLA DE MULTIPLICAR`](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/)] +* **#41** - 16/10/23 | Difícil | [`LA CASA ENCANTADA`](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/ejercicio.md) | Último reto publicado -> **Corrección y Publicación próximo reto - 16/10/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1160805012558065775) en [Twitch](https://twitch.tv/mouredev)** +> **Corrección y Publicación próximo reto - 23/10/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1163426241689427998) en [Twitch](https://twitch.tv/mouredev)** *Puedes ejecutar el archivo [language_stats.py](./Retos/language_stats.py) para visualizar las estadísticas de uso de cada lenguaje.* diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mouredev.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mouredev.py" new file mode 100644 index 0000000000..739142e3c6 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/mouredev.py" @@ -0,0 +1,9 @@ +try: + number = int(input("Introduce el número para generar su tabla de multiplicar: ")) + + for i in range(1, 11): + print(f"{number} x {i} = {number * i}") + +except ValueError: + print("Error: Introduce un número entero válido.") + diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/ejercicio.md" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/ejercicio.md" new file mode 100644 index 0000000000..a07b518af4 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/ejercicio.md" @@ -0,0 +1,37 @@ +# Reto #41: La casa encantada +#### Dificultad: Difícil | Publicación: 16/10/23 | Corrección: 23/10/23 + +## Enunciado + +``` +/* + * Este es un reto especial por Halloween. + * Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces. + * + * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. + * (Tienes total libertad para ser creativo con los textos) + * + * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 + * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. + * (16 habitaciones, siendo una de entrada y otra donde están los dulces) + * Esta podría ser una representación: + * 🚪⬜️⬜️⬜️ + * ⬜️👻⬜️⬜️ + * ⬜️⬜️⬜️👻 + * ⬜️⬜️🍭⬜️ + * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. + * Si no lo aciertas no podrás desplazarte. + * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. + * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) + * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. + * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y + * tengas que responder dos preguntas para salir de ella. + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file From 6ef9a1bfa731eb23261e3261a35387da9275ea05 Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 16 Oct 2023 21:03:35 +0200 Subject: [PATCH 0278/2103] =?UTF-8?q?Correcci=C3=B3n=20Reto=20#40?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d29f11b16c..8015356124 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ Aquí encontrarás el listado de retos, su fecha de publicación, dificultad y e * **#38** - 25/09/23 | Media | [`LAS SUMAS`](./Retos/Reto%20%2338%20-%20LAS%20SUMAS%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2338%20-%20LAS%20SUMAS%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2338%20-%20LAS%20SUMAS%20%5BMedia%5D/)] * **#39** - 02/10/23 | Media | [`TRIPLES PITAGÓRICOS`](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/)] * **#40** - 09/10/23 | Fácil | [`TABLA DE MULTIPLICAR`](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/)] -* **#41** - 16/10/23 | Difícil | [`LA CASA ENCANTADA`](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/ejercicio.md) | Último reto publicado +* **#41** - 16/10/23 | Difícil | [`LA CASA ENCANTADA`](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/ejercicio.md) | Último reto publicado > **Corrección y Publicación próximo reto - 23/10/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1163426241689427998) en [Twitch](https://twitch.tv/mouredev)** From c9a8ef0b66493d29878d13f976f484c6e6b0668c Mon Sep 17 00:00:00 2001 From: patriciotrujilllo Date: Mon, 16 Oct 2023 17:38:35 -0300 Subject: [PATCH 0279/2103] Reto #32 resolve --- .../javascript/patriciotrujilllo.js | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/javascript/patriciotrujilllo.js diff --git a/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/javascript/patriciotrujilllo.js b/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/javascript/patriciotrujilllo.js new file mode 100644 index 0000000000..910eb937d8 --- /dev/null +++ b/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/javascript/patriciotrujilllo.js @@ -0,0 +1,34 @@ +/* + * Crea una función que calcule el número de la columna de una hoja de Excel + * teniendo en cuenta su nombre. + * - Las columnas se designan por letras de la "A" a la "Z" de forma infinita. + * - Ejemplos: A = 1, Z = 26, AA = 27, CA = 79. + */ + +function calculatorColumns (column) { + const toArray = column.toUpperCase().split('') + const abecedario = 'abcdefghijklmnopqrstuvwxyz'.toUpperCase().split('') + + numberString = [] + let acumulator = 0 + + abecedario.forEach((char,index)=>{ + numberString[char] = index +1 + }) + + let j = toArray.length-1 + + for (item of toArray){ + const valor = numberString[item] + const m = Math.pow(26,j) + acumulator = acumulator + valor*m + j-- + } + return acumulator +} +console.log( calculatorColumns('z')) +console.log( calculatorColumns('ad')) +console.log(calculatorColumns('aa')) +console.log(calculatorColumns('ca')) + +console.log(calculatorColumns('cac')) From ebcf8999910b91a44a9ddfc6aa0ec772ecb5cbe1 Mon Sep 17 00:00:00 2001 From: Ricardo Alfaro Date: Mon, 16 Oct 2023 16:02:51 -0600 Subject: [PATCH 0280/2103] Reto #3 - Java --- .../java/rearalf.java" | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/java/rearalf.java" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/java/rearalf.java" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/java/rearalf.java" new file mode 100644 index 0000000000..e11faa211e --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/java/rearalf.java" @@ -0,0 +1,104 @@ +import java.util.Scanner; + +public class rearalf { + public static void main(String[] args) throws Exception { + Scanner scanner = new Scanner(System.in); + int passwordLength = 0; + boolean capitalLetters = false; + boolean numbers = false; + boolean symbols = false; + boolean isValidInput = false; + + do { + System.out.print("Password must be between 8 and 16 in length: "); + passwordLength = scanner.nextInt(); + if (passwordLength >= 8 && passwordLength <= 16) { + isValidInput = true; + } else + System.out.println("Invalid password length. Please enter a value between 8 and 16."); + } while (!isValidInput); + System.out.println(""); + + isValidInput = false; + do { + try { + System.out.print("Include uppercase characters (true/false): "); + capitalLetters = scanner.nextBoolean(); + isValidInput = true; + } catch (Exception e) { + System.out.println("Invalid input. Please enter 'true' or 'false'."); + System.out.println(""); + scanner.nextLine(); + } + } while (!isValidInput); + System.out.println(""); + + isValidInput = false; + do { + try { + System.out.print("Include numbers (true/false): "); + numbers = scanner.nextBoolean(); + isValidInput = true; + } catch (Exception e) { + System.out.println("Invalid input.Please enter 'true' or 'false'."); + System.out.println(""); + scanner.nextLine(); + } + } while (!isValidInput); + System.out.println(""); + + isValidInput = false; + do { + try { + System.out.print("Include symbols (true/false): "); + symbols = scanner.nextBoolean(); + isValidInput = true; + } catch (Exception e) { + System.out.println("Invalid input.Please enter 'true' or 'false'."); + System.out.println(""); + scanner.nextLine(); + } + } while (!isValidInput); + System.out.println(""); + + System.out.println(""); + System.out.println("The password is: " + + GeneratePassword(passwordLength, + capitalLetters, + numbers, + symbols)); + System.out.println(""); + + scanner.close(); + } + + public static String GeneratePassword(int passwordLength, boolean withUpperCase, boolean withNumbers, + boolean withSymbols) { + String lowerCaseChars = "abcdefghijklmnopqrstuvwxyz"; + String upperCaseChas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + String numberChars = "0123456789"; + String symbolChars = "!@#$%^&*()-_+="; + + StringBuilder password = new StringBuilder(); + + String availableChars = lowerCaseChars; + + if (withUpperCase) + availableChars += upperCaseChas; + + if (withNumbers) + availableChars += numberChars; + + if (withSymbols) + availableChars += symbolChars; + + for (int i = 0; i < passwordLength; i++) { + int randomIndex = (int) (Math.random() * availableChars.length()); + char randomChar = availableChars.charAt(randomIndex); + password.append(randomChar); + } + + return password.toString(); + } + +} From 7fbac73f83b9208f237f76c18017f357956a6293 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez Lopez Date: Tue, 17 Oct 2023 00:10:17 +0200 Subject: [PATCH 0281/2103] Reto 41: Python --- .../python/klyone.py" | 185 ++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/klyone.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/klyone.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/klyone.py" new file mode 100644 index 0000000000..9a87e86b66 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/klyone.py" @@ -0,0 +1,185 @@ +#!/usr/bin/env python3 + +import random + +entry = "🚪" +exit = "🍭" +room = "⬜" +ghost = "👻" +player = "🐍" + +questions_list = [ + ["Who is the most famous vampire?", "Dracula"], + ["Is Halloween scary?", "Yes"], + ["Who is the craziest scientist?", "Frankestein"], +] + +def get_random_question(): + nq = len(questions_list) + + n = random.randint(0, nq-1) + + return questions_list[n] + +def is_up_possible(player_pos): + if player_pos[0] == 0: + return False + return True + +def move_up(player_pos): + if not is_up_possible(player_pos): + return + + player_pos[0] -= 1 + +def is_down_possible(player_pos): + if player_pos[0] == 3: + return False + return True + +def move_down(player_pos): + if not is_down_possible(player_pos): + return + + player_pos[0] += 1 + +def is_left_possible(player_pos): + if player_pos[1] == 0: + return False + return True + +def move_left(player_pos): + if not is_left_possible(player_pos): + return + + player_pos[1] -= 1 + +def is_right_possible(player_pos): + if player_pos[1] == 3: + return False + return True + +def move_right(player_pos): + if not is_right_possible(player_pos): + return + + player_pos[1] += 1 + +def create_empty_house(): + house = [] + for i in range(4): + house.append([room] * 4) + return house + +def place_ramdom_ghost(house, prob=10): + for i in range(4): + for j in range(4): + if house[i][j] != room: + continue + p = random.randint(0, 100) + if p <= prob: + house[i][j] = ghost + +def place_random_element(house, element): + i = random.randint(0, 3) + j = random.randint(0, 3) + + if house[i][j] == room: + house[i][j] = element + else: + place_random_element(house, element) + +def find_element(house, element): + found = False + pos = [] + + for i in range(4): + for j in range(4): + if house[i][j] == element: + found = True + pos = [i, j] + break + if found: + break + return pos + +def ask_question(): + [question, response] = get_random_question() + print(question) + + answer = input("Answer: ") + + if answer == response: + return True + return False + +def print_house(house, player_pos=[]): + print("") + for i in range(4): + line = "" + for j in range(4): + if player_pos == [i,j]: + line += player + else: + line += house[i][j] + print(line) + print("") + +if __name__ == "__main__": + house = create_empty_house() + place_random_element(house, entry) + place_random_element(house, exit) + place_ramdom_ghost(house) + player_pos = find_element(house, entry) + print_house(house, player_pos) + + end_game = False + + while not end_game: + movs = [] + + if is_up_possible(player_pos): + movs += "u" + if is_down_possible(player_pos): + movs += "d" + if is_left_possible(player_pos): + movs += "l" + if is_right_possible(player_pos): + movs += "r" + + m = input("Allowed movements ("+ "".join(movs) +"): ") + print("") + + if not m in movs: + print("Bad movement, try again") + continue + + if m == "u": + move_up(player_pos) + elif m == "d": + move_down(player_pos) + elif m == "l": + move_left(player_pos) + else: + move_right(player_pos) + + print_house(house, player_pos) + + if house[player_pos[0]][player_pos[1]] == exit: + print("Congratulations, you win!") + end_game = True + break + + questions = 1 + + if house[player_pos[0]][player_pos[1]] == ghost: + questions += 1 + + for i in range(questions): + ok = ask_question() + if not ok: + print("Game over! You lose") + break + + if not ok: + break From 112985ba62067040db7fff4e8126128850dc6681 Mon Sep 17 00:00:00 2001 From: Aridane Mirabal Date: Mon, 16 Oct 2023 23:30:53 +0100 Subject: [PATCH 0282/2103] reto 41 --- .../python/sri7ach1.py" | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/sri7ach1.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/sri7ach1.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/sri7ach1.py" new file mode 100644 index 0000000000..91bef632f4 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/sri7ach1.py" @@ -0,0 +1,108 @@ +''' +/* + * Este es un reto especial por Halloween. + * Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces. + * + * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. + * (Tienes total libertad para ser creativo con los textos) + * + * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 + * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. + * (16 habitaciones, siendo una de entrada y otra donde están los dulces) + * Esta podría ser una representación: + * 🚪⬜️⬜️⬜️ + * ⬜️👻⬜️⬜️ + * ⬜️⬜️⬜️👻 + * ⬜️⬜️🍭⬜️ + * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. + * Si no lo aciertas no podrás desplazarte. + * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. + * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) + * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. + * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y + * tengas que responder dos preguntas para salir de ella. + */ +''' + +import random + +def generarMansion(): + mansion = [["⬜️" for _ in range(4)] for _ in range(4)] + mansion[random.randint(0, 3)][random.randint(0, 3)] = "🚪" + mansion[random.randint(0, 3)][random.randint(0, 3)] = "🍭" + for _ in range(2): + x, y = random.randint(0, 3), random.randint(0, 3) + while mansion[x][y] != "⬜️": + x, y = random.randint(0, 3), random.randint(0, 3) + mansion[x][y] = "👻" + return mansion + +mansion = generarMansion() + +def generarEnigma(): + enigmas = [ + {"pregunta": "¿Qué tiene ojos pero no puede ver?", "respuesta": "Una aguja"}, + {"pregunta": "¿Qué tiene alas pero no puede volar?", "respuesta": "Una carta"}, + {"pregunta": "¿Qué es algo que siempre sube y nunca baja?", "respuesta": "Tu edad"}, + {"pregunta": "¿Cuál es el animal más antiguo?", "respuesta": "La cebra"}, + {"pregunta": "Tengo ciudades, pero no tengo casas. Tengo montañas, pero no tengo árboles. Tengo agua, pero no barcos. ¿Qué soy?", "respuesta": "Un mapa"}, + {"pregunta": "Puedo ser largo o corto; puedo ser rápida o lenta. Puedo estar en tu mano o en tu pie. ¿Qué soy?", "respuesta": "Una sombra"}, + {"pregunta": "Todos me necesitan, pero a nadie le gusto. ¿Qué soy?", "respuesta": "Un consejo"}, + {"pregunta": "Siempre estoy delante de ti, pero no puedes verme. Nunca hablo, pero siempre te escucho. ¿Qué soy?", "respuesta": "Tu futuro"}, + {"pregunta": "¿Qué se puede romper, aunque nunca se haya dicho ni una palabra?", "respuesta": "Un corazón"}, + {"pregunta": "¿Qué tiene llaves pero no puede abrir cerraduras?", "respuesta": "Un piano"}, + {"pregunta": "Puedes encontrarme en la oscuridad, pero nunca en la luz. No tengo forma ni color, pero puedes sentarme en tu mano. ¿Qué soy?", "respuesta": "El sueño"}, + {"pregunta": "Tengo un mar pero no tengo agua. Tengo una jungla pero no tengo árboles. Tengo un desierto pero no tengo arena. ¿Qué soy?", "respuesta": "Un mapa del mundo"}, + {"pregunta": "Siempre estoy corriendo, pero nunca me canso. Siempre estoy hablando, pero nunca digo una palabra. ¿Qué soy?", "respuesta": "Un rio"}, + {"pregunta": "A veces soy fuerte y a veces soy débil. A veces tengo razón y a veces tengo que callar. ¿Qué soy?", "respuesta": "La voz"}, + {"pregunta": "Soy un agujero en el agua, pero mantengo el agua fuera. ¿Qué soy?", "respuesta": "Un barco"}, + {"pregunta": "Puedes romperme sin tocar ni una sola vez. ¿Qué soy?", "respuesta": "Un suspiro"} + ] + return random.choice(enigmas) + +def resolverEnigma(enigma): + print(enigma["pregunta"]) + respuestaUsuario = input("Tu respuesta: ").lower() + if respuestaUsuario == enigma["respuesta"].lower(): + return True + else: + print("Respuesta incorrecta. Intenta de nuevo.") + return False + +def juego(): + print("¡Bienvenido a la mansión abandonada!\n Tu misión es encontrar la habitación de los dulces para salir.") + x,y = 0,0 + while True: + habitacion = mansion[x][y] + if habitacion == "👻": + print("¡Oh no! Te encuentras con un fantasma. Debes responder 2 preguntas para salir de la habitación") + enigmaU = generarEnigma() + enigmaD = generarEnigma() + if resolverEnigma(enigmaU) and resolverEnigma(enigmaD): + print("¡Respuestas correctas! Puedes continuar") + else: + print("¡Oh no! Has fallado, el fantasma te atrapa.") + break + elif habitacion == "⬜️": + enigma = generarEnigma() + while not resolverEnigma(enigma): + enigma = generarEnigma() + print("¡Enigma resuelto! Puedes continuar con tu búsqueda.") + elif habitacion == "🍭": + print("¡Felicidades! Has encontrado la habitación de los dulces. ¡Ganaste el juego!") + break + direccion = input("¿A dónde quieres ir? (norte/sur/oeste/este): ").lower() + if direccion == "norte" and x > 0: + x -= 1 + elif direccion == "sur" and x < 3: + x += 1 + elif direccion == "este" and y < 3: + y += 1 + elif direccion == "oeste" and y > 0: + y -= 1 + else: + print("Dirección no válida. Intenta de nuevo.") + +juego() \ No newline at end of file From 2ece824ffeb2131065775ab029af854eece3c4ee Mon Sep 17 00:00:00 2001 From: Zamudio Date: Mon, 16 Oct 2023 16:54:40 -0600 Subject: [PATCH 0283/2103] Reto #40 c# dart java javascript kotlin python typescript --- .../kotlin/zamudiio.kt" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/zamudiio.kt" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/zamudiio.kt" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/zamudiio.kt" new file mode 100644 index 0000000000..dc923dc53d --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/zamudiio.kt" @@ -0,0 +1,29 @@ +import java.util.Scanner + +fun main(args: Array) { + println("🔢 Tabla de multiplicar 🔢") + val scanner = Scanner(System.`in`) + val value: String = scanner.nextLine() + if(value.isEmpty() || !tryIntParse(value)){ + println("Porfavor ingresa un formato valido, debe ser un numero entero") + main(args) + }else{ + operation(value.toInt()) + } +} + +fun operation(number: Int) { +println("La tabla de multiplicacion de $number es:") +for (i in 1..10) { + println("$number x $i = ${number * i}") +} +} + +fun tryIntParse(value:String) : Boolean { + return try { + value.toInt() + true + } catch (e:NumberFormatException){ + false + } +} \ No newline at end of file From 85a9f3a7ddb574c05059c52bc6d18a2b584f4cfd Mon Sep 17 00:00:00 2001 From: Zamudio Date: Mon, 16 Oct 2023 17:03:59 -0600 Subject: [PATCH 0284/2103] Reto #40 - C# - Dart - Java - Javascript - Kotlin - Python - Typescript --- .../c#/zamudiio.cs" | 40 +++++++++++++++++++ .../dart/zamudiio.dart" | 22 ++++++++++ .../java/Zamudiio.java" | 40 +++++++++++++++++++ .../javascript/zamudiio.js" | 26 ++++++++++++ .../kotlin/zamudiio.kt" | 2 +- .../python/zamudiio.py" | 20 ++++++++++ .../typescript/zamudiio.ts" | 28 +++++++++++++ 7 files changed, 177 insertions(+), 1 deletion(-) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/zamudiio.cs" create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/dart/zamudiio.dart" create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/Zamudiio.java" create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/zamudiio.js" create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/zamudiio.py" create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/zamudiio.ts" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/zamudiio.cs" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/zamudiio.cs" new file mode 100644 index 0000000000..0b05c8f896 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/zamudiio.cs" @@ -0,0 +1,40 @@ +using System; +namespace Zamudiio +{ + class Program + { + static void Main() + { + Console.WriteLine("🔢 Tabla de multiplicar 🔢"); + Console.Write("Ingresa algun numero entero:"); + program(); + + } + + static void program() + { + try + { + string value = Console.ReadLine(); + int valueInt = int.Parse(value); + operation(valueInt); + } + catch (Exception e) + { + Console.WriteLine("Porfavor ingresa un formato valido, debe ser un numero entero."); + program(); + } + } + + static void operation(int number) + { + Console.WriteLine($"La tabla de multiplicar de {number} es:"); + + for (int i = 1; i <= 10; i++) + { + Console.WriteLine($"{number} x {i} = {number * i}"); + } + } + + } +} diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/dart/zamudiio.dart" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/dart/zamudiio.dart" new file mode 100644 index 0000000000..d0bd197c85 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/dart/zamudiio.dart" @@ -0,0 +1,22 @@ +import 'dart:io'; + +void main(List args) { + print("🔢 Tabla de multiplicar 🔢"); + operation(); +} + +void operation() { + print("Ingresa algun numero entero"); + String? number = stdin.readLineSync(); + + if (number == null || number.isEmpty || int.tryParse(number) == null) { + print("Porfavor ingresa un formato valido, debe ser un numero entero"); + operation(); + } + + print("La tabla de multiplicar de ${number} es la siguiente:"); + final intNumber = int.tryParse(number!)!; + for (var i = 1; i <= 10; i++) { + print("$i x $intNumber = ${i * intNumber}"); + } +} diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/Zamudiio.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/Zamudiio.java" new file mode 100644 index 0000000000..2d6e3d132e --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/Zamudiio.java" @@ -0,0 +1,40 @@ + +/** + * Zamudiio + */ +import java.util.Scanner; + +public class Zamudiio { + + public static void main(String[] args) { + Scanner myScanner = new Scanner(System.in); + System.out.println("🔢 Tabla de multiplicar 🔢"); + System.out.println("Ingresa algun numero entero"); + String number = myScanner.nextLine(); + + if(!tryIntParse(number)){ + System.out.println("Porfavor ingresa un formato valido, debe ser un numero entero"); + main(args); + }else{ + operation(Integer.parseInt(number)); + } + + myScanner.close(); + } + + public static void operation(int number) { + for (int i = 1; i <= 10; i++) { + System.out.println(number + " x " + i + " = " + i * number); + } + } + + public static Boolean tryIntParse(String number) { + try { + Integer.parseInt(number); + return true; + } catch (NumberFormatException e) { + return false; + } + } + +} \ No newline at end of file diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/zamudiio.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/zamudiio.js" new file mode 100644 index 0000000000..fc4c70be26 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/zamudiio.js" @@ -0,0 +1,26 @@ +const readline = require("readline"); + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); +console.log("🔢 Tabla de multiplicar 🔢"); +function main() { + rl.question("Ingresa un numero entero:", (answer) => { + if (answer === "" || answer === null || isNaN(parseInt(answer))) { + console.log("Porfavor ingresa un numero entero:"); + return main() + } + operation(parseInt(answer)) + }); +} + +function operation(value = 0) { + console.log(`La tabla de multiplicacion de ${value} es:`); + const number = value; + for (let index = 1; index <= 10; index++) { + console.log(`${number} x ${index} = ${index * value}`); + } +} + +main(); diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/zamudiio.kt" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/zamudiio.kt" index dc923dc53d..c4a5befb41 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/zamudiio.kt" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/kotlin/zamudiio.kt" @@ -26,4 +26,4 @@ fun tryIntParse(value:String) : Boolean { } catch (e:NumberFormatException){ false } -} \ No newline at end of file +} diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/zamudiio.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/zamudiio.py" new file mode 100644 index 0000000000..a28da7019c --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/zamudiio.py" @@ -0,0 +1,20 @@ +print("🔢 Tabla de multiplicar 🔢") + +def main(): + try: + value:str = input("Ingresa un numero entero:") + valueInt = int(value); + operation(valueInt) + except: + print("Porfavor ingresa un valor valido, debe ser un numero entero.") + main() + + +def operation(number: int): + print(f"La tabla de multiplicacion de {number} es:"); + for i in range(1,11): + print(f"{number} x {i} = {number*i}") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/zamudiio.ts" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/zamudiio.ts" new file mode 100644 index 0000000000..2a24de0a20 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/typescript/zamudiio.ts" @@ -0,0 +1,28 @@ +const readline = require("readline"); + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +console.log("🔢 Tabla de multiplicar 🔢"); +function main() { + rl.question("Ingresa un numero entero:", (answer:string) => { + if (answer === "" || answer === null || isNaN(Number.parseInt(answer))) { + console.log("Porfavor ingresa un numero entero:"); + main() + }else{ + operation(Number.parseInt(answer)) + } + }); +} + +function operation(value:number) { + console.log(`La tabla de multiplicacion de ${value} es:`); + const number = value; + for (let index = 1; index <= 10; index++) { + console.log(`${number} x ${index} = ${index * value}`); + } +} + +main(); From 09f1459a322c13cf2e5636ef962750dfb1db05aa Mon Sep 17 00:00:00 2001 From: raul-progr Date: Mon, 16 Oct 2023 16:54:35 -0700 Subject: [PATCH 0285/2103] Reto #40 - Python --- .../python/RaulBatR40.py" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/RaulBatR40.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/RaulBatR40.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/RaulBatR40.py" new file mode 100644 index 0000000000..ad436dc559 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/RaulBatR40.py" @@ -0,0 +1,10 @@ + + +entero = int(input("Introduce un numero del 1 al 11 para hacer una tabla de multiplicar: ")) +if entero <= 11: + for i in range(1 , 11): + print(f"{entero} * {i} = {entero*i} ") + +else: + print("El numero ingresado no esta en el rango del 1 al 11 o no es entero, vuelta a intentarlo") + \ No newline at end of file From 00fec756edcf349228da4ac422aee6581839fc0d Mon Sep 17 00:00:00 2001 From: Cristian Santos Date: Mon, 16 Oct 2023 19:49:43 -0500 Subject: [PATCH 0286/2103] Reto #41 --- .../typescript/csantosr.ts" | 502 ++++++++++++++++++ 1 file changed, 502 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/typescript/csantosr.ts" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/typescript/csantosr.ts" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/typescript/csantosr.ts" new file mode 100644 index 0000000000..932144a409 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/typescript/csantosr.ts" @@ -0,0 +1,502 @@ +import readline from 'readline'; + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +enum RoomType { + Door, + Room, + Ghost, + Exit +}; + +type Mansion = [ + [RoomType, RoomType, RoomType, RoomType], + [RoomType, RoomType, RoomType, RoomType], + [RoomType, RoomType, RoomType, RoomType], + [RoomType, RoomType, RoomType, RoomType], +]; + +type Position = [number, number]; + +interface Question { + q: string; + a: string; +} + +const questions: Array = [ + { + "q": "¿Qué se moja mientras se seca?", + "a": "Una toalla." + }, + { + "q": "¿Qué tiene un mar pero no agua?", + "a": "Un mapa." + }, + { + "q": "¿Qué es tan frágil que decir su nombre lo rompe?", + "a": "El silencio." + }, + { + "q": "¿Cuál palabra se escribe incorrectamente en todos los diccionarios?", + "a": "Incorrectamente." + }, + { + "q": "Cuanto más la quitas, más grande se vuelve. ¿Qué es?", + "a": "Un agujero." + }, + { + "q": "Si tienes doce manzanas y te llevas todas menos nueve, ¿cuántas tienes?", + "a": "Nueve." + }, + { + "q": "Un avión choca en la frontera entre Canadá y Estados Unidos. ¿Dónde entierran a los sobrevivientes?", + "a": "No se entierran a los sobrevivientes." + }, + { + "q": "¿Qué pesa más: un kilogramo de hierro o un kilogramo de plumas?", + "a": "Pesa lo mismo, un kilogramo." + }, + { + "q": "¿Qué viene antes que ayer?", + "a": "Anteayer." + }, + { + "q": "Si un tren eléctrico viaja hacia el sur, ¿hacia qué dirección sopla el humo?", + "a": "Los trenes eléctricos no producen humo." + }, + { + "q": "¿Qué pregunta nunca puede ser respondida con un 'sí'?", + "a": "¿Estás dormido?" + }, + { + "q": "¿Qué tiene un inicio y un final, pero no un principio ni un fin?", + "a": "Una cuerda." + }, + { + "q": "¿Qué tiene cientos de dientes pero no puede morder?", + "a": "Un peine." + }, + { + "q": "¿Qué es amarillo por fuera y blanco por dentro?", + "a": "Un plátano." + }, + { + "q": "¿Qué palabra empieza con 'e' y termina con 'e' pero solo tiene una letra?", + "a": "Sobre." + }, + { + "q": "¿Qué tiene una cabeza, una cola, pero no cuerpo?", + "a": "Una moneda." + }, + { + "q": "¿Qué es más útil cuando está roto?", + "a": "Un huevo." + }, + { + "q": "¿Qué se rompe sin tocarse?", + "a": "Una promesa." + }, + { + "q": "¿Qué tiene infinitas palabras?", + "a": "Un libro." + }, + { + "q": "¿Qué puedes atrapar pero no lanzar?", + "a": "Un resfriado." + }, + { + "q": "¿Qué es más alto cuando está sentado que cuando está de pie?", + "a": "Un perro." + }, + { + "q": "¿Qué es de tu padre, de tu madre, pero no es tuyo ni de tus hermanos?", + "a": "Tu apellido." + }, + { + "q": "¿Qué tiene un banco pero no tiene dinero?", + "a": "Un banco de un parque." + }, + { + "q": "¿Qué tiene ciudades pero no casas, ríos pero no agua, y bosques pero no árboles?", + "a": "Un mapa." + }, + { + "q": "¿Qué es tan liviano que puede flotar en el aire, pero un hombre no puede sostenerlo por mucho tiempo?", + "a": "Su aliento." + }, + { + "q": "¿Qué es lo que todos tienen delante y los pocos detrás?", + "a": "El futuro." + }, + { + "q": "Si ves una ardilla en una jaula y un conejo en otra, ¿cuántas patas ves en total?", + "a": "Ninguna, porque no puedes ver a través de las jaulas." + }, + { + "q": "¿Qué se llena con una mano pero puede llevar algo más grande que una casa?", + "a": "Un guante." + }, + { + "q": "¿Qué animal da vueltas y más vueltas mientras duerme?", + "a": "El murciélago." + }, + { + "q": "¿Cuál es la única letra del abecedario que es vegetal?", + "a": "La 'P' de papa." + }, + { + "q": "¿Qué es lo que sube y baja sin moverse?", + "a": "La temperatura." + }, + { + "q": "Si me lanzas al agua, volveré. ¿Qué soy?", + "a": "Una pelota." + }, + { + "q": "¿Qué pasa una vez en junio, dos veces en agosto y no pasa en septiembre?", + "a": "La letra 'o'." + }, + { + "q": "¿Qué es algo que siempre sube pero nunca baja?", + "a": "La edad." + }, + { + "q": "¿Qué se puede medir pero no se puede ver ni tocar?", + "a": "El tiempo." + }, + { + "q": "¿Qué tiene patas pero no camina?", + "a": "Una mesa." + }, + { + "q": "¿Qué es lo que si lo pones en un barril lo hará más ligero?", + "a": "Un agujero." + }, + { + "q": "¿Qué es aquello que si lo compartes, lo pierdes?", + "a": "Un secreto." + }, + { + "q": "¿Qué tiene un solo oído pero puede escuchar?", + "a": "Una mazorca de maíz." + }, + { + "q": "¿Qué es lo que nunca vuelve aunque siempre va?", + "a": "Ayer." + }, + { + "q": "¿Qué es más grande que un elefante pero no pesa nada?", + "a": "La sombra de un elefante." + }, + { + "q": "¿Cuántos segundos hay en un año?", + "a": "12 (el segundo día de enero, el segundo día de febrero, etc.)" + }, + { + "q": "¿Qué es lo que corre pero nunca camina, murmura pero nunca habla, tiene una cama pero nunca duerme y tiene una boca pero nunca come?", + "a": "Un río." + }, + { + "q": "¿Qué tiene un río pero no tiene agua?", + "a": "La palabra 'río'." + }, + { + "q": "¿Qué es lo que está lleno durante el día y vacío durante la noche?", + "a": "Un zapato." + }, + { + "q": "¿Qué tiene un corazón que no siente?", + "a": "Un melón." + }, + { + "q": "¿Qué es lo que tiene muchas llaves pero no abre ninguna puerta?", + "a": "Un piano." + }, + { + "q": "¿Qué es lo que da vueltas y vueltas y permanece en el mismo lugar?", + "a": "Una lavadora." + }, + { + "q": "Si un gallo pone un huevo en la cima de un tejado, ¿hacia qué lado caerá el huevo?", + "a": "Los gallos no ponen huevos." + }, + { + "q": "¿Qué es lo que está al final del arcoíris?", + "a": "La letra 's'." + }, + { + "q": "¿Qué es lo que es rojo cuando es nuevo, negro cuando lo usas y gris cuando lo tiras?", + "a": "El carbón." + }, + { + "q": "¿Qué tiene muchas hojas pero no es un árbol?", + "a": "Un libro." + }, + { + "q": "¿Qué es lo que si lo tiras al suelo, se rompe; pero si lo pones en el agua, flota?", + "a": "Un papel." + }, + { + "q": "Si tres gatos cazan tres ratas en tres minutos, ¿cuántos minutos tardarían cien gatos en cazar cien ratas?", + "a": "Tres minutos." + }, + { + "q": "¿Qué es lo que puedes encontrar en medio de París?", + "a": "La letra 'r." + }, + { + "q": "¿Qué es lo que no tiene ni principio ni fin y está en medio de la noche?", + "a": "La letra 'o." + }, + { + "q": "¿Qué es lo que es más grande que Dios, más malo que el diablo, los pobres lo tienen y los ricos lo necesitan?", + "a": "Nada." + }, + { + "q": "¿Qué animal tiene la cabeza y la cola pero no tiene cuerpo?", + "a": "Una moneda." + }, + { + "q": "¿Qué es lo que tiene forma de pera, pero más verde que la hierba, y si lo necesitas, te espera dentro de una cesta?", + "a": "Una pelota." + }, + { + "q": "¿Qué tiene sábanas pero no duerme?", + "a": "Un libro." + }, + { + "q": "¿Qué es lo que es tuyo, pero los demás lo usan más que tú?", + "a": "Tu nombre." + }, + { + "q": "¿Qué es lo que tiene un montón de dientes pero no muerde?", + "a": "Un peine." + }, + { + "q": "¿Qué animal es siempre anciano?", + "a": "La cebra (porque es blanco y negro)." + }, + { + "q": "¿Qué es lo que es suyo pero otras personas lo usan más que usted?", + "a": "Su nombre." + }, + { + "q": "¿Qué es lo que tiene pulpa, pepitas y no es una naranja?", + "a": "Una manzana." + }, + { + "q": "¿Qué tiene tapa pero no es botella y es de madera pero no es árbol?", + "a": "Una mesa." + }, + { + "q": "¿Qué es lo que tiene una lengua y no puede hablar?", + "a": "Un zapato." + }, + { + "q": "¿Qué es lo que siempre está delante de ti pero no puedes verlo?", + "a": "El futuro." + }, + { + "q": "¿Qué es lo que pasa y nunca regresa?", + "a": "El tiempo." + }, + { + "q": "Si dos es compañía y tres es multitud, ¿cuatro y cinco son qué?", + "a": "Nueve." + }, + { + "q": "¿Qué es lo que es más grande que un elefante pero no pesa nada?", + "a": "La sombra de un elefante." + }, + { + "q": "¿Qué es lo que es negro cuando lo compras, rojo cuando lo usas y gris cuando lo tiras?", + "a": "El carbón." + }, + { + "q": "¿Qué es lo que tiene agujas pero no cose?", + "a": "Un reloj." + }, + { + "q": "¿Qué es lo que es tuyo pero otros lo usan más que tú?", + "a": "Tu nombre." + }, + { + "q": "¿Qué es lo que te pertenece pero otros lo usan más que tú?", + "a": "Tu nombre." + }, + { + "q": "¿Qué es lo que da vueltas todo el día y se queda en el mismo lugar?", + "a": "Una puerta." + }, + { + "q": "¿Qué es lo que puedes ver en la oscuridad y es muy ligero?", + "a": "La luz." + }, + { + "q": "¿Qué es lo que es más grande que un elefante pero no pesa nada?", + "a": "La sombra de un elefante." + }, + { + "q": "¿Qué tiene una cama y no duerme, tiene una boca y no come?", + "a": "Un río." + }, + { + "q": "¿Qué es lo que es tan alto como un pino y pesa menos que un ratón?", + "a": "El humo." + }, + { + "q": "¿Qué es lo que tiene forma de pera pero no es fruta, tiene muchas llaves pero no puede abrir puertas?", + "a": "Un llavero." + }, + { + "q": "¿Qué es lo que si lo lanzas al aire no caerá nunca al suelo?", + "a": "Un pensamiento." + }, + { + "q": "¿Qué es lo que es más útil cuando está vacío?", + "a": "Una mochila." + }, + { + "q": "¿Qué es lo que tiene orejas pero no puede oír?", + "a": "Una jarra." + }, + { + "q": "¿Qué tiene cuatro ruedas y vuela?", + "a": "Un camión de basura." + }, + { + "q": "¿Qué es lo que no puedes tener para el desayuno y la cena?", + "a": "Almuerzo." + }, + { + "q": "¿Qué es lo que cuanto más tomas, más dejas atrás?", + "a": "Pasos." + }, + { + "q": "¿Qué es lo que todos tienen pero algunos tienen más que otros?", + "a": "Edad." + }, + { + "q": "¿Qué es lo que nunca pide respuestas pero siempre es respondido?", + "a": "Un teléfono." + }, + { + "q": "¿Qué es lo que puedes servir pero nunca comer?", + "a": "Una pelota de tenis." + } +]; + +const mapTypeToEmoji: Record = { + "0": '🚪', + "1": '⬜️', + "2": '👻', + "3": '🍭' +}; + +const generateMansion = (): Mansion => { + let mansion: Mansion = [ + [RoomType.Door, RoomType.Room, RoomType.Room, RoomType.Room], + [RoomType.Room, RoomType.Room, RoomType.Room, RoomType.Room], + [RoomType.Room, RoomType.Room, RoomType.Room, RoomType.Room], + [RoomType.Room, RoomType.Room, RoomType.Room, RoomType.Room], + ]; + const [outX, outY] = [(Math.floor(Math.random()*3) + 1), (Math.floor(Math.random()*3) + 1)] + mansion[outY][outX] = RoomType.Exit; + + mansion = mansion.map(row => + row.map(cell => { + if (cell !== RoomType.Room) return cell; + if (Math.random() < 0.1) return RoomType.Ghost; + return cell; + }) + ) as Mansion; + return mansion; +}; + +const printMansion = (mansion: Mansion, pos: Position, releasedRooms: Position[]) => { + console.log(mansion.map((row, y) => row.map((cell, x) => { + if (releasedRooms.some(rp => rp[0] === x && rp[1] === y)) return '✅'; + if (pos[0] === x && pos[1] === y) return '🧍'; + return mapTypeToEmoji[cell]; + }).join('')).join('\n')) +}; + +const askQuestion = (question: Question): Promise => { + return new Promise((resolve) => { + rl.question(question.q, (answer) => { + resolve(answer.toLowerCase() === question.a.toLowerCase()); + }); + }); +}; + +const move = async (pos: Position, mansion: Mansion, releasedRooms: Position[]) => { + const [x, y] = pos; + let options: string[] = []; + if (x > 0) options.push('oeste'); + if (x < 3) options.push('este'); + if (y > 0) options.push('norte'); + if (y < 3) options.push('sur'); + + return new Promise((resolve) => { + rl.question(`¿Dónde deseas moverte? (${options.join(', ')}) `, (movep) => { + console.log({movep}) + switch (movep) { + case 'norte': + resolve([x, y - 1]); + break; + case 'sur': + resolve([x, y + 1]); + break; + case 'este': + resolve([x + 1, y]); + break; + case 'oeste': + resolve([x - 1, y]); + break; + default: + console.log('Opción inválida'); + move(pos, mansion, releasedRooms).then(resolve); + } + }); + }); +}; + +const game = async () => { + let winnedGames = 0; + let playing = true; + + while (playing) { + let userPosition: Position = [0, 0]; + let mansion = generateMansion(); + let releasedRooms: Array = [[0, 0]]; + + while (mansion[userPosition[1]][userPosition[0]] !== RoomType.Exit) { + printMansion(mansion, userPosition, releasedRooms); + let currentRoom = mansion[userPosition[1]][userPosition[0]]; + + if (currentRoom === RoomType.Ghost || currentRoom === RoomType.Room) { + const success = await askQuestion(questions[Math.floor(Math.random() * questions.length)]); + if (!success) continue; // If failed, don't move. + } + + releasedRooms.push(userPosition); + userPosition = await move(userPosition, mansion, releasedRooms); + } + + winnedGames++; + console.log("¡Has encontrado la sala de los dulces! 🍭"); + + rl.question('¿Quieres jugar de nuevo? (sí/no) ', (answer) => { + if (answer.toLowerCase() !== 'sí') { + playing = false; + console.log(`Has ganado ${winnedGames} ${winnedGames === 1 ? 'vez' : 'veces'}. ¡Gracias por jugar!`); + rl.close(); + } + }); + } +}; + +game(); From c1e920388277191eec0f89b755f049293c4aaead Mon Sep 17 00:00:00 2001 From: Jamer Rebolledo Date: Mon, 16 Oct 2023 22:13:19 -0500 Subject: [PATCH 0287/2103] =?UTF-8?q?=F0=9F=8F=84=20Soluci=C3=B3n=20Reto?= =?UTF-8?q?=20#41,=20Python3=20by=20@jamerrq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/jamerrq.py" | 435 ++++++++++++++++++ 1 file changed, 435 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jamerrq.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jamerrq.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jamerrq.py" new file mode 100644 index 0000000000..2820275c22 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jamerrq.py" @@ -0,0 +1,435 @@ +import random +import os +import time + +# Limpiar la pantalla + + +def clear(): + os.system('cls' if os.name == 'nt' else 'clear') + + +# Colección de acertijos +acertijos = [ + { + 'pregunta': '¿Qué cosa es la que cuanto más grande, menos se ve?', + 'respuesta': 'La oscuridad', + 'pista': 'Es lo contrario a la luz' + }, + { + 'pregunta': '¿Qué cosa es la que cuanto más se moja, más se seca?', + 'respuesta': 'La toalla', + 'pista': 'Se usa para secar' + }, + { + 'pregunta': 'Húmedo por dentro, con pelos por fuera. ¿De qué se trata?', + 'respuesta': 'El coco', + 'pista': 'Comienza por la letra C' + }, + { + 'pregunta': '¿Qué cosa es la que tiene dientes y no come, tiene cabeza y no es un animal?', + 'respuesta': 'El ajo', + 'pista': 'Se usa para cocinar' + }, + { + 'pregunta': 'Hay algo que, aunque te pertenezca, la gente siempre lo utiliza más que tú. ¿Qué es?', + 'respuesta': 'Tu nombre', + 'pista': 'Es algo que te identifica' + }, + { + 'pregunta': '¿Qué cosa es la que tiene ojos y no ve, tiene agua y no es un pez?', + 'respuesta': 'Una papa', + 'pista': 'Se usa para cocinar' + }, + { + 'pregunta': 'El hombre que lo vendió no lo quería. El hombre que lo compró no lo necesitaba. El hombre que lo usó no lo conocía. ¿Qué es?', + 'respuesta': 'Un ataúd', + 'pista': 'Se usa en un día muy triste' + }, + { + 'pregunta': 'Tom mide 1,80, es ayudante en una carnicería y lleva zapatos de la talla 45. ¿Qué pesa?', + 'respuesta': 'Carne', + 'pista': 'Lee bien la pregunta' + }, + { + 'pregunta': '¿Cuál es la mujer que siempre sabe donde está su marido?', + 'respuesta': 'La viuda', + 'pista': 'Es también un tipo de araña' + }, + { + 'pregunta': '¿De qué color es el caballo blanco de Santiago?', + 'respuesta': 'Blanco', + 'pista': 'Es un caballo blanco' + }, + { + 'pregunta': 'Si un pastor tiene 15 ovejas y se le mueren todas menos nueve, ¿cuántas le quedan?', + 'respuesta': 'Nueve', + 'pista': 'Lee bien la pregunta' + } +] + + +class Acertijo: + + def __init__(self, pregunta, respuesta, pista="", intentos=3): + self.pregunta = pregunta + self.respuesta = respuesta + self.pista = pista + self.pista_usada = False + self.intentos = intentos + self.resuelto = False + + def comprobar(self, respuesta): + return respuesta == self.respuesta or respuesta == self.respuesta.lower() or respuesta == self.respuesta.upper() or respuesta == self.respuesta.replace('á', 'a').replace('é', 'e').replace('í', 'i').replace('ó', 'o').replace('ú', 'u') or respuesta == self.respuesta.replace('á', 'a').replace('é', 'e').replace('í', 'i').replace('ó', 'o').replace('ú', 'u').lower() or respuesta == self.respuesta.replace('á', 'a').replace('é', 'e').replace('í', 'i').replace('ó', 'o').replace('ú', 'u').upper() or self.respuesta.replace('El ', '').replace('La ', '').replace('Los ', '').replace('Las ', '') == respuesta or self.respuesta.replace('El ', '').replace('La ', '').replace('Los ', '').replace('Las ', '') == respuesta.lower() or self.respuesta.replace('El ', '').replace('La ', '').replace('Los ', '').replace('Las ', '') == respuesta.upper() + + def usar_pista(self): + if self.pista_usada: + print('Ya usaste la pista') + else: + print(self.pista) + self.pista_usada = True + + def resolver(self): + print('🎩 ACERTIJO 🪄') + answer = '' + while (not self.comprobar(answer)) and self.intentos > 0: + answer = input(self.pregunta + '\n -> ') + if not self.comprobar(answer): + self.intentos -= 1 + if self.intentos > 0: + print("Respuesta incorrecta 😔, te quedan {} intentos".format( + self.intentos)) + print('Pista: ', self.pista) + if self.comprobar(answer): + clear() + print('%'*50) + print("🎉 Respuesta correcta 🎉") + print('%'*50) + time.sleep(1) + self.resuelto = True + return True + else: + clear() + print('%'*50) + print("💀 Respuesta incorrecta, perdiste una vida 💀") + print('%'*50) + time.sleep(1) + return False + + +class Habitacion: + + # 4 Tipos de habitaciones: puerta (🚪), normal (🪟) + # Fantasma (👻) y Dulce (🍭) + def __init__(self, x, y, type, a1=None, a2=None, jogando=True): + self.x = x + self.y = y + self.type = type + self.solved = None + + def __str__(self): + if self.type == 'puerta': + return '🚪' + elif self.type == 'normal': + return '⬜️' + elif self.type == 'fantasma': + return '👻' + elif self.type == 'dulce': + return '🍭' + else: + return '🚫' + + def resolver(self, bool): + self.solved = bool + + +class Mansion: + + def __init__(self, n=4, m=4, alpha_ghost=0.1): + # Validar que las dimensiones sean mayores a 0 + if(n <= 0 or m <= 0): + raise Exception( + 'Las dimensiones de la mansión deben ser mayores a 0') + self.n = n + self.m = m + self.habitaciones = [] + + # Jugador + self.x = 0 + self.y = 0 + + # Crear habitaciones + + # La habitación inicial es la (0,0) que corresponde + # a la puerta de entrada + puerta = Habitacion(0, 0, 'puerta') + + # Se crea una habitación dulce en una posición aleatoria + dulce_fila = random.randint(1, n-1) + dulce_columna = random.randint(1, m-1) + # print('Dulce en: {}, {}'.format(dulce_fila, dulce_columna)) + dulce = Habitacion(dulce_fila, dulce_columna, 'dulce') + + # TODO: Implementar la creación de las habitaciones fantasmas + + # Crear las habitaciones normales + primera_fila = [puerta] + for j in range(1, m): + prob = random.random() + if prob <= alpha_ghost: + primera_fila.append(Habitacion(0, j, 'fantasma')) + else: + primera_fila.append(Habitacion(0, j, 'normal')) + self.habitaciones.append(primera_fila) + for i in range(1, n): + fila = [] + for j in range(m): + prob = random.random() + if prob <= alpha_ghost: + fila.append(Habitacion(i, j, 'fantasma')) + else: + fila.append(Habitacion(i, j, 'normal')) + self.habitaciones.append(fila) + + dulce_fila = None + dulce_columna = None + while dulce_fila is None or self.habitaciones[dulce_fila][dulce_columna].type != 'normal': + dulce_fila = random.randint(1, n-1) + dulce_columna = random.randint(1, m-1) + # Colocar el dulce en la habitación correspondiente + # dulce_fila = 0 + # dulce_columna = 1 + print('Dolce en: {}, {}'.format(dulce_fila, dulce_columna)) + self.habitaciones[dulce_fila][dulce_columna] = dulce + + def mostrar(self, x, y, jogando=True): + + def mostrar_habitacion(habitacion): + # Si el jugador está en la habitación, mostrarlo + if(habitacion.x == x and habitacion.y == y and jogando): + str_hab = str(habitacion) + if(habitacion.solved != None): + if(habitacion.solved): + str_hab = '✅' + else: + str_hab = '❌' + return '👤' + ' ' + str_hab + elif(habitacion.solved and jogando): + return ' ✅' + elif(habitacion.solved == False and jogando): + return ' ❌' + # Si no se ha terminado el juego y la habitación + # es de tipo fantasma, entonces mostrar una habitación normal (en + # caso que no se haya resulto la habitación) + elif habitacion.type == 'dulce': + if not jogando: + return ' 🍭' + else: + return ' ⬜️' + elif habitacion.type == 'fantasma' and jogando: + if habitacion.solved == None: + return ' ⬜️' + elif habitacion.solved: + return ' ✅' + else: + return ' ❌' + elif habitacion.x == x and habitacion.y == y: + return '👤' + ' ' + str(habitacion) + else: + return ' ' + str(habitacion) + + # def special_format(habitacion): + # if habitacion.type == 'puerta': + # return 'LA PUERTA' + # elif habitacion.type == 'fantasma': + # return 'HABITACIÓN FANTASMA' + # elif habitacion.type == 'dulce': + # return 'HABITACIÓN DULCE' + # else: + # return 'HABITACIÓN NORMAL' + + # Mostrar cada fila de la matriz + for fila in self.habitaciones: + print(' '.join([mostrar_habitacion(h) for h in fila])) + + # Mostrar la posición del jugador + # print('Estás en: {}, {} ({})'.format(x, y, + # special_format(habitacion=self.habitaciones[x][y]))) + + +class Juego: + + def __init__(self, mansion, vidas=3): + self.mansion = mansion + self.jugando = True + self.vidas = vidas + self.score = 0 + self.steps = 0 + self.resueltas = set([]) + # Esto para después, cuando se implemente el jugador + # Me servirá para crear un sistema de guardado + # para que el jugador pueda continuar después + # y registrar su nombre en el ranking + # self.jogador_name = '' + self.x = 0 + self.y = 0 + + def mostrar(self): + self.mansion.mostrar(self.x, self.y, self.jugando) + print('%'*50) + print('🎩 Score: {}'.format(self.score)) + print('🍄 Vidas: {}'.format(self.vidas)) + print('🗺️ Estás en: {}, {}'.format(self.x, self.y)) + + def mover(self, direccion): + if direccion == 'N' or direccion == 'n': + if self.x > 0: + self.x -= 1 + self.steps += 1 + else: + clear() + print('%'*50) + print('🚫 No puedes ir hacia el norte 🚫') + print('%'*50) + time.sleep(1) + + elif direccion == 'S' or direccion == 's': + if self.x < self.mansion.n-1: + self.x += 1 + self.steps += 1 + else: + clear() + print('%'*50) + print('🚫 No puedes ir hacia el sur 🚫') + print('%'*50) + time.sleep(1) + + elif direccion == 'E' or direccion == 'e': + if self.y < self.mansion.m-1: + self.steps += 1 + self.y += 1 + else: + clear() + print('%'*50) + print('🚫 No puedes ir hacia el este 🚫') + print('%'*50) + time.sleep(1) + + elif direccion == 'O' or direccion == 'o': + if self.y > 0: + self.steps += 1 + self.y -= 1 + else: + clear() + print('%'*50) + print('🚫 No puedes ir hacia el oeste 🚫') + print('%'*50) + time.sleep(1) + + elif direccion == 'X' or direccion == 'x': + print('Sayonara 👋') + self.jugando = False + else: + print('Dirección no válida') + + def jugar(self): + while self.jugando: + clear() + print('%'*50) + self.mostrar() + print('%'*50) + direccion = input('¿Hacia dónde quieres ir? (N, S, E, O) ' + + '\n' + 'Presiona X para salir.' + '\n -> ') + self.mover(direccion) + habitacion = self.mansion.habitaciones[self.x][self.y] + if habitacion.type == 'fantasma': + # if(habitacion.solved != None): + # print('%'*50) + # print('Ya resolviste este acertijo 🪄') + # continue + clear() + print('Has entrado en una habitación fantasma 👻') + print('Debes resolver 2 acertijos para poder salir 🪤') + print('%'*50) + n = random.randint(0, len(acertijos)-1) + while n in self.resueltas: + n = random.randint(0, len(acertijos)-1) + acertijo1 = Acertijo( + acertijos[n]['pregunta'], acertijos[n]['respuesta'], acertijos[n]['pista']) + if acertijo1.resolver(): + self.score += 50 + self.resueltas.add(n) + n = random.randint(0, len(acertijos)-1) + while n in self.resueltas: + n = random.randint(0, len(acertijos)-1) + acertijo2 = Acertijo( + acertijos[n]['pregunta'], acertijos[n]['respuesta'], acertijos[n]['pista']) + if(acertijo2.resolver()): + self.resueltas.add(n) + self.score += 50 + habitacion.resolver(True) + else: + habitacion.resolver(False) + self.vidas -= 1 + if self.vidas == 0: + print( + 'Has perdido todas las vidas, el juego ha finalizado 😞') + self.jugando = False + else: + habitacion.resolver(False) + self.vidas -= 1 + if self.vidas == 0: + print('Has perdido todas las vidas') + self.jugando = False + elif habitacion.type == 'dulce': + print('%'*50) + print('Ganaste el juego 🎉') + print('Tu score es: {0:.2f}'.format( + self.score / self.steps + self.vidas)) + print('%'*50) + print('\nTABLERO INICIAL:') + self.mansion.mostrar(self.x, self.y, False) + habitacion.resolver(True) + self.jugando = False + break + elif habitacion.type == 'puerta': + # print('Has entrado en la puerta de la mansión 🚪') + # habitacion.resolver(True) + # self.jugando = False + pass + else: + if(habitacion.solved != None): + print('%'*50) + print('Ya resolviste este acertijo 🪄') + continue + clear() + print('Has entrado en una habitación normal 🛖') + print('Debes resolver un acertijo para poder salir 🪤') + print('%'*50) + n = random.randint(0, len(acertijos)-1) + while n in self.resueltas: + n = random.randint(0, len(acertijos)-1) + acertijo = Acertijo( + acertijos[n]['pregunta'], acertijos[n]['respuesta'], acertijos[n]['pista']) + if acertijo.resolver(): + self.resueltas.add(n) + self.score += 50 + habitacion.resolver(True) + else: + habitacion.resolver(False) + self.vidas -= 1 + if self.vidas == 0: + print('Has perdido todas las vidas, el juego ha finalizado 😞') + self.jugando = False + + +def main(): + # Crear la mansión + mansion = Mansion() + # mansion.mostrar() + juego = Juego(mansion) + juego.jugar() + + +if __name__ == "__main__": + main() From e094a5caaadbef03a1ef2c866b459bea719b9b0b Mon Sep 17 00:00:00 2001 From: marco Date: Mon, 16 Oct 2023 23:51:23 -0600 Subject: [PATCH 0288/2103] Reto #35 - Javascript --- .../javascript/marcode24.js" | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 "Retos/Reto #35 - PRIMEROS PASOS [F\303\241cil]/javascript/marcode24.js" diff --git "a/Retos/Reto #35 - PRIMEROS PASOS [F\303\241cil]/javascript/marcode24.js" "b/Retos/Reto #35 - PRIMEROS PASOS [F\303\241cil]/javascript/marcode24.js" new file mode 100644 index 0000000000..0a0e1030b2 --- /dev/null +++ "b/Retos/Reto #35 - PRIMEROS PASOS [F\303\241cil]/javascript/marcode24.js" @@ -0,0 +1,131 @@ +/* + * Como cada año, el día 256 se celebra el "Día de la Programación". + * En nuestra comunidad siempre hacemos una gran fiesta donde repartirmos + * 256 regalos para seguir aprendiendo programación: + * https://diadelaprogramacion.com + * + * Para seguir ayudando, te propongo este reto: + * Mostrar la sintaxis de los principales elementos de un lenguaje + * en TODOS los lenguajes de programación que podamos. ¿Llegaremos a 50? + * + * En un fichero, haz lo siguiente (si el lenguaje lo soporta), + * y comenta cada bloque para identificar con qué se corresponde: + * - Haz un "Hola, mundo!" + * - Crea variables de tipo String, numéricas (enteras y decimales) + * y Booleanas (o cualquier tipo de dato primitivo). + * - Crea una constante. + * - Usa un if, else if y else. + * - Crea estructuras como un array, lista, tupla, set y diccionario. + * - Usa un for, foreach y un while. + * - Crea diferentes funciones (con/sin parámetros y con/sin retorno). + * - Crea una clase. + * - Muestra el control de excepciones. + * + * Así, cualquier persona podrá consultar rápidamente diferentes ejemplos + * de sintaxis básica de muchos lenguajes. + * + * ¡Muchas gracias! + */ + +// Hola, mundo! +console.log('Hola, mundo!'); + +// Creación de variables de diferentes tipos +// eslint-disable-next-line prefer-const, no-unused-vars +let stringVariable = 'Esto es una cadena de texto'; +// eslint-disable-next-line prefer-const, no-unused-vars +let numericIntegerVariable = 10; +// eslint-disable-next-line prefer-const, no-unused-vars +let numericDecimalVariable = 3.14; +// eslint-disable-next-line prefer-const, no-unused-vars +let booleanVariable = true; + +// Creación de una constante +// eslint-disable-next-line no-unused-vars +const PI = 3.14159; + +// Uso de if, else if y else +// eslint-disable-next-line prefer-const +let number = 15; +if (number > 10) { + console.log('El número es mayor que 10'); +} else if (number === 10) { + console.log('El número es igual a 10'); +} else { + console.log('El número es menor que 10'); +} + +// Creación de estructuras de datos +// eslint-disable-next-line prefer-const +let array = [1, 2, 3, 4, 5]; // Array +// eslint-disable-next-line prefer-const +let list = [10, 20, 30]; // Lista (representada como un array en JavaScript) +// eslint-disable-next-line prefer-const, no-unused-vars +let tuple = [1, 'hola', true]; // Tupla (representada como un array en JavaScript) +// eslint-disable-next-line prefer-const, no-unused-vars +let set = new Set([1, 2, 3]); // Set +// eslint-disable-next-line prefer-const, no-unused-vars +let dictionary = { clave1: 'valor1', clave2: 'valor2' }; // Diccionario + +// Uso de bucles: for, forEach y while +for (let i = 0; i < array.length; i++) { + console.log(array[i]); +} + +list.forEach((item) => { + console.log(item); +}); + +let count = 0; +while (count < 5) { + console.log(`Contador: ${count}`); + count++; +} + +// Creación de funciones +// eslint-disable-next-line no-unused-vars +function sum(a, b) { + return a + b; +} + +// eslint-disable-next-line no-unused-vars +function greet(name) { + console.log(`Hola, ${name}!`); +} + +// Creación de una función sin retorno +// eslint-disable-next-line no-unused-vars +function printMessage(message) { + console.log(message); +} + +// Creación de una función sin parámetros +// eslint-disable-next-line no-unused-vars +function sayHello() { + console.log('¡Hola!'); +} + +// Creación de una clase +// eslint-disable-next-line no-unused-vars +class Persona { + constructor(nombre, edad) { + this.nombre = nombre; + this.edad = edad; + } + + presentarse() { + console.log(`Hola, soy ${this.nombre} y tengo ${this.edad} años.`); + } +} + +// Control de excepciones +try { + // Intentamos ejecutar un bloque de código que puede generar un error + const resultado = 10 / 0; + console.log(`El resultado es: ${resultado}`); +} catch (error) { + // Capturamos y manejamos el error + console.error(`Se produjo un error: ${error.message}`); +} + +// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges From edf660ea75416080b0d61953ca2a58dfe295c272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Estuardo=20Ram=C3=ADrez?= Date: Mon, 16 Oct 2023 23:51:38 -0600 Subject: [PATCH 0289/2103] Reto #0 - C# --- .../c#/estuardodev.cs" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/estuardodev.cs" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/estuardodev.cs" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/estuardodev.cs" new file mode 100644 index 0000000000..2ca5dd5be2 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/estuardodev.cs" @@ -0,0 +1,36 @@ +using System; + +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ + +class estuardodev +{ + public static void Main(String[] args) + { + for (int i = 1; i < 101; i++) + { + if (i % 3 == 0 && i % 5 == 0) + { + Console.WriteLine("fizzbuzz"); + } + else if (i % 3 == 0) + { + Console.WriteLine("fizz"); + } + else if (i % 5 == 0) + { + Console.WriteLine("buzz"); + } + else + { + Console.WriteLine(i); + } + } + } +} \ No newline at end of file From 723c2e94ddcf7e1ffe6d74f8f962da92c06ad6a8 Mon Sep 17 00:00:00 2001 From: marco Date: Mon, 16 Oct 2023 23:55:28 -0600 Subject: [PATCH 0290/2103] Reto #35 - Typescript --- .../typescript/marcode24.ts" | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 "Retos/Reto #35 - PRIMEROS PASOS [F\303\241cil]/typescript/marcode24.ts" diff --git "a/Retos/Reto #35 - PRIMEROS PASOS [F\303\241cil]/typescript/marcode24.ts" "b/Retos/Reto #35 - PRIMEROS PASOS [F\303\241cil]/typescript/marcode24.ts" new file mode 100644 index 0000000000..fa04d4c966 --- /dev/null +++ "b/Retos/Reto #35 - PRIMEROS PASOS [F\303\241cil]/typescript/marcode24.ts" @@ -0,0 +1,113 @@ +/* + * Como cada año, el día 256 se celebra el "Día de la Programación". + * En nuestra comunidad siempre hacemos una gran fiesta donde repartirmos + * 256 regalos para seguir aprendiendo programación: + * https://diadelaprogramacion.com + * + * Para seguir ayudando, te propongo este reto: + * Mostrar la sintaxis de los principales elementos de un lenguaje + * en TODOS los lenguajes de programación que podamos. ¿Llegaremos a 50? + * + * En un fichero, haz lo siguiente (si el lenguaje lo soporta), + * y comenta cada bloque para identificar con qué se corresponde: + * - Haz un "Hola, mundo!" + * - Crea variables de tipo String, numéricas (enteras y decimales) + * y Booleanas (o cualquier tipo de dato primitivo). + * - Crea una constante. + * - Usa un if, else if y else. + * - Crea estructuras como un array, lista, tupla, set y diccionario. + * - Usa un for, foreach y un while. + * - Crea diferentes funciones (con/sin parámetros y con/sin retorno). + * - Crea una clase. + * - Muestra el control de excepciones. + * + * Así, cualquier persona podrá consultar rápidamente diferentes ejemplos + * de sintaxis básica de muchos lenguajes. + * + * ¡Muchas gracias! + */ + +// Hola, mundo! +console.log("Hola, mundo!"); + +// Creación de variables de diferentes tipos +let stringVariable: string = "Esto es una cadena de texto"; +let numericIntegerVariable: number = 10; +let numericDecimalVariable: number = 3.14; +let booleanVariable: boolean = true; + +// Creación de una constante +const PI: number = 3.14159; + +// Uso de if, else if y else +let number: number = 15; +if (number > 10) { + console.log("El número es mayor que 10"); +} else if (number === 10) { + console.log("El número es igual a 10"); +} else { + console.log("El número es menor que 10"); +} + +// Creación de estructuras de datos +let array: number[] = [1, 2, 3, 4, 5]; // Array +let list: number[] = [10, 20, 30]; // Lista (representada como un array en TypeScript) +let tuple: [number, string, boolean] = [1, "hola", true]; // Tupla +let set: Set = new Set([1, 2, 3]); // Set +let dictionary: { [key: string]: string } = { "clave1": "valor1", "clave2": "valor2" }; // Diccionario + +// Uso de bucles: for, forEach y while +for (let i = 0; i < array.length; i++) { + console.log(array[i]); +} + +list.forEach(item => { + console.log(item); +}); + +let count: number = 0; +while (count < 5) { + console.log("Contador: " + count); + count++; +} + +// Creación de funciones +function suma(a: number, b: number): number { + return a + b; +} + +function greets(name: string): void { + console.log("Hola, " + name + "!"); +} + +// Creación de una función sin retorno +function printMessages(message: string): void { + console.log(message); +} + +// Creación de una función sin parámetros +function sayHellos(): void { + console.log("¡Hola!"); +} + +// Creación de una clase +class Persona { + constructor(private nombre: string, private edad: number) {} + + presentarse(): void { + console.log("Hola, soy " + this.nombre + " y tengo " + this.edad + " años."); + } +} + +// Control de excepciones +try { + // Intentamos ejecutar un bloque de código que puede generar un error + let resultado: number = 10 / 0; + console.log("El resultado es: " + resultado); +} catch (error) { + // Capturamos y manejamos el error + console.error("Se produjo un error: " + error.message); +} + + +// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges From 4504b562e5d823aedea73e61499beaa2cac639ab Mon Sep 17 00:00:00 2001 From: marco Date: Mon, 16 Oct 2023 23:59:18 -0600 Subject: [PATCH 0291/2103] Reto #36 - Javascript --- .../javascript/marcode24.js | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Retos/Reto #36 - PERMUTACIONES [Media]/javascript/marcode24.js diff --git a/Retos/Reto #36 - PERMUTACIONES [Media]/javascript/marcode24.js b/Retos/Reto #36 - PERMUTACIONES [Media]/javascript/marcode24.js new file mode 100644 index 0000000000..6d89c6a443 --- /dev/null +++ b/Retos/Reto #36 - PERMUTACIONES [Media]/javascript/marcode24.js @@ -0,0 +1,24 @@ +/* + * Crea un programa que sea capaz de generar e imprimir todas las + * permutaciones disponibles formadas por las letras de una palabra. + * - Las palabras generadas no tienen por qué existir. + * - Deben usarse todas las letras en cada permutación. + * - Ejemplo: sol, slo, ols, osl, los, lso + */ + +const getPermutations = (str) => { + if (str.length <= 1) return [str]; + const permutations = []; + for (let i = 0; i < str.length; i++) { + const char = str[i]; + const remaining = str.slice(0, i) + str.slice(i + 1); + const remainingPermutations = getPermutations(remaining); + for (let j = 0; j < remainingPermutations.length; j++) { + const permutation = char + remainingPermutations[j]; + permutations.push(permutation); + } + } + return permutations; +}; + +// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges From ad2e1f43ed106fb02567ce99de06e2b4cb7a62bd Mon Sep 17 00:00:00 2001 From: marco Date: Tue, 17 Oct 2023 00:07:08 -0600 Subject: [PATCH 0292/2103] Reto #37 - Javascript --- .../javascript/marcode24.js | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Retos/Reto #37 - COLORES HEX Y RGB [Media]/javascript/marcode24.js diff --git a/Retos/Reto #37 - COLORES HEX Y RGB [Media]/javascript/marcode24.js b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/javascript/marcode24.js new file mode 100644 index 0000000000..da761df31a --- /dev/null +++ b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/javascript/marcode24.js @@ -0,0 +1,25 @@ +/* + * Crea las funciones capaces de transformar colores HEX + * a RGB y viceversa. + * Ejemplos: + * RGB a HEX: r: 0, g: 0, b: 0 -> #000000 + * HEX a RGB: hex: #000000 -> (r: 0, g: 0, b: 0) + */ + + +const hexToRgb = (hex) => { + const r = parseInt(hex.slice(1, 3), 16); + const g = parseInt(hex.slice(3, 5), 16); + const b = parseInt(hex.slice(5, 7), 16); + return `rgb(${r}, ${g}, ${b})`; +}; + +const rgbToHex = (rgb) => { + const [r, g, b] = rgb.slice(4, -1).split(', '); + const hex = [r, g, b] + .map((n) => parseInt(n, 10).toString(16).padStart(2, '0')) + .join(''); + return `#${hex}`; +}; + +// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges From 9371452e1819ba23c07472e56acb55bfec8158a0 Mon Sep 17 00:00:00 2001 From: marco Date: Tue, 17 Oct 2023 00:09:58 -0600 Subject: [PATCH 0293/2103] Reto #38 - Javascript --- .../javascript/marcode24.js | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/javascript/marcode24.js diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/javascript/marcode24.js b/Retos/Reto #38 - LAS SUMAS [Media]/javascript/marcode24.js new file mode 100644 index 0000000000..d5f7375900 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/javascript/marcode24.js @@ -0,0 +1,31 @@ +/* + * Crea una función que encuentre todas las combinaciones de los números + * de una lista que suman el valor objetivo. + * - La función recibirá una lista de números enteros positivos + * y un valor objetivo. + * - Para obtener las combinaciones sólo se puede usar + * una vez cada elemento de la lista (pero pueden existir + * elementos repetidos en ella). + * - Ejemplo: Lista = [1, 5, 3, 2], Objetivo = 6 + * Soluciones: [1, 5] y [1, 3, 2] (ambas combinaciones suman 6) + * (Si no existen combinaciones, retornar una lista vacía) + */ + +const getCombinations = ({ values, target }) => { + const combinations = []; + const find = (index, sum, combination) => { + if (sum === target) { + combinations.push(combination); + return; + } + if (sum > target || index >= values.length) { + return; + } + find(index + 1, sum, combination); + find(index + 1, sum + values[index], [...combination, values[index]]); + }; + find(0, 0, []); + return combinations; +}; + +// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges From 202768a9fd60cdd48be38d12f3604e3413e0aa8c Mon Sep 17 00:00:00 2001 From: marco Date: Tue, 17 Oct 2023 00:24:03 -0600 Subject: [PATCH 0294/2103] Reto #39 - Javascript --- .../javascript/marcode24.js" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/javascript/marcode24.js" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/javascript/marcode24.js" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/javascript/marcode24.js" new file mode 100644 index 0000000000..560d594a72 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/javascript/marcode24.js" @@ -0,0 +1,31 @@ +/* + * Crea una función que encuentre todos los triples pitagóricos + * (ternas) menores o iguales a un número dado. + * - Debes buscar información sobre qué es un triple pitagórico. + * - La función únicamente recibe el número máximo que puede + * aparecer en el triple. + * - Ejemplo: Los triples menores o iguales a 10 están + * formados por (3, 4, 5) y (6, 8, 10). + */ + +const pythagoreanTriple = (n) => { + const triples = []; + + for (let a = 1; a <= n; a++) { + const aSquared = a * a; + + for (let b = a + 1; b <= n; b++) { + const bSquared = b * b; + const cSquared = aSquared + bSquared; + const c = Math.sqrt(cSquared); + + if (c <= n && c === Math.floor(c)) { + triples.push([a, b, c]); + } + } + } + + return triples; +}; + +// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges From 5cbfe0a61f17d4c3a12dd56ea09c87bb84d613a0 Mon Sep 17 00:00:00 2001 From: marco Date: Tue, 17 Oct 2023 00:27:06 -0600 Subject: [PATCH 0295/2103] Reto #40 - Javascript --- .../javascript/marcode24.js" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/marcode24.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/marcode24.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/marcode24.js" new file mode 100644 index 0000000000..65c870c2ab --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/marcode24.js" @@ -0,0 +1,20 @@ +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +const printMutliplications = (num) => { + const results = []; + for (let index = 0; index < 10; index++) { + const legend = `${num} x ${index + 1} = ${num * (index + 1)}`; + results.push(legend); + } + return results; +}; + +// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges From 7c1e7b75233bc3de5b87e1e024ccaafae1a233e8 Mon Sep 17 00:00:00 2001 From: Jamer Rebolledo Date: Tue, 17 Oct 2023 03:03:03 -0500 Subject: [PATCH 0296/2103] =?UTF-8?q?=F0=9F=8F=84=20Soluci=C3=B3n=20Reto?= =?UTF-8?q?=2041,=20Python3=20by=20@jamerrq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/jamerrq.py" | 286 ++++++++++++------ 1 file changed, 200 insertions(+), 86 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jamerrq.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jamerrq.py" index 2820275c22..ee9bf5f177 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jamerrq.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jamerrq.py" @@ -2,10 +2,14 @@ import os import time -# Limpiar la pantalla - +# MODO DEBUG +# Si debug es True, entonces se mostrarán todas las habitaciones +DEBUG_MODE = False -def clear(): +# Limpiar la pantalla +def clear(force=False): + if DEBUG_MODE and not force: + return os.system('cls' if os.name == 'nt' else 'clear') @@ -47,7 +51,7 @@ def clear(): 'pista': 'Se usa en un día muy triste' }, { - 'pregunta': 'Tom mide 1,80, es ayudante en una carnicería y lleva zapatos de la talla 45. ¿Qué pesa?', + 'pregunta': 'Tom mide 1.80, es ayudante en una carnicería y lleva zapatos de la talla 45. ¿Qué pesa?', 'respuesta': 'Carne', 'pista': 'Lee bien la pregunta' }, @@ -59,15 +63,68 @@ def clear(): { 'pregunta': '¿De qué color es el caballo blanco de Santiago?', 'respuesta': 'Blanco', - 'pista': 'Es un caballo blanco' + 'pista': 'Lee bien la pregunta' }, { 'pregunta': 'Si un pastor tiene 15 ovejas y se le mueren todas menos nueve, ¿cuántas le quedan?', 'respuesta': 'Nueve', 'pista': 'Lee bien la pregunta' + }, + { + 'pregunta': 'Tengo un arco y soy de madera, pero no una flecha. ¿Qué soy?', + 'respuesta': 'Un violín', + 'pista': 'Es un instrumento musical' + }, + { + 'pregunta': 'Cuando me necesitas, me tiras. Cuando ya no me necesitas, me recoges. ¿Qué soy?', + 'respuesta': 'El ancla', + 'pista': 'Se usa en los barcos' + }, + { + 'pregunta': 'Círculo redondo al que, si lo golpeas, das un buen brinco del susto. ¿Qué es?', + 'respuesta': 'El tambor', + 'pista': 'Porrumpompom' + }, + { + 'pregunta': 'Dos abanicos que no paran en todo el día, pero cuando duermes se quedan quietos. ¿Qué son?', + 'respuesta': 'Las pestañas', + 'pista': 'Están en tus ojos' + }, + { + 'pregunta': 'No tengo cabeza, pero sí cuello.', + 'respuesta': 'La botella', + 'pista': 'Se usa para beber' + }, + { + 'pregunta': 'Pese a tener 4 patas, no puedo correr ni caminar. ¿Qué soy?', + 'respuesta': 'La silla', + 'pista': 'Se usa para descansar las nalgas 🌚' } ] +print('Hay {} acertijos'.format(len(acertijos))) + + +def preprocess(input): + # Preprocesar la respuesta + # 1. Quitar los espacios en blanco + # output = input.replace(' ', '') + output = input + # 2. Quitar los signos de puntuación + signos = ['.', ',', '¿', '?', '¡', '!', + '(', ')', '[', ']', '{', '}', ':', ';', '-', '_', '—', '«', '»', '“', '”'] + for signo in signos: + output = output.replace(signo, '') + # 3. Quitar los acentos + output = output.replace('á', 'a').replace('é', 'e').replace( + 'í', 'i').replace('ó', 'o').replace('ú', 'u') + # 4. Convertir a minúsculas + output = output.lower() + # 5. Quitar los artículos (el, la, los, las, un, una, unos, unas) + output = output.replace('el ', '').replace('la ', '').replace('los ', '').replace( + 'las ', '').replace('una ', '').replace('un ', '').replace('unos ', '').replace('unas ', '') + return output + class Acertijo: @@ -80,7 +137,8 @@ def __init__(self, pregunta, respuesta, pista="", intentos=3): self.resuelto = False def comprobar(self, respuesta): - return respuesta == self.respuesta or respuesta == self.respuesta.lower() or respuesta == self.respuesta.upper() or respuesta == self.respuesta.replace('á', 'a').replace('é', 'e').replace('í', 'i').replace('ó', 'o').replace('ú', 'u') or respuesta == self.respuesta.replace('á', 'a').replace('é', 'e').replace('í', 'i').replace('ó', 'o').replace('ú', 'u').lower() or respuesta == self.respuesta.replace('á', 'a').replace('é', 'e').replace('í', 'i').replace('ó', 'o').replace('ú', 'u').upper() or self.respuesta.replace('El ', '').replace('La ', '').replace('Los ', '').replace('Las ', '') == respuesta or self.respuesta.replace('El ', '').replace('La ', '').replace('Los ', '').replace('Las ', '') == respuesta.lower() or self.respuesta.replace('El ', '').replace('La ', '').replace('Los ', '').replace('Las ', '') == respuesta.upper() + # print(preprocess(respuesta), preprocess(self.respuesta)) + return preprocess(respuesta) == preprocess(self.respuesta) def usar_pista(self): if self.pista_usada: @@ -89,8 +147,12 @@ def usar_pista(self): print(self.pista) self.pista_usada = True - def resolver(self): - print('🎩 ACERTIJO 🪄') + def resolver(self, no_clear=False, n=0): + if not n: + print('🎩 ACERTIJO 🪄') + else: + print(f'🎩 ACERTIJO {n} de 2 🪄'.format(n)) + print('🧱'*20) answer = '' while (not self.comprobar(answer)) and self.intentos > 0: answer = input(self.pregunta + '\n -> ') @@ -99,20 +161,22 @@ def resolver(self): if self.intentos > 0: print("Respuesta incorrecta 😔, te quedan {} intentos".format( self.intentos)) - print('Pista: ', self.pista) + print('Pista 🐦‍: ', self.pista) if self.comprobar(answer): - clear() - print('%'*50) + if not no_clear: + clear() + print('🧱'*20) print("🎉 Respuesta correcta 🎉") - print('%'*50) + print('🧱'*20) time.sleep(1) self.resuelto = True return True else: - clear() - print('%'*50) + if not no_clear: + clear() + print('🧱'*20) print("💀 Respuesta incorrecta, perdiste una vida 💀") - print('%'*50) + print('🧱'*20) time.sleep(1) return False @@ -164,12 +228,6 @@ def __init__(self, n=4, m=4, alpha_ghost=0.1): # a la puerta de entrada puerta = Habitacion(0, 0, 'puerta') - # Se crea una habitación dulce en una posición aleatoria - dulce_fila = random.randint(1, n-1) - dulce_columna = random.randint(1, m-1) - # print('Dulce en: {}, {}'.format(dulce_fila, dulce_columna)) - dulce = Habitacion(dulce_fila, dulce_columna, 'dulce') - # TODO: Implementar la creación de las habitaciones fantasmas # Crear las habitaciones normales @@ -193,12 +251,11 @@ def __init__(self, n=4, m=4, alpha_ghost=0.1): dulce_fila = None dulce_columna = None - while dulce_fila is None or self.habitaciones[dulce_fila][dulce_columna].type != 'normal': - dulce_fila = random.randint(1, n-1) - dulce_columna = random.randint(1, m-1) + while dulce_fila is None or self.habitaciones[dulce_fila][dulce_columna].type != 'normal' or not (dulce_fila + dulce_columna): + dulce_fila = random.randint(0, n-1) + dulce_columna = random.randint(0, m-1) + dulce = Habitacion(dulce_fila, dulce_columna, 'dulce') # Colocar el dulce en la habitación correspondiente - # dulce_fila = 0 - # dulce_columna = 1 print('Dolce en: {}, {}'.format(dulce_fila, dulce_columna)) self.habitaciones[dulce_fila][dulce_columna] = dulce @@ -206,56 +263,44 @@ def mostrar(self, x, y, jogando=True): def mostrar_habitacion(habitacion): # Si el jugador está en la habitación, mostrarlo - if(habitacion.x == x and habitacion.y == y and jogando): + if habitacion.x == x and habitacion.y == y and jogando and habitacion.type != 'dulce': + # print(x, y) str_hab = str(habitacion) - if(habitacion.solved != None): - if(habitacion.solved): + if habitacion.solved != None: + if habitacion.solved: str_hab = '✅' else: str_hab = '❌' return '👤' + ' ' + str_hab - elif(habitacion.solved and jogando): + elif habitacion.solved and jogando: return ' ✅' - elif(habitacion.solved == False and jogando): + elif habitacion.solved == False and jogando: return ' ❌' # Si no se ha terminado el juego y la habitación # es de tipo fantasma, entonces mostrar una habitación normal (en # caso que no se haya resulto la habitación) elif habitacion.type == 'dulce': - if not jogando: + if not jogando or DEBUG_MODE: return ' 🍭' else: return ' ⬜️' - elif habitacion.type == 'fantasma' and jogando: - if habitacion.solved == None: - return ' ⬜️' - elif habitacion.solved: - return ' ✅' + elif habitacion.type == 'fantasma': + if jogando and not DEBUG_MODE: + if habitacion.solved == None: + return ' ⬜️' + elif habitacion.solved: + return ' ✅' + else: + return ' ❌' else: - return ' ❌' - elif habitacion.x == x and habitacion.y == y: - return '👤' + ' ' + str(habitacion) + return ' 👻' else: return ' ' + str(habitacion) - # def special_format(habitacion): - # if habitacion.type == 'puerta': - # return 'LA PUERTA' - # elif habitacion.type == 'fantasma': - # return 'HABITACIÓN FANTASMA' - # elif habitacion.type == 'dulce': - # return 'HABITACIÓN DULCE' - # else: - # return 'HABITACIÓN NORMAL' - # Mostrar cada fila de la matriz for fila in self.habitaciones: print(' '.join([mostrar_habitacion(h) for h in fila])) - # Mostrar la posición del jugador - # print('Estás en: {}, {} ({})'.format(x, y, - # special_format(habitacion=self.habitaciones[x][y]))) - class Juego: @@ -276,10 +321,16 @@ def __init__(self, mansion, vidas=3): def mostrar(self): self.mansion.mostrar(self.x, self.y, self.jugando) - print('%'*50) - print('🎩 Score: {}'.format(self.score)) - print('🍄 Vidas: {}'.format(self.vidas)) - print('🗺️ Estás en: {}, {}'.format(self.x, self.y)) + # print() + print('🧱'*20) + print('🎩 Puntaje: {0:.2f}'.format(self.get_real_score())) + print('🍄 Vidas: {}'.format(self.vidas)) + print('🗺️ Estás en: ({}, {})'.format(self.x, self.y)) + print('🥾 Pasos: {}'.format(self.steps)) + print('🔑 Acertijos: {}'.format(len(self.resueltas))) + + def get_real_score(self): + return (self.score / max(1, self.steps)) + self.vidas def mover(self, direccion): if direccion == 'N' or direccion == 'n': @@ -288,9 +339,9 @@ def mover(self, direccion): self.steps += 1 else: clear() - print('%'*50) + print('🧱'*20) print('🚫 No puedes ir hacia el norte 🚫') - print('%'*50) + print('🧱'*20) time.sleep(1) elif direccion == 'S' or direccion == 's': @@ -299,9 +350,9 @@ def mover(self, direccion): self.steps += 1 else: clear() - print('%'*50) + print('🧱'*20) print('🚫 No puedes ir hacia el sur 🚫') - print('%'*50) + print('🧱'*20) time.sleep(1) elif direccion == 'E' or direccion == 'e': @@ -310,53 +361,67 @@ def mover(self, direccion): self.y += 1 else: clear() - print('%'*50) + print('🧱'*20) print('🚫 No puedes ir hacia el este 🚫') - print('%'*50) + print('🧱'*20) time.sleep(1) - elif direccion == 'O' or direccion == 'o': + elif direccion == 'W' or direccion == 'w': if self.y > 0: self.steps += 1 self.y -= 1 else: clear() - print('%'*50) + print('🧱'*20) print('🚫 No puedes ir hacia el oeste 🚫') - print('%'*50) + print('🧱'*20) time.sleep(1) elif direccion == 'X' or direccion == 'x': - print('Sayonara 👋') + print('🎃 Hasta Luego 👋') self.jugando = False else: print('Dirección no válida') def jugar(self): + clear(force=True) while self.jugando: clear() - print('%'*50) + print('🧱'*20) + print('🧱'*4 + '🏚️ MANSIÓN ENCANTADA 🏚️' + '🧱'*5) + print('🧱'*20) + if(DEBUG_MODE): + print('🎃 MODO DEBUG 🐛') + print('🧱'*20) self.mostrar() - print('%'*50) - direccion = input('¿Hacia dónde quieres ir? (N, S, E, O) ' + - '\n' + 'Presiona X para salir.' + '\n -> ') + print('🧱'*20) + options = ['N ↑', 'S ↓', 'E →', 'W ←'] + if self.x == 0: + options.remove('N ↑') + if self.x == self.mansion.n-1: + options.remove('S ↓') + if self.y == 0: + options.remove('W ←') + if self.y == self.mansion.m-1: + options.remove('E →') + direccion = input(f'🧭 ¿Hacia dónde quieres ir? [{", ".join(options)}]' + + '\n' + 'Presiona X para salir.' + '\n ↪ ') self.mover(direccion) habitacion = self.mansion.habitaciones[self.x][self.y] if habitacion.type == 'fantasma': - # if(habitacion.solved != None): - # print('%'*50) - # print('Ya resolviste este acertijo 🪄') - # continue + if(habitacion.solved != None): + continue clear() + print('🧱'*20) print('Has entrado en una habitación fantasma 👻') print('Debes resolver 2 acertijos para poder salir 🪤') - print('%'*50) + print('🧱'*20) n = random.randint(0, len(acertijos)-1) while n in self.resueltas: n = random.randint(0, len(acertijos)-1) acertijo1 = Acertijo( acertijos[n]['pregunta'], acertijos[n]['respuesta'], acertijos[n]['pista']) - if acertijo1.resolver(): + if acertijo1.resolver(no_clear=True, n=1): self.score += 50 self.resueltas.add(n) n = random.randint(0, len(acertijos)-1) @@ -364,7 +429,7 @@ def jugar(self): n = random.randint(0, len(acertijos)-1) acertijo2 = Acertijo( acertijos[n]['pregunta'], acertijos[n]['respuesta'], acertijos[n]['pista']) - if(acertijo2.resolver()): + if(acertijo2.resolver(no_clear=True, n=2)): self.resueltas.add(n) self.score += 50 habitacion.resolver(True) @@ -382,13 +447,14 @@ def jugar(self): print('Has perdido todas las vidas') self.jugando = False elif habitacion.type == 'dulce': - print('%'*50) + print('🧱'*20) print('Ganaste el juego 🎉') print('Tu score es: {0:.2f}'.format( self.score / self.steps + self.vidas)) - print('%'*50) - print('\nTABLERO INICIAL:') + print('🧱'*20) + print('TABLERO INICIAL 🏁') self.mansion.mostrar(self.x, self.y, False) + print('🧱'*20) habitacion.resolver(True) self.jugando = False break @@ -399,13 +465,12 @@ def jugar(self): pass else: if(habitacion.solved != None): - print('%'*50) - print('Ya resolviste este acertijo 🪄') continue clear() + print('🧱'*20) print('Has entrado en una habitación normal 🛖') print('Debes resolver un acertijo para poder salir 🪤') - print('%'*50) + print('🧱'*20) n = random.randint(0, len(acertijos)-1) while n in self.resueltas: n = random.randint(0, len(acertijos)-1) @@ -422,12 +487,61 @@ def jugar(self): print('Has perdido todas las vidas, el juego ha finalizado 😞') self.jugando = False +def mostrar_mensaje_bienvenida(): + # Mostrar mensaje de bienvenida + clear(force=True) + print('🧱'*20) + print('🎃 Bienvenido a la mansión encantada 🎃') + print('🧱'*20,end="") + print(""" +🧙🏽 Sinopsis: +Acabas de entrar en una mansión encantada, la cuál consiste en una serie +de habitaciones. En cada habitación hay un acertijo que debes resolver +para poder pasar a la siguiente. Si resuelves el acertijo, ganas 50 puntos, +pero si no lo resuelves, pierdes una vida. Si pierdes todas las vidas, +pierdes el juego. Si logras encontrar el dulce, ganas el juego. +🧟 ¡Ten cuidado! Hay habitaciones fantasmas, las cuales tienen 2 acertijos +que debes resolver para poder salir. Si no los resuelves, pierdes una vida. +🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 +🎩 Cómo se calcula el puntaje: +El puntaje se calcula de la siguiente manera: +(puntaje / pasos) + vidas, por lo que es importante resolver los acertijos +en la menor cantidad de pasos posibles y con la mayor cantidad de vidas. +🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 +📝 Controles: +Para moverte, debes escribir la dirección hacia donde quieres ir: +N -> Norte +S -> Sur +E -> Este +W -> Oeste + +Para salir del juego, debes escribir X +🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 +🔮 Para tener en cuenta: + - Si resuelves un acertijo, puedes volver a entrar en la habitación + pero ya no habrá acertijo y te aumentará el número de pasos. + - No debes preocuparte por acentos, signos de puntuación o + mayúsculas/minúsculas en las respuestas, ya que el juego se encarga + de validar eso. Por ejemplo, si la respuesta es "El perro", entonces + puedes escribir "el perro", "El Perro", "perro", etc. + - Si quieres ver el tablero completo, puedes cambiar el valor de la + variable DEBUG_MODE a True. +🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 +🧛 ¡Mucha suerte! Presiona cualquier tecla para comenzar 🪄 +""") + input(" ↪ ") + + def main(): # Crear la mansión mansion = Mansion() - # mansion.mostrar() + # Mostrar mensaje de bienvenida + if not DEBUG_MODE: + mostrar_mensaje_bienvenida() + # Crear el juego juego = Juego(mansion) + # Jugar juego.jugar() From 7a21ec37ca021b65c5b995625983d64613ca3b76 Mon Sep 17 00:00:00 2001 From: Jamer Rebolledo Date: Tue, 17 Oct 2023 03:12:01 -0500 Subject: [PATCH 0297/2103] =?UTF-8?q?=F0=9F=8F=84=20Soluci=C3=B3n=20Reto?= =?UTF-8?q?=2041,=20Python3=20by=20@jamerrq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/jamerrq.py" | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jamerrq.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jamerrq.py" index ee9bf5f177..dd17deb75c 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jamerrq.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jamerrq.py" @@ -155,7 +155,7 @@ def resolver(self, no_clear=False, n=0): print('🧱'*20) answer = '' while (not self.comprobar(answer)) and self.intentos > 0: - answer = input(self.pregunta + '\n -> ') + answer = input(self.pregunta + '\n ↪ ') if not self.comprobar(answer): self.intentos -= 1 if self.intentos > 0: @@ -495,6 +495,7 @@ def mostrar_mensaje_bienvenida(): print('🧱'*20,end="") print(""" 🧙🏽 Sinopsis: +🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 Acabas de entrar en una mansión encantada, la cuál consiste en una serie de habitaciones. En cada habitación hay un acertijo que debes resolver para poder pasar a la siguiente. Si resuelves el acertijo, ganas 50 puntos, @@ -504,30 +505,34 @@ def mostrar_mensaje_bienvenida(): que debes resolver para poder salir. Si no los resuelves, pierdes una vida. 🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 🎩 Cómo se calcula el puntaje: +🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 El puntaje se calcula de la siguiente manera: (puntaje / pasos) + vidas, por lo que es importante resolver los acertijos en la menor cantidad de pasos posibles y con la mayor cantidad de vidas. 🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 📝 Controles: +🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 Para moverte, debes escribir la dirección hacia donde quieres ir: -N -> Norte -S -> Sur -E -> Este -W -> Oeste +N → Norte +S → Sur +E → Este +W → Oeste Para salir del juego, debes escribir X 🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 🔮 Para tener en cuenta: - - Si resuelves un acertijo, puedes volver a entrar en la habitación - pero ya no habrá acertijo y te aumentará el número de pasos. - - No debes preocuparte por acentos, signos de puntuación o - mayúsculas/minúsculas en las respuestas, ya que el juego se encarga - de validar eso. Por ejemplo, si la respuesta es "El perro", entonces - puedes escribir "el perro", "El Perro", "perro", etc. - - Si quieres ver el tablero completo, puedes cambiar el valor de la - variable DEBUG_MODE a True. +🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 +- Si resuelves un acertijo, puedes volver a entrar en la habitación +pero ya no habrá acertijo y te aumentará el número de pasos. +- No debes preocuparte por acentos, signos de puntuación o +mayúsculas/minúsculas en las respuestas, ya que el juego se encarga +de validar eso. Por ejemplo, si la respuesta es "El perro", entonces +puedes escribir "el perro", "El Perro", "perro", etc. +- Si quieres ver el tablero completo, puedes cambiar el valor de la +variable DEBUG_MODE a True. 🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 🧛 ¡Mucha suerte! Presiona cualquier tecla para comenzar 🪄 +🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱🧱 """) input(" ↪ ") From eb3ee9f6b62ad63608893e0287793bfdcc37eb20 Mon Sep 17 00:00:00 2001 From: allbertoMD Date: Tue, 17 Oct 2023 11:45:44 +0200 Subject: [PATCH 0298/2103] Reto #40 Swift --- .../swift/allbertoMD.swift" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/swift/allbertoMD.swift" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/swift/allbertoMD.swift" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/swift/allbertoMD.swift" new file mode 100644 index 0000000000..c1ed66100a --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/swift/allbertoMD.swift" @@ -0,0 +1,10 @@ +import Foundation + +func multiplicationTable(_ number: Int) { + + for n in 0...10 { + print("\(number) x \(n) = \(n * number)") + } +} + +multiplicationTable(5) From dfea0f64c889a7750d9af43f6d12b08c5bc852a3 Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Tue, 17 Oct 2023 10:26:44 -0500 Subject: [PATCH 0299/2103] Reto #15 - Python --- .../python/sublian.py" | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 "Retos/Reto #15 - AUREBESH [F\303\241cil]/python/sublian.py" diff --git "a/Retos/Reto #15 - AUREBESH [F\303\241cil]/python/sublian.py" "b/Retos/Reto #15 - AUREBESH [F\303\241cil]/python/sublian.py" new file mode 100644 index 0000000000..0e73fff4af --- /dev/null +++ "b/Retos/Reto #15 - AUREBESH [F\303\241cil]/python/sublian.py" @@ -0,0 +1,117 @@ +# Reto #15: Aurebesh +#### Dificultad: Fácil | Publicación: 10/04/23 | Corrección: 17/04/23 +## Enunciado + +""" + * Crea una función que sea capaz de transformar Español al lenguaje básico del universo + * Star Wars: el "Aurebesh". + * - Puedes dejar sin transformar los caracteres que no existan en "Aurebesh". + * - También tiene que ser capaz de traducir en sentido contrario. + * + * ¿Lo has conseguido? Nómbrame en twitter.com/mouredev y escríbeme algo en Aurebesh. + * + * ¡Que la fuerza os acompañe! +""" + +#diccionario de Español a Aurebesh +es_dict = { + "A": "Aurek", + "B": "Besh", + "C": "Cresh", + "D": "Dorn", + "E": "Esk", + "F": "Forn", + "G": "Greer", + "H": "Herf", + "I": "Isk", + "J": "Jenth", + "K": "Krill", + "L": "Leth", + "M": "Mern", + "N": "Nern", + "O": "Osk", + "P": "Peth", + "Q": "Qek", + "R": "Resh", + "S": "Senth", + "T": "Trill", + "U": "Usk", + "V": "Vev", + "W": "Wesk", + "X": "Xesh", + "Y": "Yirt", + "Z": "Zerek", + "OO": "Orenth", + "SH": "Shen", + "TH": "Thesh", + "AE": "Enth", + "EO": "Onith", + "NG": "Nen", +} +#diccionario de Aurebesh a Español +aurebesh_dict = { + "Aurek": "A", + "Besh": "B", + "Cresh": "C", + "Dorn": "D", + "Esk": "E", + "Forn": "F", + "Greer": "G", + "Herf": "H", + "Isk": "I", + "Jenth": "J", + "Krill": "K", + "Leth": "L", + "Mern": "M", + "Nern": "N", + "Osk": "O", + "Peth": "P", + "Qek": "Q", + "Resh": "R", + "Senth": "S", + "Trill": "T", + "Usk": "U", + "Vev": "V", + "Wesk": "W", + "Xesh": "X", + "Yirt": "Y", + "Zerek": "Z", + "Orenth": "OO", + "Shen": "SH", + "Thesh": "TH", + "Enth": "AE", + "Onith": "EO", + "Nen": "NG", +} + + +def aurebesh_2_es(text): + resultado = "" + #recorre el listado de palabras presentes en el texto, palabras por palabras + for word in text.split(): + resultado += f"{aurebesh_dict.get(word, word)}" + return resultado.strip() + +def es_2_aurebesh(text): + resultado = "" + i = 0 + text = text.upper() + while i <= len(text) - 1: + #valida que sea un par de letras presentes en el diccionario + if i + 1 < len(text) and f"{text[i]}{text[i+1]}" in es_dict: + resultado += f"{es_dict.get(f'{text[i]}{text[i+1]}')} " + i += 1 + #caso para una letra presente en el diccionario + else: + resultado += f"{es_dict.get(text[i], text[i])} " + i += 1 + return resultado + +if __name__ == "__main__": + texto = input("Ingrese un texto: ") + aurebesh = es_2_aurebesh(texto) + texto_retraducido = aurebesh_2_es(aurebesh) + print(f"Traduccion a Aurebesh: {aurebesh}") + print(f"Traduccion a Español: {texto_retraducido}") + print(es_2_aurebesh("Gracias Brais")) + print(aurebesh_2_es(es_2_aurebesh("Gracias Brais"))) \ No newline at end of file From a1a579d354a250eeea45c1a3486e65124c17979b Mon Sep 17 00:00:00 2001 From: pyRamsd Date: Tue, 17 Oct 2023 12:24:57 -0500 Subject: [PATCH 0300/2103] Reto #40 - python --- .../python/pyramsd.py" | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/pyramsd.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/pyramsd.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/pyramsd.py" new file mode 100644 index 0000000000..a9c7a41c64 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/pyramsd.py" @@ -0,0 +1,13 @@ +def mul_table(n): + + while True: + try: + n = int(input("Numero: ")) + break + except ValueError: + print("Valor no numerico") + + for i in range(1, 11): + print(f"{n} x {i} = {n*i}") + +mul_table() From e918901ff223524894ccf13e75b2bb23bdabd1fc Mon Sep 17 00:00:00 2001 From: Edwin Date: Tue, 17 Oct 2023 13:47:28 -0400 Subject: [PATCH 0301/2103] Reto #2 - JavaScript --- .../javascript/EdGonzz.js | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/EdGonzz.js diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/EdGonzz.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/EdGonzz.js new file mode 100644 index 0000000000..2d1fcfc5fe --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/EdGonzz.js @@ -0,0 +1,62 @@ +/* Reto #2: EL PARTIDO DE TENIS +Dificultad: Media | Publicación: 09/01/23 | Corrección: 16/01/23 + +Enunciado + + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ + + +let marcador = ['Love', 15, 30, 40, 'Deuce', 'Ventaja'] + +function tenisGame(arr) { + let p1 = 0 + let p2 = 0 + + for (let i = 0; i < arr.length; i++) { + if (arr[i] === 'P1') { + p1++ + } else if (arr[i] === 'P2') { + p2++ + } else { + console.log(`Jugadores no Validos`); + break + } + + if (marcador[p1] === 40 && marcador[p2] === 40) { + console.log(marcador[4]); + } else if (p1 > 3) { + console.log(`${marcador[5]} P1`); + break + } else if (p2 > 3) { + console.log(`${marcador[5]} P2`); + break + }else { + console.log(`${marcador[p1]} - ${marcador[p2]}`); + } + } + if (p1 > p2) { + console.log('Ha ganado el P1'); + } else if(p2 > p1) { + console.log('Ha ganado el P2'); + } +} + +tenisGame(['P1', 'P1', 'P2', 'P2', 'P1', 'P2', 'P1', 'P1']) +tenisGame(['P2', 'P2', 'P1', 'P1', 'P2', 'P1', 'P2', 'P2']) +tenisGame(['P3', 'P4', 'P3', 'P4', 'P4', 'P3', 'P3', 'P4']) \ No newline at end of file From 4eafd4ca75b0dd3affc78909e0274cd66265bae4 Mon Sep 17 00:00:00 2001 From: blfuentes Date: Tue, 17 Oct 2023 21:12:04 +0200 Subject: [PATCH 0302/2103] trabajando en el reto --- .../f#/blfuentes.fsx" | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" new file mode 100644 index 0000000000..d49cbe4c4b --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" @@ -0,0 +1,73 @@ +open System + + +type Coordenada = { + Fila: int + Columna: int +} + +type TipoHabitacion = PUERTA | VACIO | FANTASMA | DULCE | USUARIO + +type Habitacion = { + Posicion: Coordenada + Tipo: TipoHabitacion +} + +let pintarASCII (hab: TipoHabitacion) = + match hab with + | PUERTA -> "P" + | VACIO -> " " + | FANTASMA -> "F" + | DULCE -> "D" + | USUARIO -> "U" + +let generarFantasma = + let numCheck = Random().Next(0, 9) + printfn "Fantasma: %A" numCheck + numCheck = 5 + +let construirCasa = + let casa = Array2D.zeroCreate 4 4 + let rnd = Random() + for col in 0 .. 3 do + for fila in 0 .. 3 do + casa[col, fila] <- { Posicion = { Fila = fila; Columna = col }; Tipo = VACIO } + let puerta = { Posicion = { Fila = 0; Columna = 0 }; Tipo = PUERTA } + casa[0, 0] <- puerta + let dulce = { Posicion = { Fila = 3; Columna = 2 }; Tipo = DULCE } + casa[3, 2] <- dulce + casa + +let mostrarCasa (casa: Habitacion[,]) = + for col in 0 .. 3 do + for fila in 0 .. 3 do + printf "%A" (pintarASCII casa[col, fila].Tipo) + printfn "" + +let entrarHabitacion (casa: Habitacion[,]) (posicion: Coordenada) = + let habitacion = casa.[posicion.Columna, posicion.Fila] + match habitacion.Tipo with + | PUERTA -> printfn "Entrando a la casa" + | VACIO -> printfn "Habitacion vacia" + | FANTASMA -> printfn "Fantasma" + | DULCE -> printfn "Dulce" + | USUARIO -> printfn "Usuario" + +let rec leerDireccion() = + printfn "Elige una direccion: norte, sur, este, oeste" + let direccion = Console.ReadLine() + match direccion with + | "norte" -> { Fila = -1; Columna = 0 } + | "sur" -> { Fila = 1; Columna = 0 } + | "este" -> { Fila = 0; Columna = 1 } + | "oeste" -> { Fila = 0; Columna = -1 } + | _ -> leerDireccion() + +let rec moverUsuario (casa: Habitacion[,]) (usuario: Coordenada) = + let direccion = leerDireccion() + let nuevoUsuario = { Posicion = { Fila = usuario.Fila + direccion.Fila; Columna = usuario.Columna + direccion.Columna }; Tipo = USUARIO } + let nuevaCasa = Array2D.copy casa + nuevaCasa[usuario.Columna, usuario.Fila] <- nuevoUsuario + +let casa = construirCasa +mostrarCasa casa From 8b8ea3fc516083bac8ffa34bca2914db133fe10a Mon Sep 17 00:00:00 2001 From: e10697 Date: Tue, 17 Oct 2023 15:25:16 -0400 Subject: [PATCH 0303/2103] Reto #13-Java --- .../java/cesarjv.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Retos/Reto #13 - ADIVINA LA PALABRA [Media]/java/cesarjv.java diff --git a/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/java/cesarjv.java b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/java/cesarjv.java new file mode 100644 index 0000000000..fdb2e09308 --- /dev/null +++ b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/java/cesarjv.java @@ -0,0 +1,78 @@ +package org.example; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Hello world! + * + */ +public class cesarjv +{ + public static void main( String[] args ) + { + int randomWordPosition = new Random().nextInt(words.size()); + Set hs=uniqueValuesToReplace(words.get(randomWordPosition)); + List valueUnique=new ArrayList<>(hs); + int attempts=new Random().nextInt(5)+1; + String randomWord=words.get(randomWordPosition); + String wordToAttempt=wordToGuess(randomWord,valueUnique); + Scanner sc = new Scanner(System.in); + boolean wordIsComplete = false; + while (true) { + if (attempts == 0) break; + System.out.println("A continuacion se la indicara una palabra que debe adivinar, tiene "+attempts+" intentos posibles para acertar la palabra completa o alguno de sus caracteres: "); + System.out.println("Palabra a adivinar: "+wordToAttempt); + System.out.println("Ingrese la palabra o caracter correcto: "); + String userInput = sc.nextLine(); + if (!userInput.isEmpty()){ + if (userInput.equals(randomWord)){ + System.out.println("Tu Ganaste!!\nLa palabra es: " + randomWord); + wordIsComplete = true; + break; + } + else if(randomWord.contains(userInput)){ + wordToAttempt=searchMatches(randomWord,wordToAttempt,userInput); + if(wordToAttempt.equals(randomWord)){ + System.out.println("Tu Ganaste!!\nLa palabra es: " + randomWord); + wordIsComplete = true; + break; + } + } + } + attempts--; + } + if (!wordIsComplete) { + System.out.println("Tu Persiste!!\nLa palabra es: " + randomWord); + }; + } + private static final List words= Arrays.asList("mouredev","java","colour","country","developer","devops","docker","javascript","quarkus","spring","hibernate"); + private static Set uniqueValuesToReplace(String word){ + + int sizeLettersToHide= (int) ((word.length())*0.60); + int lettersToHide= new Random().nextInt(sizeLettersToHide -1)+1; + HashSet hs=new HashSet(); + while(hs.size() <=lettersToHide){ + int num= new Random().nextInt((word.length())); + hs.add(num); + } + return hs; + } + private static String wordToGuess(String word,List valueUniqueToRemplace){ + char[] chars = word.toCharArray(); + valueUniqueToRemplace.forEach(i -> chars[i] = '_'); + return String.valueOf(chars); + } + + private static String searchMatches(String originalWord, String hideWord, String letter){ + List originalWordToList=new ArrayList<>(Arrays.asList(originalWord.split(""))); + List hideWordtoList=new ArrayList<>(Arrays.asList(hideWord.split(""))); + for(int x=0;x Date: Tue, 17 Oct 2023 21:59:40 +0200 Subject: [PATCH 0304/2103] Reto #40 - javascript --- .../javascript/alperonoberto.js" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alperonoberto.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alperonoberto.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alperonoberto.js" new file mode 100644 index 0000000000..b5f4128e2f --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/alperonoberto.js" @@ -0,0 +1,17 @@ +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +const readline = require('readline-sync'); + +const table = readline.question('Choose a number to show its multiplication table: '); + +for(let i = 1; i < 11; i++) { + console.log(`${Number(table)} x ${i} = ${Number(table) * i}`); +} \ No newline at end of file From e9ece2ad5aed73449e9dae622d16a9d8e31ca2b1 Mon Sep 17 00:00:00 2001 From: isra Date: Tue, 17 Oct 2023 18:21:03 -0300 Subject: [PATCH 0305/2103] Solucion Reto #41 Python --- .../python/isravm89w.py" | 262 ++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/isravm89w.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/isravm89w.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/isravm89w.py" new file mode 100644 index 0000000000..67d871012f --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/isravm89w.py" @@ -0,0 +1,262 @@ +import random +from enum import Enum + + +class Direction(Enum): + UP = "Arriba" + DOWN = "Abajo" + LEFT = "Izquierda" + RIGHT = "Derecha" + + +class Position: + x: int + y: int + + def __init__(self, x: int, y: int) -> None: + self.x = x + self.y = y + + def __eq__(self, __value: object) -> bool: + return __value.x == self.x and __value.y == self.y + + def __str__(self) -> str: + return f"{self.x, self.y}" + + +class Riddle: + content: str + possible_answers: list[str] + + def __init__(self, content: str, possible_answers: list[str]) -> None: + self.content = content + self.possible_answers = possible_answers + + def __str__(self) -> str: + return " ".join(self.possible_answers) + + +class HalloweenHouse: + riddles: list[Riddle] + current_room: Position + door_position: Position + candies_position: Position + width: int + height: int + + def __init__(self, width: int = 4, height: int = 4) -> None: + + # Initialize house dimentions + self.width = width + self.height = height + # Initialize door and candies postions + self.door_position = self.__generate_door_position() + self.candies_position = self.__generate_candies_position() + # Set curent_room same as the door position + self.current_room = Position(self.door_position.x, self.door_position.y) + + self.riddles = [ + Riddle( + "Tiene famosa memoria, gran tamaño y dura piel y la nariz más grandota, que en el mundo pueda haber", + ["el elefante", "elefante"] + ), + Riddle( + "En rincones y entre ramas mis redes voy construyendo, para que moscas incautas, en ellas vayan cayendo", + ["la araña", "araña"] + ), + Riddle( + "Camino sin tener patas, a cuestas llevo mi casa. Por donde mi cuerpo pasa queda un hilillo de plata.", + ["el caracol", "caracol"] + ), + Riddle( + "Por un caminito, va caminando un bicho. El nombre del bicho ya te lo he dicho.", + ["la vaca", "vaca"] + ), + Riddle( + "Si me tumbas, soy todo. Si me cortas por la cintura, me quedo en nada.", + ["el ocho", "ocho", "8", "el 8"] + ), + Riddle("Tengo orejas largas y una cola diminuta. Si echamos una carrera, gano sin disputa.", + ["el conejo", "conejo"] + ), + Riddle( + "No es un ser vivo, pero tiene cinco dedos ¿Qué es?", + ["un guante", "guante"] + ), + Riddle( + "Si me das de comer viviré más, pero si me das de beber moriré. ¿Qué soy?", + ["el fuego", "fuego"] + ), + Riddle( + "¿Qué es completamente tuyo, pero solo lo usan los demás?", + ["mi nombre", "el nombre", "nombre"] + ), + Riddle( + "Atraviesa ciudades y campos, pero nunca se mueve de lugar ¿Qué es?", + ["el camino", "un camino", "autopista", "carretera"] + ), + Riddle( + "Sin luz no existo, pero si me da la luz me muero. ¿Quién soy?", + ["la sombra", "sombra"] + ), + Riddle( + "Oro parece y plata no es, quien no lo adivine tonto es.", + ["platano", "plátano", "el platano", "el plátano", "banana", "la banana"] + ), + Riddle( + "No tengo cabeza, pero sí cuello.", + ["una botella", "botella", "la botella"] + ), + Riddle( + "Un caballo blanco entró en el Mar Negro. ¿Cómo salió?", + ["mojado"] + ), + Riddle( + "¿Cuál es la mujer que siempre sabe donde está su marido?", + ["la viuda", "viuda"] + ), + Riddle( + "¿Qué se moja al secar?", + ["la toalla", "toalla"] + ), + ] + + def __generate_door_position(self): + return self.__generate_position() + + def __generate_candies_position(self): + position = self.__generate_position() + while position == self.door_position: + position = self.__generate_position() + + return position + + def __generate_position(self) -> Position: + return Position(random.randint(1, self.width), random.randint(1, self.height)) + + def __get_riddle(self) -> Riddle: + return random.choice(self.riddles) + + def __get_available_options(self): + """ + Check for available movements + """ + available_options = [] + if self.current_room.x > 1: + available_options.append(Direction.LEFT) + if self.current_room.x < self.width: + available_options.append(Direction.RIGHT) + if self.current_room.y > 1: + available_options.append(Direction.UP) + if self.current_room.y < self.height: + available_options.append(Direction.DOWN) + + return available_options + + def __is_a_ghost_in_the_room(self) -> bool: + """ + Calculate if there is a ghost in the room (10% of the times) + """ + + # Calculate 10% of the rooms to get numbers of possible rooms to be a ghost + possible_rooms = self.height * self.width + ghost_rooms = round((possible_rooms * 0.1)) + # Generate a list simulating rooms(1 - have a ghost, 0 - don't) + generated_rooms_with_ghosts = [1] * ghost_rooms + [0] * (possible_rooms - ghost_rooms) + # Make list some ramdom + random.shuffle(generated_rooms_with_ghosts) + # Get a random element and return if there is a ghost or not + return bool(random.choice(generated_rooms_with_ghosts)) + + def __process_menu_options(self) -> Direction: + """ + Draw options menu and return a valid selected direction + """ + + # Get available options and print each one with a generated option number + options = self.__get_available_options() + options_len = len(options) + option_and_number = {} + print("Seleciona a que habitación deseas ir:") + for index in range(0, options_len): + option_number = index+1 + # Associate generated option number with the option + option_and_number[option_number] = options[index].value + print(f"{option_number} - {options[index].value}") + + # Add the option to exit at any time + print("0 - Salir del juego") + + try: + direction = int(input()) + if direction == 0: + print("Hasta pronto!!") + exit() + + if direction < 0 or direction > options_len: + print("Seleccione una opción válida") + self.__process_menu_options() + + return option_and_number.get(direction) + except ValueError: + print("Inserte un número válido") + self.__process_menu_options() + + def __process_current_room(self): + + if self.current_room == self.candies_position: + print("FELICIDADES!!! Haz encontrado los dulces!!!!") + exit() + + if self.current_room == self.door_position: + print("Haz llegado a la puerta nuevamente!!!") + return + + riddles_to_pass = 1 + if self.__is_a_ghost_in_the_room(): + print("Te haz encontrado con un fantasma. Deberas responder un acertijo adicional para poder avanzar.") + riddles_to_pass += 1 + + alredy_asked = [] + while riddles_to_pass > 0: + print(f"Acertijos restantes: {riddles_to_pass}") + current_riddle = self.__get_riddle() + if current_riddle in alredy_asked: + continue + + print(current_riddle.content) + alredy_asked.append(current_riddle) + + answer = input() + while answer not in current_riddle.possible_answers: + print("Respuesta incorrecta. Intentalo nuevamente.") + answer = input() + print("Correcto!") + riddles_to_pass -= 1 + + def start_game(self): + print("BIENVENIDOS A LA CASA ENCANTADA") + + while True: + # Get direction to go + direction = self.__process_menu_options() + # Move to the room + self.__move(direction=direction) + # Check current room + self.__process_current_room() + print("-------------------------------------") + + def __move(self, direction: Direction): + if direction == Direction.DOWN.value: + self.current_room.y += 1 + if direction == Direction.UP.value: + self.current_room.y -= 1 + if direction == Direction.RIGHT.value: + self.current_room.x += 1 + if direction == Direction.LEFT.value: + self.current_room.x -= 1 + +if __name__ == "__main__": + + halloween_house = HalloweenHouse() + halloween_house.start_game() From 10d2cb5b76b1d243b6c72d9b2f857971035ccdf7 Mon Sep 17 00:00:00 2001 From: Stivaly Gomez <133545882+Stivaly@users.noreply.github.com> Date: Tue, 17 Oct 2023 21:15:29 -0300 Subject: [PATCH 0306/2103] commit correcto --- .../python/Stivaly.py" | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 "Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/python/Stivaly.py" diff --git "a/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/python/Stivaly.py" "b/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/python/Stivaly.py" new file mode 100644 index 0000000000..be66560115 --- /dev/null +++ "b/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/python/Stivaly.py" @@ -0,0 +1,39 @@ +# Creamos una lista estatica con el abecedario y una lista de tuplas dinamica para poder movilizar los valores y mantener la trazabilidad. +main_cesar = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"] +cesar_roulette = [("A", 0),("B", 1),("C", 2),("D" , 3),("E", 4),("F", 5),("G", 6),("H", 7),("I", 8),("J", 9),("K", 10),("L", 11),("M", 12),("N", 13), + ("O", 14),("P", 15),("Q", 16),("R", 17),("S", 18),("T", 19),("U", 20),("V", 21),("W", 22),("X", 23),("Y", 24),("Z", 25)] + +# Generamos el proceso de encriptación con la opción 1 +while True: + opcion = int(input("Escoge 1 para encriptar o 2 para descencriptar: ")) + if opcion == 1: + # Solicitamos la clave para realizar la encriptación y la frase que vamos a encriptar + key = int(input("Ingresa clave del 0 al 25")) + phrase = input("Ingresa la palabra que deseas cifrar").replace(" ","") + # Movilizamos la posición de los indices de la lista dinamica + cesar_roulette = cesar_roulette[-key:] + cesar_roulette[:-key] + encrypt = "" + # Realizamos el proceso de encriptación + for letter in phrase: + for index, letter_list in enumerate(main_cesar): + if letter == letter_list: + encrypt += cesar_roulette[index][0] + + print(encrypt) + break + elif opcion == 2: + # Solicitamos la clave para realizar la descencriptación y la frase que vamos a encriptar + key = int(input("Ingresa clave del 0 al 25")) + phrase = input("Ingresa la palabra que deseas cifrar").replace(" ","").upper() + # Movilizamos la posición de los indices de la lista dinamicas + cesar_roulette = cesar_roulette[-key:] + cesar_roulette[:-key] + decrypt = "" + # Realizamos el proceso de encriptación + for letter in phrase: + for index, letter_list in enumerate(cesar_roulette): + if letter == letter_list[0]: + decrypt += main_cesar[index] + print(decrypt) + break + else: + print("Opción inválida.") From e69865f1ae3a8fa3d07a4483f212dffc71320094 Mon Sep 17 00:00:00 2001 From: blackriper Date: Tue, 17 Oct 2023 18:28:22 -0600 Subject: [PATCH 0307/2103] Reto#41-go --- .../go/blackriper.go" | 184 ++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/go/blackriper.go" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/go/blackriper.go" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/go/blackriper.go" new file mode 100644 index 0000000000..ea8f594884 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/go/blackriper.go" @@ -0,0 +1,184 @@ +package main + +import ( + "fmt" + "math/rand" + "strings" +) + +// posicion de caramelos y fantasmas +var gostPosition [][]int = [][]int{{2, 2}, {3, 3}} +var candyPosition []int = []int{4, 1} + +// implementar patron de diseño factory para generar enigmas +type FactoryEnigma struct{} + +func (f *FactoryEnigma) NewEnigma() []string { + enigmas := map[int][]string{ + 0: {"¿Lenguaje de programación interpretado cuya filosofía es la legibilidad de su código?", "python"}, + 1: {"¿Lenguaje de programación está diseñado para ser totalmente interoperable con Java?", "kotlin"}, + 2: {"¿Lenguaje de programación concurrente cuyo tipado estàtico es inspirado en c?", "go"}, + 3: {"¿Lenguaje de programación comercializado por primera vez en 1995 por Sun Microsystems?", "java"}, + 4: {"¿Manga escrito e ilustrado por Akira Toriyama?", "dragonball"}, + 5: {"¿Manga escrito e ilustrado por Masashi Kishimoto?", "naruto"}, + 6: {"¿Es una empresa tecnológica multinacional estadounidense con sede en Cupertino?", "apple"}, + 7: {"¿Es empresa de tecnología multinacional estadounidense que se centra en inteligencia artificial?", "google"}, + 8: {"¿Es una empresa tecnológica multinacional estadounidense que produce software de computadora?", "microsoft"}, + } + randomindx := rand.Intn(len(enigmas)) + return enigmas[randomindx] + +} + +// metodo para dibujar la casa y los movimientos del usuario +func DrawHouse(plPosition []int, candy *bool, gosh *bool) string { + var house string + + for c := 0; c <= 4; c++ { + for f := 0; f < 4; f++ { + if f == 0 && c == 0 { + house += "🚪" + c = 1 + } else if plPosition[0] == c && plPosition[1] == f { + house += "👾" + } else { + house += "⬜️" + } + + // toparse con algun item + switch { + case plPosition[0] == candyPosition[0] && plPosition[1] == candyPosition[1]: + *candy = true + case plPosition[0] == gostPosition[0][0] && plPosition[1] == gostPosition[0][1]: + *gosh = true + case plPosition[0] == gostPosition[1][0] && plPosition[1] == gostPosition[1][1]: + *gosh = true + } + + if f == 3 { + house += "\n" + } + } + } + return house +} + +// evaluar movimientos del jugador +func WalkPlayer(position []int) string { + var text string + switch { + case position[0] == 1 && position[1] < 3: + text = "you can move [s]south [e]east" + if position[1] == 2 { + text = "you can move [s]south [e] east [w] west" + } + case position[0] == 1 && position[1] == 3: + text = "you can move [s]south [w] west" + + case position[0] == 2 && position[1] < 3: + if position[1] == 0 { + text = "you can move [s]south [e]east" + } else { + text = "you can move [n]north [s] south [e]east [w] west" + } + case position[0] == 2 && position[1] == 3 || position[0] == 3 && position[1] == 3: + text = "you can move [n]north [s] south [w] west" + + case position[0] == 3 && position[1] < 3: + if position[1] == 0 { + text = "you can move [n]north [s] south [e]east" + } else { + text = "you can move [n]north [s] south [e]east [w] west" + } + case position[0] == 4 && position[1] < 3: + if position[1] == 0 { + text = "you can move [n]north [e]east" + } else { + text = "you can move [n]north [e]east [w] west" + } + case position[0] == 4 && position[1] == 3: + text = "you can move [n]north [w] west" + } + return text +} + +// realizar preguntas al usuario +func AskQuestion() bool { + var ( + correct bool + answer string + ) + factory := &FactoryEnigma{} + question := factory.NewEnigma() + + for correct != true { + fmt.Println(question[0]) + fmt.Scanf("%s", &answer) + answer = strings.ToLower(answer) + if answer == question[1] { + correct = true + } + } + return correct + +} + +// implementar juego +type Hallowen interface { + Playing() +} + +type Pl struct { + Position []int +} + +func (p *Pl) Playing() { + var ( + gosh bool + candy bool + cord string + win bool + ) + + for { + fmt.Println(DrawHouse(p.Position, &candy, &gosh)) + + correct := AskQuestion() + if gosh { + fmt.Println("you find a gosh you can ask other question !!") + correct1 := AskQuestion() + if correct1 { + win = true + gosh = false + } + } + if correct || win { + text := WalkPlayer(p.Position) + fmt.Println(text) + fmt.Scanf("%s", &cord) + cord = strings.ToLower(cord) + switch cord { + case "s": + p.Position[0] += 1 + case "n": + p.Position[0] -= 1 + case "e": + p.Position[1] += 1 + case "w": + p.Position[1] -= 1 + default: + fmt.Println("Inconrrect option !!") + } + } + if candy { + fmt.Println("you found the candies congratulations 🍭 !!") + break + } + + } +} + +func main() { + var hauntedHouse Hallowen = &Pl{Position: []int{1, 0}} + hauntedHouse.Playing() +} From f22f9e1036c02896efa78b4dc6bc659673f2540c Mon Sep 17 00:00:00 2001 From: Ivan Date: Wed, 18 Oct 2023 02:59:32 +0200 Subject: [PATCH 0308/2103] Reto #40 - C# --- .../c#/IveenNet.cs" | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/IveenNet.cs" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/IveenNet.cs" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/IveenNet.cs" new file mode 100644 index 0000000000..2dbfbc3275 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/IveenNet.cs" @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + + +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ +namespace EjercicioMoud +{ + public class Reto40 + { + public static void Main(string[] args) + { + + string? numeroLeido = null; + + int numero; + + bool seguir = true; + + int numMin = 1; + int numMax = 10; + + do + { + + Console.WriteLine($"Escribe un numero entre el {numMin} y el {numMax}, 0 para salir"); + + numeroLeido = Console.ReadLine(); + + if (int.TryParse(numeroLeido, out numero)) + { + + if (numero == 0) seguir = false; + else + { + if (numero >= numMin && numero <= numMax) + { + + for (int i = 1; i < 11; i++) + { + + Console.WriteLine($"{numero} * {i} = {numero * i}"); + + } + + Console.WriteLine("\n"); + + }else Console.WriteLine("Escriba un numero que se encuentre en el rango"); + } + + } + else + { + + Console.WriteLine("Por favor escriba un numero valido"); + + } + + + } while (seguir); + + } + + } +} From cda03ad65b8007859d11503c166525cd824b1a52 Mon Sep 17 00:00:00 2001 From: Cesar <44759176+Mixgyt@users.noreply.github.com> Date: Tue, 17 Oct 2023 19:48:08 -0600 Subject: [PATCH 0309/2103] Upload Mixgyt.cs --- .../c#/Mixgyt.cs" | 256 ++++++++++++++++++ 1 file changed, 256 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/Mixgyt.cs" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/Mixgyt.cs" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/Mixgyt.cs" new file mode 100644 index 0000000000..5633ab84cf --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/Mixgyt.cs" @@ -0,0 +1,256 @@ +using System; + +class Program +{ + private static string[,] mansion = new string[4,4]; + static string room = "⬜️"; + static string exit = "✅"; + static string candy = "🍭"; + static string entry = "🚪"; + static string bonus = "❓"; + static string ghost = "👻"; + static string viewed = "❎"; + + static Dictionary questions = new Dictionary() { + {"¿El agua moja?","si"}, + {"Plata no es ¿dime que es?","platano"}, + {"Si un objeto imparable choca con un objeto inamovible que pasa", "nada"}, + {"Si tengo 3 peces y se ahoga 1 cuantos tengo","3"}, + {"Napoleon tenia un caballo blanco, de que color era el caballo de Napoleon","blanco"}, + {"Siempre paso helada y prima es la hielera","nevera"}, + {"¿Que le paso a la gallina cuando cruzo la calle?","llego al otro lado"}, + {"Sostengo muchas perlas blancas unas arriba unas abajo", "dentadura"} + }; + + static void Main() + { + Random random = new Random(); + + for(int i = 0; i < mansion.GetLength(1); i++) + { + for(int j = 0; j < mansion.GetLength(0); j++) + { + mansion[j,i] = room; + } + } + + void placeObject(string obj, int prob = 0) //la probabilidad la tomo del 1 al 10 (1 siendo el 10% de 10) + { + int x = random.Next(0,mansion.GetLength(0)); + int y = random.Next(0,mansion.GetLength(1)); + int i = random.Next(1,11); + + if(i >= prob) + { + if(mansion[x,y] == room) + { + mansion[x,y] = obj; + } + else + { + placeObject(obj); + } + } + } + + void findObject(string obj, out int x, out int y) + { + x = 0; + y = 0; + for(int j = 0; j < mansion.GetLength(1); j++) + { + for(int i = 0; i < mansion.GetLength(0); i++) + { + if(mansion[i,j] == obj) + { + x = i; + y = j; + } + } + } + } + + Player instance() + { + for(int y = 0; y < mansion.GetLength(1); y++) + { + for(int x = 0; x < mansion.GetLength(0); x++) + { + if(mansion[x,y] == entry) + { + return new Player(x,y); + } + } + } + return new Player(0,0); + } + + placeObject(entry); + placeObject(exit); + placeObject(bonus,10); + placeObject(bonus,10); + Player player = instance(); + + Console.WriteLine("¡¡Boo...!! estas atrapado en una casa encantada \nPara salir necesitas encontrar el salon con dulces"); + while(!candyFound()) + { + print(mansion, player); + string controls = ""; + if(player.y > 0) + { + controls += "W(Arriba) "; + } + if(player.y < mansion.GetLength(1)-1) + { + controls += "S(Abajo) "; + } + if(player.x > 0) + { + controls += "A(Izquierda) "; + } + if(player.x < mansion.GetLength(0)-1) + { + controls += "D(Derecha)"; + } + Console.WriteLine($"Muevete usando {controls} (Q darse por vencido)"); + if(getText(out string text, "wasd")) + { + switch(text) + { + case "w": + if(player.y - 1 >= 0) + --player.y; + else + continue; + break; + case "s": + if(player.y + 1 < mansion.GetLength(1)) + ++player.y; + else + continue; + break; + case "a": + if(player.x - 1 >= 0) + --player.x; + else + continue; + break; + case "d": + if(player.x + 1 < mansion.GetLength(0)) + ++player.x; + else + continue; + break; + } + } + else + { + if(text == "q") + { + Console.WriteLine("Te das por vencido y el programa termina... "); + Environment.Exit(0); + } + Console.WriteLine("No has escrito W, A, S o D\nVuelve a intentarlo"); + continue; + } + + findObject(bonus,out int x, out int y); + if(player.x == x && player.y == y) + { + Console.WriteLine("Encuentras un fantasma 👻 Booo... y te hace una pregunta"); + showQuestion(); + Console.WriteLine("Ahora puedes seguir con la pregunta siguiente Booo... 👻"); + mansion[x,y] = ghost; + } + + if(!candyFound()) + { + Console.WriteLine("Acerta la pregunta para poder cambiar de habitación"); + showQuestion(); + } + } + player.icon = candy; + print(mansion,player); + Console.WriteLine("¡¡Felicidades!! has logrado encontrar los dulces y la salida de la mansion 🥳🥳"); + + void showQuestion() + { + int q = random.Next(0,questions.Count); + KeyValuePair question = questions.ElementAt(q); + Console.WriteLine($"Preguta: {question.Key}"); + Console.Write("Respuesta: "); + string awser = Console.ReadLine().Trim().ToLower(); + Console.WriteLine(""); + + if(awser == question.Value) + { + Console.WriteLine("¡Respuesta correcta!"); + mansion[player.x,player.y] = viewed; + } + else + { + Console.WriteLine("Incorrecto \nLo siento 👻 no te puedes ir sin responder bien una pregunta"); + showQuestion(); + } + } + + bool candyFound() + { + if(mansion[player.x,player.y] == exit) + { + return true; + } + return false; + } + } + + static void print(string[,] ma, Player player) + { + for(int y = 0; y < ma.GetLength(1); y++) + { + for(int x = 0; x < ma.GetLength(0); x++) + { + if(player.icon != null && player.x == x && player.y == y) + { + Console.Write(player.icon); + continue; + } + else if(ma[x,y] != room && ma[x,y] != entry && ma[x,y] != viewed) + { + Console.Write(room); + continue; + } + Console.Write(ma[x,y]); + } + Console.WriteLine(""); + } + } + + static bool getText(out string text, string chars = "") + { + text = Console.ReadLine().Trim().ToLower(); + if(text.Length > 1) + { + Console.WriteLine($"Valor no valido solo se permite 1 caracter de estos '{chars}'"); + } + else if(chars.Intersect(text).Count() > 0) + { + return true; + } + + return false; + } +} + +struct Player +{ + public string icon = "👦"; + public int x; + public int y; + + public Player(int x, int y) + { + this.x = x; + this.y = y; + } +} From 86d977c33219d91bf61bc88301749a7e7cd77d45 Mon Sep 17 00:00:00 2001 From: yoezequiel Date: Tue, 17 Oct 2023 23:30:29 -0300 Subject: [PATCH 0310/2103] Reto #41 - Python --- .../python/yoezequiel.py" | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/yoezequiel.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/yoezequiel.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/yoezequiel.py" new file mode 100644 index 0000000000..9ad9da306f --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/yoezequiel.py" @@ -0,0 +1,121 @@ +import random + +# Enigmas y respuestas +enigmas = { + "¿Qué criatura chupa la sangre en Halloween?": "Vampiro", + "¿Cuál es el disfraz más común en Halloween para los niños?": "Calabaza", + "¿Qué animal negro a menudo se asocia con la brujería en Halloween?": "Gato", + "¿Qué se usa para iluminar las calabazas talladas en Halloween?": "Vela", + "¿Qué dulce se recoge en bolsas en Halloween?": "Caramelo", + "¿Qué sonrisa siniestra se talla en una calabaza de Halloween?": "Grimace", + "¿Qué criatura de la noche se convierte en murciélago en Halloween?": "Drácula", + "¿Qué elemento se usa para crear una atmósfera espeluznante en Halloween?": "Niebla", + "¿Qué actividad consiste en buscar dulces de casa en casa en Halloween?": "Truco", + "¿Qué espíritu errante regresa en Halloween según la leyenda?": "Fantasma" +} + + +# Mapa de la casa +habitaciones = [ + ["🚪", "⬜", "⬜", "⬜"], + ["⬜", "👻", "⬜", "⬜"], + ["⬜", "⬜", "⬜", "👻"], + ["⬜", "⬜", "🍭", "⬜"], +] + +# Posición inicial +posicion_x = 0 +posicion_y = 0 + +# Función para mostrar el mapa y las opciones de movimiento +def mostrar_mapa_y_opciones(): + for i, fila in enumerate(habitaciones): + if i == posicion_x: + fila = [f"👣" if j == + posicion_y else habitacion for j, habitacion in enumerate(fila)] + print(" ".join(fila)) + print() + +# Función para responder preguntas +def responder_pregunta(pregunta, respuesta_correcta): + intentos = 3 + while intentos > 0: + respuesta = input(f"{pregunta}: ").strip().lower() + if respuesta == respuesta_correcta.lower(): + print("¡Correcto!") + return True + else: + intentos -= 1 + print(f"Respuesta incorrecta. Te quedan {intentos} intentos.") + print("Has agotado tus intentos. Debes responder esta pregunta para salir.") + return False + +# Función para manejar la aparición de un fantasma +def manejar_fantasma(): + mostrar_mapa_y_opciones() + print("¡Un fantasma ha aparecido en la habitación!") + + # Preguntas del fantasma + pregunta1 = random.choice(list(enigmas.keys())) + respuesta1 = enigmas[pregunta1] + pregunta2 = random.choice(list(enigmas.keys())) + respuesta2 = enigmas[pregunta2] + + print(f"Pregunta 1: {pregunta1}") + if not responder_pregunta(pregunta1, respuesta1): + return False + + print(f"Pregunta 2: {pregunta2}") + if not responder_pregunta(pregunta2, respuesta2): + return False + + print("¡Escapaste del fantasma! Puedes continuar tu búsqueda.") + return True + + +# Juego +while True: + mostrar_mapa_y_opciones() + enigma = random.choice(list(enigmas.keys())) + print(f"Enigma: {enigma}") + + respuesta = input("Tu respuesta: ").strip().lower() + + if respuesta == enigmas[enigma].lower(): + print("¡Correcto! Puedes moverte en una dirección.") + opciones = [] + if posicion_x > 0: + opciones.append("norte") + if posicion_x < 3: + opciones.append("sur") + if posicion_y > 0: + opciones.append("oeste") + if posicion_y < 3: + opciones.append("este") + print("Opciones de movimiento:", ", ".join(opciones)) + + direccion = input("¿Hacia dónde quieres moverte? ").strip().lower() + + if direccion == "norte" and "norte" in opciones: + posicion_x -= 1 + elif direccion == "sur" and "sur" in opciones: + posicion_x += 1 + elif direccion == "este" and "este" in opciones: + posicion_y += 1 + elif direccion == "oeste" and "oeste" in opciones: + posicion_y -= 1 + else: + print("Movimiento no válido. Intenta de nuevo.") + else: + print("Respuesta incorrecta. Intenta de nuevo.") + + if habitaciones[posicion_x][posicion_y] == "👻": + if not manejar_fantasma(): + print( + "El fantasma no te ha dejado avanzar. Debes responder las preguntas correctamente.") + + if habitaciones[posicion_x][posicion_y] == "🍭": + mostrar_mapa_y_opciones() + print( + "¡Felicidades! Has encontrado la habitación de los dulces. ¡Ganaste el juego!") + break From 65f3e8a2acf106a02c5b3b4d68a19ba2a00bfe5f Mon Sep 17 00:00:00 2001 From: jimsimrodev Date: Tue, 17 Oct 2023 22:18:48 -0500 Subject: [PATCH 0311/2103] Reto #40 - java --- .../java/jimsimrodev.java" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/jimsimrodev.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/jimsimrodev.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/jimsimrodev.java" new file mode 100644 index 0000000000..7a98a21b93 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/jimsimrodev.java" @@ -0,0 +1,27 @@ + +import java.util.Scanner; + +/** + * + * @author jhoan + */ +public class Multiplicar { + + public static void main(String[] args) { + + Scanner leer = new Scanner(System.in); + + System.out.print("Digita El Número Para Mostrar Su Tabla De Multiplicar ->"); + int numero = leer.nextInt(); + + System.out.println("================================="); + System.out.println("| Tabla de multiplicar del: " + numero + "|"); + + for (int i = 1; i <= 10; i++) { + System.out.println(numero + "*" + i + "=" + numero * i); + } + System.out.println("================"); + + } + +} From 7762116ff43c843e2cd7553b391093d8a82dfdc7 Mon Sep 17 00:00:00 2001 From: blfuentes Date: Wed, 18 Oct 2023 09:53:43 +0200 Subject: [PATCH 0312/2103] trabajando en reto #41 --- .../f#/blfuentes.fsx" | 45 ++++++++++++++----- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" index d49cbe4c4b..84646fc6e3 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" @@ -1,6 +1,5 @@ open System - type Coordenada = { Fila: int Columna: int @@ -28,7 +27,6 @@ let generarFantasma = let construirCasa = let casa = Array2D.zeroCreate 4 4 - let rnd = Random() for col in 0 .. 3 do for fila in 0 .. 3 do casa[col, fila] <- { Posicion = { Fila = fila; Columna = col }; Tipo = VACIO } @@ -45,13 +43,31 @@ let mostrarCasa (casa: Habitacion[,]) = printfn "" let entrarHabitacion (casa: Habitacion[,]) (posicion: Coordenada) = - let habitacion = casa.[posicion.Columna, posicion.Fila] - match habitacion.Tipo with - | PUERTA -> printfn "Entrando a la casa" - | VACIO -> printfn "Habitacion vacia" - | FANTASMA -> printfn "Fantasma" - | DULCE -> printfn "Dulce" - | USUARIO -> printfn "Usuario" + let habitacion: Habitacion = casa.[posicion.Columna, posicion.Fila] + let hayFantasma = generarFantasma + if hayFantasma then + casa[posicion.Columna, posicion.Fila] <- { Posicion = posicion; Tipo = FANTASMA } + else + printfn "No hay fantasma" + let hasTerminado = + match habitacion.Tipo with + | PUERTA -> + printfn "Has salido de la casa" + false + | VACIO -> + printfn "No hay nada en esta habitacion. Responde la pregunta para continuar" + casa[posicion.Columna, posicion.Fila] <- { Posicion = posicion; Tipo = USUARIO } + false + | FANTASMA -> + printfn "Has encontrado un fantasma" + false + | DULCE -> + printfn "Has encontrado un dulce" + true + | USUARIO -> + printfn "Ya estas en esta habitacion" + false + hasTerminado let rec leerDireccion() = printfn "Elige una direccion: norte, sur, este, oeste" @@ -64,10 +80,15 @@ let rec leerDireccion() = | _ -> leerDireccion() let rec moverUsuario (casa: Habitacion[,]) (usuario: Coordenada) = - let direccion = leerDireccion() + let direccion = leerDireccion() let nuevoUsuario = { Posicion = { Fila = usuario.Fila + direccion.Fila; Columna = usuario.Columna + direccion.Columna }; Tipo = USUARIO } - let nuevaCasa = Array2D.copy casa - nuevaCasa[usuario.Columna, usuario.Fila] <- nuevoUsuario + let fin = entrarHabitacion casa nuevoUsuario.Posicion + if not fin then + moverUsuario casa nuevoUsuario.Posicion + else + printfn "Has terminado el juego" let casa = construirCasa mostrarCasa casa +moverUsuario casa { Fila = 0; Columna = 0 } + From 6cbef5129a3b8179f83ecd0ba5024b5cd2eb9854 Mon Sep 17 00:00:00 2001 From: Neus Roman Date: Wed, 18 Oct 2023 15:00:11 +0200 Subject: [PATCH 0313/2103] Reto #41 - c# --- .../c#/NeusRomanP.cs" | 392 ++++++++++++++++++ 1 file changed, 392 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/NeusRomanP.cs" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/NeusRomanP.cs" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/NeusRomanP.cs" new file mode 100644 index 0000000000..87a6935cc2 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/NeusRomanP.cs" @@ -0,0 +1,392 @@ +namespace NeusRomanP +{ + public class NeusRomanP + { + + Question q1 = new Question( + "This Pokemon wears his mother's skull over his face:", + new Option("Rampardos", false), + new Option("Cubeone", true), + new Option("Duskull", false), + new Option("Yamask", false) + ); + Question q2 = new Question( + "Who's the Pokemon that is said to steals children away taking them to the world of the dead?", + new Option("Drifloon", true), + new Option("Gengar", false), + new Option("Hypno", false), + new Option("Giratina", false) + ); + + Question q3 = new Question( + "This Pokemon is controlled by the mushroom on his head:", + new Option("Foongus", false), + new Option("Amoonguss", false), + new Option("Hypno", false), + new Option("Parasect", true) + ); + + Question q4 = new Question( + "It chokes its prey while singing because it's so overjoyed with the suffering inflicted on its victims:", + new Option("Jigglypuff", false), + new Option("Gengar", false), + new Option("Gourgeist", true), + new Option("Phantump", false) + ); + + Question q5 = new Question( + "Its true form is so terrifying that anyone unfortunate enough to catch a glimpse has met a mysterious and swift end. It also wears a Pikachu disguise made out of rags in hopes it will be mistaken for the much-beloved Pokemon:", + new Option("Raichu", false), + new Option("Mimikyu", true), + new Option("Emolga", false), + new Option("Phantump", false) + ); + + Question q6 = new Question( + "Is said to be an abandoned toy who came to life, fueled by its hatred after being cast off, to haunt his owner:", + new Option("Claydol", false), + new Option("Baltoy", false), + new Option("Bannette", true), + new Option("Mimikyu", false) + ); + + Question q7 = new Question( + "When it finds humans or Pokemon it likes, it freezes them and takes them to its chilly den, where they become decorations:", + new Option("Misdreavus", false), + new Option("Mouredev", false), + new Option("Regice", false), + new Option("Froslass", true) + ); + + Question q8 = new Question( + "This Pokemon poses as your shadow, then curses you and steals your life:", + new Option("Gengar", true), + new Option("Sableye", false), + new Option("Trevenant", false), + new Option("Mismagius", false) + ); + + Question q9 = new Question( + "His candle purpose id to lure people in, pretending to be a guiding light, only to absorb their life force:", + new Option("Litten", false), + new Option("Gastly", false), + new Option("Giratina", false), + new Option("Litwick", true) + ); + + Question q10 = new Question( + "This Pokemon has mind-controlled its victims and played a role in “history-changing events”:", + new Option("Psyduck", false), + new Option("Malamar", true), + new Option("Rotom", false), + new Option("Mewtwo", false) + ); + + Question q11 = new Question( + "This Pokemon are rotten tree stumps possessed by the spirits of lost children who died in the forest. Their cries sound like “eerie screams” and they can mimic the voice of a child:", + new Option("Phantump", true), + new Option("Sudowoodo", false), + new Option("Treecko", false), + new Option("Gothita", false) + ); + + Question q12 = new Question( + "It pulls its prey down into the sand by controlling the sand itself, and then it sucks out their souls:", + new Option("Palossand", true), + new Option("Duskull", false), + new Option("Chandelure", false), + new Option("Diglett", false) + ); + + Question q13 = new Question( + "Each of them carries a mask that used to be its face when it was human. Sometimes they look at it and cry:", + new Option("Meowscarada", false), + new Option("Yamask", true), + new Option("Marowak", false), + new Option("Duskull", false) + ); + + Question q14 = new Question( + "Its evolved form gathers bones, which they essentially wear as a diaper “to guard their posteriors”, according to multiple Pokedex entries:", + new Option("Cubone", false), + new Option("Vullaby", true), + new Option("Rufflet", false), + new Option("Riolu", false) + ); + + + + Question[] questions = new Question[14]; + + string[,] rooms = { + {"⬜️", "⬜️", "⬜️", "⬜️"}, + {"⬜️", "⬜️", "⬜️", "⬜️"}, + {"⬜️", "⬜️", "⬜️", "⬜️"}, + {"⬜️", "⬜️", "⬜️", "⬜️"} + }; + + bool endGame = false; + + int[] currentPosition = {0, 0}; + int[] startPosition = {0, 0}; + int[] exitPosition = {0, 0}; + + static void Main(string[] args) + { + + var thisClass = new NeusRomanP(); + + thisClass.questions = new Question[] {thisClass.q1, thisClass.q2, thisClass.q3, thisClass.q4, thisClass.q5, thisClass.q6, + thisClass.q7, thisClass.q8, thisClass.q9, thisClass.q10, thisClass.q11, thisClass.q12, + thisClass.q13, thisClass.q14}; + + thisClass.SetStartAndExit(); + thisClass.PrintRooms(); + + while(!thisClass.endGame){ + thisClass.AskForDirection(); + } + Console.WriteLine("Congratulations! You found the candy room and exited the house!"); + } + + private void AskForDirection(){ + Console.WriteLine("Chose the direction you want to move:"); + List directonsList = ShowOptionsToMove(); + + string direction = Console.ReadLine() ?? " "; + + bool correctInput = directonsList.Contains(direction); + + while(!correctInput){ + Console.WriteLine("Enter a valid direction:"); + directonsList = ShowOptionsToMove(); + + direction = Console.ReadLine() ?? " "; + + correctInput = directonsList.Contains(direction); + } + + //If question answered correctly move + if(CheckIfNextRoomIsExit(direction) || CheckIfNextRoomIsStart(direction)){ + MovePosition(direction); + }else{ + if(CheckGhost()){ + Console.WriteLine("👻 BOO! A ghost appeared! You need to answer 2 questions!"); + if(AskQuestion() && AskQuestion()){ + MovePosition(direction); + } + }else{ + if(AskQuestion()){ + MovePosition(direction); + } + } + } + + + PrintRooms(); + } + + private bool CheckIfNextRoomIsExit(string direction){ + if(direction == "L"){ + return exitPosition[1] == (currentPosition[1] - 1) && exitPosition[0] == currentPosition[0]; + } + + if(direction == "R"){ + return exitPosition[1] == (currentPosition[1] + 1) && exitPosition[0] == currentPosition[0]; + } + + if(direction == "U"){ + return exitPosition[1] == currentPosition[1] && exitPosition[0] == (currentPosition[0] - 1); + } + + if(direction == "D"){ + return exitPosition[1] == currentPosition[1] && exitPosition[0] == (currentPosition[0] + 1); + } + + return false; + } + + private bool CheckIfNextRoomIsStart(string direction){ + if(direction == "L"){ + return startPosition[1] == (currentPosition[1] - 1) && startPosition[0] == currentPosition[0]; + } + + if(direction == "R"){ + return startPosition[1] == (currentPosition[1] + 1) && startPosition[0] == currentPosition[0]; + } + + if(direction == "U"){ + return startPosition[1] == currentPosition[1] && startPosition[0] == (currentPosition[0] - 1); + } + + if(direction == "D"){ + return startPosition[1] == currentPosition[1] && startPosition[0] == (currentPosition[0] + 1); + } + + return false; + } + + private List ShowOptionsToMove(){ + + List directionsList = new List(); + + if(currentPosition[1] != 0){ + directionsList.Add("L"); + Console.WriteLine("[L] Left"); + } + if(currentPosition[1] != 3){ + directionsList.Add("R"); + Console.WriteLine("[R] Right"); + } + if(currentPosition[0] != 0){ + directionsList.Add("U"); + Console.WriteLine("[U] Up"); + } + if(currentPosition[0] != 3){ + directionsList.Add("D"); + Console.WriteLine("[D] Down"); + } + + return directionsList; + } + + private void MovePosition(string direction){ + + if(startPosition[0] == currentPosition[0] && startPosition[1] == currentPosition[1]){ + this.rooms[currentPosition[0], currentPosition[1]] = "🚪"; + }else{ + this.rooms[currentPosition[0], currentPosition[1]] = "⬛"; + } + + + if(direction == "L"){ + currentPosition[1]--; + } + if(direction == "R"){ + currentPosition[1]++; + } + if(direction == "U"){ + currentPosition[0]--; + } + if(direction == "D"){ + currentPosition[0]++; + } + + if (currentPosition[0] == exitPosition[0] && currentPosition[1] == exitPosition[1]){ + this.rooms[exitPosition[0], exitPosition[1]] = "🍭"; + endGame = true; + } + + if(!(exitPosition[0] == currentPosition[0] && exitPosition[1] == currentPosition[1])){ + this.rooms[currentPosition[0], currentPosition[1]] = "🧑"; + } + } + + private bool AskQuestion(){ + Random random = new Random(); + int questionNumber = random.Next(0, questions.GetLength(0)); + Question question = questions[questionNumber]; + ShowQuestionOptions(question); + + string response = Console.ReadLine() ?? " "; + while(response != "1" && response != "2" && response != "3" && response != "4"){ + Console.WriteLine("Choose a valid response!"); + ShowQuestionOptions(question); + response = Console.ReadLine() ?? " "; + } + + if(question.options[Int32.Parse(response) - 1].isCorrect){ + Console.WriteLine("Correct!"); + }else{ + Console.WriteLine("You failed!"); + } + + return question.options[Int32.Parse(response) - 1].isCorrect; + } + + public void ShowQuestionOptions(Question question){ + Console.WriteLine(question.title); + Console.WriteLine("[1]" + question.option1.title); + Console.WriteLine("[2]" + question.option2.title); + Console.WriteLine("[3]" + question.option3.title); + Console.WriteLine("[4]" + question.option4.title); + } + + public bool CheckGhost(){ + Random random = new Random(); + int ghostNumber = random.Next(0, 10); + + if(ghostNumber == 0){ + return true; + } + + return false; + } + + private void PrintRooms(){ + for (int i = 0; i < this.rooms.GetLength(0); i++){ + for (int j = 0; j < this.rooms.GetLength(1); j++){ + Console.Write(this.rooms[i, j]); + } + Console.Write("\n"); + } + } + + private void SetStartAndExit(){ + Random random = new Random(); + int startX = random.Next(0, 4); + int startY = random.Next(0, 4); + + startPosition[0] = startX; + startPosition[1] = startY; + + currentPosition[0] = startX; + currentPosition[1] = startY; + + int exitX = startX; + int exitY = startY; + + //Avoid Start and Exit at the same room + while(exitX == startX && exitY == startY){ + exitX = random.Next(0, 4); + exitY = random.Next(0, 4); + } + + exitPosition[0] = exitX; + exitPosition[1] = exitY; + + this.rooms[startX, startY] = "🚪"; + } + } +} + +public class Question{ + public string title; + public Option option1; + public Option option2; + public Option option3; + public Option option4; + + public Option[] options; + + public Question(string questionTitle, Option questionOption1, Option questionOption2, Option questionOption3, Option questionOption4){ + title = questionTitle; + option1 = questionOption1; + option2 = questionOption2; + option3 = questionOption3; + option4 = questionOption4; + + options = new Option[]{option1, option2, option3, option4}; + } + +} + +public class Option{ + public string title; + public bool isCorrect; + + public Option(string optionTitle, bool isCorrectOption){ + title = optionTitle; + isCorrect = isCorrectOption; + } +} From f0184f1bf4939dd22287b025dff11d4b003ad163 Mon Sep 17 00:00:00 2001 From: DHiebl <108873454+sirnas1983@users.noreply.github.com> Date: Wed, 18 Oct 2023 11:17:04 -0300 Subject: [PATCH 0314/2103] Reto #41 - python --- .../python/sirnas1983.py" | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/sirnas1983.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/sirnas1983.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/sirnas1983.py" new file mode 100644 index 0000000000..80e38e6d99 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/sirnas1983.py" @@ -0,0 +1,133 @@ +import random +import time + +preguntas = {1 : ("¿Qué serie de ciencia ficción de Netflix está ambientada en la ciudad ficticia de Hawkins?", "Stranger Things"), + 2 : ("Mädchen Amick interpreta a Shelly Briggs en el clásico de culto de David Lynch Twin Peaks, pero ¿qué espeluznante drama de Netflix protagoniza actualmente?","Riverdale"), + 3 : ("En el episodio de Friends 'El de la fiesta de Halloween', ¿qué disfraces memorables, aunque no especialmente espeluznantes, llevaban Ross y Chandler?","Ross era un Spud-nik y Chandler era un conejo de felpa rosa"), + 4 : ("El 31 de octubre de 1992, la BBC petrificó al Reino Unido con Ghostwatch, un drama guionizado que engañaba a los espectadores haciéndoles creer que era una transmisión en directo desde una casa encantada. ¿Qué veterano locutor, periodista y autor inglés, así como personalidad de la television lo presentó","Michael Parkinson"), + 5 : ("Ratched, la inquietante serie de Ryan Murphy en Netflix, protagonizada por Sarah Paulson, ¿en qué novela clásica de 1962 está inspirada?","Alguien volo sobre el nido del cuco"), + 6 : ("¿En qué serie de novelas está basada la serie de terror de Netflix La calle del terror?","RL Stine"), + 7 : ("¿Cómo se llama la actriz que interpretará a Morticia Addams en la versión de La familia Addams de Tim Burton para Netflix?","Catherine Zeta-Jones"), + 8 : ("¿Qué película de terror clásica es la precuela de Motel Bates, protagonizada por Freddie Highmore?","Psicosis"), + 9 : ("¿Cómo se llama la joven que desaparece en Twin Peaks?","Laura Palmer"), + 10 : ("¿Cuál es el apellido de Sabrina, la bruja adolescente?","Spellman"), + 11 : ("En El retorno de las brujas, ¿cómo se llaman las tres hermanas Sanderson y las actrices que las interpretan?", "Bette Midler como Winifred, Sarah Jessica Parker como Sarah y Kathy Najimy como Mary"), + 12 : ("¿Qué otra película de terror de los 90 protagonizaron Neve Campbell y Skeet Ulrich, a las que vimos en Scream?","Jovenes y brujas"), + 13 : ("¿En qué película de terror de 1982 Carol Anne empezó a hablar con el televisor?","Poltergeist"), + 14 : ("En la adaptación cinematográfica de La maldición de las brujas de Roald Dahl, ¿en qué quiere convertir a los niños la Gran Bruja Mayor interpretada por Anjelica Huston?","Ratones"), + 15 : ("¿Qué actor interpretó el papel de Hannibal Lecter en la pantalla antes de que Anthony Hopkins lo hiciera suyo?","Brian Cox"), + 16 : ("¿Qué actriz retoma su icónico papel -que se hizo famoso hace más de dos décadas- en Halloween Kills?","Jamie Lee Curtis"), + 17 : ("¿Cómo se llama el espeluznante hotel de El resplandor de Stanley Kubrick?","Hotel Overlook"), + 18 : ("Lo que hacemos en las sombras se basa en las vidas ordinarias y, a veces, banales de...","Los vampiros"), + 19 : ("¿Cómo se llama el terrorífico payaso que aparece en It, de Stephen King, papel que recientemente ha hecho Bill Skarsgard en la nueva película de 2017?","Pennywise"), + 20 : ("En Harry Potter y la piedra filosofal, ¿puedes nombrar a la criatura que irrumpe en Hogwarts la noche de Halloween?","Trol de montaña") + } + +def generar_tablero(): + tablero = [[0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,0]] + + pos1 = random.randrange(0,3) + time.sleep(0.005) + pos2 = random.randrange(0,3) + time.sleep(0.005) + pos3 = random.randrange(0,3) + time.sleep(0.005) + pos4 = random.randrange(0,3) + time.sleep(0.005) + pos5 = random.randrange(0,3) + time.sleep(0.005) + pos6 = random.randrange(0,3) + + tablero[pos1][pos4] = 1 + tablero[pos2][pos5] = 1 + tablero[pos3][pos6] = 2 + + return tablero + +def preguntar(): + pregunta = random.randrange(1,20) + print(preguntas[pregunta][0]) + respuesta = input("Ingrese su respuesta: ") + if respuesta.lower() == preguntas[pregunta][1].lower(): + print("¡¡Correcto!!") + return True + else: + print("¡¡...Incorrecto...!!") + return False + +def mover(posicion): + movimientos_permitidos = [] + if posicion[0] < 3: + movimientos_permitidos.append(8) + if posicion[0] > 0: + movimientos_permitidos.append(2) + if posicion[1] < 3: + movimientos_permitidos.append(6) + if posicion[1] > 0: + movimientos_permitidos.append(4) + + movimientos_permitidos.sort() + print("REFERENCIA -- 2: abajo, 4: izquierda, 8: arriba, 6: derecha") + mov = 0 + while mov not in movimientos_permitidos: + mov = int(input("Seleccione un movimiento.\nLos movimientos permitidos son " + movimientos_permitidos.__str__() + ": ")) + + if mov == 2: + posicion[0] -= 1 + elif mov == 8: + posicion[0] += 1 + elif mov == 4: + posicion[1] -= 1 + elif mov == 6: + posicion[1] += 1 + return posicion + +def posicion_inicial(casillero): + return [casillero//4, casillero - casillero//4 * 4] + +def marcar_posicion(tablero, pos): + tablero[pos[0]][pos[1]] = "X" + for row in reversed(tablero): + print(row) + return tablero + +def juego(): + titulo = "Bienvenido al juego de la casa embrujada" + jugando = True + + print("-"*len(titulo)) + print(titulo) + print("-"*len(titulo)) + print("Reglas: Debes avanzar hasta encontrar la casa de los dulces. Para poder avanzar debes\ncontestar la pregunta correctamente.") + print("-"*len(titulo)) + + casillero_entrada = -1 + + while casillero_entrada not in range(0,16): + casillero_entrada = int(input("Ingrese un numero del 1 al 16.\nEste va a ser tu punto de partida, cuidado con los fantasmas: ")) - 1 + + pos = posicion_inicial(casillero_entrada) + + tablero = generar_tablero() + tablero_visible = [[0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,0]] + tablero_visible = marcar_posicion(tablero_visible, pos) + + while jugando: + if tablero[pos[0]][pos[1]] == 1: + print("¡Has caido en una celda fantsma! ¡Debes responder correctamente 2 veces para avanzar!") + if preguntar() and preguntar(): + pos = mover(pos) + elif tablero[pos[0]][pos[1]] == 2: + print("¡Has caido en la casa de los dulces! Contesta bien para ganar el juego.... ") + if preguntar(): + jugando = False + print("¡¡Felicidades, has ganado!!") + break + else: + print("Responde correctamente para avanzar...") + if preguntar(): + pos = mover(pos) + tablero_visible = marcar_posicion(tablero_visible, pos) + +if __name__ == "__main__": + juego() From 3ced46b220894476600255efad5c69b8f2da27f0 Mon Sep 17 00:00:00 2001 From: patriciotrujilllo Date: Wed, 18 Oct 2023 11:24:24 -0300 Subject: [PATCH 0315/2103] Reto #31 resolve --- .../javascript/patriciotrujillo.js" | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 "Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/javascript/patriciotrujillo.js" diff --git "a/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/javascript/patriciotrujillo.js" "b/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/javascript/patriciotrujillo.js" new file mode 100644 index 0000000000..e57b692528 --- /dev/null +++ "b/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/javascript/patriciotrujillo.js" @@ -0,0 +1,40 @@ +/* + * Crea una función que sea capaz de leer el número representado por el ábaco. + * - El ábaco se representa por un array con 7 elementos. + * - Cada elemento tendrá 9 "O" (aunque habitualmente tiene 10 para realizar operaciones) + * para las cuentas y una secuencia de "---" para el alambre. + * - El primer elemento del array representa los millones, y el último las unidades. + * - El número en cada elemento se representa por las cuentas que están a la izquierda del alambre. + * + * Ejemplo de array y resultado: + * ["O---OOOOOOOO", + * "OOO---OOOOOO", + * "---OOOOOOOOO", + * "OO---OOOOOOO", + * "OOOOOOO---OO", + * "OOOOOOOOO---", + * "---OOOOOOOOO"] + * + * Resultado: 1.302.790 + */ + +const abaco = (abacoArray) =>{ + + let totalNumber = 0 + let longitud = abacoArray.length - 1 + abacoArray.forEach((line)=>{ + const numero = line.split('---')[0] + totalNumber = (numero.length)*10**longitud + totalNumber + longitud-- + }) + return totalNumber +} + +const valor = abaco([ "O---OOOOOOOO", + "OOO---OOOOOO", + "---OOOOOOOOO", + "OO---OOOOOOO", + "OOOOOOO---OO", + "OOOOOOOOO---", + "---OOOOOOOOO"]) +console.log(valor) \ No newline at end of file From 88544e596cd574bea3c1242ded422c50be7ba14a Mon Sep 17 00:00:00 2001 From: jcdm60 Date: Wed, 18 Oct 2023 14:07:09 -0400 Subject: [PATCH 0316/2103] Reto #41 - Python --- .../python/jcdm60.py" | 199 ++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jcdm60.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jcdm60.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jcdm60.py" new file mode 100644 index 0000000000..a9becb3728 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jcdm60.py" @@ -0,0 +1,199 @@ +# Reto #41: La casa encantada +#### Dificultad: Difícil | Publicación: 16/10/23 | Corrección: 23/10/23 + +## Enunciado + +# +# Este es un reto especial por Halloween. +# Te encuentras explorando una mansión abandonada llena de habitaciones. +# En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. +# Tu misión es encontrar la habitación de los dulces. +# +# Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. +# (Tienes total libertad para ser creativo con los textos) +# +# - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 +# que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. +# (16 habitaciones, siendo una de entrada y otra donde están los dulces) +# Esta podría ser una representación: +# 🚪⬜️⬜️⬜️ +# ⬜️👻⬜️⬜️ +# ⬜️⬜️⬜️👻 +# ⬜️⬜️🍭⬜️ +# - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. +# Si no lo aciertas no podrás desplazarte. +# - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. +# (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) +# - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. +# - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y +# tengas que responder dos preguntas para salir de ella. +# + +import random + +class Mansion: + def __init__(self): + self.dimensiones = 4 + self.mansión = [[Habitacion() for _ in range(self.dimensiones)] for _ in range(self.dimensiones)] + self.colocar_puerta() + self.colocar_dulces() + self.colocar_fantasmas() + self.revelar_puerta_inicial() + + def __str__(self): + mansión_str = "" + for fila in self.mansión: + for habitacion in fila: + mansión_str += str(habitacion) + mansión_str += "\n" + return mansión_str + + def colocar_puerta(self): + borde = random.choice(['norte', 'sur', 'este', 'oeste']) + if borde == 'norte': + x = random.randint(0, self.dimensiones - 1) + elif borde == 'sur': + x = random.randint(0, self.dimensiones - 1) + elif borde == 'este': + y = random.randint(0, self.dimensiones - 1) + x = self.dimensiones - 1 + else: + y = random.randint(0, self.dimensiones - 1) + x = 0 + + self.mansión[y][x].contiene_puerta = True + + def colocar_dulces(self): + x = random.randint(0, self.dimensiones - 1) + y = random.randint(0, self.dimensiones - 1) + self.mansión[y][x].contiene_dulces = True + + def colocar_fantasmas(self): + for _ in range(self.dimensiones): + for _ in range(self.dimensiones): + if random.random() < 0.1: + x = random.randint(0, self.dimensiones - 1) + y = random.randint(0, self.dimensiones - 1) + self.mansión[y][x].contiene_fantasma = True + + def revelar_puerta_inicial(self): + for y in range(self.dimensiones): + for x in range(self.dimensiones): + if self.mansión[y][x].contiene_puerta: + self.mansión[y][x].oculta = False + +class Habitacion: + def __init__(self): + self.contiene_puerta = False + self.contiene_dulces = False + self.contiene_fantasma = False + self.oculta = True + self.enigma_resuelto = False + + def __str__(self): + if not self.oculta: + if self.contiene_puerta: + return "🚪 " + elif self.contiene_dulces: + return "🍭 " + elif self.contiene_fantasma: + return "👻 " + else: + return "❓ " + else: + return "⬜ " + +class Jugador: + def __init__(self, mansion): + self.mansion = mansion + self.x, self.y = self.encontrar_posicion_inicial() + self.enigmas_resueltos = 0 + + def encontrar_posicion_inicial(self): + for y in range(self.mansion.dimensiones): + for x in range(self.mansion.dimensiones): + if self.mansion.mansión[y][x].contiene_puerta: + return x, y + + def mover(self): + direccion = input("¿Hacia dónde quieres moverte? (norte/sur/este/oeste): ").lower() + x, y = self.x, self.y + movimiento_valido = True + + if direccion == "norte": + if y > 0: + y -= 1 + else: + movimiento_valido = False + elif direccion == "sur": + if y < self.mansion.dimensiones - 1: + y += 1 + else: + movimiento_valido = False + elif direccion == "este": + if x < self.mansion.dimensiones - 1: + x += 1 + else: + movimiento_valido = False + elif direccion == "oeste": + if x > 0: + x -= 1 + else: + movimiento_valido = False + else: + movimiento_valido = False + + if not movimiento_valido: + print(f"No puedes moverte al {direccion}, estás en el borde {direccion}.") + return + + habitacion_actual = self.mansion.mansión[y][x] + habitacion_actual.oculta = False + self.x, self.y = x, y + + if habitacion_actual.contiene_fantasma and not habitacion_actual.enigma_resuelto: + print("¡Un 👻 te asusta!") + self.resolver_enigmas(2) + elif habitacion_actual.contiene_dulces and not habitacion_actual.enigma_resuelto: + print("¡Encontraste 🍭! ¡Felicidades, has ganado!") + habitacion_actual.enigma_resuelto = True + self.enigmas_resueltos += 1 + elif not habitacion_actual.enigma_resuelto: + self.resolver_enigmas(1) + + def resolver_enigmas(self, cantidad): + enigmas = { + "Enigma 1: Capital de Francia": "paris", + "Enigma 2: Es redondo, se hincha y si lo pinchas explota, ¿qué es?": "un globo", + "Enigma 3: Si me nombras, dejas de existir. ¿Qué soy?": "el silencio", + "Enigma 4: Soy alto cuando joven y bajo cuando viejo, ¿qué soy?": "una vela" + } + + for _ in range(cantidad): + enigma = random.choice(list(enigmas.keys())) + print(enigma) + respuesta = input("¿Cuál es la respuesta? ").lower() + if respuesta in enigmas.values(): + print("¡Resolviste el enigma! Puedes seguir adelante.") + else: + print("Respuesta incorrecta. No puedes avanzar.") + + def esta_fuera(self): + if self.x < 0 or self.x >= self.mansion.dimensiones or self.y < 0 or self.y >= self.mansion.dimensiones: + return True + return False + +if __name__ == "__main__": + mansion = Mansion() + jugador = Jugador(mansion) + + print("Bienvenido a la mansión. Debes encontrar el 🍭 para ganar el juego.") + + while not jugador.esta_fuera() and jugador.enigmas_resueltos < 2: + print(mansion) + jugador.mover() + + if jugador.enigmas_resueltos >= 2: + print("¡Has ganado al resolver todos los enigmas! ¡Felicidades!") + + print("¡Gracias por jugar!") From 058e74da06fe07bacc66865b71d4097b7fcc5de1 Mon Sep 17 00:00:00 2001 From: blfuentes Date: Wed, 18 Oct 2023 21:53:27 +0200 Subject: [PATCH 0317/2103] trabajando en el reto #41 --- .../f#/blfuentes.fsx" | 53 ++++++++++++------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" index 84646fc6e3..a2de815ddf 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" @@ -12,13 +12,17 @@ type Habitacion = { Tipo: TipoHabitacion } +Console.OutputEncoding <- System.Text.Encoding.UTF8 + let pintarASCII (hab: TipoHabitacion) = + let characterWidth = 2 // Adjust the width as needed + match hab with - | PUERTA -> "P" - | VACIO -> " " - | FANTASMA -> "F" - | DULCE -> "D" - | USUARIO -> "U" + | PUERTA -> sprintf "%-*s" characterWidth "🚪" + | VACIO -> sprintf "%-*s" characterWidth "▒▒" + | FANTASMA -> sprintf "%-*s" characterWidth "👻" + | DULCE -> sprintf "%-*s" characterWidth "🍬" + | USUARIO -> sprintf "%-*s" characterWidth "😀" let generarFantasma = let numCheck = Random().Next(0, 9) @@ -39,16 +43,16 @@ let construirCasa = let mostrarCasa (casa: Habitacion[,]) = for col in 0 .. 3 do for fila in 0 .. 3 do - printf "%A" (pintarASCII casa[col, fila].Tipo) + printf "%s" (pintarASCII casa[col, fila].Tipo) printfn "" let entrarHabitacion (casa: Habitacion[,]) (posicion: Coordenada) = - let habitacion: Habitacion = casa.[posicion.Columna, posicion.Fila] let hayFantasma = generarFantasma if hayFantasma then casa[posicion.Columna, posicion.Fila] <- { Posicion = posicion; Tipo = FANTASMA } else printfn "No hay fantasma" + let habitacion: Habitacion = casa.[posicion.Columna, posicion.Fila] let hasTerminado = match habitacion.Tipo with | PUERTA -> @@ -69,26 +73,37 @@ let entrarHabitacion (casa: Habitacion[,]) (posicion: Coordenada) = false hasTerminado -let rec leerDireccion() = +let rec leerDireccion(usuario: Coordenada) = printfn "Elige una direccion: norte, sur, este, oeste" let direccion = Console.ReadLine() - match direccion with - | "norte" -> { Fila = -1; Columna = 0 } - | "sur" -> { Fila = 1; Columna = 0 } - | "este" -> { Fila = 0; Columna = 1 } - | "oeste" -> { Fila = 0; Columna = -1 } - | _ -> leerDireccion() + let coordinate = + match direccion with + | "norte" -> { Fila = 0; Columna = -1 } + | "sur" -> { Fila = 0; Columna = 1 } + | "este" -> { Fila = 1; Columna =0 } + | "oeste" -> { Fila = -1; Columna = 0 } + | _ -> leerDireccion(usuario) + let nuevaPosicion = { Fila = usuario.Fila + coordinate.Fila; Columna = usuario.Columna + coordinate.Columna } + if nuevaPosicion.Fila < 0 || nuevaPosicion.Fila > 3 || nuevaPosicion.Columna < 0 || nuevaPosicion.Columna > 3 then + printfn "No puedes salir de la casa" + leerDireccion(usuario) + else + coordinate + -let rec moverUsuario (casa: Habitacion[,]) (usuario: Coordenada) = - let direccion = leerDireccion() +let rec moverUsuario (casaMemo: Habitacion[,]) (casa: Habitacion[,]) (usuario: Coordenada) = + let direccion = leerDireccion(usuario) let nuevoUsuario = { Posicion = { Fila = usuario.Fila + direccion.Fila; Columna = usuario.Columna + direccion.Columna }; Tipo = USUARIO } + let memoEstado: Habitacion = casaMemo.[usuario.Columna, usuario.Fila] let fin = entrarHabitacion casa nuevoUsuario.Posicion + casa[usuario.Columna, usuario.Fila] <- memoEstado if not fin then - moverUsuario casa nuevoUsuario.Posicion + mostrarCasa casa + moverUsuario casaMemo casa nuevoUsuario.Posicion else printfn "Has terminado el juego" let casa = construirCasa +let casaMemo = Array2D.copy casa mostrarCasa casa -moverUsuario casa { Fila = 0; Columna = 0 } - +moverUsuario casaMemo casa { Fila = 0; Columna = 0 } \ No newline at end of file From 04488314b55ed1346e0dc0f2e86213c77d803ec7 Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Wed, 18 Oct 2023 16:18:07 -0500 Subject: [PATCH 0318/2103] Reto #16 - Python --- .../python/sublian.py | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Retos/Reto #16 - LA ESCALERA [Media]/python/sublian.py diff --git a/Retos/Reto #16 - LA ESCALERA [Media]/python/sublian.py b/Retos/Reto #16 - LA ESCALERA [Media]/python/sublian.py new file mode 100644 index 0000000000..b4c3527cf2 --- /dev/null +++ b/Retos/Reto #16 - LA ESCALERA [Media]/python/sublian.py @@ -0,0 +1,40 @@ +# Reto #16: La escalera +#### Dificultad: Media | Publicación: 17/04/23 | Corrección: 24/04/23 | Mi Solucion: 18/10/23 +## Enunciado +""" + * Crea una función que dibuje una escalera según su número de escalones. + * - Si el número es positivo, será ascendente de izquiera a derecha. + * - Si el número es negativo, será descendente de izquiera a derecha. + * - Si el número es cero, se dibujarán dos guiones bajos (__). + * + * Ejemplo: 4 + * _ + * _| + * _| + * _| + * _| + * + */ +""" + +def escaleras(escalones: int): + if escalones>0: + for escalon in range(escalones +1): + #el valor es un doble espacio en blanco porque sino queda superpuesta visualmente + espacios = " "*(escalones - escalon) + peldaño = "_" if escalon==0 else "_|" + print(f"{espacios}{peldaño}") + + elif escalones<0: + #como escalones es una variable negativa lo transformamos a un valor positivo con abs() + for escalon in range(abs(escalones) +1): + espacios = " "*(escalon*2 - 1) + peldaño = "_" if escalon==0 else "|_" + print(f"{espacios}{peldaño}") + else: + print("__") + +if __name__ == "__main__": + escaleras(0) + escaleras(5) + escaleras(-5) \ No newline at end of file From 420208373421f01e600a1a639c7f2f1bff11f433 Mon Sep 17 00:00:00 2001 From: Marco Torres Date: Wed, 18 Oct 2023 17:53:34 -0700 Subject: [PATCH 0319/2103] Reto #33 - Python --- .../python/marcoatrs.py" | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 "Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/marcoatrs.py" diff --git "a/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/marcoatrs.py" "b/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/marcoatrs.py" new file mode 100644 index 0000000000..669f5eb96d --- /dev/null +++ "b/Retos/Reto #33 - TETRIS [Dif\303\255cil]/python/marcoatrs.py" @@ -0,0 +1,80 @@ +import os +import signal +import sys + +import keyboard + + +class Piece: + def __init__(self): + self.piece = [["🔳", "🔲", "🔲"], + ["🔳", "🔳", "🔳"]] + self.x = 0 + self.y = 0 + +def play_tetris(): + + piece = Piece() + board = [["🔲","🔲","🔲","🔲","🔲","🔲","🔲","🔲", "🔲","🔲"] for _ in range(10)] + + keyboard.add_hotkey("down", lambda: move_piece(board, piece, y_move=1)) + keyboard.add_hotkey("left", lambda: move_piece(board, piece, x_move=-1)) + keyboard.add_hotkey("right", lambda: move_piece(board, piece, x_move=1)) + keyboard.add_hotkey("up" , lambda: rotate_piece(board, piece)) + + print_boad(draw_piece_in_board(board, piece)) + + while True: + board = [["🔲","🔲","🔲","🔲","🔲","🔲","🔲","🔲", "🔲","🔲"] for _ in range(10)] + pass + + +def move_piece(board: list, piece: Piece, x_move: int = 0, y_move: int = 0): + move_piece_x(board, piece, x_move=x_move) + move_piece_y(board, piece, y_move=y_move) + print_boad(draw_piece_in_board(board, piece)) + board = [["🔲","🔲","🔲","🔲","🔲","🔲","🔲","🔲", "🔲","🔲"] for _ in range(10)] + + +def draw_piece_in_board(board: list, piece: Piece) -> list: + board_copy = board + for y, row in enumerate(piece.piece): + for x, sqr in enumerate(row): + board_copy[y + piece.y][x + piece.x] = sqr + return board_copy + + +def move_piece_y(board: list, piece: Piece, y_move: int = 0): + board_size = len(board) + piece_size = len(piece.piece) + piece.y = min(board_size - piece_size, piece.y + y_move) + + +def move_piece_x(board: list, piece: Piece, x_move: int = 0): + if x_move < 0: + piece.x = max(0, piece.x - 1) + return + board_size = len(board[0]) + piece_size = len(piece.piece[0]) + piece.x = min(board_size - piece_size, piece.x + x_move) + + +def print_boad(board: list): + os.system("cls") + for row in board: + print(*row) + + +def rotate_piece(board: list, piece: Piece) -> list: + rot_piece = [] + for y in range(len(piece.piece[0])): + rot_piece.append([]) + for x in range(len(piece.piece)): + rot_piece[y].append(piece.piece[len(piece.piece) - x - 1][y]) + piece.piece = rot_piece + move_piece(board, piece) + + +if __name__ == "__main__": + signal.signal(signal.SIGINT, lambda s, f: sys.exit(0)) + play_tetris() From 21fd935092c9e5fadd218056b576b0eb2f0c1fb1 Mon Sep 17 00:00:00 2001 From: raul-progr Date: Wed, 18 Oct 2023 19:29:36 -0700 Subject: [PATCH 0320/2103] cambio de nombre en archivo --- .../python/raul-progr.py" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/RaulBatR40.py" => "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/raul-progr.py" (100%) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/RaulBatR40.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/raul-progr.py" similarity index 100% rename from "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/RaulBatR40.py" rename to "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/raul-progr.py" From 207faf4ae1cfc48790549b341dce258a96da49a4 Mon Sep 17 00:00:00 2001 From: raul-progr Date: Wed, 18 Oct 2023 20:36:51 -0700 Subject: [PATCH 0321/2103] aaaa --- .../python/raul-progr.py" | 1 - 1 file changed, 1 deletion(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/raul-progr.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/raul-progr.py" index ad436dc559..33f1e86461 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/raul-progr.py" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/raul-progr.py" @@ -1,5 +1,4 @@ - entero = int(input("Introduce un numero del 1 al 11 para hacer una tabla de multiplicar: ")) if entero <= 11: for i in range(1 , 11): From f279abf478691d1471263f30461953189cc1982f Mon Sep 17 00:00:00 2001 From: raul-progr Date: Wed, 18 Oct 2023 20:38:26 -0700 Subject: [PATCH 0322/2103] modificando nombre del archivo segun requerimientos --- .../python/raul-progr.py" | 1 + 1 file changed, 1 insertion(+) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/raul-progr.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/raul-progr.py" index 33f1e86461..ad436dc559 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/raul-progr.py" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/raul-progr.py" @@ -1,4 +1,5 @@ + entero = int(input("Introduce un numero del 1 al 11 para hacer una tabla de multiplicar: ")) if entero <= 11: for i in range(1 , 11): From dd1e7e8e4b65261ac9061fbe27df3c0648563552 Mon Sep 17 00:00:00 2001 From: raul-progr Date: Wed, 18 Oct 2023 21:28:01 -0700 Subject: [PATCH 0323/2103] reto 01 escrito en python --- .../python/raul-progr.py" | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/raul-progr.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/raul-progr.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/raul-progr.py" new file mode 100644 index 0000000000..ea00e93e94 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/raul-progr.py" @@ -0,0 +1,13 @@ +#codigo fizzbuzz + +for i in range(1, 100): + if (i % 3 == 0 and i % 5 == 0): + print("fizzbuzz") + else: + if (i % 3 == 0): + print("fizz") + else: + if (i % 5 == 0): + print("buzz") + else: + print(i) \ No newline at end of file From 5641fa73df2167191e3e01474b5612a0b0ed0e9f Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 19 Oct 2023 07:48:56 +0200 Subject: [PATCH 0324/2103] Reto #41 - Kotlin --- .../kotlin/pisanowp.kt" | 233 ++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/kotlin/pisanowp.kt" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/kotlin/pisanowp.kt" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/kotlin/pisanowp.kt" new file mode 100644 index 0000000000..b89172b3a8 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/kotlin/pisanowp.kt" @@ -0,0 +1,233 @@ +import kotlin.random.Random + +fun main() { + + /* + * Reto #41 16/10/2023 LA CASA ENCANTADA + * + * Este es un reto especial por Halloween. + * Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces. + * + * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. + * (Tienes total libertad para ser creativo con los textos) + * + * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 + * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. + * (16 habitaciones, siendo una de entrada y otra donde están los dulces) + * Esta podría ser una representación: + * 🚪⬜️⬜️⬜️ + * ⬜️👻⬜️⬜️ + * ⬜️⬜️⬜️👻 + * ⬜️⬜️🍭⬜️ + * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. + * Si no lo aciertas no podrás desplazarte. + * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. + * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) + * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. + * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y + * tengas que responder dos preguntas para salir de ella. + */ + + val casa = CasaEncantada() + println() + println() + casa.pintarCasa() + +} + +class CasaEncantada() { + private val filas = 4 + private val columnas = 4 + + val puerta = "🚪" + val sala = "⬜" + val fantasma = "👻" + val caramelo = "🍭" + + val casa = Array(filas) { Array(columnas) { sala } } + + var jugadorFila = 0 + var jugadorColumna = 0 + + val enigmas = listOf( + Pair("¿Cuánto suman 1+2?", "3"), + Pair("¿De qué color es el caballo blanco de Santiago?", "blanco"), + Pair("Tengo agujas, pero no coso. Tengo números, pero no soy un teléfono. ¿Qué soy?", "reloj"), + Pair("Si me nombras, desaparezco. ¿Qué soy?", "silencio"), + Pair("Tengo dientes, pero no puedo masticar. ¿Qué soy?", "peine") + ) + + + init { + crearCasa() + pintarCasaJugador() + loopGame() + + } + + private fun crearCasa() { + // Colocamos la puerta + var dummyFila = 0 + var dummyColumna = 0 + + dummyFila = Random.nextInt(1, filas) + + dummyColumna = if ((dummyFila == 1) || (dummyFila == filas)) { + Random.nextInt(1, columnas) - 1 + } else { + listOf(1, columnas)[Random.nextInt(listOf(1, columnas).size)] - 1 + + } + casa[dummyFila][dummyColumna] = puerta + jugadorFila = dummyFila + jugadorColumna = dummyColumna + + // Colocamos el caramelo, para ello buscamos una sala libre + do { + dummyFila = Random.nextInt(1, filas) - 1 + dummyColumna = Random.nextInt(1, columnas) - 1 + if (casa[dummyFila][dummyColumna] == sala) { + casa[dummyFila][dummyColumna] = caramelo + } + + } while (casa[dummyFila][dummyColumna] != caramelo) + + + // De forma aleatoria colocamos dos fantasmas + var numFantasmas = 0 + do { + dummyFila = Random.nextInt(1, filas) - 1 + dummyColumna = Random.nextInt(1, columnas) - 1 + if (casa[dummyFila][dummyColumna] == sala) { + casa[dummyFila][dummyColumna] = fantasma + numFantasmas++ + } + + } while (numFantasmas < 2) + + } + + private fun loopGame() { + + var salida = false + while (!salida) { + + moverJugador(pideMovimiento()!!) + pintarCasaJugador() + + + when (casa[jugadorFila][jugadorColumna]) { + sala -> presentarEnigma() + fantasma -> { + + println("👻👻👻 DEBERÁS RESOLVER DOS ENGIMAS 👻👻👻") + presentarEnigma() + presentarEnigma() + } + + caramelo -> { + println("¡¡¡ HAS ENCONTRADO LOS CARAMELOS !!!") + salida = true + } + + puerta -> { + println(" ¡¡¡ OTRA VEZ AL PRINCPIO !!! ") + } + + else -> println("Habitación no contemplada") + + } + } + + } + + fun moverJugador(mov: String) { + when (mov) { + "N" -> if (jugadorFila - 1 >= 0) jugadorFila-- + "S" -> if (jugadorFila + 1 < filas) jugadorFila++ + "O" -> if (jugadorColumna - 1 >= 0) jugadorColumna-- + "E" -> if (jugadorColumna + 1 < columnas) jugadorColumna++ + else -> println("Movimiento no válido") + } + + + } + + fun pintarCasa() { + casa.forEach { + it.forEach() { + print(it) + } + println() + } + } + + fun pintarCasaJugador() { + println("Estas en [${jugadorFila + 1}, ${jugadorColumna + 1}]") + casa.onEachIndexed { i, fila -> + fila.onEachIndexed { j, sala -> + if (sala == puerta) { + print(sala) + } else { + if ((i == jugadorFila) && (j == jugadorColumna)) { + print("🧭") + } else { + print(this.sala) + } + } + + } + println() + + } + + } + + + fun pideMovimiento(): String? { + + var valido = false + var input: String? = null + while (!valido) { + print("¿Hacia dónde? (N)orte/(S)ur/(E)ste/(O)este >") + input = readLine() + + if (input != null) { + if (listOf("N", "n", "S", "s", "E", "e", "O", "o", "Q", "q").contains(input)) { + valido = true + } else { + println("Entrada inválida. Debes indicar una dirección válida.") + } + } + } + + return input!!.uppercase() + } + + + fun presentarEnigma() { + + val numPregunta = (0 until enigmas.size).random() + val pregunta = enigmas[numPregunta].first + val respuesta = enigmas[numPregunta].second + + var valido = false + var input: String? = null + while (!valido) { + print("$pregunta >") + input = readLine() + + if (input != null) { + if (respuesta == input) { + valido = true + } else { + println("La respuesta NO es correcta.") + } + } + } + + } +} + From 8bca0620db64a9ed7fb606a340552e83ce92ee74 Mon Sep 17 00:00:00 2001 From: blfuentes Date: Thu, 19 Oct 2023 09:48:44 +0200 Subject: [PATCH 0325/2103] Terminado reto #41 --- .../f#/blfuentes.fsx" | 77 ++++++++++++++----- 1 file changed, 57 insertions(+), 20 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" index a2de815ddf..b3d88438bf 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" @@ -14,22 +14,37 @@ type Habitacion = { Console.OutputEncoding <- System.Text.Encoding.UTF8 +let printConColor (mensaje: string) (color: ConsoleColor) = + Console.ForegroundColor <- color + Console.WriteLine(mensaje) + Console.ResetColor() + +let rec leerEntradaValida (mensaje: string) (validInput: string array) = + // printfn "%s Opciones: %s" mensaje (String.concat ", " validInput) + let msg = sprintf "%s Opciones: %s" mensaje (String.concat ", " validInput) + printConColor msg ConsoleColor.Green + let input = Console.ReadLine() + if Array.contains input validInput then + input + else + printConColor "Input invalido" ConsoleColor.Red + leerEntradaValida mensaje validInput + let pintarASCII (hab: TipoHabitacion) = - let characterWidth = 2 // Adjust the width as needed + let characterWidth = 2 match hab with | PUERTA -> sprintf "%-*s" characterWidth "🚪" - | VACIO -> sprintf "%-*s" characterWidth "▒▒" + | VACIO -> sprintf "%-*s" characterWidth "⬜️" | FANTASMA -> sprintf "%-*s" characterWidth "👻" | DULCE -> sprintf "%-*s" characterWidth "🍬" | USUARIO -> sprintf "%-*s" characterWidth "😀" -let generarFantasma = +let generarFantasma() = let numCheck = Random().Next(0, 9) - printfn "Fantasma: %A" numCheck - numCheck = 5 + numCheck >= 5 -let construirCasa = +let construirCasa() = let casa = Array2D.zeroCreate 4 4 for col in 0 .. 3 do for fila in 0 .. 3 do @@ -46,36 +61,57 @@ let mostrarCasa (casa: Habitacion[,]) = printf "%s" (pintarASCII casa[col, fila].Tipo) printfn "" +let rec resolverPregunta() = + let numero = Random().Next(1, 50) + let respuesta = leerEntradaValida "¿Es el numero par o impar?" [|"par"; "impar"|] + match (numero % 2, respuesta) with + | (0, "par") -> printConColor (sprintf "Respuesta correcta (%i)" numero) ConsoleColor.Cyan + | (1, "impar") -> printConColor (sprintf "Respuesta correcta(%i)" numero) ConsoleColor.Cyan + | _ -> + printConColor "Respuesta incorrecta. Prueba de nuevo" ConsoleColor.Red + resolverPregunta() + + let entrarHabitacion (casa: Habitacion[,]) (posicion: Coordenada) = - let hayFantasma = generarFantasma - if hayFantasma then - casa[posicion.Columna, posicion.Fila] <- { Posicion = posicion; Tipo = FANTASMA } - else - printfn "No hay fantasma" let habitacion: Habitacion = casa.[posicion.Columna, posicion.Fila] + + let habitacionOcupada = + if habitacion.Tipo = TipoHabitacion.VACIO then + casa[posicion.Columna, posicion.Fila] <- { Posicion = posicion; Tipo = if generarFantasma() then FANTASMA else VACIO } + casa[posicion.Columna, posicion.Fila] + else + habitacion + let hasTerminado = - match habitacion.Tipo with + match habitacionOcupada.Tipo with | PUERTA -> printfn "Has salido de la casa" false | VACIO -> printfn "No hay nada en esta habitacion. Responde la pregunta para continuar" casa[posicion.Columna, posicion.Fila] <- { Posicion = posicion; Tipo = USUARIO } + resolverPregunta() false | FANTASMA -> - printfn "Has encontrado un fantasma" + printConColor "Has encontrato un fantasma! Debes acertar dos preguntas." ConsoleColor.Yellow + mostrarCasa casa + resolverPregunta() + printfn "1 de 2...Veamos la segunda." + resolverPregunta() + casa[posicion.Columna, posicion.Fila] <- { Posicion = posicion; Tipo = USUARIO } false | DULCE -> printfn "Has encontrado un dulce" + printConColor "Has ganado el juego!" ConsoleColor.DarkMagenta + casa[posicion.Columna, posicion.Fila] <- { Posicion = posicion; Tipo = USUARIO } true | USUARIO -> - printfn "Ya estas en esta habitacion" + printfn "Ya estas en esta habitacion." false hasTerminado let rec leerDireccion(usuario: Coordenada) = - printfn "Elige una direccion: norte, sur, este, oeste" - let direccion = Console.ReadLine() + let direccion = leerEntradaValida "Elige una dirección." [|"norte"; "sur"; "este"; "oeste"|] let coordinate = match direccion with | "norte" -> { Fila = 0; Columna = -1 } @@ -85,12 +121,11 @@ let rec leerDireccion(usuario: Coordenada) = | _ -> leerDireccion(usuario) let nuevaPosicion = { Fila = usuario.Fila + coordinate.Fila; Columna = usuario.Columna + coordinate.Columna } if nuevaPosicion.Fila < 0 || nuevaPosicion.Fila > 3 || nuevaPosicion.Columna < 0 || nuevaPosicion.Columna > 3 then - printfn "No puedes salir de la casa" + printfn "No puedes salir de la casa atravesando la pared..." leerDireccion(usuario) else coordinate - let rec moverUsuario (casaMemo: Habitacion[,]) (casa: Habitacion[,]) (usuario: Coordenada) = let direccion = leerDireccion(usuario) let nuevoUsuario = { Posicion = { Fila = usuario.Fila + direccion.Fila; Columna = usuario.Columna + direccion.Columna }; Tipo = USUARIO } @@ -101,9 +136,11 @@ let rec moverUsuario (casaMemo: Habitacion[,]) (casa: Habitacion[,]) (usuario: C mostrarCasa casa moverUsuario casaMemo casa nuevoUsuario.Posicion else - printfn "Has terminado el juego" + printConColor "Gracias por jugar!" ConsoleColor.DarkMagenta + mostrarCasa casa + Console.ReadLine() |> ignore -let casa = construirCasa +let casa = construirCasa() let casaMemo = Array2D.copy casa mostrarCasa casa moverUsuario casaMemo casa { Fila = 0; Columna = 0 } \ No newline at end of file From 3ab2092a9383457f63856074d7929dfe8dc6413e Mon Sep 17 00:00:00 2001 From: blfuentes Date: Thu, 19 Oct 2023 09:51:48 +0200 Subject: [PATCH 0326/2103] reto #41 --- .../f#/blfuentes.fsx" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" index b3d88438bf..678e87afbe 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" @@ -42,7 +42,7 @@ let pintarASCII (hab: TipoHabitacion) = let generarFantasma() = let numCheck = Random().Next(0, 9) - numCheck >= 5 + numCheck = 5 let construirCasa() = let casa = Array2D.zeroCreate 4 4 From 5fd077be4f0b1054899965d5e1e7aa47a782be45 Mon Sep 17 00:00:00 2001 From: Juan Pablo Patino Lopez Date: Thu, 19 Oct 2023 11:40:40 +0200 Subject: [PATCH 0327/2103] Juanppdev - Reto #41 - pzthon --- .../python/juanppdev.py" | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/juanppdev.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/juanppdev.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/juanppdev.py" new file mode 100644 index 0000000000..d91827a75e --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/juanppdev.py" @@ -0,0 +1,79 @@ +import random + +# Función para generar un enigma aleatorio +def generar_enigma(): + enigmas = [ + {"pregunta": "¿Qué tiene llaves pero no puede abrir cerraduras?", "respuesta": "un piano"}, + {"pregunta": "¿Qué siempre sube y nunca baja?", "respuesta": "tu edad"}, + {"pregunta": "Tiene hojas, pero no es un árbol. ¿Qué es?", "respuesta": "un libro"}, + # Agrega más enigmas aquí + ] + return random.choice(enigmas) + +# Función para resolver un enigma +def resolver_enigma(enigma): + print(enigma["pregunta"]) + respuesta_usuario = input("Tu respuesta: ").lower() + if respuesta_usuario == enigma["respuesta"]: + print("¡Correcto! Puedes avanzar.") + return True + else: + print("Respuesta incorrecta. No puedes avanzar.") + return False + +# Función para moverse +def moverse(): + direccion = input("¿A dónde quieres desplazarte? (norte/sur/este/oeste): ").lower() + if direccion in ["norte", "sur", "este", "oeste"]: + return direccion + else: + print("Dirección no válida. Inténtalo de nuevo.") + return moverse() + +# Función principal del juego +def juego(): + casa = [ + ["🚪", "⬜️", "⬜️", "⬜️"], + ["⬜️", "👻", "⬜️", "⬜️"], + ["⬜️", "⬜️", "⬜️", "👻"], + ["⬜️", "⬜️", "🍭", "⬜️"] + ] + + x, y = 0, 0 # Coordenadas iniciales + dulces_x, dulces_y = 3, 2 # Coordenadas de la habitación de los dulces + + while True: + habitacion_actual = casa[y][x] + + if x == dulces_x and y == dulces_y: + print("¡Encontraste la habitación de los dulces! Has ganado.") + break + + if habitacion_actual == "👻": + print("¡Un fantasma te ha atrapado!") + for _ in range(2): + enigma = generar_enigma() + if not resolver_enigma(enigma): + return + print("El fantasma te deja ir. Elige una dirección para escapar.") + elif habitacion_actual == "🍭": + print("¡Estás en la habitación de los dulces!") + else: + enigma = generar_enigma() + if not resolver_enigma(enigma): + return + + direccion = moverse() + + if direccion == "norte" and y > 0: + y -= 1 + elif direccion == "sur" and y < 3: + y += 1 + elif direccion == "este" and x < 3: + x += 1 + elif direccion == "oeste" and x > 0: + x -= 1 + +if __name__ == "__main__": + print("Bienvenido a la mansión abandonada. Tu misión es encontrar la habitación de los dulces.") + juego() From 7d9f23dfd2fb4bcae4305599e7802c67cde9f057 Mon Sep 17 00:00:00 2001 From: marco cruz Date: Thu, 19 Oct 2023 03:53:29 -0600 Subject: [PATCH 0328/2103] Reto #41 - Javascript --- .../javascript/marcode24.js" | 351 ++++++++++++++++++ 1 file changed, 351 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/marcode24.js" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/marcode24.js" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/marcode24.js" new file mode 100644 index 0000000000..25032906e2 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/marcode24.js" @@ -0,0 +1,351 @@ +/* + * Este es un reto especial por Halloween. + * Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces. + * + * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. + * (Tienes total libertad para ser creativo con los textos) + * + * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 + * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. + * (16 habitaciones, siendo una de entrada y otra donde están los dulces) + * Esta podría ser una representación: + * 🚪⬜️⬜️⬜️ + * ⬜️👻⬜️⬜️ + * ⬜️⬜️⬜️👻 + * ⬜️⬜️🍭⬜️ + * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. + * Si no lo aciertas no podrás desplazarte. + * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. + * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) + * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. + * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y + * tengas que responder dos preguntas para salir de ella. + */ + + +const readline = require('readline'); + +const DIFFICULTIES = { + facil: { rows: 4, cols: 4, ghosts: 0.1 }, + medio: { rows: 5, cols: 5, ghosts: 0.15 }, + dificil: { rows: 6, cols: 6, ghosts: 0.25 }, +}; + +const ENIGMAS = [ + { + question: '¿Qué criatura vuela en la noche y tiene alas negras?', + answer: 'murcielago', + }, + { + question: '¿Qué ser mountruoso tiene una sola cabeza, pero tres cuerpos?', + answer: 'cerbero', + }, + { + question: '¿Qué crece en la luna llena y convierte a las personas en lobos?', + answer: 'licantropo', + }, + { + question: '¿Qué asusta a los vampiros?', + answer: 'ajo', + }, + { + question: '¿Qué criatura chupa la sangre de sus víctimas?', + answer: 'vampiro', + }, + { + question: '¿Qué ser viste una túnica y se desplaza en una escoba?', + answer: 'bruja', + }, + { + question: '¿Qué criatura se levanta de su tumba en Halloween?', + answer: 'zombie', + }, + { + question: '¿Qué arácnido teje telarañas y tiene ocho patas?', + answer: 'araña', + }, + { + question: '¿Qué ser monstruoso es una construcción de huesos?', + answer: 'esqueleto', + }, + { + question: ' ¿Qué animal negro trae mala suerte en Halloween?', + answer: 'gato', + }, + { + question: '¿Qué objeto tallado con una cara aterradora se ilumina en Halloween?', + answer: 'calabaza', + }, + { + question: '¿Qué palabra significa "travieso o trato" en Halloween?', + answer: 'truco', + }, + { + question: '¿Qué ser peludo aúlla en la luna llena?', + answer: 'lobo', + }, + { + question: '¿Qué insecto representa la transformación y la resurrección?', + answer: 'escarabajo', + }, + { + question: '¿Qué bebida mágica preparan las brujas?', + answer: 'pocima', + }, + { + question: '¿Qué comida se colecciona en una bolsa en Halloween?', + answer: 'caramelos', + }, + { + question: '¿Qué criatura terrorífica vuela por la noche y chilla?', + answer: 'buho', + }, + { + question: '¿Qué actividad espeluznante ocurre en una casa embrujada?', + answer: 'terror', + }, + { + question: '¿Qué animal se asocia con la maldad y las brujas?', + answer: 'serpiente', + }, + { + question: '¿Qué objeto vuela en el cielo de Halloween?', + answer: 'escoba', + }, + { + question: '¿Qué ser no tiene sombra y teme la luz?', + answer: 'fantasma', + }, + { + question: '¿Qué objeto lanza destellos en la noche de Halloween?', + answer: 'luciernaga', + }, + { + question: '¿Qué animal negro se considera un mal presagio en Halloween?', + answer: 'cuervo', + }, + { + question: '¿Qué objeto ilumina el camino en Halloween?', + answer: 'linterna', + }, +]; + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +const askQuestion = (question) => new Promise((resolve) => { + rl.question(question, (answer) => { + resolve(answer.trim()); + }); +}); + +let MANSION = []; +const CURRENT_POSITION = { row: 0, col: 0 }; // Posición inicial + +const generateRandomMansion = (difficulty) => { + const { rows, cols, ghosts } = DIFFICULTIES[difficulty]; + const newMansion = []; + for (let i = 0; i < rows; i++) { + const row = []; + for (let j = 0; j < cols; j++) { + const random = Math.random(); + // Si el número aleatorio es menor que el porcentaje de fantasmas, se añade un fantasma + row.push(random < ghosts ? '👻' : '⬜️'); + } + newMansion.push(row); + } + const dulcesRow = Math.floor(Math.random() * rows); + const dulcesCol = Math.floor(Math.random() * cols); + // Añade la habitación de los dulces en una posición aleatoria + newMansion[dulcesRow][dulcesCol] = '🍭'; + + // el jugador empieza en una habitación aleatoria solo en los bordes + do { + const randomBorder = Math.floor(Math.random() * rows); + const doorPosition = { row: 0, col: 0 }; + switch (randomBorder) { + case 0: // norte + doorPosition.row = 0; + doorPosition.col = Math.floor(Math.random() * cols); + break; + case 1: // sur + doorPosition.row = rows - 1; + doorPosition.col = Math.floor(Math.random() * cols); + break; + case 2: // este + doorPosition.row = Math.floor(Math.random() * rows); + doorPosition.col = cols - 1; + break; + case 3: // oeste + doorPosition.row = Math.floor(Math.random() * rows); + doorPosition.col = 0; + break; + default: + break; + } + CURRENT_POSITION.row = doorPosition.row; + CURRENT_POSITION.col = doorPosition.col; + + // verifica que la habitación no sea de los dulces + if (newMansion[doorPosition.row][doorPosition.col] === '⬜️') { + newMansion[doorPosition.row][doorPosition.col] = '🚪'; + break; + } + } while (true); + + return newMansion; +}; + +const displayMansion = () => { + const { row, col } = CURRENT_POSITION; + for (let i = 0; i < MANSION.length; i++) { + let rowString = ''; + for (let j = 0; j < MANSION[i].length; j++) { + // Si es la posición actual, muestra el emoji de la habitación de los dulces + rowString += (i === row && j === col) ? '🍭' : MANSION[i][j]; + } + console.log(rowString); + } +}; + +const displayCurrentRoom = () => { + const { row, col } = CURRENT_POSITION; + console.log('\nTu posición actual es: \n'); + for (let i = 0; i < MANSION.length; i++) { + let rowString = ''; + for (let j = 0; j < MANSION[i].length; j++) { + rowString += (i === row && j === col) ? '😄' : '⬜️'; + } + console.log(rowString); + } +}; + +const getRandomEnigma = () => { + const randomIndex = Math.floor(Math.random() * ENIGMAS.length); + return ENIGMAS[randomIndex]; +}; + +const checkAnswer = (answer, enigmaIndex) => { + const enigma = ENIGMAS[enigmaIndex]; + return answer.toLowerCase() === enigma.answer; +}; + +const movePlayer = (direction) => { + const { row, col } = CURRENT_POSITION; + + const movements = { + norte: { row: row - 1, col }, + sur: { row: row + 1, col }, + este: { row, col: col + 1 }, + oeste: { row, col: col - 1 }, + }; + + const nextPosition = movements[direction.toLowerCase()]; + if (!nextPosition) return false; + + const { row: nextRow, col: nextCol } = nextPosition; + const isValidPosition = nextRow >= 0 + && nextRow < MANSION.length + && nextCol >= 0 + && nextCol < MANSION[0].length; + // Comprueba que la siguiente posición esté dentro de los límites de la mansión + if (isValidPosition) { + CURRENT_POSITION.row = nextRow; + CURRENT_POSITION.col = nextCol; + return true; + } + console.log('\nNo puedes moverte en esa dirección. Inténtalo de nuevo.'); + return false; +}; + +const checkDulcesRoom = () => { + const { row, col } = CURRENT_POSITION; + // Comprueba si es la habitación de los dulces + return MANSION[row][col] === '🍭'; +}; + +const checkGhosts = () => { + const { row, col } = CURRENT_POSITION; + // Comprueba si es la habitación de los fantasmas + return MANSION[row][col] === '👻'; +}; + +const playGame = async () => { + const moveAndCheckDulces = async () => { + let direction; + do { + // eslint-disable-next-line no-await-in-loop + direction = await askQuestion('\nHacia dónde quieres moverte? (norte/sur/este/oeste): '); + } while (!movePlayer(direction)); + + if (checkDulcesRoom()) { + displayMansion(); + console.log('\n¡Felicidades! Has encontrado la habitación de los dulces. ¡Has ganado!'); + rl.close(); + return true; // El juego ha terminado + } + displayCurrentRoom(); + return false; // El juego continúa + }; + + const solveEnigma = async (enigma) => { + console.log('\nEnigma:', enigma.question); + const userAnswer = await askQuestion('Tu respuesta: '); + return checkAnswer(userAnswer, ENIGMAS.indexOf(enigma)); + }; + + const solveGhostsRoom = async () => { + console.log('\n¡Oh no! Has caído en la habitación de los fantasmas. Debes resolver 2 enigmas para poder moverte.'); + let correctAnswers = 0; + while (correctAnswers < 2) { + // eslint-disable-next-line no-await-in-loop + if (await solveEnigma(getRandomEnigma())) { + // Si resuelve el enigma correctamente aumenta el contador de respuestas correctas en 1 + correctAnswers++; + console.log(correctAnswers === 1 + ? '\n¡Respuesta correcta! Te falta 1 enigma para poder moverte.' + : '\n¡Respuesta correcta! Ya puedes moverte.'); + } else { + console.log('\nRespuesta incorrecta. Debes resolver el enigma de nuevo.'); + } + } + return moveAndCheckDulces(); // El juego ha terminado + }; + + const playRound = async () => { + if (checkGhosts() && await solveGhostsRoom()) return; // El juego ha terminado + + const enigma = getRandomEnigma(); + if (await solveEnigma(enigma)) { + console.log('\n¡Respuesta correcta! Puedes moverte.'); + if (await moveAndCheckDulces()) return; // El juego ha terminado + } else console.log('\nRespuesta incorrecta. Debes resolver el enigma de nuevo.'); + await playRound(); + }; + await playRound(); +}; + +const start = async () => { + let difficulty; + do { + // eslint-disable-next-line no-await-in-loop + difficulty = await askQuestion('Selecciona la dificultad (facil/medio/dificil): '); + if (!DIFFICULTIES[difficulty]) { + console.log('\nDificultad incorrecta. Inténtalo de nuevo.'); + } else break; + } while (true); + + MANSION = generateRandomMansion(difficulty); + console.log('\n¡Bienvenido a la mansión abandonada! Resuelve los enigmas para encontrar la habitación de los dulces.'); + displayCurrentRoom(); + playGame(); +}; + +start(); + + +// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges From 852b9836ba1a1e24fbee9d38633fab50680ea747 Mon Sep 17 00:00:00 2001 From: Luis Dellamea Date: Thu, 19 Oct 2023 08:22:47 -0300 Subject: [PATCH 0329/2103] Reto 14 lfd1983 --- .../python/lfd1983.py" | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 "Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/lfd1983.py" diff --git "a/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/lfd1983.py" "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/lfd1983.py" new file mode 100644 index 0000000000..f67584ebc5 --- /dev/null +++ "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/lfd1983.py" @@ -0,0 +1,19 @@ +def convertToBase(decimal,base): + digitos = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"] + resultado = [] + while decimal >= base: + resultado.append(digitos[decimal % base]) + decimal = decimal // base + resultado.append(digitos[decimal]) + return "".join(resultado[::-1]) + +def convertirDecimalToOctal(decimal): + return convertToBase(decimal,8) + +def convertDecimalToHexa(decimal): + return convertToBase(decimal,16) + +print(convertToBase(8596,16)) +print(convertDecimalToHexa(8596)) +print(convertToBase(8596,8)) +print(convertirDecimalToOctal(8596)) \ No newline at end of file From 27fbc1a290d219402c69304e655725af29dac2db Mon Sep 17 00:00:00 2001 From: Luis Dellamea Date: Thu, 19 Oct 2023 08:44:58 -0300 Subject: [PATCH 0330/2103] Reto 39 lfd1983 --- .../python/lfd1983.py" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/lfd1983.py" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/lfd1983.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/lfd1983.py" new file mode 100644 index 0000000000..fe6a371960 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/lfd1983.py" @@ -0,0 +1,20 @@ +# /* +# * Crea una función que encuentre todos los triples pitagóricos +# * (ternas) menores o iguales a un número dado. +# * - Debes buscar información sobre qué es un triple pitagórico. +# * - La función únicamente recibe el número máximo que puede +# * aparecer en el triple. +# * - Ejemplo: Los triples menores o iguales a 10 están +# * formados por (3, 4, 5) y (6, 8, 10). +# */ + +def triples_pitagoricos(n): + resultado = [] + for c in range(1,n+1): + for b in range(1,c+1): + for a in range(1,b+1): + if a**2+b**2 == c**2: + resultado.append([a,b,c]) + return resultado + +print(triples_pitagoricos(50)) \ No newline at end of file From ee516b44f388335b1aa5c3b2a764986273171c9c Mon Sep 17 00:00:00 2001 From: AlbertoVf Date: Thu, 19 Oct 2023 15:03:50 +0200 Subject: [PATCH 0331/2103] reto#41 - python --- .../python/albertovf.py" | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/albertovf.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/albertovf.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/albertovf.py" new file mode 100644 index 0000000000..ddef5e0bd2 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/albertovf.py" @@ -0,0 +1,115 @@ +import random +import requests + + +class Rooms: + EXIT = "🍭" + GHOST = "👻" + START = "🚪" + ROOM = "🔳" + + +class Directions: + NORTE = "norte" + SUR = "sur" + ESTE = "este" + OESTE = "oeste" + + +PISOS_MANSION = 4 +X_INICIO, Y_INICIO = [ + random.randint(0, PISOS_MANSION - 1), + random.randint(0, PISOS_MANSION - 1), +] + + +def generarEnigma(): + reqUrl = "https://opentdb.com/api.php?amount=1&difficulty=easy&type=multiple" + response = requests.get(reqUrl, timeout=5).json().get("results", [])[0] + answers = response["incorrect_answers"] + correct = response["correct_answer"] + answers.append(correct) + question = f"{response['question']}:\t{', '.join(answers)}" + return {"pregunta": question, "respuesta": correct} + + +def generarMansion(): + mansion = [[Rooms.ROOM for _ in range(PISOS_MANSION)] for _ in range(PISOS_MANSION)] + for _ in range(PISOS_MANSION): + x, y = random.randint(0, PISOS_MANSION - 1), random.randint( + 0, PISOS_MANSION - 1 + ) + mansion[x][y] = Rooms.GHOST + mansion[X_INICIO][Y_INICIO] = Rooms.START + mansion[random.randint(0, PISOS_MANSION - 1)][ + random.randint(0, PISOS_MANSION - 1) + ] = Rooms.EXIT + for i in mansion: + print(i) + return mansion + + +def resolverEnigma(enigma): + print(enigma["pregunta"]) + response = input("Tu respuesta: ").lower() + if response == enigma["respuesta"].lower(): + print("Respuesta correcta.") + return True + else: + print("Respuesta incorrecta.") + return False + + +def juego(): + print("¡Encuentra la habitación de los dulces para salir!") + x, y = X_INICIO, Y_INICIO + mansion = generarMansion() + while True: + room = mansion[x][y] + if room == Rooms.EXIT: + print("¡Has encontrado la habitación de los dulces!") + break + + if room == Rooms.GHOST: + print("¡Te has encontrado con un fantasma! Debes responder 2 preguntas.") + enigma = generarEnigma() + enigmaG = generarEnigma() + if not resolverEnigma(enigma) or not resolverEnigma(enigmaG): + print("¡Has fallado!, el fantasma te atrapa.") + break + + elif room == Rooms.ROOM: + enigma = generarEnigma() + while not resolverEnigma(enigma): + enigma = generarEnigma() + print("Puedes continuar con tu búsqueda.") + + validDirections = [] + if x > 0: + validDirections.append(Directions.NORTE) + if x < PISOS_MANSION - 1: + validDirections.append(Directions.SUR) + if y > 0: + validDirections.append(Directions.OESTE) + if y < PISOS_MANSION - 1: + validDirections.append(Directions.ESTE) + + direction = input( + f"¿A dónde quieres ir? {', '.join(validDirections)}: " + ).lower() + + if direction in validDirections: + if direction == Directions.NORTE: + x -= 1 + elif direction == Directions.SUR: + x += 1 + elif direction == Directions.ESTE: + y += 1 + elif direction == Directions.OESTE: + y -= 1 + else: + print("Dirección no válida. Has vuelto a entrar en la room.") + + +if __name__ == "__main__": + juego() From ce9afc04126c8e2328f4988d4e9841897d1f6324 Mon Sep 17 00:00:00 2001 From: pammsitoh <103278454+pammsitoh@users.noreply.github.com> Date: Thu, 19 Oct 2023 12:30:37 -0500 Subject: [PATCH 0332/2103] reto programacion #41 --- .../javascript/pammsitoh.js" | 1080 +++++++++++++++++ 1 file changed, 1080 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/pammsitoh.js" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/pammsitoh.js" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/pammsitoh.js" new file mode 100644 index 0000000000..0c9c46e550 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/pammsitoh.js" @@ -0,0 +1,1080 @@ +import readline from "readline"; + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +/** + * + * P R E G U N T A S + * + */ + +const Questions = [ + { + "pregunta": "¿El lenguaje Python es interpretado?", + "solutions": ["Si"] + }, + { + "pregunta": "¿HTML es un lenguaje de programación?", + "solutions": ["No"] + }, + { + "pregunta": "¿Java y JavaScript son el mismo lenguaje?", + "solutions": ["No"] + }, + { + "pregunta": "¿Un byte consta de 8 bits?", + "solutions": ["Si"] + }, + { + "pregunta": "Lenguaje principal para desarrollo Android.", + "solutions": ["Java"] + }, + { + "pregunta": "¿CSS se usa para estilizar páginas web?", + "solutions": ["Si"] + }, + { + "pregunta": "Herramienta de control de versiones creada por Linus Torvalds.", + "solutions": ["Git"] + }, + { + "pregunta": "¿El término \"bug\" se refiere a un error en el código?", + "solutions": ["Si"] + }, + { + "pregunta": "Lenguaje famoso por su uso en inteligencia artificial.", + "solutions": ["Python"] + }, + { + "pregunta": "¿JSON es un formato para el intercambio de datos?", + "solutions": ["Si"] + }, + { + "pregunta": "Tipo de dato para almacenar texto en la mayoria de los lenguajes.", + "solutions": ["String"] + }, + { + "pregunta": "¿Los arrays inician con el indice 1 en C?", + "solutions": ["No"] + }, + { + "pregunta": "Sistema operativo desarrollado por Microsoft.", + "solutions": ["Windows"] + }, + { + "pregunta": "¿El término \"IDE\" se refiere a un editor de código avanzado?", + "solutions": ["Si"] + }, + { + "pregunta": "Protocolo utilizado para transferir páginas web.", + "solutions": ["HTTP"] + }, + { + "pregunta": "¿La recursividad implica que una función se llame a si misma?", + "solutions": ["Si"] + }, + { + "pregunta": "Lenguaje que utiliza \"gemas\".", + "solutions": ["Ruby"] + }, + { + "pregunta": "¿El término \"API\" significa \"Aplicación de Programación de Interfaces\"?", + "solutions": ["No"] + }, + { + "pregunta": "¿\"HTML\" es un acrónimo de \"Hyper Text Markup Language\"?", + "solutions": ["Si"] + } +] + +/** + * + * P A N T A L L A S, + * A N I M A C I O N E S, + * H A B I T A C I O N E S, + * L O G I C A + * + */ + +/** + * + * @param {Array} frames + * @param {number} delayPerFrame + * @param {Function} finished + * @description Esta funcion muestra las animaciones y al terminar ejecuta un callback... + */ +const Animation = ( frames, delayPerFrame, finished ) => { + let i = 0; + + const newFrame = () => { + setTimeout(() => { + console.clear(); + console.log(frames[i].join("\n")); + + i += 1; + if( i < frames.length ) { + newFrame(); + return + } + + if( i >= frames.length ) setTimeout(() => finished(), delayPerFrame); + },delayPerFrame); + } + + newFrame(); +} + +// Ubicaciones de las habitaciones... +const Rooms = [ + [4, 2],[10, 2],[16, 2],[22, 2], + [4, 5],[10, 5],[16, 5],[22, 5], + [4, 8],[10, 8],[16, 8],[22, 8], + [4, 11],[10, 11],[16, 11],[22, 11],]; + +// Pantallas Estaticas... +const Map = [ + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫", + "🚪🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨🟫", + "🟫🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨🟫", + "🟫🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨🟫", + "🟫🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧🟫", + "🟫🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧🟫", + "🟫🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧🟫", + "🟫🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨🟫", + "🟫🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨🟫", + "🟫🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨🟫", + "🟫🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧🟫", + "🟫🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧🟫", + "🟫🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧🟫", + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫\n\n" +] + +const MainMenu = [ + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫", + "🟫🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟫", + "🟫🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟫", + "🟫🟨🟨⬛🟨🟨🟨🟨🟨🟨⬛🟨🟨🟫", + "🟫🟨🟨⬛⬛⬛🟨🟨⬛⬛⬛🟨🟨🟫", + "🟫🟨🟨⬛⬛⬛🟨🟨⬛⬛⬛🟨🟨🟫", + "🟫🟨🟨🟨🟨⬛🟨🟨⬛🟨🟨🟨🟨🟫", + "🟫🟨🟨⬛🟨🟨🟨🟨🟨🟨⬛🟨🟨🟫", + "🟫🟨🟨⬛⬛🟨🟨🟨🟨⬛⬛🟨🟨🟫", + "🟫🟨🟨⬛⬛🟨⬛⬛🟨⬛⬛🟨🟨🟫", + "🟫🟨🟨🟨⬛⬛⬛⬛⬛⬛🟨🟨🟨🟫", + "🟫🟨🟨🟨🟨⬛🟨🟨⬛🟨🟨🟨🟨🟫", + "🟫🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟫", + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫\n\n" +] + +//Animaciones que se le pasan a "Animation();" +const StartGame_Frames = [ + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜🟨🟨⬛🟨🟨🟨🟨🟨🟨⬛🟨🟨⬜", + "⬜🟨🟨⬛⬛⬛🟨🟨⬛⬛⬛🟨🟨⬜", + "⬜🟨🟨⬛⬛⬛🟨🟨⬛⬛⬛🟨🟨⬜", + "⬜🟨🟨🟨🟨⬛🟨🟨⬛🟨🟨🟨🟨⬜", + "⬜🟨🟨⬛🟨🟨🟨🟨🟨🟨⬛🟨🟨⬜", + "⬜🟨🟨⬛⬛🟨🟨🟨🟨⬛⬛🟨🟨⬜", + "⬜🟨🟨⬛⬛🟨⬛⬛🟨⬛⬛🟨🟨⬜", + "⬜🟨🟨🟨⬛⬛⬛⬛⬛⬛🟨🟨🟨⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜🟨🟨⬛⬛⬛🟨🟨⬛⬛⬛🟨🟨⬜", + "⬜🟨🟨🟨🟨⬛🟨🟨⬛🟨🟨🟨🟨⬜", + "⬜🟨🟨⬛🟨🟨🟨🟨🟨🟨⬛🟨🟨⬜", + "⬜🟨🟨⬛⬛🟨🟨🟨🟨⬛⬛🟨🟨⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "🚪⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧⬜", + "⬜🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧⬜", + "⬜🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨⬜", + "⬜🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "🚪⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧⬜", + "⬜🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧⬜", + "⬜🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧⬜", + "⬜🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨⬜", + "⬜🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨⬜", + "⬜🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "🚪⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨⬜", + "⬜🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨⬜", + "⬜🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧⬜", + "⬜🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧⬜", + "⬜🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧⬜", + "⬜🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨⬜", + "⬜🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨⬜", + "⬜🟧🟧🟧🟨🟨🟨🟧🟧🟧🟨🟨🟨⬜", + "⬜🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧⬜", + "⬜🟨🟨🟨🟧🟧🟧🟨🟨🟨🟧🟧🟧⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ] +] + +const CorrectAnswerFrames = [ + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛🟩⬛🟩⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛🟩⬛⬛⬛🟩⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛🟩⬛🟩⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛🟩⬛⬛⬛⬛⬜", + "⬜⬛⬛🟩⬛⬛⬛🟩⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛🟩⬛🟩⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛🟩⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛🟩⬛⬛⬛⬛⬜", + "⬜⬛⬛🟩⬛⬛⬛🟩⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛🟩⬛🟩⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛🟩⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛🟩⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛🟩⬛⬛⬛⬛⬜", + "⬜⬛⬛🟩⬛⬛⬛🟩⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛🟩⬛🟩⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛", + "⬛⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛🟩⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛🟩⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛🟩⬛⬛⬛⬛⬜", + "⬜⬛⬛🟩⬛⬛⬛🟩⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛🟩⬛🟩⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛", + "⬛⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛🟩⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛🟩⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛🟩⬛⬛⬛⬛⬜", + "⬜⬛⬛🟩⬛⬛⬛🟩⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛🟩⬛🟩⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛🟩⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛", + "⬛⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛\n\n" + ] +] + +const Death_Frames = [ + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜", + "⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜", + "⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜", + "⬜⬛⬛⬜⬛⬛⬜⬜⬛⬛⬜⬛⬛⬜", + "⬜⬛⬛⬜⬜⬛⬜⬜⬛⬜⬜⬛⬛⬜", + "⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛", + "⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛⬛⬜⬜⬛", + "⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛⬛⬜⬜⬛", + "⬛⬜⬜⬛⬜⬜⬛⬛⬜⬜⬛⬜⬜⬛", + "⬛⬜⬜⬛⬛⬜⬛⬛⬜⬛⬛⬜⬜⬛", + "⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜", + "⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜", + "⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜", + "⬜⬛⬛⬜⬛⬛⬜⬜⬛⬛⬜⬛⬛⬜", + "⬜⬛⬛⬜⬜⬛⬜⬜⬛⬜⬜⬛⬛⬜", + "⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛", + "⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛⬛⬜⬜⬛", + "⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛⬛⬜⬜⬛", + "⬛⬜⬜⬛⬜⬜⬛⬛⬜⬜⬛⬜⬜⬛", + "⬛⬜⬜⬛⬛⬜⬛⬛⬜⬛⬛⬜⬜⬛", + "⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜", + "⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜", + "⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜", + "⬜⬛⬛⬜⬛⬛⬜⬜⬛⬛⬜⬛⬛⬜", + "⬜⬛⬛⬜⬜⬛⬜⬜⬛⬜⬜⬛⬛⬜", + "⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛", + "⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛⬛⬜⬜⬛", + "⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛⬛⬜⬜⬛", + "⬛⬜⬜⬛⬜⬜⬛⬛⬜⬜⬛⬜⬜⬛", + "⬛⬜⬜⬛⬛⬜⬛⬛⬜⬛⬛⬜⬜⬛", + "⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜", + "⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜", + "⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜", + "⬜⬛⬛⬜⬛⬛⬜⬜⬛⬛⬜⬛⬛⬜", + "⬜⬛⬛⬜⬜⬛⬜⬜⬛⬜⬜⬛⬛⬜", + "⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛", + "⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛⬛⬜⬜⬛", + "⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛⬛⬜⬜⬛", + "⬛⬜⬜⬛⬜⬜⬛⬛⬜⬜⬛⬜⬜⬛", + "⬛⬜⬜⬛⬛⬜⬛⬛⬜⬛⬛⬜⬜⬛", + "⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛\n\n" + ], + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜", + "⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜", + "⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜", + "⬜⬛⬛⬜⬛⬛⬜⬜⬛⬛⬜⬛⬛⬜", + "⬜⬛⬛⬜⬜⬛⬜⬜⬛⬜⬜⬛⬛⬜", + "⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ] +] + +const Error_Frames = [ + + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛\n\n" + ], + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛\n\n" + ], + [ + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜", + "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n\n" + ], + + [ + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛", + "⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛\n\n" + ] + +] + +const Winner_Frames = [ + [ + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫", + "🟫🍭🟧🍭🟧🍭🟧🍭🟧🍭🟧🍭🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫\n\n" + ], + + [ + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🟧🍭🟧🍭🟧🍭🟧🍭🟧🍭🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫\n\n" + ], + + [ + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🟧🍭🟧🍭🟧🍭🟧🍭🟧🍭🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫\n\n" + ], + + [ + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🟧🍭🟧🍭🟧🍭🟧🍭🟧🍭🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧🟫", + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫\n\n" + ], + + [ + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🟫", + "🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫🟫\n\n" + ] + + +] + +/** + * + * + * L O G I C A + * + * + */ + +class World { + constructor(){ + this.player_position = [4, 2] + + this.rooms = Rooms; + + this.game_status = { + started: false, + current_room: 0, + enigma: false, + candy_position: this.rooms[Math.floor(Math.random() * 15) + 1], + warning: "" + } + + this.map_base = MainMenu; + this.render(); + + rl.question("\x1b[35m" + "Comenzar Juego? | SI/NO : ", ( answer ) => { + if(answer.toLowerCase() == "si") { + Animation( StartGame_Frames, 50, () => { + this.map_base = Map; + this.game_status.started = true; + this.message("\x1b[36m" + `Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver una pregunta para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces.`); + this.render(); + }); + }else { + process.exit(); + } + }); + } + + /** + * @description actualiza el tablero... + */ + render() { + console.clear(); + + //Ganar si el caramelo esta en la misma habitacion del jugador... + if( this.player_position === this.game_status.candy_position ){ + this.Win(); + return; + } + + //Coloca los emojis en su lugar... + for (let y = 0; y < this.map_base.length; y++) { + let row = ""; + for (let x = 0; x < this.map_base[y].length; x += 2) { + if (x == this.player_position[0] && y == this.player_position[1] && this.game_status.started ) { + row += "🕺"; + } else { + row += this.map_base[y].slice(x, x + 2); + } + } + console.log(row); + } + + //Si hay un mensaje de aviso mostrarlo... + if(this.game_status.warning != "" || null || undefined){ + console.log('\x1b[31m', `[AVISO]: ${this.game_status.warning}\n\n`); + this.game_status.warning = ""; + } + + //Si el juego inicio y no hay pregunta -> preguntar a donde moverse. + if(this.game_status.started && !this.game_status.enigma) { + rl.question("\x1b[32m" + "Hacia donde quieres moverte? [w: ↑,s: ↓ ,d: → ,a: ← ]: ", ( answer ) => { + this.moveRelative(answer.toLowerCase()) + }); + } + } + + /** + * + * @param {int} id 0 - 15 + * @description Mueve al jugador a una habitacion especifica... + */ + moveToRoom(id) { + this.game_status.enigma = true; + this.render(); + + this.newQuestion(id); + } + + /** + * + * @param {String} text + * @description Enviar avisos al usuario... + */ + message( text ) { + this.game_status.warning = text; + } + + /** + * + * @param {String} text + * @description Arrojar errores y avisar al usuario con una animacion de error... + */ + error( text ) { + Animation(Error_Frames, 100, () => { + this.message(text); + this.render(); + }); + } + + /** + * + * @param {String} direction + * @description Mueve al jugador relativo a su habitacion actual... + */ + moveRelative( direction ) { + const directions = { + "w": this.game_status.current_room - 4, + "s": this.game_status.current_room + 4, + "a": this.game_status.current_room - 1, + "d": this.game_status.current_room + 1 + } + + //Verificar que sea una posicion disponible dentro de la mansion... + if( directions[direction] >= 0 && directions[direction] <= 15 ){ + if( direction !== "right" && direction !== "left" ) { + this.moveToRoom(directions[direction]); + return; + } + + if( direction == "right" && (this.game_status.current_room + 1) % 4 !== 0 + || direction == "left" && this.game_status.current_room % 4 !== 0 + ){ + this.moveToRoom(directions[direction]); + return; + } + this.error("Que intentas? no puedes atravesar paredes 💀"); + + return; + } + + //De no poder moverse a la direccion solicitada arrojar error... + this.error("Que intentas? no puedes atravesar paredes 💀"); + } + + /** + * + * @param {number} id + * @description Nueva pregunta al jugador... + */ + newQuestion(id) { + const min = Math.ceil(0); + const max = Math.floor(Questions.length); + const index = Math.floor(Math.random() * (max - min)) + min; + + rl.question("\x1b[35m" + `[PREGUNTA] ${Questions[index].pregunta} : `, ( respuesta ) => { + + if( Questions[index].solutions.some( solution => solution.toLowerCase() == respuesta.toLowerCase() ) ){ + Animation(CorrectAnswerFrames, 100, () => { + this.player_position = this.rooms[id]; + this.game_status.current_room = id; + this.game_status.enigma = false; + this.render(); + }) + }else { + Animation(Death_Frames, 100, () => { + rl.question( "\x1b[0m" + `Oops! la respuesta era "${Questions[index].solutions[0]}" HAS MUERTO 💀, Quieres volver a intentarlo? : `, ( answer ) => { + if( answer.toLowerCase() == "si"){ + Game.iniciar(); + }else { + process.exit(); + } + }); + }); + } + + }) + } + + /** + * + * @description Lo Que Sucede Al Encontrar la habitacion de los caramelos... + */ + Win() { + Animation( Winner_Frames, 200, () => { + rl.question("🍭HAS GANADO!!🍭 encontraste la habitacion de los caramelos!\n\nQuieres Volver A Jugar?: ", ( answer ) => { + if( answer.toLowerCase() == "si" ){ + Game.iniciar(); + }else { + process.exit(); + } + }); + }); + } +} + +/** + * + * S T A R T A P P L I C A T I O N + * + */ + +let the_world; + +const Game = { + iniciar: function() { + the_world = new World(); + } +} + +Game.iniciar(); \ No newline at end of file From fb8925ea25d50db1b8a22d84b5bc0ee3fae6dc7f Mon Sep 17 00:00:00 2001 From: Stivaly Gomez <133545882+Stivaly@users.noreply.github.com> Date: Thu, 19 Oct 2023 18:07:26 -0300 Subject: [PATCH 0333/2103] Update Stivaly.py --- .../python/Stivaly.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/python/Stivaly.py" "b/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/python/Stivaly.py" index be66560115..ee6cc58bc1 100644 --- "a/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/python/Stivaly.py" +++ "b/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/python/Stivaly.py" @@ -9,7 +9,7 @@ if opcion == 1: # Solicitamos la clave para realizar la encriptación y la frase que vamos a encriptar key = int(input("Ingresa clave del 0 al 25")) - phrase = input("Ingresa la palabra que deseas cifrar").replace(" ","") + phrase = input("Ingresa la palabra que deseas cifrar").replace(" ","").upper() # Movilizamos la posición de los indices de la lista dinamica cesar_roulette = cesar_roulette[-key:] + cesar_roulette[:-key] encrypt = "" From ad5868434aa958c7aceb1310da74eafddb3fc54d Mon Sep 17 00:00:00 2001 From: xSharkhy Date: Fri, 20 Oct 2023 00:08:51 +0200 Subject: [PATCH 0334/2103] add: reto #41 python --- .../python/xsharkhy.py" | 245 ++++++++++++++++++ 1 file changed, 245 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/xsharkhy.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/xsharkhy.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/xsharkhy.py" new file mode 100644 index 0000000000..06559747aa --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/xsharkhy.py" @@ -0,0 +1,245 @@ +from random import randint, choice + + +def init(): + MAPS = { + 1: [ + ["🚪", "⬜️", "⬜️", "⬜️"], + ["⬜️", "👻", "⬜️", "⬜️"], + ["⬜️", "⬜️", "⬜️", "👻"], + ["⬜️", "⬜️", "🍭", "⬜️"] + ], + 2: [ + ["🚪", "⬜️", "⬜️", "⬜️"], + ["👻", "⬜️", "⬜️", "⬜️"], + ["⬜️", "⬜️", "⬜️", "🍭"], + ["⬜️", "⬜️", "👻", "⬜️"] + ], + 3: [ + ["⬜️", "⬜️", "⬜️", "🍭"], + ["⬜️", "👻", "⬜️", "⬜️"], + ["⬜️", "⬜️", "👻", "⬜️"], + ["🚪", "⬜️", "⬜️", "⬜️"] + ], + 4: [ + ["⬜️", "👻", "⬜️", "⬜️"], + ["🍭", "⬜️", "⬜️", "⬜️"], + ["⬜️", "⬜️", "👻", "⬜️"], + ["⬜️", "⬜️", "🚪", "⬜️"] + ], + 5: [ + ["⬜️", "⬜️", "👻", "⬜️"], + ["👻", "⬜️", "⬜️", "⬜️"], + ["⬜️", "⬜️", "🍭", "⬜️"], + ["⬜️", "⬜️", "🚪", "⬜️"] + ], + 6: [ + ["⬜️", "⬜️", "👻", "🍭"], + ["⬜️", "⬜️", "⬜️", "⬜️"], + ["🚪", "⬜️", "⬜️", "⬜️"], + ["⬜️", "⬜️", "⬜️", "👻"] + ], + 7: [ + ["⬜️", "⬜️", "👻", "⬜️"], + ["⬜️", "⬜️", "⬜️", "🍭"], + ["🚪", "⬜️", "⬜️", "⬜️"], + ["⬜️", "⬜️", "⬜️", "👻"] + ], + 8: [ + ["⬜️", "⬜️", "👻", "⬜️"], + ["🍭", "⬜️", "⬜️", "⬜️"], + ["⬜️", "⬜️", "⬜️", "🚪"], + ["⬜️", "⬜️", "👻", "⬜️"] + ], + 9: [ + ["⬜️", "⬜️", "🚪", "⬜️"], + ["👻", "⬜️", "⬜️", "⬜️"], + ["⬜️", "⬜️", "⬜️", "👻"], + ["⬜️", "⬜️", "⬜️", "🍭"] + ], + 10: [ + ["⬜️", "👻", "⬜️", "⬜️"], + ["⬜️", "⬜️", "⬜️", "🚪"], + ["👻", "⬜️", "⬜️", "⬜️"], + ["⬜️", "⬜️", "⬜️", "🍭"] + ] + } + + print("\nBienvenido a la Mansión Encantada!\n" + + "Para salir deberás responder preguntas en cada habitación.\n" + + "Al resolver correctamente un enigma, podrás desplazarte a la\n" + + "siguiente habitación.\n" + + "La partida acabará cuando llegues a la sala de los dulces.\n") + + GAME_MAP = MAPS[randint(1, len(MAPS))] + main(GAME_MAP) + + +def main(GAME_MAP: list[list]): + def print_map(player_position): + length: int = len(GAME_MAP) + printable_map: list[list] = [[GAME_MAP[i][j] + for j in range(length)] for i in range(length)] + + for i in range(length): + for j in range(length): + if seen_map[i][j] == 0: + if GAME_MAP[i][j] == "🚪": + printable_map[i][j] = "🚪" + elif GAME_MAP[i][j] == "👻": + printable_map[i][j] = "⬜️" + else: + printable_map[i][j] = "⬜️" + elif player_position and (i == player_position["x"] and j == player_position["y"]): + printable_map[i][j] = "👤" + elif GAME_MAP[i][j] == "🚪": + printable_map[i][j] = "🚪" + elif GAME_MAP[i][j] == "👻": + printable_map[i][j] = "👻" + + for i in printable_map: + print("".join(map(str, i))) + print("") + + def ask_question(*room): + question, choices = choice(list(QUESTIONS.items())) + print(f"ENIGMA! {question}") + + for index, answer in enumerate(choices): + print(f"\t{index + 1}: {answer}") + + correct_answer: int = list(choices.values()).index(1) + + answer = int(input("Respuesta: ")) - 1 + if answer != correct_answer: + print("Incorrecto!") + ask_question() + print("Correcto!") + if room: + print("Oh no! Un fantasma te ha atrapado!") + print("Debes responder otra pregunta para poder salir de la habitación.") + ask_question() + + def find_in_matrix(map: list, item: str) -> tuple[int, int]: + for i in range(len(map)): + for j in range(len(map[i])): + if map[i][j] == item: + return (i, j) + + def player_movement(player_position: dict) -> list: + MOVEMENT: dict = { + "Arriba": ("W", [-1, 0]), + "Abajo": ("S", [1, 0]), + "Izquierda": ("A", [0, -1]), + "Derecha": ("D", [0, 1]) + } + + available_moves = MOVEMENT.copy() + + if player_position["x"] == 0: + del available_moves["Arriba"] + elif player_position["x"] == 3: + del available_moves["Abajo"] + + if player_position["y"] == 0: + del available_moves["Izquierda"] + elif player_position["y"] == 3: + del available_moves["Derecha"] + + for move, value in list(available_moves.items()): + print(f"{value[0]}: {move}") + + valid_moves = [value[0] for value in available_moves.values()] + selected_move = "" + + while selected_move not in valid_moves: + selected_move = input( + "Hacia dónde quieres moverte? (Usa las teclas WASD): ").upper() + if selected_move not in valid_moves: + print("Movimiento inválido. Por favor, elige una dirección válida.") + + movement_vector = [ + value[1] for key, value in MOVEMENT.items() if value[0] == selected_move][0] + return movement_vector + + def update_player_position(movement_vector, player_position, seen_map): + player_position["x"] += movement_vector[0] + player_position["y"] += movement_vector[1] + + seen_map[player_position["x"]][player_position["y"]] = 1 + + def check_win(pos: dict, map: list) -> bool: + win_coords = find_in_matrix(map, "🍭") + player_coords = list(pos.values()) + + if win_coords[0] == player_coords[0] and win_coords[1] == player_coords[1]: + return True + + QUESTIONS: dict = { + "What is the capital of France?": { + "Paris": 1, + "London": 0, + "Berlin": 0, + "Madrid": 0 + }, + "Who wrote the play 'Romeo and Juliet'?": { + "William Shakespeare": 1, + "Charles Dickens": 0, + "Jane Austen": 0, + "Leo Tolstoy": 0 + }, + "What is the chemical symbol for gold?": { + "Au": 1, + "Ag": 0, + "Fe": 0, + "Cu": 0 + }, + "What is the largest planet in our solar system?": { + "Jupiter": 1, + "Mars": 0, + "Saturn": 0, + "Venus": 0 + }, + "Who is the 44th President of the United States?": { + "Barack Obama": 1, + "George W. Bush": 0, + "Bill Clinton": 0, + "Donald Trump": 0 + } + } + + player_position: list = False + seen_map: list[list] = [ + [0, 0, 0, 0], + [0, 0, 0, 0], + [0, 0, 0, 0], + [0, 0, 0, 0] + ] + + print_map(player_position) + + confirm: bool = True if input( + "¿Quieres entrar? (s/n): ") == ("s" or "S") else False + if confirm: + door_position = find_in_matrix(GAME_MAP, "🚪") + player_position = {"x": door_position[0], "y": door_position[1]} + seen_map[door_position[0]][door_position[1]] = 1 + + win_flag: bool = False + + while not win_flag: + print_map(player_position) + if GAME_MAP[player_position["x"]][player_position["y"]] == "👻": + ask_question("ghost") + else: + ask_question() + move = player_movement(player_position) + update_player_position(move, player_position, seen_map) + win_flag = check_win(player_position, GAME_MAP) + + print("Has encontrado los dulces! 🍭🍭🍭\n") + else: + print("Adios!") + + +init() From a0ca1ee8e09ea6dd88af5a697a3612dbb767a5ab Mon Sep 17 00:00:00 2001 From: xSharkhy Date: Fri, 20 Oct 2023 00:23:38 +0200 Subject: [PATCH 0335/2103] chore: refactor changes --- .../python/xsharkhy.py" | 214 ++++++++---------- 1 file changed, 99 insertions(+), 115 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/xsharkhy.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/xsharkhy.py" index 06559747aa..21ab38f54b 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/xsharkhy.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/xsharkhy.py" @@ -2,164 +2,158 @@ def init(): - MAPS = { + maps = { 1: [ ["🚪", "⬜️", "⬜️", "⬜️"], ["⬜️", "👻", "⬜️", "⬜️"], ["⬜️", "⬜️", "⬜️", "👻"], - ["⬜️", "⬜️", "🍭", "⬜️"] + ["⬜️", "⬜️", "🍭", "⬜️"], ], 2: [ ["🚪", "⬜️", "⬜️", "⬜️"], ["👻", "⬜️", "⬜️", "⬜️"], ["⬜️", "⬜️", "⬜️", "🍭"], - ["⬜️", "⬜️", "👻", "⬜️"] + ["⬜️", "⬜️", "👻", "⬜️"], ], 3: [ ["⬜️", "⬜️", "⬜️", "🍭"], ["⬜️", "👻", "⬜️", "⬜️"], ["⬜️", "⬜️", "👻", "⬜️"], - ["🚪", "⬜️", "⬜️", "⬜️"] + ["🚪", "⬜️", "⬜️", "⬜️"], ], 4: [ ["⬜️", "👻", "⬜️", "⬜️"], ["🍭", "⬜️", "⬜️", "⬜️"], ["⬜️", "⬜️", "👻", "⬜️"], - ["⬜️", "⬜️", "🚪", "⬜️"] + ["⬜️", "⬜️", "🚪", "⬜️"], ], 5: [ ["⬜️", "⬜️", "👻", "⬜️"], ["👻", "⬜️", "⬜️", "⬜️"], ["⬜️", "⬜️", "🍭", "⬜️"], - ["⬜️", "⬜️", "🚪", "⬜️"] + ["⬜️", "⬜️", "🚪", "⬜️"], ], 6: [ ["⬜️", "⬜️", "👻", "🍭"], ["⬜️", "⬜️", "⬜️", "⬜️"], ["🚪", "⬜️", "⬜️", "⬜️"], - ["⬜️", "⬜️", "⬜️", "👻"] + ["⬜️", "⬜️", "⬜️", "👻"], ], 7: [ ["⬜️", "⬜️", "👻", "⬜️"], ["⬜️", "⬜️", "⬜️", "🍭"], ["🚪", "⬜️", "⬜️", "⬜️"], - ["⬜️", "⬜️", "⬜️", "👻"] + ["⬜️", "⬜️", "⬜️", "👻"], ], 8: [ ["⬜️", "⬜️", "👻", "⬜️"], ["🍭", "⬜️", "⬜️", "⬜️"], ["⬜️", "⬜️", "⬜️", "🚪"], - ["⬜️", "⬜️", "👻", "⬜️"] + ["⬜️", "⬜️", "👻", "⬜️"], ], 9: [ ["⬜️", "⬜️", "🚪", "⬜️"], ["👻", "⬜️", "⬜️", "⬜️"], ["⬜️", "⬜️", "⬜️", "👻"], - ["⬜️", "⬜️", "⬜️", "🍭"] + ["⬜️", "⬜️", "⬜️", "🍭"], ], 10: [ ["⬜️", "👻", "⬜️", "⬜️"], ["⬜️", "⬜️", "⬜️", "🚪"], ["👻", "⬜️", "⬜️", "⬜️"], - ["⬜️", "⬜️", "⬜️", "🍭"] - ] + ["⬜️", "⬜️", "⬜️", "🍭"], + ], } - print("\nBienvenido a la Mansión Encantada!\n" + - "Para salir deberás responder preguntas en cada habitación.\n" + - "Al resolver correctamente un enigma, podrás desplazarte a la\n" + - "siguiente habitación.\n" + - "La partida acabará cuando llegues a la sala de los dulces.\n") + print( + "\nBienvenido a la Mansión Encantada!\n" + + "Para salir deberás responder preguntas en cada habitación.\n" + + "Al resolver correctamente un enigma, podrás desplazarte a la\n" + + "siguiente habitación.\n" + + "La partida acabará cuando llegues a la sala de los dulces.\n" + ) - GAME_MAP = MAPS[randint(1, len(MAPS))] - main(GAME_MAP) + game_map = maps[randint(1, len(maps))] + main(game_map) -def main(GAME_MAP: list[list]): +def main(game_map: list[list]): def print_map(player_position): - length: int = len(GAME_MAP) - printable_map: list[list] = [[GAME_MAP[i][j] - for j in range(length)] for i in range(length)] + display_map = [ + ["🚪" if game_map[i][j] == "🚪" else "⬜️" for j in range(map_size)] + for i in range(map_size) + ] - for i in range(length): - for j in range(length): + for i, row in enumerate(display_map): + for j, _ in enumerate(row): if seen_map[i][j] == 0: - if GAME_MAP[i][j] == "🚪": - printable_map[i][j] = "🚪" - elif GAME_MAP[i][j] == "👻": - printable_map[i][j] = "⬜️" - else: - printable_map[i][j] = "⬜️" - elif player_position and (i == player_position["x"] and j == player_position["y"]): - printable_map[i][j] = "👤" - elif GAME_MAP[i][j] == "🚪": - printable_map[i][j] = "🚪" - elif GAME_MAP[i][j] == "👻": - printable_map[i][j] = "👻" - - for i in printable_map: - print("".join(map(str, i))) + if game_map[i][j] == "": + display_map[i][j] = "⬜️" + elif player_position and (i, j) == tuple(player_position.values()): + display_map[i][j] = "👤" + elif game_map[i][j] == "👻": + display_map[i][j] = "👻" + + for row in display_map: + print("".join(map(str, row))) print("") - def ask_question(*room): + def ask_question(): question, choices = choice(list(QUESTIONS.items())) - print(f"ENIGMA! {question}") + print(f"ENIGMA! {question}") for index, answer in enumerate(choices): print(f"\t{index + 1}: {answer}") - correct_answer: int = list(choices.values()).index(1) + correct_answer_index = list(choices.values()).index(1) + user_answer_index = int(input("Respuesta: ")) - 1 - answer = int(input("Respuesta: ")) - 1 - if answer != correct_answer: + if user_answer_index != correct_answer_index: print("Incorrecto!") ask_question() - print("Correcto!") - if room: - print("Oh no! Un fantasma te ha atrapado!") - print("Debes responder otra pregunta para poder salir de la habitación.") - ask_question() + else: + print("Correcto!") + if game_map[player_position["x"]][player_position["y"]] == "👻": + print("Oh no! Un fantasma te ha atrapado!") + print( + "Debes responder otra pregunta para poder salir de la habitación." + ) + ask_question() - def find_in_matrix(map: list, item: str) -> tuple[int, int]: - for i in range(len(map)): - for j in range(len(map[i])): - if map[i][j] == item: - return (i, j) - - def player_movement(player_position: dict) -> list: - MOVEMENT: dict = { - "Arriba": ("W", [-1, 0]), - "Abajo": ("S", [1, 0]), - "Izquierda": ("A", [0, -1]), - "Derecha": ("D", [0, 1]) + def find_item_in_matrix( + matrix: list[list[str]], target_item: str + ) -> tuple[int, int]: + for i, row in enumerate(matrix): + for j, item in enumerate(row): + if item == target_item: + return i, j + + def get_valid_player_moves(player_position: dict) -> list: + movement_options = { + "W": (-1, 0), + "S": (1, 0), + "A": (0, -1), + "D": (0, 1), } - available_moves = MOVEMENT.copy() - - if player_position["x"] == 0: - del available_moves["Arriba"] - elif player_position["x"] == 3: - del available_moves["Abajo"] - - if player_position["y"] == 0: - del available_moves["Izquierda"] - elif player_position["y"] == 3: - del available_moves["Derecha"] - - for move, value in list(available_moves.items()): - print(f"{value[0]}: {move}") - - valid_moves = [value[0] for value in available_moves.values()] - selected_move = "" - - while selected_move not in valid_moves: - selected_move = input( - "Hacia dónde quieres moverte? (Usa las teclas WASD): ").upper() - if selected_move not in valid_moves: + valid_moves = [] + for move, vector in movement_options.items(): + new_position = { + "x": player_position["x"] + vector[0], + "y": player_position["y"] + vector[1], + } + if 0 <= new_position["x"] < map_size and 0 <= new_position["y"] < map_size: + valid_moves.append(move) + + chosen_move = "" + while chosen_move not in valid_moves: + chosen_move = input( + "Hacia dónde quieres moverte? (Usa las teclas WASD): " + ).upper() + if chosen_move not in valid_moves: print("Movimiento inválido. Por favor, elige una dirección válida.") - movement_vector = [ - value[1] for key, value in MOVEMENT.items() if value[0] == selected_move][0] + movement_vector = movement_options[chosen_move] return movement_vector def update_player_position(movement_vector, player_position, seen_map): @@ -169,73 +163,63 @@ def update_player_position(movement_vector, player_position, seen_map): seen_map[player_position["x"]][player_position["y"]] = 1 def check_win(pos: dict, map: list) -> bool: - win_coords = find_in_matrix(map, "🍭") + win_coords = find_item_in_matrix(map, "🍭") player_coords = list(pos.values()) - if win_coords[0] == player_coords[0] and win_coords[1] == player_coords[1]: + if win_coords == player_coords: return True - QUESTIONS: dict = { + QUESTIONS = { "What is the capital of France?": { "Paris": 1, "London": 0, "Berlin": 0, - "Madrid": 0 + "Madrid": 0, }, "Who wrote the play 'Romeo and Juliet'?": { "William Shakespeare": 1, "Charles Dickens": 0, "Jane Austen": 0, - "Leo Tolstoy": 0 - }, - "What is the chemical symbol for gold?": { - "Au": 1, - "Ag": 0, - "Fe": 0, - "Cu": 0 + "Leo Tolstoy": 0, }, + "What is the chemical symbol for gold?": {"Au": 1, "Ag": 0, "Fe": 0, "Cu": 0}, "What is the largest planet in our solar system?": { "Jupiter": 1, "Mars": 0, "Saturn": 0, - "Venus": 0 + "Venus": 0, }, "Who is the 44th President of the United States?": { "Barack Obama": 1, "George W. Bush": 0, "Bill Clinton": 0, - "Donald Trump": 0 - } + "Donald Trump": 0, + }, } - player_position: list = False - seen_map: list[list] = [ - [0, 0, 0, 0], - [0, 0, 0, 0], - [0, 0, 0, 0], - [0, 0, 0, 0] - ] + map_size = len(game_map) + player_position = None + seen_map = [[0] * map_size for _ in range(map_size)] print_map(player_position) - confirm: bool = True if input( - "¿Quieres entrar? (s/n): ") == ("s" or "S") else False + confirm = input("¿Quieres entrar? (s/n): ").lower() == "s" if confirm: - door_position = find_in_matrix(GAME_MAP, "🚪") + door_position = find_item_in_matrix(game_map, "🚪") player_position = {"x": door_position[0], "y": door_position[1]} seen_map[door_position[0]][door_position[1]] = 1 - win_flag: bool = False + win_flag = False while not win_flag: print_map(player_position) - if GAME_MAP[player_position["x"]][player_position["y"]] == "👻": - ask_question("ghost") + if game_map[player_position["x"]][player_position["y"]] == "👻": + ask_question() else: ask_question() - move = player_movement(player_position) + move = get_valid_player_moves(player_position) update_player_position(move, player_position, seen_map) - win_flag = check_win(player_position, GAME_MAP) + win_flag = check_win(player_position, game_map) print("Has encontrado los dulces! 🍭🍭🍭\n") else: From 0f78d30548865fa01e411c3804d7f2a7abf5e615 Mon Sep 17 00:00:00 2001 From: xSharkhy Date: Fri, 20 Oct 2023 00:29:24 +0200 Subject: [PATCH 0336/2103] chore: add types --- .../python/xsharkhy.py" | 64 ++++++++++--------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/xsharkhy.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/xsharkhy.py" index 21ab38f54b..bce4bb5add 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/xsharkhy.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/xsharkhy.py" @@ -1,8 +1,9 @@ from random import randint, choice +from typing import List, Dict, Tuple -def init(): - maps = { +def init() -> None: + maps: Dict[int, List[List[str]]] = { 1: [ ["🚪", "⬜️", "⬜️", "⬜️"], ["⬜️", "👻", "⬜️", "⬜️"], @@ -73,13 +74,13 @@ def init(): + "La partida acabará cuando llegues a la sala de los dulces.\n" ) - game_map = maps[randint(1, len(maps))] + game_map: List[List[str]] = maps[randint(1, len(maps))] main(game_map) -def main(game_map: list[list]): - def print_map(player_position): - display_map = [ +def main(game_map: List[List[str]]) -> None: + def print_map(player_position: Dict[str, int]) -> None: + display_map: List[List[str]] = [ ["🚪" if game_map[i][j] == "🚪" else "⬜️" for j in range(map_size)] for i in range(map_size) ] @@ -98,7 +99,7 @@ def print_map(player_position): print("".join(map(str, row))) print("") - def ask_question(): + def ask_question() -> None: question, choices = choice(list(QUESTIONS.items())) print(f"ENIGMA! {question}") @@ -121,31 +122,31 @@ def ask_question(): ask_question() def find_item_in_matrix( - matrix: list[list[str]], target_item: str - ) -> tuple[int, int]: + matrix: List[List[str]], target_item: str + ) -> Tuple[int, int]: for i, row in enumerate(matrix): for j, item in enumerate(row): if item == target_item: return i, j - def get_valid_player_moves(player_position: dict) -> list: - movement_options = { + def get_valid_player_moves(player_position: Dict[str, int]) -> List[str]: + movement_options: Dict[str, Tuple[int, int]] = { "W": (-1, 0), "S": (1, 0), "A": (0, -1), "D": (0, 1), } - valid_moves = [] + valid_moves: List[str] = [] for move, vector in movement_options.items(): - new_position = { + new_position: Dict[str, int] = { "x": player_position["x"] + vector[0], "y": player_position["y"] + vector[1], } if 0 <= new_position["x"] < map_size and 0 <= new_position["y"] < map_size: valid_moves.append(move) - chosen_move = "" + chosen_move: str = "" while chosen_move not in valid_moves: chosen_move = input( "Hacia dónde quieres moverte? (Usa las teclas WASD): " @@ -153,23 +154,27 @@ def get_valid_player_moves(player_position: dict) -> list: if chosen_move not in valid_moves: print("Movimiento inválido. Por favor, elige una dirección válida.") - movement_vector = movement_options[chosen_move] + movement_vector: Tuple[int, int] = movement_options[chosen_move] return movement_vector - def update_player_position(movement_vector, player_position, seen_map): + def update_player_position( + movement_vector: Tuple[int, int], + player_position: Dict[str, int], + seen_map: List[List[int]], + ) -> None: player_position["x"] += movement_vector[0] player_position["y"] += movement_vector[1] seen_map[player_position["x"]][player_position["y"]] = 1 - def check_win(pos: dict, map: list) -> bool: - win_coords = find_item_in_matrix(map, "🍭") - player_coords = list(pos.values()) + def check_win(pos: Dict[str, int], map: List[List[str]]) -> bool: + win_coords: Tuple[int, int] = find_item_in_matrix(map, "🍭") + player_coords: List[int] = list(pos.values()) if win_coords == player_coords: return True - QUESTIONS = { + QUESTIONS: Dict[str, Dict[str, int]] = { "What is the capital of France?": { "Paris": 1, "London": 0, @@ -197,27 +202,24 @@ def check_win(pos: dict, map: list) -> bool: }, } - map_size = len(game_map) - player_position = None - seen_map = [[0] * map_size for _ in range(map_size)] + map_size: int = len(game_map) + player_position: Dict[str, int] = {} + seen_map: List[List[int]] = [[0] * map_size for _ in range(map_size)] print_map(player_position) - confirm = input("¿Quieres entrar? (s/n): ").lower() == "s" + confirm: bool = input("¿Quieres entrar? (s/n): ").lower() == "s" if confirm: - door_position = find_item_in_matrix(game_map, "🚪") + door_position: Tuple[int, int] = find_item_in_matrix(game_map, "🚪") player_position = {"x": door_position[0], "y": door_position[1]} seen_map[door_position[0]][door_position[1]] = 1 - win_flag = False + win_flag: bool = False while not win_flag: print_map(player_position) - if game_map[player_position["x"]][player_position["y"]] == "👻": - ask_question() - else: - ask_question() - move = get_valid_player_moves(player_position) + ask_question() + move: Tuple[int, int] = get_valid_player_moves(player_position) update_player_position(move, player_position, seen_map) win_flag = check_win(player_position, game_map) From bbc37ca8440bf938ee42cd414f12f2f2406cb159 Mon Sep 17 00:00:00 2001 From: sebastian torres Date: Thu, 19 Oct 2023 19:09:55 -0500 Subject: [PATCH 0337/2103] Solucion reto #41 --- .../c#/sebastorresdev.cs" | 502 ++++++++++++++++++ 1 file changed, 502 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/sebastorresdev.cs" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/sebastorresdev.cs" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/sebastorresdev.cs" new file mode 100644 index 0000000000..9463e0838c --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/sebastorresdev.cs" @@ -0,0 +1,502 @@ +using System.Text; + +namespace ConsoleApp; + +internal class Program +{ + static void Main(string[] args) + { + Board board = new(4); + GameBoard gameBoard = new(board); + QuizGame game = new(gameBoard); + game.Run(); + } +} + +public class QuizGame +{ + private GameBoard _gameBoard; + + private readonly List _questions; + private int _currentQuestionIndex; + private int _live; + + public QuizGame(GameBoard gameBoard) + { + _questions = LoadQuestions(); + _currentQuestionIndex = 0; + _live = 5; + _gameBoard = gameBoard; + + Console.OutputEncoding = Encoding.UTF8; + Console.Title = "La casa encantada"; + Instructions(); + } + + private static void Instructions() + { + string prompt = @" +¡Bienvenido a la Mansión Encantada! +----------------------------------- + +Estás a punto de embarcarte en una aventura tenebrosa en una mansión abandonada llena de misterios y acertijos. +Tu misión es encontrar la elusiva habitación de los dulces escondidos en esta casa embrujada. + +🏰 La Mansión: +La mansión cuanta con habitacones donde habra una puerta de inicio y usted tendra que desplazarse +hasta encontrar la habilation de duces, si cae en una habitacion de fantasma tendra que resolver dos +acertijos para poder salir de alli. todas las habitaciones cuentan con acertijos o fantasmas. + +Prepárate para adentrarte en la oscuridad y demostrar tu astucia resolviendo enigmas. +¿Estás listo para enfrentar los desafíos de la Mansión Encantada? ¡Buena suerte! + +Presiona una tecla para iniciar... +"; + + Console.WriteLine(prompt); + Console.ReadKey(); + } + public void Run() + { + Console.Clear(); + Random random = new (); + + while (true) + { + _gameBoard.Run(); + int count = _gameBoard.GetNumberOfQuestions(); + + while (0 < count) + { + _gameBoard.DisplayBoard(); + ShowLive(); + + if (count == 3) + { + Console.WriteLine("🎉 ¡FELICIDADES, HAS GANADO! 🎉"); + Console.WriteLine("Presione un tacla para salir..."); + Console.ReadKey(); + return; + } + + _currentQuestionIndex = random.Next(_questions.Count - 1); + DisplayQuestion(); + + var answer = Console.ReadLine().ToUpper(); + + if (ValidateAnswer(answer)) + { + Console.ForegroundColor = ConsoleColor.DarkYellow; + Console.WriteLine("🎉 Respuesta correcta! 🎉"); + count--; + } + else + { + Console.ForegroundColor = ConsoleColor.DarkRed; + Console.WriteLine("💀 Respuesta incorrecta! 💀"); + _live--; + ShowAnswer(); + } + Console.ResetColor(); + if (_live == 0) + { + Console.WriteLine("❌ GAME OVER ❌"); + Console.WriteLine("Presione un tacla para volver al menu principal..."); + Console.ReadKey(); + return; + } + } + } + } + + private void ShowLive() + { + Console.WriteLine($"Vida: {_live}"); + } + + private bool ValidateAnswer(string answer) + { + var quiz = _questions[_currentQuestionIndex]; + if (answer.Length == 1 && char.ToUpper(answer[0]) >= 'A' && char.ToUpper(answer[0]) < 'A' + quiz.Options.Count) + { + int selectOption = char.ToUpper(answer[0]) - 'A'; + return selectOption == quiz.Answer; + } + return false; + } + + private void ShowAnswer() + { + var quiz = _questions[_currentQuestionIndex]; + Console.ForegroundColor = ConsoleColor.DarkGray; + Console.WriteLine($"La respuesta correcta es: {quiz.Options[quiz.Answer]}"); + } + + private static List LoadQuestions() + { + // Tambien se puede extraer de una fuente externa + return new() + { + new Quiz() + { + Question = " ¿Qué es lo que tiene ojos pero no puede ver?", + Answer = 0, + Options = new List{ "Un libro.", "Un teléfono.", "Un pez.", "Un árbol." } + }, // 1 + new Quiz() + { + Question = "¿Qué palabra se escribe incorrectamente en todos los diccionarios?", + Answer = 0, + Options = new List{ "Incorrectamente.", "Palabra.", "Diccionarios.", "Todos." } + }, // 2 + new Quiz() + { + Question = "Si tienes tres manzanas y tomas dos, ¿cuántas manzanas te quedan?", + Answer = 3, + Options = new List{ "Ninguna.", "Una.", "Dos.", "Tres." } + }, // 3 + new Quiz() + { + Question = "Si un avión se estrella justo en la frontera entre Estados Unidos y Canadá, ¿dónde entierras a los sobrevivientes?", + Answer = 2, + Options = new List{ "En Estados Unidos.", "En Canadá.", "No los entierras.", "En la frontera." } + }, // 4 + new Quiz() + { + Question = "Si tienes un cubo de hielo en un vaso y el hielo se derrite, ¿qué le sucede al nivel del agua?", + Answer = 2, + Options = new List{ "Aumenta.", "Disminuye.", "Permanece igual.", "Depende del clima." } + }, // 5 + new Quiz() + { + Question = "¿Cuál es la próxima letra en esta serie: A, E, I, M, ___?", + Answer = 1, + Options = new List{ "O.", "U.", "R.", "L." } + }, // 6 + new Quiz() + { + Question = "Cuanto más lo quites, más grande se vuelve. ¿Qué es?", + Answer = 0, + Options = new List{ "Un agujero.", "Un árbol.", "Un libro.", "Un coche." } + }, // 7 + new Quiz() + { + Question = "¿Cuántos meses tienen 28 días?", + Answer = 2, + Options = new List{ "Uno.", "Seis.", "Todos.", "Doce." } + }, // 8 + new Quiz() + { + Question = "¿Cuál es el animal que camina por la mañana con cuatro patas, por la tarde con dos patas y por la noche con tres patas?", + Answer = 2, + Options = new List{ "Perro.", "Gato.", "Hombre.", "Elefante." } + }, // 9 + new Quiz() + { + Question = "Tengo llaves pero no puedo abrir ninguna puerta. ¿Qué soy?", + Answer = 3, + Options = new List{ "Una computadora.", "Una escuela.", "Un músico.", "Un libro." } + }, // 10 + new Quiz() + { + Question = "¿Qué es lo que puede viajar alrededor del mundo sin moverse?", + Answer = 0, + Options = new List{ "Una carta.", "Un teléfono.", "Un avión.", "El viento." } + }, // 11 + new Quiz() + { + Question = "¿Qué es lo que es mío y sin embargo, lo usas más que yo?", + Answer = 0, + Options = new List{ "Mi nombre.", "Mis zapatos.", "Mi casa.", "Mi teléfono." } + }, // 12 + new Quiz() + { + Question = "Si lanzas una moneda al aire, ¿cuáles son las posibilidades de que caiga de canto?", + Answer = 1, + Options = new List{ "50%.", "0%.", "25%.", "75%." } + }, // 13 + new Quiz() + { + Question = "¿Qué palabra se deletrea incorrectamente en todos los diccionarios?", + Answer = 1, + Options = new List{ "Incorrectamente.", "Deletrea.", "Diccionarios.", "Todos." } + }, // 14 + new Quiz() + { + Question = "¿Qué es lo que tiene dientes pero no puede masticar?", + Answer = 1, + Options = new List{ "Un león.", "Un engranaje.", "Un tren.", "Un piano." } + }, // 15 + new Quiz() + { + Question = "Cuando intento comer, estoy roto. Cuando bebo, estoy bien. ¿Qué soy?", + Answer = 0, + Options = new List{ "Un vaso.", "Un plato.", "Un tenedor.", "Un cuchillo." } + }, // 16 + new Quiz() + { + Question = "¿Qué elemento químico es representado por el símbolo 'Fe' en la tabla periódica?", + Answer = 2, + Options = new List { "Hidrógeno", "Oxígeno", "Hierro", "Plata" } + }, // 17 + new Quiz() + { + Question = "¿Cuál es el planeta más cercano al Sol en nuestro sistema solar?", + Answer = 2, + Options = new List { "Venus", "Marte", "Mercurio", "Júpiter" } + }, // 18 + new Quiz() + { + Question = "¿Cuál es el proceso por el cual las plantas convierten la luz solar en energía química?", + Answer = 0, + Options = new List { "Fotosíntesis", "Respiración", "Evaporación", "Descomposición" } + }, // 19 + new Quiz() + { + Question = "¿Cuál es la unidad básica de la herencia genética?", + Answer = 2, + Options = new List { "Proteína", "Ácido ribonucleico (ARN)", "Gen", "Célula" } + }, // 20 + new Quiz() + { + Question = "¿Cuál es la fórmula química del agua?", + Answer = 0, + Options = new List { "H2O", "CO2", "CH4", "NaCl" } + }, // 21 + new Quiz() + { + Question = "¿Cuál es el proceso por el cual la sangre circula por el cuerpo humano?", + Answer = 2, + Options = new List { "Respiración", "Digestión", "Circulación", "Excreción" } + }, // 22 + new Quiz() + { + Question = "¿Qué famoso científico formuló la teoría de la relatividad?", + Answer = 2, + Options = new List { "Isaac Newton", "Charles Darwin", "Albert Einstein", "Galileo Galilei" } + }, // 23 + new Quiz() + { + Question = "¿Cuál es la capa exterior sólida de la Tierra?", + Answer = 2, + Options = new List { "Núcleo", "Manto", "Corteza", "Magma" } + }, // 24 + new Quiz() + { + Question = "¿Qué gas es esencial para la fotosíntesis y es liberado por los seres humanos al exhalar?", + Answer = 1, + Options = new List { "Oxígeno", "Dióxido de carbono", "Nitrógeno", "Hidrógeno" } + }, // 25 + new Quiz() + { + Question = "¿Cuál es la fuerza que atrae dos objetos con masa entre sí?", + Answer = 2, + Options = new List { "Fuerza electromagnética", "Fuerza nuclear fuerte", "Fuerza gravitatoria", "Fuerza de fricción" } + } // 26 + }; + } + + private void DisplayQuestion() + { + var quiz = _questions[_currentQuestionIndex]; + + Console.ForegroundColor = ConsoleColor.DarkMagenta; + Console.WriteLine($"Acertijo: {quiz.Question}"); + char option = 'A'; + + Console.ForegroundColor = ConsoleColor.Gray; + foreach (var choice in quiz.Options) + { + Console.WriteLine($"Opción {option}: {choice}"); + option++; + } + + Console.ForegroundColor = ConsoleColor.DarkGreen; + Console.Write("Tu respuesta: "); + } +} + +public class Quiz +{ + public int Answer { get; set; } + public string Question { get; set; } = string.Empty; + public List Options { get; set; } = new(); +} + +public class Room +{ + public bool IsActive { get; set; } + public string Content { get; set; } + public Room(string content, bool isActive = false) + { + IsActive = isActive; + Content = content; + } + public override string ToString() + { + return IsActive ? Content : "🔲"; + } +} + +public class Board +{ + public int Side { get; set; } + public Room[] Matrix { get; set; } + + public Board(int side) + { + Side = side; + Matrix = new Room[Side * Side]; + InitializeBoard(); + } + + private void InitializeBoard() + { + for (int i = 0; i < Side * Side; i++) + { + var room = new Room("❓"); + Matrix[i] = room; + } + } +} + +#region Tablero de juego +public class GameBoard +{ + private Board _board; + private int _currentPosition; + private int _side; + + public int CurrentPosition { get => _currentPosition; set => _currentPosition = value; } + + public GameBoard(Board board) + { + _board = board; + _side = board.Side; + _currentPosition = InitializeInitialDoor(); + AssignRoom(); + } + + private void AssignRoom() + { + Random random = new(); + int index = random.Next(_side * _side); + + // asginamos el dulce + while (_board.Matrix[index].Content != "❓") + { + index = random.Next(_side * _side); + } + _board.Matrix[index] = new Room("🍭"); + + // Obtenemos la cantidad de fantasma que apareceran + // considerandose que minimanete haya 2 fantasmas + int countGhost = random.Next(2, _side * _side - 4); + + // Asignamos los fantasmas + index = random.Next(_side * _side); + for (int i = 0; i < countGhost; i++) + { + while (_board.Matrix[index].Content != "❓") + { + index = random.Next(_side * _side); + } + _board.Matrix[index] = new Room("👻"); + } + } + private int InitializeInitialDoor() + { + Random random = new(); + int index = random.Next(_side * _side); + + // Asigna solo a los extremos + while (!(index <= _side || index >= (_side * (_side - 1)) || index % _side == 0 || (index + 1) % _side == 0)) + { + index = random.Next(_side * _side); + } + + _board.Matrix[index] = new Room("🚪", true); + return index; + } + + public void Run() + { + DisplayBoard(); + string input = Input.ReadInput(GetMessage()); + while (!ValidateMove(input)) + { + Console.WriteLine("Moviemiento no valido"); + input = Input.ReadInput(GetMessage()); + } + MovePlayer(input); + } + + public int GetNumberOfQuestions() + { + if (_board.Matrix[_currentPosition].Content == "❓") return 1; + if (_board.Matrix[_currentPosition].Content == "👻") return 2; + if (_board.Matrix[_currentPosition].Content == "🍭") return 3; + return 0; + } + private string GetMessage() + { + string ms = string.Empty; + ms += ValidateMove("N") ? "N ↑ - " : ""; + ms += ValidateMove("S") ? "S ↓ - " : ""; + ms += ValidateMove("E") ? "E → - " : ""; + ms += ValidateMove("W") ? "W ← - " : ""; + return ms; + } + private bool ValidateMove(string move) + { + if (move == "E" && (_currentPosition + 1) % _side == 0) return false; + if (move == "W" && _currentPosition % _side == 0) return false; + if (move == "N" && _currentPosition < _side) return false; + if (move == "S" && _currentPosition >= _side * (_side - 1)) return false; + + return true; + } + private void MovePlayer(string move) + { + _currentPosition += move == "E" ? 1 : 0; + _currentPosition -= move == "W" ? 1 : 0; + _currentPosition -= move == "N" ? _side : 0; + _currentPosition += move == "S" ? _side : 0; + _board.Matrix[_currentPosition].IsActive = true; + } + public void DisplayBoard() + { + int index, side = _board.Side; + for (int i = 0; i < side; i++) + { + for (int j = 0; j < side; j++) + { + index = side * i + j; + if (index == _currentPosition) Console.Write("🧛"); + else Console.Write(" "); + + if (index == _currentPosition) Console.Write(_board.Matrix[index]); + else Console.Write(_board.Matrix[index]); + } + Console.WriteLine(); + } + } +} +#endregion + +public static class Input +{ + public static string ReadInput(string ms) + { + string inputKey; + Console.WriteLine($"Donde quieres desplazarte {ms}\b\b "); + inputKey = Console.ReadLine().ToUpper(); + + while (inputKey != "N" && inputKey != "S" && inputKey != "E" && inputKey != "W") + { + Console.WriteLine("Opcion Invalida"); + inputKey = Console.ReadLine().ToUpper(); + } + return inputKey; + } +} \ No newline at end of file From abb5db3f7eae6d58e05b933f9195f6d6fc1a11af Mon Sep 17 00:00:00 2001 From: blfuentes Date: Fri, 20 Oct 2023 09:24:55 +0200 Subject: [PATCH 0338/2103] Reto #41 - F# MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit correción fila/columna array2d --- .../f#/blfuentes.fsx" | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" index 678e87afbe..692ba0ad64 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/f#/blfuentes.fsx" @@ -46,9 +46,9 @@ let generarFantasma() = let construirCasa() = let casa = Array2D.zeroCreate 4 4 - for col in 0 .. 3 do - for fila in 0 .. 3 do - casa[col, fila] <- { Posicion = { Fila = fila; Columna = col }; Tipo = VACIO } + for fila in 0 .. 3 do + for col in 0 .. 3 do + casa[fila, col] <- { Posicion = { Fila = fila; Columna = col }; Tipo = VACIO } let puerta = { Posicion = { Fila = 0; Columna = 0 }; Tipo = PUERTA } casa[0, 0] <- puerta let dulce = { Posicion = { Fila = 3; Columna = 2 }; Tipo = DULCE } @@ -56,9 +56,9 @@ let construirCasa() = casa let mostrarCasa (casa: Habitacion[,]) = - for col in 0 .. 3 do - for fila in 0 .. 3 do - printf "%s" (pintarASCII casa[col, fila].Tipo) + for fila in 0 .. 3 do + for col in 0 .. 3 do + printf "%s" (pintarASCII casa[fila, col].Tipo) printfn "" let rec resolverPregunta() = @@ -73,12 +73,12 @@ let rec resolverPregunta() = let entrarHabitacion (casa: Habitacion[,]) (posicion: Coordenada) = - let habitacion: Habitacion = casa.[posicion.Columna, posicion.Fila] + let habitacion: Habitacion = casa.[posicion.Fila, posicion.Columna] let habitacionOcupada = if habitacion.Tipo = TipoHabitacion.VACIO then - casa[posicion.Columna, posicion.Fila] <- { Posicion = posicion; Tipo = if generarFantasma() then FANTASMA else VACIO } - casa[posicion.Columna, posicion.Fila] + casa[posicion.Fila, posicion.Columna] <- { Posicion = posicion; Tipo = if generarFantasma() then FANTASMA else VACIO } + casa[posicion.Fila, posicion.Columna] else habitacion @@ -89,7 +89,7 @@ let entrarHabitacion (casa: Habitacion[,]) (posicion: Coordenada) = false | VACIO -> printfn "No hay nada en esta habitacion. Responde la pregunta para continuar" - casa[posicion.Columna, posicion.Fila] <- { Posicion = posicion; Tipo = USUARIO } + casa[posicion.Fila, posicion.Columna] <- { Posicion = posicion; Tipo = USUARIO } resolverPregunta() false | FANTASMA -> @@ -98,12 +98,12 @@ let entrarHabitacion (casa: Habitacion[,]) (posicion: Coordenada) = resolverPregunta() printfn "1 de 2...Veamos la segunda." resolverPregunta() - casa[posicion.Columna, posicion.Fila] <- { Posicion = posicion; Tipo = USUARIO } + casa[posicion.Fila, posicion.Columna] <- { Posicion = posicion; Tipo = USUARIO } false | DULCE -> printfn "Has encontrado un dulce" printConColor "Has ganado el juego!" ConsoleColor.DarkMagenta - casa[posicion.Columna, posicion.Fila] <- { Posicion = posicion; Tipo = USUARIO } + casa[posicion.Fila, posicion.Columna] <- { Posicion = posicion; Tipo = USUARIO } true | USUARIO -> printfn "Ya estas en esta habitacion." @@ -114,10 +114,10 @@ let rec leerDireccion(usuario: Coordenada) = let direccion = leerEntradaValida "Elige una dirección." [|"norte"; "sur"; "este"; "oeste"|] let coordinate = match direccion with - | "norte" -> { Fila = 0; Columna = -1 } - | "sur" -> { Fila = 0; Columna = 1 } - | "este" -> { Fila = 1; Columna =0 } - | "oeste" -> { Fila = -1; Columna = 0 } + | "norte" -> { Fila = -1; Columna = 0 } + | "sur" -> { Fila = 1; Columna = 0 } + | "este" -> { Fila = 0; Columna = 1 } + | "oeste" -> { Fila = 0; Columna = -1 } | _ -> leerDireccion(usuario) let nuevaPosicion = { Fila = usuario.Fila + coordinate.Fila; Columna = usuario.Columna + coordinate.Columna } if nuevaPosicion.Fila < 0 || nuevaPosicion.Fila > 3 || nuevaPosicion.Columna < 0 || nuevaPosicion.Columna > 3 then @@ -129,9 +129,9 @@ let rec leerDireccion(usuario: Coordenada) = let rec moverUsuario (casaMemo: Habitacion[,]) (casa: Habitacion[,]) (usuario: Coordenada) = let direccion = leerDireccion(usuario) let nuevoUsuario = { Posicion = { Fila = usuario.Fila + direccion.Fila; Columna = usuario.Columna + direccion.Columna }; Tipo = USUARIO } - let memoEstado: Habitacion = casaMemo.[usuario.Columna, usuario.Fila] + let memoEstado: Habitacion = casaMemo.[usuario.Fila, usuario.Columna] let fin = entrarHabitacion casa nuevoUsuario.Posicion - casa[usuario.Columna, usuario.Fila] <- memoEstado + casa[usuario.Fila, usuario.Columna] <- memoEstado if not fin then mostrarCasa casa moverUsuario casaMemo casa nuevoUsuario.Posicion From 547126b4e48af182cc75ff7e71bee935d920af9d Mon Sep 17 00:00:00 2001 From: patriciotrujilllo Date: Fri, 20 Oct 2023 09:17:17 -0300 Subject: [PATCH 0339/2103] Reto #30 resolve --- .../javascript/patriciotrujilllo.js | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Retos/Reto #30 - EL TECLADO T9 [Media]/javascript/patriciotrujilllo.js diff --git a/Retos/Reto #30 - EL TECLADO T9 [Media]/javascript/patriciotrujilllo.js b/Retos/Reto #30 - EL TECLADO T9 [Media]/javascript/patriciotrujilllo.js new file mode 100644 index 0000000000..ceedfad2fa --- /dev/null +++ b/Retos/Reto #30 - EL TECLADO T9 [Media]/javascript/patriciotrujilllo.js @@ -0,0 +1,32 @@ +/* + * Los primeros dispositivos móviles tenían un teclado llamado T9 + * con el que se podía escribir texto utilizando únicamente su + * teclado numérico (del 0 al 9). + * + * Crea una función que transforme las pulsaciones del T9 a su + * representación con letras. + * - Debes buscar cuál era su correspondencia original. + * - Cada bloque de pulsaciones va separado por un guión. + * - Si un bloque tiene más de un número, debe ser siempre el mismo. + * - Ejemplo: + * Entrada: 6-666-88-777-33-3-33-888 + * Salida: MOUREDEV + */ + +const tupla = [ + ['a','b','c'],['d','e','f'], + ['g','h','i'],['j','k','l'],['m','n','o'], + ['p','q','r','s'],['t','u','v'],['w','x','y','z'] +] + +const celularT9 = (word) =>{ + const separatorChar = word.split('-') + + let traslateWord = [] + separatorChar.forEach((number)=>{ + const transformNumber = parseInt(number.split('')[0]) + traslateWord.push(tupla[transformNumber-2][number.length-1]) + }) + return traslateWord.join('') +} +console.log(celularT9('6-666-88-777-33-3-33-888')) \ No newline at end of file From f8f19f09da88e43bf66b1c2c788e6152d4ce7e79 Mon Sep 17 00:00:00 2001 From: Luis Dellamea Date: Fri, 20 Oct 2023 09:51:53 -0300 Subject: [PATCH 0340/2103] Finalizado Reto 41 Casa Encantada --- .../python/lfd1983.py" | 219 ++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/lfd1983.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/lfd1983.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/lfd1983.py" new file mode 100644 index 0000000000..780e5785da --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/lfd1983.py" @@ -0,0 +1,219 @@ +# /* RETO #41: LA CASA ENCANTADA DE MOUREDEV +# * Este es un reto especial por Halloween. +# * Te encuentras explorando una mansión abandonada llena de habitaciones. +# * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. +# * Tu misión es encontrar la habitación de los dulces. +# * +# * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. +# * (Tienes total libertad para ser creativo con los textos) +# * +# * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 +# * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. +# * (16 habitaciones, siendo una de entrada y otra donde están los dulces) +# * Esta podría ser una representación: +# * 🚪⬜️⬜️⬜️ +# * ⬜️👻⬜️⬜️ +# * ⬜️⬜️⬜️👻 +# * ⬜️⬜️🍭⬜️ +# * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. +# * Si no lo aciertas no podrás desplazarte. +# * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. +# * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) +# * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. +# * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y +# * tengas que responder dos preguntas para salir de ella. +# */ + +def generarMansion(): + #devuelve una lista con 16 elementos de la mansion: habitaciones vacías, fantasmas random + #puerta de entrada y habitación de los dulces + + import random + + vectorMansion = list('⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜') + + # vector posiciones mantiene las posiciones no asignadas + posiciones = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] + + posicionEntrada = posiciones[random.randint(0,len(posiciones)-1)] + # elimino las posiciones ya sorteadas, para no sobreescribir + posiciones.remove(posicionEntrada) + + posicionDulces = posiciones[random.randint(0,len(posiciones)-1)] + posiciones.remove(posicionDulces) + + vectorMansion[posicionEntrada]="🚪" #genero entrada en posicion random + vectorMansion[posicionDulces]="🍭" + + for pos in posiciones: #10% de probabilidad de encontrar un fantasma en los cuartos restantes + if random.randint(0,9) == 0: + vectorMansion[pos] = "👻" + return vectorMansion + + +def mostrarMansionCompleta(vectorMansion): + #función para prueba, muestra la mansion completa + # + mansion = [vectorMansion[0:4],vectorMansion[4:8],vectorMansion[8:12],vectorMansion[12:16]] + for m in mansion: + print(m) + +def mostrarMansion(vectorMansion,posicionActual,juegoTerminado): + + copiaMansion = vectorMansion.copy() + print("\nEste es el plano de la Mansión Embrujada:") + for i in range(0,len(copiaMansion)): + if copiaMansion[i] != "🚪" : + copiaMansion[i] = "⬜" + + copiaMansion[posicionActual]= "🧑" + if juegoTerminado: #en caso de juegoTerminado reemplazo la persona por la habitación de los dulces + copiaMansion[posicionActual]="🍭" + + mansionMatriz = [copiaMansion[0:4],copiaMansion[4:8],copiaMansion[8:12],copiaMansion[12:16]] + for m in mansionMatriz: + print(" ".join(m)) + print("") + +def obtenerMovimientosPosibles(posicionActual): + direcciones = { + "N":["Norte",True], + "S":["Sur",True], + "E":["Este",True], + "O":["Oeste",True] + } + if posicionActual in [0,1,2,3]: + direcciones["N"] = ["Norte",False] + if posicionActual in [12,13,14,15]: + direcciones["S"] = ["Sur",False] + if posicionActual in [0,4,8,12]: + direcciones["O"] = ["Oeste",False] + if posicionActual in [3,7,11,15]: + direcciones["E"] = ["Este",False] + + return direcciones #retorna diccionario con las direcciones + +def obtenerDireccion(posicionActual): + #muestra las opciones posibles de dirección y obtiene la elección del usuario + + print("¿En qué dirección quieres desplazarte?") + direcciones = obtenerMovimientosPosibles(posicionActual) + opcionesDisponibles=[] + + for clave,valor in direcciones.items(): + if valor[1]: + print(f'Ingresa {clave} para desplazarte al {valor[0]}') + opcionesDisponibles.append(clave) + + direccionElegida = input("-->").upper() + + if not direccionElegida in opcionesDisponibles: + print("Opción Incorrecta") + + else: + return direccionElegida + + +def desplazar(posicionActual,direccionElegida): + #retorna nueva posición según la dirección elegida + + if direccionElegida == "N": + posicionActual -=4 + elif direccionElegida == "S": + posicionActual += 4 + elif direccionElegida == "E": + posicionActual += 1 + elif direccionElegida == "O": + posicionActual -= 1 + + return posicionActual + +def generarEnigmasPorHabitacion(mansion): + #construye un diccionario con el nro de habitación como clave y los acertijos como valor + + import random + + enigmas = [["5-2= ","3"],["17-7= ","10"],["98-18= ","80"],["25-20= ","5"],["50*4= ","200"],["5-2= ","3"],["17-7= ","10"],["98-18= ","80"],["25-20= ","5"],["50*4= ","200"],["5-2= ","3"],["17-7= ","10"],["98-18= ","80"],["25-20= ","5"],["50*4= ","200"],["5-2= ","3"],["17-7= ","10"],["98-18= ","80"],["25-20= ","5"],["50*4= ","200"],["5-2= ","3"],["17-7= ","10"],["98-18= ","80"],["25-20= ","5"],["50*4= ","200"],["5-2= ","3"],["17-7= ","10"],["98-18= ","80"],["25-20= ","5"],["50*4= ","200"]] + + enigmasPorHabitación = {} + + for i in range(0,len(mansion)): + if mansion[i] == "👻": #la habitación del fantasma tiene 2 enigmas + aleatorio = random.randint(0,len(enigmas)-1) + enigma1 = enigmas[aleatorio] + del(enigmas[aleatorio]) # los enigmas utilizados se van eliminando + + aleatorio = random.randint(0,len(enigmas)-1) + enigma2 = enigmas[aleatorio] + del(enigmas[aleatorio]) + + enigmasPorHabitación[i] = [enigma1, enigma2] + + elif mansion[i] == "🚪" or mansion[i]== "🍭": #la puerta no tiene enigma + enigmasPorHabitación[i] = [] + + elif mansion[i]== "⬜": #la habitación vacía tiene un enigma + aleatorio = random.randint(0,len(enigmas)-1) + enigmasPorHabitación[i] = [enigmas[aleatorio]] + del(enigmas[aleatorio]) + + return enigmasPorHabitación + + +def resolverEnigmas(habitacion,mansion,enigmasPorHabitacion): + + + if mansion[habitacion] == "👻" or mansion[habitacion] == "⬜": + #en estos casos debe responder preguntas + + pregunta="pregunta" #para mostrar "pregunta" o "preguntas" según corresponda + if mansion[habitacion] == "👻": + pregunta="preguntas" + + print(f'Para salir de esta habitación: {mansion[habitacion]} debes responder {len(enigmasPorHabitacion[habitacion])} {pregunta}') + + for i in enigmasPorHabitacion[habitacion]: + respuesta = input(f'Responde: {i[0]}') + if respuesta == i[1]: + print("Respuesta correcta") + continue + else: + print("Respuesta incorrecta, no puedes salir de esta habitación") + return False #al responder incorrectamente una de las preguntas de la habitación retorna False + return True + +def juego(): + import os + mansion = generarMansion() + enigmasPorHabitacion = generarEnigmasPorHabitacion(mansion) + + posicionActual = mansion.index("🚪") + + print("***** Bienvenido al Juego de la Mansión Embrujada ******") + print("Debes moverte por las habitaciones de la Mansión Embrujada hasta encontrar la Habitación de los Dulces \nPara salir de una habitación vacía debes resolver un enigma\nPara salir de una habitación con fastasma debes resolver dos enigmas\n M ¡Mucha Suerte!!!") + # mostrarMansionCompleta(mansion) + + while True: + + mostrarMansion(mansion,posicionActual,False) + + if mansion[posicionActual] == "🍭": # el juego ha terminado + break + + elif resolverEnigmas(posicionActual,mansion,enigmasPorHabitacion): #si ha resuelto los enigmas + direccionElegida = obtenerDireccion(posicionActual) + if direccionElegida: + posicionActual = desplazar(posicionActual,direccionElegida) + + else: #si no ha resuelto los enigmas + input("Presiona una tecla para continuar") + os.system('cls') + + os.system('cls') + print("********** GANASTE!!! \n\nEncontraste la habitación de los dulces\ny lograrse salir de la Mansión Embrujada") + mostrarMansion(mansion,posicionActual,True) + input("Presiona una tecla para Salir") + +juego() + + From 0ed46b8fb00b1c7d4c5b5a5bf2affecd18b9d05b Mon Sep 17 00:00:00 2001 From: PancheteG3D <66872192+PancheteG3D@users.noreply.github.com> Date: Fri, 20 Oct 2023 14:29:15 +0100 Subject: [PATCH 0341/2103] PancheteG3D.py --- .../python/PancheteG3D.py" | 229 ++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/PancheteG3D.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/PancheteG3D.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/PancheteG3D.py" new file mode 100644 index 0000000000..19fef67c2d --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/PancheteG3D.py" @@ -0,0 +1,229 @@ +import random, os, webbrowser + +#Creado el 19/10/2023 por JuanG3D +print(" Reto #41 - LA CASA ENCANTADA ") +print("""Este es mi primer reto para el canal de Mouredev +El juego trata de caminar por una casa 🏚️ y encontrar unos dulces 🍭. +Empiezas con 4 vidas ❤️, y si fallas alguna pregunta, perderás una vida, así por la cara. +Y hay un 10% de posibilidades de que te encuentres con un +amistoso fantasma 👻 que te quitará una vida y te hará dos preguntas. +Las preguntas son de la misma temática que la del creador del reto, o sea, de programación. +Así que no le pongas este juego a tu abuela de 90 años, porque le va a explotar la cabeza. +Espero que te lo pases bien con el juego. +NOTA: El juego está creado en Python, pero no te fíes mucho del +código porque no soy ningún crack de la programación.""") +input('Dale a cualquier tecla para comenzar el juego, muahaha!\t') +os.system('cls') + +# Creando array de la casa encantada +hauntedHouse = [] +for x in range(4): + for y in range(4): + hauntedHouse.append((x, y)) + +# Creando una puerta en una de las 4 esquinas de la casa +door = random.choice([(0,0), (0,3), (3,0), (3,3)]) + +# Creando la habitacion de los dulces en una posición random alejada de la puerta +candyArr = [] +op1, op2 = "", "" +x = door[0] +y = 3 if door[1]<1 else 0 +op1 = "+" if door[0]<1 else "-" +op2 = "+" if door[1]>1 else "-" +for i in range(4): + candyArr.append((eval(str(x)+op1+str(i)), y)) +for j in range(3): + candyArr.append((candyArr[3][0], eval(str(y)+op2+str(j)+op2+str(1)))) +candy = random.choice(candyArr) +iVidas = 4 + +# Dibujando la casa encantada +dulces = "⬜️" +puerta = "🚪" +habitacion = "⬜️" +vidas = "❤️" +cabeza = ["💀", "🤕", "🤒", "🥴", "😀"] + +row = "" +posActual = door +for i in range(4): + for j in range(4): + if i == door[0] and j == door[1]: + row += puerta + elif i == candy[0] and j == candy[1]: + row += dulces + elif i == posActual[0] and j == posActual[1]: + row += cabeza[iVidas] + else: + row += habitacion + row += "\n" +print(vidas * iVidas) +print(row) +questionArr = ["¿Para qué sirve el @ en Python?", + "¿Con qué lenguaje se está imprimiendo el siguiente Hola Mundo?\n\techo \"Hola Mundo\";", + "¿Cuál de estos lenguajes es el más antiguo?", + "¿Cuál de estos lenguajes es el más moderno?", + "¿Cómo se llama el primer virus informático de la historia?", + "¿Cómo se imprime Hola Mundo usando Ruby?", + "¿Qué lenguaje de programación creó Steve Jobs?", + "¿En qué lenguaje está escrito WhatsApp?", + "¿Cómo se obtiene la longitud de un array \"miArray\" en Lua?", + "¿En qué lenguaje está escrito BitTorrent?", + "¿De qué tipo sería la variable const = 4.5 en JavaScript?", + "¿Qué resultado se obtendría al hacer Console.WriteLine(\"12\" + \"34\"); en C#?", + "¿Qué resultado se obtendría en Java al hacer:\n boolean valor = false;\n if(valor = true){\n System.out.println(\"Es true\");\n }\n else{\n System.out.println(\"No es true\");\n}", + "¿En qué lenguaje está inspirado C#?", + "¿Cuál de los siguientes lenguajes no es interpretado?", + "¿Cuál de los siguientes lenguajes no es compilado?", + "¿Java es un lenguaje compilado o interpretado?", + "¿Qué pasa si en C# hacemos:\n for(byte i = 0; i < 300; i++){\n Console.WriteLine(i);\n }", + "¿Qué resultado dará esta instrucción de Kotlin:\n println(Math.floor(3.1416))", + "¿Cómo se añade un nuevo item al ArrayList \"miLista\" en C#?", + "¿Cómo de grande puede ser un número de tipo Int32?", + "¿Cuántos bits son 1 byte?", + "Si a una variable le ponemos el nombre MiVariableDeEjemplo, ¿qué caso estamos usando?", + "¿Cómo podemos insertar en Kotlin una variable \"val edad = 25\" dentro de un string para imprimirlo en pantalla?", + "¿Cómo se comentan múltiples líneas en Erlang?", + "¿Qué se imprimirá en pantalla si escribimos ésto en C++?\n int valor = 5;\n std::cout << &valor;", + "¿Cómo se llama esta estructura en TypeScript?\n personaVIP ? '2.00€' : '10.00€';", + "¿Qué se imprimirá en pantalla si en Rust hacemos ésto:\n let numero = 10;\n numero = 12;\n println!(\"{}\", numero);", + "¿Qué significa en Pascal lo siguiente?\n valor := 1;", + "¿Cuál fue el primer lenguaje de programación orientado a objetos?"] +posiblesRespuestas = ["A: Sirve para enlazar subatributos\nB: No sirve pa' ná. ¿Acaso has visto un @ en Python alguna vez?\nC: Sirve como prefijo para decorar funciones.\nD: Sirve para calcular la inversa de una matriz adjunta.", + "A: PHP\nB: Clojure\nC: C++\nD: Rust", + "A: Perl\nB: Python\nC: Erlang\nD: Objective-C", + "A: Dart\nB: Zig\nC: Kotlin\nD: Haxe", + "A: Melissa\nB: Stoned\nC: Creeper\nD: Lovebug\n", + "A: puts Hola Mundo\nB: print('Hola Mundo');\nC: System.out.println(\"Hola Mundo\");\nD: console.log(\"Hola Mundo\");", + "A: PostScript\nB: Turbo Pascal\nC: Smalltalk\nD: No creó nunca ningún lenguaje.", + "A: C#\nB: Erlang\nC: Scala\nD: ActionScript", + "A: miArray->length\nB: miArray.length()\nC: #miArray\nD: len(miArray)", + "A: Python\nB: C++\nC: JavaScript\nD: Ruby", + "A: bigint\nB: object\nC: float\nD: number", + "A: 12 + 34\nB: 1234\nC: 46\nD: Runtime Exception", + "A: \"No es true\"\nB: \"error: cannot find symbol\"\nC: \"Es true\"\nD: \"Es más o menos true\"", + "A: En JavaScript\nB: En C++\nC: En Java\nD: En Pascal", + "A: Go\nB: Python\nC: Lua\nD: PHP", + "A: Haskell\nB: Rust\nC: Erlang\nD: JavaScript", + "A: Interpretado\nB: Compilado e interpretado\nC: Desfragmentado\nD: Compilado", + "A: Que va a ignorar el bucle for y no imprimirá nada.\nB: Que va a imprimir números desde 0 hasta 300.\nC: Que se va a quedar encerrado en el bucle para toda la eternidad.\nD: Que va a imprimir números desde 0 hasta 299.", + "A: 3.0\nB: 4\nC: 0.0\nD: 3", + "A: miLista.append(\"item\");\nB: miLista.insert(\"item\");\nC: miLista.push(\"item\");\nD: miLista.Add(\"item\");", + "A: Entre cinco y diez millones.\nB: Poco más de dos mil millones.\nC: Tropecientos millones.\nD: Un millón y medio, a ojo de buen cubero.", + "A: 32\nB: 2\nC: 8\nD: 64", + "A: Pascal Case\nB: Snake Case\nC: Kebab Case\nD: Camel Case", + "A: print(\"Tengo {edad} años.\")\nB: print(\"Tengo \"..edad..\" años.\")\nC: print(\"Tengo @edad años.\")\nD: print(\"Tengo $edad años.\")", + "A: /* Comentario múltiple */\nB: Erlang no tiene comentario múltiple\nC: --[[ Comentario múltiple ]]\nD: {- Comentario múltiple -}", + "A: Error: invalid type argument\nB: 5.0\nC: Algo como \"0x7ffe932f5afc\" (dirección de memoria)\nD: 5", + "A: Operador ternario\nB: Condicional compuesto\nC: Switch simple\nD: Operador de línea", + "A: 10\nB: Error: overwritten before being read\nC: 12\nD: Error: cannot assign twice to immutable variable", + "A: A la variable \"valor\" se la divide por 1.\nB: Se crea una variable \"valor\" con valor 1.\nC: Se le suma 1 a la variable \"valor\".\nD: Syntax error.", + "A: Pascal\nB: Cobol\nC: Simula 67\nD: Fortran"] +fantasmasList = ["¡OJO! Un amistoso fantasma 👻 te da la bienvenida con un puñetazo en el pecho y con dos preguntas para que te rebanes un poco los sesos:", + "¡ATENCIÓN! En la habitación hay un cacho fantasma 👻 que te saluda con una patada en la canilla y con dos preguntas para que te explote un poco el cerebro:", + "¡CUIDADO! Un fantasma 👻 te sorprende con un palo en las costillas y con dos preguntas para que sufras un poco:", + "¡OJO! Un risueño fantasma 👻 te saluda con un navajazo en la ingle, y quiere aprovechar para preguntarte dos cosas porque mañana tiene examen de informática:", + "¡ATENCIÓN! Un fantasma 👻 con crisis nerviosa te encaja un cuchillazo en el riñón y te quiere preguntar dos cositas", + "¡CUIDADO! Te encuentras con un fantasma 👻 que te arranca una oreja de un bocado y te hace dos preguntas así, sin venir mucho a cuento.", + "¡OJO! Un fantasma 👻 muy divertido te clava un picahielos en la rodilla y te hace dos preguntas sin mucho sentido:", + "¡ATENCIÓN! Un fantasma 👻 muy gracioso te quema un ojo con un cigarro, y procede a preguntarte dos dudillas que tiene de programación:", + "¡CUIDADO! Te tropiezas con un fantasma 👻 que te sacude un pepinazo en el hígado y te susurra estas dos preguntas:", + "¡OJO! Un fantasmita 👻 se presenta con una ensalada de puñetazos y un par de preguntas que no tienen nada que ver con su profesión de fantasma:"] +respuestas = ["C", "A", "D", "B", "C", "A", "D", "B", "C", "A", "D", "B", "C", "C", "A", "D", "B", "C", "A", "D", "B", "C", "A", "D", "B", "C", "A", "D", "B", "C"] +respAcertada = ("Menudo churro te has pegao, reconócelo.", "No sé cómo lo has hecho... pero te estaré vigilando.", "Vaya potra... vaya potra....", "Has tenido suerte... por ahora.", "Anda, tira... que no sé ni cómo has acertado eso.", "Has buscado la respuesta en el ChatGPT, ¿Verdad?", "Tu primo el friki te ha soplado la respuesta, seguro.", "La suerte del principiante... Anda, tira, tira.", "Te has salvado por los pelos, no sé ni cómo.", "Vaya suerte macanuda que me llevas.", "¿Cómo lo has hecho? Anda, sácate la chuleta del bolsillo, que te he visto.") + +while True: + preguntas = 1 + bPregunta= False + n = input("¿A dónde quieres ir? N S E O ") + if n.lower() == "n" and (posActual[0]-1, posActual[1]) in hauntedHouse: + posActual = (posActual[0]-1, posActual[1]) + continua = True + elif n.lower() == "s" and (posActual[0]+1, posActual[1]) in hauntedHouse: + posActual = (posActual[0]+1, posActual[1]) + continua = True + elif n.lower() == "e" and (posActual[0], posActual[1]+1) in hauntedHouse: + posActual = (posActual[0], posActual[1]+1) + continua = True + elif n.lower() == "o" and (posActual[0], posActual[1]-1) in hauntedHouse: + posActual = (posActual[0], posActual[1]-1) + continua = True + else: + print("No puedes ir por ahí") + continua = False + + if continua: + if posActual == candy: + print("GANASTE! Encontraste las chuches! 👍\nHala...lárgate a comértelas por ahí, para que te salga caries y se te pudran, muahahaha!\nGracias por jugar al juego de JuanG3D\nSi quieres ver sus diseños 3D superchulos, visita su página web https://sketchfab.com/juang3d 👍\nNos vemos, crack!") + input('Dale a Enter para salir\t') + break + elif posActual == door: + print("Anda! Aquí está la puerta. Pero no pienso salir sin las chuches.") + else: + valorRandom = random.randint(0,100) + if valorRandom <= 10: + preguntas += 1 + iVidas -= 1 + bPregunta = True + + row = "" + for i in range(4): + for j in range(4): + if i == door[0] and j == door[1]: + row += puerta + elif i == candy[0] and j == candy[1]: + row += dulces + elif i == posActual[0] and j == posActual[1]: + row += cabeza[iVidas] + else: + row += habitacion + row += "\n" + os.system('cls') + print(vidas * iVidas) + print(row) + if iVidas < 1: + print("MUAHAHAHAHA! Has perdido como vil rata. Ahora vendrá un zombie podrido a absorberte el tuétano.\nMientras, puedes seguir practicando programación, para que no vuelva a pasarte lo mismo la próxima vez.\nHala. Nos vemos.") + input('Dale a cualquier tecla para salir\t') + exit(0) + bFantasma = False + while preguntas > 0: + if preguntas > 1: + print(random.choice(fantasmasList)) + bFantasma = True + elif bFantasma: + bFantasma = False + else: + print("\n Encuentras una habitación con el siguiente enigma:") + if bPregunta: + preguntaNum = random.randint(0, len(questionArr)-1) + print(questionArr[preguntaNum]) + print(posiblesRespuestas[preguntaNum]) + respuesta = input().upper() + while respuesta != "A" and respuesta != "B" and respuesta != "C" and respuesta != "D": + print("¿A qué tecla le has dado? Anda, responde bien") + respuesta = input().upper() + if respuesta == respuestas[preguntaNum]: + print(random.choice(respAcertada)) + questionArr.pop(preguntaNum) + posiblesRespuestas.pop(preguntaNum) + respuestas.pop(preguntaNum) + else: + iVidas -= 1 + row = "" + for i in range(4): + for j in range(4): + if i == door[0] and j == door[1]: + row += puerta + elif i == candy[0] and j == candy[1]: + row += dulces + elif i == posActual[0] and j == posActual[1]: + row += cabeza[iVidas] + else: + row += habitacion + row += "\n" + print("FALLASTE!! Muahahaha!") + print(vidas * iVidas) + print(row) + preguntas -= 1 + bPregunta = False From 55b996d6eaf004517079658c77c0adca95be282d Mon Sep 17 00:00:00 2001 From: Hector Date: Fri, 20 Oct 2023 15:51:37 +0200 Subject: [PATCH 0342/2103] Reto #41 - Javascript --- .../javascript/HectorIglesias.js" | 194 ++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/HectorIglesias.js" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/HectorIglesias.js" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/HectorIglesias.js" new file mode 100644 index 0000000000..e6f8ff4f64 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/HectorIglesias.js" @@ -0,0 +1,194 @@ +/* + * Este es un reto especial por Halloween. + * Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces. + * + * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. + * (Tienes total libertad para ser creativo con los textos) + * + * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 + * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. + * (16 habitaciones, siendo una de entrada y otra donde están los dulces) + * Esta podría ser una representación: + * 🚪⬜️⬜️⬜️ + * ⬜️👻⬜️⬜️ + * ⬜️⬜️⬜️👻 + * ⬜️⬜️🍭⬜️ + * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. + * Si no lo aciertas no podrás desplazarte. + * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. + * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) + * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. + * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y + * tengas que responder dos preguntas para salir de ella. + */ +function casa_encantada(){ + let fila = "" + + let casa = [] + casa[0] = Math.floor(Math.random() * 4) + + if(casa[0] == 1 || casa[0] == 2){ + casa[1] = 1 + while (casa[1] == 1 || casa[1] ==2){ + casa[1] = Math.floor(Math.random() * 4) + } + } + else{ + casa[1] = Math.floor(Math.random() * 4) + } + + let dulces = [Math.floor(Math.random() * 4), Math.floor(Math.random() * 4)] + while (dulces[0] == casa[0] && dulces[1] == casa[1]){ + dulces = [Math.floor(Math.random() * 4), Math.floor(Math.random() * 4)] + + } + + for(let i=0; i<4; i++){ + for(let j=0; j<4; j++){ + if(casa[0] == i && casa[1] == j){ + fila += "🚪" + } + else if(dulces[0] == i && dulces[1] == j){ + fila += "🍭" + } + else{ + fila += "⬜️" + } + } + console.log(fila) + fila= "" + } + + let dulces_conseguidos = false + while (dulces_conseguidos == false){ + dulces_conseguidos = juego(casa, dulces) + } + + console.log("Disfruta de los dulces") +} + +function juego(casa, dulces){ + console.log("Estas en la posicion "+casa[0]+"-"+casa[1]) + let respuesta_valida = false + let respuesta = "" + let posicion = casa + + while(posicion != dulces){ + let direcciones_posibles = calcular_dir_posibles(posicion) + console.log("Puedes moverte en las siguientes direcciones: "+direcciones_posibles) + + while(respuesta_valida == false){ + respuesta = prompt("¿Hacia donde quieres moverte? ") + respuesta_valida = validar_respuesta(respuesta, direcciones_posibles) + } + respuesta_valida = false + + posicion= calcular_nueva_posicion(respuesta, posicion) + if(posicion[0] == dulces[0] && posicion[1] == dulces[1]){ + return true + } + else{ + let respuesta_acertijo = "" + let respuesta_valida_acertijo = false + while(respuesta_valida_acertijo == false){ + respuesta_acertijo = prompt("¿Te está gustando el juego? S/N ") + respuesta_valida_acertijo = validar_respuesta_acertijo(respuesta_acertijo) + } + respuesta_valida_acertijo = false + } + } + + return true +} + +function calcular_dir_posibles(array){ + let direcciones_posibles = "" + + if(array[0] != 0){ + direcciones_posibles += "Norte-" + } + + if(array[1] != 0){ + direcciones_posibles += "Oeste-" + } + + if(array[1] != 3){ + direcciones_posibles += "Este-" + } + + if(array[0] != 3){ + direcciones_posibles += "Sur" + } + + if(direcciones_posibles[direcciones_posibles.length-1] == "-"){ + direcciones_posibles = direcciones_posibles.slice(0, direcciones_posibles.length-1) + } + + return direcciones_posibles +} + +function validar_respuesta(respuesta, direcciones_posibles){ + let array_dir_posibles = direcciones_posibles.split("-") + for(let i=0; i Date: Fri, 20 Oct 2023 16:08:40 +0200 Subject: [PATCH 0343/2103] Reto #41 - javascript --- .../javascript/othamae.js" | 248 ++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/othamae.js" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/othamae.js" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/othamae.js" new file mode 100644 index 0000000000..74cee4165b --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/othamae.js" @@ -0,0 +1,248 @@ +/* + * Este es un reto especial por Halloween. + * Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces. + * + * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. + * (Tienes total libertad para ser creativo con los textos) + * + * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 + * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. + * (16 habitaciones, siendo una de entrada y otra donde están los dulces) + * Esta podría ser una representación: + * 🚪⬜️⬜️⬜️ + * ⬜️👻⬜️⬜️ + * ⬜️⬜️⬜️👻 + * ⬜️⬜️🍭⬜️ + * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. + * Si no lo aciertas no podrás desplazarte. + * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. + * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) + * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. + * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y + * tengas que responder dos preguntas para salir de ella. + */ + + +const readline = require('readline') +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}) + +game() + + + +// Functions + +function game(){ + const [emptyhouse, house, door] =createHouse() + let position = [...door] + console.log("Welcome to the riddle Mansion Game") + console.log(emptyhouse) + console.log("Which room do you want to explore? ") + console.log("Please choose a movement: (n/s/e/w) ") + + rl.on('line', async (input) => { + if (!["n", "s", "e", "w"].includes(input.toLowerCase())) { + console.log("Please enter a valid movement") + } else if(!canMove(input.toLowerCase(), position)) { + console.log("You can't go that way. Please try again") + } else { + await handleMovement(input.toLowerCase(), position, house, emptyhouse) + } + (!finish(house, position)) && console.log("Please choose a new movement: (n/s/e/w) ") + }) + +} + +//const +const riddles = [ + { + question: "I fly in the night, yet I'm not a bird. What am I?", + answer: "A bat" + }, + { + question: "I have a broom and a pointed hat. Who am I?", + answer: "A witch" + }, + { + question: "I'm a vegetable that becomes a lantern. What am I?", + answer: "A pumpkin" + }, + { + question: "I'm scary and I hide in the dark. What am I?", + answer: "A ghost" + }, + { + question: "I'm a popular costume with fangs and a cape. Who am I?", + answer: "A vampire" + }, + { + question: "I am not alive but I still can knock. What am I?", + answer: "A skeleton" + }, + { + question: "I'm round, orange, and have many seeds inside. What am I?", + answer: "A pumpkin" + }, + { + question: "I'm a group of friends who love to go trick-or-treating. Who are we?", + answer: "A bunch of monsters" + }, + { + question: "I'm a celebration where kids get candies. What am I?", + answer: "Halloween" + }, + { + question: "I'm a creature that howls at the moon. What am I?", + answer: "A werewolf" + }, + { + question: "I'm a popular Halloween dessert that's made of sugar. What am I?", + answer: "Candy corn" + }, + { + question: "I'm a scary story told around a fire. What am I?", + answer: "A ghost story" + }, + { + question: "I'm a hairy creature with eight legs. What am I?", + answer: "A spider" + }, + { + question: "I'm a mystical black bird associated with magic. What am I?", + answer: "A raven" + }, + { + question: "I'm a famous Frankenstein's assistant. Who am I?", + answer: "Igor" + }, + { + question: "I'm a cauldron used for brewing potions. What am I?", + answer: "A witch's cauldron" + } +] +// Helper functions +function createHouse(){ + const emptyhouse = [ + ['⬛','⬛','⬛','⬛'], + ['⬛','⬛','⬛','⬛'], + ['⬛','⬛','⬛','⬛'], + ['⬛','⬛','⬛','⬛'] + ] + const house = [ + ['⬜','⬜','⬜','⬜'], + ['⬜','⬜','⬜','⬜'], + ['⬜','⬜','⬜','⬜'], + ['⬜','⬜','⬜','⬜'] + ] + const door = addElement('🚪',house) + addElement('🍭',house) + addElement('👻',house) + addElement('👻',house) + emptyhouse[door[0]][door[1]] = '🚪' + return [emptyhouse, house, door] +} + +function addElement(symbol,house){ + const element =[Math.floor(Math.random() * 4), Math.floor(Math.random() * 4)] + house[element[0]][element[1]] === '⬜' + ? house[element[0]][element[1]] = symbol + : addElement(symbol,house) + return element +} + +async function handleMovement(input, position, house, emptyhouse){ + return new Promise(async (resolve) => { + goToNewPosition(input, position) + emptyhouse[position[0]][position[1]] = house[position[0]][position[1]] + console.log(emptyhouse); + if (checkIfCandyRoom(house, position)) { + resolve() + return + } + const [question, answer] = getQuestion() + await checkIfGhostRoom(house, position) + await askQuestion(question, answer) + resolve() + }) +} + +function goToNewPosition(input, position){ + if (input === "n") position[0] -= 1 + if (input === "s") position[0] += 1 + if (input === "e") position[1] += 1 + if (input === "w") position[1] -= 1 +} + +function canMove( movement, position){ + return !((movement === "n" && position[0] === 0) + || (movement === "s" && position[0] === 3) + || (movement === "e" && position[1] === 3) + || (movement === "w" && position[1] === 0)) +} + +function checkIfCandyRoom (house, position){ + if (house[position[0]][position[1]] === '🍭'){ + console.log("Congratulations! You found the dulces room!") + rl.close() + return true + } + return false +} + +function finish(house, position){ + return (house[position[0]][position[1]] === '🍭') +} + +async function checkIfGhostRoom(house, position){ + return new Promise(async (resolve) => { + if (house[position[0]][position[1]] === '👻'){ + console.log("You have to answer two questions to escape the ghost room") + const [question, answer] = getQuestion() + await askQuestion(question, answer) + } + resolve() + }) + +} + +function getQuestion(){ + const ramdom = Math.floor(Math.random() * riddles.length) + const question = riddles[ramdom].question + const answer = riddles[ramdom].answer + riddles.splice(ramdom,1) + return [question, answer] +} + +function askQuestion(question, answer) { + return new Promise((resolve) => { + const recursiveQuestion = () => { + rl.question(question, (userAnswer) => { + checkAnswer(userAnswer, answer).then((isCorrect) => { + if (isCorrect) { + console.log("Congratulations! You are right!") + rl.prompt() + resolve() + } else { + console.log("Sorry, you are wrong. Please try again") + recursiveQuestion() + } + }) + }) + } + recursiveQuestion() + }) + } + +function checkAnswer(input, answer) { + return new Promise((resolve) => { + (input.toLowerCase() === answer.toLowerCase()) + ? resolve(true) + : resolve(false) + }) +} + From 3b1cdbcc66b15b8b0dc3f78c9ac2de9ec3dbc98d Mon Sep 17 00:00:00 2001 From: mrf1989 Date: Fri, 20 Oct 2023 16:09:49 +0200 Subject: [PATCH 0344/2103] Reto#41 - C# --- .../c#/mrf1989.cs" | 352 ++++++++++++++++++ 1 file changed, 352 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/mrf1989.cs" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/mrf1989.cs" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/mrf1989.cs" new file mode 100644 index 0000000000..04eb3a7e94 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/mrf1989.cs" @@ -0,0 +1,352 @@ +// Author: mrf1989/mruano89 + +bool firstMovement = true; +string userPrompt = ""; +const int GAMEBOARD_ROWS = 4; +const int GAMEBOARD_COLS = 4; +const int GHOST_PROBABILITY = 10; + +GameConfiguration configuration = new( + GAMEBOARD_ROWS, + GAMEBOARD_COLS, + GHOST_PROBABILITY); + +BoxRoom[,] gameboard = CreateGameboard(configuration); +var quizzes = GenerateQuizzes(20); + +Console.WriteLine("Welcome to the Haunted House! Muahahaha!".ToUpper()); +Console.WriteLine("Do you know what you need to know to find the hidden sweets?"); +Console.WriteLine("Type 'exit' to finish the game."); +Console.WriteLine(); + +do +{ + configuration.playerCoords = UpdatePlayerCoords(configuration.playerCoords, + userPrompt); + + var movements = GetAvailableMovesFrom( + configuration.playerCoords[0], + configuration.playerCoords[1]); + + var playerCoords = configuration.playerCoords; + + PrintGameboard(gameboard, configuration); + + Console.WriteLine($"Your current position is: " + + $"({playerCoords[0]}, {playerCoords[1]})"); + + if (!firstMovement) + { + var room = gameboard[playerCoords[0], playerCoords[1]]; + if (room.Equals(BoxRoom.Sweets)) + { + Console.WriteLine("You have found the Haunted House sweets!!"); + break; + } + AnswerQuizz(quizzes, room); + } + else + { + firstMovement = false; + } + + Console.Write("Where do you want to move in the Haunted Mansion? (Type: "); + foreach (var movement in movements) + { + Console.Write($"'{movement}', "); + } + Console.Write("\b\b)\n"); + + userPrompt = PlayerMovement(movements); + + Console.Clear(); + +} while (userPrompt != "exit"); + +string GetPlayerMovement(List availableMoves) +{ + var playerMovement = Console.ReadLine().Trim(); + + _ = Enum.TryParse(playerMovement, out Movement selectedMovement); + var checkValidMovement = availableMoves + .Exists(movement => movement == selectedMovement); + + if (!checkValidMovement && playerMovement != "exit") + { + throw new Exception("The movement is not valid. Try again!"); + } + + return playerMovement; +} + +string PlayerMovement(List availableMoves) +{ + string playerMovement = ""; + + do + { + try + { + playerMovement = GetPlayerMovement(availableMoves); + } + catch (Exception e) + { + Console.WriteLine(e.Message); + //PlayerMovement(availableMoves); + } + } while (playerMovement.Length == 0); + + return playerMovement; +} + +// Methods + +Tuple[] GenerateQuizzes(int quizzSize) +{ + Tuple[] quizzes = new Tuple[quizzSize]; + + for (int i = 0; i < quizzSize; i++) + { + int factorA = new Random().Next(0, 10); + int factorB = new Random().Next(0, 10); + + quizzes[i] = new($"{factorA} x {factorB}", factorA * factorB); + } + + return quizzes; +} + +void AnswerQuizz(Tuple[] quizzes, BoxRoom room) +{ + int successfulQuizzes = 0; + int numberOfQuizzes = 1; + if (room.Equals(BoxRoom.Ghost)) + { + numberOfQuizzes = 2; + Console.WriteLine("A terrible ghost appeared!!\n" + + "You will have to pass two tests to escape..."); + } + + do + { + var quizz = GetQuizz(quizzes); + Console.WriteLine($"Product of {quizz.Item1}:"); + + try + { + int quizzResponse = Convert.ToInt32(Console.ReadLine()); + if (quizzResponse == quizz.Item2) + { + successfulQuizzes++; + Console.WriteLine("Good!"); + } + else + { + Console.WriteLine("You are wrong. Try again!"); + } + } + catch + { + Console.WriteLine("You are wrong. You must entry a number!"); + } + + } while (successfulQuizzes != numberOfQuizzes); + Console.WriteLine("Nice! Keep looking for the sweets!"); +} + +Tuple GetQuizz(Tuple[] quizzes) +{ + int quizzRandomPosition = new Random().Next(0, quizzes.Length); + return quizzes[quizzRandomPosition]; +} + +BoxRoom[,] CreateGameboard(GameConfiguration config) +{ + BoxRoom[,] gameboard = new BoxRoom[config.rows, config.cols]; + + for (int i = 0; i < config.rows; i++) + { + for (int j = 0; j < config.cols; j++) + { + int randomInteger = new Random().Next(0, 100); + + if (randomInteger <= config.ghostProbability) + { + gameboard[i, j] = BoxRoom.Ghost; + } + else + { + gameboard[i, j] = BoxRoom.Empty; + } + } + } + + gameboard[config.doorCoords[0], config.doorCoords[1]] = BoxRoom.Door; + gameboard[config.sweetsCoords[0], config.sweetsCoords[1]] = BoxRoom.Sweets; + + return gameboard; +} + +List GetAvailableMovesFrom(int row, int col) +{ + List movements = new(); + + if (row - 1 >= 0) + { + movements.Add(Movement.North); + } + + if (row + 1 < GAMEBOARD_ROWS) + { + movements.Add(Movement.South); + } + + if (col + 1 < GAMEBOARD_COLS) + { + movements.Add(Movement.East); + } + + if (col - 1 >= 0) + { + movements.Add(Movement.West); + } + + return movements; +} + +void PrintGameboard(BoxRoom[,] gameboard, GameConfiguration config) +{ + int[] coords = config.playerCoords; + for (int i = 0; i < config.rows; i++) + { + for (int j = 0; j < config.cols; j++) + { + bool playerInCurrentRoom = coords[0] == i && coords[1] == j; + switch (gameboard[i, j]) + { + case BoxRoom.Door: + Console.Write("🚪"); + break; + case BoxRoom.Ghost: + if (playerInCurrentRoom) + { + Console.Write("👻"); + } + else + { + Console.Write("⬜️"); + } + break; + case BoxRoom.Sweets: + if (playerInCurrentRoom) + { + Console.Write("🍭"); + } + else + { + Console.Write("⬜️"); + } + break; + case BoxRoom.Empty: + if (playerInCurrentRoom) + { + Console.Write("❓"); + } + else + { + Console.Write("⬜️"); + } + break; + } + } + Console.Write("\n"); + } +} + +int[] UpdatePlayerCoords(int[] playerCoords, string? userPrompt) +{ + int[] newCoords = playerCoords; + + switch (userPrompt.Trim().ToLower()) + { + case "north": + newCoords[0]--; + break; + case "south": + newCoords[0]++; + break; + case "east": + newCoords[1]++; + break; + case "west": + newCoords[1]--; + break; + default: + break; + } + + return newCoords; +} + +// Objects + +enum BoxRoom +{ + Door, + Empty, + Ghost, + Sweets +} + +enum Movement +{ + North, + South, + East, + West +} + +public struct GameConfiguration +{ + public GameConfiguration(int rows, int cols, int ghostProbability) + { + this.rows = rows; + this.cols = cols; + this.ghostProbability = ghostProbability; + this.doorCoords = GenerateDoorCoords(); + sweetsCoords = GenerateSweetsCoords(); + playerCoords = doorCoords; + } + + private int[] GenerateDoorCoords() + { + int[] coords = new int[] { + new Random().Next(0, rows - 1), + new Random().Next(0, cols - 1) + }; + + return coords; + } + + private int[] GenerateSweetsCoords() + { + int[] coords; + + do + { + coords = new int[] { + new Random().Next(0, rows - 1), + new Random().Next(0, cols - 1) + }; + } while (doorCoords[0] == coords[0] && doorCoords[1] == coords[1]); + + return coords; + } + + public int rows { get; init; } + public int cols { get; init; } + public int ghostProbability { get; init; } + public int[] doorCoords { get; init; } + public int[] sweetsCoords { get; init; } + public int[] playerCoords { get; set; } +} \ No newline at end of file From 8db314343745afe2e7d19a15bbc16ab57330e5f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Ramos?= Date: Fri, 20 Oct 2023 10:18:14 -0400 Subject: [PATCH 0345/2103] Reto #1 - Python --- .../python/CaesaRR19.py" | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/CaesaRR19.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/CaesaRR19.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/CaesaRR19.py" new file mode 100644 index 0000000000..694a832976 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/CaesaRR19.py" @@ -0,0 +1,48 @@ +abecedario = {"a" : "4", + "b" : "I3", + "c":"[", + "d":")", + "e":"3", + "f":"|=", + "g":"&", + "h":"#", + "i":"1", + "j":",_|", + "k":">|", + "l":"1", + "m":"/\\/\\", + "n":"^/", + "o":"0", + "p":"|*", + "q":"(_,)", + "r":"I2", + "s":"5", + "t":"7", + "u":"(_)", + "v":"\/", + "w":"\/\/", + "x":"><", + "y":"j", + "z":"2", + "1":"L", + "2":"R", + "3":"E", + "4":"A", + "5":"S", + "6":"b", + "7":"T", + "8":"B", + "9":"g", + "0":"o" + } + +def lenguaje_hacker(texto: str) -> str: + if isinstance(texto, str) and texto.isalnum(): + result = "" + for letra in texto: + result += abecedario[letra.lower()] + return result + return "Por favor, ingrese una cadena de texto alfanúmerica." + +print(lenguaje_hacker("CaesaRR19!")) + From 2813a6d12a4ffa65e502e54c896b1875a797589d Mon Sep 17 00:00:00 2001 From: cesarjv Date: Fri, 20 Oct 2023 16:06:44 -0400 Subject: [PATCH 0346/2103] Reto#16 - Java --- .../java/cesarjv.java | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Retos/Reto #16 - LA ESCALERA [Media]/java/cesarjv.java diff --git a/Retos/Reto #16 - LA ESCALERA [Media]/java/cesarjv.java b/Retos/Reto #16 - LA ESCALERA [Media]/java/cesarjv.java new file mode 100644 index 0000000000..fd864c1f9f --- /dev/null +++ b/Retos/Reto #16 - LA ESCALERA [Media]/java/cesarjv.java @@ -0,0 +1,71 @@ +package org.example; + +import java.util.Scanner; + + +/* + * Crea una función que dibuje una escalera según su número de escalones. + * - Si el número es positivo, será ascendente de izquiera a derecha. + * - Si el número es negativo, será descendente de izquiera a derecha. + * - Si el número es cero, se dibujarán dos guiones bajos (__). + * + * Ejemplo: 4 + * _ + * _| + * _| + * _| + * _| + * + */ +public class cesarjv +{ + public static void main( String[] args ) + { + + System.out.println("Bienvenido a la aplicacion para dibujar su escalera"); + System.out.println("Indique el numero de escalones que quiere dibujar (puede ser un numero negativo o positivo): "); + Scanner sc=new Scanner(System.in); + int num=sc.nextInt(); + System.out.println("El numero de escalones indicado es: "+num); + if ((num > 0)) { + positiveLadder(num); + } else if (num==0){ + System.out.println("__"); + } + else { + negativeLadder(num); + } + } + + private static void positiveLadder(int value){ + StringBuilder sb=new StringBuilder(); + for(int i=value;i>=0;i--){ + char[] ch=new char[i]; + String result= new String(ch).replace("", " "); + if(i==value){ + sb.append(result).append("_").append("\n"); + } + else { + sb.append(result).append("_|").append("\n"); + } + } + System.out.println(sb); + } + + private static void negativeLadder(int value){ + value=Math.abs(value); + StringBuilder sb=new StringBuilder(); + for(int i=0;i<=value;i++){ + char[] ch=new char[i]; + String result= new String(ch).replace("", " "); + if(i==0){ + sb.append(result).append("_").append("\n"); + } + else { + sb.append(result).append("|_").append("\n"); + } + } + System.out.println(sb); + } + +} From cc18ca256187352f7260b59799771d2127fade00 Mon Sep 17 00:00:00 2001 From: "hojas.adrian" <51124473+hojas-adrian@users.noreply.github.com> Date: Fri, 20 Oct 2023 16:41:13 -0400 Subject: [PATCH 0347/2103] Add files via upload --- .../typescript/hojas-adrian.ts" | 456 ++++++++++++++++++ 1 file changed, 456 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/typescript/hojas-adrian.ts" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/typescript/hojas-adrian.ts" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/typescript/hojas-adrian.ts" new file mode 100644 index 0000000000..4c8ad82776 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/typescript/hojas-adrian.ts" @@ -0,0 +1,456 @@ +const board = [ + ["🚪", "⬜", "⬜", "⬜"], + ["⬜", "⬜", "⬜", "⬜"], + ["⬜", "⬜", "⬜", "⬜"], + ["⬜", "⬜", "⬜", "⬜"], +]; + +const questions = { + firstQuestion: { q: "¿Desea entrar a la casa? (y/n)", a: ["y"], e: "n" }, + restart: { + q: "🎉 YOU WIN!\nQuieres jugar nuevamente(y/n)", + a: ["y"], + e: "n", + }, + exit: { q: "quieres salir del juego? (y/n)", a: ["n"], e: "y" }, + questions: [ + { + q: "¿Cuál es el libro más vendido de todos los tiempos?", + a: ["La Biblia"], + }, + { + q: "¿Quién escribió el libro 'Cien años de soledad'?", + a: ["Gabriel García Márquez"], + }, + { + q: "¿Cuál es el libro más largo de la historia?", + a: ["'En busca del tiempo perdido' de Marcel Proust"], + }, + { + q: "¿Quién escribió el libro '1984'?", + a: ["George Orwell"], + }, + { + q: "¿Cuál es el libro más traducido en el mundo después de la Biblia?", + a: ["'El principito' de Antoine de Saint-Exupéry"], + }, + { + q: "¿Quién escribió el libro 'Don Quijote de la Mancha'?", + a: ["Miguel de Cervantes"], + }, + { + q: "¿Cuál es el libro más antiguo que se conserva?", + a: ["'La epopeya de Gilgamesh'"], + }, + { + q: "¿Quién escribió el libro 'Orgullo y prejuicio'?", + a: ["Jane Austen"], + }, + { + q: "¿Cuál es el libro más vendido después de la Biblia?", + a: [ + "'El ingenioso hidalgo Don Quijote de la Mancha' de Miguel de Cervantes", + ], + }, + { + q: "¿Quién escribió el libro 'Matar a un ruiseñor'?", + a: ["Harper Lee"], + }, + { + q: "¿Cuál es el libro más corto de la historia?", + a: ["'La ocupación' de Sergio Chejfec"], + }, + { + q: "¿Quién escribió el libro 'Ulises'?", + a: ["James Joyce"], + }, + { + q: "¿Cuál es el libro más caro del mundo?", + a: ["'Codex Leicester' de Leonardo da Vinci"], + }, + { + q: "¿Quién escribió el libro 'Crimen y castigo'?", + a: ["Fiódor Dostoyevski"], + }, + { + q: "¿Cuál es el libro más leído en el mundo después de la Biblia?", + a: ["'El principito' de Antoine de Saint-Exupéry"], + }, + { + q: "¿Quién escribió el libro 'El gran Gatsby'?", + a: ["F. Scott Fitzgerald"], + }, + { + q: "¿Cuál es el libro más pequeño del mundo?", + a: ["'Teeny Ted from Turnip Town' de Malcolm Douglas Chisolm"], + }, + { + q: "¿Quién escribió el libro 'En busca del tiempo perdido'?", + a: ["Marcel Proust"], + }, + { + q: "¿Cuál es el libro más vendido de la historia después de la Biblia?", + a: [ + "'El ingenioso hidalgo Don Quijote de la Mancha' de Miguel de Cervantes", + ], + }, + { + q: "¿Quién escribió el libro 'El principito'?", + a: ["Antoine de Saint-Exupéry"], + }, + { + q: "¿Cuál es el libro más pesado del mundo?", + a: [ + "'Bhutan: A Visual Odyssey Across the Last Himalayan Kingdom' de Michael Hawley", + ], + }, + { + q: "¿Quién escribió el libro 'Romeo y Julieta'?", + a: ["William Shakespeare"], + }, + { + q: "¿Cuál es el libro más antiguo que se conoce impreso?", + a: ["La Biblia de Gutenberg"], + }, + { + q: "¿Quién escribió el libro 'Las aventuras de Alicia en el País de las Maravillas'?", + a: ["Lewis Carroll"], + }, + { + q: "¿Cuál es el libro más leído en el mundo?", + a: ["La Biblia"], + }, + { + q: "¿Quién escribió el libro 'Las crónicas de Narnia'?", + a: ["C.S. Lewis"], + }, + { + q: "¿Cuál es el libro más caro vendido en una subasta?", + a: ["'Codex Leicester' de Leonardo da Vinci"], + }, + { + q: "¿Quién escribió el libro 'El señor de los anillos'?", + a: ["J.R.R. Tolkien"], + }, + { + q: "¿Cuál es el libro más popular de Harry Potter?", + a: ["'Harry Potter y la piedra filosofal'"], + }, + { + q: "¿Quién escribió el libro 'Moby Dick'?", + a: ["Herman Melville"], + }, + { + q: "¿Cuál es el libro más vendido de la historia?", + a: ["La Biblia"], + }, + { + q: "¿Quién escribió el libro 'El código Da Vinci'?", + a: ["Dan Brown"], + }, + { + q: "¿Cuál es el libro más famoso de Sherlock Holmes?", + a: ["'El sabueso de los Baskerville'"], + }, + { + q: "¿Quién escribió el libro 'Los juegos del hambre'?", + a: ["Suzanne Collins"], + }, + { + q: "¿Cuál es el libro más antiguo del mundo?", + a: ["'La epopeya de Gilgamesh'"], + }, + { + q: "¿Quién escribió el libro 'El retrato de Dorian Gray'?", + a: ["Oscar Wilde"], + }, + { + q: "¿Cuál es el libro más vendido en el siglo XX?", + a: ["'El principito' de Antoine de Saint-Exupéry"], + }, + { + q: "¿Quién escribió el libro 'Crepúsculo'?", + a: ["Stephenie Meyer"], + }, + { + q: "¿Cuál es el libro más famoso de Julio Verne?", + a: ["'Veinte mil leguas de viaje submarino'"], + }, + { + q: "¿Quién escribió el libro 'La Odisea'?", + a: ["Homero"], + }, + { + q: "¿Cuál es el libro más leído de Harry Potter?", + a: ["'Harry Potter y la piedra filosofal'"], + }, + { + q: "¿Quién escribió el libro 'El alquimista'?", + a: ["Paulo Coelho"], + }, + { + q: "¿Cuál es el libro más antiguo que se conserva completo?", + a: ["La Biblia"], + }, + { + q: "¿Quién escribió el libro 'El nombre de la rosa'?", + a: ["Umberto Eco"], + }, + { + q: "¿Cuál es el libro más vendido en el siglo XXI?", + a: ["'Harry Potter y las reliquias de la muerte'"], + }, + { + q: "¿Quién escribió el libro 'El gran Gatsby'?", + a: ["F. Scott Fitzgerald"], + }, + { + q: "¿Cuál es el libro más famoso de Agatha Christie?", + a: ["'Diez negritos'"], + }, + { + q: "¿Quién escribió el libro 'El león, la bruja y el armario'?", + a: ["C.S. Lewis"], + }, + { + q: "¿Cuál es el libro más leído de la historia?", + a: ["La Biblia"], + }, + { + q: "¿Quién escribió el libro 'El diario de Ana Frank'?", + a: ["Ana Frank"], + }, + { + q: "¿Cuál es el libro más vendido de no ficción?", + a: ["'El libro tibetano de los muertos'"], + }, + { + q: "¿Quién escribió el libro 'La metamorfosis'?", + a: ["Franz Kafka"], + }, + { + q: "¿Cuál es el libro más vendido de ciencia ficción?", + a: ["'Dune' de Frank Herbert"], + }, + { + q: "¿Quién escribió el libro 'Los pilares de la Tierra'?", + a: ["Ken Follett"], + }, + { + q: "¿Cuál es el libro más largo del mundo?", + a: ["'En busca del tiempo perdido' de Marcel Proust"], + }, + { + q: "¿Quién escribió el libro 'La sombra del viento'?", + a: ["Carlos Ruiz Zafón"], + }, + { + q: "¿Cuál es el libro más vendido de autoayuda?", + a: ["'El secreto' de Rhonda Byrne"], + }, + { + q: "¿Quién escribió el libro 'La guerra y la paz'?", + a: ["León Tolstói"], + }, + { + q: "¿Cuál es el libro más vendido de la historia después de la Biblia?", + a: [ + "'El ingenioso hidalgo Don Quijote de la Mancha' de Miguel de Cervantes", + ], + }, + { + q: "¿Quién escribió el libro 'El principito'?", + a: ["Antoine de Saint-Exupéry"], + }, + { + q: "¿Cuál es el libro más pesado del mundo?", + a: [ + "'Bhutan: A Visual Odyssey Across the Last Himalayan Kingdom' de Michael Hawley", + ], + }, + { + q: "¿Quién escribió el libro 'Romeo y Julieta'?", + a: ["William Shakespeare"], + }, + { + q: "¿Cuál es el libro más antiguo que se conoce impreso?", + a: ["La Biblia de Gutenberg"], + }, + { + q: "¿Quién escribió el libro 'Las aventuras de Alicia en el País de las Maravillas'?", + a: ["Lewis Carroll"], + }, + { + q: "¿Cuál es el libro más leído en el mundo?", + a: ["La Biblia"], + }, + ], +}; + +let position: [number, number]; + +const directions: { + [key: string]: { value: [number, number]; text: string; go: boolean }; +} = { + w: { + value: [-1, 0], + text: "arriba[W]", + go: false, + }, + d: { + value: [0, 1], + text: "derecha[D]", + go: false, + }, + s: { + value: [1, 0], + text: "abajo[S]", + go: false, + }, + a: { + value: [0, -1], + text: "izquierda[A]", + go: false, + }, +}; + +const getRandomIndex = () => { + return Math.floor(Math.random() * questions.questions.length); +}; + +const exit = (log: string) => { + console.log(`\n${log}`); + Deno.exit(); +}; + +const askQuestion = async ( + { q, a, e }: { q: string; a?: string[]; e?: string }, +) => { + Deno.stdout.writeSync(new TextEncoder().encode("\x1b[2J\x1b[0;0H")); + const buf = new Uint8Array(1024); + const outBoard = board.map((row) => row.join("")); + Deno.stdout.write( + new TextEncoder().encode( + `Titulo\n${outBoard.join("\n")}\n${q}: `, + ), + ); + const n = await Deno.stdin.read(buf) || undefined; + const answer = new TextDecoder().decode(buf.subarray(0, n)).trim() + .toLowerCase(); + + if (answer === "e") return exit("🏃💨 Saliendo..."); + if (a?.includes(answer)) return answer; + if (answer === e) return false; + return undefined; +}; + +const move = async ([x, y]: number[]) => { + let keepAsking; + + do { + keepAsking = true; + + directions.s.go = (position[0] < 3) ? true : false; + directions.w.go = (position[0] > 0) ? true : false; + directions.d.go = (position[1] < 3) ? true : false; + directions.a.go = (position[1] > 0) ? true : false; + + const options = Object.keys(directions) + .map((key) => directions[key].go && directions[key].text) + .filter(Boolean); + + Deno.stdin.setRaw(true); + const direction = await askQuestion( + { + q: `a donde te quieres mover?\n${options.join(" ")}`, + a: ["s", "w", "a", "d"], + }, + ); + if ( + direction === undefined || direction === false || + !directions[direction].go + ) { + continue; + } + + const [xMove, yMove] = directions[direction].value; + position[0] += xMove; + position[1] += yMove; + keepAsking = false; + + Deno.stdin.setRaw(false); + + if (position[0] === 0 && position[1] === 0) { + Deno.stdin.setRaw(true); + const answer = await askQuestion(questions.exit); + if (answer === false) { + return exit("🏃💨 Saliendo..."); + } else { + Deno.stdin.setRaw(false); + position = [x, y]; + keepAsking = true; + continue; + } + } + } while (keepAsking); + + !(x === 0 && y === 0) && (board[x][y] = "⬜"); + + if (position[0] === 3 && position[1] === 3) { + let answer; + + board[position[0]][position[1]] = "🍭"; + do { + answer = await askQuestion(questions.restart); + (answer === false) && Deno.exit(); + } while (!answer); + + return main(); + } + + if (Math.random() < 0.1) { + board[position[0]][position[1]] = "👻"; + return "double"; + } else { + board[position[0]][position[1]] = "❓"; + return "single"; + } +}; + +async function makeQuestion() { + const mode = await move(position); + let answer; + + if (mode === "double") { + let count = 0; + do { + answer = await askQuestion(questions.questions[getRandomIndex()]); + answer && ++count; + } while (!(answer && count === 2)); + } else { + do { + answer = await askQuestion(questions.questions[getRandomIndex()]); + } while (!answer); + } + + await makeQuestion(); +} + +const main = async (): Promise => { + board[3][3] = "⬜"; + position = [0, 0]; + let answer; + + do { + Deno.stdin.setRaw(true); + answer = await askQuestion(questions.firstQuestion); + if (answer === false) { + exit("🏃💨 Saliendo..."); + } + } while (!answer); + + Deno.stdin.setRaw(false); + return await makeQuestion(); +}; + +main(); From 36915712bc90dd6c9f86946e652826857912ee03 Mon Sep 17 00:00:00 2001 From: officegirbau <135320183+officegirbau@users.noreply.github.com> Date: Sat, 21 Oct 2023 06:58:05 +0200 Subject: [PATCH 0348/2103] #Reto 41 - python --- .../python/officegirbau.py" | 228 ++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/officegirbau.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/officegirbau.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/officegirbau.py" new file mode 100644 index 0000000000..6b752f0ddd --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/officegirbau.py" @@ -0,0 +1,228 @@ +import random +import time +import sys + +def imprimir_como_maquina(texto): + for caracter in texto: + sys.stdout.write(caracter) + sys.stdout.flush() + time.sleep(0.01) # Ajusta el valor de retraso según tus preferencias + print() # Salto de línea al final para que el próximo mensaje aparezca en una nueva línea + + +#colorins +verd= "\033[32m" +blau= "\033[34m" +groc = "\033[33m" +vermell = "\033[31m" +blanc = "\033[0m" + +# Función para crear una matriz de 4x4 con habitaciones aleatorias +def crear_mansio(): + matriz_mansio = [["⬜️" for _ in range(4)] for _ in range(4)] + + # Colocar la puerta en (0, 0) + matriz_mansio[0][0] = "🚪" + + # Obtener una ubicación aleatoria para el caramelo + fila_caramelo, columna_caramelo = (random.randint(0, 3), random.randint(0, 3)) + + # Asegurar que el caramelo no esté en (0, 0) + while (fila_caramelo, columna_caramelo) == (0, 0): + fila_caramelo, columna_caramelo = (random.randint(0, 3), random.randint(0, 3)) + + matriz_mansio[fila_caramelo][columna_caramelo] = "🍭" + + # Definir ubicaciones de los dos fantasmas + fila_fantasma1, columna_fantasma1 = (random.randint(0, 3), random.randint(0, 3)) + fila_fantasma2, columna_fantasma2 = (random.randint(0, 3), random.randint(0, 3)) + + # Asegurar que los fantasmas no estén en (0, 0) ni en la ubicación del caramelo + while (fila_fantasma1, columna_fantasma1) == (0, 0) or (fila_fantasma1, columna_fantasma1) == (fila_caramelo, columna_caramelo): + fila_fantasma1, columna_fantasma1 = (random.randint(0, 3), random.randint(0, 3)) + + while (fila_fantasma2, columna_fantasma2) == (0, 0) or (fila_fantasma2, columna_fantasma2) == (fila_caramelo, columna_caramelo) or (fila_fantasma2, columna_fantasma2) == (fila_fantasma1, columna_fantasma1): + fila_fantasma2, columna_fantasma2 = (random.randint(0, 3), random.randint(0, 3)) + + matriz_mansio[fila_fantasma1][columna_fantasma1] = "👻" + matriz_mansio[fila_fantasma2][columna_fantasma2] = "👻" + + return matriz_mansio + + + +def desencriptar_diccionari(enigmatic): + diccionari_desencriptat = {} + for paraula_encriptada, pregunta_encriptada in enigmatic.items(): + paraula = ''.join([chr(ord(caracter) - 1) for caracter in paraula_encriptada]) + pregunta = ''.join([chr(ord(caracter) - 1) for caracter in pregunta_encriptada]) + diccionari_desencriptat[paraula] = pregunta + return diccionari_desencriptat + +def mostrar_matriu(matriu): + for fila in matriu: + print(fila) + print() + +def avaluar_casella(posicio_jugador, diccionari, fantasmes): + # trasnportem la variable comptador + global comptador + # Després que el jugador encerti una pregunta i avanci a una nova casella: + fila, columna = posicio_jugador + casella = habitacions[fila][columna] + recorregut_jugador[fila][columna] = habitacions[fila][columna] + + if casella == "🍭": + imprimir_como_maquina(f"{verd}🍭¡Has encontrado el caramelo!🍭 Ganaste el juego!!.🍭\n{blanc}") + mostrar_matriu(recorregut_jugador) + imprimir_como_maquina(f'{vermell}⬜️MANSION⬜️DESCUBIERTA⬜️{blanc}') + mostrar_matriu(habitacions) + + + # Calcula el temps transcorregut + end_time = time.time() + elapsed_time = end_time - start_time + + # Imprimeix el temps transcorregut + imprimir_como_maquina(f"{verd}🍭Tiempo empleado: {int(elapsed_time)} segundos🍭{blanc}") + if comptador == 0: + imprimir_como_maquina(f'{verd}felicidades!! Ningún error. Hasta la próxima👻{blanc}') + else: + calabaza = '🎃' + imprimir_como_maquina(f'{vermell} has cometido {calabaza*int(comptador)} errores muajajajaja{blanc}') + return False + + elif casella == "⬜️": + while True: + + # Triar una clau (que és la resposta) aleatòria del diccionari + resposta_casella = random.choice(list(diccionari.keys())) + + # Obtenir la pregunta associada a la resposta i eliminar del diccionari + pregunta_casella = diccionari.pop(resposta_casella) + imprimir_como_maquina(f"Pregunta: {groc}{pregunta_casella}\n{blau}PISTA: {len(resposta_casella)} letras\n{blanc}") + resposta_jugador = input("Tu respuesta: ").lower() + + if resposta_jugador.lower().replace(' ','') == resposta_casella.lower(): + imprimir_como_maquina(f"{verd}Respuesta correcta. Puedes continuar explorando!!.👻{blanc}") + mostrar_matriu(recorregut_jugador) + break + else: + imprimir_como_maquina(f"{vermell}🎃 ...Respuesta incorrecta.🎃 La respuesta correcta era {verd} {resposta_casella} {vermell}Vuelve a intentar.{blanc}") + + comptador +=1 + elif casella == "👻": + while True: + + # Triar una clau (que és la resposta) aleatòria del diccionari + resposta_casella = random.choice(list(fantasmes.keys())) + + # Obtenir la pregunta associada a la resposta i eliminar del diccionari + pregunta_casella = fantasmes.pop(resposta_casella) + imprimir_como_maquina(f"Pregunta 👻 fantasma : {groc}{pregunta_casella}\n{blau}PISTA: {len(resposta_casella)} letras\n{blanc}") + resposta_jugador = input("Tu respuesta: ").lower() + + if resposta_jugador.lower().replace(' ','') == resposta_casella.lower(): + imprimir_como_maquina(f"{verd}Respuesta correcta. Puedes continuar explorando!!.👻{blanc}") + imprimir_como_maquina(f'{groc}Lo encontraras en {blau}{fantlink[resposta_casella]}{blanc}') + mostrar_matriu(recorregut_jugador) + break + else: + imprimir_como_maquina(f"{vermell}🎃 ...Respuesta incorrecta.🎃 La respuesta correcta era {verd} {resposta_casella} {vermell}Vuelve a intentar.{blanc}") + + comptador +=1 + + return True + +def moviments(fila, columna): + options = ["norte", "este", "sur", "oeste", "salir"] + + + if fila == 0 or (fila == 1 and columna == 0): + options.remove("norte") + if fila == len(habitacions) - 1: + options.remove("sur") + if columna == 0 or (fila == 0 and columna == 1): + options.remove("oeste") + if columna == len(habitacions[0]) - 1: + options.remove("este") + + return options + +def moure_jugador(posicio_jugador): + fila, columna = posicio_jugador + while True: + opcions_moviment = moviments(fila,columna) + imprimir_como_maquina(f"{blau}Opciones de movimiento disponibles:") + print(f'{verd}{opcions_moviment}') + direccio = input(f"{vermell}( ´◔ ω ◔`) {blau}Hacia dónde quieres ir? {blanc}").lower() + + if direccio == "salir": + imprimir_como_maquina(f"{vermell}👻..Has decidido abandonar el juego..👻 bye!!{blanc}") + return None + + elif direccio in opcions_moviment: + fila, columna = posicio_jugador + + if direccio == "norte": + fila -= 1 + elif direccio == "sur": + fila += 1 + elif direccio == "oeste": + columna -= 1 + elif direccio == "este": + columna += 1 + + nova_posicio = (fila, columna) + + posicio_jugador = nova_posicio + return posicio_jugador + + else: + imprimir_como_maquina(f"{vermell}(㇏(•̀ᵥᵥ•́)) Movimiento no válido. Vuelve a intentar.{groc}⚡{blanc}") + + +# Inicializa la posición del jugador +posicio_jugador = (0, 0) # (fila, columna) +# recorregut jugador +recorregut_jugador = [["🚪" for _ in range(4)] for _ in range(4)] +# diccionaris encriptats +fantaslink = {'npvsfefw': 'iuuqt;00npvsfefw/dpn0', 'iemfpo': 'iuuqt;00iefmfpo/ofu0', 'ipmbnvoep': 'iuuqt;00ipmbnvoep/jp0', 'fmmbepefmnbm': 'iuuqt;00xxx/fmmbepefmnbm/dpn0', 'njevefw': 'iuuqt;00njev/efw0', 'tpzebmup': 'iuuqt;00xxx/zpvuvcf/dpn0Atpzebmup', 'gsjljefmup': 'iuuqt;00xxx/gsjljefmup/dpn0', 'epudtw': 'iuuqt;00xxx/zpvuvcf/dpn0AEpuDTW', 't5wjubs': 'iuuqt;00ibdl5v/jp0', 'dbsnfobotjp': 'iuuqt;00xxx/dbsnfobotjp/efw0'} +fantasma = {'npvsfefw': 'Àrvjêo!mb!ujfof!nât!mbshb@', 'iemfpo': 'Àdpo!rvjfo!qvfeft!bqsfoefs!jogpsnâujdp!b!sjunp!ef!ifbwz@', 'ipmbnvoep': 'Àrvjêo!mb!ujfof!nât!bodib@', 'fmmbepefmnbm': 'Àrvê!tjuf!dpouspmb!fm!ibdlfs!nât!gbnptp!ef!Ftqbòb@', 'njevefw': 'Àrvê!dsbdl!efm!kbwbtdsjqu!ujfof!vo!hfnfmp!fo!Mb!Sftjtufodjb@', 'tpzebmup': 'Àrvê!qsphsbnbeps!bshfoujop!ujfof!vob!wfmpdjebe!efm!ibcmb!efm!251&@', 'gsjljefmup': 'Àrvê!tfsîb!Kptê!Npub!tj!gvfsb!qsphsbnbeps@', 'epudtw': 'Àrvjêo!tfsâ!fm!qsjnfs!djcpsh!dpo!uboub!JB!rvf!ejwvmhb@', 't5wjubs': 'Àrvê!ibdlfs!ftuâ!qmbofboep!js!b!Boepssb@', 'dbsnfobotjp': 'ÀDpo!rvjêo!botîp!bqsfoefs!Tjhnb@'} +enigmatic = {'qjsbub': 'ÀRvê!uêsnjop!tf!vujmj{b!dpnûonfouf!qbsb!eftdsjcjs!b!vob!qfstpob!rvf!dpqjb!z!ejtusjcvzf!jmfhbmnfouf!tpguxbsf-!nûtjdb!p!qfmîdvmbt!fo!mîofb@', 'wjsvt': 'ÀRvê!ujqp!ef!tpguxbsf!nbmjdjptp!tf!sfqmjdb!z!tf!qspqbhb!b!usbwêt!ef!bsdijwpt!z!qsphsbnbt@', 'cpuofu': 'ÀDônp!tf!mmbnb!bm!dpokvoup!ef!psefobepsft!jogfdubept!dpouspmbept!qps!vo!djcfsefmjdvfouf@', 'Uspzbop': 'Àdônp!tf!mmbnb!fm!tpguxbsf!nbmjdjptp!b!usbwêt!efm!dvbm!mpt!ibdlfst!upnbo!dpouspm!efm!tjtufnb!dpo!fm!pckfujwp!ef!spcbs!ebupt!qfstpobmft', 'hvtbop': 'Àrvê!wjsvt!qvfef!jogfdubsuf!fm!psefobeps!nfejbouf!usbotgfsfodjb!ef!bsdijwpt@', 'sbotpnxbsf': 'Àrvê!ujqp!ef!wjsvt!dpotjtuf!fo!rvf!vo!ibdlfs!uf!cmprvfb!fm!psefobeps!z!uf!qjef!vob!sfdpnqfotb@', 'jmpwfzpv': 'Àrvê!wjsvt!uspzbop!jogfdup!61!njmmpoft!ef!psefobepsft!fo!vob!tfnbob!fo!fm!bòp!3111@', 'qijtijoh': 'Àrvê!uêdojdb!tvqmboub!mb!jefoujebe!ef!dpnqbòîbt!v!pshbojtnpt!qûcmjdpt!z!tpmjdjubo!jogpsnbdjôo!qfstpobm!z!cbodbsjb!bm!vtvbsjp@', 'EEpT': 'ÀRvê!ujqp!ef!bubrvf!jogpsnâujdp!dpotjtuf!fo!jovoebs!vo!tfswjeps!p!sfe!dpo!vob!hsbo!dboujebe!ef!tpmjdjuveft!qbsb!efkbsmb!jobddftjcmf@', 'ibdljoh': 'ÀDvâm!ft!fm!uêsnjop!rvf!tf!vujmj{b!qbsb!eftdsjcjs!mb!qsâdujdb!ef!cvtdbs!z!fyqmpubs!wvmofsbcjmjebeft!fo!tjtufnbt!jogpsnâujdpt@','qzuipo': 'ÀDvâm!ft!vo!mfohvbkf!ef!qsphsbnbdjôo!dpopdjep!qps!tv!tjnqmjdjebe!z!mfhjcjmjebe@', 'gboubtnb': 'ÀRvê!gjhvsb!ftqfdusbm!b!nfovep!tf!btpdjb!dpo!Ibmmpxffo@', 'djcfstfhvsjebe': 'ÀRvê!dbnqp!tf!fogpdb!fo!qspufhfs!tjtufnbt!ef!jogpsnbdjôo!dpousb!bubrvft@', 'bsbòb': 'ÀRvê!dsjbuvsb!qfmveb!z!ef!pdip!qbubt!ft!dpnûo!fo!Ibmmpxffo@', 'mjovy': 'ÀDvâm!ft!vo!tjtufnb!pqfsbujwp!ef!dôejhp!bcjfsup!bnqmjbnfouf!vujmj{bep@', '{pncjf': 'ÀRvê!tfs!op!nvfsup!b!nfovep!bqbsfdf!fo!qfmîdvmbt!z!kvfhpt!ef!{pncjft@', 'kbwb': 'ÀRvê!mfohvbkf!ef!qsphsbnbdjôo!ft!gbnptp!qps!tfs!(xsjuf!podf-!svo!bozxifsf(@', 'dbmbcb{b': 'ÀRvê!wfhfubm!tf!ubmmb!dpnûonfouf!dpnp!mjoufsob!fo!Ibmmpxffo@', 'ibdlfs': 'ÀRvê!uêsnjop!tf!vujmj{b!qbsb!eftdsjcjs!b!vob!qfstpob!rvf!bddfef!b!tjtufnbt!jogpsnâujdpt!tjo!bvupsj{bdjôo@', 'wbnqjsp': 'ÀRvê!dsjbuvsb!ef!mb!opdif!tf!bmjnfoub!ef!mb!tbohsf!ef!mpt!wjwpt@', 'qiq': 'ÀRvê!mfohvbkf!ef!qsphsbnbdjôo!tf!vujmj{b!dpnûonfouf!qbsb!fm!eftbsspmmp!xfc@', 'nvsdjfmbhp': 'ÀRvê!nbnîgfsp!wvfmb!z!ft!b!nfovep!btpdjbep!dpo!mb!opdif@', 'tfhvsjebejogpsnbujdb': 'ÀRvê!tf!sfgjfsf!b!qspufhfs!tjtufnbt!z!ebupt!dpousb!bnfob{bt!djcfsoêujdbt@', 'tjtufnbpqfsbujwp': 'ÀRvê!tpguxbsf!dpouspmb!fm!ibsexbsf!ef!vob!dpnqvubepsb!z!benjojtusb!sfdvstpt@', 'npnjb': 'ÀRvê!tfs!tf!fowvfmwf!fo!wfoebt!z!ft!vo!ufnb!dpnûo!fo!qfmîdvmbt!ef!bwfouvsbt@', 'djcfsbubrvf': 'ÀRvê!uêsnjop!tf!vujmj{b!qbsb!eftdsjcjs!vo!bubrvf!nbmjdjptp!fo!mîofb@', 'csvkb': 'ÀRvê!gjhvsb!b!nfovep!tf!sfqsftfoub!wpmboep!fo!vob!ftdpcb!z!mbo{boep!ifdij{pt@', 'gjsfxbmm': 'ÀRvê!tf!vujmj{b!qbsb!gjmusbs!fm!usâgjdp!ef!sfe!op!eftfbep@', 'ftrvfmfup': 'ÀRvê!ftusvduvsb!joufsob!efm!dvfsqp!ivnbop!b!nfovep!tf!btpdjb!dpo!Ibmmpxffo@', 'djcfsefmjodvfouf': 'ÀRvê!uêsnjop!tf!vujmj{b!qbsb!eftdsjcjs!b!vob!qfstpob!rvf!dpnfuf!efmjupt!fo!mîofb@', 'ubsbouvmb': 'ÀRvê!dsjbuvsb!ef!pdip!qbubt!qfmvebt!b!nfovep!dbvtb!ufnps!fo!mb!hfouf@', 'dsjquphsbgjb': 'ÀRvê!uêdojdb!tf!vujmj{b!qbsb!qspufhfs!mb!jogpsnbdjôo!nfejbouf!mb!dpejgjdbdjôo@', 'esbdvmb': 'ÀRvê!qfstpobkf!mjufsbsjp!z!djofnbuphsâgjdp!ft!dpopdjep!qps!cfcfs!tbohsf@', 'nbmxbsf': 'ÀRvê!ujqp!ef!tpguxbsf!nbmjdjptp!qvfef!ebòbs!vob!dpnqvubepsb!p!spcbs!ebupt@', 'ftqboubqbkbspt': 'ÀRvê!gjhvsb!tf!dpmpdb!fo!mpt!dbnqpt!qbsb!btvtubs!b!mbt!bwft@'} +# diccionaris desencriptats: +diccionari= desencriptar_diccionari(enigmatic) +fantasmes = desencriptar_diccionari(fantasma) +fantlink = desencriptar_diccionari(fantaslink) + +if __name__ == '__main__': + # benvinguda al joc + imprimir_como_maquina(f"{groc} ___ _ _ _ ____ ") + imprimir_como_maquina(f"{groc} / __(_) ___ _ ____ _____ _ __ (_) __| | / __ \ ___ ") + imprimir_como_maquina(f"{groc} /__\// |/ _ \ '_ \ \ / / _ \ '_ \| |/ _` |/ / _` / __|") + imprimir_como_maquina(f"{groc} / \/ \ | __/ | | \ V / __/ | | | | (_| | | (_| \__ \ ") + imprimir_como_maquina(f"{groc} \_____/_|\___|_| |_|\_/ \___|_| |_|_|\__,_|\ \__,_|___/ ") + imprimir_como_maquina(f"{groc} 👻 \____/ ") + imprimir_como_maquina(f"{vermell} 👻 _ _ _ _ _") + imprimir_como_maquina(f"{vermell} __ _| | _ 👻 ___| |_ ___ | || | / | ") + imprimir_como_maquina(f"{vermell} / _` | | | '__/ _ \ __/ _ \ | || |_| | ") + imprimir_como_maquina(f"{vermell} | (_| | | | | | __/ || (_) | |__ _| | ") + imprimir_como_maquina(f"{vermell} \__,_|_| |_| \___|\__\___/ |_| |_|") + imprimir_como_maquina(f"{blau} Encuentra el 🍭 que está dentro de la mansión del TERROR") + imprimir_como_maquina(f"{verd} Trata de acertar todas las preguntas para no cargarte de 🎃!!") + + imprimir_como_maquina(f"{blau} Has entrado por el nordoeste 🚪") + # crear les habitacions aleatoriament + habitacions = crear_mansio() + # comptador d'errors + comptador = 0 + + continuar_joc = True + start_time = time.time() + # comença el joc + while continuar_joc: + posicio_jugador = moure_jugador(posicio_jugador) + if posicio_jugador is None: + continuar_joc = False + else: + continuar_joc = avaluar_casella(posicio_jugador, diccionari, fantasmes) From 52d8406efb7b79c2ab03e38681158966c8df6dd4 Mon Sep 17 00:00:00 2001 From: Oscar Hernandez Date: Fri, 20 Oct 2023 23:14:17 -0600 Subject: [PATCH 0349/2103] Correcciones ejercicio #2 --- .../go/oscar503sv.go | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/go/oscar503sv.go diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/go/oscar503sv.go b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/go/oscar503sv.go new file mode 100644 index 0000000000..9cd3f64b3d --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/go/oscar503sv.go @@ -0,0 +1,88 @@ +package main + +import ( + "fmt" +) + +/* + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ + +func calculateScore(score int) string { + switch score { + case 0: + return "Love" + case 1: + return "15" + case 2: + return "30" + case 3: + return "40" + default: + return "Ventaja" + } +} + +func displayScore(player1Score, player2Score int) string { + if player1Score >= 3 && player2Score >= 3 { + if player1Score == player2Score { + return "Deuce" + } else if player1Score > player2Score { + if player1Score >= player2Score+2 { + return "Ha ganado el P1" + } + return "Ventaja P1" + } else { + if player2Score >= player1Score+2 { + return "Ha ganado el P2" + } + return "Ventaja P2" + } + } else { + return calculateScore(player1Score) + " - " + calculateScore(player2Score) + } +} + +func playTennis(sequence []string) string { + player1Score, player2Score := 0, 0 + + for _, point := range sequence { + if point == "P1" { + player1Score++ + } else if point == "P2" { + player2Score++ + } else { + return "Error: Entrada inválida" + } + + currentScore := displayScore(player1Score, player2Score) + fmt.Println(currentScore) + + if currentScore == "Ha ganado el P1" || currentScore == "Ha ganado el P2" { + return currentScore + } + } + + return "" +} + +func main() { + sequence := []string{"P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"} + result := playTennis(sequence) + fmt.Println(result) +} From 2b0fd738fbaef77ca7c6a40706b75ba8c6393d3c Mon Sep 17 00:00:00 2001 From: Oscar Hernandez Date: Fri, 20 Oct 2023 23:19:30 -0600 Subject: [PATCH 0350/2103] Solucion ejercicio #3 --- .../python/oscar503sv.py" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/oscar503sv.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/oscar503sv.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/oscar503sv.py" new file mode 100644 index 0000000000..c66794ced2 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/oscar503sv.py" @@ -0,0 +1,41 @@ +import random +import string + +def generar_contrasena(longitud, usa_mayusculas, usa_numeros, usa_simbolos): + caracteres = string.ascii_letters if usa_mayusculas else string.ascii_lowercase + caracteres += string.digits if usa_numeros else '' + caracteres += string.punctuation if usa_simbolos else '' + + if not (usa_mayusculas or usa_numeros or usa_simbolos): + print("Debes habilitar al menos una de las opciones: mayúsculas, números o símbolos.") + return + + contrasena = ''.join(random.choice(caracteres) for _ in range(longitud)) + return contrasena + +def main(): + print("Generador de contraseñas aleatorias") + + while True: + try: + longitud = int(input("Longitud de la contraseña (entre 8 y 16): ")) + if 8 <= longitud <= 16: + break + else: + print("La longitud debe estar entre 8 y 16.") + except ValueError: + print("Ingrese un número válido.") + + usa_mayusculas = input("¿Incluir letras mayúsculas? (Sí/No): ").strip().lower() == 'si' + usa_numeros = input("¿Incluir números? (Sí/No): ").strip().lower() == 'si' + usa_simbolos = input("¿Incluir símbolos? (Sí/No): ").strip().lower() == 'si' + + contrasena = generar_contrasena(longitud, usa_mayusculas, usa_numeros, usa_simbolos) + + if contrasena: + print(f"Tu contraseña generada es: {contrasena}") + else: + print("No se pudo generar una contraseña válida.") + +if __name__ == "__main__": + main() From f2f67c15e0bdd9647bc87883f923a6c6d59704de Mon Sep 17 00:00:00 2001 From: SantiALS Date: Sat, 21 Oct 2023 11:58:46 -0300 Subject: [PATCH 0351/2103] Reto #41 Python --- .../python/SantiALS.py" | 236 ++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/SantiALS.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/SantiALS.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/SantiALS.py" new file mode 100644 index 0000000000..02f11d8a14 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/SantiALS.py" @@ -0,0 +1,236 @@ +""" +/* + * Este es un reto especial por Halloween. + * Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces. + * + * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. + * (Tienes total libertad para ser creativo con los textos) + * + * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 + * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. + * (16 habitaciones, siendo una de entrada y otra donde están los dulces) + * Esta podría ser una representación: + * 🚪⬜️⬜️⬜️ + * ⬜️👻⬜️⬜️ + * ⬜️⬜️⬜️👻 + * ⬜️⬜️🍭⬜️ + * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. + * Si no lo aciertas no podrás desplazarte. + * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. + * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) + * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. + * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y + * tengas que responder dos preguntas para salir de ella. + */ + +""" + +import random, os + +def board(): + + window = [['⬜️'] * 4 for _ in range(4)] + window[0][0] = '🚪' + + return window + +def print_screen(screen: list): + + for i in range(len(screen)): + print(''.join(screen[i])) + +def riddles(): + + questions_list =[ + 'Tengo cabeza redonda, sin nariz, ojos, ni frente, y mi cuerpo se compone tan solo de blancos dientes.', + 'Salgo de la habitación y entro en la cocina meneando la cola como una gallina.', + 'Ya se fue el verano y otra estación llega: como lluvia de oro caen hojas secas.', + '¿Qué cosa es, que cuanto más intensa se hace menos se ve?', + 'Una dama muy delgada y de palidez mortal, que se alegra y se reanima cuando la van a quemar.', + '¿Cuál es la cosa que cruda no existe, ni puede ser, pero que si está abrasada no se la puede comer?', + 'Duros como las piedras, para el perro un buen manjar, y sin ellos no podrías ni saltar ni caminar.', + 'Luna plateada muy bien afilada: de día trabajas y de noche descansas.', + 'Casa con dos cuartos, nueva cada mes y otras veces llena: adivina quién es.', + 'Tengo alas negras como la noche, y mi graznido es tan espeluznante como mi aspecto. Me encanta acechar en los tejados y los árboles. ¿Qué soy?', + 'Vestido de blanco, con una vieja sábana, aparecerá de noche. ¡Cuidado con el …! ', + '¿Qué cosa es que cuanto más le quitas más grande es?', + 'No muerde ni ladra, pero tiene dientes y la casa guarda. ¿Qué es?', + 'Uno larguito, dos más bajitos, otro chico y flaco, y otro gordonazo.', + 'Grande, muy grande, mayor que la Tierra. Arde y no se quema, quema y no es candela.', + 'Entre pared y pared hay una sonora mujer, que con el diente llama a la gente.', + '¿Quién será la desvelada, lo puedes tú discurbrir, de día y noche acostada, sin poder nunca dormir?', + 'Si lo tengo, no lo comparto. Si lo comparto, no lo tengo. ¿Qué es?', + '¿En qué lugar encuentras el jueves antes que el miércoles?', + 'Es tan delicado que se rompe con mencionarlo.', + 'Estoy entre cielo y tierra. ¿Qué soy?' + ] + + answers_list =[ + 'AJO', + 'ESCOBA', + 'OTOÑO', + 'OSCURIDAD', + 'VELA', + 'CENIZAS', + 'HUESOS', + 'HOZ', + 'LUNA', + 'CUERVO', + 'FANTASMA', + 'AGUJERO', + 'LLAVE', + 'DEDOS', + 'SOL', + 'CAMPANA', + 'CAMA', + 'SECRETO', + 'DICCIONARIO', + 'SILENCIO', + 'Y' + ] + + question = random.randint(0,20) + print(f'\nPREGUNTA:\n {questions_list[question]}') + answer = input('\nRespuesta: ').upper() + + if answer == answers_list[question]: + + print('CORRECTO!\n') + return False + + elif answer == 'ESC': + + return 'break' + + else: + + print('INCORRECTO!') + return True + +def message(): + print('''BIENVENIDO AL DESAFÍO DE HALLOWEEN!\n +Te encuentras explorando una mansión abandonada llena de habitaciones. En cada habitación tendrás que resolver un acertijo para +poder avanzar a la siguiente.\n +Tu misión es encontrar la habitación de los dulces. Para poder moverte deberás responder correctamente los enigmas con "UNA SOLA +PALABRA". Partirás de la habitación en la posición [0,0] (Puerta).\n +CUIDADO! Si te encuentras con un fantasma en la habitación deberás responder correctamente 2 acertijos para poder avanzar.\n +Debes recordar en qué casillero te encuentras, en caso de olvidarte digita "Room" para conocer tu habitación. Comienzas en la puerta.\n +Para salir del juego digite "Esc". + ''') + +def movement(last_position: list): + + while True: + + position = last_position.copy() + + if last_position[0] == 0 and last_position[1] == 0 : + print('Elija una de las direcciones posibles: SUR[🡣] | ESTE [🡢]') + elif last_position[0] == 3 and last_position[1] == 3: + print('Elija una de las direcciones posibles: NORTE[🡡] | OESTE [🡠]') + elif last_position[0] == 3 and last_position[1] == 0: + print('Elija una de las direcciones posibles: NORTE[🡡] | ESTE [🡢]') + elif last_position[0] == 0 and last_position[1] == 3: + print('Elija una de las direcciones posibles: SUR[🡣] | OESTE [🡠]') + elif 0< last_position[0] <3 and last_position[1] == 0: + print('Elija una de las direcciones posibles: NORTE[🡡] | SUR[🡣] | ESTE [🡢]') + elif 0< last_position[0] <3 and last_position[1] == 3: + print('Elija una de las direcciones posibles: NORTE[🡡] | SUR[🡣] | OESTE [🡠]') + elif 0< last_position[1] <3 and last_position[0] == 0: + print('Elija una de las direcciones posibles: SUR[🡣] | ESTE [🡢] | OESTE [🡠]') + elif 0< last_position[1] <3 and last_position[0] == 3: + print('Elija una de las direcciones posibles: NORTE[🡡] | ESTE [🡢] | OESTE [🡠]') + else: + print('Elija una de las direcciones posibles: NORTE[🡡] | SUR[🡣] | ESTE [🡢] | OESTE [🡠]') + + event = input().upper() + + if event == 'ESC': + position = 'esc' + break + elif event == 'ROOM': + print(f'\nTe encuentras en la habitación: {position}\n') + else : + + if event == 'SUR': + position[0] += 1 + + elif event == 'ESTE': + position[1] += 1 + + elif event == 'OESTE': + position[1] -= 1 + + elif event == 'NORTE': + position[0] -= 1 + + if position[0] < 0 or position[0] >3 or position[1] < 0 or position[1] >3: + print('\nMovimiento inválido. Por favor ingrese un nuevo movimiento.') + elif event == 'ROOM': + pass + else: + break + + return position + +def probability() -> bool: + + roll_dice = random.randint(1,10) + + if roll_dice == 1: + doble_answer = True + print('CUIDADO CON EL FANTASMA!Debes responder 2 preguntas correctas.') + else: + doble_answer = False + + return doble_answer + + +def main(): + + os.system('cls') + message() + print_screen(board()) + + last_position = [0,0] + new_position = movement(last_position) + + while True: + + if new_position == [2,1]: + print('FELICIDADES! Encontraste la habitación con los dulces') + break + + elif new_position == 'esc': + print('Saliste del juego.') + break + + doble_answer = probability() + blok_movement = riddles() + + while blok_movement == True or doble_answer == True: + + if blok_movement == False and doble_answer == True: + while doble_answer == True: + print('CUIDADO CON EL FANTASMA!Debes responder 1 pregunta correcta más.') + blok_movement = riddles() + if blok_movement == False: + doble_answer = False + + break + + if blok_movement == 'break': + break + + blok_movement = riddles() + + print_screen(board()) + new_position = movement(new_position) + + + + +if __name__ == '__main__': + main() \ No newline at end of file From bbced1c26b06b179807682c7ff05571840c233d8 Mon Sep 17 00:00:00 2001 From: Jordi Ayala Date: Sat, 21 Oct 2023 10:01:54 -0600 Subject: [PATCH 0352/2103] Reto #39 - Java --- .../java/asjordi.java" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/java/asjordi.java" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/java/asjordi.java" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/java/asjordi.java" new file mode 100644 index 0000000000..011d1dc8d9 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/java/asjordi.java" @@ -0,0 +1,20 @@ +import java.util.*; + +public class PythagoreanTriples { + + public static List find(int limit){ + List triples = new LinkedList<>(); + + for (int a = 1; a < limit + 1; a++) { + for (int b = a; b < limit + 1; b++) { + int squaredCat = (a * a) + (b * b); + double c = Math.sqrt(squaredCat); + if (c > limit) break; + if (c == (int) c) triples.add(new int[]{a, b, (int) c}); + } + } + + return triples; + } + +} From 111669ed06b7f07beb661caf90d5fe8dd6b10dc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs?= Date: Sat, 21 Oct 2023 18:39:00 +0200 Subject: [PATCH 0353/2103] Reto #41 C# --- .../c#/Aristarko.cs" | 282 ++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/Aristarko.cs" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/Aristarko.cs" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/Aristarko.cs" new file mode 100644 index 0000000000..78d9091895 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/Aristarko.cs" @@ -0,0 +1,282 @@ +// See https://aka.ms/new-console-template for more information + +using System.Diagnostics; +using System.Numerics; +using System.Runtime.CompilerServices; + +class Program{ + static void Main(string[] args){ + Console.WriteLine("Empezamos el juego."); + + // Se crea el tablero + Tablero tablero = new Tablero(4,4); + int meta = tablero.Get_Pos(Tablero.dulce); + + // Se crea el jugador + Jugador jugador = new Jugador(tablero.Get_Pos(Tablero.puerta)); + Console.WriteLine($"El jugador esta en la pos {jugador.pos}"); + + // Empieza el juego + do{ + tablero.Print(); + // Movimiento del jugador + Console.WriteLine("¿Dónde quieres desplazarte? [norte|sur|este|oeste]"); + string respuestaJugador = Console.ReadLine(); + if(!jugador.ValidaRespuesta(respuestaJugador)){ + Console.WriteLine("La respuesta no está entre las opciones disponibles." + Environment.NewLine + "Pulsa para continuar."); + Console.ReadKey(); + continue; + } + int newPos = -1; + tablero.Move(respuestaJugador, jugador.pos, out newPos); + jugador.pos = newPos; + + if(jugador.pos != meta){ + Console.Clear(); + tablero.Print(); + + // Lógica casilla + tablero.AbreCasilla(jugador.pos); + tablero.Print(); + + Console.WriteLine("Pulsa para continuar."); + Console.ReadLine(); + Console.Clear(); + } + + + }while(jugador.pos != meta); + + Console.WriteLine("Eu salido del jogo"); + } +} + + +class Jugador{ + + public static string player = "🧭"; + + public int pos{get;set;} + + public Jugador(int pos){ + this.pos = pos; + } + + /// + /// Verifica si respuesta del jugador esta entre las opciones validas + /// + public bool ValidaRespuesta(string respuesta){ + return Enum.IsDefined(typeof(Tablero.Movimientos), respuesta); + } + + +} + +class Casilla{ + public string Tipo{get;set;} + public bool Activa{get;set;} + + public Casilla(string tipo, bool activa = false){ + this.Tipo = tipo; + this.Activa = activa; + } + + public void Print(){ + if(Activa){ + Console.Write(Jugador.player); + }else{ + Console.Write(Tipo); + } + } +} + +class Tablero{ + + #region Preguntas + + Dictionary preguntas = new Dictionary() { + {"¿El agua moja?","si"}, + {"Plata no es ¿dime que es?","platano"}, + {"Si un objeto imparable choca con un objeto inamovible que pasa", "nada"}, + {"Si tengo 3 peces y se ahoga 1 cuantos tengo","3"}, + {"Napoleon tenia un caballo blanco, de que color era el caballo de Napoleon","blanco"}, + {"Siempre paso helada y prima es la hielera","nevera"}, + {"¿Que le paso a la gallina cuando cruzo la calle?","llego al otro lado"}, + {"Sostengo muchas perlas blancas unas arriba unas abajo", "dentadura"} + }; + + #endregion Preguntas + + #region Propiedades + + public enum Movimientos{ + norte, + sur, + este, + oeste + } + + public static string casilla = "⬜️"; + public static string puerta = "🚪"; + public static string fantasma = "👻"; + public static string dulce = "🍭"; + public static string enigma = "❓"; + + int alto; + int ancho; + + int probabilidadFantasmas = 10; + + public Casilla[] casillas{get;set;} + + #endregion Propiedades + + public Tablero(int alto, int ancho){ + this.alto = alto; + this.ancho = ancho; + + Init(); + } + + private void Init(){ + // Establecemos el total de casillas + casillas = new Casilla[alto * ancho]; + + // Rellenamos todo con [Casillas] + for(int i = 0; i < casillas.Length; i++){ + casillas[i] = new Casilla(casilla); + } + + // Insertamos la [Puerta] de entrada + // La puerta estará obligatoriamente en un borde del tablero + BuscaEntrada(); + + // Insertamos el [Dulce] de salida + // La salida puede estar en cualquier posicion + BuscaSalida(); + } + + /// + /// Busca una casilla en el brode del tablero para posicionar la salida + /// + private void BuscaEntrada(){ + Random random = new Random(); + int borde = random.Next(4); + int fila = (borde < 2) ? (borde == 0 ? 0 : alto - 1) : random.Next(alto); + int columna = (borde >= 2) ? (borde == 2 ? 0 : ancho - 1) : random.Next(ancho); + int indice = (fila * ancho) + columna; + casillas[indice].Tipo = puerta; + casillas[indice].Activa = true; + } + + private void BuscaSalida(){ + Random random = new Random(); + int casilla = random.Next(casillas.Length); + if(casillas[casilla].Tipo == puerta){ + BuscaSalida(); + return; + } + casillas[casilla].Tipo = dulce; + } + + public void Print(){ + for(int i = 0; i < casillas.Length; i++){ + casillas[i].Print(); + int col = i % ancho; // Columna + if(col == ancho - 1){ + Console.Write(Environment.NewLine); + } + } + } + + public int Get_Pos(string tipo){ + int? pos = casillas.Select((x, index) => new {E = x, Indice = index}).Where(x => x.E.Tipo == tipo).Select(x => x.Indice).First(); + if(pos != null && pos > -1){ + return (int)pos; + } + return -1; + } + + public void Move(string movimiento, int playerPos, out int playerNewPos){ + Movimientos mov; + if(!Enum.TryParse(movimiento, out mov)){ + Console.WriteLine($"El movimeinto {movimiento} no está permitido."); + playerNewPos = playerPos; + return; + } + + int fila = playerPos / ancho; + int col = playerPos % ancho; + + switch(mov){ + case Movimientos.norte: + fila = (fila > 0)? fila-1 : fila = 0; + break; + case Movimientos.sur: + fila = (fila < alto)? fila+1 : fila = alto; + break; + case Movimientos.este: + col = (col < ancho)? col+1 : col = ancho; + break; + case Movimientos.oeste: + col = (col > 0)? col-1 : col = 0; + break; + } + + playerNewPos = fila * ancho + col; + + casillas[playerPos].Activa = false; + casillas[playerNewPos].Activa = true; + + if(casillas[playerPos].Tipo == enigma){ + casillas[playerPos].Tipo = casilla; + } + if(casillas[playerNewPos].Tipo == casilla){ + casillas[playerNewPos].Tipo = enigma; + } + } + + public void AbreCasilla(int posCasilla){ + bool isFantasma = false; + int numPreguntas = 1; + int numRespuestas = 0; + + // Comprobamos la posibilidad de que haya un fantasma + Random random = new Random(); + int numeroAleatorio = random.Next(1, 101); + if(numeroAleatorio <= probabilidadFantasmas){ + isFantasma = true; + } + + if(isFantasma){ + Console.WriteLine("¡Ha aparecido un fantasma!"); + casillas[posCasilla].Tipo = fantasma; + numPreguntas = 2; + } + + do{ + // Ronda Preguntas + if(RondaPregunta()){ + numRespuestas++; + } + + }while(numRespuestas < numPreguntas); + } + + private bool RondaPregunta(){ + Random random = new Random(); + int numeroAleatorio = random.Next(0, preguntas.Count); + KeyValuePair pregunta = preguntas.ElementAt(numeroAleatorio); + Console.WriteLine($"Preguta: {pregunta.Key}"); + Console.Write("Respuesta: "); + string respuesta = Console.ReadLine().Trim().ToLower(); + + if(respuesta != pregunta.Value){ + Console.WriteLine("Te has equivocado jeje."); + return false; + } + + Console.WriteLine("Correcto!!."); + return true; + } +} \ No newline at end of file From 5c76ae372233e373ffd0d8edd5caf4130278ef59 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Sat, 21 Oct 2023 11:47:51 -0500 Subject: [PATCH 0354/2103] Reto #41 - Python --- .../python/Engleonardorm7.py" | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/Engleonardorm7.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/Engleonardorm7.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/Engleonardorm7.py" new file mode 100644 index 0000000000..3b81b4922a --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/Engleonardorm7.py" @@ -0,0 +1,106 @@ +import random + +mansion = [ + ['🚪', '⬜', '⬜', '⬜'], + ['⬜', '👻', '⬜', '⬜'], + ['⬜', '⬜', '⬜', '👻'], + ['⬜', '⬜', '🍭', '⬜'] +] + +def generar_enigma(): + enigmas = [ + { + 'pregunta': '¿Que es un vampiro?', + 'respuesta': 'un ser de la noche', + }, + { + 'pregunta': '¿Cual es el color de una calabaza?', + 'respuesta': 'naranja', + }, + { + 'pregunta': '¿Que animal se relaciona con Halloween?', + 'respuesta': 'murcielago', + }, + { + 'pregunta': '¿Cuál es la tradición en Halloween en la que los niños van de casa en casa pidiendo dulces?', + 'respuesta': 'Truco o Trato', + }, + { + 'pregunta': '¿En qué fecha se celebra Halloween?', + 'respuesta': '31 de octubre', + }, + { + 'pregunta': '¿Qué fruta se usa comúnmente para tallar linternas en Halloween?', + 'respuesta': 'calabaza', + }, + { + 'pregunta': '¿Cómo se llama la película animada de Halloween en la que Jack Skellington descubre la Navidad?', + 'respuesta': 'El Extraño Mundo de Jack', + }, + { + 'pregunta': '¿Cuál es el disfraz más común en Halloween?', + 'respuesta': 'bruja', + } + ] + return random.choice(enigmas) + +def jugar(): + x, y = 0, 0 + intentos = 1 + fantasmas = random.random() < 0.1 + + while True: + habitacion = mansion[y][x] + + if habitacion == '🍭': + print("¡Encontraste la habitación de los dulces! ¡Ganaste!") + break + + print(f"Estás en una habitación {habitacion}.") + if fantasmas: + print("¡Un fantasma apareció! Debes responder dos preguntas para salir.") + for _ in range(2): + enigma = generar_enigma() + respuesta_usuario = input(f"Pregunta {intentos}: {enigma['pregunta']} ").strip().lower() + if respuesta_usuario == enigma['respuesta']: + print("Respuesta correcta. ¡El fantasma se ha ido!") + else: + print("Respuesta incorrecta. El fantasma se burla de ti.") + break + intentos += 1 + else: + fantasmas = False + else: + enigma = generar_enigma() + respuesta_usuario = input(f"Pregunta {intentos}: {enigma['pregunta']} ").strip().lower() + if respuesta_usuario == enigma['respuesta']: + print("Respuesta correcta. Puedes moverte.") + direccion = input("¿Hacia dónde quieres moverte (norte/sur/este/oeste)? ").strip().lower() + if direccion == 'norte': + if y > 0: + y -= 1 + else: + print("No puedes ir al norte desde aquí.") + elif direccion == 'sur': + if y < 3: + y += 1 + else: + print("No puedes ir al sur desde aquí.") + elif direccion == 'este': + if x < 3: + x += 1 + else: + print("No puedes ir al este desde aquí.") + elif direccion == 'oeste': + if x > 0: + x -= 1 + else: + print("No puedes ir al oeste desde aquí.") + else: + print("Dirección no válida. Debes elegir norte, sur, este u oeste.") + else: + print("Respuesta incorrecta. No puedes avanzar.") + intentos += 1 + +print("Bienvenido a la mansión abandonada. Tu misión es encontrar la habitación de los dulces.") +jugar() From dddea04e5ed40e8700f3171c16cb9a995161dcad Mon Sep 17 00:00:00 2001 From: ycanas Date: Sat, 21 Oct 2023 11:48:12 -0500 Subject: [PATCH 0355/2103] Reto #40 - Java --- .../java/ycanas.java" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/ycanas.java" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/ycanas.java" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/ycanas.java" new file mode 100644 index 0000000000..5345bad8a6 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/java/ycanas.java" @@ -0,0 +1,21 @@ +import java.util.Scanner; + +public class ycanas { + + public static void tableOf(int number) { + System.out.println(); + + for (int i = 1; i < 11; i++) { + int value = i * number; + System.out.println(i + " X " + number + " = " + value); + } + } + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + + System.out.print("¿Que tabla desea consulta? : "); + int number = sc.nextInt(); + tableOf(number); + } +} From 422181270d6341f518de3cf70cef6d3d2c10b4fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Sat, 21 Oct 2023 20:02:15 +0200 Subject: [PATCH 0356/2103] feat: reto 41 didacdev --- .vscode/settings.json | 1 + .../python/didacdev.py | 53 +- .../swift/didacdev.swift" | 482 ++++++++++++++++++ 3 files changed, 504 insertions(+), 32 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/swift/didacdev.swift" diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/didacdev.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/didacdev.py index 3ed5681f57..409e033f8e 100644 --- a/Retos/Reto #38 - LAS SUMAS [Media]/python/didacdev.py +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/didacdev.py @@ -1,40 +1,29 @@ -INITIAL_NUMBERS_LIST = [1, 5, 3, 2] -GOAL = 6 +def find_sums(numbers: list, target: int) -> list: + def find_sum(start: int, target: int, combination: list) -> list: + # encontrar solución + if target == 0: + result.append(combination[:]) + return -def combinations(c: list) -> list: - """ - Calcula y devuelve el conjunto potencia del conjunto c. - """ - if len(c) == 0: - return [[]] + # no encontrar solución + if target < 0 or start == len(numbers): + return - r = combinations(c[:-1]) + # Búsqueda + for index in range(start, len(numbers)): - return r + [s + [c[-1]] for s in r] + if index > start and numbers[index] == numbers[index - 1]: + continue + combination.append(numbers[index]) + find_sum(index + 1, target - numbers[index], combination) + combination.pop() -def check_goal(numbers: list, goal: int) -> bool: + numbers.sort() + result = [] + find_sum(0, target, []) + return result - if sum(numbers) == goal: - return True - return False - - -def print_solutions(solutions_list: list): - - for solution in solutions_list: - print(solution) - - -def main(): - - combinations_list = combinations(INITIAL_NUMBERS_LIST) - solutions_list = [ - solution for solution in combinations_list if check_goal(solution, GOAL)] - print_solutions(solutions_list) - - -if __name__ == '__main__': - main() +print(find_sums([1, 5, 3, 2], 6)) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/swift/didacdev.swift" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/swift/didacdev.swift" new file mode 100644 index 0000000000..d21375c262 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/swift/didacdev.swift" @@ -0,0 +1,482 @@ +import Foundation + +//---------------- Variables --------------------------- +let riddles = [ + ("Si me tumbas, soy todo. Si me cortas por la cintura, me quedo en nada. ¿Qué soy?", "ocho"), + ("¿Cuántos ladrillos se necesitan para completar un edificio hecho de ladrillos?", "uno"), + ("Estás en un laberinto completamente a oscuras y tienes una vela, una antorcha, un puñado de paja y una sola cerilla. ¿Qué enciendes primero?", "cerilla"), + ("¿Qué es lo que no está ni dentro ni fuera de la casa, pero que es necesario para cualquier hogar?", "vetanas"), + ("El hombre que lo vendió no lo quería. El hombre que lo compró no lo necesitaba. El hombre que lo usó no lo conocía.", "ataúd"), + ("20+20+20=60. ¿Cómo puedes hacer 60 nuevamente usando el mismo número 3 veces?", "55+5"), + ("¿Qué palabra se pronuncia incorrectamente incluso si está escrita correctamente?", "incorrectamente"), + ("Llevo mi casa a cuestas y camino sin tener patas. Dejo un hilillo de plata por donde mi cuerpo pasa.", "caracol"), + ("Tiene un gran tamaño, memoria famosa, piel dura y la nariz más grande que pueda haber en el mundo.", "elefante"), + ("Voy construyendo mis redes entre ramas y en rincones para que caigan en ellas las moscas incautas.", "araña"), + ("Todas las mañanas suena a la misma hora para decirnos que salgamos de la cama.", "despertador"), + ("Rabo cortito y orejas largas, corro y salto muy ligerito.", "conejo"), + ("Si dices mi nombre, se rompe.", "silencio"), + ("No es planeta y tiene luna, no es puerta y tiene marco.", "espejo"), + ("Soy ave y también llana, pero no tengo alas ni pico.", "avellana"), + ("Te digo y te repito y te debo avisar que, por más que te diga, no lo vas a adivinar.", "té") +] + +let numbers = getRandomNumbers(limit: riddles.count) + +var house: [[Room]] = [] + +// --------------------- Clases -------------------- +class Room { + + var cardinalPoints = [cardinalPoint]() + + enum cardinalPoint { + case north + case south + case west + case east + } + + init(cardinalPoints: [cardinalPoint]) { + + self.cardinalPoints = cardinalPoints + + } + + func getCardinalPoins() -> [cardinalPoint] { + + return cardinalPoints + + } + +} + +class UsualRoom: Room { + let riddle: (question:String, answer:String) + + init(cardinalPoints: [cardinalPoint], riddle: (String, String)){ + + self.riddle = riddle + super.init(cardinalPoints: cardinalPoints) + + } + + func getRiddle() -> (String, String) { + return riddle + } + +} + +class DoorRoom: Room { + + override init(cardinalPoints: [cardinalPoint]) { + + super.init(cardinalPoints: cardinalPoints) + + } +} + +class LollipopRoom: Room { + + init() { + + super.init(cardinalPoints: []) + + } + +} + +class GhostRoom: Room { + let riddleOne: (question:String, answer:String) + let riddleTwo: (question:String, answer:String) + + init(cardinalPoints: [cardinalPoint], riddleOne: (String, String), riddleTwo: (String, String)) { + + self.riddleOne = riddleOne + self.riddleTwo = riddleTwo + super.init(cardinalPoints: cardinalPoints) + + } + + func getRiddleOne() -> (String, String) { + return riddleOne + } + + func getRiddleTwo() -> (String, String) { + return riddleTwo + } +} + +//------------------ Funciones --------------------------------- +func getRandomNumbers(limit: Int) -> [Int]{ + var randomNumbers: [Int] = [] + + for index in 1...limit { + randomNumbers.append(index) + } + + return randomNumbers.shuffled() +} + +func probabilityTrue(prob: Double) -> Bool { + let randomNumber = Double.random(in: 0...1) + return randomNumber <= prob +} + +func getRandomRiddle() -> (String, String) { + riddles[Int.random(in: 0...riddles.count - 1)] +} + +func setHouse() { + + for row in 1...4 { + + var rooms: [Room] = [Room(cardinalPoints: []), Room(cardinalPoints: []), Room(cardinalPoints: []), Room(cardinalPoints: [])] + + switch row { + + // First row + case 1: + + for room in 0.. (Int, Int) { + var start = (0, 0) + + for index in 0...3 { + + if house[0][index] is DoorRoom { + start.1 = index + } + } + + return start +} + +func getEnd() -> (Int, Int) { + var end = (3, 0) + + for index in 0...3 { + + if house[3][index] is LollipopRoom { + end.1 = index + } + } + + return end +} + +func getCardinalPoints(room: (Int, Int)) -> [String] { + + let cardinalPoints = house[room.0][room.1].getCardinalPoins() + var stringCardinalPoints = [String]() + + for cardinalPoint in cardinalPoints { + + switch cardinalPoint { + case Room.cardinalPoint.north: + stringCardinalPoints.append("north") + case Room.cardinalPoint.south: + stringCardinalPoints.append("south") + case Room.cardinalPoint.west: + stringCardinalPoints.append("west") + case Room.cardinalPoint.east: + stringCardinalPoints.append("east") + } + + } + + return stringCardinalPoints + +} + +func goNorth(room: (Int, Int)) -> (Int, Int) { + + let newRow = room.0 - 1 + let newRoom = (newRow, room.1) + + return newRoom + +} + +func goSouth(room: (Int, Int)) -> (Int, Int) { + + let newRow = room.0 + 1 + let newRoom = (newRow, room.1) + + return newRoom + +} + +func goEast(room: (Int, Int)) -> (Int, Int) { + + let newRow = room.1 + 1 + let newRoom = (room.0, newRow) + + return newRoom + +} + +func goWest(room: (Int, Int)) -> (Int, Int) { + + let newRow = room.1 - 1 + let newRoom = (room.0, newRow) + + return newRoom + +} + +func startGame() { + setHouse() + printHouse() + var actualRoom: (Int, Int) = getStart() + let endRoom: (Int, Int) = getEnd() + + var quit = false + + while (actualRoom.0 != endRoom.0 || actualRoom.1 != endRoom.1) && !quit { + var newRoom: (Int, Int) = (0, 0) + + print("\nPuedes moverte al:") + + var cardinalPoints = getCardinalPoints(room: actualRoom) + + cardinalPoints.forEach { (cardinalPoint) in + print("- \(cardinalPoint)") + } + + cardinalPoints += ["salir"] + + print("\nQué camino eliges: ") + if let choice = readLine() { + + if cardinalPoints.contains(choice) { + switch choice { + case "north": + newRoom = goNorth(room: actualRoom) + case "south": + newRoom = goSouth(room: actualRoom) + case "east": + newRoom = goEast(room: actualRoom) + case "west": + newRoom = goWest(room: actualRoom) + default: + quit = true + } + + if !quit { + let room = house[newRoom.0][newRoom.1] + + if let usualRoom = room as? UsualRoom { + print("\nEs una habitación vacía") + + let riddle = usualRoom.getRiddle() + print("Tienes un acertijo:") + print("> \(riddle.0)") + print("Respuesta:") + + if let answer = readLine() { + if answer == riddle.1 { + actualRoom = newRoom + print("Respuesta correcta ✅") + } else { + print("Respuesta incorrecta ❌. Sigues en la misma habitación") + } + } + + } else if let ghostRoom = room as? GhostRoom { + print("\nEsta habitación tiene un fantasma 👻") + + let riddleOne = ghostRoom.getRiddleOne() + let riddleTwo = ghostRoom.getRiddleTwo() + print("Primer acertijo:") + print("> \(riddleOne.0)") + print("* Respuesta:") + + if let answer = readLine() { + if answer == riddleOne.1 { + print("Respuesta correcta ✅") + print("Segundo acertijo:") + print("> \(riddleTwo.0)") + print("* Respuesta:") + + if let answer = readLine() { + if answer == riddleTwo.1 { + actualRoom = newRoom + print("Respuesta correcta ✅") + } + } else { + print("Respuesta incorrecta ❌. Sigues en la misma habitación") + } + } else { + print("Respuesta incorrecta ❌. Sigues en la misma habitación") + } + } + } else if room is DoorRoom { + print("\nEstás en el inicio 🚪") + actualRoom = newRoom + } else { + actualRoom = newRoom + } + + } else { + print("\nEres un cobarde! 💀") + } + + } else { + print("\n ⚠️ No puedes moverte en esa dirección") + } + } + } + + if actualRoom == endRoom { + print("\n🎉 Enhorabuena, has ganado!!") + } + +} + + + + +// Pruebas + +startGame() + +func printHouse() { + for row in house { + + var characters: String = "" + + for col in row { + if col is UsualRoom { + characters += "⬜️" + } else if col is GhostRoom { + characters += "👻" + } else if col is DoorRoom { + characters += "🚪" + } else { + characters += "🍭" + } + } + + print(characters) + characters = "" + + } +} From 7efad6afef71603735b46cc1bc27e81066b957a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Sat, 21 Oct 2023 20:05:15 +0200 Subject: [PATCH 0357/2103] feat: reto 41 didacdev --- .../swift/didacdev.swift" | 28 +------------------ 1 file changed, 1 insertion(+), 27 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/swift/didacdev.swift" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/swift/didacdev.swift" index d21375c262..17e284d2de 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/swift/didacdev.swift" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/swift/didacdev.swift" @@ -1,6 +1,7 @@ import Foundation //---------------- Variables --------------------------- + let riddles = [ ("Si me tumbas, soy todo. Si me cortas por la cintura, me quedo en nada. ¿Qué soy?", "ocho"), ("¿Cuántos ladrillos se necesitan para completar un edificio hecho de ladrillos?", "uno"), @@ -344,7 +345,6 @@ func goWest(room: (Int, Int)) -> (Int, Int) { func startGame() { setHouse() - printHouse() var actualRoom: (Int, Int) = getStart() let endRoom: (Int, Int) = getEnd() @@ -452,31 +452,5 @@ func startGame() { } - - -// Pruebas - startGame() -func printHouse() { - for row in house { - - var characters: String = "" - - for col in row { - if col is UsualRoom { - characters += "⬜️" - } else if col is GhostRoom { - characters += "👻" - } else if col is DoorRoom { - characters += "🚪" - } else { - characters += "🍭" - } - } - - print(characters) - characters = "" - - } -} From 800c9ec2331f8c4f60a2090d9fa389979e8ddccd Mon Sep 17 00:00:00 2001 From: Marco Torres Date: Sat, 21 Oct 2023 15:29:54 -0700 Subject: [PATCH 0358/2103] Reto #34 - Python --- .../python/marcoatrs.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Retos/Reto #34 - EL TXT [Media]/python/marcoatrs.py diff --git a/Retos/Reto #34 - EL TXT [Media]/python/marcoatrs.py b/Retos/Reto #34 - EL TXT [Media]/python/marcoatrs.py new file mode 100644 index 0000000000..ed8ee47d66 --- /dev/null +++ b/Retos/Reto #34 - EL TXT [Media]/python/marcoatrs.py @@ -0,0 +1,29 @@ +import signal +import sys +from pathlib import Path + + +def write_line(file_path: Path, line: str): + with open(file_path, "a") as txt: + txt.write(f"{line}\n") + + +def main(): + file_path = Path("text.txt") + if file_path.exists(): + res = "" + while res not in ["s", "n"]: + res = input("El archivo ya existe, borrar contenido (s,n): ").lower() + + if res == "s": + file_path.unlink() + file_path.touch(exist_ok=True) + with open(file_path, "r") as txt: + print(txt.read()) + while True: + write_line(file_path, input()) + + +if __name__ == "__main__": + signal.signal(signal.SIGINT, lambda s, f: sys.exit()) + main() From 3ea6d16560e98608edfa6411ddcab4e8b3d1b914 Mon Sep 17 00:00:00 2001 From: ayalaAlan96 <128829965+ayalaAlan96@users.noreply.github.com> Date: Sat, 21 Oct 2023 19:31:56 -0300 Subject: [PATCH 0359/2103] resolucion reto 41 --- .../python/ayalaAlan96.py" | 301 ++++++++++++++++++ 1 file changed, 301 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/ayalaAlan96.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/ayalaAlan96.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/ayalaAlan96.py" new file mode 100644 index 0000000000..4a1b53fe55 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/ayalaAlan96.py" @@ -0,0 +1,301 @@ +""" + * Este es un reto especial por Halloween. + * Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces. + * + * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. + * (Tienes total libertad para ser creativo con los textos) + * + * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 + * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. + * (16 habitaciones, siendo una de entrada y otra donde están los dulces) + * Esta podría ser una representación: + * 🚪⬜️⬜️⬜️ + * ⬜️👻⬜️⬜️ + * ⬜️⬜️⬜️👻 + * ⬜️⬜️🍭⬜️ + * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. + * Si no lo aciertas no podrás desplazarte. + * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. + * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) + * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. + * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y + * tengas que responder dos preguntas para salir de ella. +""" +import os, time, random +import numpy as np + +#constantes +INGRESAR = 1 +SALIR = 2 + +PROB_FANTASMA = 0.1 + +ARRIBA = 1 +ABAJO = 2 +IZQUIERDA = 3 +DERECHA = 4 + +#enigmas y respuestas +ENIGMAS = np.array([['Casa con dos cuartos, nueva cada mes y otras veces llena: adivina quién es.','luna' ], + ['Tengo cabeza redonda, sin nariz, ojos, ni frente, y mi cuerpo se compone tan solo de blancos dientes.', 'ajo'], + ['Salgo de la habitación y entro en la cocina meneando la cola como una gallina.', 'escoba'], + ['Ya se fue el verano y otra estación llega: como lluvia de oro caen hojas secas.','Otoño'], + ['Estudiante que estudias a la luz de una vela, ¿qué animal no es un ave, tiene colmillo y como ella vuela?','murcielago'], + ['Duros como las piedras, para el perro un buen manjar, y sin ellos no podrías ni saltar ni caminar','hueso'], + ['Envuelta en vendas, camina con las patas tiesas. Y duerme en su tumba, rodeada de muchas ofrendas. La verás en los libros de historia, seguro que ya sabes que hablo de la …','momia'], + ['Mi madre prepara una crema naranja, pero hoy le ha dibujado una cara. Con cuidado, quítale la tapa y enciende una vela para ver la …','calabaza']]) +#fin constantes + +#clases +class Mansion: + dimension = { + 'salas': 4, + 'pisos': 4 + } + + fantasma_1 = { + 'sala': 0, + 'piso': 0 + } + + fantasma_2 = { + 'sala' : 0, + 'piso' : 0 + } + + dulces = { + 'sala': 0, + 'piso': 0 + } + + def __init__(self): + pass + + def dibujar_casa(self,jugador): + #dibuja el mapa, no se incluyen los fantasmas ni el dulce + for piso in range(1, self.dimension.get('pisos')+1): + for sala in range(1, self.dimension.get('salas')+1): + if (piso == 1) and (sala ==1): + print("🚪\t",end="") + elif (piso == jugador.get('piso')) and (sala == jugador.get('sala')): + print("😊\t",end="") + else: + print("🟥\t", end="") + print('') + + def dibujar_super_casa(self,jugador): + #dibuja el mapa, no se incluyen los fantasmas ni el dulce + for piso in range(1, self.dimension.get('pisos')+1): + for sala in range(1, self.dimension.get('salas')+1): + if (piso == 1) and (sala ==1): + print("🚪\t",end="") + elif (piso == jugador.get('piso')) and (sala == jugador.get('sala')): + print("😊\t",end="") + elif (piso == self.fantasma_1.get('piso')) and (sala == self.fantasma_1.get('sala')): + print("👻\t",end="") + elif (piso == self.fantasma_2.get('piso')) and (sala == self.fantasma_2.get('sala')): + print("👻\t",end="") + elif (piso == self.dulces.get('piso')) and (sala == self.dulces.get('sala')): + print("🍬\t",end="") + else: + print("🟥\t", end="") + print('') + +class Jugador: + nombre = '' + posicion = { + 'sala': 1, + 'piso': 1 + } + + def __init__(self, nombre): + self.nombre = nombre + + + def actualizar_posicion(self, posicion): + self.posicion = posicion + + def mover(self, movimiento): + if movimiento == ARRIBA: + self.posicion['piso'] = self.posicion.get('piso') - 1 + elif movimiento == ABAJO: + self.posicion['piso'] = self.posicion.get('piso') + 1 + elif movimiento == IZQUIERDA: + self.posicion['sala'] = self.posicion.get('sala') - 1 + elif movimiento == DERECHA: + self.posicion['sala'] = self.posicion.get('sala') + 1 +#fin clases + +#funciones +def opciones_movimiento(posicion_actual, dimension_mansion): + arriba = posicion_actual.get('piso') > 1 + abajo = posicion_actual.get('piso') < dimension_mansion.get('pisos') + izquierda = posicion_actual.get('sala') > 1 + derecha = posicion_actual.get('sala') < dimension_mansion.get('salas') + + print('En qué posición desea moverse?') + opciones = [] + if arriba: + print('{0}- Arriba ↑'.format(ARRIBA)) + opciones.append(ARRIBA) + + if abajo: + print('{0}- Abajo ↓'.format(ABAJO)) + opciones.append(ABAJO) + + if izquierda: + print('{0}- Izquierda ←'.format(IZQUIERDA)) + opciones.append(IZQUIERDA) + + if derecha: + print('{0}- Derecha →'.format(DERECHA)) + opciones.append(DERECHA) + + opcion_valida = False + fallas = 0 + while(not opcion_valida): + fallas = fallas + 1 + + if fallas == 4: + imprimir_por_letra('La Mansión se ha derrumbado...') + exit() + + try: + opcion = int(input(':')) + + if opcion in opciones: + opcion_valida = True + return opcion + else: + print('Seleccoine una de las opciones') + except: + print('Ingrese el número de una de las opciones') + + +def calcular_posi_fantasma(dimension_mansion): + piso = random.randint(1,dimension_mansion.get('pisos')) + if piso > 1: + sala = random.randint(1, dimension_mansion.get('salas')) + else: + sala = random.randint(3, dimension_mansion.get('salas')) + + posicion = { + 'sala': sala, + 'piso': piso + } + + return posicion + + +def calcular_posi_dulces(fantasma_1, fantasma_2, dimension_mansion): + piso = random.randint(1,dimension_mansion.get('pisos')) + if piso > 1: + sala = random.randint(1, dimension_mansion.get('salas')) + else: + sala = random.randint(3, dimension_mansion.get('salas')) + + posicion = { + 'sala': sala, + 'piso': piso + } + + if ((posicion.get('piso') == fantasma_1.get('piso') and posicion.get('sala') == fantasma_1.get('sala')) or (posicion.get('piso') == fantasma_2.get('piso') and posicion.get('sala') == fantasma_2.get('sala'))): + posicion = calcular_posi_dulces(fantasma_1, fantasma_2,dimension_mansion) + + return posicion + + +def imprimir_por_letra(mensaje): + for letra in mensaje: + print(letra, end='', flush=True) + time.sleep(0.03) + print('\n') + + +def hay_fantasma(): + return PROB_FANTASMA >= round(random.random(),1) + + +def resolver_enigma(): + enigma_resuelto = False + enigma = random.randint(0, len(ENIGMAS)-1) + + while not enigma_resuelto: + imprimir_por_letra('Para avanzar debes resolver el siguiente acertijo:') + imprimir_por_letra(ENIGMAS[enigma][0]) + respuesta = input(': ') + + if ENIGMAS[enigma][1].upper() in respuesta.upper(): + enigma_resuelto = True + imprimir_por_letra('Perfecto!') + else: + imprimir_por_letra('Tienes otra oportunidad.. Inténtalo de vuelta!') +#fin funciones + +def inciar_juego(): + os.system('cls') + imprimir_por_letra('Para poder interactuar con el juego ingrese el número de la opción que se le presenta...') + imprimir_por_letra('Esta a punto de ingresar a la Mansión...') + + try: + opcion = int(input('Desea ingresar? \n {0}- Si \n {1}- No \n :'.format(INGRESAR,SALIR))) + + if opcion == INGRESAR: + nombre = '' + os.system('cls') + while len(nombre) < 4: + nombre = input('Ingresa tu nombre: ') + if len(nombre) < 4: + print('El nombre debe tener al menos 4 letras') + + #carga la posicion de los fantasmas y la sala de dulces en la mansion + mansion = Mansion() + mansion.fantasma_1 = calcular_posi_fantasma(mansion.dimension) + mansion.fantasma_2 = calcular_posi_fantasma(mansion.dimension) + mansion.dulces = calcular_posi_dulces(mansion.fantasma_1, mansion.fantasma_2, mansion.dimension) + + jugador = Jugador(nombre) + + #parte principal del juego, el mismo se ejecuta hasta que el usuario encuentre la sala de dulces, no se agrega opción de interrumpir el juego + while jugador.posicion != mansion.dulces: + os.system('cls') + mansion.dibujar_casa(jugador.posicion) + + if jugador.nombre == '0000': #para verificacion de la funcionalidad puede ingresar el nombre de jugador como 0000 + print('****************************************************') + print('Jugador: {0}'.format(jugador.posicion)) + print('f1: {0}'.format(mansion.fantasma_1)) + print('f2: {0}'.format(mansion.fantasma_2)) + print('dulces: {0}'.format(mansion.dulces)) + print('****************************************************') + + resolver_enigma() + + #si el jugador va a la sala de un fantasma o aparece un fantasma en la sala, se debe resolver otro enigma + if ( (jugador.posicion in [mansion.fantasma_1, mansion.fantasma_2]) or (hay_fantasma()) ): + imprimir_por_letra('{0}. Ha aparecido un fantasma!!!\nDebes resolver otro acertijo.'.format(jugador.nombre)) + resolver_enigma() + + #actualiza la posicion del jugador en el mapa + jugador.mover(opciones_movimiento(jugador.posicion, mansion.dimension)) + + #fin del juego =) + if jugador.posicion == mansion.dulces: + os.system('cls') + print('******************************************************************') + print(' Muchas felicidades {0} ha encontrado la sala de dulces..!!!'.format(jugador.nombre)) + print('******************************************************************') + + mansion.dibujar_super_casa(jugador.posicion) + + elif opcion == SALIR: + print('Vuelve pronto') + else: + print('La opción que ingresaste no es válida') + except: + print('El juego se cerró.') + +if __name__ == '__main__': + inciar_juego() \ No newline at end of file From 361e2b2b230513a68db0bd9528daa13da962248c Mon Sep 17 00:00:00 2001 From: keltoi-dev Date: Sun, 22 Oct 2023 00:33:40 -0300 Subject: [PATCH 0360/2103] Reto #41 python --- .../python/keltoi-dev.py" | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/keltoi-dev.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/keltoi-dev.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/keltoi-dev.py" new file mode 100644 index 0000000000..c5f4a456b0 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/keltoi-dev.py" @@ -0,0 +1,126 @@ +import random +import os + +# Se carga la informacion inicial para la cuadricula +screen = [["🚪", "⬜️", "⬜️", "⬜️"], + ["⬜️", "⬜️", "⬜️", "⬜️"], + ["⬜️", "⬜️", "⬜️", "⬜️"], + ["⬜️", "⬜️", "⬜️", "⬜️"]] + +# Se cargan las tuplas de preguntas y respuestas +preg_rta = [["Como se llama la hija de los locos Adams? ","merlina"], + ["Que verdura se usa para decorar en Halloween? ","calabaza"], + ["En que animal se convierte el Conde Dracula? ","murcielago"], + ["Que mostruo fue armado con partes de distintos humanos? ","frankestein"], + ["Como se los llama comunmente a los muertos vivos? ","zombies"], + ["Como se llama el hijo de los locos Adams? ", "pericles"], + ["Donde vive el Conde Dracula? ", "transilvania"]] + +fantasma1 = 0 +fantasma2 = 0 +salida = 0 +# Limpia la pantalla +def clear(): + if os.name == "nt": + os.system("cls") + else: + os.system("clear") + +# Dibuja la mansion +def dibuja_pantalla(screen): + clear() + for row in screen: + print("".join(map(str, row))) + +# Estipula la posicion de los fantasmas y salida aleatoriamente +def aleatorio(fantasma1, fantasma2, salida): + salida = random.randint(1, 15) + print(salida) + while True: + fantasma1 = random.randint(1,15) + if fantasma1 != salida: + break + while True: + fantasma2 = random.randint(1,15) + if fantasma2 != salida and fantasma2 != fantasma1: + break + + return (fantasma1, fantasma2, salida) + +# Estipula las preguntas aleatoriamente +def pregunta(): + while True: + sortea_pregunta = random.randint(0,6) + print(preg_rta[sortea_pregunta][0]) + repuesta = input() + if preg_rta[sortea_pregunta][1] == repuesta.lower(): + break + return + +# Hace el movimiento por la mansion +def movimiento(pos): + while True: + oeste = "oeste" + este = "este" + norte = "norte" + sur = "sur" + if pos == 0 or pos == 4 or pos == 8 or pos == 12: + oeste = "--" + if pos == 0 or pos == 1 or pos == 2 or pos == 3: + norte = "--" + if pos == 12 or pos == 13 or pos == 14 or pos == 15: + sur = "--" + if pos == 3 or pos == 7 or pos == 11 or pos == 15: + este = "--" + + print(f"Hacia donde te quieres mover? ({norte}, {este}, {oeste} o {sur})") + preg_movimiento = input() + if preg_movimiento.lower() == norte or preg_movimiento.lower() == sur or preg_movimiento.lower() == este or preg_movimiento.lower() == oeste: + + if preg_movimiento.lower() == "norte": + posicion = pos - 4 + return posicion + + elif preg_movimiento.lower() == "sur": + posicion = pos + 4 + return posicion + + elif preg_movimiento.lower() == "oeste": + posicion = pos - 1 + return posicion + + elif preg_movimiento.lower() == "este": + posicion = pos + 1 + return posicion + + else: + posicion = pos + print("Se ha ingresado un dato erroneo") + +# Se inicializa el juego vacio +dibuja_pantalla(screen) +fantasma1, fantasma2, salida = aleatorio(fantasma1, fantasma2, salida) +posicion = 0 +pos_nueva = 0 +pos_nueva = movimiento(posicion) + +while pos_nueva != salida: + # Calcula las coordenadas de la posicion + x = pos_nueva // 4 + y = pos_nueva % 4 + if pos_nueva == fantasma1 or pos_nueva == fantasma2: + screen[x][y] = "👻" + dibuja_pantalla(screen) + pregunta() + pregunta() + else: + screen[x][y] = "❓" + dibuja_pantalla(screen) + pregunta() + + posicion = pos_nueva + pos_nueva = movimiento(posicion) + +screen[salida // 4][salida % 4] = "🍭" +dibuja_pantalla(screen) +print("Ha encontrado el dulce!!!") \ No newline at end of file From 9f94db8501674c507675465623b26b26c400969e Mon Sep 17 00:00:00 2001 From: Flavio Rios Date: Sat, 21 Oct 2023 22:47:15 -0500 Subject: [PATCH 0361/2103] Reto #1 - javascript --- .../javascript/flaviovich.js" | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/flaviovich.js" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/flaviovich.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/flaviovich.js" new file mode 100644 index 0000000000..1e91072892 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/flaviovich.js" @@ -0,0 +1,61 @@ +/* + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + */ + +console.clear(); + +const toLeet = (text) => { + if (text === null || text === undefined || text.length === 0) return ""; + + const leet = [ + "4", + "I3", + "[", + ")", + "3", + "|=", + "&", + "#", + "1", + ",_|", + ">|", + "1", + "^^", + "^/", + "0", + "|*", + "(_,)", + "|2", + "5", + "7", + "(_)", + "|/", + "'//", + "><", + "j", + "2", + ]; + const numbers = ["o", "L", "R", "E", "A", "S", "b", "T", "B", "g"]; + let index; + + return text + .split("") + .map((element) => { + index = element.toUpperCase().charCodeAt(0) - 65; + return leet[index] + ? leet[index] + : isNaN(parseInt(element)) + ? element + : numbers[element]; + }) + .join(""); +}; + +console.log(toLeet("Hola, soy Flavio, tengo 25 años")); +console.log(toLeet(null)); +console.log(toLeet("¡Hola! ¿Cómo estás?")); From 4ad65b7c06cb62e8090d3d7839bb2b644d1ba01e Mon Sep 17 00:00:00 2001 From: keltoi-dev Date: Sun, 22 Oct 2023 01:32:21 -0300 Subject: [PATCH 0362/2103] Reto #41 python --- .../python/keltoi-dev.py" | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/keltoi-dev.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/keltoi-dev.py" index c5f4a456b0..ac12632ca7 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/keltoi-dev.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/keltoi-dev.py" @@ -35,7 +35,6 @@ def dibuja_pantalla(screen): # Estipula la posicion de los fantasmas y salida aleatoriamente def aleatorio(fantasma1, fantasma2, salida): salida = random.randint(1, 15) - print(salida) while True: fantasma1 = random.randint(1,15) if fantasma1 != salida: @@ -54,7 +53,9 @@ def pregunta(): print(preg_rta[sortea_pregunta][0]) repuesta = input() if preg_rta[sortea_pregunta][1] == repuesta.lower(): - break + print("Has contestado correctamente") + break + print("Has contestado mal, vuelve a intentarlo") return # Hace el movimiento por la mansion @@ -73,9 +74,9 @@ def movimiento(pos): if pos == 3 or pos == 7 or pos == 11 or pos == 15: este = "--" - print(f"Hacia donde te quieres mover? ({norte}, {este}, {oeste} o {sur})") + print(f"Hacia donde te quieres mover? ({norte}, {este}, {oeste}, {sur} o salida)") preg_movimiento = input() - if preg_movimiento.lower() == norte or preg_movimiento.lower() == sur or preg_movimiento.lower() == este or preg_movimiento.lower() == oeste: + if preg_movimiento.lower() == norte or preg_movimiento.lower() == sur or preg_movimiento.lower() == este or preg_movimiento.lower() == oeste or preg_movimiento.lower() == "salida": if preg_movimiento.lower() == "norte": posicion = pos - 4 @@ -92,7 +93,8 @@ def movimiento(pos): elif preg_movimiento.lower() == "este": posicion = pos + 1 return posicion - + elif preg_movimiento.lower() == "salida": + exit() else: posicion = pos print("Se ha ingresado un dato erroneo") @@ -111,6 +113,7 @@ def movimiento(pos): if pos_nueva == fantasma1 or pos_nueva == fantasma2: screen[x][y] = "👻" dibuja_pantalla(screen) + print("Te has encontrado un fantasma, desbes responder dos preguntas") pregunta() pregunta() else: From 37aeeb0005927c86cb9afe359af5a8e13381d7be Mon Sep 17 00:00:00 2001 From: Jherys Vargas Date: Sun, 22 Oct 2023 00:33:08 -0500 Subject: [PATCH 0363/2103] Reto #41 - TypeScript --- .../typescript/JherysVargas.ts" | 341 ++++++++++++++++++ 1 file changed, 341 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/typescript/JherysVargas.ts" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/typescript/JherysVargas.ts" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/typescript/JherysVargas.ts" new file mode 100644 index 0000000000..7bbc30e5eb --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/typescript/JherysVargas.ts" @@ -0,0 +1,341 @@ +type Position = { + x: number; + y: number; +}; + +type Question = { + question: string; + answer: string; +}; + +enum Moves { + North = "norte", + South = "sur", + East = "este", + West = "oeste", +} + +enum ItemsEnum { + START = "🚪", + PHANTOM = "👻", + CANDY = "🍭", + EMPTY = "⬜️", + CURRENT = "📍", +} + +const questions: Question[] = [ + { + question: "¿Cuál es la capital de Francia?", + answer: "París", + }, + { + question: "¿Cuál es el planeta más grande del sistema solar?", + answer: "Júpiter", + }, + { + question: "¿Cuál es el río más largo del mundo?", + answer: "El río Amazonas", + }, + { + question: "¿Quién escribió 'Don Quijote de la Mancha'?", + answer: "Miguel de Cervantes", + }, + { + question: "¿En qué año comenzó la Primera Guerra Mundial?", + answer: "1914", + }, + { + question: "¿Cuál es el símbolo químico del oro?", + answer: "Au", + }, + { + question: "¿Cuál es la montaña más alta del mundo?", + answer: "El Monte Everest", + }, + { + question: "¿Quién pintó la 'Mona Lisa'?", + answer: "Leonardo da Vinci", + }, + { + question: "¿Cuál es el océano más grande del mundo?", + answer: "El océano Pacífico", + }, + { + question: "¿En qué año se fundó Google?", + answer: "1998", + }, + { + question: "¿Quién escribió 'Romeo y Julieta'?", + answer: "William Shakespeare", + }, + { + question: "¿Cuál es el símbolo químico del hidrógeno?", + answer: "H", + }, + { + question: "¿Cuál es el elemento más abundante en la Tierra?", + answer: "El oxígeno", + }, + { + question: "¿Cuál es el quinto planeta en el sistema solar?", + answer: "Júpiter", + }, + { + question: "¿Cuál es la capital de Japón?", + answer: "Tokio", + }, + { + question: + "¿En qué año se firmó la Declaración de Independencia de los Estados Unidos?", + answer: "1776", + }, + { + question: "¿Quién fue el primer presidente de Estados Unidos?", + answer: "George Washington", + }, + { + question: "¿Cuál es la fórmula química del agua?", + answer: "H2O", + }, + { + question: "¿Quién fue el primer ser humano en orbitar la Tierra?", + answer: "Yuri Gagarin", + }, + { + question: "¿Cuál es el metal más abundante en la corteza terrestre?", + answer: "El aluminio", + }, + { + question: "¿Cuál es la capital de Australia?", + answer: "Camberra", + }, + { + question: "¿Quién escribió '1984'?", + answer: "George Orwell", + }, + { + question: "¿Cuál es el símbolo químico del carbono?", + answer: "C", + }, + { + question: "¿En qué año se cayó el Muro de Berlín?", + answer: "1989", + }, + { + question: "¿Quién fue el primer hombre en la Luna?", + answer: "Neil Armstrong", + }, + { + question: "¿Cuál es la capital de China?", + answer: "Pekín", + }, + { + question: "¿En qué año se descubrió la penicilina?", + answer: "1928", + }, + { + question: "¿Cuál es el océano más pequeño del mundo?", + answer: "El océano Ártico", + }, + { + question: "¿Quién escribió 'Cien años de soledad'?", + answer: "Gabriel García Márquez", + }, + { + question: "¿Cuál es la moneda de Japón?", + answer: "El yen", + }, + { + question: "¿En qué año se fundó Microsoft?", + answer: "1975", + }, +]; + +const positions: Map = new Map(); + +const uniqueItems: Readonly> = new Set([ + ItemsEnum.START, + ItemsEnum.CANDY, +]); + +const items: Readonly> = Object.values(ItemsEnum); + +const sleep = (ms = 200): Promise => { + return new Promise((resolve) => setTimeout(resolve, ms)); +}; + +const generateMansion = (): Array> => { + let board: ItemsEnum[][] = []; + + const addedItems: Set = new Set(); + + for (let y = 0; y < 4; y++) { + board[y] = []; + for (let x = 0; x < 4; x++) { + const randomItem = getRandomItem(addedItems); + + addedItems.add(randomItem); + + if (randomItem === ItemsEnum.START) { + positions.set(ItemsEnum.START, { x, y }); + } + + if (randomItem === ItemsEnum.CANDY) { + positions.set(ItemsEnum.CANDY, { x, y }); + } + + board[y][x] = randomItem; + } + } + + return board; +}; + +const getRandomItem = (addedItems: Set): ItemsEnum => { + let item: ItemsEnum; + + do { + const randomItem = Math.floor(Math.random() * (items.length - 1)); + item = items[randomItem]; + } while (uniqueItems.has(item) && addedItems.has(item)); + + return item; +}; + +const showCurrentPosition = (board: ItemsEnum[][]) => { + console.log("Actualmente estás aquí"); + + const currentPosition: Position = positions.get(ItemsEnum.START)!; + + for (let y = 0; y < board.length; y++) { + const rows: Array = board[y].map( + (item: ItemsEnum, x: number) => { + if (x === currentPosition.x && y === currentPosition.y) { + return ItemsEnum.CURRENT; + } + + if (item !== ItemsEnum.START) { + return ItemsEnum.EMPTY; + } + + return item; + } + ); + + console.log(rows); + } +}; + +const getMove = (): string | null => { + const possibleMoves: Set = new Set(Object.values(Moves)); + const currentPosition: Position = positions.get(ItemsEnum.START)!; + + if (currentPosition.y === 0) { + possibleMoves.delete(Moves.North); + } else if (currentPosition.y === 3) { + possibleMoves.delete(Moves.South); + } + + if (currentPosition.x === 0) { + possibleMoves.delete(Moves.West); + } else if (currentPosition.x === 3) { + possibleMoves.delete(Moves.East); + } + + let response: string | null = ""; + const moves: string[] = []; + + possibleMoves.forEach((_, value) => { + moves.push(value); + }); + + while (!moves.includes(response?.toLowerCase() ?? "")) { + const textQuestion: string = `A donde quieres desplazarte? (${moves.join( + "/" + )})`; + response = prompt(textQuestion); + } + + return response; +}; + +const getNewPosition = (move: string): Position => { + const { x, y }: Position = positions.get(ItemsEnum.START)!; + + if (move === Moves.North) { + return { x, y: y - 1 }; + } + if (move === Moves.South) { + return { x, y: y + 1 }; + } + if (move === Moves.East) { + return { x: x + 1, y }; + } + return { x: x - 1, y }; +}; + +const updatePosition = (position: Position) => { + positions.set(ItemsEnum.START, position); +}; + +const handleAskQuestion = (containPhantom: boolean): boolean => { + let counter = containPhantom ? 2 : 1; + + while (counter) { + if (containPhantom) alert("Apareció un fantasma, respondes 2 preguntas!"); + + const numRandomQuestion: number = Math.floor( + Math.random() * questions.length + ); + + const { question, answer } = questions[numRandomQuestion]; + + const response: string = prompt(question) ?? ""; + + const correctAnswer = response?.toLowerCase() === answer.toLowerCase(); + + if (correctAnswer) { + counter--; + questions.splice(numRandomQuestion, 1); + } else { + alert("Respuesta incorrecta!"); + } + } + + return !counter; +}; + +const validateFinishGame = (board: ItemsEnum[][], move: string): boolean => { + const newPosition = getNewPosition(move!); + const { x: endX, y: endY }: Position = positions.get(ItemsEnum.CANDY)!; + + if (newPosition.x === endX && newPosition.y === endY) { + updatePosition(newPosition); + return true; + } + + if ( + handleAskQuestion(board[newPosition.y][newPosition.x] === ItemsEnum.PHANTOM) + ) { + updatePosition(newPosition); + } + + return false; +}; + +const runGame = async (board: ItemsEnum[][]) => { + let finishGame = false; + + while (!finishGame) { + showCurrentPosition(board); + await sleep(); + const move = getMove(); + finishGame = validateFinishGame(board, move!); + } + + console.log("Felicidades, haz completado el juego 🎉🎉!"); +}; + +const board = generateMansion(); + +runGame(board); From 887119e5195dc7b3ae1ec013407493c2de24995f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Sun, 22 Oct 2023 11:57:20 +0200 Subject: [PATCH 0364/2103] json deleted --- .vscode/settings.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 9e26dfeeb6..0000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file From d9bdd3fbf83114290deb2d147f81c6cddd344f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Garc=C3=ADa?= Date: Sun, 22 Oct 2023 13:42:26 +0200 Subject: [PATCH 0365/2103] Reto #0 - JavaScript --- .DS_Store | Bin 0 -> 6148 bytes Retos/.DS_Store | Bin 0 -> 6148 bytes .../.DS_Store" | Bin 0 -> 6148 bytes .../javascript/miguelgarglez.js" | 20 ++++++++++++++++++ 4 files changed, 20 insertions(+) create mode 100644 .DS_Store create mode 100644 Retos/.DS_Store create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/.DS_Store" create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/miguelgarglez.js" diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ecc3b1ad0d61e7e2c498c54e67c59ef609a5c7b5 GIT binary patch literal 6148 zcmeHKOHUL*5Uz$rWfTKN695cU zj;S6Tej$9GYnyZ^PbVS~HDb3B*W7@)ZL!*+8PE*;eGKq#w+r$>Apr)bzu$LmE%4)H za`F@D=uCB8=r+2IUSqTHj5P|0lhos!6Rq>BRmK9hWjpSgPa9=(c!7n9phQ}M%UF`>_sf`3TM=HO4EdFpMQxKjbZ;r#VR*-VWO=#9 z!{Rj>#fWYB#gY?6PFSV6gU!HkX|NpTSdy?k9?7d!Shx~VUa9D#&DWBh`zCqJ+K*bs zb!nK8l?Fi8e!&|CK-wfF&q?UK=TR@6&e|&~#DH;_hsUr6yKo4v;SIcn_wW%u!&mrD zy2%*1M#jlBxku*6L-K^=$tu|*WwI^vJ6bRIs;Z}e_-LGZx%-7E3|Lr2Z!6<$g1$P3 z0Y#b7drpj=(hO(@{!a$@{$QbUv=ufbimd|&aRfk2p<4*rqBS5|+<|B-Y)V8A3X!RZ zGL@(!29fFLw^W?1uqjcd0}*$|I_l0uoluBuOh7CV4#bwIN6mm{;4B0D-yg-~{r~>& z&;KGw51IkZz`w}=Ni7x@bGSCuTiaI2d##1Kjmm|`H6@A^98^0N25-fqs6ueg;s&Cv UuqhEeDEdc0(4Ys+z#nDc2l!RWeEv2%qPAK-$zuJ0cM|bjU#-bhw0?NWwtEz~9aQe|FD95hz5!@TuK@erMnw_HV%? z+=n?ZQF(6`9^+4k0z6dK5{`a`D!AamirozBw#RJD`r590ZW!hB?@3#G>e%s)bVs@? zy<)DjrWsjLBP>|K67MZA=Gn1r*^4f1R#cN3QR%W`Q+)Cls-! zoJeQVnTj^FyE`^MI;@Y4T-zJgcduW~59^~N<9mCVbT)VSMzONtZTjq)ToOXm(sV0~ z;W-+I$cS6rQjCzdF(V%}E#@TC*>$4(WRKR{*WWwPn?02s9Lk;^JTq9)`faPaQ49FB zPBD)K1+PJuYJuyRb*t+7wNgZ%My9(%D_Y+#u0`ss?hh?&*U@KSe?X+W9Z>3vd~<7S zA&p8EttYGo%=6}1=teH{%RkJPmqT2s*@$k=`fCg;Zs97;)wx@^NP`gZKzyle1%c() zXkmNBvux_k`2`k5Y_sH6nJ@o&k4TH%`GE42xrwiG9dgFq*tj4K4ew1QIivPTm>G?f z9V?=fjzgVH&X|`D8QiZfiW_$kHed%{z)N@qZ{Qt#fG_ZkbP$c4BNxdixk)C-9rAz_ z$pTp=6|yc9w8b~aS=o~GGLt#szcy(YSjsS=$92SB$KTGf!U7?|{B@t&(hzv!Pp+p@qhz!SZUHKUbTM}hB z5Ow$)&p0`_gWqG2`U%v*ODkguuS5T0$TO%JkIQH zM5!LUh}apJ{buJU%YF$vSpX27VYmU%1ONw>u+qTc3!ymalvJ#TQ0Ql*a03H~pbyzp zHaq?z1N80|;2wM!p?-LOL7w)5SOpk=3HouAX6^Q?s8nln^L3~0EIL=-oyxt;&xUEo zA6(GvRH-;9Z9h1RdU?0Ge5jJlkCNU%7erwXQ!dY=Bvg4v4U;g{wVnw$4X4p7WvzzqC|0XiQfDxqt!FsP3X9O(Cv;x$4NwCOHE zC@s1c3xgOz5vCN;lnQ&r5T+dc(&o7q3xlQ{gkBk+V^~9Q9g>dW}j#d4<9E5;Sxx#$0N} ctEgJgFUdf3EfxmRgTg-ong$-2fnR0d4eQcQ0{{R3 literal 0 HcmV?d00001 diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/miguelgarglez.js" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/miguelgarglez.js" new file mode 100644 index 0000000000..694fff6e76 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/miguelgarglez.js" @@ -0,0 +1,20 @@ +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ +MAX_NUMBER = 100 +for (let i = 1; i <= MAX_NUMBER; i++) { + if (i % 3 == 0 && i % 5 == 0){ + console.log('fizzbuzz') + } else if (i % 3 == 0) { + console.log('fizz') + } else if (i % 5 == 0) { + console.log('buzz') + } else { + console.log(i) + } +} From 37dfd3bcecdda2507650ef969f518fae924a551d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Garc=C3=ADa?= Date: Sun, 22 Oct 2023 13:44:18 +0200 Subject: [PATCH 0366/2103] Reto #0 - JavaScript --- .DS_Store | Bin 6148 -> 0 bytes Retos/.DS_Store | Bin 6148 -> 0 bytes .../.DS_Store" | Bin 6148 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store delete mode 100644 Retos/.DS_Store delete mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/.DS_Store" diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index ecc3b1ad0d61e7e2c498c54e67c59ef609a5c7b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOHUL*5Uz$rWfTKN695cU zj;S6Tej$9GYnyZ^PbVS~HDb3B*W7@)ZL!*+8PE*;eGKq#w+r$>Apr)bzu$LmE%4)H za`F@D=uCB8=r+2IUSqTHj5P|0lhos!6Rq>BRmK9hWjpSgPa9=(c!7n9phQ}M%UF`>_sf`3TM=HO4EdFpMQxKjbZ;r#VR*-VWO=#9 z!{Rj>#fWYB#gY?6PFSV6gU!HkX|NpTSdy?k9?7d!Shx~VUa9D#&DWBh`zCqJ+K*bs zb!nK8l?Fi8e!&|CK-wfF&q?UK=TR@6&e|&~#DH;_hsUr6yKo4v;SIcn_wW%u!&mrD zy2%*1M#jlBxku*6L-K^=$tu|*WwI^vJ6bRIs;Z}e_-LGZx%-7E3|Lr2Z!6<$g1$P3 z0Y#b7drpj=(hO(@{!a$@{$QbUv=ufbimd|&aRfk2p<4*rqBS5|+<|B-Y)V8A3X!RZ zGL@(!29fFLw^W?1uqjcd0}*$|I_l0uoluBuOh7CV4#bwIN6mm{;4B0D-yg-~{r~>& z&;KGw51IkZz`w}=Ni7x@bGSCuTiaI2d##1Kjmm|`H6@A^98^0N25-fqs6ueg;s&Cv UuqhEeDEdc0(4Ys+z#nDc2l!RWeEv2%qPAK-$zuJ0cM|bjU#-bhw0?NWwtEz~9aQe|FD95hz5!@TuK@erMnw_HV%? z+=n?ZQF(6`9^+4k0z6dK5{`a`D!AamirozBw#RJD`r590ZW!hB?@3#G>e%s)bVs@? zy<)DjrWsjLBP>|K67MZA=Gn1r*^4f1R#cN3QR%W`Q+)Cls-! zoJeQVnTj^FyE`^MI;@Y4T-zJgcduW~59^~N<9mCVbT)VSMzONtZTjq)ToOXm(sV0~ z;W-+I$cS6rQjCzdF(V%}E#@TC*>$4(WRKR{*WWwPn?02s9Lk;^JTq9)`faPaQ49FB zPBD)K1+PJuYJuyRb*t+7wNgZ%My9(%D_Y+#u0`ss?hh?&*U@KSe?X+W9Z>3vd~<7S zA&p8EttYGo%=6}1=teH{%RkJPmqT2s*@$k=`fCg;Zs97;)wx@^NP`gZKzyle1%c() zXkmNBvux_k`2`k5Y_sH6nJ@o&k4TH%`GE42xrwiG9dgFq*tj4K4ew1QIivPTm>G?f z9V?=fjzgVH&X|`D8QiZfiW_$kHed%{z)N@qZ{Qt#fG_ZkbP$c4BNxdixk)C-9rAz_ z$pTp=6|yc9w8b~aS=o~GGLt#szcy(YSjsS=$92SB$KTGf!U7?|{B@t&(hzv!Pp+p@qhz!SZUHKUbTM}hB z5Ow$)&p0`_gWqG2`U%v*ODkguuS5T0$TO%JkIQH zM5!LUh}apJ{buJU%YF$vSpX27VYmU%1ONw>u+qTc3!ymalvJ#TQ0Ql*a03H~pbyzp zHaq?z1N80|;2wM!p?-LOL7w)5SOpk=3HouAX6^Q?s8nln^L3~0EIL=-oyxt;&xUEo zA6(GvRH-;9Z9h1RdU?0Ge5jJlkCNU%7erwXQ!dY=Bvg4v4U;g{wVnw$4X4p7WvzzqC|0XiQfDxqt!FsP3X9O(Cv;x$4NwCOHE zC@s1c3xgOz5vCN;lnQ&r5T+dc(&o7q3xlQ{gkBk+V^~9Q9g>dW}j#d4<9E5;Sxx#$0N} ctEgJgFUdf3EfxmRgTg-ong$-2fnR0d4eQcQ0{{R3 From e05b5e96ce5996e9573aa25c382f26ff09a2635e Mon Sep 17 00:00:00 2001 From: cesarjv Date: Sun, 22 Oct 2023 08:51:58 -0400 Subject: [PATCH 0367/2103] Reto #21 - Java --- .../java/cesarjv.java" | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 "Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/java/cesarjv.java" diff --git "a/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/java/cesarjv.java" "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/java/cesarjv.java" new file mode 100644 index 0000000000..d0e0b16f98 --- /dev/null +++ "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/java/cesarjv.java" @@ -0,0 +1,35 @@ +package org.example; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.IntStream; + +/** + * Crea un programa que encuentre y muestre todos los pares de números primos + * gemelos en un rango concreto. + * El programa recibirá el rango máximo como número entero positivo. + * + * - Un par de números primos se considera gemelo si la diferencia entre + * ellos es exactamente 2. Por ejemplo (3, 5), (11, 13) + * + * - Ejemplo: Rango 14 + * (3, 5), (5, 7), (11, 13) + */ +public class cesarjv { + public static void main(String[] args) { + List primeNumbers = IntStream.range(2, 14).filter(App::isPrimeStream).boxed().toList(); + Map res=new HashMap<>(); + int comparisonValue=primeNumbers.get(0); + for(Integer x: primeNumbers){ + if(x-comparisonValue==2){ + res.put(comparisonValue,x); + } + comparisonValue=x; + } + res.forEach((k,v) -> System.out.println("("+k+", "+v+")")); + } + private static boolean isPrimeStream(int n) { + return IntStream.range(2, n).noneMatch(i -> n % i == 0); + } +} \ No newline at end of file From 6c0e2424ab061323ac50d95589e976152fabb253 Mon Sep 17 00:00:00 2001 From: cesarjv Date: Sun, 22 Oct 2023 08:56:00 -0400 Subject: [PATCH 0368/2103] Reto #21 - Java --- .../java/cesarjv.java" | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git "a/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/java/cesarjv.java" "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/java/cesarjv.java" index d0e0b16f98..a4a26c509b 100644 --- "a/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/java/cesarjv.java" +++ "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/java/cesarjv.java" @@ -18,7 +18,8 @@ */ public class cesarjv { public static void main(String[] args) { - List primeNumbers = IntStream.range(2, 14).filter(App::isPrimeStream).boxed().toList(); + Integer num=14; + List primeNumbers = IntStream.range(2, num).filter(App::isPrimeStream).boxed().toList(); Map res=new HashMap<>(); int comparisonValue=primeNumbers.get(0); for(Integer x: primeNumbers){ From bdd16162e25a7d058d590b513163cc411173924a Mon Sep 17 00:00:00 2001 From: Jherys Vargas Date: Sun, 22 Oct 2023 08:49:20 -0500 Subject: [PATCH 0369/2103] Reto #41 - Dart --- .../dart/JherysVargas.dart" | 339 ++++++++++++++++++ 1 file changed, 339 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/dart/JherysVargas.dart" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/dart/JherysVargas.dart" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/dart/JherysVargas.dart" new file mode 100644 index 0000000000..075a9be300 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/dart/JherysVargas.dart" @@ -0,0 +1,339 @@ +import 'dart:io'; +import 'dart:math' as math; + +typedef Position = Map; +typedef Board = List>; +typedef Question = Map; + +enum Moves { + north("norte"), + south("sur"), + east("este"), + west("oeste"); + + const Moves(this.value); + final String value; +} + +enum ItemsEnum { + start("🚪"), + phantom("👻"), + candy("🍭"), + empty("⬜️"), + current("📍"); + + const ItemsEnum(this.value); + final String value; +} + +final List> questions = [ + { + "question": "¿Cuál es la capital de Francia?", + "answer": "París", + }, + { + "question": "¿Cuál es el planeta más grande del sistema solar?", + "answer": "Júpiter", + }, + { + "question": "¿Cuál es el río más largo del mundo?", + "answer": "El río Amazonas", + }, + { + "question": "¿Quién escribió 'Don Quijote de la Mancha'?", + "answer": "Miguel de Cervantes", + }, + { + "question": "¿En qué año comenzó la Primera Guerra Mundial?", + "answer": "1914", + }, + { + "question": "¿Cuál es el símbolo químico del oro?", + "answer": "Au", + }, + { + "question": "¿Cuál es la montaña más alta del mundo?", + "answer": "El Monte Everest", + }, + { + "question": "¿Quién pintó la 'Mona Lisa'?", + "answer": "Leonardo da Vinci", + }, + { + "question": "¿Cuál es el océano más grande del mundo?", + "answer": "El océano Pacífico", + }, + { + "question": "¿En qué año se fundó Google?", + "answer": "1998", + }, + { + "question": "¿Quién escribió 'Romeo y Julieta'?", + "answer": "William Shakespeare", + }, + { + "question": "¿Cuál es el símbolo químico del hidrógeno?", + "answer": "H", + }, + { + "question": "¿Cuál es el elemento más abundante en la Tierra?", + "answer": "El oxígeno", + }, + { + "question": "¿Cuál es el quinto planeta en el sistema solar?", + "answer": "Júpiter", + }, + { + "question": "¿Cuál es la capital de Japón?", + "answer": "Tokio", + }, + { + "question": + "¿En qué año se firmó la Declaración de Independencia de los Estados Unidos?", + "answer": "1776", + }, + { + "question": "¿Quién fue el primer presidente de Estados Unidos?", + "answer": "George Washington", + }, + { + "question": "¿Cuál es la fórmula química del agua?", + "answer": "H2O", + }, + { + "question": "¿Quién fue el primer ser humano en orbitar la Tierra?", + "answer": "Yuri Gagarin", + }, + { + "question": "¿Cuál es el metal más abundante en la corteza terrestre?", + "answer": "El aluminio", + }, + { + "question": "¿Cuál es la capital de Australia?", + "answer": "Camberra", + }, + { + "question": "¿Quién escribió '1984'?", + "answer": "George Orwell", + }, + { + "question": "¿Cuál es el símbolo químico del carbono?", + "answer": "C", + }, + { + "question": "¿En qué año se cayó el Muro de Berlín?", + "answer": "1989", + }, + { + "question": "¿Quién fue el primer hombre en la Luna?", + "answer": "Neil Armstrong", + }, + { + "question": "¿Cuál es la capital de China?", + "answer": "Pekín", + }, + { + "question": "¿En qué año se descubrió la penicilina?", + "answer": "1928", + }, + { + "question": "¿Cuál es el océano más pequeño del mundo?", + "answer": "El océano Ártico", + }, + { + "question": "¿Quién escribió 'Cien años de soledad'?", + "answer": "Gabriel García Márquez", + }, + { + "question": "¿Cuál es la moneda de Japón?", + "answer": "El yen", + }, + { + "question": "¿En qué año se fundó Microsoft?", + "answer": "1975", + }, +]; + +final Map positions = {}; + +final Set uniqueItems = {ItemsEnum.start, ItemsEnum.candy}; + +final List items = ItemsEnum.values; + +void main(List arguments) { + final board = generateMansion(); + + runGame(board); +} + +Board generateMansion() { + final Board board = []; + + final Set addedItems = {}; + + for (var y = 0; y < 4; y++) { + board.insert(y, []); + for (var x = 0; x < 4; x++) { + final ItemsEnum randomItem = getRandomItem(addedItems); + + addedItems.add(randomItem); + + if (randomItem == ItemsEnum.start) { + positions.addAll({ + ItemsEnum.start: {'x': x, 'y': y} + }); + } + + if (randomItem == ItemsEnum.candy) { + positions.addAll({ + ItemsEnum.candy: {'x': x, 'y': y} + }); + } + + board[y].insert(x, randomItem); + } + } + + return board; +} + +ItemsEnum getRandomItem(Set addedItems) { + ItemsEnum item; + + do { + final randomItem = math.Random().nextInt((items.length - 1)).floor(); + item = items[randomItem]; + } while (uniqueItems.contains(item) && addedItems.contains(item)); + + return item; +} + +void showCurrentPosition(Board board) { + print("Actualmente estás aquí"); + + final Position currentPosition = positions[ItemsEnum.start]!; + + for (var y = 0; y < board.length; y++) { + final List rows = board[y] + .asMap() + .map((int x, ItemsEnum item) { + if (x == currentPosition['x'] && y == currentPosition['y']) { + return MapEntry(x, ItemsEnum.current.value); + } + + if (item != ItemsEnum.start) { + return MapEntry(x, ItemsEnum.empty.value); + } + + return MapEntry(x, item.value); + }) + .values + .toList(); + + print(rows); + } +} + +String? getMove() { + final Set possibleMoves = {...Moves.values}; + final Position currentPosition = positions[ItemsEnum.start]!; + + if (currentPosition['y'] == 0) { + possibleMoves.remove(Moves.north); + } else if (currentPosition['y'] == 3) { + possibleMoves.remove(Moves.south); + } + + if (currentPosition['x'] == 0) { + possibleMoves.remove(Moves.west); + } else if (currentPosition['x'] == 3) { + possibleMoves.remove(Moves.east); + } + + String? response = ""; + final List moves = possibleMoves.map((move) => move.value).toList(); + + while (!moves.contains(response?.toLowerCase() ?? "")) { + print('A donde quieres desplazarte? (${moves.join("/")})'); + response = stdin.readLineSync()!; + } + + return response; +} + +Position getNewPosition(String move) { + final Position position = positions[ItemsEnum.start]!; + + if (move == Moves.north.value) { + return {"x": position['x']!, "y": position['y']! - 1}; + } + if (move == Moves.south.value) { + return {"x": position['x']!, "y": position['y']! + 1}; + } + if (move == Moves.east.value) { + return {"x": position['x']! + 1, "y": position['y']!}; + } + return {"x": position['x']! - 1, "y": position['y']!}; +} + +updatePosition(Position position) { + positions.addAll({ItemsEnum.start: position}); +} + +bool handleAskQuestion(bool containPhantom) { + int counter = containPhantom ? 2 : 1; + + while (counter > 0) { + if (containPhantom) print("Apareció un fantasma, respondes 2 preguntas!"); + + final int numRandomQuestion = + math.Random().nextInt(questions.length).floor(); + + final Map test = questions[numRandomQuestion]; + + print(test['question']); + + final String response = stdin.readLineSync() ?? ''; + + final correctAnswer = + response.toLowerCase() == test['answer']?.toLowerCase(); + + if (correctAnswer) { + counter--; + questions.removeAt(numRandomQuestion); + } else { + print("Respuesta incorrecta!"); + } + } + + return counter == 0; +} + +bool validateFinishGame(Board board, String move) { + final Map newPosition = getNewPosition(move); + final Position position = positions[ItemsEnum.candy]!; + + if (newPosition['x'] == position['x'] && newPosition['y'] == position['y']) { + updatePosition(newPosition); + return true; + } + + if (handleAskQuestion( + board[newPosition['y']!][newPosition['x']!] == ItemsEnum.phantom)) { + updatePosition(newPosition); + } + + return false; +} + +void runGame(Board board) { + bool finishGame = false; + + while (!finishGame) { + showCurrentPosition(board); + final String? move = getMove(); + finishGame = validateFinishGame(board, move!); + } + + print("Felicidades, haz completado el juego 🎉🎉!"); +} From f8a5580b780da68491f43fb714518dd7911a0f92 Mon Sep 17 00:00:00 2001 From: wilsonbautista Date: Sun, 22 Oct 2023 12:59:40 -0500 Subject: [PATCH 0370/2103] Reto #0 C# --- .../c#/Wilibac.cs" | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/Wilibac.cs" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/Wilibac.cs" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/Wilibac.cs" new file mode 100644 index 0000000000..92671db3b6 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/Wilibac.cs" @@ -0,0 +1,32 @@ + +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ + +// Lo ejecuto con el comando: dotnet script Wilibac.cs // + + +for (int i = 1; i <= 100; i++) +{ + if (i % 5 == 0 && i % 3 == 0) + { + System.Console.WriteLine("fizzbuzz"); + } + else if (i % 3 == 0) + { + System.Console.WriteLine("fizz"); + } + else if (i % 5 == 0) + { + System.Console.WriteLine("buzz"); + } + else + { + System.Console.WriteLine(i); + } +} From 641ed63240d40790abb3de9fe0350a7020e92e99 Mon Sep 17 00:00:00 2001 From: julianpk19961 Date: Sun, 22 Oct 2023 13:16:30 -0500 Subject: [PATCH 0371/2103] Reto #01 - PHP --- .../php/julianpk19961" | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961" new file mode 100644 index 0000000000..312aea0043 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961" @@ -0,0 +1,89 @@ + "4", + "b" => "I3", + "c" => "[", + "d" => ")", + "e" => "3", + "f" => "|=", + "g" => "&", + "h" => "#", + "i" => "1", + "j" => ",_|", + "k" => ">|", + "l" => "1", + "m" => "/\/\'", + "n" => "^/", + "ñ" => "~", + "o" => "0", + "p" => "|*", + "q" => "(_,)", + "r" => "|2", + "s" => "5", + "t" => "7", + "u" => "(_)", + "v" => "\/", + "w" => "\/\/", + "x" => "><", + "y" => "j", + "z" => "2", + "0" => "o", + "1" => "L", + "2" => "R", + "3" => "E", + "4" => "A", + "5" => "S", + "6" => "b", + "7" => "T", + "8" => "B", + "9" => "g", +]; + +$exceptionsChar = [" ", ".", ",", "'"]; + +function sentencesToLeet($sentence = 'Sentence is void') +{ + + global $transform, $exceptionsChar; + + if (gettype($sentence) === 'object') { + $sentence = "I Can't work with a object, sorry"; + } + + if (gettype($sentence) === 'array') { + $sentence = implode($sentence); + } + + $leetSentences = str_split(strtolower($sentence)); + + foreach ($leetSentences as $character) { + $key = str_replace($exceptionsChar, "", $character); + if ($key) { + echo $transform[$key]; + } else { + echo $character; + } + }; + echo "\n"; +} + + +sentencesToLeet(new stdClass); +sentencesToLeet(["this", "an", "array"]); +sentencesToLeet(25660); +sentencesToLeet(25, 5); +sentencesToLeet(25.5); +sentencesToLeet("Hello"); From 525f35546245621e920c213ad67c4d640dfd4e3b Mon Sep 17 00:00:00 2001 From: julianpk19961 Date: Sun, 22 Oct 2023 13:23:48 -0500 Subject: [PATCH 0372/2103] RETO#01-PHP --- .../php/julianpk19961" | 1 + 1 file changed, 1 insertion(+) diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961" index 312aea0043..02c52d6712 100644 --- "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961" +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961" @@ -87,3 +87,4 @@ sentencesToLeet(25660); sentencesToLeet(25, 5); sentencesToLeet(25.5); sentencesToLeet("Hello"); + From 953dc100339b320ceeccfaa5dc4018302cdc8091 Mon Sep 17 00:00:00 2001 From: Ivan Date: Mon, 23 Oct 2023 00:02:48 +0200 Subject: [PATCH 0373/2103] Reto #38 - c# --- .../c#/IveenNet.cs | 264 ++++++++++++++++++ 1 file changed, 264 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/c#/IveenNet.cs diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/c#/IveenNet.cs b/Retos/Reto #38 - LAS SUMAS [Media]/c#/IveenNet.cs new file mode 100644 index 0000000000..8ab4b9c672 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/c#/IveenNet.cs @@ -0,0 +1,264 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +/* + * Crea una función que encuentre todas las combinaciones de los números + * de una lista que suman el valor objetivo. + * - La función recibirá una lista de números enteros positivos + * y un valor objetivo. + * - Para obtener las combinaciones sólo se puede usar + * una vez cada elemento de la lista (pero pueden existir + * elementos repetidos en ella). + * - Ejemplo: Lista = [1, 5, 3, 2], Objetivo = 6 + * Soluciones: [1, 5] y [1, 3, 2] (ambas combinaciones suman 6) + * (Si no existen combinaciones, retornar una lista vacía) + */ + +namespace EjercicioMoud +{ + public class Reto38 + { + + class ListComparer : IEqualityComparer> + { + public bool Equals(List x, List y) + { + return x.SequenceEqual(y); + } + + public int GetHashCode(List obj) + { + int hashcode = 0; + foreach (int item in obj) + { + hashcode ^= item.GetHashCode(); + } + return hashcode; + } + } + + + private static int preguntarLista() + { + + int numero; + + Console.WriteLine("|Que numero deseas añadir a la lista, escriba 0 para salir|"); + + + if (int.TryParse(Console.ReadLine(), out numero)) + { + + if (numero < 0) + + { + Console.WriteLine("--- Escriba un numero positivo ---"); + } + + + } + else { Console.WriteLine("--- Escriba un numero correcto ---"); numero = -1; } + + + return numero; + + } + + private static int preguntarNumero() + { + + int numero; + + Console.WriteLine("Que numero es el objetivo, debe ser mayor que 0"); + + + if (int.TryParse(Console.ReadLine(), out numero)) + { + + if (numero <= 0) + + { + Console.WriteLine("--- Escriba un numero positivo o mayor que 0 ---"); + } + + + } + else { Console.WriteLine("--- Escriba un numero correcto ---"); numero = -1; } + + + return numero; + + } + + private static string tablasBorrando(ref List cm_listEnteros, ref List cm_listAux, int cm_objetivo) + { + + List fn_listBorrar = new List(); + string devolver = ""; + + cm_listEnteros.Sort((x, y) => y.CompareTo(x)); + + while (cm_listEnteros.Sum() >= cm_objetivo) + { + + cm_listAux.Clear(); + + foreach (var item in cm_listEnteros) + { + + if (cm_listAux.Count == 0) + { + if (item > cm_objetivo) { fn_listBorrar.Add(item); } else { cm_listAux.Add(item); } + } + + else + { + + if ((cm_listAux.Sum() + item) <= cm_objetivo) + { + cm_listAux.Add(item); + } + + } + + } + + if (cm_listAux.Sum() == cm_objetivo) + { + + devolver += "[" + string.Join(",", cm_listAux) + "]\n"; + + foreach (var item in cm_listAux) cm_listEnteros.Remove(item); + + } + + foreach (var item in fn_listBorrar) + { + cm_listEnteros.Remove(item); + } + + + } + + return devolver; + + } + + private static void calcular (HashSet> cm_resultados, List cm_combinacion, List cm_lista, int cm_objetivo, int cm_item) + { + List fn_combinacion = new List(cm_combinacion); + List fn_pasar; + + for (int i = 0; i < cm_lista.Count; i++) + { + + if ((cm_combinacion.Sum() + cm_lista.ElementAt(i)) <= cm_objetivo) + { + + fn_combinacion = new List(cm_combinacion); + fn_combinacion.Add(cm_lista.ElementAt(i)); + + if (fn_combinacion.Sum() == cm_objetivo) + { + cm_resultados.Add(fn_combinacion); + + } + else + { + + fn_pasar = new List(cm_lista); + fn_pasar.RemoveRange(0,i+1); + + calcular(cm_resultados, fn_combinacion, fn_pasar, cm_objetivo, cm_lista.ElementAt(i)); + + } + } + + } + + } + + /// + /// + /// + /// + public static void Main(string[] args) + { + HashSet> resultados = new HashSet>(new ListComparer()); + List combinacion = new List(); + List listEnteros = new List { 7, 5, 4, 4, 3, 3, 3, 2, 1, 1, 1 }; + //List listEnteros = new List(); + //List listEnteros = new List { 1,5,3,2 }; + + + + List listAux = new List(); + + int numero = 0; + int objetivo = 10; + + HashSet> fn_resultados; + string mensaje = ""; + + do + { + + /*do + { + + numero = preguntarLista(); + + if (numero > 0) listEnteros.Add(numero); + + } while (numero != 0); + + do + { + + numero = preguntarNumero(); + + if (numero > 0) objetivo = numero; + + } while (objetivo <= 0);*/ + + + + + if (listEnteros.Sum() < objetivo) + { + + Console.WriteLine($"No hay numero en la lista mas grande que el objetivo, resultado es {objetivo}"); + + } + else + { + + listEnteros.Where(x => (x<=objetivo)).ToList().Sort((x, y) => y.CompareTo(x)); + + calcular(resultados, combinacion, listEnteros, objetivo, 0); + + Console.WriteLine($"Todas las combinaciones para sacar el {objetivo} son :\n "); + + foreach (var item in resultados) + { + + Console.WriteLine($"[{string.Join(",", item)}]"); + + } + + } + + + listEnteros.Clear(); + + Console.ReadKey(); + + } while (true); + + } + + } +} From 703149680227d61d883b3d4035d1d8dd657a1a0b Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Sun, 22 Oct 2023 19:43:29 -0300 Subject: [PATCH 0374/2103] House init --- .../python/eldalai.py" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" new file mode 100644 index 0000000000..bb0671bba7 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -0,0 +1,21 @@ +import unittest + +class House: + def __init__(self): + self.cells = [ + [ + None for _ in range(4) + ] + for _ in range(4) + ] + +class TestHouse(unittest.TestCase): + + def test_init(self): + house = House() + self.assertEqual(len(house.cells), 4) + for room_index in range(4): + self.assertEqual(len(house.cells[room_index]), 4) + +if __name__ == '__main__': + unittest.main() From 2dd2b3ede79d50697620338e0e264509a351c4e4 Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Sun, 22 Oct 2023 19:52:07 -0300 Subject: [PATCH 0375/2103] add Cell --- .../python/eldalai.py" | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index bb0671bba7..050277b708 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -1,5 +1,8 @@ import unittest +class Cell: + ... + class House: def __init__(self): self.cells = [ @@ -9,6 +12,12 @@ def __init__(self): for _ in range(4) ] +class TestCell(unittest.TestCase): + def test_init(self): + cell = Cell() + self.assertIsNotNone(cell) + + class TestHouse(unittest.TestCase): def test_init(self): From e9cb0ef2d2c33c3ed0e558ca442116d347acb83d Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Sun, 22 Oct 2023 19:54:37 -0300 Subject: [PATCH 0376/2103] add Door --- .../python/eldalai.py" | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index 050277b708..d177ea0989 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -3,6 +3,11 @@ class Cell: ... + +class Door(Cell): + ... + + class House: def __init__(self): self.cells = [ @@ -12,6 +17,12 @@ def __init__(self): for _ in range(4) ] +class TestDoor(unittest.TestCase): + def test_init(self): + door = Door() + self.assertIsNotNone(door) + + class TestCell(unittest.TestCase): def test_init(self): cell = Cell() From 1773f8171a6b2805ff31a77c8bfa1f32a862093e Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Sun, 22 Oct 2023 20:18:24 -0300 Subject: [PATCH 0377/2103] Door pos in House --- .../python/eldalai.py" | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index d177ea0989..a983ba8b05 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -1,4 +1,7 @@ import unittest +from unittest.mock import patch +import random + class Cell: ... @@ -10,13 +13,21 @@ class Door(Cell): class House: def __init__(self): + door_pos_row = random.randint(0, 3) + door_pos_col = random.randint(0, 3) self.cells = [ [ - None for _ in range(4) + ( + Door() + if row_index == door_pos_row and col_index == door_pos_col + else None + ) + for col_index in range(4) ] - for _ in range(4) + for row_index in range(4) ] + class TestDoor(unittest.TestCase): def test_init(self): door = Door() @@ -37,5 +48,14 @@ def test_init(self): for room_index in range(4): self.assertEqual(len(house.cells[room_index]), 4) + @patch('random.randint', side_effect=[2, 3]) + def test_door_pos(self, randint_patched): + house = House() + self.assertIsInstance( + house.cells[2][3], + Door, + ) + + if __name__ == '__main__': unittest.main() From 73350de6f5156af16eb5e10cd11ce212d35031e8 Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Sun, 22 Oct 2023 20:34:04 -0300 Subject: [PATCH 0378/2103] add Candy --- .../python/eldalai.py" | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index a983ba8b05..ba90f41cb0 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -11,6 +11,10 @@ class Door(Cell): ... +class Candy(Cell): + ... + + class House: def __init__(self): door_pos_row = random.randint(0, 3) @@ -34,6 +38,12 @@ def test_init(self): self.assertIsNotNone(door) +class TestCandy(unittest.TestCase): + def test_init(self): + candy = Candy() + self.assertIsNotNone(candy) + + class TestCell(unittest.TestCase): def test_init(self): cell = Cell() From c87aad03999c5028a6940366ac80fde708291ff0 Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Sun, 22 Oct 2023 20:57:31 -0300 Subject: [PATCH 0379/2103] Candy pos in House --- .../python/eldalai.py" | 50 ++++++++++++++++--- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index ba90f41cb0..0d5d264758 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -17,20 +17,38 @@ class Candy(Cell): class House: def __init__(self): - door_pos_row = random.randint(0, 3) - door_pos_col = random.randint(0, 3) + self.setup_special_cells() self.cells = [ [ - ( - Door() - if row_index == door_pos_row and col_index == door_pos_col - else None - ) + self.get_cells(row_index, col_index) for col_index in range(4) ] for row_index in range(4) ] + def get_cells(self, row_index, col_index): + if (row_index, col_index,) in self.special_cells: + return self.special_cells[(row_index, col_index,)] + else: + return None + + def setup_special_cells(self): + self.special_cells = { + ( + random.randint(0, 3), + random.randint(0, 3), + ): Door() + } + candy_pos_row = random.randint(0, 3) + candy_pos_col = random.randint(0, 3) + while (candy_pos_row, candy_pos_col,) in self.special_cells: + candy_pos_row = random.randint(0, 3) + candy_pos_col = random.randint(0, 3) + self.special_cells[ + (candy_pos_row, candy_pos_col) + ] = Candy() + + class TestDoor(unittest.TestCase): def test_init(self): @@ -58,7 +76,7 @@ def test_init(self): for room_index in range(4): self.assertEqual(len(house.cells[room_index]), 4) - @patch('random.randint', side_effect=[2, 3]) + @patch('random.randint', side_effect=[2, 3, 3, 1]) def test_door_pos(self, randint_patched): house = House() self.assertIsInstance( @@ -66,6 +84,22 @@ def test_door_pos(self, randint_patched): Door, ) + @patch('random.randint', side_effect=[ + 2, 3, # house + 2, 3, # candy + 3, 1, # candy + ]) + def test_candy_pos(self, randint_patched): + house = House() + self.assertIsInstance( + house.cells[2][3], + Door, + ) + self.assertIsInstance( + house.cells[3][1], + Candy, + ) + if __name__ == '__main__': unittest.main() From b0757652f6d7aeb3bdc1acfbab71c475ab3022bc Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Sun, 22 Oct 2023 20:59:16 -0300 Subject: [PATCH 0380/2103] add Ghost --- .../python/eldalai.py" | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index 0d5d264758..162328cd8a 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -15,6 +15,10 @@ class Candy(Cell): ... +class Ghost(Cell): + ... + + class House: def __init__(self): self.setup_special_cells() @@ -62,6 +66,12 @@ def test_init(self): self.assertIsNotNone(candy) +class TestGhost(unittest.TestCase): + def test_init(self): + ghost = Ghost() + self.assertIsNotNone(ghost) + + class TestCell(unittest.TestCase): def test_init(self): cell = Cell() From 6dd1ea7cd483871895683a4cdf7f78eee00887bb Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Mon, 23 Oct 2023 00:19:34 -0300 Subject: [PATCH 0381/2103] Ghost pos in House --- .../python/eldalai.py" | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index 162328cd8a..699cf8e4cb 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -34,7 +34,10 @@ def get_cells(self, row_index, col_index): if (row_index, col_index,) in self.special_cells: return self.special_cells[(row_index, col_index,)] else: - return None + if random.randint(1, 10) == 1: + return Ghost() + else: + return None def setup_special_cells(self): self.special_cells = { @@ -86,7 +89,10 @@ def test_init(self): for room_index in range(4): self.assertEqual(len(house.cells[room_index]), 4) - @patch('random.randint', side_effect=[2, 3, 3, 1]) + @patch('random.randint', side_effect=[ + 2, 3, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ]) def test_door_pos(self, randint_patched): house = House() self.assertIsInstance( @@ -98,6 +104,7 @@ def test_door_pos(self, randint_patched): 2, 3, # house 2, 3, # candy 3, 1, # candy + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ]) def test_candy_pos(self, randint_patched): house = House() @@ -111,5 +118,33 @@ def test_candy_pos(self, randint_patched): ) + @patch('random.randint', side_effect=[ + 2, 3, # house + 3, 1, # candy + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ]) + def test_ghosts_pos(self, randint_patched): + house = House() + self.assertIsInstance( + house.cells[2][3], + Door, + ) + self.assertIsInstance( + house.cells[3][1], + Candy, + ) + self.assertIsNone( + house.cells[0][0] + ) + self.assertIsInstance( + house.cells[0][1], + Ghost, + ) + self.assertIsInstance( + house.cells[3][3], + Ghost, + ) + + if __name__ == '__main__': unittest.main() From 62eeb0b68ac0de89d35108f9d366b07ed7395acf Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Mon, 23 Oct 2023 00:22:31 -0300 Subject: [PATCH 0382/2103] add Visible on cells --- .../python/eldalai.py" | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index 699cf8e4cb..ea72348796 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -4,11 +4,13 @@ class Cell: - ... + def __init__(self): + self.visile = False class Door(Cell): - ... + def __init__(self): + self.visile = True class Candy(Cell): @@ -61,24 +63,28 @@ class TestDoor(unittest.TestCase): def test_init(self): door = Door() self.assertIsNotNone(door) + self.assertTrue(door.visile) class TestCandy(unittest.TestCase): def test_init(self): candy = Candy() self.assertIsNotNone(candy) + self.assertFalse(candy.visile) class TestGhost(unittest.TestCase): def test_init(self): ghost = Ghost() self.assertIsNotNone(ghost) + self.assertFalse(ghost.visile) class TestCell(unittest.TestCase): def test_init(self): cell = Cell() self.assertIsNotNone(cell) + self.assertFalse(cell.visile) class TestHouse(unittest.TestCase): From 2a777858e1d11884cb24eea3422298bcb0c8b6e3 Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Mon, 23 Oct 2023 00:30:46 -0300 Subject: [PATCH 0383/2103] add representation of cell items --- .../python/eldalai.py" | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index ea72348796..b3ca878232 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -12,13 +12,18 @@ class Door(Cell): def __init__(self): self.visile = True + def __str__(self): + return "🚪" + class Candy(Cell): - ... + def __str__(self): + return "🍭" if self.visile else " " class Ghost(Cell): - ... + def __str__(self): + return "👻" if self.visile else " " class House: @@ -65,6 +70,13 @@ def test_init(self): self.assertIsNotNone(door) self.assertTrue(door.visile) + def test__str__(self): + door = Door() + self.assertEqual( + str(door), + "🚪", + ) + class TestCandy(unittest.TestCase): def test_init(self): @@ -72,6 +84,21 @@ def test_init(self): self.assertIsNotNone(candy) self.assertFalse(candy.visile) + def test__str__invisible(self): + candy = Candy() + self.assertEqual( + str(candy), + " ", + ) + + def test__str__visible(self): + candy = Candy() + candy.visile = True + self.assertEqual( + str(candy), + "🍭", + ) + class TestGhost(unittest.TestCase): def test_init(self): @@ -79,6 +106,21 @@ def test_init(self): self.assertIsNotNone(ghost) self.assertFalse(ghost.visile) + def test__str__invisible(self): + ghost = Ghost() + self.assertEqual( + str(ghost), + " ", + ) + + def test__str__visible(self): + ghost = Ghost() + ghost.visile = True + self.assertEqual( + str(ghost), + "👻", + ) + class TestCell(unittest.TestCase): def test_init(self): From 7acfad4d149b16527b79b0370460dfa8b83d5965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Rosales?= Date: Sun, 22 Oct 2023 23:33:36 -0400 Subject: [PATCH 0384/2103] Reto #41 - c# --- .../c#/Andresaerg.cs" | 239 ++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/Andresaerg.cs" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/Andresaerg.cs" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/Andresaerg.cs" new file mode 100644 index 0000000000..f89164a1d7 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/Andresaerg.cs" @@ -0,0 +1,239 @@ +// See https://aka.ms/new-console-template for more information +// SoundPlayer typewriter = new(); +// string solutionDir = Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.FullName; +// string soundFilePath = Path.Combine(solutionDir, "sound.wav"); +// typewriter.SoundLocation = soundFilePath; +// typewriter.Load(); +// typewriter.PlayLooping(); +// Puedes agregar sonido con el anterior codigo y la lib System.Media. +// Yo usé la siguiente: https://www.youtube.com/watch?v=wkHL5AsSzF4 + +using Newtonsoft.Json; + + +var questions = await Get_Questions(); + +int posX = 0, posY = 0; //Inicio +Random selector = new Random(); +int exitX = 3, exitY = selector.Next(0, 3); //Salida +bool can_play = true; + +string[,] house_init = new string[4, 4]{ + { "(^_^)", "⬜", "⬜", "⬜"}, + { "⬜", "⬜", "⬜", "⬜"}, + { "⬜", "⬜", "⬜", "⬜"}, + { "⬜", "⬜", "⬜", "⬜"} +}; + +house_init[exitX, exitY] = "⬜"; + +void Draw() +{ + Console.Clear(); + Console.WriteLine("==========================================================================="); + Console.WriteLine(" Reto #41 de MoureDev "); + Console.WriteLine("==========================================================================="); + for (int x = 0; x < house_init.GetLength(0); x++) + { + Console.Write("\t\t\t"); + for (int y = 0; y < house_init.GetLength(1); y++) + { + Console.Write($"{house_init[x, y]}\t"); + } + Console.WriteLine(); + } + + string north = posX != 0 ? "Norte " : ""; + string south = posX != 3 ? "Sur " : ""; + string east = posY != 3 ? "Este " : ""; + string west = posY != 0 ? "Oeste " : ""; + string category = questions.Count() > 0 ? questions[0].category!.ToUpper() : ""; + Console.WriteLine(); + Console.WriteLine($"Presiona las flechas para desplazarte por la pista. Recibirás preguntas de: {category}"); + Console.WriteLine($"Opciones disponibles: {north}{south}{east}{west}"); + Console.WriteLine(); +} + +void Ask(bool ghost) +{ + bool correctAnswer = false; + int repeat = !ghost ? 1 : 2; + if (repeat == 2) Console.WriteLine("Vaya! Encontraste un fantasma... o el te encontro a ti ~.~"); + + while ((!correctAnswer && questions!.Count > 0) || repeat > 0) + { + Console.WriteLine(); + int index = selector.Next(0, questions.Count); + var question = questions[index]; + string[] options = { question.answers!.answer_a!, question.answers.answer_b!, + question.answers.answer_c!, question.answers.answer_d! }; + string[] opt_index = new string[] { "a) ", "b) ", "c) ", "d) " }; + + Console.WriteLine($"{question.question}"); + + for (int i = 0; i < options.Length; i++) + { + if (!string.IsNullOrEmpty(options[i])) + { + Console.WriteLine($"{opt_index[i]}{options[i]}"); + } + } + + Console.WriteLine(); + Console.Write("Seleccione su respuesta: "); + string userAnswer = Console.ReadLine()!.ToLower(); + + switch (userAnswer) + { + case "a": + correctAnswer = question.correct_answer == "answer_a"; + break; + case "b": + correctAnswer = question.correct_answer == "answer_b"; + break; + case "c": + correctAnswer = question.correct_answer == "answer_c"; + break; + case "d": + correctAnswer = question.correct_answer == "answer_d"; + break; + default: + Console.WriteLine("Lo siento mi rey, esa no es una opción válida. Vuelve a intentarlo"); + continue; + } + + string message = correctAnswer ? "¡Respuesta correcta!\nPuedes seguir, crack" : $"Lo siento, esa no es la respuesta correcta.\n{question.feedback}"; + Console.WriteLine(message); + Console.WriteLine(); + + questions.RemoveAt(index); + if (questions!.Count == 0) + { + Console.WriteLine("Lo siento mi bro, te has quedado sin oportunidades para continuar..."); + house_init[posX, posY] = "(x_x)"; + can_play = false; + Draw(); + return; + } + repeat--; + } +} + +void Movement(string direction) +{ + // Guarda la posición actual antes de moverte + int oldPosX = posX; + int oldPosY = posY; + + switch (direction) + { + case "north": + if (posX > 0) posX--; + break; + case "south": + if (posX < house_init.GetLength(0) - 1) posX++; + break; + case "east": + if (posY < house_init.GetLength(1) - 1) posY++; + break; + case "west": + if (posY > 0) posY--; + break; + } + // Marca la posición actual como visitada + house_init[oldPosX, oldPosY] = "⬜"; + + // Comprueba si llegaste a la salida + bool finish = (posX == exitX) && (posY == exitY); ; + if (finish) + { + house_init[posX, posY] = "(^o^)"; + Draw(); + Console.WriteLine("Felicidades! Has obtenido muchos dulces y chocolates ficticios o.O \nFeliz Halloween!"); + can_play = false; + Console.WriteLine(); + return; + } + + // Comprueba si te has movido a una nueva posición + bool should_ask = house_init[posX, posY] == "⬜"; + + // Posicion actual + house_init[posX, posY] = "(^_^)"; + + // Hay fantasmas? + bool ghost = false; + int ghosts_spawn = selector.Next(0, 100); + if (ghosts_spawn >= 0 && ghosts_spawn <= 10) + { + ghost = true; + house_init[posX, posY] = "(o_o)"; + } + + Draw(); + + if (should_ask) + { + Ask(ghost); + } +} + +Draw(); + +while (can_play) // Bucle infinito hasta que el usuario cierre la consola +{ + var key = Console.ReadKey(true).Key; // El argumento 'true' oculta la tecla presionada + switch (key) + { + case ConsoleKey.UpArrow: + Movement("north"); + break; + case ConsoleKey.DownArrow: + Movement("south"); + break; + case ConsoleKey.RightArrow: + Movement("east"); + break; + case ConsoleKey.LeftArrow: + Movement("west"); + break; + } +} + +static async Task> Get_Questions() +{ + HttpClient client = new HttpClient(); + Random rand = new(); + string[] categories = { "html", "css", "javascript", "php", "sql", "csharp", "java", "cpp", "python" }; + int category_index = rand.Next(0, 8); + client.DefaultRequestHeaders.Accept.Clear(); + client.DefaultRequestHeaders.Accept.Add( + new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); + + var request = client.GetAsync($"https://www.preguntapi.dev/api/categories/{categories[category_index]}?level=aleatorio&limit=20"); + + var response = await request; + var json = await response.Content.ReadAsStringAsync(); + var data = JsonConvert.DeserializeObject>(json); + + return data!; +} + +public class Question +{ + public int id { get; set; } + public string? category { get; set; } + public string? level { get; set; } + public string? question { get; set; } + public Answer? answers { get; set; } + public string? correct_answer { get; set; } + public string? feedback { get; set; } +} + +public class Answer +{ + public string? answer_a { get; set; } + public string? answer_b { get; set; } + public string? answer_c { get; set; } + public string? answer_d { get; set; } +} From 6c62a12c8da8c858ae840220973fc78f984d386b Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Mon, 23 Oct 2023 00:51:51 -0300 Subject: [PATCH 0385/2103] add str --- .../python/eldalai.py" | 63 ++++++++++++++++--- 1 file changed, 56 insertions(+), 7 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index b3ca878232..c6d33cff13 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -16,14 +16,19 @@ def __str__(self): return "🚪" +class Enigma(Cell): + def __str__(self): + return "❓" if self.visile else "⬜️" + + class Candy(Cell): def __str__(self): - return "🍭" if self.visile else " " + return "🍭" if self.visile else "⬜️" class Ghost(Cell): def __str__(self): - return "👻" if self.visile else " " + return "👻" if self.visile else "⬜️" class House: @@ -37,6 +42,14 @@ def __init__(self): for row_index in range(4) ] + def __str__(self): + output = "" + for row in self.cells: + for item in row: + output += str(item) + output += '\n' + return output + def get_cells(self, row_index, col_index): if (row_index, col_index,) in self.special_cells: return self.special_cells[(row_index, col_index,)] @@ -44,7 +57,7 @@ def get_cells(self, row_index, col_index): if random.randint(1, 10) == 1: return Ghost() else: - return None + return Enigma() def setup_special_cells(self): self.special_cells = { @@ -63,7 +76,6 @@ def setup_special_cells(self): ] = Candy() - class TestDoor(unittest.TestCase): def test_init(self): door = Door() @@ -88,7 +100,7 @@ def test__str__invisible(self): candy = Candy() self.assertEqual( str(candy), - " ", + "⬜️", ) def test__str__visible(self): @@ -100,6 +112,28 @@ def test__str__visible(self): ) +class TestEnigma(unittest.TestCase): + def test_init(self): + engima = Enigma() + self.assertIsNotNone(engima) + self.assertFalse(engima.visile) + + def test__str__invisible(self): + engima = Enigma() + self.assertEqual( + str(engima), + "⬜️", + ) + + def test__str__visible(self): + engima = Enigma() + engima.visile = True + self.assertEqual( + str(engima), + "❓", + ) + + class TestGhost(unittest.TestCase): def test_init(self): ghost = Ghost() @@ -110,7 +144,7 @@ def test__str__invisible(self): ghost = Ghost() self.assertEqual( str(ghost), - " ", + "⬜️", ) def test__str__visible(self): @@ -165,7 +199,6 @@ def test_candy_pos(self, randint_patched): Candy, ) - @patch('random.randint', side_effect=[ 2, 3, # house 3, 1, # candy @@ -193,6 +226,22 @@ def test_ghosts_pos(self, randint_patched): Ghost, ) + @patch('random.randint', side_effect=[ + 2, 3, # house + 3, 1, # candy + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ]) + def test_ghosts_pos(self, randint_patched): + house = House() + self.assertEqual( + str(house), + ( + '⬜️⬜️⬜️⬜️\n' + + '⬜️⬜️⬜️⬜️\n' + + '⬜️⬜️⬜️🚪\n' + + '⬜️⬜️⬜️⬜️\n' + ) + ) if __name__ == '__main__': unittest.main() From 905912667ca3a19657ad730a78062e9361cad0b3 Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Mon, 23 Oct 2023 01:02:49 -0300 Subject: [PATCH 0386/2103] add character --- .../python/eldalai.py" | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index c6d33cff13..c6b058866d 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -44,9 +44,15 @@ def __init__(self): def __str__(self): output = "" - for row in self.cells: - for item in row: - output += str(item) + for row_index, row in enumerate(self.cells): + for col_index, item in enumerate(row): + if ( + row_index == self.player_row and + col_index == self.player_col + ): + output += "😐" + else: + output += str(item) output += '\n' return output @@ -60,12 +66,16 @@ def get_cells(self, row_index, col_index): return Enigma() def setup_special_cells(self): + door_pos_row = random.randint(0, 3) + door_pos_col = random.randint(0, 3) self.special_cells = { ( - random.randint(0, 3), - random.randint(0, 3), + door_pos_row, + door_pos_col, ): Door() } + self.player_row = door_pos_row + self.player_col = door_pos_col candy_pos_row = random.randint(0, 3) candy_pos_col = random.randint(0, 3) while (candy_pos_row, candy_pos_col,) in self.special_cells: @@ -182,6 +192,21 @@ def test_door_pos(self, randint_patched): Door, ) + @patch('random.randint', side_effect=[ + 2, 3, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ]) + def test_character_pos(self, randint_patched): + house = House() + self.assertEqual( + house.player_row, + 2, + ) + self.assertEqual( + house.player_col, + 3, + ) + @patch('random.randint', side_effect=[ 2, 3, # house 2, 3, # candy @@ -238,7 +263,7 @@ def test_ghosts_pos(self, randint_patched): ( '⬜️⬜️⬜️⬜️\n' + '⬜️⬜️⬜️⬜️\n' + - '⬜️⬜️⬜️🚪\n' + + '⬜️⬜️⬜️😐\n' + '⬜️⬜️⬜️⬜️\n' ) ) From 2c5c472ac11e0c7d6dd215cd1a3c84e072117145 Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Mon, 23 Oct 2023 01:57:32 -0300 Subject: [PATCH 0387/2103] add questions --- .../python/eldalai.py" | 244 +++++++++++++++++- 1 file changed, 242 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index c6b058866d..844e7195ed 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -1,5 +1,5 @@ import unittest -from unittest.mock import patch +from unittest.mock import patch, call import random @@ -15,21 +15,92 @@ def __init__(self): def __str__(self): return "🚪" + def enter(self): + print('Pregunta') + return False + +questions_answers = [ + ( + '¿Cuál es el animal terrestre más grande del mundo? ', + 'elefante' + ), + ( + '¿Qué animal es conocido como el "Rey de la Selva"? ', + 'leon' + ), + ( + '¿Cuál es el único mamífero capaz de volar? ', + 'murcielago' + ), + ( + '¿Qué animal es famoso por su franja negra y blanca y es originario de China? ', + 'panda' + ), + ( + '¿Qué animal es conocido por cambiar de color para camuflarse en su entorno? ', + 'camaleon' + ), + ( + '¿Cuál es el animal más rápido del mundo? ', + 'guepardo' + ), + ( + '¿Qué animal es famoso por regenerar sus extremidades si se cortan? ', + 'estrella' + ), + ( + '¿Cuál es el animal mamífero más grande del océano? ', + 'ballena' + ), + ( + '¿Cuál es el ave que no puede volar y es conocida por ser un excelente nadador? ', + 'pingüino' + ), + ( + '¿Qué animal es el símbolo de la longevidad en la cultura china? ', + 'tortuga' + ) +] + +def question(): + question, answer = random.choice(questions_answers) + while True: + user_answer = input(question) + if answer != user_answer: + print('mal! trampa [' + answer + ']') + else: + break class Enigma(Cell): def __str__(self): return "❓" if self.visile else "⬜️" + def enter(self): + print('Pregunta') + question() + self.visile = True + return False class Candy(Cell): def __str__(self): return "🍭" if self.visile else "⬜️" + def enter(self): + print('Candy!!') + self.visile = True + return True + class Ghost(Cell): def __str__(self): return "👻" if self.visile else "⬜️" + def enter(self): + print('Fantasma, 2 Preguntas!') + question() + self.visile = True + return False + class House: def __init__(self): @@ -85,6 +156,46 @@ def setup_special_cells(self): (candy_pos_row, candy_pos_col) ] = Candy() + def move(self): + while True: + direction = input("en que direccion quiere ir (N/S/E/O)") + if direction == "N": + if self.player_row == 0: + print('estas saliendo del tablero') + else: + self.player_row -= 1 + break + if direction == "S": + if self.player_row == 3: + print('estas saliendo del tablero') + else: + self.player_row += 1 + break + if direction == "E": + if self.player_col == 0: + print('estas saliendo del tablero') + else: + self.player_col -= 1 + break + if direction == "O": + if self.player_col == 3: + print('estas saliendo del tablero') + else: + self.player_col += 1 + break + + def enter_cell(self): + return self.cells[self.player_row][self.player_col].enter() + + +def main(): + house = House() + game_over = False + while not game_over: + print(house) + house.move() + game_over = house.enter_cell() + class TestDoor(unittest.TestCase): def test_init(self): @@ -268,5 +379,134 @@ def test_ghosts_pos(self, randint_patched): ) ) + @patch('builtins.print') + @patch('builtins.input', return_value = 'N') + @patch('random.randint', side_effect=[ + 2, 3, # house + 3, 1, # candy + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ]) + def test_move_N(self, randint_patched, input_patched, print_patched): + house = House() + house.move() + self.assertEqual( + house.player_row, + 1, + ) + print_patched.assert_not_called() + input_patched.assert_called_once() + + + @patch('builtins.print') + @patch('builtins.input', side_effect = ['N', 'S']) + @patch('random.randint', side_effect=[ + 0, 3, # house + 3, 1, # candy + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ]) + def test_move_N_error(self, randint_patched, input_patched, print_patched): + house = House() + house.move() + self.assertEqual( + house.player_row, + 1, + ) + self.assertEqual( + input_patched.call_count, + 2, + ) + self.assertEqual( + print_patched.call_args_list, + [ + call('estas saliendo del tablero'), + ] + ) + + @patch('builtins.print') + @patch('builtins.input', return_value = 'S') + @patch('random.randint', side_effect=[ + 2, 3, # house + 3, 1, # candy + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ]) + def test_move_S(self, randint_patched, input_patched, print_patched): + house = House() + house.move() + self.assertEqual( + house.player_row, + 3, + ) + print_patched.assert_not_called() + input_patched.assert_called_once() + + + @patch('builtins.print') + @patch('builtins.input', side_effect = ['S', 'N']) + @patch('random.randint', side_effect=[ + 3, 3, # house + 3, 1, # candy + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ]) + def test_move_S_error(self, randint_patched, input_patched, print_patched): + house = House() + house.move() + self.assertEqual( + house.player_row, + 2, + ) + self.assertEqual( + input_patched.call_count, + 2, + ) + self.assertEqual( + print_patched.call_args_list, + [ + call('estas saliendo del tablero'), + ] + ) + + @patch('builtins.print') + @patch('builtins.input', return_value = 'E') + @patch('random.randint', side_effect=[ + 2, 3, # house + 3, 1, # candy + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ]) + def test_move_E(self, randint_patched, input_patched, print_patched): + house = House() + house.move() + self.assertEqual( + house.player_col, + 2, + ) + print_patched.assert_not_called() + input_patched.assert_called_once() + + + @patch('builtins.print') + @patch('builtins.input', side_effect = ['E', 'O']) + @patch('random.randint', side_effect=[ + 3, 0, # house + 3, 1, # candy + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ]) + def test_move_E_error(self, randint_patched, input_patched, print_patched): + house = House() + house.move() + self.assertEqual( + house.player_col, + 1, + ) + self.assertEqual( + input_patched.call_count, + 2, + ) + self.assertEqual( + print_patched.call_args_list, + [ + call('estas saliendo del tablero'), + ] + ) + if __name__ == '__main__': - unittest.main() + main() From f4baedd10196dbc0848fe7c13abb6d5bd49cfced Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Mon, 23 Oct 2023 02:05:17 -0300 Subject: [PATCH 0388/2103] fix questions on ghost --- .../python/eldalai.py" | 1 + 1 file changed, 1 insertion(+) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" index 844e7195ed..4be064fe50 100644 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/eldalai.py" @@ -98,6 +98,7 @@ def __str__(self): def enter(self): print('Fantasma, 2 Preguntas!') question() + question() self.visile = True return False From 0513f0b2f94c97a78ea8cf1a9ad71e7505c46739 Mon Sep 17 00:00:00 2001 From: SrRecursive Date: Mon, 23 Oct 2023 14:40:20 +0200 Subject: [PATCH 0389/2103] Reto mouredev#40 - C --- .../c/SrRecursive.c" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c/SrRecursive.c" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c/SrRecursive.c" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c/SrRecursive.c" new file mode 100644 index 0000000000..47b3a1f1c7 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c/SrRecursive.c" @@ -0,0 +1,46 @@ +#include + +int calculate_spaces(int n1, int number) +{ + int spaces; + + spaces = 2; + if (number < 10) + spaces++; + return (spaces); +} + +int main(void) +{ + for (int i = 1; i <= 10; i++) + { + printf("\n-----------------\n"); + if (i == 10) + printf("| Tabla del %d |\n", i); + else + printf("| Tabla del %d |\n", i); + printf("-----------------\n"); + for (int j = 1; j <= 10; j++) + { + printf("|"); + for (int k = 0; k < calculate_spaces(i, i * j); k++) + { + printf(" "); + if (i == 10 && j == 10) + k++; + } + printf("%d x %d = %d", i, j, i * j); + for (int k = 0; k < calculate_spaces(j, i * j); k++) + { + printf(" "); + if (i == 10 && j == 10) + k++; + } + if (i > 1 && i < 10 && j < 10 && i * j > 9) + printf(" "); + printf("|\n"); + } + printf("-----------------\n"); + } + return (0); +} \ No newline at end of file From a1c9a2807a0fc4b1e808aef95ca8ada8556b4076 Mon Sep 17 00:00:00 2001 From: Luis Dellamea Date: Mon, 23 Oct 2023 10:50:47 -0300 Subject: [PATCH 0390/2103] reto 16 lfd1983 --- .../python/lfd1983.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Retos/Reto #16 - LA ESCALERA [Media]/python/lfd1983.py diff --git a/Retos/Reto #16 - LA ESCALERA [Media]/python/lfd1983.py b/Retos/Reto #16 - LA ESCALERA [Media]/python/lfd1983.py new file mode 100644 index 0000000000..93b21505c5 --- /dev/null +++ b/Retos/Reto #16 - LA ESCALERA [Media]/python/lfd1983.py @@ -0,0 +1,39 @@ +# /* +# * Crea una función que dibuje una escalera según su número de escalones. +# * - Si el número es positivo, será ascendente de izquiera a derecha. +# * - Si el número es negativo, será descendente de izquiera a derecha. +# * - Si el número es cero, se dibujarán dos guiones bajos (__). +# * +# * Ejemplo: 4 +# * _ +# * _| +# * _| +# * _| +# * _| +# * +# */ + +def dibujarEscalon(posicion,escalon): + texto = " "*posicion+escalon + print(texto) + +escalones = None +while escalones is None: + try: + escalones = int(input("Ingresa el número de escalones: ")) + except ValueError: + print('El valor ingresado no es un número entero') + + +if escalones == 0: + print("__") + +elif escalones > 0: + print(" "*(escalones*2)+"_") + for i in range(escalones,0,-1): + dibujarEscalon(i*2-2,"_|") + +else: + print("_") + for i in range(0,escalones*-1): + dibujarEscalon(i*2+1,"|_") From f28b78a9c2b68268733cae54a2561d97a897f302 Mon Sep 17 00:00:00 2001 From: patriciotrujilllo Date: Mon, 23 Oct 2023 11:01:43 -0300 Subject: [PATCH 0391/2103] Reto #40 resolve --- .../javascript/patriciotrujilllo.js" | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/patriciotrujilllo.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/patriciotrujilllo.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/patriciotrujilllo.js" new file mode 100644 index 0000000000..7709ce022e --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/patriciotrujilllo.js" @@ -0,0 +1,18 @@ +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +const multi = (a) =>{ + let result = [] + for(let i = 0; i < 10 ; i++){ + result.push(`${a} x ${i+1} = ${a*(i+1)}`) + } + return result +} +console.log(multi(9)) \ No newline at end of file From 51f422d1b5c4aacb4a2266b5a4eb572daace2c7e Mon Sep 17 00:00:00 2001 From: patriciotrujilllo Date: Mon, 23 Oct 2023 11:19:24 -0300 Subject: [PATCH 0392/2103] Reto #29 resolve --- .../javascript/patriciotrujilllo.js" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/javascript/patriciotrujilllo.js" diff --git "a/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/javascript/patriciotrujilllo.js" "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/javascript/patriciotrujilllo.js" new file mode 100644 index 0000000000..ed51949653 --- /dev/null +++ "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/javascript/patriciotrujilllo.js" @@ -0,0 +1,24 @@ +/* + * Crea una función que reciba dos cadenas de texto casi iguales, + * a excepción de uno o varios caracteres. + * La función debe encontrarlos y retornarlos en formato lista/array. + * - Ambas cadenas de texto deben ser iguales en longitud. + * - Las cadenas de texto son iguales elemento a elemento. + * - No se pueden utilizar operaciones propias del lenguaje + * que lo resuelvan directamente. + * + * Ejemplos: + * - Me llamo mouredev / Me llemo mouredov -> ["e", "o"] + * - Me llamo.Brais Moure / Me llamo brais moure -> [" ", "b", "m"] + */ + +function cadena(a,b){ + if(a.length!==b.length) return console.log('Las deben contener la misma cantidad de caracteres') + let lista = [] + for(let i=0; i Date: Mon, 23 Oct 2023 10:30:20 -0400 Subject: [PATCH 0393/2103] Reto #3 - Python --- .../python/CaesaRR19.py" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/CaesaRR19.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/CaesaRR19.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/CaesaRR19.py" new file mode 100644 index 0000000000..1dd1060a3a --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/CaesaRR19.py" @@ -0,0 +1,27 @@ +import string +from random import choice + + +def creador_contraseñas(longitud=8, mayus=True, num=True, simb=True): + diccionario = { + "minusculas": string.ascii_lowercase, + "mayusculas": string.ascii_uppercase, + "numeros": string.digits, + "simbolos": string.punctuation, + } + contra = "" + if not mayus: + del diccionario["mayusculas"] + if not num: + del diccionario["numeros"] + if not simb: + del diccionario["simbolos"] + + if longitud in range(8, 17): + for _ in range(longitud): + contra += choice(diccionario[choice(list(diccionario.keys()))]) + return contra + return "Ingrese una longitud válida." + + +print(creador_contraseñas(16, False, False, True)) From bf31491ef20d2df534b964d24de3213f2f153867 Mon Sep 17 00:00:00 2001 From: SrRecursive Date: Mon, 23 Oct 2023 16:53:15 +0200 Subject: [PATCH 0394/2103] Reto mouredev#41 - C --- .../c/SrRecursive.c" | 370 ++++++++++++++++++ 1 file changed, 370 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c/SrRecursive.c" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c/SrRecursive.c" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c/SrRecursive.c" new file mode 100644 index 0000000000..9106ea0c0a --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c/SrRecursive.c" @@ -0,0 +1,370 @@ +#include +#include +#include + +char questions[16][1024] = {"\nWhen was Github launched?\na. 2008\nb. 2009\nc. 2010\nd. 2011\n\n", + "\n25 + 5 / 5 = ?\na. 0\nb. 6\nc. 25\nd. 26\n\n", + "\nWhat is the command to list all files in a directory?\na. ls\nb. dir\nc. list\nd. cd\n\n", + "\nWhat is the command to create a new directory?\na. mkdir\nb. newdir\nc. md\nd. cd\n\n", + "\nWhat is the command to remove a directory?\na. removedir\nb. rmdir\nc. rd\nd. cd\n\n", + "\nWhat is the command to see the commit history from a repository?\na. git log\nb. git commit\nc. git history\nd. git show\n\n", + "\nWhat is the correct spelling? \na. git pul\nb. git pull\nc. git pool\nd. git pule\n\n", + "\nWhat is the command to add a file to the staging area?\na. git pull\nb. git commit\nc. git push\nd. git add\n\n", + "\n1 + 1 + 1 - 3 * (5 + 1) - 25 + (5 * 5) = ?\na. -18\nb. 25\nc. 0\nd. 10\n\n", + "\nWhen Halloween is celebrated?\na. 31 October\nb. 1 November\nc. 31 December\nd. 25 December\n\n", + "\nWhat is H2O in chemistry?\na. Water\nb. Oxygen\nc. Hydrogen\nd. Carbon\n\n", + "\nWhat is the capital of Spain?\na. Barcelona\nb. Madrid\nc. Sevilla\nd. Valencia\n\n", + "\nWhat is the capital of France?\na. Paris\nb. Lyon\nc. Marseille\nd. Toulouse\n\n", + "\nWhat is an integer?\na. A number with decimals\nb. A number without decimals\nc. A number with letters\nd. A number with symbols\n\n", + "\nWhat is the command to create a new branch?\na. git branch\nb. git new branch\nc. git create branch\nd. git new\n\n", + "\nWhen was the first version of C released?\na. 1974\nb. 1972\nc. 1970\nd. 1976\n\n"}; +char answers[16] = {'a', + 'd', + 'a', + 'b', + 'a', + 'a', + 'b', + 'd', + 'c', + 'a', + 'a', + 'b', + 'a', + 'b', + 'a', + 'c'}; + +enum e_house +{ + PLAYER = 'P', + GHOST = 'G', + TREAT = 'T', + ENIGMA = '?', + EXPLORED = 'X' +}; + +enum e_movement +{ + UP = 'w', + DOWN = 's', + LEFT = 'a', + RIGHT = 'd', + HELP = 'h', + QUIT = 'q' +}; + +enum e_answer +{ + SUCCESS = 1, + FAIL = 0, + WIN = 2 +}; + +int move_up(char house[4][4]); +int move_down(char house[4][4]); +int move_left(char house[4][4]); +int move_right(char house[4][4]); +int show_help(void); +int handle_input(char input, char house[4][4]); +int handle_event(int event, int playerXpos, int playerYpos); +void show_house(char house[4][4]); +int question_generator(void); +void random_house(char house[4][4]); + +int main(void) +{ + char house[4][4] = {0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0}; + char input; + int win; + + srand(time(NULL)); + input = 0; + win = 0; + random_house(house); + while (!win && input != QUIT) + { + show_house(house); + printf("Introduce a movement: "); + input = fgetc(stdin); + getchar(); + win = handle_input(input, house); + } + return (0); +} + +void show_house(char house[4][4]) +{ + for (int i = 0 ; i < 4; i++) + { + for (int j = 0; j < 4; j++) + printf("%c ", house[i][j]); + printf("\n"); + } +} + +int show_help(void) +{ + printf("Movement:\n"); + printf("w - Up\n"); + printf("s - Down\n"); + printf("a - Left\n"); + printf("d - Right\n"); + printf("h - Help\n"); + printf("q - Quit\n"); + return (0); +} + +int handle_event(int event, int playerXpos, int playerYpos) +{ + int success_answers; + + success_answers = 0; + switch (event) + { + case GHOST: + printf("You found a ghost, you have to answer two questions.\n"); + success_answers += question_generator(); + success_answers += question_generator(); + if (success_answers == 2) + return (SUCCESS); + else + return (FAIL); + case TREAT: + printf("You found the treat, you won.\n"); + return (WIN); + case ENIGMA: + printf("You found an enigma, you have to solve it.\n"); + success_answers += question_generator(); + return (success_answers); + case EXPLORED: + printf("You already explored this place.\n"); + return (EXPLORED); + default: + printf("Invalid event.\n"); + return (0); + return (0); + } +} + +int move_up(char house[4][4]) +{ + int playerXpos; + int playerYpos; + int event; + + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + if (house[i][j] == PLAYER) + { + playerXpos = j; + playerYpos = i; + } + } + } + if (playerYpos == 0) + { + printf("You can't move up.\n"); + return (0); + } + event = handle_event(house[playerYpos - 1][playerXpos], playerXpos, playerYpos); + if (event == 0) + { + printf("You didn't answer correctly, you stay in the same place!\n"); + return (FAIL); + } + else if (event == WIN) + return (WIN); + house[playerYpos][playerXpos] = EXPLORED; + house[playerYpos - 1][playerXpos] = PLAYER; + return (0); +} + +int move_down(char house[4][4]) +{ + int playerXpos; + int playerYpos; + int event; + + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + if (house[i][j] == PLAYER) + { + playerXpos = j; + playerYpos = i; + } + } + if (playerYpos == 3) + { + printf("You can't move down.\n"); + return (0); + } + event = handle_event(house[playerYpos + 1][playerXpos], playerXpos, playerYpos); + if (event == 0) + { + printf("You didn't answer correctly, you stay in the same place!\n"); + return (FAIL); + } + else if (event == WIN) + return (WIN); + house[playerYpos][playerXpos] = EXPLORED; + house[playerYpos + 1][playerXpos] = PLAYER; + return (0); +} + +int move_left(char house[4][4]) +{ + int playerXpos; + int playerYpos; + int event; + + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4 ; j++) + if (house[i][j] == PLAYER) + { + playerXpos = j; + playerYpos = i; + } + } + if (playerXpos == 0) + { + printf("You can't move left.\n"); + return (0); + } + event = handle_event(house[playerYpos][playerXpos - 1], playerXpos, playerYpos); + if (event == 0) + { + printf("You didn't answer correctly, you stay in the same place!\n"); + return (FAIL); + } + else if (event == WIN) + return (WIN); + house[playerYpos][playerXpos] = EXPLORED; + house[playerYpos][playerXpos - 1] = PLAYER; + return (0); +} + +int move_right(char house[4][4]) +{ + int playerXpos; + int playerYpos; + int event; + + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4 ; j++) + if (house[i][j] == PLAYER) + { + playerXpos = j; + playerYpos = i; + } + } + if (playerXpos == 3) + { + printf("You can't move right.\n"); + return (0); + } + event = handle_event(house[playerYpos][playerXpos + 1], playerXpos, playerYpos); + if (event == FAIL) + { + printf("You didn't answer correctly, you stay in the same place!\n"); + return (FAIL); + } + else if (event == WIN) + return (WIN); + house[playerYpos][playerXpos] = EXPLORED; + house[playerYpos][playerXpos + 1] = PLAYER; + return (0); +} + +int handle_input(char input, char house[4][4]) +{ + int status; + switch (input) + { + case QUIT: + printf("Quitting...\n"); + return (0); + case HELP: + status = show_help(); + break; + case UP: + status = move_up(house); + break; + case DOWN: + status = move_down(house); + break; + case LEFT: + status = move_left(house); + break; + case RIGHT: + status = move_right(house); + break; + default: + printf("Invalid movement, type h for help.\n"); + return (0); + } + if (status == 1) + return (status); + return (0); +} + +int question_generator(void) +{ + int questionid; + char answer; + + questionid = rand() % 16; + printf("%s", questions[questionid]); + printf("Introduce your answer: "); + answer = fgetc(stdin); + getchar(); + if (answer == answers[questionid]) + { + printf("Correct answer!\n"); + return (SUCCESS); + } + printf("Wrong answer!\n"); + return (FAIL); +} + +void random_house(char house[4][4]) +{ + int options[10] = {ENIGMA, + ENIGMA, + ENIGMA, + ENIGMA, + ENIGMA, + ENIGMA, + ENIGMA, + ENIGMA, + ENIGMA, + GHOST}; + int treatXpos; + int treatYpos; + + house[rand() % 4][rand() % 4] = PLAYER; + treatXpos = rand() % 4; + treatYpos = rand() % 4; + while (house[treatYpos][treatXpos] == PLAYER) + { + treatXpos = rand() % 4; + treatYpos = rand() % 4; + } + house[treatYpos][treatXpos] = TREAT; + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4 ; j++) + { + if (house[i][j] != PLAYER && house[i][j] != TREAT) + house[i][j] = options[rand() % 10]; + } + } +} From 94345706ad6cdfc292a8997e4e5b81d34170c33d Mon Sep 17 00:00:00 2001 From: Fabian Triana Date: Mon, 23 Oct 2023 10:23:03 -0500 Subject: [PATCH 0395/2103] Reto #41 - Python --- .../python/wilmertri.py" | 172 ++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/wilmertri.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/wilmertri.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/wilmertri.py" new file mode 100644 index 0000000000..a760ed05d3 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/wilmertri.py" @@ -0,0 +1,172 @@ +""" + * Este es un reto especial por Halloween. + * Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces. + * + * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. + * (Tienes total libertad para ser creativo con los textos) + * + * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 + * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. + * (16 habitaciones, siendo una de entrada y otra donde están los dulces) + * Esta podría ser una representación: + * 🚪⬜️⬜️⬜️ + * ⬜️👻⬜️⬜️ + * ⬜️⬜️⬜️👻 + * ⬜️⬜️🍭⬜️ + * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. + * Si no lo aciertas no podrás desplazarte. + * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. + * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) + * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. + * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y + * tengas que responder dos preguntas para salir de ella. +""" +import random + + +def painting_mansion(r: int, c: int, init: bool, candy: bool, ghost: bool): + mansion = [ + ['🚪', '⬜️', '⬜️', '⬜️'], + ['⬜️', '⬜️', '⬜️', '⬜️'], + ['⬜️', '⬜️', '⬜️', '⬜️'], + ['⬜️', '⬜️', '⬜️', '⬜️'] + ] + + if init: + mansion[r][c] = '🙍‍♂️' + if candy: + mansion[r][c] = '🍭' + if ghost: + mansion[r][c] = '👻' + + + for r in mansion: + print(' '.join(r)) + +def options_move(r: int, c:int) -> list: + option = ["arriba", "abajo", "izquierda", "derecha" ] + + if r == 0: + option = ["abajo"] + elif r == 3: + option = ["arriba"] + + if r == 0 or r == 3: + if c == 0: + option.append("derecha") + if 0 < c < 3: + option += ["izquierda","derecha"] + if c == 3: + option.append("izquierda") + + if c == 0: + option = ["derecha"] + elif c == 3: + option = ["izquierda"] + + if c == 0 or c == 3: + if r == 0: + option.append("abajo") + if 0 < r < 3: + option += ["arriba", "abajo"] + if r == 3: + option.append("arriba") + + return option + + +questions_answers = [ + ('Son doce señoras con medias, pero sin zapatos. ¿De quiénes se trata?', 'las horas'), + ('Todos pasan preguntando por mí, pero yo ni paso ni pregunto por nadie.', 'la calle'), + ('Aunque fui por él, no lo traje', 'El camino'), + ('¿Qué se encuentra entre playa y mar?', 'La letra y'), + ('Es blanco como la sal y, aunque se puede abrir, no se cierra.', 'el huevo'), + ('Existe un ser vivo capaz de beber agua con los pies. ¿Cuál es?', 'el arbol'), + ('Es tuyo, pero todos lo usan más', 'el nombre'), + ('Cuando lo nombras ya no estará porque desaparece.', 'el silencio'), + ('¿Qué es lo que se hace de noche, que no se puede hacer de día?', 'trasnochar'), + ('Va siempre en la sopa, pero nunca se come.', 'la cuchara'), + ('Tiene un cuadrado de envase, una base redonda y una porción triangular.', 'una pizza'), + ('Tengo hipo al decir mi nombre, ¿quién soy?', 'el hipopotamo'), + ('De celda en celda voy, pero presa no estoy.', 'la abeja'), + ('Tiene cuello, pero no tiene cabeza. ¿Qué es?', 'la botella'), + ('¿Cuántos meses tienen 28 días?', 'los doce') +] + + +def game(): + + painting_mansion(0,0, False, False, False) + option = input("Desea iniciar el juego. 1.Si 2.No: ") + if option.lower() == "si": + + print("----------------\nVamos a Jugar!!!\n----------------") + + row_init, column_init = 0, 0 + row_candy, column_candy = 3, random.randint(0, 3) + + while option.lower() != "salir": + + painting_mansion(row_init, column_init, True, False, False) + + + option = input(f"Ingrese su siguiente movimiento ({'/'.join(options_move(row_init, column_init))}) o salir para terminar el juego: ") + + if option.lower() == "salir": + print("----------------\nVuelva pronto!!!\n----------------") + break + + + if option.lower() not in options_move(row_init, column_init): + print("El movimiento no es correcto") + else: + number_questions = 1 + + if not (row_init == 0 and column_init == 0): + # Genera un número aleatorio entre 0 y 1 + numero_aleatorio = random.random() + # Define una probabilidad del 10% + probabilidad = 0.1 + + if numero_aleatorio <= probabilidad: + painting_mansion(row_init, column_init, True, False, True) + print("Ha aparecido un fantasma tendras que resolver dos enigmas para poder moverte de cuarto!") + number_questions = 2 + + for i in range(0, number_questions): + + enigma_choose = random.randint(0, len(questions_answers) - 1) + question = questions_answers[enigma_choose][0] + answer = questions_answers[enigma_choose][1] + + win_answer = False + + while not win_answer: + print(f"Tu enigma es: {question}") + answer_user = input("Ingresa la respuesta a tu enigma: ") + if answer_user.lower() == answer.lower(): + print("Correcto, resolviste tu enigma") + win_answer = True + else: + print("Incorrecto, sigue intentando") + + + if option.lower() == "abajo": + row_init += 1 + elif option.lower() == "arriba": + row_init -= 1 + elif option.lower() == "derecha": + column_init += 1 + elif option.lower() == "izquierda": + column_init -= 1 + + if column_init == column_candy and row_init == row_candy: + print("Has salido de la mansión!") + print("----------------\nVuelva pronto!!!\n----------------") + painting_mansion(row_init, column_init, True, True, False) + break + +if __name__ == "__main__": + game() \ No newline at end of file From 392190ea2b0e58f98728d8bd49c1a35163031226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Vidal?= <76066672+VicaDev@users.noreply.github.com> Date: Mon, 23 Oct 2023 18:12:58 +0200 Subject: [PATCH 0396/2103] Reto #0 - Ejercicio FizzBuzz - Kotlin --- .../kotlin/vicadev.kt" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/kotlin/vicadev.kt" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/kotlin/vicadev.kt" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/kotlin/vicadev.kt" new file mode 100644 index 0000000000..c39cfbcd35 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/kotlin/vicadev.kt" @@ -0,0 +1,10 @@ +package com.vicadev.retosprogramacion + +fun main() { + for(i in 1..100) { + if (i % 3 == 0 && i % 5 == 0) println("FizzBuzz") + else if (i % 3 == 0) println("Fizz") + else if (i % 5 == 0) println("Buzz") + else println(i) + } +} \ No newline at end of file From ed12327bcf02313e4dbc967f105384c7c1d7a096 Mon Sep 17 00:00:00 2001 From: jlcontini Date: Mon, 23 Oct 2023 14:59:22 -0300 Subject: [PATCH 0397/2103] Se agrega archivo jlcontini.py en Reto #4 --- .../python/jlcontini.py | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/jlcontini.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/jlcontini.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/jlcontini.py new file mode 100644 index 0000000000..a49f12fa31 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/jlcontini.py @@ -0,0 +1,85 @@ +# Reto #4: PRIMO, FIBONACCI Y PAR +#### Dificultad: Media | Publicación: 23/01/23 | Corrección: 30/01/23 + +## Enunciado + +""" + +``` +/* + * Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. + * Ejemplos: + * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" + * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. + +""" + +# Titulo +print(''.center(70, '*')) +print(' Reto #04 - Primo, Fibonacci y Par '.center(70, '*')) +print(''.center(70, '*')) + + +def check_prime(number) -> bool: + print("check_prime") + + if number in [0, 1]: + return False + + for n in range (2, int(number/2)+1, 1): + if number % n == 0: + return False + + return True + + +def check_fibonacci(number) -> bool: + print("check_fibonacci") + + fibonacci_list = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811] + + if number <= 317811: + return True if number in fibonacci_list else False + else: + num1, num2 = 196418, 317811 + fibonacci_list2 = [] + while num2 <= 300000000: + fibonacci_list2.append(num1) + fibonacci_list2.append(num2) + num1 = num1 + num2 + num2 = num1 + num2 + + return True if number in fibonacci_list2 else False + + +def check_even(number) -> bool: + print("check_even") + return True if number % 2 == 0 else False + + +def check_prime_fibonacci_even(): + + number = int(input("\nEnter a integer number to check: \n")) + + result_prime = "es primo" if check_prime(number) == True else "no es primo" + result_fibonacci = "es fibonacci" if check_fibonacci(number) == True else "no es fibonacci" + result_even = "es par" if check_even(number) == True else "es impar" + + result = f"{number} {result_prime}, {result_fibonacci} y {result_even}." + + print(f"\n{result}\n") + + +def main(): + check_prime_fibonacci_even() + + +if __name__ == "__main__": + main() \ No newline at end of file From ba5e4ba2c318a0049fd6ccb187ecd3976772aec4 Mon Sep 17 00:00:00 2001 From: jlcontini Date: Mon, 23 Oct 2023 15:13:38 -0300 Subject: [PATCH 0398/2103] Correccion archivo Akihiro93.py en Python, Reto #4 linea 45 "print("El numero: ", n_1, " no es fibonacci")" --- .../python/Akihiro93.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/Akihiro93.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/Akihiro93.py index 32ec5fec7a..321392c527 100644 --- a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/Akihiro93.py +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/Akihiro93.py @@ -42,4 +42,4 @@ def Par (n): if lista_de_Fibonacci.count(n_1) == 1: print("El numero: ", n_1, " es fibonacci") else: - print("El numero: ", n_1, " es par") + print("El numero: ", n_1, " no es fibonacci") From 03e11789af93781bcb983feef90e2607eb22551f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Garc=C3=ADa?= Date: Mon, 23 Oct 2023 20:28:07 +0200 Subject: [PATCH 0399/2103] Reto #1 - JavaScript --- .../.DS_Store" | Bin 0 -> 6148 bytes .../javascript/miguelgarglez.js" | 64 ++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/.DS_Store" create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/miguelgarglez.js" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/.DS_Store" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..b6dd49efeba1bd3b553f4ccf61e8e987c0403936 GIT binary patch literal 6148 zcmeHK%}T>S5T0$TO)NqWDjow~3)UZm;w9Aj0!H+pQWIM=8ndNIn?ot&s4wKB_&m<+ zZp6}h@FHSoVD_7xpDg<&>|_Bzv`4)?fI0wJsDvdOhXq1$(m5#^51~-cNZ<~J5W)b` zxomd)MF!~It-&MsFh>3I{(>wS1d$9d{uT_PFiD%ucTp-=R#vN4)v8%H-h<4%)K5oA z+aF%h>|DwyC~QBt2>V&LzHuVs)DPqSP!)u|KBin>hH+13Z8?g2iK_KY znhodhpfznclh(enkET=G+T7VaKI=Y3&#`>bbPD|Pl&l*p;1!L9I~#k$IFj)_#*5mb zhLIUy2AF~6V8EPyR&6=9%e!O-n1LTKK<9&lO6VHQHL9Zn2l{=ac!iJzZMsVkItE>X zxkikj2wjS(ONF^&2wjeT$K<&NbB($jgjyM&V^$XCh9cDJ=yy~)2v;MI%m6bm%RpIA z>(u{GzrX*_7V(T3U8*2{qh9Nv-lCFFUas-81P#@SF_&8LHmVZz YJ7gfb26K(*LE#?(MFS7az^^j!0W(-ljQ{`u literal 0 HcmV?d00001 diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/miguelgarglez.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/miguelgarglez.js" new file mode 100644 index 0000000000..17abae0f83 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/miguelgarglez.js" @@ -0,0 +1,64 @@ +/* + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + */ +const readline = require('readline'); + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +const sustitucionesLeet = { + ' ': ' ', + 'a': '4', + 'b': '|3', + 'c': '[', + 'd': ')', + 'e': '3', + 'f': '|=', + 'g': '&', + 'h': '#', + 'i': '1', + 'j': ',_|', + 'k': '>|', + 'l': '1', + 'm': '/\\/\\', + 'n': '^/', + 'o': '0', + 'p': '|*', + 'q': '(_,)', + 'r': '|2', + 's': '5', + 't': '7', + 'u': '(_)', + 'v': '\\/', + 'w': '\\/\\/', + 'x': '><', + 'y': 'j', + 'z': '2' + }; + +function transformacion(texto) { + let resultado = '' + for (caracter of texto) { + if(caracter in sustitucionesLeet){ + //console.log('La sustitución para el caracter ' + caracter + ' es: ' + sustitucionesLeet[caracter]) + resultado += sustitucionesLeet[caracter] + } else { + //console.log('No se ha encontrado el caracter ' + caracter + 'en el diccionario de traducción') + } + } + return resultado +} + +rl.question('Introduce el texto a transformar: ', (userInput) => { + let textoLeet = transformacion(userInput) + console.log('La transformación resultante es: \n' + textoLeet); + rl.close(); +}); + From f4f2930a5942e06871299c2f237c54f9da2763e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Garc=C3=ADa?= Date: Mon, 23 Oct 2023 20:30:03 +0200 Subject: [PATCH 0400/2103] Reto #1 - JavaScript --- .../.DS_Store" | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/.DS_Store" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/.DS_Store" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/.DS_Store" deleted file mode 100644 index b6dd49efeba1bd3b553f4ccf61e8e987c0403936..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%}T>S5T0$TO)NqWDjow~3)UZm;w9Aj0!H+pQWIM=8ndNIn?ot&s4wKB_&m<+ zZp6}h@FHSoVD_7xpDg<&>|_Bzv`4)?fI0wJsDvdOhXq1$(m5#^51~-cNZ<~J5W)b` zxomd)MF!~It-&MsFh>3I{(>wS1d$9d{uT_PFiD%ucTp-=R#vN4)v8%H-h<4%)K5oA z+aF%h>|DwyC~QBt2>V&LzHuVs)DPqSP!)u|KBin>hH+13Z8?g2iK_KY znhodhpfznclh(enkET=G+T7VaKI=Y3&#`>bbPD|Pl&l*p;1!L9I~#k$IFj)_#*5mb zhLIUy2AF~6V8EPyR&6=9%e!O-n1LTKK<9&lO6VHQHL9Zn2l{=ac!iJzZMsVkItE>X zxkikj2wjS(ONF^&2wjeT$K<&NbB($jgjyM&V^$XCh9cDJ=yy~)2v;MI%m6bm%RpIA z>(u{GzrX*_7V(T3U8*2{qh9Nv-lCFFUas-81P#@SF_&8LHmVZz YJ7gfb26K(*LE#?(MFS7az^^j!0W(-ljQ{`u From 0275e6253a069fd50358a791ed93262e804f4852 Mon Sep 17 00:00:00 2001 From: Gabi Date: Mon, 23 Oct 2023 21:55:27 +0200 Subject: [PATCH 0401/2103] Create icedrek.py --- .../python/icedrek.py" | 196 ++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/icedrek.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/icedrek.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/icedrek.py" new file mode 100644 index 0000000000..ce6b4c7d3e --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/icedrek.py" @@ -0,0 +1,196 @@ +""" + * Este es un reto especial por Halloween. + * Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces. + * + * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. + * (Tienes total libertad para ser creativo con los textos) + * + * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 + * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. + * (16 habitaciones, siendo una de entrada y otra donde están los dulces) + * Esta podría ser una representación: + * 🚪⬜️⬜️⬜️ + * ⬜️👻⬜️⬜️ + * ⬜️⬜️⬜️👻 + * ⬜️⬜️🍭⬜️ + * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. + * Si no lo aciertas no podrás desplazarte. + * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. + * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) + * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. + * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y + * tengas que responder dos preguntas para salir de ella. + * - ✔ +""" +import random +import os + + +class App: + def __init__(self): + self.casa = [["⬜️"] * 4 for _ in range(4)] + self.salir = False + self.contador_fantasma = 0 + + print("BIENVENIDO A LA CASA ENCANTADA!") + print("-------------------------------") + print("Para salir debes encontrar la habitación de los dulces.") + print("En cada habitación se te planteará una pregunta,") + print("que tendrás que acertar para pasar a la siguiente habitación.") + print("pero ten cuidado, si encuentras un fantasma, ") + print("te hará una pregunta extra y tendrás que acertarla para derrotarlo.\n") + + (self.entrada, self.salida) = self.obtener_entrada_salida() + self.posicion = self.entrada + self.actualizar_matriz(1) + self.pinta() + self.jugar() + + + def obtener_entrada_salida(self): + entrada = [random.choice([0, 3]), random.randint(0, 3)] + + while True: + salida = [random.choice([0, 3]), random.randint(0, 3)] + if salida != entrada: + return entrada, salida + + + def actualizar_matriz(self, opcion): + casa = self.casa + x, y = self.posicion + + match opcion: + case 0: + casa[x][y] = "⬜️" + case 1: + casa[x][y] = "🚪" + case 2: + casa[x][y] = "❓" + case 3: + casa[x][y] = "✅" + case 4: + casa[x][y] = "👻" + case 9: + casa[x][y] = "🍭" + + def obtener_movimientos(self): + x, y = self.posicion + opciones = [] + + if x > 0: + opciones.append("N") + if x < 3: + opciones.append("S") + if y > 0: + opciones.append("W") + if y < 3: + opciones.append("E") + + return opciones + + def pinta(self): + for _ in self.casa: + print(" ".join(_)) + + def borrar_pantalla(self): + os.system ("clear") if os.name == "posix" else os.system ("cls") + + + def preguntar_desplazamiento(self): + opciones = self.obtener_movimientos() + + while True: + print("Puedes moverte hacia: ") + self.pinta_movimientos(opciones) + opcion = input(f"Hacia donde quieres ir? ").upper() + + if opcion in opciones: + return opcion + + print("La dirección no es válida.") + + def desplazamiento(self): + opcion = self.preguntar_desplazamiento() + + x, y = self.posicion + match opcion: + case "N": + x -= 1 + case "S": + x += 1 + case "E": + y += 1 + case "W": + y -= 1 + + self.posicion = [x, y] + + if self.posicion == self.salida: + self.salir = True + print("Encontraste la salida!!!") + + def pregunta(self): + respuesta = input("pon OK: ") + + return respuesta.upper() == "OK" + + def pinta_movimientos(self, opciones): + for opcion in opciones: + match opcion: + case "N": + print("N = Norte") + case "S": + print("S = Sur") + case "E": + print("E = Este") + case "W": + print("W = Oeste") + + def obtener_tipo_habitacion(self): + x, y = self.posicion + + if self.posicion == self.salida: + return 9 + + if self.casa[x][y] in ("🚪", "✅"): + print("Por aqui ya has pasado!!!") + return 1 if self.casa[x][y] == "🚪" else 3 + + probabilidadFantasma = random.randint(0, 10) + + if self.contador_fantasma < 2 and probabilidadFantasma > 8: + self.contador_fantasma += 1 + return 4 + + return 2 + + def jugar(self): + while not self.salir: + self.desplazamiento() + tipo_habitacion = self.obtener_tipo_habitacion() + self.actualizar_matriz(tipo_habitacion) + self.borrar_pantalla() + self.pinta() + + + if tipo_habitacion == 2: + respuesta = self.pregunta() + + if respuesta: + self.actualizar_matriz(3) + + elif tipo_habitacion == 4: + respuesta = self.pregunta() + + if respuesta: + respuesta = self.pregunta() + + if respuesta: + self.actualizar_matriz(3) + + +if __name__ == "__main__": + App() From b88f2de658e66513b4c9e71be1af6396a9e51beb Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 23 Oct 2023 22:06:01 +0200 Subject: [PATCH 0402/2103] =?UTF-8?q?Correcci=C3=B3n=20Reto=20#41?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +- .../python/mouredev.py" | 127 ++++++++++++++++++ .../ejercicio.md" | 21 +++ 3 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mouredev.py" create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/ejercicio.md" diff --git a/README.md b/README.md index 8015356124..f15526bdba 100644 --- a/README.md +++ b/README.md @@ -58,9 +58,10 @@ Aquí encontrarás el listado de retos, su fecha de publicación, dificultad y e * **#38** - 25/09/23 | Media | [`LAS SUMAS`](./Retos/Reto%20%2338%20-%20LAS%20SUMAS%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2338%20-%20LAS%20SUMAS%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2338%20-%20LAS%20SUMAS%20%5BMedia%5D/)] * **#39** - 02/10/23 | Media | [`TRIPLES PITAGÓRICOS`](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/)] * **#40** - 09/10/23 | Fácil | [`TABLA DE MULTIPLICAR`](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/)] -* **#41** - 16/10/23 | Difícil | [`LA CASA ENCANTADA`](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/ejercicio.md) | Último reto publicado +* **#41** - 16/10/23 | Difícil | [`LA CASA ENCANTADA`](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/)] +* **#42** - 23/10/23 | Media | [`PUNTO DE ENCUENTRO`](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/ejercicio.md) | Último reto publicado -> **Corrección y Publicación próximo reto - 23/10/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1163426241689427998) en [Twitch](https://twitch.tv/mouredev)** +> **Corrección y Publicación próximo reto - 30/10/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1165944540453150741) en [Twitch](https://twitch.tv/mouredev)** *Puedes ejecutar el archivo [language_stats.py](./Retos/language_stats.py) para visualizar las estadísticas de uso de cada lenguaje.* diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mouredev.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mouredev.py" new file mode 100644 index 0000000000..14d8b176df --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mouredev.py" @@ -0,0 +1,127 @@ +import random + +def create_house() -> (list, list): + + house = [list(["⬜️"] * 4) for _ in range(4)] + + if random.choice([True, False]): + # Columnas perímetro + door = [random.randint(0, 3), random.choice([0, 3])] + else: + # Filas perímetro + door = [random.choice([0, 3]), random.randint(0, 3)] + + house[door[0]][door[1]] = "🚪" + + def generate_candy(door: list) -> list: + candy = [random.randint(0, 3), random.randint(0, 3)] + if candy[0] == door[0] and candy[1] == door[1]: + return generate_candy(door) + return candy + + candy = generate_candy(door) + + house[candy[0]][candy[1]] = "🍭" + + for row in house: + print("".join(map(str, row))) + + return house, door + +def move(position: list) -> list: + + row, col = position[0], position[1] + + movements = "N S E O " + + if row == 0: movements = movements.replace("N ", "") + if row == 3: movements = movements.replace("S ", "") + if col == 0: movements = movements.replace("O ", "") + if col == 3: movements = movements.replace("E ", "") + + movement = input(f"¿Hacia dónde te quieres desplazar [ {movements}]?: ").upper() + + if movement in movements: + if movement == "N": position = [row - 1, col] + elif movement == "S": position = [row + 1, col] + elif movement == "E": position = [row, col + 1] + elif movement == "O": position = [row, col - 1] + + return position + else: + print("Desplazamiento incorrecto. Selecciona una de las opciones válidas.") + return move(position) + +def riddle(): + + riddles = [ + ("¿Qué lenguaje de programación fue creado por Guido van Rossum?", "Python"), + ("¿Cuál es el sistema operativo de código abierto más popular?", "Linux"), + ("¿Qué compañía desarrolló el sistema operativo Windows?", "Microsoft"), + ("¿Qué lenguaje de programación se utiliza principalmente para el desarrollo web del lado del cliente?", "JavaScript"), + ("¿Cuál es el protocolo estándar para enviar correos electrónicos?", "SMTP"), + ("¿Qué significa HTML?", "HyperText Markup Language"), + ("¿Cuál es la base de datos relacional de código abierto más popular?", "MySQL"), + ("¿Qué significa URL?", "Uniform Resource Locator"), + ("¿Qué compañía desarrolló el lenguaje de programación Java?", "Sun"), + ("¿Qué estructura de datos es LIFO?", "Pila"), + ("¿Qué lenguaje de programación fue diseñado por Bjarne Stroustrup?", "C++"), + ("¿Qué significa HTTP?", "HyperText Transfer Protocol"), + ("¿Qué significa SQL?", "Structured Query Language"), + ("¿Cuál es el lenguaje de hojas de estilo utilizado en la web?", "CSS"), + ("¿Qué significa API?", "Application Programming Interface"), + ("¿Qué estructura de datos es FIFO?", "Cola"), + ("¿Cuál es el lenguaje de programación más antiguo aún en uso?", "Fortran"), + ("¿Qué significa IDE?", "Integrated Development Environment"), + ("¿Qué compañía es la creadora del sistema operativo macOS?", "Apple"), + ("¿Qué lenguaje se utiliza comúnmente para el desarrollo de aplicaciones Android?", "Kotlin") + ] + + current_riddle = riddles[random.randint(0, len(riddles) - 1)] + + while True: + answer = input(f"{current_riddle[0]}: ") + + if answer.lower() == current_riddle[1].lower(): + print("Respuesta correcta!\n") + return + else: + print("Respuesta incorrecta!\n") + +house, door = create_house() + +position = door +print(f"Posición inicial: {position}") + +print(""" +👻 BoooOOOoOoo! +Si quieres encontrar los dulces 🍭 de la casa encantada 🏰 +tendrás que buscarlos a través de sus habitaciones. +Pero recuerda, no podrás moverte si antes no respondes +correctamente a su enigma. +""") + +while True: + + position = move(position) + print(f"Posición: {position}\n") + + house_room = house[position[0]][position[1]] + + if house_room == "⬜️": + + print("Responde correctamente a esta pregunta.") + riddle() + + ghost = random.randint(1, 10) == 1 + if ghost: + print("👻 BoooOOOoOoo! Para salir de esta habitación deberás responder otra pregunta más.") + riddle() + + elif house_room == "🍭": + print(""" +👻 BoooOOOoOoo! +Has encontrado los dulces 🍭 y escapado de la casa encantada 🏰 +Feliz Halloween! 🎃 + """) + break \ No newline at end of file diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/ejercicio.md" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/ejercicio.md" new file mode 100644 index 0000000000..e9955608c1 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/ejercicio.md" @@ -0,0 +1,21 @@ +# Reto #42: Punto de encuentro +#### Dificultad: Difícil | Publicación: 23/10/23 | Corrección: 30/10/23 + +## Enunciado + +``` +/* + * Crea una función que calcule el punto de encuentro de dos objetos en movimiento + * en dos dimensiones. + * - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento + * (vector de desplazamiento) por unidad de tiempo (también en formato xy). + * - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. + * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. + * - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file From 81b0f361e39b472feb5c985daddae15c0837aa6d Mon Sep 17 00:00:00 2001 From: alvarocampossanchez14 Date: Mon, 23 Oct 2023 23:33:14 +0200 Subject: [PATCH 0403/2103] Reto #42 - Python --- .../python/alvarocampossanchez14.py" | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/alvarocampossanchez14.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/alvarocampossanchez14.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/alvarocampossanchez14.py" new file mode 100644 index 0000000000..74130fc8b0 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/alvarocampossanchez14.py" @@ -0,0 +1,51 @@ +import matplotlib.pyplot as plt +import time + + +def calcular_punto_encuentro(): + objeto1 = { + 'x': float(input("Ingrese la coordenada x del primer objeto: ")), + 'y': float(input("Ingrese la coordenada y del primer objeto: ")), + 'velocidadX': float(input("Ingrese la velocidad en la dirección x del primer objeto: ")), + 'velocidadY': float(input("Ingrese la velocidad en la dirección y del primer objeto: ")), + } + + objeto2 = { + 'x': float(input("Ingrese la coordenada x del segundo objeto: ")), + 'y': float(input("Ingrese la coordenada y del segundo objeto: ")), + 'velocidadX': float(input("Ingrese la velocidad en la dirección x del segundo objeto: ")), + 'velocidadY': float(input("Ingrese la velocidad en la dirección y del segundo objeto: ")), + } + + + dx = objeto2['x'] - objeto1['x'] + dy = objeto2['y'] - objeto1['y'] + + dvx = objeto2['velocidadX'] - objeto1['velocidadX'] + dvy = objeto2['velocidadY'] - objeto1['velocidadY'] + + t = (dx * dvx + dy * dvy) / (dvx * dvx + dvy * dvy) + + if t >= 0: + punto_encuentro_x = objeto1['x'] + objeto1['velocidadX'] * t + punto_encuentro_y = objeto1['y'] + objeto1['velocidadY'] * t + + print(f"Los objetos se encuentran en ({punto_encuentro_x}, {punto_encuentro_y}) en t = {t} unidades de tiempo. \n") + + print("Abriendo dibujo del punto de encuentro entre dos objetos en movimiento") + time.sleep(2) + + plt.axhline(0, color='black', linewidth=0.5) + plt.axvline(0, color='black', linewidth=0.5) + plt.scatter(punto_encuentro_x, punto_encuentro_y, color='red', label='Punto de encuentro') + plt.legend() + plt.xlabel('Eje X') + plt.ylabel('Eje Y') + plt.title('Punto de Encuentro de Objetos en Movimiento') + plt.grid(True) + plt.show() + else: + print("Los objetos no se encuentran en ningún punto.") + + +calcular_punto_encuentro() From b5340705a53ca71c116912cd99dfc68e62af8320 Mon Sep 17 00:00:00 2001 From: Jamer Rebolledo Date: Mon, 23 Oct 2023 17:31:09 -0500 Subject: [PATCH 0404/2103] =?UTF-8?q?=F0=9F=8F=BA=20Soluci=C3=B3n=20Reto?= =?UTF-8?q?=2042,=20Python-Jupyter=20by=20@jamerrq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/jamerrq.ipynb" | 453 ++++++++++++++++++ 1 file changed, 453 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/jamerrq.ipynb" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/jamerrq.ipynb" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/jamerrq.ipynb" new file mode 100644 index 0000000000..77efd553e0 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/jamerrq.ipynb" @@ -0,0 +1,453 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Enunciado\n", + "\n", + "Crea una función que calcule el punto de encuentro de dos objetos en movimiento\n", + "en dos dimensiones" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import math\n", + "%matplotlib inline\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "class Objeto:\n", + "\n", + " def __init__(self, x_coor, y_coor, velocity):\n", + " \"\"\"\n", + " x_coor: coordenada x inicial\n", + " y_coor: coordenada y inicial\n", + " velocity: velocidad del objeto para 1 unidad de tiempo ([vx, vy])\n", + " \"\"\"\n", + " self.x = x_coor\n", + " self.y = y_coor\n", + " self.v = velocity\n", + " self.steps = [[self.x, self.y]]\n", + "\n", + " def mover(self, delta_t):\n", + " for i in range(delta_t):\n", + " self.steps.append([self.x + self.v[0] * i, self.y + self.v[1] * i])\n", + "\n", + " def mostrar_trayectoria(self, title):\n", + "\n", + " _, ax = plt.subplots()\n", + " ax.set(xlabel='x', ylabel='y', title=title)\n", + " ax.grid()\n", + " ax.plot([x[0] for x in self.steps], [x[1] for x in self.steps])\n", + "\n", + " if self.v[0] > 0:\n", + " ax.plot([x[0] for x in self.steps], [x[1] for x in self.steps], 'r')\n", + "\n", + " # Añadimos texto al punto de origen (🌟)\n", + " delta_x = 0.1 * self.v[0]\n", + " delta_y = 0.1 * self.v[1]\n", + " x_pos = self.x + delta_x\n", + " y_pos = self.y + delta_y\n", + " ax.text(x_pos, y_pos, '٭', fontsize=25, color='green')\n", + " # plt.show()\n", + "\n", + " def limpiar_pasos(self):\n", + " self.steps = [[self.x, self.y]]\n", + "\n", + " def calcular_ecuacion(self):\n", + " m = self.v[1] / self.v[0]\n", + " b = self.y - m * self.x\n", + " return m, b\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Algunos ejemplos" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(-1.0, 5.0)\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x1 = 0\n", + "y1 = 5\n", + "v1 = [1, -1]\n", + "obj = Objeto(x1, y1, v1)\n", + "obj.mover(10)\n", + "\n", + "title=\"Trayectoria primer objeto después de 10 unidades de tiempo\"\n", + "obj.mostrar_trayectoria(title=title)\n", + "print(obj.calcular_ecuacion());\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1.0, 0.0)\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x2 = 0\n", + "y2 = 0\n", + "v2 = [1, 1]\n", + "\n", + "obj2 = Objeto(x2, y2, v2)\n", + "obj2.mover(10)\n", + "title=\"Trayectoria segundo objeto después de 10 unidades de tiempo\"\n", + "obj2.mostrar_trayectoria(title=title)\n", + "print(obj2.calcular_ecuacion());\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En una sola gráfica" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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LIOA3avpXaZVsJpQ06pVK+bPn09MTAzVq1dn9+7dbNy4Mf8uP7Z1shwxyQWz2UxScjKuLi4Y8mLqaVunXC1WtWpVNE1j//799OjRI9vzBw8epFSpUri7u99zO1oO9/4wm82UL1+e8PDwbM+5ubnluD2l1F23mVP77eLi4ggMDKR58+YsWLDgnssKIYQ1UwpCQmDMu2aioltg1DIAMGO0LPDU1xBUVccKrY/VhJq3336bxMREatSogdFoxGQy8dFHH9G7d+8c10lNTSU1NTXzcVKS5c6k6enppKenZ1k2PT0dpRRms/l/43Rsso5TyYlSCmxNKFsnzHlxczClcjWuplSpUnTs2JG5c+cyfPjwLONqzp07x/fff0+/fv1QSmUetdmyZUuWcUhbtmzhsccey9J2az/4+/tz7tw5DAYDvr6+2V7fbDZja2uLyWTKsn6NGjU4deoUJ0+ezDxas3//fhITE7O91u3OnDlDhw4daNCgAV999VXma+TEbDajlCI9PR2j0ZjluVv9e2c/C31IfxQu0h/6W7tWY+x7ZqKi7TBqlr9fJpX1JznDzUf66Kbc7gerCTXLly/nu+++Y+nSpdSuXZtdu3YxYsQIvLy8eP755++6zuTJk5k4cWK29pCQEJycsh4NuTUu5OrVqw89N0pycvJDrfcoJk+eTHBwMJ06dWLMmDH4+Phw8OBB3n//fcqXL8/bb7+dGebMZjObNm3iww8/pFu3boSFhfHzzz+zfPnyLMvcuHGDpKQkmjRpQuPGjenevTsTJkygWrVqnD17ltDQULp160ZAQAAeHh4cP36cTZs24eXlhbOzM02aNKF27dr07t2byZMnk5GRwRtvvEHLli2pXr165mvd7uzZszz++ONUrFiR999/n2PHjmU+V65cubu+97S0NK5fv05ERAQZGRl3XSanQdBCH9IfhYv0hz5sM5IZNrQdR89VBLKHmVs2btzE2bOJBVlaoZWSkpKr5TSlcnmpjc68vb155513GDJkSGbbpEmT+O677zh48OBd17nbkRpvb28uXLiAq6trlmVv3LhBbGwsvr6+ODg82CyMSimSk5NxcXG57+mV/HDy5EkmTpzI6tWruXjxIp6ennTv3p33338/y3gYPz8/XnjhBfbt28fff/+Ni4sL77zzDsOGDcuyzPDhwzMHXycnJzN27FhWrFhBQkICnp6e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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.set(xlabel='x', ylabel='y', title=\"Trayectoria de los dos objetos\")\n", + "ax.grid()\n", + "ax.plot([x[0] for x in obj.steps], [x[1] for x in obj.steps], label=\"Objeto 1\")\n", + "if obj.v[0] > 0:\n", + " ax.plot([x[0] for x in obj.steps], [x[1] for x in obj.steps], 'r')\n", + "ax.plot([x[0] for x in obj2.steps], [x[1] for x in obj2.steps], label=\"Objeto 2\")\n", + "if obj2.v[0] > 0:\n", + " ax.plot([x[0] for x in obj2.steps], [x[1] for x in obj2.steps], 'b')\n", + "ax.legend()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vamos con la función:\n", + "\n", + "- La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def calcular_punto_encuentro(x1, y1, v1, x2, y2, v2):\n", + "\n", + " # Creamos los objetos\n", + " obj1 = Objeto(x1, y1, v1)\n", + " obj2 = Objeto(x2, y2, v2)\n", + "\n", + " # Obtenemos las ecuaciones de las rectas\n", + " m1, b1 = obj1.calcular_ecuacion()\n", + " m2, b2 = obj2.calcular_ecuacion()\n", + "\n", + " # print('m1:', m1, 'b1:', b1)\n", + " # print('m2:', m2, 'b2:', b2)\n", + "\n", + " print(f'y1 = {m1} * x1 + {b1}')\n", + " print(f'y2 = {m2} * x2 + {b2}')\n", + "\n", + " # Calculamos el punto de encuentro\n", + "\n", + " # Si las pendientes son iguales, o son la misma recta\n", + " # (siempre se encuentran) o nunca se encuentran\n", + " if m1 == m2:\n", + " if b1 == b2:\n", + " print(\"Las rectas son la misma!\")\n", + " else:\n", + " print(\"Las rectas nunca se encuentran (son paralelas)\")\n", + " return\n", + "\n", + " # (Resolvemos el sistema de ecuaciones)\n", + " x = (b2 - b1) / (m1 - m2)\n", + " y = m1 * x + b1\n", + "\n", + " # Mostramos el resultado\n", + " # print(f\"Posible punto de encuentro en: ({x}, {y})\")\n", + "\n", + " # Calculamos el tiempo de encuentro para cada objeto\n", + " # para comprobar que hay una colisión\n", + " t1 = (x - x1) / v1[0]\n", + " t2 = (x - x2) / v2[0]\n", + "\n", + " # Función auxiliar para graficar los objetos\n", + " def graficar_trayectoria():\n", + " fig, ax = plt.subplots()\n", + " ax.set(xlabel='x', ylabel='y', title=f'Colisión en ({x}, {y})')\n", + " ax.grid()\n", + " ax.plot([x[0] for x in obj1.steps], [x[1] for x in obj1.steps], label=\"Objeto 1\")\n", + " if obj1.v[0] > 0:\n", + " ax.plot([x[0] for x in obj1.steps], [x[1] for x in obj1.steps], 'r')\n", + " ax.plot([x[0] for x in obj2.steps], [x[1] for x in obj2.steps], label=\"Objeto 2\")\n", + " if obj2.v[0] > 0:\n", + " ax.plot([x[0] for x in obj2.steps], [x[1] for x in obj2.steps], 'b')\n", + " # Colocamos el punto de encuentro\n", + " ax.plot(x, y, 'go', label=\"Punto de encuentro\")\n", + " ax.text(x, y, '¶', fontsize=25, color='green')\n", + " ax.legend()\n", + " plt.show()\n", + "\n", + " # Si los tiempos son iguales, hay colisión\n", + " if t1 == t2:\n", + " if t1:\n", + " print(f\"Tiempo de encuentro: {t1}\")\n", + " else:\n", + " print(\"Hay colisión en el punto de origen\")\n", + " # Mostramos la trayectoria de los objetos\n", + " obj1.mover(math.ceil(t1) + 1)\n", + " obj2.mover(math.ceil(t2) + 1)\n", + " graficar_trayectoria()\n", + "\n", + " else:\n", + " # print(f't1: {t1}, t2: {t2}')\n", + " print(\"No hay colisión\")\n", + "\n", + " # print(f\"El tiempo de encuentro es: {distancia}\")\n", + "\n", + " return\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ejemplo #1 (colisión)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y1 = -1.0 * x1 + 6.0\n", + "y2 = 1.0 * x2 + 0.0\n", + "Tiempo de encuentro: 3.0\n" + ] + }, + { + "data": { + "image/png": "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/Prrr5w5c6ZcDcHBwdxwww3larBYLIwcObJMW1hYGEePHr3ofpYvX05hYSETJ06ksLCw5I+zszP9+vUr9y/8y90PQHJyMj4+PhdcPnnyZDZv3szixYu59957eeihh3jjjTcuud3zdV3Osku5++672bx5M8uXL+epp57in//8Z5kLgaurJgcHB7y8vKp1mErkatCsH5FqcH7K6uHDhyu1/rFjxwAqnIETEBBQqS/l33r22WdxdXXls88+47///S92dnb07duX1157je7du19WDStXrizT5uLigrOzc5k2Jycnzp49e9Ha0tLSAOjRo0eFy63Wsv9eutz9AJw5c6bce3+refPmNG/eHIARI0YAtr676667aNas2QXf17Rp05L++q3z082bNGlyydouxM/PDz8/PwCGDBlC48aNeeaZZ7j33nvp1q1btdbk7OzMmTNnLrtWETPojIpINbCzs2PgwIFER0dX6mLYpk2bApCSklJuWXJyMt7e3lXav729PY899hgxMTEcP36cL7/8koSEBIYOHUpubu5VqeFCzm9n3rx5bN68udyf31/0eaX7qsq9anr27ElhYSGHDh266HpdunRh586d5drPt3Xu3LlqhV6iJoB9+/Zdsqa4uLhy91y5WE0nTpyotp+ryNWioCJSTZ599lkMw+DPf/4z+fn55ZYXFBTw3XffAXDDDTcAlLvh2ObNm4mLi2PgwIGXXYeXlxdjx47lwQcf5Pjx4xe8wVvv3r1p1KhRuRoSExP58ccfr6iG3xo6dCj29vYcPHiQ7t27V/inunTo0IGDBw9Wev3Vq1djtVpp1arVRde75ZZb2LNnT5lQVVhYyGeffUavXr0ICAi47JorqgmgTZs2l6zp1KlTREVFlWn/5JNPCAgIoFevXmXak5OTOXv27AUvNBaprTT0I1JNevfuzaxZs3jggQeIjIzkb3/7G506daKgoICtW7fywQcf0LlzZ0aOHEn79u25//77+c9//oPVamX48OEcOXKE559/nuDgYB599NEq7XvkyJF07tyZ7t2706xZM44ePcpbb71FSEgIbdu2rfA9Xl5ePP/880yePJmJEydy++23c+zYMV544QWcnZ2ZOnVqdXQLLVq04MUXX2TKlCkcOnSIYcOG0bhxY9LS0ti0aROurq688MIL1bKv/v378+KLL5Kbm4uLi0tJ+/3334+Hhwc9e/bE19eXzMxMvvnmG+bOncuTTz5ZZtjnvvvu45NPPuHgwYOEhIQAcO+99/Lee+8xbtw4Xn31VXx8fJg5cyZ79+5l1apVZWqYNm0aL7zwAqtXr6Z///4XrHXq1KmkpaXRt29fAgMDOXnyJMuWLeP//u//GDduHJGRkSXrvvjii7z44ov88MMPJTeXGz58eMlN3LKzs2nTpg1ffvkly5Yt47PPPis3vXnDhg0ADBgw4PI6V8QsZl/NK1LfbNu2zbjrrruM5s2bG46Ojoarq6vRrVs34x//+IeRnp5esl5RUZHx2muvGe3atTMcHBwMb29v449//KORkJBQZnuVmfXz5ptvGn369DG8vb0NR0dHo3nz5sZ9991nHDlypGSd38/6Oe/DDz80wsLCDEdHR8PT09MYNWqUsXv37nI1uLq6lvusU6dONSr7a2ThwoXGgAEDDA8PD8PJyckICQkxxo4da6xatara9nPgwAHDYrGUmzX08ccfG9dff73h7e1t2NvbG15eXka/fv2MTz/9tNw2zs88+n0/paamGhMnTjSaNGliODs7G9dcc42xcuXKcu9//PHHDYvFYsTFxV201m+//dYYNGiQ4evra9jb2xtubm5Gz549jXfeeccoKCio8POvXr26THtOTo7x97//3fDz8zMcHR2NsLAw48svv6xwf3feeafRpUuXi9YkUhtZDMMwTE1KIiLVaOTIkRQWFrJ06VJT9t+zZ09CQkL45ptvTNl/RbKzswkICODf//43f/7zn80uR6RKFFREpF7ZtWsX3bp1Y/369RecaVRTsrOzadasGdu2bSM0NPSq7vtiXnjhBebOncuOHTsqdSdekdpER6yI1CudO3dm9uzZpKamXvV9e3h4VPqRAleTh4cHc+bMUUiROklnVERERKTW0vRkERERqbUUVERERKTWqtMDlsXFxSQnJ+Pu7n5Fz9oQERGRq8cwDHJycggICCj3GI3fq9NBJTk5meDgYLPLEBERkcuQkJBAUFDQRdep00HF3d0dsH1QDw+Pat12QUEBK1asYMiQITg4OFTrtusb9VXlqa8qT31VeeqrylNfVU1N9Vd2djbBwcEl3+MXU6eDyvnhHg8PjxoJKi4uLnh4eOhgvgT1VeWprypPfVV56qvKU19VTU33V2Uu29DFtCIiIlJrKaiIiIhIraWgIiIiIrVWnb5G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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x1 = 0; y1 = 6; v1 = [1, -1]\n", + "x2 = 0; y2 = 0; v2 = [1, 1]\n", + "calcular_punto_encuentro(x1, y1, v1, x2, y2, v2)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ejemplo #2 (misma recta)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y1 = 1.0 * x1 + 0.0\n", + "y2 = 1.0 * x2 + 0.0\n", + "Las rectas son la misma!\n" + ] + } + ], + "source": [ + "x3 = 0; y3 = 0; v3 = [1, 1]\n", + "x4 = 0; y4 = 0; v4 = [1, 1]\n", + "\n", + "calcular_punto_encuentro(x3, y3, v3, x4, y4, v4)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ejemplo #3 (colisión en el punto de partida)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y1 = 1.0 * x1 + 0.0\n", + "y2 = 2.0 * x2 + 0.0\n", + "Hay colisión en el punto de origen\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHFCAYAAADi7703AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABJXUlEQVR4nO3deVxV5d7///eWUURwFlAUtVTUvDVtwL6mliDaoE2amkM5VNbJoeHWJtHKymNGZunR43SqY3ac6r6Px6By6CjOQ6bUScMhBecAQ2ED1+8Pb/bP7d4sQWFv0dfz8eCPfa3rWuu6Pmzj3Vprr20zxhgBAADArUrengAAAMDVjLAEAABggbAEAABggbAEAABggbAEAABggbAEAABggbAEAABggbAEAABggbAEAABggbAEwOumTZumkJAQ7dixw9tTAQAXhCXgGvHDDz/o8ccfV6NGjRQYGKjg4GDdfPPNmjx5sk6dOlXq/Q0ePFhRUVFObVFRURo8eHCp9jN//nzZbDbt37/f7fZNmzbp5Zdf1pIlS9SmTZtSz/NqYbfb1bx5c73zzjsl7j9hwgRFRUUpICBAzZs314cfflji4505c0ajRo1SRESEAgMD1aZNG33++eeXO32HDz/8UM2bN1dAQIAaNWqkCRMmyG63l2hsSdc0YMAA9erV64rnCniMAVDhzZo1y/j6+pqWLVuajz76yKxatcokJSWZSZMmmUaNGplevXqVep+DBg0yDRs2dGrbtm2b2bt3b6n2c+zYMZOSkmLOnTvnsu3kyZMmKirKLFiwoNTzu9okJiaaOnXqmDNnzpSo/9ChQ01AQICZPHmyWbVqlRk7dqyx2WzmrbfeKtH42NhYU61aNTNz5kzz3XffmaFDhxpJ5rPPPrvsNbz55pvGZrOZcePGmVWrVpnJkycbf39/M2zYsDJd0969e42vr6/59ttvL3uugCcRloAKbv369cbHx8fEx8e7DSS5ubnmyy+/LPV+3YUluGe32029evXM2LFjS9T/xx9/NDabzUyaNMmpfdiwYaZy5crm5MmTluP/+c9/Gknm73//u1N7bGysiYiIMPn5+aVbgDHmxIkTJjAw0AwfPtyp/a233jI2m83s3r3bcnxp13Tvvfea2NjYUs8T8AYuwwEV3KRJk2Sz2TRr1iwFBAS4bPf399f999/veF1YWKjJkyc7LrXUqVNHAwcO1G+//XbJY118Ga6wsFBvvvmmmjVrpsqVK6tatWpq3bq1PvjgA0ef4i7DzZ07V//1X/+lwMBA1ahRQw888IBSU1Od+gwePFjBwcHau3evevTooeDgYEVGRur5559Xbm5uieqzaNEixcTEqEqVKgoODla3bt20ffv2Mj3OV199pcOHD2vAgAElmtPy5ctljNHjjz/u1P7444/r7NmzWrlypeX4ZcuWKTg4WI888ojL+CNHjmjjxo0lmseFVq5cqXPnzrmdkzFGy5cvtxxf2jUNGDBA33zzjfbt21fquQKeRlgCKrCCggJ99913ateunSIjI0s05umnn9Z///d/KzY2Vl999ZXeeOMNrVy5Uh06dNCJEydKdfzJkycrISFBffv21T//+U8tWrRIQ4YM0e+//2457u2339aQIUPUsmVLLV26VB988IF++OEHxcTE6JdffnHqa7fbdf/99+vuu+/Wl19+qSeeeELvv/++3n333UvOb9KkSerbt69atGihL774Qp988omys7PVsWNH7dmzp8yO889//lN16tRRixYtLtlXkn788UfVrl1bYWFhTu2tW7d2bL/U+OjoaPn6+l7W+OL2KUk33XSTU3t4eLhq1apVojmVZk2dO3eWMUYrVqwo9VwBj/PuiS0AVyIjI8NIMo8++miJ+qemphpJZsSIEU7tGzduNJLMyy+/7GhzdxmuYcOGZtCgQY7X9957r2nTpo3lMefNm2ckmbS0NGOMMadPnzaVK1c2PXr0cOp38OBBExAQYPr16+c0B0nmiy++cOrbo0cP06xZM8vjHjx40Pj6+po//elPTu3Z2dkmLCzM9O7du0yOY4wx0dHRJj4+/pL9isTGxha7X39/f5dLYRe78cYbTbdu3Vzajxw5YiS5XAoriWHDhpmAgAC325o2bWri4uIsx1/OmurVq2f69OlT6rkCnsaZJeA6smrVKkly+UTbrbfequjoaH377bel2t+tt96qnTt3asSIEfr666+VlZV1yTEpKSk6e/asyxwiIyN11113uczBZrPpvvvuc2pr3bq1Dhw4YHmcr7/+Wvn5+Ro4cKDy8/MdP4GBgerUqZNWr15dJseRpCNHjqhOnTou7RceNz8/X8YYp+MVx2pbWY0vj32WdnydOnV0+PDhkk0O8CLCElCB1apVS0FBQUpLSytR/5MnT0o6f2nl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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x5 = 0; y5 = 0; v5 = [1, 1]\n", + "x6 = 0; y6 = 0; v6 = [1, 2]\n", + "\n", + "calcular_punto_encuentro(x5, y5, v5, x6, y6, v6)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ejemplo #4 (sin colisión)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y1 = 0.5 * x1 + 0.0\n", + "y2 = -2.0 * x2 + 1.0\n", + "No hay colisión\n" + ] + } + ], + "source": [ + "x7 = 0; y7 = 0; v7 = [2, 1]\n", + "x8 = 0; y8 = 1; v8 = [1, -2]\n", + "calcular_punto_encuentro(x7, y7, v7, x8, y8, v8)\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 9cc70a4fbc5a92078dee5e1b982e8f5a052db01c Mon Sep 17 00:00:00 2001 From: Carlosestc1 Date: Mon, 23 Oct 2023 17:34:48 -0500 Subject: [PATCH 0405/2103] Create ccaicedo09.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Escribe un programa que muestre por consola (con un print) los * números de 1 a 100 (ambos incluidos y con un salto de línea entre * cada impresión), sustituyendo los siguientes: * - Múltiplos de 3 por la palabra "fizz". * - Múltiplos de 5 por la palabra "buzz". * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". --- .../python/ccaicedo09.py" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/ccaicedo09.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/ccaicedo09.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/ccaicedo09.py" new file mode 100644 index 0000000000..7fc12e5f16 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/ccaicedo09.py" @@ -0,0 +1,22 @@ +""" + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + """ + +def fizz_buzz(): + for i in range(1,101): + print(" ") #Salto de línea entre cada impresión + if i%3 == 0 and i%5 == 0: + print("FizzBuzz") + elif i%3 == 0: + print("Fizz") + elif i%5 == 0: + print("Buzz") + else: + print(i) + +fizz_buzz() \ No newline at end of file From 6b4567d294ebcdc6fdf511932443c278ac4a7f7a Mon Sep 17 00:00:00 2001 From: Carlosestc1 Date: Mon, 23 Oct 2023 17:35:20 -0500 Subject: [PATCH 0406/2103] Update ccaicedo09.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agregar salto de línea al final --- .../python/ccaicedo09.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/ccaicedo09.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/ccaicedo09.py" index 7fc12e5f16..6d11756589 100644 --- "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/ccaicedo09.py" +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/ccaicedo09.py" @@ -19,4 +19,4 @@ def fizz_buzz(): else: print(i) -fizz_buzz() \ No newline at end of file +fizz_buzz() From ce0ec0c595dcb9f529297486ae15e4f7324dcb29 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez Lopez Date: Tue, 24 Oct 2023 00:36:10 +0200 Subject: [PATCH 0407/2103] Reto 42: Python --- .../python/klyone.py" | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/klyone.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/klyone.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/klyone.py" new file mode 100644 index 0000000000..0c32290656 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/klyone.py" @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 + +class World: + def __init__(self, max_x, max_y, max_time): + self.max_x = max_x + self.max_y = max_y + self.max_time = max_time + self.particles = [] + self.meeting_point = None + + def reset(self): + self.particles = [] + self.meeting_point = None + + def attach_particle(self, p): + self.particles.append(p) + + def check_particles_pos_limits(self): + ok = True + for p in self.particles: + pos = p.get_pos() + + if pos[0] > self.max_x or pos[1] > self.max_y: + ok = False + break + return ok + + def check_particles_meeting_point(self): + found = True + + point = self.particles[0].get_pos() + + for p in self.particles: + if point != p.get_pos(): + found = False + break + + return found + + def update_particles(self): + for p in self.particles: + p.update() + + def run(self): + self.meeting_points = None + + if len(self.particles) <= 1: + return + + if not self.check_particles_pos_limits(): + return + + if self.check_particles_meeting_point(): + self.meeting_point = [0, self.particles[0].get_pos()] + return + + for t in range(1, self.max_time): + self.update_particles() + + if not self.check_particles_pos_limits(): + break + + if self.check_particles_meeting_point(): + self.meeting_point = [t, self.particles[0].get_pos()] + break + + def get_meeting_point(self): + return self.meeting_point + +class Particle: + def __init__(self, pos, speed): + self.pos = pos + self.speed = speed + def update_pos(self, t): + self.pos[0] += self.speed[0] * t + self.pos[1] += self.speed[1] * t + def update(self): + self.update_pos(1) + def get_pos(self): + return self.pos + +if __name__ == "__main__": + p1 = Particle([0,0], [1,1]) + p2 = Particle([0,10], [1,0]) + w = World(100,100,100) + w.attach_particle(p1) + w.attach_particle(p2) + w.run() + print(w.get_meeting_point()) + + p1 = Particle([0,0], [1,2]) + p2 = Particle([0,0], [-1,-1]) + w.reset() + w.attach_particle(p1) + w.attach_particle(p2) + w.run() + print(w.get_meeting_point()) + + p1 = Particle([0,0], [1,2]) + p2 = Particle([10,0], [10,22]) + w.reset() + w.attach_particle(p1) + w.attach_particle(p2) + w.run() + print(w.get_meeting_point()) From 79db310b06035884f441a7ce1e6e4272c275856f Mon Sep 17 00:00:00 2001 From: jcdm60 Date: Mon, 23 Oct 2023 19:06:35 -0400 Subject: [PATCH 0408/2103] Reto #42 - Python --- .../python/jcdm60.py" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/jcdm60.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/jcdm60.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/jcdm60.py" new file mode 100644 index 0000000000..34d237711f --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/jcdm60.py" @@ -0,0 +1,65 @@ +# Reto #42: Punto de encuentro +#### Dificultad: Difícil | Publicación: 23/10/23 | Corrección: 30/10/23 + +## Enunciado + +# +# Crea una función que calcule el punto de encuentro de dos objetos en movimiento +# en dos dimensiones. +# - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento +# (vector de desplazamiento) por unidad de tiempo (también en formato xy). +# - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. +# - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. +# - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. +# + + +class MovingObject: + def __init__(self, x, y, vx, vy): + self.x = x + self.y = y + self.vx = vx + self.vy = vy + + def position_at_time(self, t): + new_x = self.x + self.vx * t + new_y = self.y + self.vy * t + return new_x, new_y + + @staticmethod + def find_intersection(obj1, obj2): + x1, y1, vx1, vy1 = obj1.x, obj1.y, obj1.vx, obj1.vy + x2, y2, vx2, vy2 = obj2.x, obj2.y, obj2.vx, obj2.vy + + delta_x = x2 - x1 + delta_y = y2 - y1 + delta_vx = vx2 - vx1 + delta_vy = vy2 - vy1 + + if delta_vx * vy1 == delta_vy * vx1: + return None # Los objetos viajan en la misma dirección o a la misma velocidad, no se cruzan + + t = (delta_x * delta_vy - delta_y * delta_vx) / ( + vx1 * delta_vy - vy1 * delta_vx + ) + + if t < 0: + return None + + x_intersection, y_intersection = obj1.position_at_time(t) + + return x_intersection, y_intersection, t + + +if __name__ == "__main__": + object1 = MovingObject(0, 0, 2, 1) + object2 = MovingObject(4, 2, 1, 1) + result = MovingObject.find_intersection(object1, object2) + + if result is not None: + x_intersection, y_intersection, time = result + print( + f"Los objetos se encuentran en ({x_intersection}, {y_intersection}) después de {time} unidades de tiempo." + ) + else: + print("Los objetos no se encuentran.") From 6af50100799c64534e04c09233ba7304cf324092 Mon Sep 17 00:00:00 2001 From: Carlosestc1 Date: Mon, 23 Oct 2023 18:09:14 -0500 Subject: [PATCH 0409/2103] Create ccaicedo09.py --- .../python/ccaicedo09.py" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/ccaicedo09.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/ccaicedo09.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/ccaicedo09.py" new file mode 100644 index 0000000000..8b9bbbf163 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/ccaicedo09.py" @@ -0,0 +1,30 @@ +""" + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") +""" + +def hacker_language(): + + text = input("Ingresa la oración que quieres traducir a lenguaje hacker ---> ").upper() + + leet = {"A": "4", "B": "I3", "C": "[", "D": ")", "E": "3", "F": "|=", "G": "&", "H": "#", "I": "1", + "J": ",_|", "K": ">|", "L": "1", "M": "/\/\\", "N": "^/", "O": "0", "P": "|*", "Q": "(_,)", + "R": "I2", "S": "5", "T": "7", "U": "(_)", "V": "\/", "W": "\/\/", "X": "><", "Y": "j", "Z": "2", + "1": "L", "2": "R", "3": "E", "4": "A", "5": "S", "6": "b", "7": "T", "8": "B", "9": "g", "0": "o"} + + leet_string = "" + + for char in text: + if char in leet.keys(): + leet_string += leet[char] + else: + leet_string += char + + return leet_string + + +print(f"\nTexto traducido ---> {hacker_language()}") From 84ed7e99ca4111688c9615d55fd7bcc8d4329f2b Mon Sep 17 00:00:00 2001 From: blackriper Date: Mon, 23 Oct 2023 18:13:49 -0600 Subject: [PATCH 0410/2103] Reto#42-go --- .../go/blackriper.go" | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/go/blackriper.go" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/go/blackriper.go" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/go/blackriper.go" new file mode 100644 index 0000000000..956ad19149 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/go/blackriper.go" @@ -0,0 +1,71 @@ +package main + +import ( + "fmt" +) + +// definir metodos de trabajo +type MettingPoint interface { + PointMetting(o1, o2 *Object) + PrintResults() +} + +// definir estructuras de trabajo +type Object struct { + x, y float64 + vx, vy float64 +} + +type ColisionPoint struct { + X float64 + Y float64 + T float64 + Found bool +} + +func (c *ColisionPoint) PointMetting(o1, o2 *Object) { + // Calculamos la velocidad relativa entre los dos objetos para mas info https://es.wikipedia.org/wiki/Velocidad_relativa. + v12x := o1.vx - o2.vx + v12y := o1.vy - o2.vy + + // Si la velocidad relativa es cero, los objetos no se moverán y, por lo tanto, no se encontrarán. + if v12x == 0 && v12y == 0 { + c.Found = false + return + } + + // Calculamos la ecuación de la recta que representa el movimiento de los dos objetos. + // La ecuación es de la forma y = mx + b, donde m es la pendiente y b es el intercepto con el eje y. + // mas info https://www.profesorenlinea.cl/geometria/Recta_Ecuacion_de.html + m := v12y / v12x + b := o1.y - m*o1.x + + // Resolvemos la ecuación para encontrar el punto de encuentro. + c.X = (o2.y - b) / m + c.Y = m*c.X + b + + // Calculamos el tiempo que tardarán los objetos en llegar al punto de encuentro. + c.T = (c.X - o1.x) / o1.vx + c.Found = true + return +} + +func (c ColisionPoint) PrintResults() { + if c.Found { + fmt.Println("the metting point is (", c.X, ", ", c.Y, ").") + fmt.Println("the time it will take to find each other", c.T) + } else { + fmt.Println("Los objetos no se encontrarán.") + } + +} + +func main() { + // Definimos los objetos. + o1 := Object{x: 1, y: 2, vx: 3, vy: 4} + o2 := Object{x: 5, y: 6, vx: 7, vy: 8} + + var point MettingPoint = &ColisionPoint{} + point.PointMetting(&o1, &o2) + point.PrintResults() +} From 805dfa0466cffb82b112d5741471e797d04ce501 Mon Sep 17 00:00:00 2001 From: Jamer Rebolledo Date: Mon, 23 Oct 2023 22:00:01 -0500 Subject: [PATCH 0411/2103] =?UTF-8?q?=F0=9F=8F=BA=20a=C3=B1ad=C3=AD=20algu?= =?UTF-8?q?nas=20referencias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/jamerrq.ipynb" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/jamerrq.ipynb" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/jamerrq.ipynb" index 77efd553e0..450377d22e 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/jamerrq.ipynb" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/jamerrq.ipynb" @@ -427,6 +427,22 @@ "x8 = 0; y8 = 1; v8 = [1, -2]\n", "calcular_punto_encuentro(x7, y7, v7, x8, y8, v8)\n" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Referencias\n", + "\n", + "Algunos enlaces que pueden ser de utilidad:\n", + "\n", + "- [Recta (Wikipedia)](https://es.wikipedia.org/wiki/Recta)\n", + "- [Geogebra Calculator](https://www.geogebra.org/calculator)\n", + "- [Marker\n", + " Examples](https://matplotlib.org/stable/gallery/lines_bars_and_markers/scatter_star_poly.html)\n", + "- [Matplotlib Reference](https://matplotlib.org/stable/api/pyplot_summary.html)\n", + "- [Floor and Ceil](https://www.geeksforgeeks.org/floor-ceil-function-python/)" + ] } ], "metadata": { From 7df3b7b29c0bf2d0731762f1169056436348ffe3 Mon Sep 17 00:00:00 2001 From: blfuentes Date: Tue, 24 Oct 2023 09:34:23 +0200 Subject: [PATCH 0412/2103] Reto #42 - F# --- .../f#/blfuentes.fsx" | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/f#/blfuentes.fsx" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/f#/blfuentes.fsx" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/f#/blfuentes.fsx" new file mode 100644 index 0000000000..05f7a28c60 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/f#/blfuentes.fsx" @@ -0,0 +1,42 @@ +// /* +// * Crea una función que calcule el punto de encuentro de dos objetos en movimiento +// * en dos dimensiones. +// * - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento +// * (vector de desplazamiento) por unidad de tiempo (también en formato xy). +// * - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. +// * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. +// * - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. +// */ + +type Position = { + X: int + Y: int +} +type Element = { + Position: Position + Speed: Position +} + +let getDistance (posA: Position) (posB: Position) = + sqrt((pown((float)(posA.X - posB.X)) 2) + (pown((float)(posA.Y - posB.Y)) 2)) + +let rec getCollision (posA: Element) (posB: Element) (steps: int)= + let initialDistance = getDistance posA.Position posB.Position + + if initialDistance = 0 then + (steps, posA.Position) + else + let newPosA = { X = posA.Position.X + posA.Speed.X; Y = posA.Position.Y + posA.Speed.Y } + let newPosB = { X = posB.Position.X + posB.Speed.X; Y = posB.Position.Y + posB.Speed.Y } + let newDistance = getDistance newPosA newPosB + if initialDistance <= newDistance then + raise (System.Exception("No hay colisión!")) + else + getCollision { Position = newPosA; Speed = posA.Speed } { Position = newPosB; Speed = posB.Speed } (steps + 1) + + +// Sample usage +let pointA = { Position = { X = 0; Y = 0 }; Speed = { X = 2; Y = 1} } +let pointB = { Position = {X = 0; Y = 6 }; Speed = { X = 2; Y = -2} } + +let (steps, collision) = getCollision pointA pointB 0 \ No newline at end of file From 787cadbce82dbeeb4482b831587bb3f1f9e5efd4 Mon Sep 17 00:00:00 2001 From: "Roger Morales (Rojo)" <74221578+r0j0Code@users.noreply.github.com> Date: Tue, 24 Oct 2023 09:23:19 -0500 Subject: [PATCH 0413/2103] feat(math-utils): add functions for prime, even/odd, and fibonacci checks Added functions to determine if a number is prime, even or odd, and if it's part of the fibonacci sequence. --- .../javascript/r0j0Code.js | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/r0j0Code.js diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/r0j0Code.js b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/r0j0Code.js new file mode 100644 index 0000000000..fb29d68646 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/r0j0Code.js @@ -0,0 +1,106 @@ +const readline = require("readline"); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let userInput = 0; +rl.question("Ingresa un número: ", (answer) => { + userInput = Number(answer); + + console.log( + `El número ${userInput} ${isPrime(userInput).msg},` + + ` ${isFibonacci(userInput).msg} y ` + + ` ${esPar(userInput).msg}` + ); + + rl.close(); +}); + +/** + * Check if a number is a Pair or not + * @param {Number} num number to check if its pair or not + * @returns {Object} the result object {is, msg} + */ +function esPar(num) { + if (num % 2 == 0) { + return { + is: true, + msg: "es Par", + }; + } else { + return { + is: false, + msg: "es Impar", + }; + } +} + +/** + * Regresa si es un número primo. Los números primos son aquellos que solo tienen 2 factores: 1 y ellos mismos. + * @param {*} num + * @returns {Object} the result object {is, msg} + */ +function isPrime(num) { + let output = {}; + const isPrimeOrNot = () => { + if (num <= 1) { + return false; + } + if (num <= 3) { + return true; + } + if (num % 2 === 0 || num % 3 === 0) { + return false; + } + + for (let i = 5; i * i <= num; i += 6) { + if (num % i === 0 || num % (i + 2) === 0) { + return false; + } + } + + return true; + }; + + output["is"] = isPrimeOrNot(); + output["msg"] = isPrimeOrNot() == true ? "es primo" : "no es Primo"; + return output; +} + +function fibonacci(n) { + // The Fibonacci sequence is a series of numbers where each number is the sum of the two preceding ones. It starts with 0 and 1. + + if (n <= 1) { + return n; + } else { + return fibonacci(n - 1) + fibonacci(n - 2); + } +} + +/** + * Check if a number is part of the fibonacci sequence + * @param {Number} n Number that if going to be screen to check if its a fibonacci or not + * @returns {Object} the result object {is, msg} + */ +function isFibonacci(n) { + let fibonacciSeq = []; + + for (let num = 0; num <= n + 1; num++) { + fibonacciSeq.push(fibonacci(num)); + } + + let output = {}; + output.seq = fibonacciSeq; + output.number = n; + + if (fibonacciSeq.includes(n)) { + output["is"] = true; + output["msg"] = "fibonacci"; + } else { + output["is"] = false; + output["msg"] = "no es fibonacci"; + } + + return output; +} From 096f8130cdbbc958c3c7bc9530f2ce5d44cad587 Mon Sep 17 00:00:00 2001 From: "Roger Morales (Rojo)" <74221578+r0j0Code@users.noreply.github.com> Date: Tue, 24 Oct 2023 09:37:42 -0500 Subject: [PATCH 0414/2103] style: Update the filename of my previous solutions Rename the filename for the challenge 0 to 3, because I recently change my github username --- .../javascript/r0j0Code.js" | 0 .../javascript/r0j0Code.js" | 0 .../javascript/{rogmovi.js => r0j0Code.js} | 0 .../javascript/r0j0Code.js" | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rogmovi.js" => "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/r0j0Code.js" (100%) rename "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/rogmovi.js" => "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/r0j0Code.js" (100%) rename Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/{rogmovi.js => r0j0Code.js} (100%) rename "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rogmovi.js" => "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/r0j0Code.js" (100%) diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rogmovi.js" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/r0j0Code.js" similarity index 100% rename from "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rogmovi.js" rename to "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/r0j0Code.js" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/rogmovi.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/r0j0Code.js" similarity index 100% rename from "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/rogmovi.js" rename to "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/r0j0Code.js" diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/rogmovi.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/r0j0Code.js similarity index 100% rename from Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/rogmovi.js rename to Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/r0j0Code.js diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rogmovi.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/r0j0Code.js" similarity index 100% rename from "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rogmovi.js" rename to "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/r0j0Code.js" From e16a00a107502b6aa93d1de096256d5268132ff4 Mon Sep 17 00:00:00 2001 From: ycanas Date: Tue, 24 Oct 2023 10:52:08 -0500 Subject: [PATCH 0415/2103] Reto #40 - Python --- .../python/ycanas.py" | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ycanas.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ycanas.py" index 3fb3e7aac6..897356ff1f 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ycanas.py" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ycanas.py" @@ -3,5 +3,12 @@ def tabla(n): for i in range(1, 11): print(f"{n} x {str(i):>2s} = {str(n * i):>{max}s}") -n = int(input("Ingrese un número: ")) -tabla(n) + +while True: + try: + n = int(input("Ingrese un número entero: ")) + tabla(n) + break + + except: + print("[Error] Ingrese un número entero.") From d73945927f618636effa1942ada045937131f007 Mon Sep 17 00:00:00 2001 From: matiaschamu Date: Tue, 24 Oct 2023 15:24:41 -0300 Subject: [PATCH 0416/2103] Reto num 38 --- .../python/matiaschamu.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/matiaschamu.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/matiaschamu.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/matiaschamu.py new file mode 100644 index 0000000000..8666d9c433 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/matiaschamu.py @@ -0,0 +1,16 @@ +def BuscarObjetivo(list, objetivo): + combinaciones = pow(2,len(list)) + suma = 0 + for k in range (1,combinaciones): + b= bin(k)[2:].zfill(len(list)) + ret=[] + for i, bit in enumerate(b): + if bit == '1': + suma += list[i] + ret.append(list[i]) + if suma==objetivo: + print(ret) + suma=0 + ret=[] + return () +BuscarObjetivo([1,5,3,2],6) \ No newline at end of file From 723768547b66d31817249b87c1682a74263c2950 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Andr=C3=A9s?= <102297884+vandresca@users.noreply.github.com> Date: Tue, 24 Oct 2023 21:40:33 +0200 Subject: [PATCH 0417/2103] Create vandresca.py --- .../python/vandresca.py" | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/vandresca.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/vandresca.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/vandresca.py" new file mode 100644 index 0000000000..4f2deddfda --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/vandresca.py" @@ -0,0 +1,75 @@ +""" +/* + * Crea una función que calcule el punto de encuentro de dos objetos en movimiento + * en dos dimensiones. + * - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento + * (vector de desplazamiento) por unidad de tiempo (también en formato xy). + * - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. + * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. + * - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. + */ +""" + + +import numpy as np +import copy + +class Point: + x = None + y = None + + # Métodos de la clase + def __init__(self, x, y): + self.x = y + self.y = x + + +def printTable(): + for row in range(SIDE_TABLE): + print() + for col in range(SIDE_TABLE): + print(str(table[row, col])+" ", end="") + +def setValues(point1, point2): + table[point1.x][point1.y] = "(x)" + table[point2.x][point2.y] = "(x)" + +def isOutTable(point1, point2): + limit = SIDE_TABLE - 1 + if (point1.x > limit or point2.x > limit + or point1.y > limit or point2.y > limit + or point1.x == -1 or point2.x == -1 + or point1.y == -1 or point2.y == -1): + return True + return False + + +point1 = Point(5, 5) +point2 = Point(9, 1) + +vectorSpeed1 = Point(1, 1) +vectorSpeed2 = Point(0, 2) + +SIDE_TABLE = 15 +modelTable = np.array([[" o "]*SIDE_TABLE]* SIDE_TABLE) +table = copy.copy(modelTable) +setValues(point1, point2) +while(True): + print() + print() + printTable() + table = copy.copy(modelTable) + if(point1.x == point2.x and point1.y == point2.y): + print(f"Los dos puntos se encuentran en ({point1.x}, {point1.y})") + break + else: + print("Los dos puntos no se encuentran") + point1.x += vectorSpeed1.x + point1.y += vectorSpeed1.y + point2.x += vectorSpeed2.x + point2.y += vectorSpeed2.y + if isOutTable(point1, point2): + break + setValues(point1, point2) + + From afdf820bf3a14337f40219391281e0d108f47274 Mon Sep 17 00:00:00 2001 From: deathiwng Date: Tue, 24 Oct 2023 22:49:34 +0200 Subject: [PATCH 0418/2103] Reto #42 - C# --- .../c#/deathwing696.cs" | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/deathwing696.cs" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/deathwing696.cs" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/deathwing696.cs" new file mode 100644 index 0000000000..cb3cbd30bb --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/deathwing696.cs" @@ -0,0 +1,81 @@ +/* + * Crea una funcin que calcule el punto de encuentro de dos objetos en movimiento + * en dos dimensiones. + * - Cada objeto est compuesto por una coordenada xy y una velocidad de desplazamiento + * (vector de desplazamiento) por unidad de tiempo (tambin en formato xy). + * - La funcin recibir las coordenadas de inicio de ambos objetos y sus velocidades. + * - La funcin calcular y mostrar el punto en el que se encuentran y el tiempo que tardarn en lograrlo. + * - La funcin debe tener en cuenta que los objetos pueden no llegar a encontrarse. + */ + +using System; + +namespace reto42 +{ + public class Reto42 + { + static void Main(string[] args) + { + //Punto obj1 = new Punto(0, 0); + //Vector vel1 = new Vector(1, 1); + + //Punto obj2 = new Punto(5, 0); + //Vector vel2 = new Vector(-1, 1); + + Punto obj1 = new Punto(0, 0); + Vector vel1 = new Vector(1, 1); + + Punto obj2 = new Punto(3, 0); + Vector vel2 = new Vector(-1, 1); + + Calcula_encuentro(obj1, vel1, obj2, vel2); + + Console.ReadKey(); + } + + static void Calcula_encuentro(Punto obj1, Vector vel1, Punto obj2, Vector vel2) + { + double deltaX = obj2.X - obj1.X; + double deltaY = obj2.Y - obj1.Y; + double deltaVX = vel2.X - vel1.X; + double deltaVY = vel2.Y - vel1.Y; + + double tiempo_encuentro = -(deltaX * deltaVX + deltaY * deltaVY) / (Math.Pow(deltaVX, 2) + Math.Pow(deltaVY, 2)); + + if (double.IsNaN(tiempo_encuentro) || tiempo_encuentro < 0) + { + Console.WriteLine("Los objetos se estn alejando o ya se han encontrado"); + return; + } + + double punto_encuentro_x = obj1.X + vel1.X * tiempo_encuentro; + double punto_encuentro_y = obj1.Y + vel1.Y * tiempo_encuentro; + + Console.WriteLine($"El punto de encuentro es el ({punto_encuentro_x.ToString().Replace(',', '.')},{punto_encuentro_y.ToString().Replace(',', '.')}) y se encontrarn pasadas {tiempo_encuentro} unidades de tiempo"); + } + + public class Punto + { + public double X { get;} + public double Y { get; } + + public Punto(double x, double y) + { + X = x; + Y = y; + } + } + + public class Vector + { + public double X { get; } + public double Y { get; } + + public Vector(double x, double y) + { + X = x; + Y = y; + } + } + } +} \ No newline at end of file From 7288927c68e4ecb84a11ebc881f45ec3d29faa96 Mon Sep 17 00:00:00 2001 From: deathiwng Date: Tue, 24 Oct 2023 22:58:26 +0200 Subject: [PATCH 0419/2103] =?UTF-8?q?Se=20a=C3=B1aden=20dos=20ejemplos=20m?= =?UTF-8?q?=C3=A1s,=20uno=20de=20cruce=20y=20uno=20en=20el=20que=20nunca?= =?UTF-8?q?=20se=20cruzan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../c#/deathwing696.cs" | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/deathwing696.cs" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/deathwing696.cs" index cb3cbd30bb..10d3142600 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/deathwing696.cs" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/deathwing696.cs" @@ -16,17 +16,33 @@ public class Reto42 { static void Main(string[] args) { + //Ejemplo cruce 1 salida = (2.5, 2.5) 2.5 //Punto obj1 = new Punto(0, 0); - //Vector vel1 = new Vector(1, 1); + //Vector vel1 = new Vector(1, 1); //Punto obj2 = new Punto(5, 0); + //Vector vel2 = new Vector(-1, 1); + + //Ejemplo cruce 2 salida = (1.5,1.5) 1.5 + //Punto obj1 = new Punto(0, 0); + //Vector vel1 = new Vector(1, 1); + + //Punto obj2 = new Punto(3, 0); + //Vector vel2 = new Vector(-1, 1); + + //Ejemplo cruce 3 salida = (2, 2) 2 + //Punto obj1 = new Punto(0, 0); + //Vector vel1 = new Vector(1, 1); + + //Punto obj2 = new Punto(4, 0); //Vector vel2 = new Vector(-1, 1); + //Ejemplo ya se han cruzado Punto obj1 = new Punto(0, 0); - Vector vel1 = new Vector(1, 1); + Vector vel1 = new Vector(1, 0); - Punto obj2 = new Punto(3, 0); - Vector vel2 = new Vector(-1, 1); + Punto obj2 = new Punto(0, 2); + Vector vel2 = new Vector(0, 1); Calcula_encuentro(obj1, vel1, obj2, vel2); From 8b79d7efbcde4dc632b1827f8f2b99848ca3b42a Mon Sep 17 00:00:00 2001 From: Mario Ruano Date: Tue, 24 Oct 2023 23:08:42 +0200 Subject: [PATCH 0420/2103] =?UTF-8?q?Planteamiento=20inicial=20de=20la=20s?= =?UTF-8?q?oluci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Falta resolver división por cero para comprobar si las rectas se cortan --- .../c#/mrf1989.cs" | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/mrf1989.cs" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/mrf1989.cs" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/mrf1989.cs" new file mode 100644 index 0000000000..ed6cae3613 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/mrf1989.cs" @@ -0,0 +1,56 @@ +MovingObject objA = new(new(2, 2), new(1, 2)); +MovingObject objB = new(new(5, 5), new(0, -1)); + +CalculateMeetingPoint(objA, objB); +void CalculateMeetingPoint(MovingObject objA, MovingObject objB) +{ + if (objA.SpeedVector.X / objB.SpeedVector.X == objA.SpeedVector.Y / objB.SpeedVector.Y) + { + Console.WriteLine("The objects are not located anywhere on the plane"); + return; + } + else + { + int seconds = 0; + while (objA.PointPosition.X != objB.PointPosition.X && objA.PointPosition.Y != objB.PointPosition.Y) + { + seconds++; + + objA.PointPosition.X += objA.SpeedVector.X; + objA.PointPosition.Y += objA.SpeedVector.Y; + objB.PointPosition.X += objB.SpeedVector.X; + objB.PointPosition.Y += objB.SpeedVector.Y; + } + + Console.WriteLine($"The objects have been found at point {objA.PointPosition.ToString()} after {seconds} seconds"); + } +} + +class MovingObject +{ + public Coord PointPosition { get; set; } + public Coord SpeedVector { get; set; } + + public MovingObject(Coord pointPosition, Coord speedVector) + { + PointPosition = pointPosition; + SpeedVector = speedVector; + } +} + +class Coord +{ + public int X { get; set; } + public int Y { get; set; } + + public Coord(int x, int y) + { + X = x; + Y = y; + } + + public override string ToString() + { + return $"({X}, {Y})"; + } +} \ No newline at end of file From f4124ae3b50e46f11eac0634f7604a0f066211ee Mon Sep 17 00:00:00 2001 From: Carlosestc1 Date: Tue, 24 Oct 2023 16:34:23 -0500 Subject: [PATCH 0421/2103] Create ccaicedo09.py --- .../python/ccaicedo09.py | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/ccaicedo09.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/ccaicedo09.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/ccaicedo09.py new file mode 100644 index 0000000000..520cc3967e --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/ccaicedo09.py @@ -0,0 +1,51 @@ +""" +/* + * Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. + * Ejemplos: + * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" + * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" + */ +""" + + +def is_prime(num: int): + + if num <= 1: + return False + + for i in range(2,num): + if num%i == 0: + return False + + return True + + +def is_fibonacci(num: int): + numOne = 1 + numTwo = 1 + while numTwo < num: + [numOne, numTwo] = [numTwo, numOne + numTwo] + + return numTwo == num or num == 1 + + +def is_even(num: int): + + if num%2 == 0: + return True + else: + return False + + +def main(num): + + result = f"El número {num}" + result += f" es primo," if is_prime(num) else " no es primo," + result += f" fibonacci " if is_fibonacci(num) else " no es fibonacci " + result += f"y es par" if is_even(num) else "y es impar" + + return result + + +print(main(2)) +print(main(7)) From 2b9721888b47345883db5e4d2c290067b915f951 Mon Sep 17 00:00:00 2001 From: Carlosestc1 Date: Tue, 24 Oct 2023 16:46:14 -0500 Subject: [PATCH 0422/2103] Create ccaicedo09.py --- .../python/ccaicedo09.py" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ccaicedo09.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ccaicedo09.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ccaicedo09.py" new file mode 100644 index 0000000000..c74ff24f68 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ccaicedo09.py" @@ -0,0 +1,16 @@ +""" + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... +""" + +def main(): + number = int(input("Ingresa el número del que deseas saber su tabla de multiplicar ---> ")) + for i in range(1,11): + print(f"{number} x {i} = {number*i}") + +main() \ No newline at end of file From d431cabeda0f14300467e8af2d6e8ab6279d335e Mon Sep 17 00:00:00 2001 From: Carlosestc1 Date: Tue, 24 Oct 2023 16:46:45 -0500 Subject: [PATCH 0423/2103] Update ccaicedo09.py Espacio final --- .../python/ccaicedo09.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ccaicedo09.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ccaicedo09.py" index c74ff24f68..5b7601b573 100644 --- "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ccaicedo09.py" +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/ccaicedo09.py" @@ -13,4 +13,4 @@ def main(): for i in range(1,11): print(f"{number} x {i} = {number*i}") -main() \ No newline at end of file +main() From 082b5f3efed5a8c6f4b51afb9aabd00374b20584 Mon Sep 17 00:00:00 2001 From: jlcontini Date: Tue, 24 Oct 2023 19:02:47 -0300 Subject: [PATCH 0424/2103] Se agrega archivo jlcontini.py en Reto #5 --- .../python/jlcontini.py" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/jlcontini.py" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/jlcontini.py" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/jlcontini.py" new file mode 100644 index 0000000000..fd1c642532 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/jlcontini.py" @@ -0,0 +1,29 @@ +# Reto #5: ¡Hola Mundo! +#### Dificultad: Fácil | Publicación: 30/01/23 | Corrección: 06/02/23 + +""" +¡Tengo una gran noticia! Twitch nos ha seleccionado como **#PequeñaGranComunidad** por nuestra labor ayudando a aprender programación a todo el mundo. +Puedes leer la noticia [aquí](https://blog.twitch.tv/es-es/2023/01/26/celebremos-a-los-h%C3%A9roes-an%C3%B3nimos-de-espa%C3%B1a). ¡Gracias! + +¿Batimos el récord de contribuciones con este ejercicio? + + +## Enunciado + +``` +/* + * Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas. + * Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado, + * o quizás quieres dar tus primeros pasos... ¡Pues este es el momento! + * + * A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí... + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. +""" + +print("\n¡Hola Mundo!\n") From afc10360218822e4e3570ba7245453ec774e954a Mon Sep 17 00:00:00 2001 From: Carlosestc1 Date: Tue, 24 Oct 2023 17:21:07 -0500 Subject: [PATCH 0425/2103] Create ccaicedo09.py --- .../python/ccaicedo09.py" | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 "Retos/Reto #12 - VIERNES 13 [F\303\241cil]/python/ccaicedo09.py" diff --git "a/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/python/ccaicedo09.py" "b/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/python/ccaicedo09.py" new file mode 100644 index 0000000000..c380645bd6 --- /dev/null +++ "b/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/python/ccaicedo09.py" @@ -0,0 +1,14 @@ +""" + * Crea una función que sea capaz de detectar si existe un viernes 13 en el mes y el año indicados. + * - La función recibirá el mes y el año y retornará verdadero o falso. +""" + +from datetime import datetime + +def Friday_13th(month: int, year: int): + date = datetime(year, month, 13) + + return True if date.isoweekday() == 5 else False #.isoweekday() no toma lunes como 0; más cómodo + +print(Friday_13th(9, 2023)) +print(Friday_13th(10, 2023)) From 68538d4422e2d8ae6c02f2bbf8c641851450ecd0 Mon Sep 17 00:00:00 2001 From: Hugovrc Date: Tue, 24 Oct 2023 16:32:15 -0600 Subject: [PATCH 0426/2103] Reto #41 - Python --- .../python/Hugovrc.py" | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/Hugovrc.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/Hugovrc.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/Hugovrc.py" new file mode 100644 index 0000000000..79c11142fe --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/Hugovrc.py" @@ -0,0 +1,79 @@ +import random + +def casa_encantada(): + preguntas = (("cuando se celebra el halloween?", "31 de octubre"), + ("Qué bebida es popular en las fiestas de Halloween?","sangre de vampiro"), + ("Qué película de terror es un clásico para ver en Halloween?","el resplandor"), + ("Que actividad hacen los niños el dia de Halloween?","pedir dulces"), + ("Por que se tallan calabazas en forma de caras espeluznantes?","para alejar a los espiritus malignos"), + ("De dónde proviene la celebración de Halloween?", "de una festividad celta llamada Samhain")) + + habitaciones = [["🚪","⬜","⬜","⬜"], + ["⬜","👻","⬜","⬜"], + ["⬜","⬜","⬜","👻"], + ["⬜","⬜","⬜","🍭"]] + + #for row in habitaciones: + # print("".join(map(str,row))) + + posicion = encontrar_elemento(habitaciones, "🚪") + posicion_fila = posicion[0] + posicion_columna = posicion[1] + pos = [] + + while True: + num = len(preguntas) + num_preg = random.randint(0,num-1) + num_preg2 = random.randint(0, num-1) + + primera_pregunta, primera_resp = preguntas[num_preg] + if num_preg2 != num_preg: + segunda_pregunta, segunda_resp = preguntas[num_preg2] + + pos = habitaciones[posicion_fila][posicion_columna] + if pos == "⬜": + print("---Deberas responder esta pregunta para poder avanzar---") + respuesta = input(f"{primera_pregunta}: ") + while respuesta != primera_resp: + print("respuesta incorrecta!!") + respuesta = input(f"{primera_pregunta}: ") + + elif pos == "👻": + print("---Deberas responder dos preguntas para poder avanzar---") + respuesta1 = input(f"{primera_pregunta}: ") + respuesta2 = input(f"{segunda_pregunta}: ") + while respuesta1 != primera_resp or respuesta2 != segunda_resp: + print("--- respuesta incorrecta!!") + respuesta1 = input(f"{primera_pregunta}: ") + respuesta2 = input(f"{segunda_pregunta}: ") + elif pos == "🍭": + print("--- Felicidades haz encontrado la salida ---") + break + + movimiento = input("-- Hacia donde deseas desplazarte(norte/sur/este/oeste): ") + + if movimiento == "norte" and posicion_fila > 0: + posicion_fila -= 1 + elif movimiento == "sur" and posicion_fila < 3: + posicion_fila += 1 + elif movimiento == "oeste" and posicion_columna > 0: + posicion_columna -= 1 + elif movimiento == "este" and posicion_columna < 3: + posicion_columna += 1 + else: + print(f"no se puede desplazar hacia el {movimiento}") + +def encontrar_elemento(habitaciones, elemento): + posicion = [] + + for fila in range(4): + for columna in range(4): + if habitaciones[fila][columna] == elemento: + posicion = [fila, columna] + break + return posicion + + + + +casa_encantada() From a4767c478b0f83a78a0520e8fea136a665532337 Mon Sep 17 00:00:00 2001 From: Marco Torres Date: Tue, 24 Oct 2023 21:33:03 -0700 Subject: [PATCH 0427/2103] Reto #35 - Python --- .../python/marcoatrs.py" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 "Retos/Reto #35 - PRIMEROS PASOS [F\303\241cil]/python/marcoatrs.py" diff --git "a/Retos/Reto #35 - PRIMEROS PASOS [F\303\241cil]/python/marcoatrs.py" "b/Retos/Reto #35 - PRIMEROS PASOS [F\303\241cil]/python/marcoatrs.py" new file mode 100644 index 0000000000..85422b61bb --- /dev/null +++ "b/Retos/Reto #35 - PRIMEROS PASOS [F\303\241cil]/python/marcoatrs.py" @@ -0,0 +1,69 @@ +# Hola mundo +print("Hola, mundo!") + +# Variables +variable_string = "Variable de tipo str" +variable_entero = 4 +variable_flotante = 8.34 +variable_booleana = True + +# Constante +CONSTANTE = "Sigue siendo variable pero las mayusculas se usan como constantes" + +# if | else if | else +if variable_booleana: + print("Su valor es true") +elif variable_flotante > 10: + print("Su valor es mayor a 10") +else: + print("Ningunas de las condiciones anteriores se cumplieron") + +# Estructuras +lista: list = [0, 1, 2, "tres"] +tupla: tuple = (0, 1, 2, "dos + 1") +conjunto: set = {0, 1, 2, "tres"} +diccionario: dict = {"clave_1": "valor_1", "clave_2": "valor_2"} + +# for | foreach | while +for i in range(5): + print(i) + +for elemento in lista: + print(elemento) + +i = 0 +while i < 5: + print(i) + i += 1 + +# Funciones +def funcion_con_parametros(parametro_1: str, parametro_2: float): + print(f"Pasaste: {parametro_1} y {parametro_2}") + +def funcion_sin_parametros(): + print("Solo necesitas llamar esta funcion") + +def funcion_con_retorno(valor: int) -> int: + return valor + 1 + +funcion_con_parametros("Hola", 3.3) +funcion_sin_parametros() +print(funcion_con_retorno(3)) + +# Clases +class MiClase: + def __init__(self, id: str): + self.id = id + + def show_id(self): + print(self.id) + +print(MiClase("Marco").show_id()) + +# Control de excepciones +try: + print(3 / 0) +except ZeroDivisionError: + print("No se puede dividir entre 0") +finally: + print("Esta parte se ejecuta con o sin error") From 10f68bc1869c0e103c1f3a030e3bfc42d917899d Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Tue, 24 Oct 2023 23:47:21 -0500 Subject: [PATCH 0428/2103] Reto #17 - Python --- .../python/sublian.py" | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/sublian.py" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/sublian.py" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/sublian.py" new file mode 100644 index 0000000000..22c88cf42d --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/sublian.py" @@ -0,0 +1,61 @@ +# Reto #17: Git y GitHub +#### Dificultad: Difícil | Publicación: 24/04/23 | Mi solución: 24/10/23 +## Enunciado +""" + * ¡Estoy de celebración! He publicado mi primer libro: + * "Git y GitHub desde cero" + * - Papel: mouredev.com/libro-git + * - eBook: mouredev.com/ebook-git + * ¿Sabías que puedes leer información de Git y GitHub desde la gran + * mayoría de lenguajes de programación? + * Crea un programa que lea los últimos 10 commits de este repositorio y muestre: + * - Hash + * - Autor + * - Mensaje + * - Fecha y hora + * Ejemplo de salida: + * Commit 1 (el más reciente) | 12345A | MoureDev | Este es un commit | 24/04/2023 21:00 + * Se permite utilizar librerías que nos faciliten esta tarea. +""" + +import requests + +class GithubService: + def __init__(self, repo): + self.repo = repo + self.base_url = f" https://api.github.com/repos/{self.repo}" + + def get_commits(self, per_page=10): + url= f"{self.base_url}/commits" + params = {"per_page": per_page} + #manejo de errores + try: + response = requests.get(url, params = params) + response.raise_for_status() + except requests.exceptions.HTTPError as error: + raise SystemExit(error) from None + return response.json() + + def print_commits(self): + commits = self.get_commits() + if not commits: + return None + for index, commit in enumerate(commits): + #Disminuyo el tamaño de SHA + sha= commit.get("sha")[:7] + _commit = commit.get("commit") + author = _commit.get("author").get("name") + #Con el replace elimino el salto de linea que viene con message + message = _commit.get("message").strip().replace('\n','') + #Disminuyo el tamaño de fecha a YY-MM-DD + date = _commit.get("committer").get("date")[:10] + #Muestro el mensaje solicitado + print(f"Commit: {index+1}. {sha} | {author} | {message} | {date}") + + + +if __name__ == "__main__": + url= "mouredev/retos-programacion-2023" + github_service = GithubService(url) + github_service.print_commits() + \ No newline at end of file From 67327d27071266882bb9578b8b3486dd6f4b726b Mon Sep 17 00:00:00 2001 From: Othamae Date: Wed, 25 Oct 2023 11:28:25 +0200 Subject: [PATCH 0429/2103] Reto #42 - javascript --- .../javascript/othamae.js" | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/othamae.js" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/othamae.js" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/othamae.js" new file mode 100644 index 0000000000..69e007c4ab --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/othamae.js" @@ -0,0 +1,98 @@ +/* + * Crea una función que calcule el punto de encuentro de dos objetos en movimiento + * en dos dimensiones. + * - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento + * (vector de desplazamiento) por unidad de tiempo (también en formato xy). + * - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. + * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. + * - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. + */ + + +function meetingPoint(object1, object2){ + const dx = object2.x - object1.x + const vx = object1.vx - object2.vx + const dy = object2.y - object1.y + const vy = object1.vy - object2.vy + + const t = (dx * vx + dy * vy) / (vx * vx + vy * vy) + + if (t > 0){ + const x = object1.x + object1.vx * t + const y = object1.y + object1.vy * t + const relativeX = object2.x + object2.vx * t + const relativeY = object2.y + object2.vy * t + + const distance = Math.sqrt((x - relativeX) ** 2 + (y - relativeY) ** 2) + + if (distance < 0.00001) { + return `Time to meet: ${t}, Coordinates: (${x}, ${y})` + } + } + return ("They will never meet") +} + + +// Test: + +const object1={ + x:0, + y:0, + vx:1, + vy:1 +} + +const object2={ + x: 4, + y:0, + vx:0, + vy:1 +} + +const object3={ + x:0, + y:0, + vx:1, + vy:1 +} + +const object4={ + x: 2, + y:0, + vx:1, + vy:2 +} + +const object5={ + x:6, + y:6, + vx:-1, + vy:-1 +} + +const object6={ + x: 2, + y:0, + vx:1, + vy:2 +} + +const object7={ + x:6, + y:6, + vx:-1, + vy:-1 +} + +const object8={ + x: 2, + y:0, + vx:2, + vy:1 +} + + +console.log(meetingPoint(object1, object2)) // Time to meet: 4, Coordinates: (4, 4) +console.log(meetingPoint(object3, object4)) // They will never meet +console.log(meetingPoint(object5, object6)) // Time to meet: 2, Coordinates: (4, 4) +console.log(meetingPoint(object7, object8)) // They will never meet From 2f3b5187a9863effa384d7109c2d742948db86c4 Mon Sep 17 00:00:00 2001 From: Mario Ruano Date: Wed, 25 Oct 2023 11:29:25 +0200 Subject: [PATCH 0430/2103] Reto #42 - C# --- .../c#/mrf1989.cs" | 30 ++++++++----------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/mrf1989.cs" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/mrf1989.cs" index ed6cae3613..510179ff90 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/mrf1989.cs" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/mrf1989.cs" @@ -1,39 +1,33 @@ MovingObject objA = new(new(2, 2), new(1, 2)); MovingObject objB = new(new(5, 5), new(0, -1)); - CalculateMeetingPoint(objA, objB); + void CalculateMeetingPoint(MovingObject objA, MovingObject objB) { - if (objA.SpeedVector.X / objB.SpeedVector.X == objA.SpeedVector.Y / objB.SpeedVector.Y) + + var tx = (objA.Position.X - objB.Position.X) / (objB.SpeedVector.X - objA.SpeedVector.X); + var ty = (objA.Position.Y - objB.Position.Y) / (objB.SpeedVector.Y - objA.SpeedVector.Y); + + if (tx != ty) { Console.WriteLine("The objects are not located anywhere on the plane"); - return; } else { - int seconds = 0; - while (objA.PointPosition.X != objB.PointPosition.X && objA.PointPosition.Y != objB.PointPosition.Y) - { - seconds++; - - objA.PointPosition.X += objA.SpeedVector.X; - objA.PointPosition.Y += objA.SpeedVector.Y; - objB.PointPosition.X += objB.SpeedVector.X; - objB.PointPosition.Y += objB.SpeedVector.Y; - } - - Console.WriteLine($"The objects have been found at point {objA.PointPosition.ToString()} after {seconds} seconds"); + var t = tx; + Coord CutPoint = new(objA.Position.X + t * objA.SpeedVector.X, objA.Position.Y + t * objA.SpeedVector.Y); + Console.WriteLine($"The objects have been found at point {CutPoint} after {t} seconds"); } } class MovingObject { - public Coord PointPosition { get; set; } + public Coord Position { get; set; } public Coord SpeedVector { get; set; } - public MovingObject(Coord pointPosition, Coord speedVector) + public MovingObject(Coord position, Coord speedVector) { - PointPosition = pointPosition; + Position = position; SpeedVector = speedVector; } } From cbcd75a42cb35c27eee4d3e55fe78dbd8d954a01 Mon Sep 17 00:00:00 2001 From: patriciotrujilllo Date: Wed, 25 Oct 2023 10:48:20 -0300 Subject: [PATCH 0431/2103] Reto #28 resolve --- .../javascript/patriciotrujilllo.js" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/javascript/patriciotrujilllo.js" diff --git "a/Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/javascript/patriciotrujilllo.js" "b/Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/javascript/patriciotrujilllo.js" new file mode 100644 index 0000000000..fb57075512 --- /dev/null +++ "b/Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/javascript/patriciotrujilllo.js" @@ -0,0 +1,44 @@ +/* + * Crea una función que reciba una expresión matemática (String) + * y compruebe si es correcta. Retornará true o false. + * - Para que una expresión matemática sea correcta debe poseer + * un número, una operación y otro número separados por espacios. + * Tantos números y operaciones como queramos. + * - Números positivos, negativos, enteros o decimales. + * - Operaciones soportadas: + - * / % + * + * Ejemplos: + * "5 + 6 / 7 - 4" -> true + * "5 a 6" -> false + */ + +const tuplaOperaciones = ['+','-','*','/','%'] + +const expresionMatematica = (expresion) =>{ + const ToArray = expresion.split(' ') + + for(let i=0;i<=ToArray.length-3;i+=2){ + + if(ToArray.length<3) return false + + if(isNaN(Number(ToArray[i]))){ + return false + } + if(!tuplaOperaciones.includes(ToArray[i+1])){ + return false + } + if(isNaN(Number(ToArray[i+2]))){ + return false + } + return true + } +} + +console.log(expresionMatematica("5 + 6 / 7 - 4"))//---->true +console.log(expresionMatematica("5 * 6 / 7 + 4"))//---->true +console.log(expresionMatematica("5 * 6 / -7 + 4 % 3"))//---->true +console.log(expresionMatematica("-5 * 6 / 7 + 4 % 3"))//---->true +console.log(expresionMatematica("5 a 6")) //---->false +console.log(expresionMatematica("a * 6")) //---->false +console.log(expresionMatematica("5 x 6")) //---->false +console.log(expresionMatematica("5 * b")) //---->false \ No newline at end of file From c4aa943c613f8af5ee5ae51f7c4f03e9bd7ac12c Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Wed, 25 Oct 2023 17:01:16 +0200 Subject: [PATCH 0432/2103] Reto #42 - Java --- .../java/Qv1ko.java" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/java/Qv1ko.java" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/java/Qv1ko.java" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/java/Qv1ko.java" new file mode 100644 index 0000000000..804656260e --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/java/Qv1ko.java" @@ -0,0 +1,41 @@ +class Qv1ko { + + public static void main(String[] args) { + meetingPoint(new int[]{randomNumber(5), randomNumber(5)}, new int[]{randomNumber(5), randomNumber(5)}, new int[]{randomVector(2), randomVector(2)}, new int[]{randomVector(2), randomVector(2)}); + } + + private static void meetingPoint(int[] obj1, int[] obj2, int[] vectorObj1, int[] vectorObj2) { + + int time = 0; + + if (!parallel(vectorObj1, vectorObj2)) { + + while((obj1[0] != obj2[0] || obj1[1] != obj2[1]) && time < 180) { + obj1[0] += vectorObj1[0]; + obj1[1] += vectorObj1[1]; + obj2[0] += vectorObj2[0]; + obj2[1] += vectorObj2[1]; + time++; + } + + System.out.println((time == 180)? "Will not be found" : "Meets at " + obj1[0]+ "," + obj1[1] + " after " + time + " seconds"); + + } else { + System.out.println("Will not be found"); + } + + } + + private static boolean parallel(int[] vectorObj1, int[] vectorObj2) { + return (vectorObj1[0] * vectorObj2[1] == vectorObj1[1] * vectorObj2[0]); + } + + private static int randomNumber(int index) { + return (int)(Math.random() * (index + 1)); + } + + private static int randomVector(int index) { + return (int)(Math.random() * index) + 1; + } + +} From 345b6643c4c6e17ad3410e90b1ce5c509e9d5032 Mon Sep 17 00:00:00 2001 From: DHiebl <108873454+sirnas1983@users.noreply.github.com> Date: Wed, 25 Oct 2023 12:23:08 -0300 Subject: [PATCH 0433/2103] Reto #42 - python --- .../python/sirnas1983.py" | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" new file mode 100644 index 0000000000..5cb6fdf0b5 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" @@ -0,0 +1,83 @@ +def interseccion(coor1 : tuple, coor2 : tuple, vel1 : tuple, vel2 : tuple): + try: + a = vel1[0] + b = vel1[1] + c = vel2[0] + d = vel2[1] + + x0 = coor1[0] + y0 = coor1[1] + x1 = coor2[0] + y1 = coor2[1] + + if (a == b == 0) and (c == d == 0): + print("Ambos objetos estan en reposo") + else: + if (a*d - b*c) != 0: + + beta = (a*(y0 - y1) + b*(x1 - x0)) / (a*d - b*c) + if b != 0: + alpha = (y1 - y0 + beta * d) / b + elif a != 0: + alpha = (x1 - x0 + beta * c) / a + + x = x1 + beta * c + y = y1 + beta * d + + if alpha == beta: + print("Las objetos colisionan en", (x,y).__str__(),"transcurridos", alpha, "segundos") + else: + print(f"Si bien las trayectorias se intersectan en {(x,y).__str__()} no hay colision entre objetos.") + else: + alpha1 = None + alpha2 = None + if a - c != 0: + alpha1 = (x1 - x0) / (a - c) + if b - d != 0: + alpha2 = (y1 - y0) / (b - d) + if alpha1==alpha2 and alpha1 > 0: + x = x0 + alpha1 * a + y = y0 + alpha1 * b + print("Los objetos colisionan en", (x,y).__str__(),"transcurridos", alpha1, "segundos") + elif alpha1 < 0: + print("Los objetos son colineales pero tienen trayectorias opuestas") + elif (a==b==0) or (c==d==0): + print("El objeto en movimento no intersecta el objeto en reposo") + else: + print("Los objetos tienen trayectorias paralelas") + except: + print("Debe ingresar valores de coordenadas y velocidades como tuplas") + +###### PRUEBAS ###### + +coor1 = (0,0) +v1 = (-4,-4) +coor2 = (2,2) +v2 = (-6,-6) +interseccion(coor1, coor2, v1, v2) + +coor1 = (0,0) +v1 = (0,0) +coor2 = (3,2) +v2 = (-6,-6) +interseccion(coor1, coor2, v1, v2) + +coor1 = (1,1) +v1 = (-4,-4) +coor2 = (2,2) +v2 = (-6,-6) +interseccion(coor1, coor2, v1, v2) + +coor1 = (10,8) +v1 = (7,.5) +coor2 = (4,0) +v2 = (-0.5,0.5) +interseccion(coor1, coor2, v1, v2) + +coor1 = (0,0) +v1 = (4,4) +coor2 = (4,0) +v2 = (0,4) + +interseccion(coor1, coor2, v1, v2) +interseccion(4,3,1,6) From 2c1532f2d8d12b952f290d55f6cbb2a543c0b44f Mon Sep 17 00:00:00 2001 From: jarkillo <107489788+jarkillo@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:40:19 +0200 Subject: [PATCH 0434/2103] Reto #1 - Python --- .../python/jarkillo.py" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/jarkillo.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/jarkillo.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/jarkillo.py" new file mode 100644 index 0000000000..0bac182ffc --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/jarkillo.py" @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Oct 25 17:23:05 2023 + +@author: Jarkillo +""" +''' + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") +''' + +leet_lang = { + + 'a': '4', + 'b': 'I3', + 'c': '[', + 'd': ')', + 'e': '3', + 'f': '|=', + 'g': '&', + 'h': '#', + 'i': '1', + 'j': '_|', + 'k': '>|', + 'l': '1', + 'm': '/\/\\', + 'n': '^/', + 'o': '0', + 'p': '|*', + 'q': '(_,)', + 'r': 'I2', + 's': '5', + 't': '7', + 'u': '(_)', + 'v': '\/', + 'w': '\/\/', + 'x': '><', + 'y': 'j', + 'z': '2', + '1': 'L', + '2': 'Z', + '3': 'E', + '4': 'A', + '5': 'S', + '6': 'b', + '7': 'T', + '8': 'B', + '9': 'g', + '0': 'o' +} + + +def leet(text): + text = text.lower() + for letra in text: + if letra in leet_lang: + text = text.replace(letra, leet_lang[letra]) + return text + + +print(leet('Hola, me llamo Jarkillo y soy un hacker')) +texto = input(leet('Introduce un texto para transformarlo: ')) + +texto = leet(texto) +print(texto) From 889b6a770916275fd3c4f309ca26f38dfb421142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Vidal?= <76066672+VicaDev@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:45:38 +0200 Subject: [PATCH 0435/2103] Reto #1 - Kotlin --- .../kotlin/vicadev.kt" | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/kotlin/vicadev.kt" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/kotlin/vicadev.kt" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/kotlin/vicadev.kt" new file mode 100644 index 0000000000..7f60f24040 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/kotlin/vicadev.kt" @@ -0,0 +1,38 @@ +fun main() { + print("Introduce un texto: ") + val text = readln().lowercase() + + val leetMap = mapOf( + 'a' to "4", + 'b' to "|3", + 'c' to "[", + 'd' to ")", + 'e' to "3", + 'f' to "|=", + 'g' to "&", + 'h' to "#", + 'i' to "1", + 'j' to ",_|", + 'k' to ">|", + 'l' to "1", + 'm' to "/\\/\\", + 'n' to "^/", + 'o' to "0", + 'p' to "|*", + 'q' to "(_,)", + 'r' to "|2", + 's' to "5", + 't' to "7", + 'u' to "(_)", + 'v' to "\\/", + 'w' to "\\/\\/", + 'x' to "><", + 'y' to "j", + 'z' to "2", + ' ' to " " + ) + + var textHacker = "" + text.forEach { note -> textHacker += leetMap[note] } + println(textHacker) +} \ No newline at end of file From e9d239f2db1153ed16f216a663437b589847debe Mon Sep 17 00:00:00 2001 From: jarkillo <107489788+jarkillo@users.noreply.github.com> Date: Wed, 25 Oct 2023 18:03:26 +0200 Subject: [PATCH 0436/2103] Reto #2 - Python --- .../python/jarkillo.py | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/jarkillo.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/jarkillo.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/jarkillo.py new file mode 100644 index 0000000000..334dff9dfb --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/jarkillo.py @@ -0,0 +1,81 @@ +''' +/* + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ + ''' + + +import os +import random + + +def tenis(secuencia): + + puntuacion = { + '0': 'Love', + '1': '15', + '2': '30', + '3': '40' + } + + p1 = 0 + p2 = 0 + + for punto in secuencia: + + if punto == 'P1': + p1 += 1 + elif punto == 'P2': + p2 += 1 + else: + print('Error en la secuencia') + return + + if p1 == 4 and p2 == 4: + print('Deuce') + empate = True + + if p1 == 4 or p2 == 4: + if empate == False: + print('Ha ganado el P1' if p1 == 4 else 'Ha ganado el P2') + return + else: + print('Ventaja P1' if p1 == 4 else 'Ventaja P2') + p1 -= 1 + p2 -= 1 + return + + else: + print(puntuacion[str(p1)] + ' - ' + puntuacion[str(p2)]) + empate = False + if p1 < 4 and p2 < 4: + print('Fin del tiempo') + print('Ha ganado el P1' if p1 > p2 else 'Ha ganado el P2') + return + +# Metemos secuencias Random + + +secuencia = [] +for i in range(15): + secuencia.append(random.choice(['P1', 'P2'])) + +os.system('PAUSE') +print(secuencia) +os.system('PAUSE') +tenis(secuencia) From a3710ef99726c3d934f1f2ecde12d52f21ed463e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Vidal?= <76066672+VicaDev@users.noreply.github.com> Date: Wed, 25 Oct 2023 18:11:29 +0200 Subject: [PATCH 0437/2103] Reto #2 - Kotlin --- .../kotlin/vicadev.kt | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/kotlin/vicadev.kt diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/kotlin/vicadev.kt b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/kotlin/vicadev.kt new file mode 100644 index 0000000000..173c0e3152 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/kotlin/vicadev.kt @@ -0,0 +1,40 @@ +fun main() { + println("-------Partido de Tenis------- \n") + play() +} + +fun points(point: Int): String { + return when(point) { + 1 -> "15" + 2 -> "30" + 3 -> "40" + else -> "Love" + } +} + +fun random(start: Int, end: Int): Int { + require(start <= end) {"No válido"} + return (start..end).random() +} + +fun play() { + var playerOne = 0 + var playerTwo= 0 + + while (playerTwo < 3 && playerOne < 3) { + if (random(1, 2) == 1) playerOne++ + else playerTwo++ + + println("Player 1: ${points(playerOne)} -- Player 2: ${points(playerTwo)}") + + Thread.sleep(1000) + } + + if (playerOne == playerTwo) { + println("Empate") + return + } + if (playerOne > playerTwo) println("\n-----¡¡Ganador Player 1!!-----") + else println("\n-----¡¡Ganador Player 2!!-----") +} + From 3c9392471cac45a5dee92900388861ccd3acf617 Mon Sep 17 00:00:00 2001 From: valero Date: Wed, 25 Oct 2023 18:26:58 +0200 Subject: [PATCH 0438/2103] Reto #42 - python --- .../python/valevil.py" | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil.py" new file mode 100644 index 0000000000..0d91adaad3 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil.py" @@ -0,0 +1,48 @@ +def collision( + r: tuple[float, float], + s: tuple[float, float], + vr: tuple[float, float], + vs: tuple[float, float], +): + '''The function `collision` calculates the collision point and time between two moving objects, given + their initial positions and velocities, and prints them to the user. + + Parameters + ---------- + The parameters `r` and `s` represent the initial position of objects R and S, given as a tuple of two floats (x,y). + + The parameters `vr` and `vs` represent the velocity of objects R and A, where `vr[0]` is the velocity in the x-direction and `vr[1]` is the velocity in the y-direction. + ''' + + t_0 = (s[0] - r[0]) / (vr[0] - vs[0]) + t_1 = (s[1] - r[1]) / (vr[1] - vs[1]) + if (t := t_0) == t_1: + c = (s[0] + vs[0] * t, s[1] + vs[1] * t) + print(f"Collision at x = {c[0]}, y = {c[1]} at t = {t}.") + else: + print(f"Objects won't collide.") + + +def get_input(var: str): + while True: + try: + x = float(input(f"\t- {var}: ").strip()) + return x + except ValueError as e: + print(f"Please, enter a number.") + + +def get_coord(): + x = get_input("x") + y = get_input("y") + vx = get_input("vx") + vy = get_input("vy") + return (x, y), (vx, vy) + + +if __name__ == "__main__": + print("Write the initial conditions of the first object.") + r, vr = get_coord() + print("Write the initial conditions of the second object.") + s, vs = get_coord() + collision(r, s, vr, vs) From 6e70f2fa91b3407515670a27dc1c1ee7b38e05ae Mon Sep 17 00:00:00 2001 From: valero Date: Wed, 25 Oct 2023 18:55:03 +0200 Subject: [PATCH 0439/2103] solved some cases where ZeroDivisionError may rise --- .../python/valevil.py" | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil.py" index 0d91adaad3..150ad6ac9d 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil.py" @@ -14,9 +14,32 @@ def collision( The parameters `vr` and `vs` represent the velocity of objects R and A, where `vr[0]` is the velocity in the x-direction and `vr[1]` is the velocity in the y-direction. ''' - t_0 = (s[0] - r[0]) / (vr[0] - vs[0]) - t_1 = (s[1] - r[1]) / (vr[1] - vs[1]) - if (t := t_0) == t_1: + try: # What if some coord velocities are equal or none + t_0 = (s[0] - r[0]) / (vr[0] - vs[0]) + if t_0 < 0: # If they would collide in the past then we don't care + print(f"Objects won't collide.") + return + except: + if s[0] != r[0]: # distance between them will be constant in time + print(f"Objects won't collide.") + return + t_0 = "any" # If they are in the same coord time doesn't matter + + try: + t_1 = (s[1] - r[1]) / (vr[1] - vs[1]) + if t_1 < 0: + print(f"Objects won't collide.") + return + except: + if s[1] != r[1]: + print(f"Objects won't collide.") + return + else: t_1 = t_0 + + if t_0 == t_1 or t_0 == "any": + if (t := t_1) == "any": # This would mean they both have the same IC + print("The objects share their movement.") + return c = (s[0] + vs[0] * t, s[1] + vs[1] * t) print(f"Collision at x = {c[0]}, y = {c[1]} at t = {t}.") else: From 212aee6c4f823ecde4155a13f4b86c33a08d28d7 Mon Sep 17 00:00:00 2001 From: valero Date: Wed, 25 Oct 2023 18:59:09 +0200 Subject: [PATCH 0440/2103] changed filename to be the same as user on github --- .../python/valevil.py" | 71 ------------------- 1 file changed, 71 deletions(-) delete mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil.py" deleted file mode 100644 index 150ad6ac9d..0000000000 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil.py" +++ /dev/null @@ -1,71 +0,0 @@ -def collision( - r: tuple[float, float], - s: tuple[float, float], - vr: tuple[float, float], - vs: tuple[float, float], -): - '''The function `collision` calculates the collision point and time between two moving objects, given - their initial positions and velocities, and prints them to the user. - - Parameters - ---------- - The parameters `r` and `s` represent the initial position of objects R and S, given as a tuple of two floats (x,y). - - The parameters `vr` and `vs` represent the velocity of objects R and A, where `vr[0]` is the velocity in the x-direction and `vr[1]` is the velocity in the y-direction. - ''' - - try: # What if some coord velocities are equal or none - t_0 = (s[0] - r[0]) / (vr[0] - vs[0]) - if t_0 < 0: # If they would collide in the past then we don't care - print(f"Objects won't collide.") - return - except: - if s[0] != r[0]: # distance between them will be constant in time - print(f"Objects won't collide.") - return - t_0 = "any" # If they are in the same coord time doesn't matter - - try: - t_1 = (s[1] - r[1]) / (vr[1] - vs[1]) - if t_1 < 0: - print(f"Objects won't collide.") - return - except: - if s[1] != r[1]: - print(f"Objects won't collide.") - return - else: t_1 = t_0 - - if t_0 == t_1 or t_0 == "any": - if (t := t_1) == "any": # This would mean they both have the same IC - print("The objects share their movement.") - return - c = (s[0] + vs[0] * t, s[1] + vs[1] * t) - print(f"Collision at x = {c[0]}, y = {c[1]} at t = {t}.") - else: - print(f"Objects won't collide.") - - -def get_input(var: str): - while True: - try: - x = float(input(f"\t- {var}: ").strip()) - return x - except ValueError as e: - print(f"Please, enter a number.") - - -def get_coord(): - x = get_input("x") - y = get_input("y") - vx = get_input("vx") - vy = get_input("vy") - return (x, y), (vx, vy) - - -if __name__ == "__main__": - print("Write the initial conditions of the first object.") - r, vr = get_coord() - print("Write the initial conditions of the second object.") - s, vs = get_coord() - collision(r, s, vr, vs) From f43b2cccf1e7bc8c468630666dd12034b0b0d27a Mon Sep 17 00:00:00 2001 From: valero Date: Wed, 25 Oct 2023 19:00:51 +0200 Subject: [PATCH 0441/2103] Correction on filename --- .../python/Swamptk.py" | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/Swamptk.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/Swamptk.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/Swamptk.py" new file mode 100644 index 0000000000..150ad6ac9d --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/Swamptk.py" @@ -0,0 +1,71 @@ +def collision( + r: tuple[float, float], + s: tuple[float, float], + vr: tuple[float, float], + vs: tuple[float, float], +): + '''The function `collision` calculates the collision point and time between two moving objects, given + their initial positions and velocities, and prints them to the user. + + Parameters + ---------- + The parameters `r` and `s` represent the initial position of objects R and S, given as a tuple of two floats (x,y). + + The parameters `vr` and `vs` represent the velocity of objects R and A, where `vr[0]` is the velocity in the x-direction and `vr[1]` is the velocity in the y-direction. + ''' + + try: # What if some coord velocities are equal or none + t_0 = (s[0] - r[0]) / (vr[0] - vs[0]) + if t_0 < 0: # If they would collide in the past then we don't care + print(f"Objects won't collide.") + return + except: + if s[0] != r[0]: # distance between them will be constant in time + print(f"Objects won't collide.") + return + t_0 = "any" # If they are in the same coord time doesn't matter + + try: + t_1 = (s[1] - r[1]) / (vr[1] - vs[1]) + if t_1 < 0: + print(f"Objects won't collide.") + return + except: + if s[1] != r[1]: + print(f"Objects won't collide.") + return + else: t_1 = t_0 + + if t_0 == t_1 or t_0 == "any": + if (t := t_1) == "any": # This would mean they both have the same IC + print("The objects share their movement.") + return + c = (s[0] + vs[0] * t, s[1] + vs[1] * t) + print(f"Collision at x = {c[0]}, y = {c[1]} at t = {t}.") + else: + print(f"Objects won't collide.") + + +def get_input(var: str): + while True: + try: + x = float(input(f"\t- {var}: ").strip()) + return x + except ValueError as e: + print(f"Please, enter a number.") + + +def get_coord(): + x = get_input("x") + y = get_input("y") + vx = get_input("vx") + vy = get_input("vy") + return (x, y), (vx, vy) + + +if __name__ == "__main__": + print("Write the initial conditions of the first object.") + r, vr = get_coord() + print("Write the initial conditions of the second object.") + s, vs = get_coord() + collision(r, s, vr, vs) From 96a7ffefa1ee00c6835bfee2e10a12ab569039d2 Mon Sep 17 00:00:00 2001 From: ycanas Date: Wed, 25 Oct 2023 12:18:00 -0500 Subject: [PATCH 0442/2103] Reto #16 - Python --- .../python/ycanas.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Retos/Reto #36 - PERMUTACIONES [Media]/python/ycanas.py diff --git a/Retos/Reto #36 - PERMUTACIONES [Media]/python/ycanas.py b/Retos/Reto #36 - PERMUTACIONES [Media]/python/ycanas.py new file mode 100644 index 0000000000..03791c5d6d --- /dev/null +++ b/Retos/Reto #36 - PERMUTACIONES [Media]/python/ycanas.py @@ -0,0 +1,22 @@ +def permute(word): + if len(word) == 1: + return word + + permutations = [] + + for i in range(len(word)): + current = word[i] + rest = word[:i] + word[i + 1:] + + _permutations = permute(rest) + + for permut in _permutations: + permutations.append(current + permut) + + return permutations + + +permutations = permute("sol") + +for permut in permutations: + print(permut) From 7ed978557d65b1161b4d5814196244d3ffe98349 Mon Sep 17 00:00:00 2001 From: mstrnilsson Date: Wed, 25 Oct 2023 23:14:53 +0200 Subject: [PATCH 0443/2103] reto #41 - python --- .../python/mstrnilsson.py" | 247 ++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100755 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mstrnilsson.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mstrnilsson.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mstrnilsson.py" new file mode 100755 index 0000000000..30b17676b6 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mstrnilsson.py" @@ -0,0 +1,247 @@ +import random + +class bcolors: + HEADER = '\033[95m' + OKBLUE = '\033[94m' + OKCYAN = '\033[96m' + OKGREEN = '\033[92m' + WARNING = '\033[93m' + FAIL = '\033[91m' + ENDC = '\033[0m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' + +print_matrix = [] +door_coor = [] +ghost_coor1 = [] +ghost_coor2 = [] +lolli_coor = [] +next_coor = [] +now_coor = [] +line = [] + +row=0 +column=0 +row_door=0 +column_door=0 +square = "🔳" +door = "🚪" +ghost = "👻" +up_arrow = "🔼" +down_arrow = "🔽" +left_arrow = "◀️" +right_arrow = "▶️" +lollipop = "🍭" +house = "🏚️" +ok = "✅" +up = 'n' +down = 's' +left = 'o' +right = 'e' +arrows = ['n', 's', 'e', 'o'] + +key = '' +finish = '' + +def intro(): + txt1 = ' 👻 LA CASA ENCANTADA 👻 ' + x = txt1.center(150, '#') + print(f'\n\n{bcolors.HEADER}{bcolors.BOLD}{x}{bcolors.ENDC}\n') + input() + txt2 = ' Te encuentas explorando una 🏚️ mansión abandonada llena de habitaciones. Elige la dirección con las teclas N_orte S_ur E_ste O_este ' + print(txt2.center(150, '#')) + input() + txt2 = ' En cada habitación tendrás que resolver un pregunta para poder avanzar a la siguiente ' + print(txt2.center(150, '#')) + input() + txt3 = ' Tu misión es encontrar la habitación de los dulces 🍭 ' + print(txt3.center(150, '#')) + input() + txt4 = ' ¡¡¡¡ 🎃 SUERTE 🎃 !!!! ' + print(txt4.center(150, '#')) + input() + + +def random_room(): + for i in range(1): + random_row = random.randrange(0,4) + random_column = random.randrange(0,4) + return random_row, random_column + +def paint_game(row, column): + door_coor.extend([row, column]) + row, column = random_room() + while [row, column] == door_coor: + row, column = random_room() + lolli_coor.extend([row, column]) + row, column = random_room() + while [row, column] == lolli_coor or [row, column] == door_coor: + row, column = random_room() + ghost_coor1.extend([row, column]) + row, column = random_room() + while [row, column] == ghost_coor1 or [row, column] == lolli_coor or [row, column] == door_coor: + row, column = random_room() + ghost_coor2.extend([row, column]) + + return door_coor, lolli_coor, ghost_coor1, ghost_coor2 + + +def paint_matrix(door_coor): + + for i in range(4): + print_matrix.append([]) + for j in range(4): + if [i, j] == door_coor: + print_matrix[i].append(door) + now_coor = door_coor.copy() + else: + print_matrix[i].append(square) + for row in range(4): + for column in range(4): + print(print_matrix[row][column], end = '') + print() + return now_coor + + + +def status(): + + + key = input('\nHacia que habitación quieres moverte?\n').lower() + + if key == up: + print(f'{up_arrow}') + if key == down: + print(f'{down_arrow}') + if key == right: + print(f'{right_arrow}') + if key == left: + print(f'{left_arrow}') + + + if key in arrows: + if forbidden(key) == key: + return key + else: + return None + else: + return None + +def forbidden(key): + + + if (now_coor[0] == 0 and key == up): + print(f'{bcolors.WARNING} ❌ No puedes moverte en esa dirección{bcolors.ENDC}') + return None + + elif (now_coor[1] == 0 and key == left): + print(f'{bcolors.WARNING} ❌ No puedes moverte en esa dirección{bcolors.ENDC}') + return None + + elif (now_coor[0] == 3 and key == down): + print(f'{bcolors.WARNING} ❌ No puedes moverte en esa dirección{bcolors.ENDC}') + return None + + elif (now_coor[1] == 3 and key == right): + print(f'{bcolors.WARNING} ❌ No puedes moverte en esa dirección{bcolors.ENDC}') + return None + else: + return key + +def move_status(key): + + next_coor = now_coor.copy() + + if key == up: + next_coor[0] -= 1 + + if key == down: + next_coor[0] += 1 + + if key == right: + next_coor[1] += 1 + + if key == left: + next_coor[1] -= 1 + return next_coor + + +def wich_question(finish): + + if next_coor == ghost_coor1: + print(f'\n{bcolors.WARNING}👻👻 Has encontrado un fantasmico debes superar dos preguntas para entrar en la habitación 👻👻{bcolors.ENDC}\n') + input() + times(2) + print(f'\n{bcolors.OKGREEN}Puedes moverte de habitación. Pulsa ↩️{bcolors.ENDC}\n') + input() + print_matrix[ghost_coor1[0]][ghost_coor1[1]] = ghost + now_coor = next_coor.copy() + return now_coor, finish + + elif next_coor == ghost_coor2: + print(f'\n{bcolors.WARNING}👻👻 Has encontrado un fantasmico debes superar dos preguntas para entrar en la habitación 👻👻{bcolors.ENDC}\n') + input() + times(2) + print(f'\n{bcolors.OKGREEN}Puedes moverte de habitación{bcolors.ENDC}\n') + input() + print_matrix[ghost_coor2[0]][ghost_coor2[1]] = ghost + now_coor = next_coor.copy() + return now_coor, finish + + + elif next_coor == lolli_coor: + times(1) + print(f"{bcolors.OKGREEN}\n######### #########\n######### #########\n######### 🥳 🎉 Genial!! Has encontrado la habitación de los dulces 🍭🥳 🎉 #########\n######### #########\n######### #########\n{bcolors.ENDC}") + input() + print_matrix[lolli_coor[0]][lolli_coor[1]] = lollipop + now_coor = next_coor.copy() + finish = 'lollipop' + return now_coor, finish + + else: + times(1) + print(f'\n{bcolors.OKGREEN}Puedes moverte de habitación. Pulsa ↩️{bcolors.ENDC}\n') + input() + print_matrix[next_coor[0]][next_coor[1]] = ok + now_coor = next_coor.copy() + return now_coor, finish + + +def times(i:int): + while i != 0: + eval_question() + i -= 1 + +def eval_question(): + n1 = random.randrange(3,10) + n2 = random.randrange(3,10) + + answer_input = input(f'\n{bcolors.OKBLUE}¿Cuánto es {n1} x {n2}? = {bcolors.ENDC}') + answer = (n1*n2) + + if answer_input.isnumeric() and int(answer_input) == answer: + print(f'\n{bcolors.OKGREEN}Correcto!! {bcolors.ENDC}') + else: + print(f'\n{bcolors.FAIL} ❌ Lo siento respuesta incorrecta{bcolors.ENDC}') + times(1) + + +try: + intro() + row, column = random_room() + door_coor, lolli_coor, ghost_coor1, ghost_coor2 = paint_game(row, column) + now_coor = paint_matrix(door_coor) + while finish == '': + key = status() + + while key == None: + key = status() + + next_coor = move_status(key) + forbidden(key) + now_coor, finish = wich_question(finish) + + paint_matrix(door_coor) +except KeyboardInterrupt: + print('\nbye!!') + SystemExit From f927ee6532806887187247dbebafcb13b3e7b114 Mon Sep 17 00:00:00 2001 From: DHiebl <108873454+sirnas1983@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:44:37 -0300 Subject: [PATCH 0444/2103] Reto #42 - python Agregado punta de partida igual a ambos objetos y opcion de graficar trayectoria e impacto --- .../python/sirnas1983.py" | 106 +++++++++++++----- 1 file changed, 79 insertions(+), 27 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" index 5cb6fdf0b5..9a69083366 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" @@ -1,54 +1,100 @@ -def interseccion(coor1 : tuple, coor2 : tuple, vel1 : tuple, vel2 : tuple): +from matplotlib import pyplot as plt + + +def interseccion(coor1 : tuple, coor2 : tuple, vel1 : tuple, vel2 : tuple, plot_graph : bool = False): + ''' + Funcion que imprime por pantalla si existe o no colision de 2 objetos en el plano + y retorna True en caso de existir y False en caso que no + + Deben ingresarse las coordenadas de partida de ambos objetos como tuplas y sus + velocidades en x e y tambien como tuplas. Para que imprima los graficos pase True como 5to argumento. + ''' + colision = False try: - a = vel1[0] - b = vel1[1] - c = vel2[0] - d = vel2[1] + # Asigno el valor de las tuplas a variables individuales + vx1 = vel1[0] + vy1 = vel1[1] + vx2 = vel2[0] + vy2 = vel2[1] x0 = coor1[0] y0 = coor1[1] x1 = coor2[0] y1 = coor2[1] - if (a == b == 0) and (c == d == 0): + colision = False + + # Verifico que ambos objetos no esten en reposo + if (vx1 == vy1 == 0) and (vx2 == vy2 == 0): print("Ambos objetos estan en reposo") + # Verifico la condicion de que no parten del mismo punto + elif (x0 == x1) and (y0 == y1): + print("Ambos objetos estan colisionados antes de iniciar su movimiento") + colision = True else: - if (a*d - b*c) != 0: + # Verifico que ambas trayectorias no sean coplanares + if (vx1*vy2 - vy1*vx2) != 0: - beta = (a*(y0 - y1) + b*(x1 - x0)) / (a*d - b*c) - if b != 0: - alpha = (y1 - y0 + beta * d) / b - elif a != 0: - alpha = (x1 - x0 + beta * c) / a + # Calculo alpha y beta de sus ecuaciones vectoriales + beta = (vx1*(y0 - y1) + vy1*(x1 - x0)) / (vx1*vy2 - vy1*vx2) + if vy1 != 0: + alpha = (y1 - y0 + beta * vy2) / vy1 + elif vx1 != 0: + alpha = (x1 - x0 + beta * vx2) / vx1 - x = x1 + beta * c - y = y1 + beta * d + x = x1 + beta * vx2 + y = y1 + beta * vy2 + # Si alpha y beta son iguales (tiempo) hay colision, sino solamente interseccion de trayectorias if alpha == beta: print("Las objetos colisionan en", (x,y).__str__(),"transcurridos", alpha, "segundos") + colision = True else: print(f"Si bien las trayectorias se intersectan en {(x,y).__str__()} no hay colision entre objetos.") else: + # Hago el analisis puntual de trayectorias coplanares alpha1 = None alpha2 = None - if a - c != 0: - alpha1 = (x1 - x0) / (a - c) - if b - d != 0: - alpha2 = (y1 - y0) / (b - d) - if alpha1==alpha2 and alpha1 > 0: - x = x0 + alpha1 * a - y = y0 + alpha1 * b + # Para ello calculo la constante del vector + if vx1 - vx2 != 0: + alpha1 = (x1 - x0) / (vx1 - vx2) + elif vy1 - vy2 != 0: + alpha2 = (y1 - y0) / (vy1 - vy2) + else: + print("Los objetos van en la misma direccion pero uno igual o mas lento que el otro") + alpha2 = 1 + alpha1 = alpha2 + 1 + # La constante del vector debe ser igual para ambos y mayor a 0 + if alpha1 == alpha2 > 0: + x = x0 + alpha1 * vx1 + y = y0 + alpha1 * vy1 print("Los objetos colisionan en", (x,y).__str__(),"transcurridos", alpha1, "segundos") + colision = True elif alpha1 < 0: - print("Los objetos son colineales pero tienen trayectorias opuestas") - elif (a==b==0) or (c==d==0): + print("Los objetos son colineales pero van en direcciones opuetas") + elif (vx1 == vy1 == 0) or (vx2 == vy2 == 0): print("El objeto en movimento no intersecta el objeto en reposo") - else: - print("Los objetos tienen trayectorias paralelas") + # Si existe colision pregunto si quieren ver el grafico + if colision and plot_graph: + plt.axhline(0, color='black', linewidth=0.5) + plt.axvline(0, color='black', linewidth=0.5) + plt.scatter(x, y, color='red', linewidths=10, label='Punto de encuentro') + plt.scatter(x0, y0, color='blue', linewidths=5, label='Salida objeto 1') + plt.scatter(x1, y1, color='green', linewidths=5, label='Salida objeto 2') + plt.plot([x0, x], [y0, y], color='blue', ls="-." ) + plt.plot([x1, x], [y1, y], color='green', ls="-.") + plt.legend() + plt.xlabel('Eje X') + plt.ylabel('Eje Y') + plt.title('Punto de Colision') + plt.grid(True) + plt.show() + return colision except: print("Debe ingresar valores de coordenadas y velocidades como tuplas") + return colision -###### PRUEBAS ###### +##### PRUEBAS ###### coor1 = (0,0) v1 = (-4,-4) @@ -78,6 +124,12 @@ def interseccion(coor1 : tuple, coor2 : tuple, vel1 : tuple, vel2 : tuple): v1 = (4,4) coor2 = (4,0) v2 = (0,4) +interseccion(coor1, coor2, v1, v2) +coor1 = (0,0) +v1 = (4,4) +coor2 = (2,2) +v2 = (4,4) interseccion(coor1, coor2, v1, v2) -interseccion(4,3,1,6) + +interseccion(4,3,1,6) From 0d116384811694cb34aaa3938d26a1441e422e73 Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Wed, 25 Oct 2023 16:32:37 -0700 Subject: [PATCH 0445/2103] reto #42 - python --- .../python/KevinED11.py" | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" new file mode 100644 index 0000000000..bb777aaaaf --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" @@ -0,0 +1,105 @@ +from typing import NamedTuple, Protocol, TypeAlias +import math + + +Number: TypeAlias = float | int + + +class Coordinates(NamedTuple): + x: Number + y: Number + + +class Velocity(Coordinates): + pass + + +class Object(NamedTuple): + start_point: Coordinates + velocity: Velocity + + +class Objects(NamedTuple): + object1: Object + object2: Object + + +def calculate_diff_coordinates( + obj1_coords: Coordinates, obj2_coords: Coordinates +) -> Coordinates: + diff_x = obj2_coords.x - obj1_coords.x + diff_y = obj2_coords.y - obj1_coords.y + + return Coordinates(x=diff_x, y=diff_y) + + +def calculate_diff_velocity(obj1_vel: Velocity, obj2_vel: Velocity) -> Velocity: + diff_vel_x = obj2_vel.x - obj1_vel.x + diff_vel_y = obj2_vel.y - obj1_vel.y + + return Velocity(x=diff_vel_x, y=diff_vel_y) + + +def calculate_time_to_intersection( + diff_coordinates: Coordinates, diff_velocity: Velocity +) -> float: + time_to_intersection = math.sqrt( + diff_coordinates.x**2 + diff_coordinates.y**2 + ) / math.sqrt(diff_velocity.x**2 + diff_velocity.y**2) + + return time_to_intersection + + +def calculate_intersection_point( + object1: Object, time_to_intersection: float +) -> Coordinates: + intersection_x = object1.start_point.x + object1.velocity.x * time_to_intersection + intersection_y = object1.start_point.y + object1.velocity.y * time_to_intersection + + return Coordinates(x=intersection_x, y=intersection_y) + + +def is_same_direction(diff_velocity: Velocity) -> bool: + return diff_velocity.x == 0 and diff_velocity.y == 0 + + +def calculate_intersection_point_in_motion(objects: Objects) -> None: + diff_coordinates: Coordinates = calculate_diff_coordinates( + objects.object1.start_point, objects.object2.start_point + ) + diff_velocity: Velocity = calculate_diff_velocity( + objects.object1.velocity, objects.object2.velocity + ) + + if is_same_direction(diff_velocity): + print("Los objetos o puntos de encuentro son paralelos y nunca se encuentran.") + return + + time_to_intersection = calculate_time_to_intersection( + diff_coordinates, diff_velocity + ) + intersection_point = calculate_intersection_point( + objects.object1, time_to_intersection + ) + intersection_x = intersection_point.x + intersection_y = intersection_point.y + + print(f"El punto de encuentro es ({intersection_x}, {intersection_y})") + print(f"El tiempo que les tomará encontrarse es {time_to_intersection}") + + +class MotionCalculatorFn(Protocol): + def __call__(self, objects: Objects) -> None: + ... + + +def execute(motion_calculator: MotionCalculatorFn, objects: Objects) -> None: + motion_calculator(objects=objects) + + +if __name__ == "__main__": + object1 = Object(start_point=Coordinates(x=2, y=2), velocity=Velocity(x=2, y=2)) + object2 = Object(start_point=Coordinates(x=2, y=2), velocity=Velocity(x=2, y=2)) + objects = Objects(object1=object1, object2=object2) + + execute(motion_calculator=calculate_intersection_point_in_motion, objects=objects) From fe235cf820c3eda0948104d16c6c6a7001b554f2 Mon Sep 17 00:00:00 2001 From: jarkillo <107489788+jarkillo@users.noreply.github.com> Date: Thu, 26 Oct 2023 02:13:43 +0200 Subject: [PATCH 0446/2103] Reto #3 - Python --- .../python/jarkillo.py" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/jarkillo.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/jarkillo.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/jarkillo.py" new file mode 100644 index 0000000000..83cff2ba40 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/jarkillo.py" @@ -0,0 +1,44 @@ +'''/* + * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + * Podrás configurar generar contraseñas con los siguientes parámetros: + * - Longitud: Entre 8 y 16. + * - Con o sin letras mayúsculas. + * - Con o sin números. + * - Con o sin símbolos. + * (Pudiendo combinar todos estos parámetros entre ellos) + */''' + +import random + + +def generar_contrasena(N): + mayusculas = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P', 'Q', 'R', 'S', + 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] + minusculas = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', 'x', 'y', 'z'] + simbolos = ['!', '#', '$', '&', '/', + '(', ')', '=', '?', '¿', '¡', '}', '{', '[', ']', '*', '+', '-', '_', '.'] + numeros = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] + + caracteres = mayusculas + minusculas + simbolos + numeros + + contrasena = [] + + for i in range(N): + caracter_random = random.choice(caracteres) + contrasena.append(caracter_random) + + contrasena = ''.join(contrasena) + return contrasena + + +print('Bienvenido al generador de contraseñas') +N = input('¿De cuantos caracteres quieres la contraseña? (Recomendado entre 8 y 16)') +try: + N = int(N) + generar_contrasena = generar_contrasena(N) + print('\nTu nueva contraseña es: ' + generar_contrasena) + +except: + print('Debes introducir un número') + exit() From 0171d9399fdf99ce15352ce55cee32cd49cf3804 Mon Sep 17 00:00:00 2001 From: jarkillo <107489788+jarkillo@users.noreply.github.com> Date: Thu, 26 Oct 2023 02:21:39 +0200 Subject: [PATCH 0447/2103] Reto #4 - Python --- .../python/jarkillo.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/jarkillo.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/jarkillo.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/jarkillo.py new file mode 100644 index 0000000000..7b3b407aa9 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/jarkillo.py @@ -0,0 +1,39 @@ +'''/* + * Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. + * Ejemplos: + * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" + * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" + */''' + + +def primo_fibonacci_par(numero): + # Comprobamos si es primo + if numero > 1: + for i in range(2, numero): + if numero % i == 0: + print(f'{numero} no es primo') + break + else: + print(f'{numero} es primo') + else: + print(f'{numero} no es primo') + + # Comprobamos si es fibonacci + a = 0 + b = 1 + while b < numero: + a, b = b, a + b # a = b, b = a + b + if b == numero: + print(f'{numero} es fibonacci') + else: + print(f'{numero} no es fibonacci') + + # Comprobamos si es par + if numero % 2 == 0: + print(f'{numero} es par') + else: + print(f'{numero} es impar') + + +numero = int(input('Introduce un número: ')) +primo_fibonacci_par(numero) From 92db1d1536aff9310b20b7e9201df8b05652473c Mon Sep 17 00:00:00 2001 From: jarkillo <107489788+jarkillo@users.noreply.github.com> Date: Thu, 26 Oct 2023 02:41:48 +0200 Subject: [PATCH 0448/2103] Reto #5 - Python --- .../python/jarkillo.py | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/jarkillo.py diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/jarkillo.py b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/jarkillo.py new file mode 100644 index 0000000000..14a808e89f --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/jarkillo.py @@ -0,0 +1,84 @@ +'''/* + * Crea un programa que calcule quien gana más partidas al piedra, + * papel, tijera, lagarto, spock. + * - El resultado puede ser: "Player 1", "Player 2", "Tie" (empate) + * - La función recibe un listado que contiene pares, representando cada jugada. + * - El par puede contener combinaciones de "🗿" (piedra), "📄" (papel), + * "✂️" (tijera), "🦎" (lagarto) o "🖖" (spock). + * - Ejemplo. Entrada: [("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")]. Resultado: "Player 2". + * - Debes buscar información sobre cómo se juega con estas 5 posibilidades. + */''' + + +import random + +jugador1_puntuacion = 0 +jugador2_puntuacion = 0 + + +def piedra_papel_tijera_lagarto_spock(jugada1, jugada2, jugador1_puntuacion, jugador2_puntuacion): + ganador = '' + + for n in range(len(jugada1)): + if jugada1[n] == jugada2[n]: + ganador = 'Tie' + elif jugada1[n] == '🗿': + + if jugada2[n] == '✂️' or jugada1[n] == '🦎': + ganador = 'Player 1' + jugador1_puntuacion += 1 + else: + ganador = 'Player 2' + jugador2_puntuacion += 1 + + elif jugada1[n] == '📄': + + if jugada2[n] == '🗿' or jugada2[n] == '🖖': + ganador = 'Player 1' + jugador1_puntuacion += 1 + else: + ganador = 'Player 2' + jugador2_puntuacion += 1 + + elif jugada1[n] == '✂️': + + if jugada2[n] == '📄' or jugada2[n] == '🦎': + ganador = 'Player 1' + jugador1_puntuacion += 1 + else: + ganador = 'Player 2' + jugador2_puntuacion += 1 + + elif jugada1[n] == '🦎': + + if jugada2[n] == '📄' or jugada2[n] == '🖖': + ganador = 'Player 1' + jugador1_puntuacion += 1 + else: + ganador = 'Player 2' + jugador2_puntuacion += 1 + + elif jugada1[n] == '🖖': + + if jugada2[n] == '🗿' or jugada2[n] == '✂️': + ganador = 'Player 1' + jugador1_puntuacion += 1 + else: + ganador = 'Player 2' + jugador2_puntuacion += 1 + + print(f'El ganador es: {ganador}') + return jugador1_puntuacion, jugador2_puntuacion + + +jugada1 = [] +jugada2 = [] +for i in range(5): + jugada1.append(random.choice(['🗿', '📄', '✂️', '🦎', '🖖'])) + jugada2.append(random.choice(['🗿', '📄', '✂️', '🦎', '🖖'])) + +print(jugada1, jugada2) +jugador1_puntuacion, jugador2_puntuacion = piedra_papel_tijera_lagarto_spock( + jugada1, jugada2, jugador1_puntuacion, jugador2_puntuacion) +print(f'El ganador es el Player 1 con {jugador1_puntuacion} puntos') if jugador1_puntuacion > jugador2_puntuacion else print( + f'El ganador es el Player 2 con {jugador2_puntuacion} puntos') From 3725878b6a3ae727aa3fb89b05ebdc2ccb09f46e Mon Sep 17 00:00:00 2001 From: jarkillo <107489788+jarkillo@users.noreply.github.com> Date: Thu, 26 Oct 2023 03:31:57 +0200 Subject: [PATCH 0449/2103] Reto #7 - Python --- .../python/jarkillo.py | 169 ++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/jarkillo.py diff --git a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/jarkillo.py b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/jarkillo.py new file mode 100644 index 0000000000..8277f9c876 --- /dev/null +++ b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/jarkillo.py @@ -0,0 +1,169 @@ +'''/* + * Crea un programa que simule el comportamiento del sombrero seleccionador del + * universo mágico de Harry Potter. + * De ser posible realizará 5 preguntas (como mínimo) a través de la terminal. + * Cada pregunta tendrá 4 respuestas posibles (también a selecciona una a través de terminal). + * En función de las respuestas a las 5 preguntas deberás diseñar un algoritmo que + * Coloque al alumno en una de las 4 casas de Hogwarts (Gryffindor, Slytherin , Hufflepuff y Ravenclaw) + * Ten en cuenta los rasgos de cada casa para hacer las preguntas y crear el algoritmo seleccionador. + * Por ejemplo, en Slytherin se premia la ambición y la astucia. + */''' + + +def sombrero(): + + recuento = [0, 0, 0, 0] + respuesta = "" + print('Bienvenido al sombrero seleccionador de Hogwarts') + print('Responde a las siguientes preguntas para saber a que casa perteneces') + print('') + print('Pregunta 1: ¿Que te gustaría ser?') + print('1. Rico') # Slitherin + print('2. Sabio') # Ravenclaw + print('3. Fuerte') # Griffindor + print('4. Feliz') # Hufflepuf + + while respuesta != '1' and respuesta != '2' and respuesta != '3' and respuesta != '4': + respuesta = input('Elige una opción: ') + + if respuesta != '1' and respuesta != '2' and respuesta != '3' and respuesta != '4': + print('Respuesta no válida') + + if respuesta == '1': + recuento[0] += 1 + + elif respuesta == '2': + recuento[3] += 1 + + elif respuesta == '3': + recuento[1] += 1 + + elif respuesta == '4': + recuento[2] += 1 + + else: + print('Respuesta no válida') + + print('Pregunta 2: ¿Qué cualidad te parece más valiosa?: ') + print('1. Ambición') # Slitherin + print('2. Inteligencia') # Ravenclaw + print('3. Lealtad') # Hufflepuff + print('4. Valentía') # Griffindor + respuesta = "" + + while respuesta != '1' and respuesta != '2' and respuesta != '3' and respuesta != '4': + respuesta = input('Elige una opción: ') + if respuesta != '1' and respuesta != '2' and respuesta != '3' and respuesta != '4': + print('Respuesta no válida') + + if respuesta == '1': + recuento[0] += 1 + + elif respuesta == '2': + recuento[3] += 1 + + elif respuesta == '3': + recuento[2] += 1 + + elif respuesta == '4': + recuento[1] += 1 + + else: + print('Respuesta no válida') + + print('Pregunta 3: ¿Cuál de las siguientes opciones odiarías más que la gente te llamara?: ') + print('1. Ignorante') # Ravenclaw + print('2. Cobarde') # Griffindor + print('3. Egoísta') # Hufflepuff + print('4. Ordinario') # Slitherin + respuesta = "" + + while respuesta != '1' and respuesta != '2' and respuesta != '3' and respuesta != '4': + respuesta = input('Elige una opción: ') + if respuesta != '1' and respuesta != '2' and respuesta != '3' and respuesta != '4': + print('Respuesta no válida') + + if respuesta == '1': + recuento[3] += 1 + + elif respuesta == '2': + recuento[1] += 1 + + elif respuesta == '3': + recuento[2] += 1 + + elif respuesta == '4': + recuento[0] += 1 + + else: + print('Respuesta no válida') + + print('Pregunta 4: ¿Después de su muerte ¿qué es lo que más te gustaría que hiciera la gente cuando escuche tu nombre?: ') + print('1. Leer') # Ravenclaw + print('2. Hacer deporte') # Griffindor + print('3. Estar con tus amigos') # Hufflepuff + print('4. Estar solo') # Slitherin + + respuesta = "" + while respuesta != '1' and respuesta != '2' and respuesta != '3' and respuesta != '4': + respuesta = input('Elige una opción: ') + if respuesta != '1' and respuesta != '2' and respuesta != '3' and respuesta != '4': + print('Respuesta no válida') + + if respuesta == '1': + recuento[3] += 1 + + elif respuesta == '2': + recuento[1] += 1 + + elif respuesta == '3': + recuento[2] += 1 + + elif respuesta == '4': + recuento[0] += 1 + + else: + print('Respuesta no válida') + + +# Slitherin, Gryffindor, Hufflepuff, Ravenclaw + print('Pregunta 5: Preferirías inventar una poción que garantizara: ') + print('1. Amor') # Hufflepuff + print('2. Gloria') # Gryffindor + print('3. Sabiduría') # Ravenclaw + print('4. Poder') # Slitherin + respuesta = "" + + while respuesta != '1' and respuesta != '2' and respuesta != '3' and respuesta != '4': + respuesta = input('Elige una opción: ') + if respuesta != '1' and respuesta != '2' and respuesta != '3' and respuesta != '4': + print('Respuesta no válida') + + if respuesta == '1': # Hufflepuff + recuento[3] += 1 + + elif respuesta == '2': # Gryffindor + recuento[1] += 1 + + elif respuesta == '3': # Ravenclaw + recuento[2] += 1 + + elif respuesta == '4': # Slitherin + recuento[0] += 1 + + else: + print('Respuesta no válida') + + if max(recuento) == recuento[0]: + print('Tu casa es Slitherin') + elif max(recuento) == recuento[1]: + print('Tu casa es Gryffindor') + elif max(recuento) == recuento[2]: + print('Tu casa es Hufflepuff') + elif max(recuento) == recuento[3]: + print('Tu casa es Ravenclaw') + else: + print('Error') + + +sombrero() From e7556f97947e826e74827fa992c139bc935eab5f Mon Sep 17 00:00:00 2001 From: jarkillo <107489788+jarkillo@users.noreply.github.com> Date: Thu, 26 Oct 2023 04:42:19 +0200 Subject: [PATCH 0450/2103] Reto #8 - Python --- .../python/jarkillo.py | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/jarkillo.py diff --git a/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/jarkillo.py b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/jarkillo.py new file mode 100644 index 0000000000..b1055da161 --- /dev/null +++ b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/jarkillo.py @@ -0,0 +1,51 @@ +'''/* + * Crea un generador de números pseudoaleatorios entre 0 y 100. + * - No puedes usar ninguna función "random" (o semejante) del lenguaje de programación seleccionado. + * + * Es más complicado de lo que parece... + */''' + +from time import sleep +import datetime +import math + + +def pseudoaleatorio(digitos=2, contador=1, velocidad=0.2): + '''Genera {contador} números pseudoaleatorios de {digitos} dígitos . + Params: digitos: Número de dígitos del número pseudoaleatorio. + contador: Número de números pseudoaleatorios a generar.''' + + for n in range(contador): + current_time = datetime.datetime.now().timestamp() + seconds = datetime.datetime.now().second + minute = datetime.datetime.now().minute + hour = datetime.datetime.now().hour + day = datetime.datetime.now().day + month = datetime.datetime.now().month + year = datetime.datetime.now().year + microsecond = datetime.datetime.now().microsecond + + op1 = current_time * minute / 100 * hour / \ + 15 * day / 30 * month / 12 * year / 100 - seconds + + op2 = op1 + datetime.datetime.now().second * 100000 / 1000 * minute / 100 * \ + day / 1000 * month * microsecond / 100 * year / \ + 1000 / datetime.datetime.now().microsecond + + for n in range(datetime.datetime.now().second): + op1 = op1 + n - op2 + datetime.datetime.now().microsecond * 100 + op3 = op1 + op2 - datetime.datetime.now().microsecond * 100 + op4 = op3 * 123478912 / \ + datetime.datetime.now().microsecond * math.pi + op4 = int(op4*10*digitos) + + print(int(str(op4)[-digitos:])) + sleep(velocidad) + + +contador = input('¿Cuantos números pseudoaleatorios quieres generar? ') +digitos = input('¿De cuantos dígitos quieres que sean? ') +velocidad = input( + '¿A que velocidad quieres que se generen? (Recomendado: 0.5 - 1) ') + +pseudoaleatorio(int(digitos), int(contador), float(velocidad)) From 97b0fda9d0af50cce788e3e336debbcda7aac644 Mon Sep 17 00:00:00 2001 From: jarkillo <107489788+jarkillo@users.noreply.github.com> Date: Thu, 26 Oct 2023 04:51:56 +0200 Subject: [PATCH 0451/2103] Reto #9 - Python --- .../python/jarkillo.py" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/jarkillo.py" diff --git "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/jarkillo.py" "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/jarkillo.py" new file mode 100644 index 0000000000..92c1c5cce6 --- /dev/null +++ "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/jarkillo.py" @@ -0,0 +1,49 @@ +'''/* + * Crea 3 funciones, cada una encargada de detectar si una cadena de + * texto es un heterograma, un isograma o un pangrama. + * - Debes buscar la definición de cada uno de estos términos. + + # Heterograma: Palabra que no tiene ninguna letra repetida. + # Isograma: palabra o frase en la que cada letra aparece el mismo número de veces + # Pangrama: Palabra que contiene todas las letras del alfabeto. + # Pangrama perfecto: Pangrama y además no tiene ninguna letra repetida. + + */''' + + +def heterograma(cadena): + '''Devuelve True si la cadena es un heterograma.''' + for letra in cadena: + if cadena.count(letra) > 1: + return False + return True + + +def isograma(cadena): + '''Devuelve True si la cadena es un isograma.''' + for letra in cadena: + if cadena.count(letra) != cadena.count(letra.lower()) + cadena.count(letra.upper()): + return False + return True + + +def pangrama(cadena): + '''Devuelve True si la cadena es un pangrama.''' + for letra in 'abcdefghijklmnñopqrstuvwxyz': + if letra not in cadena.lower(): + return False + return True + + +def pangrama_perfecto(cadena): + '''Devuelve True si la cadena es un pangrama perfecto.''' + if heterograma(cadena) == True and pangrama(cadena) == True: + return True + return False + + +cadena = input('Introduce una cadena de texto: ') +print('Heterograma: ', heterograma(cadena)) +print('Isograma: ', isograma(cadena)) +print('Pangrama: ', pangrama(cadena)) +print('Pangrama perfecto: ', pangrama_perfecto(cadena)) From 703d8b50f4397a554d1cd82405c049dca15bdb12 Mon Sep 17 00:00:00 2001 From: Marco Torres Date: Wed, 25 Oct 2023 21:17:23 -0700 Subject: [PATCH 0452/2103] Reto #36 - Python --- .../python/marcoatrs.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Retos/Reto #36 - PERMUTACIONES [Media]/python/marcoatrs.py diff --git a/Retos/Reto #36 - PERMUTACIONES [Media]/python/marcoatrs.py b/Retos/Reto #36 - PERMUTACIONES [Media]/python/marcoatrs.py new file mode 100644 index 0000000000..cfe468e190 --- /dev/null +++ b/Retos/Reto #36 - PERMUTACIONES [Media]/python/marcoatrs.py @@ -0,0 +1,21 @@ +import itertools +from typing import List + + +def permutaciones(word: str) -> List[str]: + words = list() + if len(word) <= 1: + return [word] + for i, letter in enumerate(word): + for per in permutaciones(f"{word[:i]}{word[i+1:]}"): + words.append(f"{letter}{per}") + return words + + +word = "sol" + +# Opcion 1 +print(permutaciones("sol")) + +# Opcion 2 +print(["".join(per) for per in itertools.permutations(word)]) From 924c6e248be4f7f6d8babca49c899712ff4e3e43 Mon Sep 17 00:00:00 2001 From: Mario Ruano Date: Thu, 26 Oct 2023 11:03:57 +0200 Subject: [PATCH 0453/2103] =?UTF-8?q?Contempla=20resultados=20decimales=20?= =?UTF-8?q?como=20no=20v=C3=A1lidos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../c#/mrf1989.cs" | 37 ++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/mrf1989.cs" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/mrf1989.cs" index 510179ff90..12e9ab7707 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/mrf1989.cs" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c#/mrf1989.cs" @@ -1,21 +1,40 @@ -MovingObject objA = new(new(2, 2), new(1, 2)); -MovingObject objB = new(new(5, 5), new(0, -1)); -CalculateMeetingPoint(objA, objB); +// Test cases + +MovingObject obj1A = new(new(2, 2), new(1, 2)); +MovingObject obj1B = new(new(5, 5), new(-2, -1)); + +MovingObject obj2A = new(new(0, 0), new(2, 1)); +MovingObject obj2B = new(new(0, 6), new(2, -2)); + +MovingObject obj3A = new(new(5, 0), new(0, 3)); +MovingObject obj3B = new(new(14, 15), new(-3, -2)); + +MovingObject obj4A = new(new(5, 0), new(0, 3)); +MovingObject obj4B = new(new(14, 15), new(3, 2)); + +CalculateMeetingPoint(obj1A, obj1B); +CalculateMeetingPoint(obj2A, obj2B); +CalculateMeetingPoint(obj3A, obj3B); +CalculateMeetingPoint(obj4A, obj4B); void CalculateMeetingPoint(MovingObject objA, MovingObject objB) { - var tx = (objA.Position.X - objB.Position.X) / (objB.SpeedVector.X - objA.SpeedVector.X); - var ty = (objA.Position.Y - objB.Position.Y) / (objB.SpeedVector.Y - objA.SpeedVector.Y); + var dx = objB.Position.X - objA.Position.X; + var dy = objB.Position.Y - objA.Position.Y; + var dsx = objB.SpeedVector.X - objA.SpeedVector.X; + var dsy = objB.SpeedVector.Y - objA.SpeedVector.Y; + + var t = - (dx * dsx + dy * dsy) / (Math.Pow(dsx, 2) + Math.Pow(dsy, 2)); - if (tx != ty) + if (t < 0 || Convert.ToDecimal(t) % 1 != 0) { - Console.WriteLine("The objects are not located anywhere on the plane"); + Console.WriteLine("Objects do not intersect at any point in the plane"); } else { - var t = tx; - Coord CutPoint = new(objA.Position.X + t * objA.SpeedVector.X, objA.Position.Y + t * objA.SpeedVector.Y); + Coord CutPoint = new(objA.Position.X + Convert.ToInt32(t) * objA.SpeedVector.X, + objA.Position.Y + Convert.ToInt32(t) * objA.SpeedVector.Y); Console.WriteLine($"The objects have been found at point {CutPoint} after {t} seconds"); } } From c7fc10db20edeb4fb02beb43d5e43098cf6b0348 Mon Sep 17 00:00:00 2001 From: DHiebl <108873454+sirnas1983@users.noreply.github.com> Date: Thu, 26 Oct 2023 10:44:51 -0300 Subject: [PATCH 0454/2103] Correccion reto #42 - python Se modifico nombre de funcion Se corrigio casos de trayectorias coplanares y colineales ya que algunas pruebas unitarias no pasaron los tests Se sacaron algunas redundacias --- .../python/sirnas1983.py" | 182 ++++++++---------- 1 file changed, 80 insertions(+), 102 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" index 9a69083366..600f81cbc8 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" @@ -1,135 +1,113 @@ from matplotlib import pyplot as plt - -def interseccion(coor1 : tuple, coor2 : tuple, vel1 : tuple, vel2 : tuple, plot_graph : bool = False): +def detectar_colision(coor1, coor2, vel1, vel2, plot_graph=True): ''' - Funcion que imprime por pantalla si existe o no colision de 2 objetos en el plano - y retorna True en caso de existir y False en caso que no - - Deben ingresarse las coordenadas de partida de ambos objetos como tuplas y sus - velocidades en x e y tambien como tuplas. Para que imprima los graficos pase True como 5to argumento. + Determina si dos objetos colisionarán en el plano y muestra un gráfico si se especifica. + + Parámetros: + coor1 (tuple): Coordenadas iniciales del objeto 1 (x1, y1). + coor2 (tuple): Coordenadas iniciales del objeto 2 (x2, y2). + vel1 (tuple): Velocidades del objeto 1 en (vx1, vy1). + vel2 (tuple): Velocidades del objeto 2 en (vx2, vy2). + plot_graph (bool, opcional): True si se debe mostrar un gráfico, False por defecto. + + Retorna: + bool: True si los objetos colisionan, False si no. ''' colision = False try: # Asigno el valor de las tuplas a variables individuales - vx1 = vel1[0] - vy1 = vel1[1] - vx2 = vel2[0] - vy2 = vel2[1] - - x0 = coor1[0] - y0 = coor1[1] - x1 = coor2[0] - y1 = coor2[1] - - colision = False - - # Verifico que ambos objetos no esten en reposo - if (vx1 == vy1 == 0) and (vx2 == vy2 == 0): - print("Ambos objetos estan en reposo") - # Verifico la condicion de que no parten del mismo punto - elif (x0 == x1) and (y0 == y1): - print("Ambos objetos estan colisionados antes de iniciar su movimiento") + vx1, vy1 = vel1 + vx2, vy2 = vel2 + + x1, y1 = coor1 + x2, y2 = coor2 + + # Verifico la condición de que no parten del mismo punto + if (x1 == x2) and (y1 == y2): + print("Ambos objetos están colisionados antes de iniciar su movimiento.") + x = x1 + y = y1 + alpha = 0 colision = True else: # Verifico que ambas trayectorias no sean coplanares - if (vx1*vy2 - vy1*vx2) != 0: - + if (vx1 * vy2 - vy1 * vx2) != 0: # Calculo alpha y beta de sus ecuaciones vectoriales - beta = (vx1*(y0 - y1) + vy1*(x1 - x0)) / (vx1*vy2 - vy1*vx2) + beta = (vx1 * (y1 - y2) + vy1 * (x2 - x1)) / (vx1 * vy2 - vy1 * vx2) if vy1 != 0: - alpha = (y1 - y0 + beta * vy2) / vy1 + alpha = (y2 - y1 + beta * vy2) / vy1 elif vx1 != 0: - alpha = (x1 - x0 + beta * vx2) / vx1 - - x = x1 + beta * vx2 - y = y1 + beta * vy2 + alpha = (x2 - x1 + beta * vx2) / vx1 + + x = x2 + beta * vx2 + y = y2 + beta * vy2 - # Si alpha y beta son iguales (tiempo) hay colision, sino solamente interseccion de trayectorias + # Si alpha y beta son iguales (tiempo) hay colisión, sino solamente intersección de trayectorias if alpha == beta: - print("Las objetos colisionan en", (x,y).__str__(),"transcurridos", alpha, "segundos") + print(f"Los objetos colisionan en ({x:.2f}, {y:.2f}) transcurridos {alpha:.2f} segundos.") colision = True else: - print(f"Si bien las trayectorias se intersectan en {(x,y).__str__()} no hay colision entre objetos.") + print(f"Si bien las trayectorias se intersectan en ({x:.2f}, {y:.2f}), no hay colisión entre objetos.") else: - # Hago el analisis puntual de trayectorias coplanares - alpha1 = None - alpha2 = None + # Hago el análisis puntual de trayectorias coplanares + alpha = None + beta = None # Para ello calculo la constante del vector if vx1 - vx2 != 0: - alpha1 = (x1 - x0) / (vx1 - vx2) - elif vy1 - vy2 != 0: - alpha2 = (y1 - y0) / (vy1 - vy2) - else: - print("Los objetos van en la misma direccion pero uno igual o mas lento que el otro") - alpha2 = 1 - alpha1 = alpha2 + 1 - # La constante del vector debe ser igual para ambos y mayor a 0 - if alpha1 == alpha2 > 0: - x = x0 + alpha1 * vx1 - y = y0 + alpha1 * vy1 - print("Los objetos colisionan en", (x,y).__str__(),"transcurridos", alpha1, "segundos") + alpha = (x2 - x1) / (vx1 - vx2) + if vy1 - vy2 != 0: + beta = (y2 - y1) / (vy1 - vy2) + # La constante del vector debe ser igual para ambos y mayor a 0 + if alpha is None and beta is None: + print("Los objetos van a la misma velocidad, no habrá colisión.") + elif alpha == beta: + if alpha > 0: + x = x1 + alpha * vx1 + y = y1 + alpha * vy1 + print(f"Los objetos colisionan en ({x:.2f}, {y:.2f}) transcurridos {alpha:.2f} segundos.") + colision = True + else: + print("Los objetos son colineales pero van separándose, no habrá colisión.") + elif (alpha is None and beta > 0) or (beta is None and alpha > 0): + x = x1 + alpha * vx1 + y = y1 + alpha * vy1 + print(f"Los objetos colisionan en ({x:.2f}, {y:.2f}) transcurridos {alpha:.2f} segundos.") colision = True - elif alpha1 < 0: - print("Los objetos son colineales pero van en direcciones opuetas") + elif alpha != beta: + print("Los objetos no colisionarán.") elif (vx1 == vy1 == 0) or (vx2 == vy2 == 0): - print("El objeto en movimento no intersecta el objeto en reposo") - # Si existe colision pregunto si quieren ver el grafico + print("El objeto en movimiento no intersecta el objeto en reposo.") + if colision and plot_graph: plt.axhline(0, color='black', linewidth=0.5) plt.axvline(0, color='black', linewidth=0.5) - plt.scatter(x, y, color='red', linewidths=10, label='Punto de encuentro') - plt.scatter(x0, y0, color='blue', linewidths=5, label='Salida objeto 1') - plt.scatter(x1, y1, color='green', linewidths=5, label='Salida objeto 2') - plt.plot([x0, x], [y0, y], color='blue', ls="-." ) - plt.plot([x1, x], [y1, y], color='green', ls="-.") + plt.scatter(x, y, color='red', linewidths=10, label=f'COLISIÓN\nx: {x:.2f} - y: {y:.2f} - t: {alpha:.2f}') + plt.scatter(x1, y1, color='blue', linewidths=5, label=f'Salida objeto 1\nVx: {vx1} Vy: {vy1}') + plt.scatter(x2, y2, color='green', linewidths=5, label=f'Salida objeto 2\nVx: {vx2} Vy: {vy2}') + plt.plot([x1, x], [y1, y], color='blue', ls="-.") + plt.plot([x2, x], [y2, y], color='green', ls="-.") plt.legend() plt.xlabel('Eje X') plt.ylabel('Eje Y') - plt.title('Punto de Colision') + plt.title('Punto de Colisión') plt.grid(True) plt.show() - return colision - except: - print("Debe ingresar valores de coordenadas y velocidades como tuplas") - return colision -##### PRUEBAS ###### - -coor1 = (0,0) -v1 = (-4,-4) -coor2 = (2,2) -v2 = (-6,-6) -interseccion(coor1, coor2, v1, v2) - -coor1 = (0,0) -v1 = (0,0) -coor2 = (3,2) -v2 = (-6,-6) -interseccion(coor1, coor2, v1, v2) - -coor1 = (1,1) -v1 = (-4,-4) -coor2 = (2,2) -v2 = (-6,-6) -interseccion(coor1, coor2, v1, v2) - -coor1 = (10,8) -v1 = (7,.5) -coor2 = (4,0) -v2 = (-0.5,0.5) -interseccion(coor1, coor2, v1, v2) - -coor1 = (0,0) -v1 = (4,4) -coor2 = (4,0) -v2 = (0,4) -interseccion(coor1, coor2, v1, v2) + return colision -coor1 = (0,0) -v1 = (4,4) -coor2 = (2,2) -v2 = (4,4) -interseccion(coor1, coor2, v1, v2) + except Exception as e: + print(f"Error: {e}") + return colision -interseccion(4,3,1,6) +#### PRUEBAS ####: +detectar_colision((1, 1), (2, 1), (1, 6), (-1, 6)) +detectar_colision((0, 0), (1, 1), (1, 0), (0, 1)) +detectar_colision((0, 0), (0, 0), (0, 0), (0, 0)) +detectar_colision((0, 0), (2, 2), (1, 1), (1, 1)) +detectar_colision((0, 0), (2, 2), (1, 1), (1, 1)) +detectar_colision((0, 0), (3, 0), (1, 0), (0, 1)) +detectar_colision((0, 0), (3, 0), (1, 0), (2, 0)) +detectar_colision((1, 1), (1, 1), (1, 0), (2, 0)) +detectar_colision((1, 1), (2, 2), (1, 1), (1, 1)) +detectar_colision((0, 0), (1, 1), (1, 0), (2, 0)) From 1791263429b04dc2c80b305ae32b79199c79d951 Mon Sep 17 00:00:00 2001 From: ycanas Date: Thu, 26 Oct 2023 10:56:27 -0500 Subject: [PATCH 0455/2103] Reto #38 - Python --- .../python/ycanas.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/ycanas.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/ycanas.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/ycanas.py new file mode 100644 index 0000000000..9b107e8b2c --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/ycanas.py @@ -0,0 +1,25 @@ +def findsums(numbers, target): + def findsum(start, target, combination): + if target == 0: + result.append(combination.copy()) + return + + if target < 0 or start == len(numbers): + return + + for i in range(start, len(numbers)): + if i > start and numbers[i] == numbers[i - 1]: + continue + + combination.append(numbers[i]) + findsum(i + 1, target - numbers[i], combination) + combination.pop() + + numbers.sort() + result = [] + findsum(0, target, []) + + return result + + +print(findsums([1, 1, 1, 1, 1, 1, 1, 2, 2], 7)) From d52833caa9acf83f3168bbe8c63b43e824a9e1da Mon Sep 17 00:00:00 2001 From: Cristian Santos Date: Thu, 26 Oct 2023 10:59:35 -0500 Subject: [PATCH 0456/2103] Reto 42 --- .../typescript/csantosr.ts" | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/typescript/csantosr.ts" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/typescript/csantosr.ts" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/typescript/csantosr.ts" new file mode 100644 index 0000000000..70f1be2b5c --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/typescript/csantosr.ts" @@ -0,0 +1,94 @@ +/* + * Crea una función que calcule el punto de encuentro de dos objetos en movimiento + * en dos dimensiones. + * - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento + * (vector de desplazamiento) por unidad de tiempo (también en formato xy). + * - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. + * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. + * - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. + */ + +type PointLocation = { + x: number; + y: number; +} + +type Velocity = PointLocation; + +interface Point { + loc: PointLocation, + vel: Velocity, +} + +const meetingPoint = (pointA: Point, pointB: Point): number | null => { + // Resolviendo la ecuación para el eje x + const tX = (pointB.loc.x - pointA.loc.x) / (pointA.vel.x - pointB.vel.x); + + // Resolviendo la ecuación para el eje y + const tY = (pointB.loc.y - pointA.loc.y) / (pointA.vel.y - pointB.vel.y); + + // Si tX y tY son iguales, entonces se encontrarán en ese momento t + if (tX === tY) { + return tX; + } + return null; +} + +const meetingPointWrapper = (pointA: Point, pointB: Point) => { + const response = meetingPoint(pointA, pointB); + + if (response === null) { + console.log('Los puntos no se encontrarán! 😢'); + } else { + console.log(`Los puntos se encontrarán en ${response} segundos!!! 🎉`); + } +} + +// Ejemplos +// NO SE ENCUENTRAN + +const pointA1: Point = { + loc: { x: 0, y: 0 }, + vel: { x: 1, y: 0 }, +}; + +const pointB1: Point = { + loc: { x: 0, y: 1 }, + vel: { x: 1, y: 0 }, +}; +meetingPointWrapper(pointA1, pointB1); + + +const pointA2: Point = { + loc: { x: 0, y: 0 }, + vel: { x: 1, y: 0 }, +}; + +const pointB2: Point = { + loc: { x: 1, y: 0 }, + vel: { x: -1, y: 0 }, +}; +meetingPointWrapper(pointA2, pointB2); + +const pointA3: Point = { + loc: { x: 0, y: 0 }, + vel: { x: 0, y: 1 }, +}; + +const pointB3: Point = { + loc: { x: 2, y: 0 }, + vel: { x: 1, y: 0 }, +}; +meetingPointWrapper(pointA3, pointB3); + +// SE ENCUENTRAN! +const pointA4: Point = { + loc: { x: 0, y: 0 }, + vel: { x: 1, y: 1 } +}; + +const pointB4: Point = { + loc: { x: 2, y: 2 }, + vel: { x: 0, y: 0 } +}; +meetingPointWrapper(pointA4, pointB4); From 1e130e518b9893e5149c22b5683af83916e0a09e Mon Sep 17 00:00:00 2001 From: "Pusho.Dev" <130678121+PushoDev@users.noreply.github.com> Date: Thu, 26 Oct 2023 13:47:15 -0400 Subject: [PATCH 0457/2103] PushoDev Participar el Reto No.40, Lenguaje utilizado Python. --- .../python/PushoDev.py" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/PushoDev.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/PushoDev.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/PushoDev.py" new file mode 100644 index 0000000000..1b576531b5 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/PushoDev.py" @@ -0,0 +1,24 @@ +# Reto No.40 -Tabla de multiplicar +# Dificultad: Fácil | Publicación: 09/10/23 | Corrección: 16/10/23 +#----------------------------------------------------------------- +#Enunciado +# Crea un programa que sea capaz de solicitarte un número y se +# encargue de imprimir su tabla de multiplicar entre el 1 y el 10. +#- Debe visualizarse qué operación se realiza y su resultado. +# Ej: 1 x 1 = 1 +# 1 x 2 = 2 +# 1 x 3 = 3 +# ... +#----------------------------------------------------------------- + +print ("Pushodev") +print ("https://github.com/PushoDev") + +numero = int(input("Ingresa un número: ")) + +for i in range(1, 11): + resultado = numero * i + print(f"{numero} x {i} = {resultado}") + +print ("Muchas Gracias por participar") +print ("Su número ingresado fué: ", numero) \ No newline at end of file From 68dabdba18bff8ba2aa23255700ae5a2233c64dd Mon Sep 17 00:00:00 2001 From: valero Date: Thu, 26 Oct 2023 20:20:37 +0200 Subject: [PATCH 0458/2103] github user renamed --- .../python/Swamptk.py" | 71 ------------------- 1 file changed, 71 deletions(-) delete mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/Swamptk.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/Swamptk.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/Swamptk.py" deleted file mode 100644 index 150ad6ac9d..0000000000 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/Swamptk.py" +++ /dev/null @@ -1,71 +0,0 @@ -def collision( - r: tuple[float, float], - s: tuple[float, float], - vr: tuple[float, float], - vs: tuple[float, float], -): - '''The function `collision` calculates the collision point and time between two moving objects, given - their initial positions and velocities, and prints them to the user. - - Parameters - ---------- - The parameters `r` and `s` represent the initial position of objects R and S, given as a tuple of two floats (x,y). - - The parameters `vr` and `vs` represent the velocity of objects R and A, where `vr[0]` is the velocity in the x-direction and `vr[1]` is the velocity in the y-direction. - ''' - - try: # What if some coord velocities are equal or none - t_0 = (s[0] - r[0]) / (vr[0] - vs[0]) - if t_0 < 0: # If they would collide in the past then we don't care - print(f"Objects won't collide.") - return - except: - if s[0] != r[0]: # distance between them will be constant in time - print(f"Objects won't collide.") - return - t_0 = "any" # If they are in the same coord time doesn't matter - - try: - t_1 = (s[1] - r[1]) / (vr[1] - vs[1]) - if t_1 < 0: - print(f"Objects won't collide.") - return - except: - if s[1] != r[1]: - print(f"Objects won't collide.") - return - else: t_1 = t_0 - - if t_0 == t_1 or t_0 == "any": - if (t := t_1) == "any": # This would mean they both have the same IC - print("The objects share their movement.") - return - c = (s[0] + vs[0] * t, s[1] + vs[1] * t) - print(f"Collision at x = {c[0]}, y = {c[1]} at t = {t}.") - else: - print(f"Objects won't collide.") - - -def get_input(var: str): - while True: - try: - x = float(input(f"\t- {var}: ").strip()) - return x - except ValueError as e: - print(f"Please, enter a number.") - - -def get_coord(): - x = get_input("x") - y = get_input("y") - vx = get_input("vx") - vy = get_input("vy") - return (x, y), (vx, vy) - - -if __name__ == "__main__": - print("Write the initial conditions of the first object.") - r, vr = get_coord() - print("Write the initial conditions of the second object.") - s, vs = get_coord() - collision(r, s, vr, vs) From 898166627740761561dfb88c5da8911df39f090c Mon Sep 17 00:00:00 2001 From: valero Date: Thu, 26 Oct 2023 20:22:35 +0200 Subject: [PATCH 0459/2103] renamed user --- .../python/valevil27.py" | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil27.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil27.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil27.py" new file mode 100644 index 0000000000..150ad6ac9d --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/valevil27.py" @@ -0,0 +1,71 @@ +def collision( + r: tuple[float, float], + s: tuple[float, float], + vr: tuple[float, float], + vs: tuple[float, float], +): + '''The function `collision` calculates the collision point and time between two moving objects, given + their initial positions and velocities, and prints them to the user. + + Parameters + ---------- + The parameters `r` and `s` represent the initial position of objects R and S, given as a tuple of two floats (x,y). + + The parameters `vr` and `vs` represent the velocity of objects R and A, where `vr[0]` is the velocity in the x-direction and `vr[1]` is the velocity in the y-direction. + ''' + + try: # What if some coord velocities are equal or none + t_0 = (s[0] - r[0]) / (vr[0] - vs[0]) + if t_0 < 0: # If they would collide in the past then we don't care + print(f"Objects won't collide.") + return + except: + if s[0] != r[0]: # distance between them will be constant in time + print(f"Objects won't collide.") + return + t_0 = "any" # If they are in the same coord time doesn't matter + + try: + t_1 = (s[1] - r[1]) / (vr[1] - vs[1]) + if t_1 < 0: + print(f"Objects won't collide.") + return + except: + if s[1] != r[1]: + print(f"Objects won't collide.") + return + else: t_1 = t_0 + + if t_0 == t_1 or t_0 == "any": + if (t := t_1) == "any": # This would mean they both have the same IC + print("The objects share their movement.") + return + c = (s[0] + vs[0] * t, s[1] + vs[1] * t) + print(f"Collision at x = {c[0]}, y = {c[1]} at t = {t}.") + else: + print(f"Objects won't collide.") + + +def get_input(var: str): + while True: + try: + x = float(input(f"\t- {var}: ").strip()) + return x + except ValueError as e: + print(f"Please, enter a number.") + + +def get_coord(): + x = get_input("x") + y = get_input("y") + vx = get_input("vx") + vy = get_input("vy") + return (x, y), (vx, vy) + + +if __name__ == "__main__": + print("Write the initial conditions of the first object.") + r, vr = get_coord() + print("Write the initial conditions of the second object.") + s, vs = get_coord() + collision(r, s, vr, vs) From d1a100a1c46ad131654be410c28f28c544a299e2 Mon Sep 17 00:00:00 2001 From: Jonathan Alberth Quispe Fuentes Date: Thu, 26 Oct 2023 15:16:31 -0500 Subject: [PATCH 0460/2103] reto-42 qf-jonathan --- .../python/qf-jonathan.py" | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" new file mode 100644 index 0000000000..fa82ec63c3 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" @@ -0,0 +1,96 @@ +import unittest + + +class Object: + def __init__(self, init_pos: tuple[float, float], move_vec: tuple[float, float]) -> None: + self.init_pos = init_pos + self.move_vec = move_vec + + def post_at_time(self, time: float) -> tuple[float, float]: + return (pos + vec * time for pos, vec in zip(self.init_pos, self.move_vec)) + + def __str__(self) -> str: + return f"Object(position{self.init_pos}, vector{self.move_vec})" + + +def meeting_point( + obj_a: Object, obj_b: Object, epsilon: float = 1e-7 +) -> tuple[tuple[float, float], float]: + (ax, ay), (vax, vay) = obj_a.init_pos, obj_a.move_vec + (bx, by), (vbx, vby) = obj_b.init_pos, obj_b.move_vec + + if abs(vax - vbx) > epsilon and (tx := (bx - ax) / (vax - vbx)) >= 0: + x, y = obj_a.post_at_time(tx) + _, yb = obj_b.post_at_time(tx) + if abs(y - yb) < epsilon: + return (x, y), tx + + if abs(vay - vby) > epsilon and (ty := (by - ay) / (vay - vby)) >= 0: + x, y = obj_a.post_at_time(ty) + xb, _ = obj_b.post_at_time(ty) + if abs(x - xb) < epsilon: + return (x, y), ty + + return (None, None), float("inf") + + +class TestMeetingPoint(unittest.TestCase): + def assertMeetAt( + self, + result: tuple[tuple[float, float], float], + expected: tuple[tuple[float, float], float], + msg: str, + ): + (x, y), time = result + (expected_x, expected_y), expected_time = expected + self.assertAlmostEqual(x, expected_x, msg=msg) + self.assertAlmostEqual(y, expected_y, msg=msg) + self.assertAlmostEqual(time, expected_time, msg=msg) + + def assertNotMeet(self, result: tuple[tuple[float, float], float], msg: str): + (x, y), time = result + self.assertIsNone(x, msg=msg) + self.assertIsNone(y, msg=msg) + self.assertEqual(time, float("inf"), msg=msg) + + def test_objects_meet(self): + cases = { + (((0, 0), (2, 2)), ((1, 1), (-2, -2))): ((0.5, 0.5), 0.25), + (((0, 0), (1, 1)), ((5, 0), (-1, 1))): ((2.5, 2.5), 2.5), + (((0, 0), (1, 1)), ((0, 5), (1, -1))): ((2.5, 2.5), 2.5), + (((2.001, 1.001), (1, 1)), ((2.001, 1.001), (-1, -1))): ((2.001, 1.001), 0), + (((0, 0), (1.01, 1.01)), ((1, 1), (1, 1))): ((101, 101), 100), + (((5, 5), (0.0001, -10000)), ((6, 5), (-0.0001, -10000))): ((5.5, -49999995), 5000), + (((123, 726), (6, 9)), ((100023, 667547), (-4, -57.74884884885))): ( + (60063, 90636), + 9990, + ), + (((-1000000, 1000000), (100, -1)), ((1000000, -1000000), (-1, 100))): ( + (980198.019802, 980198.019802), + 19801.980198, + ), + } + + for (obj_a_params, obj_b_params), expected in cases.items(): + obj_a = Object(*obj_a_params) + obj_b = Object(*obj_b_params) + result = meeting_point(obj_a, obj_b) + self.assertMeetAt(result, expected, msg=f"{obj_a} does not meet {obj_b} at {result}") + + def test_object_not_meet(self): + cases = [ + (((0, 0), (1, 1)), ((5, 5), (1, 1))), + (((0, 0), (0.99, 0.99)), ((1, 1), (1, 1))), + (((0, 1), (0, 1)), ((0, 0), (0, -1))), + (((123, 726), (6, 9)), ((100023, 667547), (-4, -57.75))), + ] + + for obj_a_params, obj_b_params in cases: + obj_a = Object(*obj_a_params) + obj_b = Object(*obj_b_params) + result = meeting_point(obj_a, obj_b) + self.assertNotMeet(result, msg=f"{obj_a} should not not meet {obj_b}") + + +if __name__ == "__main__": + unittest.main() From 03fda81e364119f0e8b8919602b1bad570e4d4af Mon Sep 17 00:00:00 2001 From: DHiebl <108873454+sirnas1983@users.noreply.github.com> Date: Thu, 26 Oct 2023 17:29:56 -0300 Subject: [PATCH 0461/2103] Reto #42 - python Correccion en calculos coplanares --- .../python/sirnas1983.py" | 69 +++++++++---------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" index 600f81cbc8..26c42fe283 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/sirnas1983.py" @@ -1,6 +1,8 @@ +import math from matplotlib import pyplot as plt +import numpy -def detectar_colision(coor1, coor2, vel1, vel2, plot_graph=True): +def detectar_colision(coor1, coor2, vel1, vel2, plot_graph=False): ''' Determina si dos objetos colisionarán en el plano y muestra un gráfico si se especifica. @@ -44,44 +46,49 @@ def detectar_colision(coor1, coor2, vel1, vel2, plot_graph=True): y = y2 + beta * vy2 # Si alpha y beta son iguales (tiempo) hay colisión, sino solamente intersección de trayectorias - if alpha == beta: + if alpha == beta and alpha > 0: print(f"Los objetos colisionan en ({x:.2f}, {y:.2f}) transcurridos {alpha:.2f} segundos.") colision = True else: print(f"Si bien las trayectorias se intersectan en ({x:.2f}, {y:.2f}), no hay colisión entre objetos.") else: # Hago el análisis puntual de trayectorias coplanares - alpha = None - beta = None - # Para ello calculo la constante del vector - if vx1 - vx2 != 0: - alpha = (x2 - x1) / (vx1 - vx2) - if vy1 - vy2 != 0: - beta = (y2 - y1) / (vy1 - vy2) - # La constante del vector debe ser igual para ambos y mayor a 0 - if alpha is None and beta is None: - print("Los objetos van a la misma velocidad, no habrá colisión.") - elif alpha == beta: - if alpha > 0: + vect1 = complex(vx1, vy1) + vect12 = complex(x2-x1, y2-y1) + vect21 = complex(x1-x2, y1-y2) + + ang_vect1 = numpy.angle(vect1) + ang_vect12 = numpy.angle(vect12) + ang_vect21 = numpy.angle(vect21) + + # Determino la colinealidad mediante compara el vector entre P1 y P2 y una de las velocidades + if ang_vect1 == ang_vect12 or ang_vect1 == ang_vect21: + alpha = -math.inf + beta = -math.inf + # Para ello calculo la constante del vector + if vx1 - vx2 != 0: + alpha = (x2 - x1) / (vx1 - vx2) + if vy1 - vy2 != 0: + beta = (y2 - y1) / (vy1 - vy2) + # Si la velocidad en ambos ejes son igualesquiere decir que van a la misma velocidad + if alpha == -math.inf and beta == -math.inf: + print("Los objetos van a la misma velocidad, no habrá colisión.") + elif (alpha == -math.inf and beta > 0) or (beta == -math.inf and alpha > 0) or (beta == alpha > 0): + if alpha <= 0: + alpha = beta x = x1 + alpha * vx1 y = y1 + alpha * vy1 print(f"Los objetos colisionan en ({x:.2f}, {y:.2f}) transcurridos {alpha:.2f} segundos.") colision = True else: print("Los objetos son colineales pero van separándose, no habrá colisión.") - elif (alpha is None and beta > 0) or (beta is None and alpha > 0): - x = x1 + alpha * vx1 - y = y1 + alpha * vy1 - print(f"Los objetos colisionan en ({x:.2f}, {y:.2f}) transcurridos {alpha:.2f} segundos.") - colision = True - elif alpha != beta: - print("Los objetos no colisionarán.") - elif (vx1 == vy1 == 0) or (vx2 == vy2 == 0): - print("El objeto en movimiento no intersecta el objeto en reposo.") + else: + print("Las trayectorias son paralelas, no habrá colisión.") + if colision and plot_graph: - plt.axhline(0, color='black', linewidth=0.5) - plt.axvline(0, color='black', linewidth=0.5) + plt.axhline(0, color='black', linewidth=0.65) + plt.axvline(0, color='black', linewidth=0.65) plt.scatter(x, y, color='red', linewidths=10, label=f'COLISIÓN\nx: {x:.2f} - y: {y:.2f} - t: {alpha:.2f}') plt.scatter(x1, y1, color='blue', linewidths=5, label=f'Salida objeto 1\nVx: {vx1} Vy: {vy1}') plt.scatter(x2, y2, color='green', linewidths=5, label=f'Salida objeto 2\nVx: {vx2} Vy: {vy2}') @@ -99,15 +106,3 @@ def detectar_colision(coor1, coor2, vel1, vel2, plot_graph=True): except Exception as e: print(f"Error: {e}") return colision - -#### PRUEBAS ####: -detectar_colision((1, 1), (2, 1), (1, 6), (-1, 6)) -detectar_colision((0, 0), (1, 1), (1, 0), (0, 1)) -detectar_colision((0, 0), (0, 0), (0, 0), (0, 0)) -detectar_colision((0, 0), (2, 2), (1, 1), (1, 1)) -detectar_colision((0, 0), (2, 2), (1, 1), (1, 1)) -detectar_colision((0, 0), (3, 0), (1, 0), (0, 1)) -detectar_colision((0, 0), (3, 0), (1, 0), (2, 0)) -detectar_colision((1, 1), (1, 1), (1, 0), (2, 0)) -detectar_colision((1, 1), (2, 2), (1, 1), (1, 1)) -detectar_colision((0, 0), (1, 1), (1, 0), (2, 0)) From bbfd0868e1ec90dabc69deb2d7b086a6d61a966e Mon Sep 17 00:00:00 2001 From: Jonathan Alberth Quispe Fuentes Date: Thu, 26 Oct 2023 15:36:46 -0500 Subject: [PATCH 0462/2103] reto-42 improvements --- .../python/qf-jonathan.py" | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" index fa82ec63c3..df7906bdf2 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" @@ -6,7 +6,7 @@ def __init__(self, init_pos: tuple[float, float], move_vec: tuple[float, float]) self.init_pos = init_pos self.move_vec = move_vec - def post_at_time(self, time: float) -> tuple[float, float]: + def pos_at_time(self, time: float) -> tuple[float, float]: return (pos + vec * time for pos, vec in zip(self.init_pos, self.move_vec)) def __str__(self) -> str: @@ -18,16 +18,17 @@ def meeting_point( ) -> tuple[tuple[float, float], float]: (ax, ay), (vax, vay) = obj_a.init_pos, obj_a.move_vec (bx, by), (vbx, vby) = obj_b.init_pos, obj_b.move_vec + (dx, dy), (dvx, dby) = (bx - ax, by - ay), (vax - vbx, vay - vby) - if abs(vax - vbx) > epsilon and (tx := (bx - ax) / (vax - vbx)) >= 0: - x, y = obj_a.post_at_time(tx) - _, yb = obj_b.post_at_time(tx) + if abs(dvx) > epsilon and (tx := dx / dvx) >= 0: + x, y = obj_a.pos_at_time(tx) + _, yb = obj_b.pos_at_time(tx) if abs(y - yb) < epsilon: return (x, y), tx - if abs(vay - vby) > epsilon and (ty := (by - ay) / (vay - vby)) >= 0: - x, y = obj_a.post_at_time(ty) - xb, _ = obj_b.post_at_time(ty) + if abs(dby) > epsilon and (ty := dy / dby) >= 0: + x, y = obj_a.pos_at_time(ty) + xb, _ = obj_b.pos_at_time(ty) if abs(x - xb) < epsilon: return (x, y), ty From 897e6625270abcbffbcd24cc58d92f69daf2358b Mon Sep 17 00:00:00 2001 From: Jonathan Alberth Quispe Fuentes Date: Thu, 26 Oct 2023 15:44:44 -0500 Subject: [PATCH 0463/2103] fix typo --- .../python/qf-jonathan.py" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" index df7906bdf2..6d830cbe3f 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" @@ -18,7 +18,7 @@ def meeting_point( ) -> tuple[tuple[float, float], float]: (ax, ay), (vax, vay) = obj_a.init_pos, obj_a.move_vec (bx, by), (vbx, vby) = obj_b.init_pos, obj_b.move_vec - (dx, dy), (dvx, dby) = (bx - ax, by - ay), (vax - vbx, vay - vby) + (dx, dy), (dvx, dvy) = (bx - ax, by - ay), (vax - vbx, vay - vby) if abs(dvx) > epsilon and (tx := dx / dvx) >= 0: x, y = obj_a.pos_at_time(tx) @@ -26,7 +26,7 @@ def meeting_point( if abs(y - yb) < epsilon: return (x, y), tx - if abs(dby) > epsilon and (ty := dy / dby) >= 0: + if abs(dvy) > epsilon and (ty := dy / dvy) >= 0: x, y = obj_a.pos_at_time(ty) xb, _ = obj_b.pos_at_time(ty) if abs(x - xb) < epsilon: From db5a128ee8fb166835557a799b9a8fe8f50c7165 Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Thu, 26 Oct 2023 14:00:07 -0700 Subject: [PATCH 0464/2103] reto #42 - python --- .../python/KevinED11.py" | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" index bb777aaaaf..c21754e397 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" @@ -1,8 +1,8 @@ -from typing import NamedTuple, Protocol, TypeAlias +from typing import NamedTuple, Protocol import math -Number: TypeAlias = float | int +type Number = float | int class Coordinates(NamedTuple): @@ -81,10 +81,8 @@ def calculate_intersection_point_in_motion(objects: Objects) -> None: intersection_point = calculate_intersection_point( objects.object1, time_to_intersection ) - intersection_x = intersection_point.x - intersection_y = intersection_point.y - print(f"El punto de encuentro es ({intersection_x}, {intersection_y})") + print(f"El punto de encuentro es ({intersection_point.x}, {intersection_point.y})") print(f"El tiempo que les tomará encontrarse es {time_to_intersection}") From 413e4ab9d79e637a7c928356b8722088a7e74f56 Mon Sep 17 00:00:00 2001 From: PedroGF Date: Thu, 26 Oct 2023 23:55:56 +0200 Subject: [PATCH 0465/2103] Reto #42 Javascript --- .../javascript/pedrogf.js" | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/pedrogf.js" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/pedrogf.js" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/pedrogf.js" new file mode 100644 index 0000000000..4dde9714f1 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/pedrogf.js" @@ -0,0 +1,83 @@ +/* + * Crea una función que calcule el punto de encuentro de dos objetos en movimiento + * en dos dimensiones. + * - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento + * (vector de desplazamiento) por unidad de tiempo (también en formato xy). + * - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. + * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. + * - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. + */ + +function objectMetting (obj1, obj2) { + //Calcula la distancia entre los objetos en la posición inicial (previous) y en la t+1(actual). + let previousDistance = Math.sqrt((obj2.x - obj1.x)**2 + (obj2.y - obj1.y)**2) + let actualDistance = Math.sqrt(((obj2.x + obj2.vx) - (obj1.x + obj1.vx))**2 + (((obj2.y + obj2.vy) - (obj1.y + obj1.vy))**2)) + let t=1 + let newPositionObj1x, newPositionObj1y, newPositionObj2x, newPositionObj2y + + while (true) { + t++ + // Calcula la posición de los objetos en función del tiempo. + newPositionObj1x = obj1.x + obj1.vx * t + newPositionObj1y = obj1.y + obj1.vy * t + newPositionObj2x = obj2.x + obj2.vx * t + newPositionObj2y = obj2.y + obj2.vy * t + + if(actualDistance >= previousDistance) { // Si la distancia entre los objetos aumenta o es igual nunca se encontrarán. + return 'Los vectores nunca se encontraán' + } else if (newPositionObj1x === newPositionObj2x && newPositionObj1y === newPositionObj2y) { // avanzamos la posición multiplicando por el tiempo + // Si la posición de ambos objetos es la misma, se han encontraron. + return`Los vectores se han encontrado en la posición [${newPositionObj1x}, ${newPositionObj1y}] en un tiempo de ${t} unidades` + }else{ + //recalculamos las nuevas posiciones de los objetos. + previousDistance = actualDistance + actualDistance = Math.sqrt((newPositionObj2x - newPositionObj1x)**2 + ((newPositionObj2y - newPositionObj1y)**2)) + } + } +} + +// Objetos que se encuentran. +let objeto1 = { + x: 0, + y: 0, + vx: 1, + vy: 1, +} +let objeto2 = { + x: 5, + y: 0, + vx: 0, + vy: 1, +} +console.log(objectMetting(objeto1, objeto2)) + +// Objetos con vectores paralelos que nunca se encuentran. +let objeto3 = { + x: 2, + y: 0, + vx: 0, + vy: 1, +} +let objeto4 = { + x: 4, + y: 0, + vx: 0, + vy: 1, +} +console.log(objectMetting(objeto3, objeto4)) + +// Objetos que se cruzan pero no en el mismo instante +let objeto5 = { + x: 2, + y: 2, + vx: 1, + vy: 1, +} +let objeto6 = { + x: 4, + y: 0, + vx: 0, + vy: 1, +} +console.log(objectMetting(objeto5, objeto6)) + From 74777075ba661c5ae48588f84b64a93ab982a89a Mon Sep 17 00:00:00 2001 From: mstrnilsson Date: Fri, 27 Oct 2023 00:06:07 +0200 Subject: [PATCH 0466/2103] reto #41 - python --- .../python/mstrnilsson.py" | 92 ++++++++++--------- 1 file changed, 51 insertions(+), 41 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mstrnilsson.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mstrnilsson.py" index 30b17676b6..866541a2c0 100755 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mstrnilsson.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mstrnilsson.py" @@ -1,4 +1,4 @@ -import random +import random, time class bcolors: HEADER = '\033[95m' @@ -18,7 +18,6 @@ class bcolors: lolli_coor = [] next_coor = [] now_coor = [] -line = [] row=0 column=0 @@ -32,7 +31,6 @@ class bcolors: left_arrow = "◀️" right_arrow = "▶️" lollipop = "🍭" -house = "🏚️" ok = "✅" up = 'n' down = 's' @@ -44,22 +42,30 @@ class bcolors: finish = '' def intro(): - txt1 = ' 👻 LA CASA ENCANTADA 👻 ' - x = txt1.center(150, '#') - print(f'\n\n{bcolors.HEADER}{bcolors.BOLD}{x}{bcolors.ENDC}\n') - input() - txt2 = ' Te encuentas explorando una 🏚️ mansión abandonada llena de habitaciones. Elige la dirección con las teclas N_orte S_ur E_ste O_este ' - print(txt2.center(150, '#')) - input() - txt2 = ' En cada habitación tendrás que resolver un pregunta para poder avanzar a la siguiente ' - print(txt2.center(150, '#')) - input() - txt3 = ' Tu misión es encontrar la habitación de los dulces 🍭 ' - print(txt3.center(150, '#')) - input() + txt1 = '👻 LA CASA ENCANTADA 👻' + u = txt1.center(67, '#') + print(f'\n{bcolors.HEADER}{bcolors.BOLD}{u}{bcolors.ENDC}\n') + time.sleep(1) + txt2 = 'Te encuentas explorando las habitaciones de una 🏚️ mansión abandonada' + v = txt2.center(66, '#') + print(f'\n{bcolors.HEADER}{bcolors.BOLD}{v}{bcolors.ENDC}\n') + time.sleep(4) + txt6 = 'Elige la dirección con las teclas N_orte 🔼 S_ur 🔽 E_ste ▶️ O_este ◀️ ' + w = txt6.center(66, '#') + print(f'\n{bcolors.HEADER}{bcolors.BOLD}{w}{bcolors.ENDC}\n') + time.sleep(4) + txt5 = ' Para entrar en cada habitación tendrás que resolver una pregunta ' + x = txt5.center(66, '#') + print(f'\n{bcolors.HEADER}{bcolors.BOLD}{x}{bcolors.ENDC}\n') + time.sleep(4) + txt3 = ' Tu misión es encontrar la habitación de los dulces 🍭 ' + y = txt3.center(66, '#') + print(f'\n{bcolors.HEADER}{bcolors.BOLD}{y}{bcolors.ENDC}\n') + time.sleep(4) txt4 = ' ¡¡¡¡ 🎃 SUERTE 🎃 !!!! ' - print(txt4.center(150, '#')) - input() + z = txt4.center(66, '#') + print(f'\n{bcolors.HEADER}{bcolors.BOLD}{z}{bcolors.ENDC}\n') + time.sleep(2) def random_room(): @@ -106,7 +112,6 @@ def paint_matrix(door_coor): def status(): - key = input('\nHacia que habitación quieres moverte?\n').lower() if key == up: @@ -131,19 +136,19 @@ def forbidden(key): if (now_coor[0] == 0 and key == up): - print(f'{bcolors.WARNING} ❌ No puedes moverte en esa dirección{bcolors.ENDC}') + print(f'{bcolors.WARNING}\n ❌ No puedes moverte en esa dirección{bcolors.ENDC}') return None elif (now_coor[1] == 0 and key == left): - print(f'{bcolors.WARNING} ❌ No puedes moverte en esa dirección{bcolors.ENDC}') + print(f'{bcolors.WARNING}\n ❌ No puedes moverte en esa dirección{bcolors.ENDC}') return None elif (now_coor[0] == 3 and key == down): - print(f'{bcolors.WARNING} ❌ No puedes moverte en esa dirección{bcolors.ENDC}') + print(f'{bcolors.WARNING}\n ❌ No puedes moverte en esa dirección{bcolors.ENDC}') return None elif (now_coor[1] == 3 and key == right): - print(f'{bcolors.WARNING} ❌ No puedes moverte en esa dirección{bcolors.ENDC}') + print(f'{bcolors.WARNING}\n ❌ No puedes moverte en esa dirección{bcolors.ENDC}') return None else: return key @@ -169,21 +174,21 @@ def move_status(key): def wich_question(finish): if next_coor == ghost_coor1: - print(f'\n{bcolors.WARNING}👻👻 Has encontrado un fantasmico debes superar dos preguntas para entrar en la habitación 👻👻{bcolors.ENDC}\n') - input() + print(f'\n{bcolors.WARNING}BUUUU !!! 👻 El fantasmico te retiene y debes superar 2 preguntas para entrar 👻{bcolors.ENDC}\n') + time.sleep(2) times(2) - print(f'\n{bcolors.OKGREEN}Puedes moverte de habitación. Pulsa ↩️{bcolors.ENDC}\n') - input() + print(f'\n{bcolors.OKGREEN}Puedes entrar en la habitación{bcolors.ENDC}\n') + time.sleep(2) print_matrix[ghost_coor1[0]][ghost_coor1[1]] = ghost now_coor = next_coor.copy() return now_coor, finish elif next_coor == ghost_coor2: - print(f'\n{bcolors.WARNING}👻👻 Has encontrado un fantasmico debes superar dos preguntas para entrar en la habitación 👻👻{bcolors.ENDC}\n') - input() + print(f'\n{bcolors.WARNING}BUUUU !!! 👻 El fantasmico te retiene y debes superar 2 preguntas para entrar 👻{bcolors.ENDC}\n') + time.sleep(2) times(2) - print(f'\n{bcolors.OKGREEN}Puedes moverte de habitación{bcolors.ENDC}\n') - input() + print(f'\n{bcolors.OKGREEN}Puedes entrar en la habitación{bcolors.ENDC}\n') + time.sleep(2) print_matrix[ghost_coor2[0]][ghost_coor2[1]] = ghost now_coor = next_coor.copy() return now_coor, finish @@ -191,8 +196,13 @@ def wich_question(finish): elif next_coor == lolli_coor: times(1) - print(f"{bcolors.OKGREEN}\n######### #########\n######### #########\n######### 🥳 🎉 Genial!! Has encontrado la habitación de los dulces 🍭🥳 🎉 #########\n######### #########\n######### #########\n{bcolors.ENDC}") - input() + foo = '#' + print(f'{bcolors.OKGREEN}{foo*9:68}{foo*9}{bcolors.ENDC}') + print(f'{bcolors.OKGREEN}{foo*9:68}{foo*9}{bcolors.ENDC}') + print(f'{bcolors.OKGREEN}{foo*9} 🍭 Genial!! Has encontrado la habitación de los dulces 🍭 {foo*9}{bcolors.ENDC}') + print(f'{bcolors.OKGREEN}{foo*9:68}{foo*9}{bcolors.ENDC}') + print(f'{bcolors.OKGREEN}{foo*9:68}{foo*9}{bcolors.ENDC}') + time.sleep(2) print_matrix[lolli_coor[0]][lolli_coor[1]] = lollipop now_coor = next_coor.copy() finish = 'lollipop' @@ -200,8 +210,8 @@ def wich_question(finish): else: times(1) - print(f'\n{bcolors.OKGREEN}Puedes moverte de habitación. Pulsa ↩️{bcolors.ENDC}\n') - input() + print(f'\n{bcolors.OKGREEN}Puedes entrar en la habitación{bcolors.ENDC}\n') + time.sleep(2) print_matrix[next_coor[0]][next_coor[1]] = ok now_coor = next_coor.copy() return now_coor, finish @@ -220,9 +230,9 @@ def eval_question(): answer = (n1*n2) if answer_input.isnumeric() and int(answer_input) == answer: - print(f'\n{bcolors.OKGREEN}Correcto!! {bcolors.ENDC}') + print(f'\n{bcolors.OKGREEN}Correcto!!\n {bcolors.ENDC}') else: - print(f'\n{bcolors.FAIL} ❌ Lo siento respuesta incorrecta{bcolors.ENDC}') + print(f'\n{bcolors.FAIL} ❌ Lo siento respuesta incorrecta, es {answer}, prueba otra vez{bcolors.ENDC}') times(1) @@ -233,15 +243,15 @@ def eval_question(): now_coor = paint_matrix(door_coor) while finish == '': key = status() - while key == None: key = status() - next_coor = move_status(key) forbidden(key) now_coor, finish = wich_question(finish) - paint_matrix(door_coor) + except KeyboardInterrupt: - print('\nbye!!') + print('\nbye!!\n') SystemExit + + \ No newline at end of file From f6a281124fd9bb78388c2bc1bc297f8c7bb0f133 Mon Sep 17 00:00:00 2001 From: Jonathan Alberth Quispe Fuentes Date: Thu, 26 Oct 2023 17:08:45 -0500 Subject: [PATCH 0467/2103] add more testcases --- .../python/qf-jonathan.py" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" index 6d830cbe3f..44b5387877 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/qf-jonathan.py" @@ -62,6 +62,19 @@ def test_objects_meet(self): (((2.001, 1.001), (1, 1)), ((2.001, 1.001), (-1, -1))): ((2.001, 1.001), 0), (((0, 0), (1.01, 1.01)), ((1, 1), (1, 1))): ((101, 101), 100), (((5, 5), (0.0001, -10000)), ((6, 5), (-0.0001, -10000))): ((5.5, -49999995), 5000), + (((5, 5), (1, 1)), ((9, 1), (0, 2))): ((9, 9), 4), + (((46101.5, -57159.4), (-456, 567)), ((-23487.5, -44635.4), (233, 443))): ( + (45.5, 107.6), + 101, + ), + (((750.26, 689.29), (-12.5, -11.6)), ((-3661.99, 1932.49), (67, -34))): ( + (56.51, 45.49), + 55.5, + ), + (((-1921509, -1343381), (334, 233)), ((-645897, -1912235), (112, 332))): ( + (-2345, -4563), + 5746, + ), (((123, 726), (6, 9)), ((100023, 667547), (-4, -57.74884884885))): ( (60063, 90636), 9990, @@ -70,6 +83,14 @@ def test_objects_meet(self): (980198.019802, 980198.019802), 19801.980198, ), + (((794816856, -262218141), (1, 2)), ((216304461, -455055606), (4, 3))): ( + (987654321, 123456789), + 192837465, + ), + (((-0.01825, 0.198), (0.05, 0.08)), ((-0.04975, 0.0315), (0.12, 0.45))): ( + (0.00425, 0.234), + 0.45, + ), } for (obj_a_params, obj_b_params), expected in cases.items(): @@ -84,6 +105,7 @@ def test_object_not_meet(self): (((0, 0), (0.99, 0.99)), ((1, 1), (1, 1))), (((0, 1), (0, 1)), ((0, 0), (0, -1))), (((123, 726), (6, 9)), ((100023, 667547), (-4, -57.75))), + (((1, 2), (3, 4)), ((5, 6), (7, 8))), ] for obj_a_params, obj_b_params in cases: From 00f29d8a0707c07e62d32a289c1a6e01a4259b03 Mon Sep 17 00:00:00 2001 From: deathiwng Date: Fri, 27 Oct 2023 00:14:17 +0200 Subject: [PATCH 0468/2103] Reto #41 - C# --- .../c#/deathwing696.cs" | 207 ++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/deathwing696.cs" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/deathwing696.cs" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/deathwing696.cs" new file mode 100644 index 0000000000..d7bad081a4 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/c#/deathwing696.cs" @@ -0,0 +1,207 @@ +/* + * Este es un reto especial por Halloween. + * Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces. + * + * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. + * (Tienes total libertad para ser creativo con los textos) + * + * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 + * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. + * (16 habitaciones, siendo una de entrada y otra donde están los dulces) + * Esta podría ser una representación: + * 🚪⬜️⬜️⬜️ + * ⬜️👻⬜️⬜️ + * ⬜️⬜️⬜️👻 + * ⬜️⬜️🍭⬜️ + * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. + * Si no lo aciertas no podrás desplazarte. + * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. + * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) + * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. + * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y + * tengas que responder dos preguntas para salir de ella. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; + +namespace reto41 +{ + public class Reto41 + { + private static Dictionary _enigmas = new Dictionary(); + private static Dictionary _preguntas = new Dictionary(); + + static void Main(string[] args) + { + Inicializa_enigmas(); + Inicializa_preguntas(); + + string[,] mansion = { + {"🚪", "⬜", "⬜", "⬜"}, + {"⬜", "👻", "⬜", "⬜"}, + {"⬜", "⬜", "⬜", "👻"}, + {"⬜", "⬜", "🍭", "⬜"} + }; + + int fila_actual = 0; + int columna_actual = 0; + + Console.WriteLine("¡Bienvenido a la mansión abandonada! Conseguirás hallar la habitación de los dulces?"); + + while (true) + { + string habitacion_actual = mansion[fila_actual, columna_actual]; + + Imprime_tablero(mansion, fila_actual, columna_actual); + + if (habitacion_actual == "🍭") + { + Console.WriteLine("¡Enhorabuena! ¡Has encontrado la habitación de los dulces!"); + break; + } + + if (habitacion_actual == "👻") + { + Console.WriteLine("¡Oh no! Un fantasma te ha atrapado. Debes responder dos preguntas para salir."); + + if (!ResponderPregunta() || !ResponderPregunta()) + { + Console.WriteLine("El fantasma no está satisfecho. Has perdido."); + break; + } + } + else + { + Console.WriteLine($"Estás en una habitación. Resuelve el enigma para avanzar."); + if (!ResolverEnigma()) + { + Console.WriteLine("Respuesta incorrecta. No puedes avanzar."); + continue; + } + } + + Console.Write("¿Hacia dónde quieres desplazarte? (norte/sur/este/oeste): "); + string direccion = Console.ReadLine().ToLower(); + + // Mover según la dirección + switch (direccion) + { + case "norte": + if (fila_actual > 0) fila_actual--; + break; + case "sur": + if (fila_actual < mansion.GetLength(0) - 1) fila_actual++; + break; + case "este": + if (columna_actual < mansion.GetLength(1) - 1) columna_actual++; + break; + case "oeste": + if (columna_actual > 0) columna_actual--; + break; + default: + Console.WriteLine("Dirección no válida. Las direcciones que puedes usar son: norte, sur, este u oeste"); + break; + } + } + + Console.ReadKey(); + } + + static void Imprime_tablero(string[,] tablero, int fila_actual, int columna_actual) + { + string simbolo = tablero[fila_actual, columna_actual]; + + tablero[fila_actual, columna_actual] = "👤"; + + for (int i = 0; i < tablero.GetLength(0); i++) + { + for (int j = 0; j < tablero.GetLength(1); j++) + { + Console.Write($"{tablero[i, j]} "); + } + + Console.WriteLine(); + } + + tablero[fila_actual, columna_actual] = simbolo; + } + + static void Inicializa_enigmas() + { + _enigmas.Add("aguja", "Enigma: ¿Qué tiene ojos y no puede ver?"); + _enigmas.Add("vela", "Enigma: Soy alto cuando joven y corto cuando viejo. ¿Qué soy?"); + _enigmas.Add("secreto", "Enigma: Todos me quieren, todos me buscan. Cuando me tienen, me quieren compartir. ¿Qué soy?"); + _enigmas.Add("oscuridad", "Enigma: Cuanto más lo miras, menos lo ves. ¿Qué es?"); + _enigmas.Add("agua", "Enigma: Siempre estoy corriendo, pero nunca me canso. ¿Qué soy?"); + _enigmas.Add("corazón", "Enigma: Si me rompes, no dejas de llorar. Si me tocas, algo moriría. ¿Qué soy?"); + _enigmas.Add("nube", "Enigma: Sin alas, voy a lugares altos. Sin piernas, me muevo rápido. ¿Qué soy?"); + _enigmas.Add("pizza", "Soy redonda como una pelota, pero todo el mundo me quiere llevar a casa. ¿Qué soy?"); + _enigmas.Add("viento", "Enigma: Puedo estar en todas partes, pero nunca puedes verme. ¿Qué soy?"); + _enigmas.Add("teclado", "Enigma: Tengo llaves pero no abro cerraduras. Tengo espacio pero no tengo habitación. ¿Qué soy?"); + _enigmas.Add("espejo", "Enigma: Aunque siempre hablo la verdad, nunca digo una palabra. ¿Qué soy?"); + _enigmas.Add("aliento", "Enigma: Puedo ser tan ligero como una pluma, pero incluso el hombre más fuerte no puede sostenerme durante mucho tiempo. ¿Qué soy?"); + _enigmas.Add("libro", "Enigma: Puedo ser leído, pero no por todos. Todos tienen uno, pero algunos prefieren usar el de otros. ¿Qué soy?"); + _enigmas.Add("futuro", "Enigma: Siempre estoy delante de ti, pero nunca puedes verme. ¿Qué soy?"); + _enigmas.Add("reloj", "Enigma: Tengo agujas pero no coso. Tengo números pero no cuento. ¿Qué soy?"); + _enigmas.Add("cebolla", "Enigma: Aunque no tengo ojos, lloro cuando cortas. ¿Qué soy?"); + _enigmas.Add("sombra", "Enigma: Puedes verme en el agua, pero nunca me mojaré. ¿Qué soy?"); + } + + static void Inicializa_preguntas() + { + _preguntas.Add("mapa", "Pregunta: Tengo ciudades, pero no casas. Tengo montañas, pero no árboles. Tengo agua, pero no peces. ¿Qué soy?"); + _preguntas.Add("café", "Pregunta: Soy tomado de la vaca, pero no soy leche. Tengo cuernos y me bebes caliente. ¿Qué soy?"); + _preguntas.Add("agujero", "Pregunta: Cuando más lo quitas, más grande se vuelve. ¿Qué es?"); + _preguntas.Add("nube", "Pregunta: Puedo volar sin tener alas. Puedo llorar sin tener ojos. ¿Qué soy?"); + _preguntas.Add("Incorrectamente", "Pregunta: ¿Qué palabra siempre está escrita incorrectamente?"); + _preguntas.Add("toalla", "Pregunta: Cuanto más seca, más mojada se vuelve. ¿Qué es?"); + _preguntas.Add("teléfono", "Pregunta: Hablo sin boca y oigo sin oídos. No tengo cuerpo, pero vengo de un cerdo. ¿Qué soy?"); + _preguntas.Add("copo de nieve", "Pregunta: Entra uno, el sol lo toca, y ya no está. ¿Qué es?"); + } + + static bool ResolverEnigma() + { + Extrae_de_diccionario(false, out string pregunta, out string solucion); + + Console.WriteLine(pregunta); + string respuesta = Console.ReadLine().ToLower(); + + return respuesta == solucion; + } + + static bool ResponderPregunta() + { + Extrae_de_diccionario(true, out string pregunta, out string solucion); + + Console.WriteLine(pregunta); + string respuesta = Console.ReadLine().ToLower(); + + return respuesta == solucion; + } + + static void Extrae_de_diccionario(bool es_pregunta, out string pregunta, out string solucion) + { + Random random = new Random(); + + if (es_pregunta) + { + int numero_aleatorio = random.Next(0, _preguntas.Count); + + solucion = _preguntas.Keys.ElementAt(numero_aleatorio); + pregunta = _preguntas[solucion]; + } + else + { + int numero_aleatorio = random.Next(0, _enigmas.Count); + + solucion = _enigmas.Keys.ElementAt(numero_aleatorio); + pregunta = _enigmas[solucion]; + } + } + } +} \ No newline at end of file From b1bed2ce60987efc4dc84f7128c8c9ab3c78602a Mon Sep 17 00:00:00 2001 From: keltoi-dev Date: Fri, 27 Oct 2023 09:10:32 -0300 Subject: [PATCH 0469/2103] Reto #42 - Python --- .../python/keltoi-dev.py" | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/keltoi-dev.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/keltoi-dev.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/keltoi-dev.py" new file mode 100644 index 0000000000..de9af8b439 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/keltoi-dev.py" @@ -0,0 +1,55 @@ +import random + +def funciones_lineales(x1, y1, veloc1, x2, y2, veloc2): + + # m1*x1 + n1*y1 = result1 + # m2*x2 + n2*y2 = result2 + # Se estipulan en forma aleatorias las pendientes de las rectas de accion + m1 = random.randint(-10,10) + n1 = random.randint(-10,10) + m2 = random.randint(-10,10) + n2 = random.randint(-10,10) + + # Obtencion de los datos faltantes para aplicar la regla de Cramer (determinantes) + result1 = (m1 * x1) + (n1 * y1) + result2 = (m2 * x2) + (n2 * y2) + + determinante = (m1 * n2) - (n1 * m2) + if determinante == 0: + print("Las rectas son paralelas, no se seguir calculando.") + exit() + else: + # Calculo coordenadas de cruce + x_intersect = (((result1 * n2) - (n1 * result2)) / determinante) + x_intersect = round(x_intersect, 2) + y_intersect = (((m1 * result2) - (result1 * m2)) / determinante) + y_intersect = round(y_intersect, 2) + + # Calculo de distancias desde origen a punto de cruce con el Teorema de Pitagoras + dist1 = (((x_intersect - x1) ** 2) + ((y_intersect - y1) ** 2)) ** .5 + dist1 = round(dist1, 2) + dist2 = (((x_intersect - x2) ** 2) + ((y_intersect - y2) ** 2)) ** .5 + dist2 = round(dist2, 2) + + # Calculo de tiempo hasta el cruce + tiempo1 = round((dist1 / veloc1), 2) + tiempo2 = round((dist2 / veloc2), 2) + + print("\nLOS RESULTADOS SON:") + print(f"Ambas rectas se cruzan en el punto ({x_intersect}, {y_intersect})") + print(f"La distancia recorrida por el primer vector es {dist1} y le tomo {tiempo1} de tiempo." ) + print(f"La distancia recorrida por el segundo vector es {dist2} y le tomo {tiempo2} de tiempo." ) + +x1 = int(input("Ingrese la coordenada en x del primer punto: ")) +y1 = int(input("Ingrese la coordenada en y del primer punto: ")) +veloc1 = int(input("Ingrese la velocidad del primer punto: ")) +print("\n") +x2 = int(input("Ingrese la coordenada en x del segundo punto: ")) +y2 = int(input("Ingrese la coordenada en y del segundo punto: ")) +veloc2 = int(input("Ingrese la velocidad del segundo punto: ")) + +if x1 != x2 and y1 != y2: + funciones_lineales(x1, y1, veloc1, x2, y2, veloc2) +else: + print("Ambas coordenadas son identicas. Se cruzan antes de iniciar el movimiento.") + \ No newline at end of file From 191712fc1968c3956d2d49d5086b9ec490b5b2d4 Mon Sep 17 00:00:00 2001 From: keltoi-dev Date: Fri, 27 Oct 2023 09:13:20 -0300 Subject: [PATCH 0470/2103] Reto #42 - Python --- .../python/keltoi-dev.py" | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/keltoi-dev.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/keltoi-dev.py" index de9af8b439..818618f511 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/keltoi-dev.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/keltoi-dev.py" @@ -1,3 +1,13 @@ +"""/* + * Crea una función que calcule el punto de encuentro de dos objetos en movimiento + * en dos dimensiones. + * - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento + * (vector de desplazamiento) por unidad de tiempo (también en formato xy). + * - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. + * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. + * - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. + */""" + import random def funciones_lineales(x1, y1, veloc1, x2, y2, veloc2): From 9e1db7c2581af13e684e4fa3706afa99967176fc Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Fri, 27 Oct 2023 10:17:12 -0700 Subject: [PATCH 0471/2103] reto #42 - python --- .../python/KevinED11.py" | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" index bb777aaaaf..8f61144345 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" @@ -1,8 +1,8 @@ -from typing import NamedTuple, Protocol, TypeAlias +from typing import NamedTuple, Protocol import math -Number: TypeAlias = float | int +type Number = float | int class Coordinates(NamedTuple): @@ -71,7 +71,7 @@ def calculate_intersection_point_in_motion(objects: Objects) -> None: objects.object1.velocity, objects.object2.velocity ) - if is_same_direction(diff_velocity): + if is_same_direction(diff_velocity=diff_velocity): print("Los objetos o puntos de encuentro son paralelos y nunca se encuentran.") return @@ -81,10 +81,8 @@ def calculate_intersection_point_in_motion(objects: Objects) -> None: intersection_point = calculate_intersection_point( objects.object1, time_to_intersection ) - intersection_x = intersection_point.x - intersection_y = intersection_point.y - print(f"El punto de encuentro es ({intersection_x}, {intersection_y})") + print(f"El punto de encuentro es ({intersection_point.x}, {intersection_point.y})") print(f"El tiempo que les tomará encontrarse es {time_to_intersection}") @@ -97,9 +95,13 @@ def execute(motion_calculator: MotionCalculatorFn, objects: Objects) -> None: motion_calculator(objects=objects) -if __name__ == "__main__": +def main() -> None: object1 = Object(start_point=Coordinates(x=2, y=2), velocity=Velocity(x=2, y=2)) object2 = Object(start_point=Coordinates(x=2, y=2), velocity=Velocity(x=2, y=2)) objects = Objects(object1=object1, object2=object2) execute(motion_calculator=calculate_intersection_point_in_motion, objects=objects) + + +if __name__ == "__main__": + main() From 0f32667e32df4f408a523c073cb1a86c9d2b4343 Mon Sep 17 00:00:00 2001 From: Joseph Paiz <84993645+Jopai14@users.noreply.github.com> Date: Fri, 27 Oct 2023 11:17:35 -0600 Subject: [PATCH 0472/2103] Add files via upload --- .../dart/JosephPaiz.dart" | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/dart/JosephPaiz.dart" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/dart/JosephPaiz.dart" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/dart/JosephPaiz.dart" new file mode 100644 index 0000000000..023bde6131 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/dart/JosephPaiz.dart" @@ -0,0 +1,26 @@ +import 'dart:io'; + +void main(List args) { + stdout.writeln("Ingrese la tabla de multiplicar: "); + FindOut(); +} + +void FindOut() { + String? table = stdin.readLineSync(); + + if (table == null || table.isEmpty || int.tryParse(table) == null) { + print("¡¡¡Ingrese un valor correcto!!!"); + FindOut(); + } else { + Calculetion(table); + } +} + +void Calculetion(String table) { + print('Estas seria las tablas de multiplicar de $table'); + final numTable = int.tryParse(table)!; + + for (int i = 1; i <= 10; i++) { + print("$table x $i = ${numTable * i}"); + } +} From f7a20141dfa9daa8ebd4c8e087f37219dd0dc475 Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Fri, 27 Oct 2023 14:28:40 -0700 Subject: [PATCH 0473/2103] reto #42 - python --- .../python/KevinED11.py" | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" index 8f61144345..a4850f5df1 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" @@ -1,5 +1,6 @@ from typing import NamedTuple, Protocol import math +import functools type Number = float | int @@ -100,7 +101,17 @@ def main() -> None: object2 = Object(start_point=Coordinates(x=2, y=2), velocity=Velocity(x=2, y=2)) objects = Objects(object1=object1, object2=object2) - execute(motion_calculator=calculate_intersection_point_in_motion, objects=objects) + execute_calculate_intersection_point_in_motion = functools.partial( + execute, motion_calculator=calculate_intersection_point_in_motion + ) + + execute_calculate_intersection_point_in_motion(objects=objects) + + object3 = Object(start_point=Coordinates(x=4, y=3), velocity=Velocity(x=5, y=4)) + object4 = Object(start_point=Coordinates(x=4, y=1), velocity=Velocity(x=3, y=4)) + objects2 = Objects(object1=object3, object2=object4) + + execute_calculate_intersection_point_in_motion(objects=objects2) if __name__ == "__main__": From bad9eab31e70d9ea54026fa3fac9b792d90218db Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Fri, 27 Oct 2023 14:37:23 -0700 Subject: [PATCH 0474/2103] reto #42 - python --- .../python/KevinED11.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" index a4850f5df1..c9fe675e90 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" @@ -84,7 +84,7 @@ def calculate_intersection_point_in_motion(objects: Objects) -> None: ) print(f"El punto de encuentro es ({intersection_point.x}, {intersection_point.y})") - print(f"El tiempo que les tomará encontrarse es {time_to_intersection}") + print(f"El tiempo que les tomará encontrarse es {time_to_intersection} segundos.") class MotionCalculatorFn(Protocol): From 29937ef1bc55d04234a00754d13628bd8cc3714a Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Fri, 27 Oct 2023 23:39:00 +0200 Subject: [PATCH 0475/2103] Reto #41 - Java --- .../java/Qv1ko.java" | 181 ++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/java/Qv1ko.java" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/java/Qv1ko.java" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/java/Qv1ko.java" new file mode 100644 index 0000000000..9986e68f19 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/java/Qv1ko.java" @@ -0,0 +1,181 @@ +import java.util.Random; +import java.util.Scanner; + +public class Qv1ko { + + public static void main(String[] args) { + + char[][] house = createHouse(); + int[] door = findDoor(house); + + int[] position = door; + System.out.println("Starting position: [" + position[0] + ", " + position[1] + "]\n"); + + System.out.println("If you want to find the candy in the haunted house you will have to search through its rooms."); + System.out.println("But remember, you won't be able to move if you don't answer their riddle correctly first.\n"); + + Scanner scanner = new Scanner(System.in); + + while (true) { + + position = move(position, house); + System.out.println("Position: [" + position[0] + ", " + position[1] + "]\n"); + + char houseRoom = house[position[0]][position[1]]; + + if (houseRoom == 'R') { + + System.out.println("Answer this question correctly."); + riddle(); + + boolean ghost = new Random().nextInt(10) == 1; + + if (ghost) { + System.out.println("Boo! To get out of this room you will have to answer one more question."); + riddle(); + } + + } else if (houseRoom == 'C') { + System.out.println("You have found the candy and escaped from the haunted house."); + break; + } + + } + + scanner.close(); + + } + + private static char[][] createHouse() { + + char[][] house = new char[4][4]; + + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + house[i][j] = 'R'; + } + } + + boolean isColumn = new Random().nextBoolean(); + int[] door; + + if (isColumn) { + door = new int[] { new Random().nextInt(4), new Random().nextInt(2) * 3 }; + } else { + door = new int[] { new Random().nextInt(2) * 3, new Random().nextInt(4) }; + } + + house[door[0]][door[1]] = 'D'; + + int[] candy = generateCandy(door); + house[candy[0]][candy[1]] = 'C'; + + for (int i = 0; i < 4; i++) { + System.out.println(new String(house[i])); + } + + return house; + + } + + private static int[] generateCandy(int[] door) { + + int[] candy; + + do { + candy = new int[] { new Random().nextInt(4), new Random().nextInt(4) }; + } while (candy[0] == door[0] && candy[1] == door[1]); + + return candy; + + } + + private static int[] findDoor(char[][] house) { + + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + if (house[i][j] == 'D') { + return new int[] { i, j }; + } + } + } + + return new int[] { -1, -1 }; + + } + + private static int[] move(int[] position, char[][] house) { + + int row = position[0]; + int column = position[1]; + + String movements = "N S E W "; + + if (row == 0) { + movements = movements.replace("N ", ""); + } + if (row == 3) { + movements = movements.replace("S ", ""); + } + if (column == 0) { + movements = movements.replace("W ", ""); + } + if (column == 3) { + movements = movements.replace("E ", ""); + } + + try (Scanner scanner = new Scanner(System.in)) { + + String movement; + + do { + System.out.print("Where do you want to move [ " + movements + "]?: "); + movement = scanner.next().toUpperCase(); + } while (!movements.contains(movement)); + + if (movement.equals("N")) { + position = new int[] { row - 1, column }; + } else if (movement.equals("S")) { + position = new int[] { row + 1, column }; + } else if (movement.equals("E")) { + position = new int[] { row, column + 1 }; + } else if (movement.equals("W")) { + position = new int[] { row, column - 1 }; + } + + } + + return position; + + } + + private static void riddle() { + + int randomNumber1 = (int) (Math.random() * 51); + int randomNumber2 = (int) (Math.random() * 51); + + String[][] riddles = { + { Integer.toString(randomNumber1) + " + " + Integer.toString(randomNumber2), Integer.toString(randomNumber1 + randomNumber2) }, + { Integer.toString(randomNumber1) + " - " + Integer.toString(randomNumber2), Integer.toString(randomNumber1 - randomNumber2) }, + { Integer.toString(randomNumber1) + " * " + Integer.toString(randomNumber2), Integer.toString(randomNumber1 * randomNumber2) }, + }; + + String[] riddle = riddles[new Random().nextInt(riddles.length)]; + + try (Scanner scanner = new Scanner(System.in)) { + + System.out.print(riddle[0] + ": "); + + String answer = scanner.nextLine(); + + if (answer.equalsIgnoreCase(riddle[1])) { + System.out.println("Correct answer!\n"); + } else { + System.out.println("Incorrect answer!\n"); + } + + } + + } + +} From 76d982727265c4ee9fc48d2c8e1840b37d372b43 Mon Sep 17 00:00:00 2001 From: Hans Escobar <60953384+hdescobarh@users.noreply.github.com> Date: Fri, 27 Oct 2023 17:00:39 -0500 Subject: [PATCH 0476/2103] =?UTF-8?q?Reto=20#42=20-=20Incluye=20documentac?= =?UTF-8?q?i=C3=B3n=20y=20unit=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rust/hdescobarh.rs" | 258 ++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/rust/hdescobarh.rs" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/rust/hdescobarh.rs" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/rust/hdescobarh.rs" new file mode 100644 index 0000000000..952b164c53 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/rust/hdescobarh.rs" @@ -0,0 +1,258 @@ +// author: Hans D. Escobar H. (hdescobarh) + +/* La lógica de la solución es la siguiente. Sí los dos objetos se encuentran, necesariamente +existe un tiempo 𝘵 ≥ 0 tal que la distancia euclídea entre las posiciones de los dos objetos es cero. */ + +#![crate_name = "punto_de_encuentro"] +#![crate_type = "cdylib"] +use std::ops::{Mul, Sub}; + +/// Parámetro introducido para controlar el impacto de errores de redondeo en valores cercanos al cero [^note]. +/// +/// [^note]: Para mis información: [Catastrophic cancellation](https://en.wikipedia.org/wiki/Catastrophic_cancellation). +pub const TOLERANCE: f64 = 1E-10_f64; + +/// Representa una entidad arbitraria en un espacio vectorial ℝ². +pub struct Object2D { + /// Vector posición 𝗽. + location: Vector2D, + /// Vector velocidad 𝐯. Es decir, desplazamiento (𝗽(𝘵+𝑖) - 𝗽(𝘵)) por unidad de tiempo 𝑖. + velocity: Vector2D, +} + +impl Object2D { + /// Retorna una entidad en un espacio vectorial ℝ². + /// + /// # Argumentos: + /// + /// * `location` - La posición actual del objeto (x,y). + /// * `velocity` - La velocidad (x,y) con la que se mueve el objeto. + pub fn new(location: &[f64; 2], velocity: &[f64; 2]) -> Self { + Self { + location: Vector2D::from(location), + velocity: Vector2D::from(velocity), + } + } +} + +impl UniformLinearMotion for Object2D { + /// Retorna el tiempo dentro del cual el objeto va a colisionar con otro objeto. + /// Retorna None sí nunca se encuentran. + /// + /// # Argumentos: + /// + /// * `other` - El segundo objeto con el que se evaluara la colisión. + /// + /// # Ejemplo: + /// + /// ``` + /// use punto_de_encuentro::*; + /// let object_1 = Object2D::new(&[6.0, 7.0], &[-1.8, -0.6]); + /// let object_2 = Object2D::new(&[2.0, 2.0], &[-1.0, 0.4]); + /// let time: f64 = object_1.ulm_collision_time(&object_2).unwrap(); + /// assert!((5.0-time).abs() < TOLERANCE); + /// ``` + /// + /// # Explicación de la física: + /// + /// Sí los dos objetos se encuentran, necesariamente existe un tiempo 𝘵, + /// tal que la distancia euclídea 𝓓(a,b) = ‖a-b‖ entre las posiciones 𝗽 y 𝗽' + /// del primer y segundo objeto, respectivamente, es cero; es decir: + /// + /// * (1) ∃𝘵‖𝗽(𝘵)-𝗽'(𝘵)‖ = ‖Δ𝗽(𝘵)‖ = 0 + /// + /// En movimiento linear uniforme, la velocidad 𝐯 es constante para todo tiempo 𝘵; por lo tanto: + /// * (2) 𝗽(𝘵) = 𝗽₀ + 𝘵𝐯 + /// + /// Por (1) y (2), y por propiedades del producto punto ⟨·,·⟩: + /// * (3) ⟨Δ𝗽(𝘵), Δ𝗽(𝘵)⟩ = 𝘵² ⟨Δ𝐯,Δ𝐯⟩ + 𝘵 2⟨Δ𝐯,Δ𝗽₀⟩ + ⟨Δ𝗽₀,Δ𝗽₀⟩ = 0 + /// + fn ulm_collision_time(&self, other: &Self) -> Option { + // obtenemos Δ𝗽₀ y Δ𝐯 + let delta_initial_position: Vector2D = self.location - other.location; + let delta_velocity: Vector2D = self.velocity - other.velocity; + // Es un polinomio de la forma ax² + bx + c, donde a=⟨Δ𝐯,Δ𝐯⟩, b=2⟨Δ𝐯,Δ𝗽₀⟩, c=⟨Δ𝗽₀,Δ𝗽₀⟩ + let a: f64 = delta_velocity * delta_velocity; + let b: f64 = delta_velocity * delta_initial_position * 2.0; + let c: f64 = delta_initial_position * delta_initial_position; + // sí ambos objetos llevan la misma velocidad, a=0 y b=0. El problema es lineal 0x + c = 0 + if a.abs() < TOLERANCE { + // sí parten de la misma posición, c=0. Hay infinitas soluciones: ∀x(0x = 0) + if c.abs() < TOLERANCE { + return Some(0.0); + // sí por el contrario, c≠0. No hay solución: ∄x(0x = c) + } else { + return None; + } + } + // Cuando a≠0 es un problema cuadrático y aplicamos + // la formula cuadrática: ( -b +- sqrt(b² - 4 ac) ) / (2a), + + let mut discriminant = (b * b) - (4.0 * a * c); + // Sí v satisface que -TOLERANCE < v < TOLERANCE, entonces es un cero efectivo + if discriminant.abs() < TOLERANCE { + discriminant = 0.0; + } + // sí tiene solución en los reales, necesariamente b² - 4ac ≧ 0 + if discriminant < 0.0_f64 { + return None; + } + let sqrt_discriminant = discriminant.sqrt(); + let solution_1 = (-b - sqrt_discriminant) / (2.0 * a); + let solution_2 = (-b + sqrt_discriminant) / (2.0 * a); + // es movimiento rectilíneo uniforme en un espacio euclídeo; por lo tanto, + // a lo sumo existe solo una solución valida (t>=0) + if solution_1 >= 0.0_f64 { + Some(solution_1) + } else if solution_2 > 0.0_f64 { + Some(solution_2) + } else { + None + } + } +} + +pub trait UniformLinearMotion { + fn ulm_collision_time(&self, other: &Self) -> Option; +} + +/// Representa un elemento de un espacio vectorial en ℝ² en coordenadas cartesianas. +#[derive(Clone, Copy)] +pub struct Vector2D { + x: f64, + y: f64, +} + +/// Construye un Vector desde un Array [f64; 2] +impl From<&[f64; 2]> for Vector2D { + fn from(value: &[f64; 2]) -> Self { + Self { + x: value[0], + y: value[1], + } + } +} + +/// Producto punto con otro vector ⟨self,other⟩ +impl Mul for Vector2D { + type Output = f64; + fn mul(self, rhs: Vector2D) -> Self::Output { + (self.x * rhs.x) + (self.y * rhs.y) + } +} + +/// Diferencia con otro vector self - other +impl Sub for Vector2D { + type Output = Vector2D; + + fn sub(self, rhs: Self) -> Self::Output { + Vector2D { + x: self.x - rhs.x, + y: self.y - rhs.y, + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn ulm_collision_time_by_axis() { + let test_cases = [ + // same origin and velocity + ( + [[9.0, 0.0], [60.0, 0.0], [9.0, 0.0], [60.0, 0.0]], + Some(0.0), + ), + // same origin, different velocity + ( + [[15.8, 0.0], [80.3, 0.0], [15.8, 0.0], [-50.0, 0.0]], + Some(0.0), + ), // different origin, same velocity + ([[17.0, 0.0], [123.5, 0.0], [1.8, 0.0], [123.5, 0.0]], None), + // from here, different origin and velocity + ([[98.0, 0.0], [30.0, 0.0], [15.0, 0.0], [-42.0, 0.0]], None), + ([[0.0, 0.0], [0.5, 0.0], [6.0, 0.0], [0.0, 0.0]], Some(12.0)), + ( + [[-2.5, 0.0], [2.406, 0.0], [4.5, 0.0], [2.1, 0.0]], + Some(22.8758169934), + ), + ( + [[12.0, 0.0], [2.7, 0.0], [179.0, 0.0], [-3.1, 0.0]], + Some(28.7931031275), + ), + ( + [[-10.0, 0.0], [34.0, 0.0], [200.0, 0.0], [-36.0, 0.0]], + Some(3.0), + ), + ]; + + // check axis X + for ([loc1, vel1, loc2, vel2], expected) in &test_cases { + let object_1 = Object2D::new(loc1, vel1); + let object_2 = Object2D::new(loc2, vel2); + let solution = object_1.ulm_collision_time(&object_2); + if expected.is_some() && solution.is_some() { + assert!( + (expected.unwrap() - solution.unwrap()).abs() < TOLERANCE, + "Axis X. Expected {:?}, obtained {:?}", + expected, + solution + ) + } else { + assert_eq!(*expected, solution) + }; + } + + // now check axis Y + for ([loc1, vel1, loc2, vel2], expected) in &test_cases { + let object_1 = Object2D::new(&[loc1[1], loc1[0]], &[vel1[1], vel1[0]]); + let object_2 = Object2D::new(&[loc2[1], loc2[0]], &[vel2[1], vel2[0]]); + let solution = object_1.ulm_collision_time(&object_2); + if expected.is_some() && solution.is_some() { + assert!( + (expected.unwrap() - solution.unwrap()).abs() < TOLERANCE, + "Axis Y. Expected {:?}, obtained {:?}", + expected, + solution + ) + } else { + assert_eq!(*expected, solution) + }; + } + } + + #[test] + fn ulm_collision_time_bidimensional() { + let test_cases = [ + // meet + ( + [[6.0, 7.0], [-9.0, -3.0], [2.0, 2.0], [-5.0, 2.0]], + Some(1.0), + ), + ( + [[6.0, 7.0], [-1.8, -0.6], [2.0, 2.0], [-1.0, 0.4]], + Some(5.0), + ), + // never meet + ([[6.0, 7.0], [-1.8, -0.6], [2.0, 2.0], [1.0, 0.4]], None), + ]; + + for ([loc1, vel1, loc2, vel2], expected) in &test_cases { + let object_1 = Object2D::new(loc1, vel1); + let object_2 = Object2D::new(loc2, vel2); + let solution = object_1.ulm_collision_time(&object_2); + if expected.is_some() && solution.is_some() { + assert!( + (expected.unwrap() - solution.unwrap()).abs() < TOLERANCE, + "Expected {:?}, obtained {:?}", + expected, + solution + ) + } else { + assert_eq!(*expected, solution) + }; + } + } +} From e84ca54b08c3434eb72dd8f940e7d563e1e41504 Mon Sep 17 00:00:00 2001 From: "Pusho.Dev" <130678121+PushoDev@users.noreply.github.com> Date: Fri, 27 Oct 2023 18:21:47 -0400 Subject: [PATCH 0477/2103] Add files via upload --- .../python/PushoDev.py" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/PushoDev.py" diff --git "a/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/PushoDev.py" "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/PushoDev.py" new file mode 100644 index 0000000000..ba095b56a5 --- /dev/null +++ "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/PushoDev.py" @@ -0,0 +1,20 @@ +def encontrar_caracter_infiltrado(cad1, cad2): + infiltrados = [] + if len(cad1) != len(cad2): + return infiltrados # Retorna una lista vacía si las cadenas no tienen la misma longitud + for i in range(len(cad1)): + if cad1[i] != cad2[i]: + infiltrados.append(cad1[i]) + return infiltrados + +print("Pusho.Dev") +print("https://puschoft.blogspot.com") + +# Solicitar al usuario ingresar textos para identificar +cad1 = input("Ingrese la primera cadena: ") +cad2 = input("Ingrese la segunda cadena: ") + +# Mostrar los Resultados de este ejercicio +resp = encontrar_caracter_infiltrado(cad1, cad2) +print("Los caracteres infiltrados son:", resp) +print("Muchas Gracias por participar ...") \ No newline at end of file From ebd816be1aeb8af7a57db072f6f14261287f4a7e Mon Sep 17 00:00:00 2001 From: mstrnilsson Date: Sat, 28 Oct 2023 00:30:02 +0200 Subject: [PATCH 0478/2103] Reto #41 - Python MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -Menu, variables, gráfico, nombre funciones --- .../python/mstrnilsson.py" | 300 +++++++++--------- 1 file changed, 151 insertions(+), 149 deletions(-) diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mstrnilsson.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mstrnilsson.py" index 866541a2c0..f765984fe8 100755 --- "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mstrnilsson.py" +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/mstrnilsson.py" @@ -1,4 +1,4 @@ -import random, time +import random, time, os class bcolors: HEADER = '\033[95m' @@ -11,247 +11,249 @@ class bcolors: BOLD = '\033[1m' UNDERLINE = '\033[4m' -print_matrix = [] -door_coor = [] -ghost_coor1 = [] -ghost_coor2 = [] -lolli_coor = [] -next_coor = [] -now_coor = [] - -row=0 -column=0 -row_door=0 -column_door=0 -square = "🔳" -door = "🚪" -ghost = "👻" -up_arrow = "🔼" -down_arrow = "🔽" -left_arrow = "◀️" -right_arrow = "▶️" -lollipop = "🍭" -ok = "✅" -up = 'n' -down = 's' -left = 'o' -right = 'e' -arrows = ['n', 's', 'e', 'o'] - -key = '' -finish = '' - def intro(): + os.system('clear') txt1 = '👻 LA CASA ENCANTADA 👻' - u = txt1.center(67, '#') - print(f'\n{bcolors.HEADER}{bcolors.BOLD}{u}{bcolors.ENDC}\n') + u = txt1.center(69, '#') + print(f'\n\n\r{bcolors.HEADER}{bcolors.BOLD}{u}{bcolors.ENDC}\n\n', end='') + time.sleep(1) + txt2 = ' Te encuentas explorando las habitaciones de una 🏚️ mansión abandonada' + v = txt2.center(69, '#') + print(f'\r{bcolors.HEADER}{bcolors.BOLD}{v}{bcolors.ENDC}', end='') + time.sleep(3) + txt3 = ' Elige la dirección con las teclas N_orte 🔼 S_ur 🔽 E_ste ▶️ O_este ◀️ ' + w = txt3.center(69, '#') + print(f'\r{bcolors.HEADER}{bcolors.BOLD}{w}{bcolors.ENDC}', end='') + time.sleep(3) + txt4 = ' Para entrar en cada habitación tendrás que resolver una pregunta ' + x = txt4.center(70, '#') + print(f'\r{bcolors.HEADER}{bcolors.BOLD}{x}{bcolors.ENDC}', end='') + time.sleep(3) + txt5 = '¡¡¡¡ SUERTE !!!!' + z = txt5.center(69, '#') + print(f'\r{bcolors.HEADER}{bcolors.BOLD}{z}{bcolors.ENDC}\n', end='') + os.system('clear') + print('\r\r\r') time.sleep(1) - txt2 = 'Te encuentas explorando las habitaciones de una 🏚️ mansión abandonada' - v = txt2.center(66, '#') - print(f'\n{bcolors.HEADER}{bcolors.BOLD}{v}{bcolors.ENDC}\n') - time.sleep(4) - txt6 = 'Elige la dirección con las teclas N_orte 🔼 S_ur 🔽 E_ste ▶️ O_este ◀️ ' - w = txt6.center(66, '#') - print(f'\n{bcolors.HEADER}{bcolors.BOLD}{w}{bcolors.ENDC}\n') - time.sleep(4) - txt5 = ' Para entrar en cada habitación tendrás que resolver una pregunta ' - x = txt5.center(66, '#') - print(f'\n{bcolors.HEADER}{bcolors.BOLD}{x}{bcolors.ENDC}\n') - time.sleep(4) - txt3 = ' Tu misión es encontrar la habitación de los dulces 🍭 ' - y = txt3.center(66, '#') - print(f'\n{bcolors.HEADER}{bcolors.BOLD}{y}{bcolors.ENDC}\n') - time.sleep(4) - txt4 = ' ¡¡¡¡ 🎃 SUERTE 🎃 !!!! ' - z = txt4.center(66, '#') - print(f'\n{bcolors.HEADER}{bcolors.BOLD}{z}{bcolors.ENDC}\n') - time.sleep(2) -def random_room(): +def random_targets(): for i in range(1): random_row = random.randrange(0,4) random_column = random.randrange(0,4) return random_row, random_column -def paint_game(row, column): +def targets(row, column): + + door_coor=[] + lolli_coor=[] + ghost_coor1 = [] + ghost_coor2 = [] + door_coor.extend([row, column]) - row, column = random_room() + row, column = random_targets() while [row, column] == door_coor: - row, column = random_room() + row, column = random_targets() lolli_coor.extend([row, column]) - row, column = random_room() + row, column = random_targets() while [row, column] == lolli_coor or [row, column] == door_coor: - row, column = random_room() + row, column = random_targets() ghost_coor1.extend([row, column]) - row, column = random_room() + row, column = random_targets() while [row, column] == ghost_coor1 or [row, column] == lolli_coor or [row, column] == door_coor: - row, column = random_room() + row, column = random_targets() ghost_coor2.extend([row, column]) return door_coor, lolli_coor, ghost_coor1, ghost_coor2 -def paint_matrix(door_coor): - +def paint_matrix(door_coor, now_coor, matrix): + time.sleep(1) + print('\r\r\r') for i in range(4): - print_matrix.append([]) + matrix.append([]) for j in range(4): if [i, j] == door_coor: - print_matrix[i].append(door) + matrix[i].append('🚪') now_coor = door_coor.copy() else: - print_matrix[i].append(square) - for row in range(4): + matrix[i].append('🔳') + for row in range(4): for column in range(4): - print(print_matrix[row][column], end = '') + print(matrix[row][column], end = '') print() - return now_coor + return now_coor, matrix - - -def status(): +def course(now_coor): key = input('\nHacia que habitación quieres moverte?\n').lower() + arrows = ['n', 's', 'e', 'o'] - if key == up: - print(f'{up_arrow}') - if key == down: - print(f'{down_arrow}') - if key == right: - print(f'{right_arrow}') - if key == left: - print(f'{left_arrow}') - + if key == 'n': + print('🔼') + if key == 's': + print('🔽') + if key == 'e': + print('▶️') + if key == 'o': + print('◀️') if key in arrows: - if forbidden(key) == key: + if forbidden(key, now_coor) == key: return key else: return None else: return None -def forbidden(key): +def forbidden(key, now_coor): - - if (now_coor[0] == 0 and key == up): + if (now_coor[0] == 0 and key == 'n'): print(f'{bcolors.WARNING}\n ❌ No puedes moverte en esa dirección{bcolors.ENDC}') return None - - elif (now_coor[1] == 0 and key == left): + elif (now_coor[1] == 0 and key == 'o'): print(f'{bcolors.WARNING}\n ❌ No puedes moverte en esa dirección{bcolors.ENDC}') return None - - elif (now_coor[0] == 3 and key == down): + elif (now_coor[0] == 3 and key == 's'): print(f'{bcolors.WARNING}\n ❌ No puedes moverte en esa dirección{bcolors.ENDC}') return None - - elif (now_coor[1] == 3 and key == right): + elif (now_coor[1] == 3 and key == 'e'): print(f'{bcolors.WARNING}\n ❌ No puedes moverte en esa dirección{bcolors.ENDC}') return None else: return key -def move_status(key): +def next(key, now_coor): next_coor = now_coor.copy() - if key == up: + if key == 'n': next_coor[0] -= 1 - - if key == down: + if key == 's': next_coor[0] += 1 - - if key == right: + if key == 'e': next_coor[1] += 1 - - if key == left: + if key == 'o': next_coor[1] -= 1 return next_coor -def wich_question(finish): +def wich_target(matrix, finish, next_coor, lolli_coor, ghost_coor1, ghost_coor2): if next_coor == ghost_coor1: print(f'\n{bcolors.WARNING}BUUUU !!! 👻 El fantasmico te retiene y debes superar 2 preguntas para entrar 👻{bcolors.ENDC}\n') - time.sleep(2) - times(2) - print(f'\n{bcolors.OKGREEN}Puedes entrar en la habitación{bcolors.ENDC}\n') - time.sleep(2) - print_matrix[ghost_coor1[0]][ghost_coor1[1]] = ghost + time.sleep(1) + enigma(2) + print(f'\n{bcolors.OKGREEN}🔑 Puedes entrar en la habitación{bcolors.ENDC}\n') + time.sleep(1) + os.system('clear') + matrix[ghost_coor1[0]][ghost_coor1[1]] = '👻' now_coor = next_coor.copy() return now_coor, finish elif next_coor == ghost_coor2: print(f'\n{bcolors.WARNING}BUUUU !!! 👻 El fantasmico te retiene y debes superar 2 preguntas para entrar 👻{bcolors.ENDC}\n') - time.sleep(2) - times(2) - print(f'\n{bcolors.OKGREEN}Puedes entrar en la habitación{bcolors.ENDC}\n') - time.sleep(2) - print_matrix[ghost_coor2[0]][ghost_coor2[1]] = ghost + time.sleep(1) + enigma(2) + print(f'\n{bcolors.OKGREEN}🔑 Puedes entrar en la habitación{bcolors.ENDC}\n') + time.sleep(1) + os.system('clear') + matrix[ghost_coor2[0]][ghost_coor2[1]] = '👻' now_coor = next_coor.copy() return now_coor, finish elif next_coor == lolli_coor: - times(1) + enigma(1) foo = '#' - print(f'{bcolors.OKGREEN}{foo*9:68}{foo*9}{bcolors.ENDC}') + print(f'{bcolors.OKGREEN}\n{foo*9:68}{foo*9}{bcolors.ENDC}') print(f'{bcolors.OKGREEN}{foo*9:68}{foo*9}{bcolors.ENDC}') print(f'{bcolors.OKGREEN}{foo*9} 🍭 Genial!! Has encontrado la habitación de los dulces 🍭 {foo*9}{bcolors.ENDC}') print(f'{bcolors.OKGREEN}{foo*9:68}{foo*9}{bcolors.ENDC}') - print(f'{bcolors.OKGREEN}{foo*9:68}{foo*9}{bcolors.ENDC}') - time.sleep(2) - print_matrix[lolli_coor[0]][lolli_coor[1]] = lollipop + print(f'{bcolors.OKGREEN}{foo*9:68}{foo*9}\n{bcolors.ENDC}') + time.sleep(1) + matrix[lolli_coor[0]][lolli_coor[1]] = '🍭' now_coor = next_coor.copy() finish = 'lollipop' return now_coor, finish else: - times(1) - print(f'\n{bcolors.OKGREEN}Puedes entrar en la habitación{bcolors.ENDC}\n') - time.sleep(2) - print_matrix[next_coor[0]][next_coor[1]] = ok + enigma(1) + print(f'\n{bcolors.OKGREEN}🔑 Puedes entrar en la habitación{bcolors.ENDC}\n') + time.sleep(1) + os.system('clear') + matrix[next_coor[0]][next_coor[1]] = '✅' now_coor = next_coor.copy() return now_coor, finish - -def times(i:int): +def enigma(i:int): while i != 0: - eval_question() + n1 = random.randrange(3,10) + n2 = random.randrange(3,10) + + answer_input = input(f'\n{bcolors.OKBLUE}¿Cuánto es {n1} x {n2}? = {bcolors.ENDC}') + answer = (n1*n2) + + if answer_input.isnumeric() and int(answer_input) == answer: + print(f'\n{bcolors.OKGREEN}Correcto!!{bcolors.ENDC}') + else: + print(f'\n{bcolors.FAIL} ❌ Lo siento respuesta incorrecta, es {bcolors.WARNING}{answer}{bcolors.ENDC}{bcolors.FAIL}, prueba otra vez{bcolors.ENDC}') + enigma(1) i -= 1 -def eval_question(): - n1 = random.randrange(3,10) - n2 = random.randrange(3,10) +def main(): + row=0 + column=0 + matrix = [] + next_coor = [] + now_coor = [] + key = '' + finish = '' + try: + time.sleep(1) + row, column = random_targets() + door_coor, lolli_coor, ghost_coor1, ghost_coor2 = targets(row, column) + now_coor, matrix = paint_matrix(door_coor, now_coor, matrix) + while finish == '': + key = course(now_coor) + while key == None: + key = course(now_coor) + next_coor = next(key, now_coor) + forbidden(key, now_coor) + now_coor, finish = wich_target(matrix, finish, next_coor, lolli_coor, ghost_coor1, ghost_coor2) + paint_matrix(door_coor, now_coor, matrix) + menu() + except KeyboardInterrupt: + print('\nbye!!\n') + SystemExit - answer_input = input(f'\n{bcolors.OKBLUE}¿Cuánto es {n1} x {n2}? = {bcolors.ENDC}') - answer = (n1*n2) + +if __name__ == "__main__": + + def menu(): + + try: + chosen_element = input(f"\n{bcolors.BOLD}{bcolors.OKBLUE}BIENVENIDO AL JUEGO, ELIGE UNA OPCIÓN: J_ugar C_ontinuar S_alir{bcolors.ENDC} \n") + os.system('clear') + if chosen_element.upper() == "J": + intro() + main() + elif chosen_element.upper() == "C": + main() + elif chosen_element.upper() == "S": + print('\nbye!!\n') + time.sleep(1) + SystemExit + else: + print("\nOpción no válida, vuelve a intentarlo") + menu() + except KeyboardInterrupt: + print('\nbye!!\n') + SystemExit + menu() - if answer_input.isnumeric() and int(answer_input) == answer: - print(f'\n{bcolors.OKGREEN}Correcto!!\n {bcolors.ENDC}') - else: - print(f'\n{bcolors.FAIL} ❌ Lo siento respuesta incorrecta, es {answer}, prueba otra vez{bcolors.ENDC}') - times(1) -try: - intro() - row, column = random_room() - door_coor, lolli_coor, ghost_coor1, ghost_coor2 = paint_game(row, column) - now_coor = paint_matrix(door_coor) - while finish == '': - key = status() - while key == None: - key = status() - next_coor = move_status(key) - forbidden(key) - now_coor, finish = wich_question(finish) - paint_matrix(door_coor) - -except KeyboardInterrupt: - print('\nbye!!\n') - SystemExit + \ No newline at end of file From decfda884791e6e531cfb891eea23a7a72bff1c1 Mon Sep 17 00:00:00 2001 From: Adrian01cst <149220355+Adrian01cst@users.noreply.github.com> Date: Fri, 27 Oct 2023 21:08:28 -0700 Subject: [PATCH 0479/2103] Reto #0 - Java --- .../java/Adrian01cst.java" | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Adrian01cst.java" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Adrian01cst.java" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Adrian01cst.java" new file mode 100644 index 0000000000..5d6ccd3699 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Adrian01cst.java" @@ -0,0 +1,25 @@ +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ + +public class Adrian01cst { + public static void main(String[] args) { + + for(int i = 1; i <= 100; i++) { + if(i % 3 == 0 && i % 5 ==0) { + System.out.println("fizzbuzz"); + } else if(i % 3 == 0) { + System.out.println("fizz"); + } else if(i % 5 == 0) { + System.out.println("buzz"); + } else { + System.out.println(i); + } + } + } +} \ No newline at end of file From 2ec44c8330d02f85154e4f551ef2a3f55b7e5461 Mon Sep 17 00:00:00 2001 From: Juan David Duque Date: Sat, 28 Oct 2023 01:01:48 -0500 Subject: [PATCH 0480/2103] Reto mouredev#34 - jduque1989 - Python --- .../python/jduque1989.py | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Retos/Reto #34 - EL TXT [Media]/python/jduque1989.py diff --git a/Retos/Reto #34 - EL TXT [Media]/python/jduque1989.py b/Retos/Reto #34 - EL TXT [Media]/python/jduque1989.py new file mode 100644 index 0000000000..943f53d486 --- /dev/null +++ b/Retos/Reto #34 - EL TXT [Media]/python/jduque1989.py @@ -0,0 +1,46 @@ +import os + + +def write_file(filename): + + with open(filename, "a") as file: + while True: + line = input("Enter a line of text: ") + if line == "": + break + file.write(line + "\n") + + +def erase_file(filename): + with open(filename, "w") as file: + file.write("") + + +# get files in directory + +files_in_directory = os.listdir() + +# Filter the list to only show .txt files +text_files = [file for file in files_in_directory if file.endswith(".txt")] + +if text_files: + print("The following .txt files are in the current directory:") + for idx, file in enumerate(text_files, 1): + print(f"{idx}. {file}") + choise = int(input("Enter the number of the file you want to edit: ")) + filename = text_files[choise - 1] + action = input("Write (w) or erase (e)?: ").lower() + if action == "w": + write_file(filename) + elif action == "e": + erase_file(filename) + print(f"Content of {filename} has been cleared!") + write_file(filename) +else: + print("No .txt files found in the current directory.") + print("We're going to create one for you.") + filename = input("What do you want to name the file? ") + filename = filename + ".txt" + with open(filename, "w") as f: + pass + write_file(filename) From d63ab8ec055f079b188f96d3df7ed7f61fe3c634 Mon Sep 17 00:00:00 2001 From: AlbertoVf Date: Sat, 28 Oct 2023 12:35:02 +0200 Subject: [PATCH 0481/2103] reto#42 - typescript --- .../typescript/albertovf.ts" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/typescript/albertovf.ts" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/typescript/albertovf.ts" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/typescript/albertovf.ts" new file mode 100644 index 0000000000..97fd5d0dbf --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/typescript/albertovf.ts" @@ -0,0 +1,69 @@ +class Point { + x: number; y: number; + + constructor(x, y) { + this.x = x; + this.y = y; + } + + distance = (z: Point) => { + return Math.sqrt( + (z.x - this.x) ** 2 + + (z.y - this.y) ** 2 + ) + } +} + +class Vector { + x: number; + y: number; + vx: number; + vy: number; + + constructor(o: Point, v: Point) { + this.x = o.x; + this.y = o.y; + this.vx = v.x; + this.vy = v.y; + } + + origin() { + return new Point(this.x, this.y); + } + + desplazamiento(t: number) { + return new Point(this.x + this.vx * t, this.y + this.vy * t); + } +} + +const colision = (A: Vector, B: Vector) => { + let t = 1; + let previousDistance = A.origin().distance(B.origin()); + let actualDistance = A.desplazamiento(t).distance(B.desplazamiento(t)); + + while (true) { + t++ + let Ax2 = A.desplazamiento(t).x; + let Ay2 = A.desplazamiento(t).y; + let Bx2 = B.desplazamiento(t).x; + let By2 = B.desplazamiento(t).y; + if (actualDistance >= previousDistance) { + return 'Los puntos no se encuentran'; + } + else if (Ax2 === Bx2 && Ay2 === By2) { + return `Se han encontrado en (${Ax2}, ${Ay2}) en t=${t}`; + } + else { + previousDistance = actualDistance; + actualDistance = A.desplazamiento(t).distance(B.desplazamiento(t)); + } + } +} + +const reto = (v1: Vector, v2: Vector) => { + console.log(colision(v1, v2)); +} + +reto(new Vector(new Point(0, 0), new Point(1, 1)), new Vector(new Point(5, 0), new Point(0, 1)));// Se cruzan +reto(new Vector(new Point(2, 0), new Point(0, 1)), new Vector(new Point(4, 0), new Point(0, 1)));// Objetos con vectores paralelos que nunca se encuentran. +reto(new Vector(new Point(2, 2), new Point(1, 1)), new Vector(new Point(4, 0), new Point(0, 1)));// Objetos que se cruzan pero no en el mismo instante From 20f51da30215fde1b0f1711651f91a24fc7e7c5b Mon Sep 17 00:00:00 2001 From: Gabriel Flores Date: Sat, 28 Oct 2023 10:23:14 -0300 Subject: [PATCH 0482/2103] Resolve reto #42 --- .../python/eldalai.py" | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/eldalai.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/eldalai.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/eldalai.py" new file mode 100644 index 0000000000..4b3267c164 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/eldalai.py" @@ -0,0 +1,102 @@ +import unittest + +# m = (y2 - y1) - (x2 - y1) +# y = m x + b + +def calc_m(x, y, dx, dy): + x1 = x + x2 = x + dx + y1 = y + y2 = y + dy + return (y2 - y1) / (x2 - x1) + +def calc_b(x, y, m): + # y = m x + b + # b = y - m x + return y - (m * x) + +def join(x1, y1, dx1, dy1, x2, y2, dx2, dy2): + m1 = calc_m(x1, y1, dx1, dy1) + m2 = calc_m(x2, y2, dx2, dy2) + if m1 == m2: + raise Exception('Son paralelas') + b1 = calc_b(x1, y1, m1) + b2 = calc_b(x2, y2, m2) + x = (b2 - b1) / (m1 - m2) + y = m1 * x + b1 + return x, y + +class TestPuntoEncuentro(unittest.TestCase): + def test_calc_m(self): + x = 3 + y = 2 + dx = 1 + dy = 2 + m = calc_m(x, y, dx, dy) + self.assertEqual(m, 2.0) + + def test_calc_b(self): + x = 3 + y = 2 + dx = 1 + dy = 2 + m = calc_m(x, y, dx, dy) + b = calc_b(x, y, m) + self.assertEqual(b, -4.0) + + def test_join_ok(self): + x1 = 3 + y1 = 2 + dx1 = 2 + dy1 = 1 + x2 = 4 + y2 = 1 + dx2 = 1 + dy2 = 2 + resultx, resulty = join(x1, y1, dx1, dy1, x2, y2, dx2, dy2) + self.assertEqual(resultx, 5.0) + self.assertEqual(resulty, 3.0) + + def test_join(self): + x1 = 3 + y1 = 7 + dx1 = 1 + dy1 = -1 + x2 = 4 + y2 = 1 + dx2 = 1 + dy2 = 1 + resultx, resulty = join(x1, y1, dx1, dy1, x2, y2, dx2, dy2) + self.assertEqual(resultx, 6.5) + self.assertEqual(resulty, 3.5) + + def test_join_error(self): + x1 = 1 + y1 = 1 + dx1 = 1 + dy1 = 1 + x2 = 4 + y2 = 1 + dx2 = 1 + dy2 = 1 + with self.assertRaises(Exception): + join(x1, y1, dx1, dy1, x2, y2, dx2, dy2) + +def main(): + x1 = int(input("Coordenada x1: ")) + y1 = int(input("Coordenada y1: ")) + dx1 = int(input("Incremento x1: ")) + dy1 = int(input("Incremento y1: ")) + x2 = int(input("Coordenada x2: ")) + y2 = int(input("Coordenada y2: ")) + dx2 = int(input("Incremento x2: ")) + dy2 = int(input("Incremento y2: ")) + try: + resultx, resulty = join(x1, y1, dx1, dy1, x2, y2, dx2, dy2) + print(f"las rectas se unen en {resultx}, {resulty}") + except Exception as e: + print(str(e)) + + +if __name__ == '__main__': + main() From 1b334a5ab4a101b3f88a8db44eeb2f5c7f363f50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Sat, 28 Oct 2023 21:13:21 +0200 Subject: [PATCH 0483/2103] feat: reto-42-didacdev --- .../swift/didacdev.swift" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/swift/didacdev.swift" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/swift/didacdev.swift" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/swift/didacdev.swift" new file mode 100644 index 0000000000..c381f0a439 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/swift/didacdev.swift" @@ -0,0 +1,69 @@ +import Foundation + +class Object { + + let position: (Double, Double) + let speed: (Double, Double) + + init(position: (Double, Double), speed: (Double, Double)) { + + self.position = position + self.speed = speed + } +} + +enum MyCustomError: Error { + case DivisionByZero +} + +func substract(vectorA: (Double, Double), vectorB: (Double, Double)) -> (Double, Double) { + + let i = vectorA.0 - vectorB.0 + let j = vectorA.1 - vectorB.1 + + return (i, j) +} + +func add(vectorA: (Double, Double), vectorB: (Double, Double)) -> (Double, Double) { + + let i = vectorA.0 + vectorB.0 + let j = vectorA.1 + vectorB.1 + + return (i, j) +} + +func multiply(vector: (Double, Double), time: Double) -> (Double, Double) { + return (vector.0*time, vector.1*time) +} + +func vectorMagnitude(vector: (Double, Double)) -> Double { + return sqrt(pow(vector.0, 2) + pow(vector.1, 2)) +} + +func getMeeting(objectA: Object, objectB: Object) { + var time: Double = 0.0 + + do { + time = vectorMagnitude(vector: substract(vectorA: objectA.position, vectorB: objectB.position)) / vectorMagnitude(vector: substract(vectorA: objectB.speed, vectorB: objectA.speed)) + } catch { + print("Los vectores no se pueden encontrar") + return + } + + + let positionA = add(vectorA: objectA.position, vectorB: multiply(vector: objectA.speed, time: time)) + let positionB = add(vectorA: objectB.position, vectorB: multiply(vector: objectB.speed, time: time)) + + if abs(positionA.0 - positionB.0) < 0.0001 && abs(positionA.1 - positionB.1) < 0.0001 { + + print("Los objetos se encuentran en el punto \(positionA) pasados \(time) segundos") + + } + +} + + +let objectA = Object(position: (2, 2), speed: (2, -1)) +let objectB = Object(position: (4, 2), speed: (1, -1)) +getMeeting(objectA: objectA, objectB: objectB) + From 3c0f4c8d275c5451c73b755774ef2489cfaf0cfb Mon Sep 17 00:00:00 2001 From: Johan Restrepo <62318029+JohanRestrepo19@users.noreply.github.com> Date: Sat, 28 Oct 2023 14:33:41 -0500 Subject: [PATCH 0484/2103] Reto #42 - Typescript. --- .../typescript/johanrestrepo19.ts" | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/typescript/johanrestrepo19.ts" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/typescript/johanrestrepo19.ts" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/typescript/johanrestrepo19.ts" new file mode 100644 index 0000000000..1184d4f0e0 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/typescript/johanrestrepo19.ts" @@ -0,0 +1,62 @@ +type Vector = { x: number; y: number }; +type Particle = { + position: Vector; + speed: Vector; +}; +type LinearCoefficients = [number, number]; +type Path = { x: LinearCoefficients; y: LinearCoefficients }; + +const findTimeToMeet = ( + equationCoefficients1: LinearCoefficients, + equationCoefficients2: LinearCoefficients, +): number => { + const ec2Inverted = equationCoefficients2.map( + (coefficient) => coefficient * -1, + ); + const coefficientSum: LinearCoefficients = [ + equationCoefficients1[0] + ec2Inverted[0], + equationCoefficients1[1] + ec2Inverted[1], + ]; + + return Math.abs(coefficientSum[1] / coefficientSum[0]); +}; + +const evaluatePath = (path: Path, time: number): Vector => { + const x = path.x[0] * time + path.x[1]; + const y = path.y[0] * time + path.y[1]; + return { x, y }; +}; + +const findMeetingPoint = (p1: Particle, p2: Particle): string => { + const pathCoefficients1: Path = { + x: [p1.speed.x, p1.position.x], + y: [p1.speed.y, p1.position.y], + }; + + const pathCoefficients2: Path = { + x: [p2.speed.x, p2.position.x], + y: [p2.speed.y, p2.position.y], + }; + + const timeToMeetX = findTimeToMeet(pathCoefficients1.x, pathCoefficients2.x); + const timeToMeetY = findTimeToMeet(pathCoefficients1.y, pathCoefficients2.y); + + if (timeToMeetX !== timeToMeetY) return "The particles will not meet"; + + const meetingPoint = evaluatePath(pathCoefficients1, timeToMeetX); + return `The particles will meet at x: ${meetingPoint.x} and y: ${meetingPoint.y} in ${timeToMeetX} seconds`; +}; + +console.log( + findMeetingPoint( + { position: { x: -8, y: 2 }, speed: { x: 3, y: -1 } }, + { position: { x: -2, y: -7 }, speed: { x: 1, y: 2 } }, + ), +); + +console.log( + findMeetingPoint( + { position: { x: 6, y: 4 }, speed: { x: -2, y: -2 } }, + { position: { x: 3, y: -4 }, speed: { x: -1, y: 2 } }, + ), +); From f1bfbc977ce68e2d5ddd93a962a02c14e9d159a1 Mon Sep 17 00:00:00 2001 From: FabianTorres Date: Sat, 28 Oct 2023 15:47:12 -0500 Subject: [PATCH 0485/2103] New Solution: Reto #6 - Python --- .../python/nftorres.py | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/nftorres.py diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/nftorres.py b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/nftorres.py new file mode 100644 index 0000000000..8d1dd19696 --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/nftorres.py @@ -0,0 +1,89 @@ +"""This script shows the solution to the exercise "Reto #6: PIEDRA, PAPEL O TIJERA" from Brais Moure's official website.""" + +# Defining the weak opponents of each piece. + + +class Game: + """This class represents a game of 'Piedra, Papel, Tijera, Lagarto, Spock' + """ + + def __init__(self, duels: list) -> None: + """This method initializes the players' scores and establishes the duels and weak opponents of each player. + + Args: + duels (list): duels played during the game. + """ + self.duels = duels + self.p1_score = 0 + self.p2_score = 0 + + self.weak_opponents = { + "piedra": ["tijera", "lagarto"], + "papel": ["piedra", "spock"], + "tijera": ["papel", "lagarto"], + "lagarto": ["papel", "spock"], + "spock": ["tijera", "piedra"], + } + + def __check_pieces(self, piece1: str, piece2: str) -> bool: + """This method checks if the pieces played are valid in the game. + + Args: + piece1 (str): piece played by player1 + piece2 (str): piece played by player2 + Returns: + bool: True is returned if the pieces played are valid, othercase, False if returned + """ + self.piece1 = piece1 + self.piece2 = piece2 + return True if (self.piece1 in self.weak_opponents) and (self.piece2 in self.weak_opponents) else False + + def update_scores(self) -> None: + """'This method updates the players' scores during the game. + + Returns: + None: When everything works as planned, the scores are updated correctly. + + Exception: an exception is thrown if one or both of the pieces are invalid in the game. + """ + try: + for duel in self.duels: + self.piece1 = duel[0].lower() + self.piece2 = duel[1].lower() + if self.__check_pieces(self.piece1, self.piece2): + self.p1_score += 1 if self.piece2 in self.weak_opponents[self.piece1] else 0 + self.p2_score += 1 if self.piece1 in self.weak_opponents[self.piece2] else 0 + else: + raise Exception( + "Sólo se puede jugar con 'Piedra', 'Papel', 'Tijera', 'Lagarto' o 'Spock'") + except Exception as e: + return e + + def say_winner(self) -> str: + """This method determines the winner of the game. + + Returns: + str: The winner of the game. + """ + if self.p1_score == self.p2_score: + return "Tie!" + elif self.p1_score > self.p2_score: + return "Player 1 has won!" + else: + return "Player 2 has won!" + + +if __name__ == "__main__": + duels = [ + ("Piedra", "Papel"), + ("Tijera", "Papel"), + ("Piedra", "Tijera"), + ("Piedra", "Tijera"), + ] + # Creating the game + game = Game(duels) + # Reading the duels and updating the scores + game.update_scores() + # Determining the winner + winner = game.say_winner() + print("Result:", winner) From 47bb83a56aba18622105ee272fcbdab069d26f0f Mon Sep 17 00:00:00 2001 From: FabianTorres Date: Sat, 28 Oct 2023 15:47:46 -0500 Subject: [PATCH 0486/2103] New Solution: Reto #6 - JavaScript --- .../javascript/nftorres.js | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/nftorres.js diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/nftorres.js b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/nftorres.js new file mode 100644 index 0000000000..02a745e15c --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/nftorres.js @@ -0,0 +1,109 @@ +/* This script shows the solution to the exercise "Reto #6: PIEDRA, PAPEL O TIJERA" from Brais Moure's official website. + */ + +/** + * This class represents a game of 'Piedra, Papel, Tijera, Lagarto, Spock' + */ +class Game { + /** + * This method initializes the players' scores and establishes the duels and weak opponents of each player. + * @param {Array} duels + */ + constructor(duels) { + this.duels = duels; + this.p1_score = 0; + this.p2_score = 0; + + this.weakOpponents = { + piedra: ["tijera", "lagarto"], + papel: ["piedra", "spock"], + tijera: ["papel", "lagarto"], + lagarto: ["papel", "spock"], + spock: ["tijera", "piedra"], + }; + } + + /** + * This method checks if the pieces played are valid in the game. + * @param {String} piece1 piece played by player1 + * @param {String} piece2 piece played by player2 + * @returns Bool + */ + #checkPieces(piece1, piece2) { + /* This method checks if the pieces played are valid in the game. + + Args: + piece1 (str): piece played by player1 + piece2 (str): piece played by player2 + Returns: + bool: True is returned if the pieces played are valid, othercase, False if returned + */ + this.piece1 = piece1.toLowerCase(); + this.piece2 = piece2.toLowerCase(); + + if ( + this.piece1 in this.weakOpponents && + this.piece2 in this.weakOpponents + ) { + return true; + } + return false; + } + + /** + * This method updates the players' scores during the game. + */ + updateScores() { + try { + for (const duel of this.duels) { + let piece1 = duel[0].toLowerCase(); + let piece2 = duel[1].toLowerCase(); + if (this.#checkPieces(piece1, piece2)) { + if (this.weakOpponents[piece1].includes(piece2)) { + this.p1_score += 1; + } else if (this.weakOpponents[piece2].includes(piece1)) { + this.p2_score += 1; + } else { + this.p1_score += 0; + this.p2_score += 0; + } + } else { + throw new Error( + "Sólo se puede jugar con 'Piedra', 'Papel', 'Tijera', 'Lagarto' o 'Spock'" + ); + } + } + } catch (error) { + return "Error: " + error; + } + } + + /** + * This method determines the winner of the game. + * @returns String + */ + sayWinner() { + this.result = new String(); + if (this.p1_score === this.p2_score) { + this.result = "Tie!"; + } else if (this.p1_score > this.p2_score) { + this.result = "Player 1 has won!"; + } else { + this.result = "Player 2 has won!"; + } + return this.result; + } +} + +// Definiting the duels +duels = [ + ["Piedra", "Papel"], + ["Tijera", "Papel"], + ["Piedra", "Tijera"], + ["Tijera", "Piedra"], +]; + +var game = new Game(duels); +game.updateScores(); +result = game.sayWinner(); +console.log("Result: " + result); From 01a41d995a1b87ec512f602f760f563ffee6ec65 Mon Sep 17 00:00:00 2001 From: Hans Escobar <60953384+hdescobarh@users.noreply.github.com> Date: Sat, 28 Oct 2023 16:23:07 -0500 Subject: [PATCH 0487/2103] =?UTF-8?q?Completada=20soluci=C3=B3n=20reto=20#?= =?UTF-8?q?42,=20actualizados=20docs=20y=20unit=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rust/hdescobarh.rs" | 119 ++++++++++++++++-- 1 file changed, 109 insertions(+), 10 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/rust/hdescobarh.rs" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/rust/hdescobarh.rs" index 952b164c53..46b6d86b40 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/rust/hdescobarh.rs" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/rust/hdescobarh.rs" @@ -1,11 +1,23 @@ // author: Hans D. Escobar H. (hdescobarh) -/* La lógica de la solución es la siguiente. Sí los dos objetos se encuentran, necesariamente -existe un tiempo 𝘵 ≥ 0 tal que la distancia euclídea entre las posiciones de los dos objetos es cero. */ +//! La lógica de la solución es la siguiente. Sí los dos objetos se encuentran, necesariamente +//! existe un tiempo 𝘵 ≥ 0 tal que la distancia euclídea entre las posiciones de los dos objetos es cero. +//! Primero calcula ese tiempo 𝘵, y luego lo usa como parámetro para obtener la posición. +//! +//! # Ejemplo: +//! ``` +//! use punto_de_encuentro::*; +//! let object_1 = Object2D::new(&[6.0, 7.0], &[-1.8, -0.6]); +//! let object_2 = Object2D::new(&[2.0, 2.0], &[-1.0, 0.4]); +//! let (collision_point, collision_time) = object_1.ulm_collision(&object_2).unwrap(); +//! assert!((collision_time - 5.0).abs() < TOLERANCE); +//! assert!((collision_point.x - -3.0).abs() < TOLERANCE); +//! assert!((collision_point.y - 4.0).abs() < TOLERANCE); +//! ``` #![crate_name = "punto_de_encuentro"] #![crate_type = "cdylib"] -use std::ops::{Mul, Sub}; +use std::ops::{Add, Mul, Sub}; /// Parámetro introducido para controlar el impacto de errores de redondeo en valores cercanos al cero [^note]. /// @@ -35,7 +47,7 @@ impl Object2D { } } -impl UniformLinearMotion for Object2D { +impl UniformLinearMotion for Object2D { /// Retorna el tiempo dentro del cual el objeto va a colisionar con otro objeto. /// Retorna None sí nunca se encuentran. /// @@ -110,17 +122,45 @@ impl UniformLinearMotion for Object2D { None } } + + /// Calcula la posición del objeto tomando como punto de partida (𝗽₀ = 𝗽(0)) la + /// ubicación actual del objeto (location). 𝗽(𝘵) = 𝗽₀ + 𝘵𝐯 + /// + /// # Argumentos: + /// + /// * `time` - tiempo 𝘵 transcurrido. + /// + /// # Ejemplo: + /// + /// ``` + /// use punto_de_encuentro::*; + /// let object_1 = Object2D::new(&[11.0, 17.0], &[1.64383561643, 3.69863013698]); + /// let position: Vector2D = object_1.ulm_position_delta_time(&7.3); + /// assert!((position.x - 23.0).abs() < TOLERANCE + /// && (position.y - 44.0).abs() < TOLERANCE); + /// ``` + fn ulm_position_delta_time(&self, time: &f64) -> Vector2D { + // 𝗽(𝘵) = 𝗽₀ + 𝘵𝐯 + let delta_position: Vector2D = self.location + (self.velocity * *time); + delta_position + } } -pub trait UniformLinearMotion { +pub trait UniformLinearMotion { fn ulm_collision_time(&self, other: &Self) -> Option; + fn ulm_position_delta_time(&self, time: &f64) -> T; + fn ulm_collision(&self, other: &Self) -> Option<(T, f64)> { + self.ulm_collision_time(other) + .map(|time| (self.ulm_position_delta_time(&time), time)) + } } /// Representa un elemento de un espacio vectorial en ℝ² en coordenadas cartesianas. -#[derive(Clone, Copy)] +/// Tiene definidas las operaciones de suma y resta vectorial, producto punto, y producto escalar. +#[derive(Clone, Copy, Debug, PartialEq)] pub struct Vector2D { - x: f64, - y: f64, + pub x: f64, + pub y: f64, } /// Construye un Vector desde un Array [f64; 2] @@ -133,7 +173,7 @@ impl From<&[f64; 2]> for Vector2D { } } -/// Producto punto con otro vector ⟨self,other⟩ +/// Producto punto con otro vector. self * other = ⟨self,other⟩ impl Mul for Vector2D { type Output = f64; fn mul(self, rhs: Vector2D) -> Self::Output { @@ -141,7 +181,18 @@ impl Mul for Vector2D { } } -/// Diferencia con otro vector self - other +/// Producto escalar. self * scalar +impl Mul for Vector2D { + type Output = Vector2D; + fn mul(self, rhs: f64) -> Self::Output { + Self { + x: self.x * rhs, + y: self.y * rhs, + } + } +} + +/// Diferencia con otro vector. self - other impl Sub for Vector2D { type Output = Vector2D; @@ -153,6 +204,18 @@ impl Sub for Vector2D { } } +/// Suma vectorial. self + other +impl Add for Vector2D { + type Output = Vector2D; + + fn add(self, rhs: Self) -> Self::Output { + Vector2D { + x: self.x + rhs.x, + y: self.y + rhs.y, + } + } +} + #[cfg(test)] mod tests { use super::*; @@ -255,4 +318,40 @@ mod tests { }; } } + + #[test] + fn ulm_collision_point_bidimensional() { + let test_cases = [ + // meet + ( + [[6.0, 7.0], [-1.8, -0.6], [2.0, 2.0], [-1.0, 0.4]], + Some((Vector2D::from(&[-3.0, 4.0]), 5.0)), + ), + // never meet + ([[6.0, 7.0], [-1.8, -0.6], [2.0, 2.0], [1.0, 0.4]], None), + ]; + + for ([loc1, vel1, loc2, vel2], expected) in &test_cases { + let object_1 = Object2D::new(loc1, vel1); + let object_2 = Object2D::new(loc2, vel2); + let solution = object_1.ulm_collision(&object_2); + if expected.is_some() && solution.is_some() { + let (expected_position, expected_time) = expected.unwrap(); + let (solution_position, solution_time) = solution.unwrap(); + let diff_position = expected_position - solution_position; + let diff_time = expected_time - solution_time; + assert!( + diff_position.x.abs() < TOLERANCE + && diff_position.y.abs() < TOLERANCE + && diff_time < TOLERANCE, + "Expected {:?}, obtained {:?}", + expected, + solution + ) + } else { + assert_eq!(*expected, solution) + }; + } + } } + From 3a56a1de9845df9b0378c469c5caee090174fe93 Mon Sep 17 00:00:00 2001 From: Gabi Date: Sun, 29 Oct 2023 07:49:34 +0100 Subject: [PATCH 0488/2103] Create icedrek.py --- .../python/icedrek.py" | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/icedrek.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/icedrek.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/icedrek.py" new file mode 100644 index 0000000000..1f2fc54458 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/icedrek.py" @@ -0,0 +1,67 @@ +""" + * Crea una función que calcule el punto de encuentro de dos objetos en movimiento + * en dos dimensiones. + * - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento + * (vector de desplazamiento) por unidad de tiempo (también en formato xy). + * - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. + * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. + * - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. + """ + + +class Object: + def __init__(self, position, move_vector) -> None: + self.initial_position = position + self.move_vector = move_vector + + def position_in_time(self, t): + movement = [(t * _) for _ in self.move_vector] + return [(v1 + v2) for v1, v2 in zip(self.initial_position, movement)] + + +def calculate_colision(ob1: Object, ob2: Object): + (x1, y1) = ob1.initial_position + (xv1, yv1) = ob1.move_vector + + (x2, y2) = ob2.initial_position + (xv2, yv2) = ob2.move_vector + + tx = division(x1 - x2, xv2 - xv1) + ty = division(y1 - y2, yv2 - yv1) + + colision = None + t = None + + if tx == ty: + t = tx + colision = ob1.position_in_time(t) + elif tx == None and ty != None: + if ob1.position_in_time(ty) == ob2.position_in_time(ty): + t = ty + colision = ob1.position_in_time(t) + elif tx != None and ty == None: + if ob1.position_in_time(tx) == ob2.position_in_time(tx): + t = tx + colision = ob1.position_in_time(t) + + if colision == None: + print("NO HAY COLISION") + else: + print(f"Colision en t={t} en posicion {colision}") + + +def division(x, y): + try: + result = x / y + + except ZeroDivisionError: + result = None + + return result + + +if __name__ == "__main__": + ob1 = Object((0, 0), (1, 1)) # posicion_inicial, vector_de_movimiento + ob2 = Object((0, 3), (1, -1)) + + calculate_colision(ob1, ob2) From 66a390c1b32a891b56da32d9c48f34081f16b219 Mon Sep 17 00:00:00 2001 From: santi55 <51173661+santi55@users.noreply.github.com> Date: Sun, 29 Oct 2023 13:46:19 +0100 Subject: [PATCH 0489/2103] Reto 42 --- .../python/santi55.py" | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/santi55.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/santi55.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/santi55.py" new file mode 100644 index 0000000000..8fb934a10b --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/santi55.py" @@ -0,0 +1,48 @@ +""" + +/* + * Crea una función que calcule el punto de encuentro de dos objetos en movimiento + * en dos dimensiones. + * - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento + * (vector de desplazamiento) por unidad de tiempo (también en formato xy). + * - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. + * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. + * - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. + */ + + """ + + +class Vehiculo: + # Constructor + def __init__(self, x, y, vx, vy): + self.x = x + self.y = y + self.vx = vx + self.vy = vy + + # Métodos + def mover(self): + self.x += self.vx + self.y += self.vy + + +def puntoEncuentro(vehiculo1 : Vehiculo, vehiculo2 : Vehiculo) -> str: + tiempo = 0 ##se entrará en un bucle y en cada iteración se aumentará 1 + + while(vehiculo1.x != vehiculo2.x or vehiculo1.y != vehiculo2.y) and tiempo != 100: + vehiculo1.mover() + vehiculo2.mover() + tiempo += 1 + + + if(vehiculo1.x == vehiculo2.x and vehiculo1.y == vehiculo2.y): + return f"Se encuentran en {vehiculo1.x,vehiculo1.y} en {tiempo} unidades de tiempo" + else: + return "No se han encontrado" + + +veh1 = Vehiculo(1,4,1,0) +veh2 = Vehiculo(4,0,0,1) + +print(puntoEncuentro(veh1,veh2)) \ No newline at end of file From 5eff47a01ce70bdfa16f31d9ab0022d3fcec20cb Mon Sep 17 00:00:00 2001 From: Juan Pablo Patino Lopez Date: Sun, 29 Oct 2023 15:36:46 +0100 Subject: [PATCH 0490/2103] Juanppdev - Reto #42- python --- .../python/juanppdev.py" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/juanppdev.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/juanppdev.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/juanppdev.py" new file mode 100644 index 0000000000..e0a273005c --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/juanppdev.py" @@ -0,0 +1,30 @@ +def punto_encuentro(coord_objeto1, velocidad_objeto1, coord_objeto2, velocidad_objeto2): + # Calcula las diferencias entre las coordenadas iniciales de los objetos. + diff_x = coord_objeto2[0] - coord_objeto1[0] + diff_y = coord_objeto2[1] - coord_objeto1[1] + + # Calcula la diferencia de velocidad entre los dos objetos. + diff_vel_x = velocidad_objeto2[0] - velocidad_objeto1[0] + diff_vel_y = velocidad_objeto2[1] - velocidad_objeto1[1] + + # Comprueba si los objetos son paralelos (no se encuentran). + if diff_vel_x == 0 and diff_vel_y == 0: + return "Los objetos no se encuentran." + + # Calcula el tiempo en el que se encontrarán. + tiempo_encuentro = (diff_x / diff_vel_x) if diff_vel_x != 0 else (diff_y / diff_vel_y) + + # Calcula las coordenadas del punto de encuentro. + punto_x = coord_objeto1[0] + velocidad_objeto1[0] * tiempo_encuentro + punto_y = coord_objeto1[1] + velocidad_objeto1[1] * tiempo_encuentro + + return f"Los objetos se encuentran en ({punto_x}, {punto_y}) en {tiempo_encuentro} unidades de tiempo." + +# Ejemplo de uso: +coord_objeto1 = (0, 0) +velocidad_objeto1 = (1, 2) +coord_objeto2 = (3, 1) +velocidad_objeto2 = (1, 1) + +resultado = punto_encuentro(coord_objeto1, velocidad_objeto1, coord_objeto2, velocidad_objeto2) +print(resultado) From 93fc38f6cae842ed3fdc754eb904705197f6c029 Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Sun, 29 Oct 2023 11:01:40 -0700 Subject: [PATCH 0491/2103] reto #42 - python --- .../python/KevinED11.py" | 43 ++++++++++++++----- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" index c9fe675e90..480911bb3c 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" @@ -64,7 +64,16 @@ def is_same_direction(diff_velocity: Velocity) -> bool: return diff_velocity.x == 0 and diff_velocity.y == 0 -def calculate_intersection_point_in_motion(objects: Objects) -> None: +class Result(NamedTuple): + time_to_intersection: float + intersection_point: Coordinates + + +def calculate_intersection_point_in_motion(objects: Objects) -> Result: + default_result = Result( + time_to_intersection=0, intersection_point=Coordinates(x=0, y=0) + ) + diff_coordinates: Coordinates = calculate_diff_coordinates( objects.object1.start_point, objects.object2.start_point ) @@ -74,26 +83,36 @@ def calculate_intersection_point_in_motion(objects: Objects) -> None: if is_same_direction(diff_velocity=diff_velocity): print("Los objetos o puntos de encuentro son paralelos y nunca se encuentran.") - return + return default_result - time_to_intersection = calculate_time_to_intersection( + time_to_intersection: float = calculate_time_to_intersection( diff_coordinates, diff_velocity ) - intersection_point = calculate_intersection_point( + intersection_point: Coordinates = calculate_intersection_point( objects.object1, time_to_intersection ) - print(f"El punto de encuentro es ({intersection_point.x}, {intersection_point.y})") - print(f"El tiempo que les tomará encontrarse es {time_to_intersection} segundos.") + return Result( + time_to_intersection=time_to_intersection, intersection_point=intersection_point + ) class MotionCalculatorFn(Protocol): - def __call__(self, objects: Objects) -> None: + def __call__(self, objects: Objects) -> Result: ... -def execute(motion_calculator: MotionCalculatorFn, objects: Objects) -> None: - motion_calculator(objects=objects) +def execute(motion_calculator: MotionCalculatorFn, objects: Objects) -> Result: + return motion_calculator(objects=objects) + + +def print_motion_calculator_results(result: Result) -> None: + print( + f"El punto de encuentro es ({result.intersection_point.x}, {result.intersection_point.y})" + ) + print( + f"El tiempo que les tomará encontrarse es {result.time_to_intersection} segundos." + ) def main() -> None: @@ -105,13 +124,15 @@ def main() -> None: execute, motion_calculator=calculate_intersection_point_in_motion ) - execute_calculate_intersection_point_in_motion(objects=objects) + result1 = execute_calculate_intersection_point_in_motion(objects=objects) + print_motion_calculator_results(result=result1) object3 = Object(start_point=Coordinates(x=4, y=3), velocity=Velocity(x=5, y=4)) object4 = Object(start_point=Coordinates(x=4, y=1), velocity=Velocity(x=3, y=4)) objects2 = Objects(object1=object3, object2=object4) - execute_calculate_intersection_point_in_motion(objects=objects2) + result2 = execute_calculate_intersection_point_in_motion(objects=objects2) + print_motion_calculator_results(result=result2) if __name__ == "__main__": From 1125e70d599b5c7375fbae4c4ffe36a14b8c2481 Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Sun, 29 Oct 2023 11:06:51 -0700 Subject: [PATCH 0492/2103] reto #42 - python --- .../python/KevinED11.py" | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" index 480911bb3c..f1a847a7fb 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/KevinED11.py" @@ -82,7 +82,6 @@ def calculate_intersection_point_in_motion(objects: Objects) -> Result: ) if is_same_direction(diff_velocity=diff_velocity): - print("Los objetos o puntos de encuentro son paralelos y nunca se encuentran.") return default_result time_to_intersection: float = calculate_time_to_intersection( @@ -107,6 +106,10 @@ def execute(motion_calculator: MotionCalculatorFn, objects: Objects) -> Result: def print_motion_calculator_results(result: Result) -> None: + if result.time_to_intersection == 0: + print("Los objetos o puntos de encuentro son paralelos y nunca se encuentran.") + return + print( f"El punto de encuentro es ({result.intersection_point.x}, {result.intersection_point.y})" ) From 6e4c8492b469a5ee06030665204da55a83cbebd3 Mon Sep 17 00:00:00 2001 From: JorgeCM Date: Sun, 29 Oct 2023 19:26:46 +0100 Subject: [PATCH 0493/2103] =?UTF-8?q?Creaci=C3=B3n=20de=20los=20objetos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/JorgeCM2004.py" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" new file mode 100644 index 0000000000..dc53f37368 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" @@ -0,0 +1,20 @@ +class Object(): + position: tuple + speed: tuple + +def ask_position(obj: str) -> tuple: + coorx = int(input(f"Coordenada x del objeto {obj}: ")) + coory = int(input(f"Coordenada y del objeto {obj}: ")) + return (coorx, coory) + +def ask_speed(obj: str) -> tuple: + speedx = int(input(f"Velocidad en el eje x del objeto {obj}: ")) + speedy = int(input(f"Velocidad en el eje y del objeto {obj}: ")) + return (speedx, speedy) + +def main() -> None: + objA = Object(position = ask_position("A"), speed = ask_speed("A")) + objB = Object(position = ask_position("B"), speed = ask_speed("B")) + +if __name__ == "__main__": + main() \ No newline at end of file From 474c107b33c394ed2416fc90ea4708f2dc3b98a4 Mon Sep 17 00:00:00 2001 From: Carlos Esteban Castro <146273220+ccaicedo09@users.noreply.github.com> Date: Sun, 29 Oct 2023 13:32:43 -0500 Subject: [PATCH 0494/2103] Create ccaicedo09.py --- .../python/ccaicedo09.py | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/ccaicedo09.py diff --git a/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/ccaicedo09.py b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/ccaicedo09.py new file mode 100644 index 0000000000..f53c0a1fa5 --- /dev/null +++ b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/ccaicedo09.py @@ -0,0 +1,108 @@ +""" + * Crea un pequeño juego que consista en adivinar palabras en un número máximo de intentos: + * - El juego comienza proponiendo una palabra aleatoria incompleta + * - Por ejemplo "m_ur_d_v", y el número de intentos que le quedan + * - El usuario puede introducir únicamente una letra o una palabra (de la misma longitud que + * la palabra a adivinar) + * - Si escribe una letra y acierta, se muestra esa letra en la palabra. Si falla, se resta + * uno al número de intentos + * - Si escribe una resolución y acierta, finaliza el juego, en caso contrario, se resta uno + * al número de intentos + * - Si el contador de intentos llega a 0, el jugador pierde + * - La palabra debe ocultar de forma aleatoria letras, y nunca puede comenzar ocultando más del 60% + * - Puedes utilizar las palabras que quieras y el número de intentos que consideres +""" +import random +import os + +def choose_random_word(): + + word_list = ["Programación", "Desarrollo", "Terminal", "Computadora", + "Deportes", "Universidad", "Estudiante", "Ingeniero", + "Ciencia", "Matemáticas", "Investigación", "Desarrollador", + "Programador", "Inteligencia", "Aprendizaje", + "Automático", "Estructura", "Datos", "Algoritmo"] + return random.choice(word_list).lower() + + +def hide_word(word): + num_hidden = round(len(word) * 0.6) + hidden_indices = random.sample(range(len(word)), num_hidden) + hidden_word = "" + for i, letter in enumerate(word): + if i in hidden_indices: + hidden_word += "_" + else: + hidden_word += letter + return hidden_word + +def choose_difficulty(): + + difficulty = 0 + + while difficulty < 1 or difficulty > 3: + difficulty = int(input("\nElige la dificultad (1, 2 o 3): ")) + + return difficulty + +def main(): + + os.system("cls") + + working_word = choose_random_word() + word = list(working_word) + hidden_word = list(hide_word(word)) + + print("\n¡Bienvenido a Adivina la Palabra!") + difficulty = choose_difficulty() + if difficulty == 1: + attemps = 10 + elif difficulty == 2: + attemps = 7 + else: + attemps = 5 + + print(f"\nHas elegido la dificultad {difficulty}. Tienes {attemps} intentos.") + print(f"\nDebes de adivinar la siguiente palabra ---> {' '.join(hidden_word)}") + + while attemps > 0: + + user_input = input("\nIngresa una letra o la palabra completa: ") + + if len(user_input) == 1: #Validar que la elección sea válida + if user_input in word: + for char in word: + if char == user_input: + index = word.index(char) + hidden_word[index] = char + word[index] = "_" #Para que no se repita la letra + os.system("cls") + if "_" not in hidden_word: + print(f"\n¡Ganaste! La palabra era {working_word}.") + break + print(f"\n¡Correcto! La letra {user_input} está en la palabra.") + print(f"\n---> {' '.join(hidden_word)}") + else: + os.system("cls") + attemps -= 1 + print(f"\n¡Incorrecto! La letra {user_input} no está en la palabra.") + print(f"\n---> {' '.join(hidden_word)}") + elif len(user_input) == len(word): + if user_input == working_word.lower(): + print(f"\n¡Correcto! La palabra es {user_input}.") + break + else: + attemps -= 1 + os.system("cls") + print(f"\n¡Incorrecto! La palabra no es {user_input}.") + print(f"\n---> {' '.join(hidden_word)}") + else: + attemps -= 1 + os.system("cls") + print("---------------------------------\nDebes de escoger una sola letra o adivinar la palabra.\n---------------------------------") + print(f"\n---> {' '.join(hidden_word)}") + print(f"\nTe quedan {attemps} intentos.") + else: + print(f"\n¡Perdiste! La palabra era {working_word}.") + +main() From 6899f3ec3330e5084fa889165ba18f97095fd0b5 Mon Sep 17 00:00:00 2001 From: JorgeCM Date: Sun, 29 Oct 2023 20:32:37 +0100 Subject: [PATCH 0495/2103] =?UTF-8?q?C=C3=A1lculo=20de=20la=20intersecci?= =?UTF-8?q?=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/JorgeCM2004.py" | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" index dc53f37368..3e9091394f 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" @@ -12,9 +12,40 @@ def ask_speed(obj: str) -> tuple: speedy = int(input(f"Velocidad en el eje y del objeto {obj}: ")) return (speedx, speedy) +def will_intersect(obj1: Object, obj2: Object) -> bool: + return obj1.speed != obj2.speed + +def same_position(obj1: Object, obj2: Object) -> bool: + return obj1.position == obj2.position + +def calculate_intersection(obj1: Object, obj2: Object) -> tuple: + m1 = obj1.speed[1] / obj1.speed[0] + m2 = obj2.speed[1] / obj2.speed[0] + # Procedimiento seguido (Os lo dejo en codigo, si lo quereis ver Quitad las comillas) + ''' + eq1 = f"y = {m1} * (x - {obj1.position[0]}) + {obj1.position[1]}" + eq2 = f"y = {m2} * (x - {obj2.position[0]}) + {obj2.position[1]}" + resol1 = f"{m1} * (x - {obj1.position[0]}) + {obj1.position[1]} = {m2} * (x - {obj2.position[0]}) + {obj2.position[1]}" + resol2 = f"{m1} * x - {m1} * {obj1.position[0]} + {obj1.position[1]} = {m2} * x - {m2} * {obj2.position[0]} + {obj2.position[1]}" + resol3 = f"{m1} * x - {m2} * x = - {m2} * {obj2.position[0]} + {obj2.position[1]} + {m1} * {obj1.position[0]} - {obj1.position[1]}" + resol4 = f"x * ({m1} - {m2}) = - {m2} * {obj2.position[0]} + {obj2.position[1]} + {m1} * {obj1.position[0]} - {obj1.position[1]}" + resol4 = f"x = (- {m2} * {obj2.position[0]} + {obj2.position[1]} + {m1} * {obj1.position[0]} - {obj1.position[1]}) / ({m1} - {m2})" + print("Estas rectas son las que describen el movimiento tanto para lo que hará como para lo que deberia hacer en tiempos negativos (avanzando en el tiempo tanto hacia delante como hacia detras)") + print(f"Ecuacion del objeto B: {eq1}\nEcuacion del objeto B: {eq2}\nProcedimiento:\nPaso 1: {resol1}\nPaso 2: {resol2}\nPaso 3: {resol3}\nPaso 4: {resol4}") + ''' + coor_x = (-m2 * obj2.position[0] + obj2.position[1] + m1 * obj1.position[0] -obj1.position[1]) / (m1 - m2) + coor_y = m1 * coor_x - obj1.position[0] + obj1.position[1] + return (coor_x, coor_y) + def main() -> None: - objA = Object(position = ask_position("A"), speed = ask_speed("A")) - objB = Object(position = ask_position("B"), speed = ask_speed("B")) + objectA = Object(position = ask_position("A"), speed = ask_speed("A")) + objectB = Object(position = ask_position("B"), speed = ask_speed("B")) + if will_intersect(objectA, objectB): + pass + elif same_position(objectA, objectB): + print("Los objetos A y B tienen tanto la misma direccion como la misma velocidad por lo que colisionaran en todos los puntos por los que pasen.") + else: + print(f"Aunque los objetos tengan distinta velocidad comienzan en el mismo punto de partida por lo que colisionarán en el punto ({objectA.position[0]}, {objectA.position[1]}) en el instante t = 0.") if __name__ == "__main__": main() \ No newline at end of file From 9fa790be868e6816093b404e2238ea152c56f165 Mon Sep 17 00:00:00 2001 From: JorgeCM Date: Sun, 29 Oct 2023 21:11:24 +0100 Subject: [PATCH 0496/2103] Reto #42 - Python --- .../python/JorgeCM2004.py" | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" index 3e9091394f..f93fa16d92 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" @@ -1,4 +1,5 @@ -class Object(): +from typing import NamedTuple +class Object(NamedTuple): position: tuple speed: tuple @@ -41,7 +42,16 @@ def main() -> None: objectA = Object(position = ask_position("A"), speed = ask_speed("A")) objectB = Object(position = ask_position("B"), speed = ask_speed("B")) if will_intersect(objectA, objectB): - pass + intersection = calculate_intersection(objectA, objectB) + if (intersection[0] - objectA.position[0]) % objectA.speed[0] == 0: + t1 = (intersection[0] - objectA.position[0]) / objectA.speed[0] + t2 = (intersection[0] - objectB.position[0]) / objectB.speed[0] + if t1 == t2: + print(f"Los objetos colisionarán en el punto {intersection} tras {t1} unidades de tiempo.") + else: + print(f"Aunque ambos objetos pasan por el mismo punto, necesitan distintos tiempos para alcanzar el punto {intersection}, El Objeto A necesita {t1} unidades de tiempo mientras que el Objeto B necesita {t2} unidades.") + else: + print("Los objetos A y B no colisionarán nunca dado que siguiendo sus proyecciones colisionaron en un momento anterior.") elif same_position(objectA, objectB): print("Los objetos A y B tienen tanto la misma direccion como la misma velocidad por lo que colisionaran en todos los puntos por los que pasen.") else: From b2c7a8f99404557ca8e9426d872de2ee2f8afb5b Mon Sep 17 00:00:00 2001 From: Ricardo Alfaro Date: Sun, 29 Oct 2023 18:08:46 -0600 Subject: [PATCH 0497/2103] Reto #4 - Java --- .../java/rearalf.java | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/java/rearalf.java diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/java/rearalf.java b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/java/rearalf.java new file mode 100644 index 0000000000..88ae9e5c11 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/java/rearalf.java @@ -0,0 +1,82 @@ +import java.io.InputStream; +import java.util.Scanner; + +public class rearalf { + public static void main(String[] args) throws Exception { + StringBuilder sb = new StringBuilder(); + InputStream steam = System.in; + Scanner scanner = new Scanner(steam); + try { + System.out.print("Ingrese el numero: "); + int number = scanner.nextInt(); + boolean isPrime = isPrimeNumber(number); + boolean isFibonacci = isFibonacciNumber(number); + boolean isEven = isEvenNumber(number); + if (isPrime) { + sb.append(" es primo"); + } else { + sb.append("no es primo"); + } + if (isFibonacci) { + sb.append(", es fibonacci"); + } else { + sb.append(", es fibonacci"); + } + if (isEven) { + sb.append(" y es par."); + } else { + sb.append(" y no es impar."); + } + System.out.println(number + " " + sb); + } catch (Exception e) { + System.out.println("Error. The value isn't numeric."); + } + + scanner.close(); + } + + public static boolean isPrimeNumber(int number) { + if (number <= 1) + return false; + if (number <= 3) + return true; + if (number % 2 == 0 || number % 3 == 0) + return false; + int i = 5; + while (i * i <= number) { + if (number % i == 0) + return false; + i *= 6; + } + + return true; + } + + public static boolean isFibonacciNumber(int number) { + if (number < 0) { + return false; + } + int a = 0; + int b = 1; + + while (a < number) { + int temp = a; + a = b; + b = temp + b; + } + + return false; + } + + public static boolean isEvenNumber(int number) { + try { + if (number % 2 == 0) { + return true; + } + return false; + } catch (Exception e) { + System.out.println("Error: " + e); + return false; + } + } +} From 2487290fea80f5422d2eff65ce7a9f1c363274ad Mon Sep 17 00:00:00 2001 From: Patricio Leon Ormazabal Date: Sun, 29 Oct 2023 22:06:37 -0300 Subject: [PATCH 0498/2103] reto 0 java PatricioLeon --- .../java/patricioleono.java" | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/patricioleono.java" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/patricioleono.java" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/patricioleono.java" new file mode 100644 index 0000000000..e3c40b2b8a --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/patricioleono.java" @@ -0,0 +1,19 @@ +public class patricioleono { + + public static void main(String[] args){ + int total = 100; + for(int i = 0; i <= total; i++){ + if(i % 2 == 0){ + System.out.println("Fizz"); + if(i % 3 == 0){ + System.out.println("FizzBuzz"); + } + }else if(i % 3 == 0){ + System.out.println("Buzz"); + }else{ + System.out.println(i); + } + } + } + +} From 5e231034f233858ba521455a28cee60d33143868 Mon Sep 17 00:00:00 2001 From: Gladoncio <42326122+gladoncio@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:33:18 -0300 Subject: [PATCH 0499/2103] solucion ejercicio del punto de encuentro --- .../python/gladoncio.py" | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/gladoncio.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/gladoncio.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/gladoncio.py" new file mode 100644 index 0000000000..23316f6b9c --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/gladoncio.py" @@ -0,0 +1,37 @@ +def validate(objeto_1, objeto_2): + x1, y1, vx1, vx2 = objeto_1 + x2, y2, vy1, vy2 = objeto_2 + + dx = x2 - x1 + dy = y2 - y1 + dvx = vx2 - vx1 + dvy = vy2 - vy1 + + if dvx == 0 and dvy == 0: + return "Los objetos son paralelos y nunca se cruzan." + + #calculamos el producto escalar (nos dice si el objeto se aleja y a que ritmo lo hacen) + pd = (-dx * dvx - dy * dvy) + #Calculamos la velocidad relativa + vr = (dvx ** 2 + dvy**2 ) + + t = pd/vr + + if t < 0: + return "Los objetos jamas se tocan" + + x_encuentro = x1 + vx1 * t + y_encuentro = y1 + vy1 * t + + return [x_encuentro, y_encuentro, t] + +objeto_1 = [0, 0, 5, 1] +objeto_2 = [3, 1, 2, 2] + +resultado = validate(objeto_1, objeto_2) + +if isinstance(resultado, str): + print(resultado) +else: + print(f"Los objetos se encuentran en ({resultado[0]}, {resultado[1]}) después de {resultado[2]} unidades de tiempo.") + From d4cf1187145a4e7d2d12e5e361e1fff6ba670323 Mon Sep 17 00:00:00 2001 From: Patricio Leon Ormazabal Date: Sun, 29 Oct 2023 23:08:37 -0300 Subject: [PATCH 0500/2103] Reto #1 - Java --- .../java/patricioleono.java" | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/java/patricioleono.java" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/java/patricioleono.java" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/java/patricioleono.java" new file mode 100644 index 0000000000..5d8ead1cbf --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/java/patricioleono.java" @@ -0,0 +1,47 @@ +import java.util.HashMap; +import java.util.Map; +public class patricioleono { + public static void main(String[] args){ + Map hackerLang = new HashMap<>(); + + hackerLang.put('A', "4"); + hackerLang.put('B', "|3"); + hackerLang.put('C', "["); + hackerLang.put('D', ")"); + hackerLang.put('E', "3"); + hackerLang.put('F', "|="); + hackerLang.put('G', "&"); + hackerLang.put('H', "#"); + hackerLang.put('I', "1"); + hackerLang.put('J', ",_|"); + hackerLang.put('K', ">|"); + hackerLang.put('L', "1"); + hackerLang.put('M', "/\\/\\"); + hackerLang.put('N', "^/"); + hackerLang.put('O', "0"); + hackerLang.put('P', "|*"); + hackerLang.put('Q', "(_,)"); + hackerLang.put('R', "|2"); + hackerLang.put('S', "5"); + hackerLang.put('T', "7"); + hackerLang.put('U', "(_)"); + hackerLang.put('V', "\\/"); + hackerLang.put('W', "\\/\\/"); + hackerLang.put('X', "><"); + hackerLang.put('Y', "j"); + hackerLang.put('Z', "2"); + + String inputData = "Resuelto por Patricio Leon"; + String outputData = ""; + + String inputUpper = inputData.toUpperCase(); + for (int i = 0; i < inputUpper.length(); i++){ + char indice = inputUpper.charAt(i); + outputData += hackerLang.containsKey(indice) ? hackerLang.get(indice) : indice; + + System.out.println(outputData); + } + System.out.println(hackerLang); + + } +} From 4c9c294395217a6c79985f530a5281e3cf8780d2 Mon Sep 17 00:00:00 2001 From: pyRamsd Date: Sun, 29 Oct 2023 21:40:07 -0500 Subject: [PATCH 0501/2103] Reto #41 - python --- .../python/pyramsd.py" | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/pyramsd.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/pyramsd.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/pyramsd.py" new file mode 100644 index 0000000000..487bb5249d --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/pyramsd.py" @@ -0,0 +1,107 @@ +import random + +# crear casa +def create_house() -> (list, list): + + house = [list(["⬜️"] * 4) for _ in range(4)] + + if random.choice([True, False]): + # Columnas + door = [random.randint(0, 3), random.choice([0, 3])] + else: + # Filas + door = [random.choice([0, 3]), random.randint(0, 3)] + + house[door[0]][door[1]] = "🚪" + + # colocar caramelo + def generate_candy(door: list) -> list: + candy = [random.randint(0, 3), random.randint(0, 3)] + if candy[0] == door[0] and candy[1] == door[1]: + return generate_candy(door) + return candy + + candy = generate_candy(door) + + house[candy[0]][candy[1]] = "🍭" + + for row in house: + print("".join(map(str, row))) + + return house, door + + +# Mover +def move(position: list) -> list: + + row, col = position[0], position[1] + + movements = "N S E O " + + if row == 0: movements = movements.replace("N ", "") + if row == 3: movements = movements.replace("S ", "") + if col == 0: movements = movements.replace("O ", "") + if col == 3: movements = movements.replace("E ", "") + + movement = input(f'¿Hacia donde te quieres desplazar [ {movements}]?: ').upper() + + if movement in movements: + if movement == "N": position = [row - 1, col] + elif movement == "S": position = [row + 1, col] + elif movement == "E": position = [row, col + 1] + elif movement == "O": position = [row, col - 1] + + return position + + else: + print("Seleccione movimiento válido") + return move(position) + + +# Crear acertijo +def riddle(): + + riddles = [("2 x 2" , "4"), ("10 x 11", "110"), ("4 x 4", "16"), ("5 x 5", "25"), + ("9 x 9", "81"), ("12 x 6", "36"), ("11 x 11", "121"), ("20 x 2", "40"), ("12 x 12", "144"), + ("33 x 3", "99"), ("5 x 4", "20"), ("5 x 6", "30"), ("6 x 6", "36"), ("7 x 7", "49"), + ("13 x 2", "26"), ("100 x 100", "10000"), ("42 x 3", "126"), ("36 x 3", "108"), + ("10 x 10", "100"), ("Ella no te...", "Ama")] + + current_riddle = riddles[random.randint(0, len(riddles) - 1)] + + while True: + answer = input(f"{current_riddle[0]}: ") + + if answer.lower() == current_riddle[1].lower(): + print("Respuesta correcta") + return + else: + print("Respuesta incorrecta") + + +house, door = create_house() + +position = door + +print(position) + +print("Bienvenidos al juego\nLlega al dulce!!") + +while True: + position = move(position) + print(position) + + house_room = house[position[0]][position[1]] + + if house_room == "⬜️": + print("Responde correctamente") + riddle() + + ghost = random.randint(1, 10) == 1 + + if ghost: + print("👻 Trampa!! Para salir de esta habitación deberás responder otra pregunta más.") + riddle() + elif house_room == "🍭": + print("Encontraste el dulce!!") + break From f4c7bab02789c33082b927ba42c48030a2029002 Mon Sep 17 00:00:00 2001 From: Sebastian Mora Date: Sun, 29 Oct 2023 23:06:32 -0500 Subject: [PATCH 0502/2103] Reto#[41] - [Python] --- .../python/jseb99.py" | 263 ++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jseb99.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jseb99.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jseb99.py" new file mode 100644 index 0000000000..e6dc92eaf8 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/jseb99.py" @@ -0,0 +1,263 @@ +import random +import os + +class CasaEncantada: + def __init__(self) -> None: + self._casa = [["⬜️","⬜️","⬜️","⬜️"], + ["⬜️","⬜️","⬜️","⬜️"], + ["⬜️","⬜️","⬜️","⬜️"], + ["⬜️","⬜️","⬜️","⬜️"]] + self.pos_fantasmas = [] + @property + def get_casa(self): + print("-CASA ENCANTADA-") + for habitacion in self._casa: + print(" ".join(habitacion)) + print("-CASA ENCANTADA-") + + def crear_objetos(self): + """ + Retorna la posición inicial del jugador en una lista [fila, columna] + Crea fantasmas y Puerta + """ + self.fila_puerta = random.randint(0,3) + if self.fila_puerta in (1,2): + self.columna_puerta = random.choice([0,3]) + else: + self.columna_puerta = random.randint(0,3) + + # 🍭 cualquier posición, menos en la pos. puerta + self.fila_dulce = random.randint(0,3) + self.columna_dulce = random.randint(0,3) + + while (self.fila_dulce,self.columna_dulce)==(self.fila_puerta,self.columna_puerta): + self.fila_dulce = random.randint(0,3) + self.columna_dulce = random.randint(0,3) + + self._casa[self.fila_puerta][self.columna_puerta] = "🚪" + self._casa[self.fila_dulce][self.columna_dulce] = "🍭" + self.fantasma() + return [self.fila_puerta,self.columna_puerta] + + def fantasma(self): + ''' + Crea posición de los fantasmas + ''' + num_ghosts = 0 + for i in range(0, 16): + ghost_rand = random.randint(1, 10) + if ghost_rand == 1: + num_ghosts += 1 + + while num_ghosts > 0: + while True: + ghost_pos = random.randint(0, 15) + if (ghost_pos // 4) != self.fila_puerta and int(ghost_pos % 4) != self.columna_puerta and (ghost_pos // 4) != self.fila_dulce and int(ghost_pos % 4) != self.columna_dulce: + break + if self._casa[ghost_pos // 4][ghost_pos % 4] == "⬜️": + self.pos_fantasmas.append([ghost_pos // 4,ghost_pos % 4]) + num_ghosts -= 1 + +class Jugador: + def __init__(self,posicion: list): + self.pos_jugador = posicion + + def movimiento(self): + move = input("¿Hacia dónde quieres ir?: Norte(N), Sur(S), Este(E), Oeste(O): ").upper() + while (move not in ("N","S","E","O")): + move = input("¿Hacia dónde quieres ir?: Norte(N), Sur(S), Este(E), Oeste(O): ").upper() + + if move == "N": + if self.pos_jugador[0]>0: + self.pos_jugador[0] -= 1 + else: + self.movimiento() + elif move == "S": + if self.pos_jugador[0]<3: + self.pos_jugador[0] += 1 + else: + self.movimiento() + elif move == "E": + if self.pos_jugador[1]<3: + self.pos_jugador[1] += 1 + else: + self.movimiento() + elif move == "O": + if self.pos_jugador[1]>0: + self.pos_jugador[1] -= 1 + else: + self.movimiento() + + return self.pos_jugador + +class Juego(CasaEncantada, Jugador): + def __init__(self): + self.casa_encantada = CasaEncantada() # Crear una instancia de CasaEncantada + self.jugador = Jugador(self.casa_encantada.crear_objetos()) # Crear una instancia de Jugador + self.preguntas = [ + { + 'pregunta': '¿Cuál es la capital de Francia?', + 'respuestas': { + 'correcta': 'París', + 'incorrecta': ['Londres', 'Madrid', 'Berlín'] + } + }, + { + 'pregunta': '¿En qué año se fundó Apple Inc.?', + 'respuestas': { + 'correcta': '1976', + 'incorrecta': ['1984', '1990', '2001'] + } + }, + { + 'pregunta': '¿Cuál es el planeta más grande del sistema solar?', + 'respuestas': { + 'correcta': 'Júpiter', + 'incorrecta': ['Marte', 'Venus', 'Saturno'] + } + }, + { + 'pregunta': '¿Quién escribió la novela "Don Quijote de la Mancha"?', + 'respuestas': { + 'correcta': 'Miguel de Cervantes', + 'incorrecta': ['William Shakespeare', 'Leo Tolstoy', 'Charles Dickens'] + } + }, + { + 'pregunta': '¿Cuál es el río más largo del mundo?', + 'respuestas': { + 'correcta': 'Amazonas', + 'incorrecta': ['Nilo', 'Misisipi', 'Danubio'] + } + }, + { + 'pregunta': '¿En qué año se proclamó la independencia de Estados Unidos?', + 'respuestas': { + 'correcta': '1776', + 'incorrecta': ['1789', '1812', '1900'] + } + }, + { + 'pregunta': '¿Cuál es el metal más abundante en la corteza terrestre?', + 'respuestas': { + 'correcta': 'Aluminio', + 'incorrecta': ['Hierro', 'Cobre', 'Plata'] + } + }, + { + 'pregunta': '¿Cuál es la montaña más alta del mundo?', + 'respuestas': { + 'correcta': 'Monte Everest', + 'incorrecta': ['Monte Kilimanjaro', 'Monte McKinley', 'Monte Fuji'] + } + }, + { + 'pregunta': '¿Cuál es el quinto planeta del sistema solar?', + 'respuestas': { + 'correcta': 'Júpiter', + 'incorrecta': ['Marte', 'Venus', 'Saturno'] + } + }, + { + 'pregunta': '¿Cuál es el gas más abundante en la atmósfera de la Tierra?', + 'respuestas': { + 'correcta': 'Nitrógeno', + 'incorrecta': ['Oxígeno', 'Dióxido de carbono', 'Argón'] + } + }, + { + 'pregunta': '¿Quién pintó la Mona Lisa?', + 'respuestas': { + 'correcta': 'Leonardo da Vinci', + 'incorrecta': ['Pablo Picasso', 'Vincent van Gogh', 'Rembrandt'] + } + }, + { + 'pregunta': '¿Cuál es el océano más grande del mundo?', + 'respuestas': { + 'correcta': 'Océano Pacífico', + 'incorrecta': ['Océano Atlántico', 'Océano Índico', 'Océano Ártico'] + } + }, + { + 'pregunta': '¿Cuál es el proceso de convertir agua en vapor mediante calor?', + 'respuestas': { + 'correcta': 'Evaporación', + 'incorrecta': ['Condensación', 'Sublimación', 'Fusión'] + } + }, + { + 'pregunta': '¿Cuál es el quinto planeta del sistema solar?', + 'respuestas': { + 'correcta': 'Júpiter', + 'incorrecta': ['Marte', 'Venus', 'Saturno'] + } + } + ] + + def mezclar_lista(self, lista_original): + + lista = lista_original[:] + longitud_lista = len(lista) + + for i in range(longitud_lista): + indice_aleatorio = random.randint(0, longitud_lista - 1) + + temporal = lista[i] + lista[i] = lista[indice_aleatorio] + lista[indice_aleatorio] = temporal + + return lista + + def logica_preguntas(self, twice:bool): + conteo = 0 + while twice: + pregunta = random.choice(self.preguntas) + respuestas = self.mezclar_lista([pregunta['respuestas']['correcta']]+pregunta['respuestas']['incorrecta']) + print(f"Pregunta-->",self.preguntas.index(pregunta)+1,pregunta['pregunta'],"\n", + "1.",respuestas[0],"\n","2.",respuestas[1],"\n","3.",respuestas[2],"\n","4.",respuestas[3]) + respuesta_usuario = int(input("Selecciona 1,2,3 o 4: ")) + while respuesta_usuario not in (1,2,3,4): + print("No escribas algo distinto, por favor.") + respuesta_usuario = int(input("Selecciona 1,2,3 o 4: ")) + if (respuestas[respuesta_usuario-1] == pregunta['respuestas']['correcta']) and conteo != 2: + conteo += 1 + if conteo == 2: + return + while not twice: + pregunta = random.choice(self.preguntas) + respuestas = self.mezclar_lista([pregunta['respuestas']['correcta']]+pregunta['respuestas']['incorrecta']) + print(f"❓ Pregunta: ",self.preguntas.index(pregunta)+1,pregunta['pregunta'],"\n", + "1.",respuestas[0],"\n","2.",respuestas[1],"\n","3.",respuestas[2],"\n","4.",respuestas[3]) + respuesta_usuario = int(input("Selecciona 1,2,3 o 4: ")) + while respuesta_usuario not in (1,2,3,4): + print("No escribas algo distinto, por favor.") + respuesta_usuario = int(input("Selecciona 1,2,3 o 4: ")) + if respuestas[respuesta_usuario-1] == pregunta['respuestas']['correcta']: + twice = True + + def empezar_juego(self): + print("👻👻👻 Te encuentras en la entrada 👻👻👻") + self.casa_encantada.get_casa + self.jugador.movimiento() + while self.jugador.pos_jugador[0] != self.casa_encantada.fila_dulce or self.jugador.pos_jugador[1] != self.casa_encantada.columna_dulce: + self.clearScreen() + print(f'📌 Te encuentas en la habitación: fila:{self.jugador.pos_jugador[0]}, columna:{self.jugador.pos_jugador[1]}') + twice = False + if self.jugador.pos_jugador in self.casa_encantada.pos_fantasmas: + self.casa_encantada._casa[self.jugador.pos_jugador[0]][self.jugador.pos_jugador[1]] = "👻" + twice = True + self.casa_encantada.get_casa + self.logica_preguntas(twice) + self.jugador.movimiento() + self.clearScreen() + + print("🎇🎇🎇FELICITACIONES🎇🎇🎇\n🍭🍭🍬🍬 Obtuviste el dulce 🍭🍭🍬🍬") + + def clearScreen(self): + os.system('cls' if os.name == 'nt' else 'clear') + + +if __name__ == "__main__": + juego = Juego() + juego.empezar_juego() From dec911a3f7eab0269596fed04264b86037938eda Mon Sep 17 00:00:00 2001 From: Juan David Duque Date: Mon, 30 Oct 2023 00:19:09 -0500 Subject: [PATCH 0503/2103] Reto#32 - jduque1989 - Python --- .../python/jduque1989.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/python/jduque1989.py diff --git a/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/python/jduque1989.py b/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/python/jduque1989.py new file mode 100644 index 0000000000..11a772d0f4 --- /dev/null +++ b/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/python/jduque1989.py @@ -0,0 +1,32 @@ +# Transform letters to numbers for example A=1 and Z=26 + +# get AA = 27 + +def is_valid_column(column): + """Check if the input is a valid column string.""" + return column.isalpha() + + +def ask_column(): + column = input("Enter a column: ").upper().strip() + while not is_valid_column(column): + column = input("Enter a valid column: ").upper().strip() + return len(column), column + + +def letter_to_number(ch): + return ord(ch) - ord('A') + 1 + + +size, ch = ask_column() + + +suma = 0 +for index, letter in enumerate(ch): + number = letter_to_number(letter) + number = number * (26 ** (size - index - 1)) + print(number) + suma += number + # print(suma) + +print(f"{ch} = {suma}") From fcd7773770bbb76b92c15f7c994fc79ac2574e6f Mon Sep 17 00:00:00 2001 From: Juan David Duque Date: Mon, 30 Oct 2023 01:22:40 -0500 Subject: [PATCH 0504/2103] Reto#30 - jduque1989 - Python --- .../python/jduque1989.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Retos/Reto #30 - EL TECLADO T9 [Media]/python/jduque1989.py diff --git a/Retos/Reto #30 - EL TECLADO T9 [Media]/python/jduque1989.py b/Retos/Reto #30 - EL TECLADO T9 [Media]/python/jduque1989.py new file mode 100644 index 0000000000..b5cdc99089 --- /dev/null +++ b/Retos/Reto #30 - EL TECLADO T9 [Media]/python/jduque1989.py @@ -0,0 +1,34 @@ +# T9 dictionary + +t9_mapping = { + 1: ['.', ','], + 2: ['A', 'B', 'C'], + 3: ['D', 'E', 'F'], + 4: ['G', 'H', 'I'], + 5: ['J', 'K', 'L'], + 6: ['M', 'N', 'O'], + 7: ['P', 'Q', 'R', 'S'], + 8: ['T', 'U', 'V'], + 9: ['W', 'X', 'Y', 'Z'], + 0: [' '], + '*': ['+', '-', '*', '/'], + '#': ['?', '!', '@'] +} + + +def t9_to_letters(t9_number): + length = len(t9_number) - 1 + index = int(t9_number[0]) + letter = t9_mapping[index][length] + return letter + + +Entrada = "6-666-88-777-33-3-33-888" # 666-666-88-777-33-3-33-888 +letters = Entrada.split("-") +t9_to_letters(letters[0]) + +word = [] +for i in letters: + word.append(t9_to_letters(i)) + +print(''.join(word)) From 3e2b5766815d0ce15a5e56c5596b8e6a89203201 Mon Sep 17 00:00:00 2001 From: JorgeCM Date: Mon, 30 Oct 2023 11:34:54 +0100 Subject: [PATCH 0505/2103] =?UTF-8?q?Correcci=C3=B3n=20de=20algunos=20caso?= =?UTF-8?q?s.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aun falta por corregir el calculo de las rectas cuando el objeto no se mueve o solo se mueve en el eje y. --- .../python/JorgeCM2004.py" | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" index f93fa16d92..169572e7d8 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/JorgeCM2004.py" @@ -14,7 +14,8 @@ def ask_speed(obj: str) -> tuple: return (speedx, speedy) def will_intersect(obj1: Object, obj2: Object) -> bool: - return obj1.speed != obj2.speed + # Debemos calular las pendientes y ver si son iguales o no, li lo son las proyecciones son paralelas y nunca colisionarán. + return obj1.speed[1] / obj1.speed[0] != obj2.speed[1] / obj2.speed[0] def same_position(obj1: Object, obj2: Object) -> bool: return obj1.position == obj2.position @@ -46,16 +47,22 @@ def main() -> None: if (intersection[0] - objectA.position[0]) % objectA.speed[0] == 0: t1 = (intersection[0] - objectA.position[0]) / objectA.speed[0] t2 = (intersection[0] - objectB.position[0]) / objectB.speed[0] - if t1 == t2: - print(f"Los objetos colisionarán en el punto {intersection} tras {t1} unidades de tiempo.") + if same_position(objectA, objectB): + print(f"Aunque los objetos tengan distinta velocidad comienzan en el mismo punto de partida por lo que colisionarán en el punto {objectA.position} en el instante t = 0.") else: - print(f"Aunque ambos objetos pasan por el mismo punto, necesitan distintos tiempos para alcanzar el punto {intersection}, El Objeto A necesita {t1} unidades de tiempo mientras que el Objeto B necesita {t2} unidades.") + if t1 == t2: + print(f"Los objetos colisionarán en el punto {intersection} tras {t1} unidades de tiempo.") + else: + print(f"Aunque ambos objetos pasan por el mismo punto, necesitan distintos tiempos para alcanzar el punto {intersection}, El Objeto A necesita {t1} unidades de tiempo mientras que el Objeto B necesita {t2} unidades.") else: print("Los objetos A y B no colisionarán nunca dado que siguiendo sus proyecciones colisionaron en un momento anterior.") elif same_position(objectA, objectB): - print("Los objetos A y B tienen tanto la misma direccion como la misma velocidad por lo que colisionaran en todos los puntos por los que pasen.") + if objectA.speed == objectB.speed: + print("Los objetos A y B tienen tanto la misma direccion como la misma velocidad por lo que colisionaran en todos los puntos por los que pasen.") + else: + print(f"Los objetos A y B parten desde el mismo punto y siguen la misma trayectoria, sin embargo, tienen velocidades distintas por lo que solo tendrán una colisión en {objectA.position} en el intsante t = 0.") else: - print(f"Aunque los objetos tengan distinta velocidad comienzan en el mismo punto de partida por lo que colisionarán en el punto ({objectA.position[0]}, {objectA.position[1]}) en el instante t = 0.") + print(f"Los objetos A y B nunca colisionarán al tener la misma pendiente en sus proyecciones y empezar en puntos distintos.") if __name__ == "__main__": main() \ No newline at end of file From 43c9dfdcf70c324189816e9f960647f6990b6e87 Mon Sep 17 00:00:00 2001 From: patriciotrujilllo Date: Mon, 30 Oct 2023 09:40:45 -0300 Subject: [PATCH 0506/2103] Reto #27 resolve --- .../javascript/patriciotrujilllo.js" | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 "Retos/Reto #27 - CUENTA ATR\303\201S [Media]/javascript/patriciotrujilllo.js" diff --git "a/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/javascript/patriciotrujilllo.js" "b/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/javascript/patriciotrujilllo.js" new file mode 100644 index 0000000000..7d175b8e92 --- /dev/null +++ "b/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/javascript/patriciotrujilllo.js" @@ -0,0 +1,32 @@ +/* + * Crea una función que reciba dos parámetros para crear una cuenta atrás. + * - El primero, representa el número en el que comienza la cuenta. + * - El segundo, los segundos que tienen que transcurrir entre cada cuenta. + * - Sólo se aceptan números enteros positivos. + * - El programa finaliza al llegar a cero. + * - Debes imprimir cada número de la cuenta atrás. + */ +//Funcion recursiva +function timer(start, seconds) { + + if (start === 0) return + + setTimeout(() => {//la llamda se realiza despues del tiempo indicado + console.log(start); + timer(start - 1, seconds); + }, seconds * 1000); + +} +timer(5,1); + +//con ciclo for +function timer (start,seconds) { + + for(let i=start; i>0; i--){ + setTimeout(()=>{// se ejecuta todo el ciclo for por lo que todos se ejecutaran al mismo tiempo, para resolver esto los timepos deben variar + console.log(i) + },(seconds*1000)*(start-i+1)) + } + +} +timer(5,1) \ No newline at end of file From d774cd365db680695356236fabd76f34702848f9 Mon Sep 17 00:00:00 2001 From: Juan David Duque Date: Mon, 30 Oct 2023 12:50:50 -0500 Subject: [PATCH 0507/2103] Reto#29 - jduque1989 - Python --- .../python/jduque1989.py" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/jduque1989.py" diff --git "a/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/jduque1989.py" "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/jduque1989.py" new file mode 100644 index 0000000000..1696144d9d --- /dev/null +++ "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/jduque1989.py" @@ -0,0 +1,31 @@ + + +def comparar_cadenas(cadena1, cadena2): + if len(cadena1) == len(cadena2): + print("Las cadenas tienen la misma longitud") + return True + else: + print("Las cadenas tienen diferentes longitudes") + return False + + +def comparar_caracteres(cadena1, cadena2): + ch = [] + for index, letter in enumerate(cadena2): + if letter != cadena1[index]: + ch.append(letter) + return ch + +# Test 1 + +# cadena1 = "Me llamo Juan Duque" +# cadena2 = "Me llame Juan Doque" + + +# Test 2 +cadena1 = "Me llamo.Brais Moure" +cadena2 = "Me llamo brais moure" + +comparar_cadenas(cadena1, cadena2) +diferentes_caracteres = comparar_caracteres(cadena1, cadena2) +print(f"Las cadenas no tienen los mismos caracteres {diferentes_caracteres}") From d0a6b515f2dce0ef2e47e807f8cbb7456f9e0b27 Mon Sep 17 00:00:00 2001 From: bertilein Date: Mon, 30 Oct 2023 20:53:25 +0100 Subject: [PATCH 0508/2103] Create bertilein.py Reto #4 - Python --- .../python/bertilein.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/bertilein.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/bertilein.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/bertilein.py new file mode 100644 index 0000000000..4265937f97 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/bertilein.py @@ -0,0 +1,49 @@ +""" +/* + * Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. + * Ejemplos: + * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" + * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" + */ +""" +import math as m + +def is_even(number)->bool: + return ((number%2)==0) + +def is_prime(number)->bool: + + upperbound = m.sqrt(number) + i = 2 + while ( number % i != 0 ) and (i <= upperbound): + i=i+1 + + return i>upperbound + + +def is_perfect_square(number)->bool: + square = int(m.sqrt(number)) + return ((square*square) == number ) + + +def is_fibonacci(number)->bool: + return is_perfect_square(5*number*number+4) or is_perfect_square(5*number*number-4) + + +def is_prime_fib_even(number)->str: + es_primo = (' no', '')[is_prime(number)] + ' es primo, ' + es_fibonacci = (' no', '')[is_fibonacci(number)] + ' es fibonacci, ' + es_par = (' es impar ', ' es par')[is_even(number)] + + return es_primo+es_fibonacci+es_par + +num1 = 2 +num2 = 7 + +print(num1 , is_prime_fib_even(num1)) +print(num2 , is_prime_fib_even(num2)) + +# Más Tests :P - del 2 al 19 +for i in range(1,20): + print(i , is_prime_fib_even(i)) + \ No newline at end of file From 7073e99a6fed82c5c3eca0dcda2da67da765f6c9 Mon Sep 17 00:00:00 2001 From: Carlos Esteban Castro <146273220+ccaicedo09@users.noreply.github.com> Date: Mon, 30 Oct 2023 15:10:19 -0500 Subject: [PATCH 0509/2103] =?UTF-8?q?Update=20ejercicio.md=20(tardarn=20->?= =?UTF-8?q?=20tardar=C3=A1n)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corrección de un pequeño typo! --- .../ejercicio.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/ejercicio.md" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/ejercicio.md" index e9955608c1..7a236b7a6c 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/ejercicio.md" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/ejercicio.md" @@ -10,7 +10,7 @@ * - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento * (vector de desplazamiento) por unidad de tiempo (también en formato xy). * - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. - * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. + * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarán en lograrlo. * - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. */ ``` @@ -18,4 +18,4 @@ Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. -> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. From 128d2002c5923b27e038fc71564ee4539553c41d Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 30 Oct 2023 21:36:56 +0100 Subject: [PATCH 0510/2103] =?UTF-8?q?Correcci=C3=B3n=20Reto=20#42?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +-- .../python/mouredev.py" | 36 +++++++++++++++++++ .../ejercicio.md" | 27 ++++++++++++++ 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/mouredev.py" create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ejercicio.md" diff --git a/README.md b/README.md index f15526bdba..1724ca2b0a 100644 --- a/README.md +++ b/README.md @@ -59,9 +59,10 @@ Aquí encontrarás el listado de retos, su fecha de publicación, dificultad y e * **#39** - 02/10/23 | Media | [`TRIPLES PITAGÓRICOS`](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2339%20-%20TRIPLES%20PITAGÓRICOS%20%5BMedia%5D/)] * **#40** - 09/10/23 | Fácil | [`TABLA DE MULTIPLICAR`](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/)] * **#41** - 16/10/23 | Difícil | [`LA CASA ENCANTADA`](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/)] -* **#42** - 23/10/23 | Media | [`PUNTO DE ENCUENTRO`](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/ejercicio.md) | Último reto publicado +* **#42** - 23/10/23 | Difícil | [`PUNTO DE ENCUENTRO`](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/ejercicio.md) Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/)] +* **#43** - 30/10/23 | Fácil | [`SIMULADOR DE CLIMA`](./Retos/Reto%20%2343%20-%20SIMULADOR%20DE%20CLIMA%20%5BFácil%5D/ejercicio.md) | Último reto publicado -> **Corrección y Publicación próximo reto - 30/10/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1165944540453150741) en [Twitch](https://twitch.tv/mouredev)** +> **Corrección y Publicación próximo reto - 13/11/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1165944540453150741) en [Twitch](https://twitch.tv/mouredev)** *Puedes ejecutar el archivo [language_stats.py](./Retos/language_stats.py) para visualizar las estadísticas de uso de cada lenguaje.* diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/mouredev.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/mouredev.py" new file mode 100644 index 0000000000..ab3b72a31d --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/mouredev.py" @@ -0,0 +1,36 @@ +def collision(position_a, speed_a, position_b, speed_b): + + xa, ya = position_a + xb, yb = position_b + sxa, sya = speed_a + sxb, syb = speed_b + + if sxa - sxb == 0: + if xa == xb: + tx = 0 + else: + return "Los objetos no se encontrarán." + else: + tx = (xb - xa) / (sxa - sxb) + + if sya - syb == 0: + if ya == yb: + ty = 0 + else: + return "Los objetos no se encontrarán." + else: + ty = (yb - ya) / (sya - syb) + + if tx == ty: + t = tx + x = xa + sxa * tx + y = ya + sya * ty + return f"Los objetos colisionan en el punto ({x}, {y}) en un tiempo {t}." + else: + return "Los objetos no se encontrarán." + +print(collision((0, 0), (1, 1), (1, 2), (0, 1))) + +print(collision((2, 0), (0, 1), (0, 2), (1, 0))) + +print(collision((0, 0), (10, 5), (100, 50), (-5, -2.5))) \ No newline at end of file diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ejercicio.md" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ejercicio.md" new file mode 100644 index 0000000000..361ad3e087 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ejercicio.md" @@ -0,0 +1,27 @@ +# Reto #43: Simulador de clima +#### Dificultad: Fácil | Publicación: 30/10/23 | Corrección: 13/11/23 + +## Enunciado + +``` +/* + * 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. + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file From c0fa652d2649a24283f8d64630e13a9dbacad77b Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Mon, 30 Oct 2023 15:47:04 -0500 Subject: [PATCH 0511/2103] Reto #18 - Python --- .../python/sublian.py" | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/sublian.py" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/sublian.py" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/sublian.py" new file mode 100644 index 0000000000..273806da06 --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/sublian.py" @@ -0,0 +1,45 @@ +# Reto #18: Web scraping +#### Dificultad: Difícil | Publicación: 01/05/23 | Mi Solucion: 30/10/23 +## Enunciado +""" + * El día 128 del año celebramos en la comunidad el "Hola Mundo day" + * Vamos a hacer "web scraping" sobre su sitio web: https://holamundo.day + * Crea un programa que se conecte a la web del evento e imprima únicamente la agenda de eventos + * del día 8. Mostrando hora e información de cada uno. + * Ejemplo: "16:00 | Bienvenida" + * Se permite utilizar librerías que nos faciliten esta tarea. + + El sitio web https://holamundo.day no esta disponible por eso hare un web scraping a otra + pagina web, tomare como ejemplo la del equipo de futbol peruano solo como practica + +""" + +from bs4 import BeautifulSoup +import requests +import pandas as pd + +#url a usar +url =('https://www.futbolperuano.com/liga-1/tabla-de-posiciones') +response = requests.get(url) + +#si obtengo conexion 200 procedo con el codigo +if response.status_code ==200: + soup = BeautifulSoup(response.content, 'html.parser') + teams = soup.find_all('td', class_='equipo text-left') + + #para manipular la informacion creo una lista vacia + selection = list() + for team in teams: + #para evitar saltos de linea o espacios en blanco uso strip() y text() para que no salga otra informacion + selection.append(team.text.strip()) + + #print(selection) + #print("tamaño: ",len(selection)) + #para conocer el tamaño use la funcion len + data = pd.DataFrame({'Equipos: ':selection}, index=list(range(1,39) )) + print(data) + + #como extra creo un csv + data.to_csv('Equipos de futbol peruano') +else: + print("Error, no se logro conectar") From 89c76b3b835e8d58c8026c62a06744afc4692ba0 Mon Sep 17 00:00:00 2001 From: Juan David Duque Date: Mon, 30 Oct 2023 16:49:36 -0500 Subject: [PATCH 0512/2103] Reto#28 - jduque1989 - Python --- .../python/jduque1989.py" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/python/jduque1989.py" diff --git "a/Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/python/jduque1989.py" "b/Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/python/jduque1989.py" new file mode 100644 index 0000000000..5da911c696 --- /dev/null +++ "b/Retos/Reto #28 - EXPRESI\303\223N MATEM\303\201TICA [Media]/python/jduque1989.py" @@ -0,0 +1,36 @@ +numbers = str(list(range(0, 10))) +operations = ["+", "-", "*", "/"] + +# Function to evaluate the expression in operations + + +def math_expression(digit): + if digit in operations: + return True + else: + return False + +# Function to evaluate the expression in numbers + + +def number_expression(digit): + if digit in numbers: + return True + else: + return False + + +def evaluate(expression): + number_expression(expression[0]) + + for i in expression: + if math_expression(i) or number_expression(i) or i == " ": + continue + else: + return False + return True + + +expresion1 = "5 + a / 7 - 4" + +print(f"La expresion {expresion1} es: {evaluate(expresion1)}") From 272d28320d1888f4e8666ec36f1cbcb1e64169be Mon Sep 17 00:00:00 2001 From: AlbertoVf Date: Tue, 31 Oct 2023 01:51:27 +0100 Subject: [PATCH 0513/2103] reto#43 - typescript --- .../typescript/albertovf.ts" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/typescript/albertovf.ts" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/typescript/albertovf.ts" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/typescript/albertovf.ts" new file mode 100644 index 0000000000..fd83428dd7 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/typescript/albertovf.ts" @@ -0,0 +1,44 @@ +const TEMPERATURA = 27; +const LLUVIA = 35; + +const aleatorio = (): number => { + let r: number = Math.random() * 100; + return r +} + +const reto = (nDias, T_INICIAL: number = TEMPERATURA, P_LLUVIA: number = LLUVIA) => { + let temperatura = T_INICIAL; + let lluvia = P_LLUVIA; + let t_maxima = T_INICIAL; + let t_minima = T_INICIAL; + let dias_lluviosos = 0; + for (let dia = 0; dia < nDias; dia++) { + console.log(`${dia + 1}: ${temperatura}ºC ; ${lluvia}%`); + if (temperatura > t_maxima) { + t_maxima = temperatura; + } else if (temperatura < t_minima) { + t_minima = temperatura; + } + + if (aleatorio() >= 90) { + temperatura += 2; + } else if (aleatorio() <= 10) { + temperatura -= 2; + } + + if (temperatura > 25) { + lluvia *= 1.2; + } else if (temperatura < 5) { + lluvia *= 0.8; + } + if (lluvia >= 100) { + dias_lluviosos++; + temperatura--; + lluvia = 100; + } + lluvia = Math.round(lluvia); + } + console.log({ dias_lluviosos, t_maxima, t_minima }); +} + +reto(365); \ No newline at end of file From 11c5707a42052c9ed556ff6d4d36b267f3293d15 Mon Sep 17 00:00:00 2001 From: Luis Lopez Date: Tue, 31 Oct 2023 00:06:03 -0700 Subject: [PATCH 0514/2103] =?UTF-8?q?A=C3=B1ad=C3=AD=20mi=20soluci=C3=B3n?= =?UTF-8?q?=20de=20Ocaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ocaml/luishendrix92.ml" | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ocaml/luishendrix92.ml" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ocaml/luishendrix92.ml" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ocaml/luishendrix92.ml" new file mode 100644 index 0000000000..479f50f269 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ocaml/luishendrix92.ml" @@ -0,0 +1,55 @@ +(* Avoid using the default Ocaml pseudo-random seed. *) +let _ = Random.self_init () + +(** Prevents `n` from going < 0 or > 100, keeping it a valid percentage. *) +let percentage n = Int.max 0 (Int.min n 100) + +(** Makes an infinite sequence representing a weather report, consists + of daily predictions based on the previous values. *) +let weather_report initial_temp initial_rain_prob = + let predict (temp, rain_prob) = + let temp_change = + (* Decide a 50/50 between -2 and +2 if and after a 10% chance *) + (if Random.int 100 < 10 then 2 * if Random.bool () then 1 else -1 else 0) + (* ... and then only reduce temperature by 1 if it rained the previous day. *) + - Bool.to_int (rain_prob >= 100) + in + let rain_prob_change = if temp > 25 then 20 else if temp < 5 then -20 else 0 in + temp + temp_change, percentage (rain_prob + rain_prob_change) + in + (initial_temp, percentage initial_rain_prob) |> Seq.iterate predict +;; + +let initial_temp, initial_rain_prob, n_days = + ( (print_string "Enter initial temperature: "; + read_int ()) + , (print_string "Enter initial rain probability: "; + read_int ()) + , (print_string "How many days?: "; + read_int ()) ) +in +let max_temp, rainy_days = + weather_report initial_temp initial_rain_prob + |> Seq.take (max 1 n_days) (* Ensure there's at least 1 day to display. *) + |> Seq.fold_lefti (* Build up the maximum temperature and number of rainy days. *) + (fun (max_temp, rainy_days) i (temp, prob) -> + Printf.sprintf "Day %d | Temperature: %d°C | Rain odds: %d%%" i temp prob + |> print_endline; + max max_temp temp, rainy_days + Bool.to_int (prob >= 100)) + (min_int, 0) +in +print_endline "---------------------------------------------------"; +Printf.sprintf "Maximum temperature: %d°C | Rainy days: %d." max_temp rainy_days +|> print_endline + +(** Want to run this challenge? Here's how: + 1. Download the Ocaml tooling from https://ocaml.org/install. + 2. Run either of these commands on the directory where this file is: + `ocaml luishendrix92.ml` or + `utop` and inside input `#use "luishendrix92.ml";;`, then hit ENTER. + 3. Alternatively you can check an online playground: + https://replit.com/@luishendrix92/Reto43MoureDev#bin/main.ml + + IMPORTANT: The minimum required version of Ocaml for this + challenge is 4.14.0 due to Seq.iterate being relatively new. + The profile I use for .ocamlformat is `janestreet`. *) From 88e845a4a7e25b04b258ed78773db6745cde1538 Mon Sep 17 00:00:00 2001 From: Hector Date: Tue, 31 Oct 2023 09:55:09 +0100 Subject: [PATCH 0515/2103] Reto #43 - Javascript --- .../javascript/HectorIglesias.js" | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/HectorIglesias.js" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/HectorIglesias.js" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/HectorIglesias.js" new file mode 100644 index 0000000000..9bb5e45e0d --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/HectorIglesias.js" @@ -0,0 +1,73 @@ +/* + * 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. + */ +let temperatura_max = 0 +let temperatura_min = 0 +let dia = 0 +let dias_lloviendo = 0 + +function calcular_clima (temperatura, prob_lluvia, numero_dias){ + if (temperatura > temperatura_max){ + temperatura_max = temperatura + } + + if(dia == 0){ + temperatura_min = temperatura + } + else{ + if(temperatura < temperatura_min){ + temperatura_min = temperatura + } + } + + if(numero_dias > 0){ + dia += 1 + console.log("El dia " +dia+ " habrá " +temperatura+ " grados con " +prob_lluvia+ "% de lluvia") + let llueve = false + if (prob_lluvia == 100){ + llueve = true + temperatura -= 1 + dias_lloviendo += 1 + } + + let prob_temperatura_cambie= Math.floor(Math.random() * 100) + if (prob_temperatura_cambie < 10){ + if(Math.floor(Math.random()) == 0){ + temperatura += 2 + } + else{ + temperatura -= 2 + } + } + + if (temperatura => 25){ + if (prob_lluvia < 100){ + prob_lluvia += 20 + } + } + + if (temperatura < 5){ + prob_lluvia -= 20 + } + + numero_dias -= 1 + calcular_clima(temperatura, prob_lluvia, numero_dias) + } +} + +calcular_clima(26, 0, 10) +console.log("La temperatura máxima ha sido "+temperatura_max) +console.log("La temperatura mínima ha sido "+temperatura_min) +console.log("Ha llovido "+dias_lloviendo+" días") \ No newline at end of file From d895c6b722b7d66dec8d62de3aca4234f00e92fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Andr=C3=A9s?= <102297884+vandresca@users.noreply.github.com> Date: Tue, 31 Oct 2023 13:54:34 +0100 Subject: [PATCH 0516/2103] Create vandresca.py --- .../python/vandresca.py" | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/vandresca.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/vandresca.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/vandresca.py" new file mode 100644 index 0000000000..5fc1e76f29 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/vandresca.py" @@ -0,0 +1,79 @@ +""" +/* + * 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. + */ + """ + +import random + +def getInitialClimaticConditions(): + init_temp = int(input("Introduce la temperatura inicial: ")) + init_pRain = int(input("Introduce el porcentaje de lluvia: ")) + return init_temp, init_pRain + +def isTemperatureChange(): + rand = random.randint(0, 100) + if rand >= 0 and rand <= 10: + return True + return False + +def is2GradeIncrease(): + rand = random.randint(0, 1) + if rand == 0: + return True + return False + +def calculateClimaticConditions(days_prediction): + init_temp, init_pRain = getInitialClimaticConditions() + temp_max = init_temp + temp_min = init_temp + daysOfRain = 0 + + for _ in range(days_prediction): + if isTemperatureChange(): + if is2GradeIncrease(): + init_temp += 2 + else: + init_temp -= 2 + if init_temp > 25: + init_pRain += 20 + if init_temp < 5: + init_pRain -= 20 + + if init_pRain >= 100: + init_temp -= 1 + daysOfRain +=1 + + if init_temp > temp_max: + temp_max = init_temp + if init_temp < temp_min: + temp_min = init_temp + + if init_pRain >= 100: + isRaining = "Sí" + else: + isRaining = "No" + + print("Temperatura: "+ str(init_temp)) + print("Llueve: "+ isRaining) + print("Temperatura máxima: "+ str(temp_max)) + print("Temperatura mínima: "+ str(temp_min)) + print("Días de lluvia: "+ str(daysOfRain)) + + + +days_prediction = int(input("Introduce el número de días de predicción: ")) +calculateClimaticConditions(days_prediction) + From 9aeb35ac4d221372d4bc98def9b307a2484450a9 Mon Sep 17 00:00:00 2001 From: blackriper Date: Tue, 31 Oct 2023 09:02:19 -0600 Subject: [PATCH 0517/2103] Reto#43-go --- .../go/blackriper.go" | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/go/blackriper.go" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/go/blackriper.go" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/go/blackriper.go" new file mode 100644 index 0000000000..55e9fd05ad --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/go/blackriper.go" @@ -0,0 +1,109 @@ +package main + +import ( + "fmt" + "math/rand" +) + +// definir metodos de trabajo +type WeatherSimulator interface { + ReadParameters() + SimulateWeather() + ShowResultSimulate() +} + +// implementar metodos +type Weather struct { + Temp int + PosRain int + NumDays int + NumRainDays int + MaxTemp int + MinTemp int +} + +func (w *Weather) ReadParameters() { + fmt.Println("Enter initial temperature") + fmt.Scanf("%d", &w.Temp) + + fmt.Println("Enter porcent posibility of rain ") + fmt.Scanf("%d", &w.PosRain) + + fmt.Println("Enter number of days to simulate") + fmt.Scanf("%d", &w.NumDays) + +} + +func (w *Weather) SimulateWeather() { + + temp := w.Temp + posRain := w.PosRain + raining := false + + w.MaxTemp = temp + w.MinTemp = temp + + for d := 0; d < w.NumDays; d++ { + + if GradeIncrease() { + temp += 2 + } else { + temp -= 2 + } + + if temp > 25 { + posRain += 20 + } else if temp < 5 { + posRain -= 20 + } + + if posRain >= 100 { + temp -= 1 + w.NumRainDays++ + } + + if temp > w.MaxTemp { + w.MaxTemp = temp + } + + if temp < w.MinTemp { + w.MinTemp = temp + } + + if posRain >= 100 { + raining = true + } + + fmt.Printf("Day %d: Temperature: %d, rain: %s\n", d+1, temp, IsRain(raining)) + } +} + +func (w Weather) ShowResultSimulate() { + fmt.Printf("Max Temperature: %v \n", w.MaxTemp) + fmt.Printf("Min Temperature: %v \n", w.MinTemp) + fmt.Printf("Total days of rain: %v \n", w.NumRainDays) +} + +// funciones auxiliares +func GradeIncrease() bool { + num := rand.Intn(2) + if num == 0 { + return true + } + return false +} + +func IsRain(rain bool) string { + if rain { + return "rain" + } else { + return "no rain" + } +} + +func main() { + var simulate WeatherSimulator = &Weather{} + simulate.ReadParameters() + simulate.SimulateWeather() + simulate.ShowResultSimulate() +} From 56fd9323126f1231d49cf289476cbd5d9fb95a5f Mon Sep 17 00:00:00 2001 From: arielposada <116775523+arielposada@users.noreply.github.com> Date: Tue, 31 Oct 2023 10:20:58 -0500 Subject: [PATCH 0518/2103] Reto #38 - C# --- .../c#/arielposada.cs | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/c#/arielposada.cs diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/c#/arielposada.cs b/Retos/Reto #38 - LAS SUMAS [Media]/c#/arielposada.cs new file mode 100644 index 0000000000..853f82fefe --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/c#/arielposada.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Reto38 +{ + public class Program + { + public static void Main() + { + List numbers = new List { 1, 5, 3, 2 }; + int target = 6; + var combinations = FindCombinations(numbers, target); + + foreach (var combination in combinations) + { + Console.WriteLine(string.Join(", ", combination)); + } + + Console.ReadKey(); + } + + public static List> FindCombinations(List numbers, int target) + { + List> result = new List>(); + + void Helper(List currentNumbers, int currentSum, List currentCombination) + { + if (currentSum == target) + { + result.Add(new List(currentCombination)); + return; + } + + if (!currentNumbers.Any() || currentSum > target) + return; + + int currentNum = currentNumbers.First(); + + Helper(currentNumbers.Skip(1).ToList(), currentSum, currentCombination); + + currentCombination.Add(currentNum); + Helper(currentNumbers.Skip(1).ToList(), currentSum + currentNum, currentCombination); + currentCombination.RemoveAt(currentCombination.Count - 1); + } + + Helper(numbers, 0, new List()); + + return result; + } + } +} \ No newline at end of file From 18ed4faa8e7817318ef5989e233f767ce2cb6f12 Mon Sep 17 00:00:00 2001 From: arielposada <116775523+arielposada@users.noreply.github.com> Date: Tue, 31 Oct 2023 10:25:52 -0500 Subject: [PATCH 0519/2103] Reto #39 - C# --- .../c#/arielposada.cs" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/c#/arielposada.cs" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/c#/arielposada.cs" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/c#/arielposada.cs" new file mode 100644 index 0000000000..103033663e --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/c#/arielposada.cs" @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Reto39 +{ + public class Program + { + public static void Main() + { + int maxNumber = 10; + var triples = FindPythagoreanTriples(maxNumber); + + foreach (var triple in triples) + { + Console.WriteLine($"({triple.Item1}, {triple.Item2}, {triple.Item3})"); + } + + Console.ReadKey(); + } + + public static List> FindPythagoreanTriples(int maxNumber) => + (from a in Enumerable.Range(1, maxNumber) + from b in Enumerable.Range(a, maxNumber - a + 1) + let c = Math.Sqrt(a * a + b * b) + where c <= maxNumber && c% 1 == 0 + select Tuple.Create(a, b, (int)c)).ToList(); + } + +} \ No newline at end of file From 75257ea66128f4a6b32dc3007a43df362ef53191 Mon Sep 17 00:00:00 2001 From: arielposada <116775523+arielposada@users.noreply.github.com> Date: Tue, 31 Oct 2023 10:29:03 -0500 Subject: [PATCH 0520/2103] Reto #40 - C# --- .../c#/arielposada.cs" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/arielposada.cs" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/arielposada.cs" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/arielposada.cs" new file mode 100644 index 0000000000..e2285b3902 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/arielposada.cs" @@ -0,0 +1,30 @@ +using System; +using System.Linq; + +namespace Reto40 +{ + public class Program + { + public static void Main(string[] args) + { + Console.Write("Introduce un número:"); + + if (int.TryParse(Console.ReadLine(), out int numero)) + { + var tabla = Enumerable.Range(1, 10) + .Select(i => $"{numero} x {i} = {i * numero}").ToList(); + + foreach (var linea in tabla) + { + Console.WriteLine(linea); + } + } + else + { + Console.WriteLine("Entrada inválida"); + } + + Console.ReadKey(); + } + } +} \ No newline at end of file From 75b80f47c03e592fa5bd1d7ab0c728953533ab73 Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Tue, 31 Oct 2023 16:45:05 +0100 Subject: [PATCH 0521/2103] Reto #43 - Java --- .../java/Qv1ko.java" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/java/Qv1ko.java" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/java/Qv1ko.java" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/java/Qv1ko.java" new file mode 100644 index 0000000000..9ae25103e7 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/java/Qv1ko.java" @@ -0,0 +1,49 @@ +class Qv1ko { + + public static void main(String[] args) { + weather(9, 92, 7); + } + + private static void weather(int temperature, int rainProbability, int days) { + + rainProbability = Math.abs(rainProbability); + days = Math.abs(days); + + boolean rain = (int)(Math.random() * 100) < rainProbability; + int maxTemperature = temperature, minTemperature = temperature; + int rainyDays = 0; + int possibilities = 0; + + for (int i = 0; i < days; i++) { + + System.out.println("\nDay " + (i + 1) + ":\n Temperature: " + temperature + (rain ? "\n It rains" : "\n No rain")); + + if (temperature > maxTemperature) { + maxTemperature = temperature; + } else if (temperature < minTemperature) { + minTemperature = temperature; + } + rainyDays += rain ? 1 : 0; + + possibilities = (int)(Math.random() * 10); + + temperature += (possibilities == 1) ? 2 : (possibilities == 2) ? -2 : 0; + rainProbability += (temperature > 25) ? 20 : (temperature < 5) ? -20 : 0; + + if (rainProbability >= 100) { + temperature--; + rainProbability = 100; + } else if (rainProbability <= 0) { + temperature++; + rainProbability = 0; + } + + rain = (int)(Math.random() * 100) < rainProbability; + + } + + System.out.println("\nMaximum temperature: " + maxTemperature + "\nMinimum temperature: " + minTemperature + "\nRainy days: " + rainyDays); + + } + +} From 29632b0a30adea3e66dbb6fbbf7c7f883cacde01 Mon Sep 17 00:00:00 2001 From: Edwin Date: Tue, 31 Oct 2023 13:17:47 -0400 Subject: [PATCH 0522/2103] Reto #3 - JavaScript --- .../javascript/EdGonzz.js" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/EdGonzz.js" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/EdGonzz.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/EdGonzz.js" new file mode 100644 index 0000000000..1cb139942c --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/EdGonzz.js" @@ -0,0 +1,23 @@ +// ``` +// /* +// * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. +// * Podrás configurar generar contraseñas con los siguientes parámetros: +// * - Longitud: Entre 8 y 16. +// * - Con o sin letras mayúsculas. +// * - Con o sin números. +// * - Con o sin símbolos. +// * (Pudiendo combinar todos estos parámetros entre ellos) +// */ +// ``` + +const stringPass = 'abcdefghijklmnopqrstuvwxyz!@#$%^&*()-_=+ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' + +function getPassword() { + let pass = ''; + for (let i = 0; i < 14; i++) { + pass += stringPass[Math.floor(Math.random() * stringPass.length)] + } + return pass +} + +console.log(getPassword()); \ No newline at end of file From 028cd99930fb482213342931cf533a777f09c53f Mon Sep 17 00:00:00 2001 From: Mario Ruano Date: Tue, 31 Oct 2023 19:33:38 +0100 Subject: [PATCH 0523/2103] Reto #43 - PHP --- .../php/mrf1989.php" | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/php/mrf1989.php" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/php/mrf1989.php" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/php/mrf1989.php" new file mode 100644 index 0000000000..9d475220cb --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/php/mrf1989.php" @@ -0,0 +1,54 @@ + 25) { + $p_lluvia += 20; + if ($p_lluvia > 100) { + $p_lluvia = 100; + $tmp -= 1; + } + } else if ($tmp < 5) { + $p_lluvia -= 20; + if ($p_lluvia < 0) { + $p_lluvia = 0; + } + } + } + + echo "RESUMEN:\n"; + echo "- Días lluviosos: {$dias_lluviosos}.\n"; + echo "Temperatura máxima: " . max($tmp_diarias) . " grados.\n"; + echo "Tempratura mínima: " . min($tmp_diarias) . " grados.\n"; +} + +predecir_clima(24, 24, 20); From bd938df0e0f7696dca17042ca3e1cd177be9f6f0 Mon Sep 17 00:00:00 2001 From: Luis Lopez Date: Tue, 31 Oct 2023 11:59:32 -0700 Subject: [PATCH 0524/2103] Added min_temp to the result thruple --- .../ocaml/luishendrix92.ml" | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ocaml/luishendrix92.ml" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ocaml/luishendrix92.ml" index 479f50f269..2e85357149 100644 --- "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ocaml/luishendrix92.ml" +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ocaml/luishendrix92.ml" @@ -1,7 +1,23 @@ -(* Avoid using the default Ocaml pseudo-random seed. *) +(******************************************************************************) +(* *) +(* Want to run this challenge? *) +(* --------------------------- *) +(* 1. Download the Ocaml tooling from https://ocaml.org/install. *) +(* 2. Run either of these commands on the directory where this file is: *) +(* [ocaml luishendrix92.ml] or *) +(* [utop] and inside input [#use "luishendrix92.ml";;], then hit ENTER. *) +(* 3. Alternatively you can check an online playground: *) +(* https://replit.com/@luishendrix92/Reto43MoureDev#bin/main.ml *) +(* *) +(* IMPORTANT: The minimum required version of Ocaml for this *) +(* challenge is 4.14.0 due to [Seq.iterate] being relatively new. *) +(* The profile I use for [.ocamlformat] is [janestreet]. *) +(* *) +(******************************************************************************) + let _ = Random.self_init () -(** Prevents `n` from going < 0 or > 100, keeping it a valid percentage. *) +(** Prevents [n] from going < 0 or > 100, keeping it a valid percentage. *) let percentage n = Int.max 0 (Int.min n 100) (** Makes an infinite sequence representing a weather report, consists @@ -28,28 +44,20 @@ let initial_temp, initial_rain_prob, n_days = , (print_string "How many days?: "; read_int ()) ) in -let max_temp, rainy_days = +let min_temp, max_temp, rainy_days = weather_report initial_temp initial_rain_prob |> Seq.take (max 1 n_days) (* Ensure there's at least 1 day to display. *) - |> Seq.fold_lefti (* Build up the maximum temperature and number of rainy days. *) - (fun (max_temp, rainy_days) i (temp, prob) -> + |> Seq.fold_lefti (* Compute the extreme temperatures and num. of rainy days. *) + (fun (min_temp, max_temp, rainy_days) i (temp, prob) -> Printf.sprintf "Day %d | Temperature: %d°C | Rain odds: %d%%" i temp prob |> print_endline; - max max_temp temp, rainy_days + Bool.to_int (prob >= 100)) - (min_int, 0) + min min_temp temp, max max_temp temp, rainy_days + Bool.to_int (prob >= 100)) + (max_int, min_int, 0) in print_endline "---------------------------------------------------"; -Printf.sprintf "Maximum temperature: %d°C | Rainy days: %d." max_temp rainy_days +Printf.sprintf + "Min Temp: %d°C | Max Temp: %d°C | Rainy Days: %d." + min_temp + max_temp + rainy_days |> print_endline - -(** Want to run this challenge? Here's how: - 1. Download the Ocaml tooling from https://ocaml.org/install. - 2. Run either of these commands on the directory where this file is: - `ocaml luishendrix92.ml` or - `utop` and inside input `#use "luishendrix92.ml";;`, then hit ENTER. - 3. Alternatively you can check an online playground: - https://replit.com/@luishendrix92/Reto43MoureDev#bin/main.ml - - IMPORTANT: The minimum required version of Ocaml for this - challenge is 4.14.0 due to Seq.iterate being relatively new. - The profile I use for .ocamlformat is `janestreet`. *) From da88f7794ed919e6445824ff570cd51848bccacc Mon Sep 17 00:00:00 2001 From: Jose Corredor Date: Tue, 31 Oct 2023 14:01:50 -0500 Subject: [PATCH 0525/2103] First challenge FizzBuzz --- .../java/jose827corrza.java" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/jose827corrza.java" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/jose827corrza.java" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/jose827corrza.java" new file mode 100644 index 0000000000..5acec14441 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/jose827corrza.java" @@ -0,0 +1,30 @@ +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ + + +class Jose827corrza { + public static void main(String[] args) { + fizzBuzz(); + + } + + public static void fizzBuzz() { + for (int i = 0 ; i <= 15 ; i++ ){ + if( i % 3 == 0 && i % 5 == 0 ){ + System.out.println("fizzbuzz"); + } else if( i % 3 == 0 ){ + System.out.println("fizz"); + } else if( i % 5 == 0 ){ + System.out.println("buzz"); + } else { + System.out.println(i); + } + } + } +} \ No newline at end of file From 35b21d2f865a9852f4ae22a9d9c427ba178236bf Mon Sep 17 00:00:00 2001 From: Jose Corredor Date: Tue, 31 Oct 2023 14:03:05 -0500 Subject: [PATCH 0526/2103] Fix top number to 100 --- .../java/jose827corrza.java" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/jose827corrza.java" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/jose827corrza.java" index 5acec14441..9fc0a358eb 100644 --- "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/jose827corrza.java" +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/jose827corrza.java" @@ -15,7 +15,7 @@ public static void main(String[] args) { } public static void fizzBuzz() { - for (int i = 0 ; i <= 15 ; i++ ){ + for (int i = 0 ; i <= 100 ; i++ ){ if( i % 3 == 0 && i % 5 == 0 ){ System.out.println("fizzbuzz"); } else if( i % 3 == 0 ){ From fddb0e4613dd311c495086c92a51f4da0c0fb26c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Chocho?= <68519171+mchocho99@users.noreply.github.com> Date: Tue, 31 Oct 2023 16:04:46 -0300 Subject: [PATCH 0527/2103] Reto # 0 - Python --- .../python/mchocho99.py" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/mchocho99.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/mchocho99.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/mchocho99.py" new file mode 100644 index 0000000000..34815b2a84 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/mchocho99.py" @@ -0,0 +1,16 @@ +# Escribe un programa que muestre por consola (con un print) los +# números de 1 a 100 (ambos incluidos y con un salto de línea entre +# cada impresión), sustituyendo los siguientes: +# - Múltiplos de 3 por la palabra "fizz". +# - Múltiplos de 5 por la palabra "buzz". +# - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + +for i in range(1,101): + if (i % 3 == 0 and i % 5 == 0): + print("fizzbuzz") + elif (i % 3 == 0): + print("fizz") + elif (i % 5 == 0): + print("buzz") + else: + print(i) From ba2675c7ca344270b879e717560c0d8d42dfc790 Mon Sep 17 00:00:00 2001 From: Adrian01cst <149220355+Adrian01cst@users.noreply.github.com> Date: Tue, 31 Oct 2023 14:26:19 -0700 Subject: [PATCH 0528/2103] Add files via upload --- .../java/Adrian01cst.java" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/java/Adrian01cst.java" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/java/Adrian01cst.java" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/java/Adrian01cst.java" new file mode 100644 index 0000000000..5e4963d2e0 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/java/Adrian01cst.java" @@ -0,0 +1,49 @@ +/* + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + */ + +import java.util.HashMap;// Importing "Hashmap" pack. +import java.util.Scanner; + +public class Adrian01cst { + public static void main(String[] args) { + Scanner input = new Scanner(System.in); + + String text; + String new_text = ""; + + System.out.print("Type any text: "); + text = input.nextLine(); + + // Original text to character array. + char[] array_of_text; + array_of_text = text.toCharArray(); + + HashMap my_hash_map = new HashMap<>(); + // Adding items to "HashMap". + my_hash_map.put('A', "4"); my_hash_map.put('B', "I3"); my_hash_map.put('C',"["); my_hash_map.put('D', ")"); + my_hash_map.put('E', "3"); my_hash_map.put('F', "|="); my_hash_map.put('G', "&"); my_hash_map.put('H', "#"); + my_hash_map.put('I', "1"); my_hash_map.put('J', ",_|"); my_hash_map.put('K', ">|"); my_hash_map.put('L', "1"); + my_hash_map.put('M', "/\\/\\"); my_hash_map.put('N', "^/"); my_hash_map.put('O', "0"); my_hash_map.put('P', "|*"); + my_hash_map.put('Q', "(_,)"); my_hash_map.put('R', "I2"); my_hash_map.put('S', "5"); my_hash_map.put('T', "7"); + my_hash_map.put('U', "(_)"); my_hash_map.put('V', "\\/"); my_hash_map.put('W', "\\/\\/"); my_hash_map.put('X', "><"); + my_hash_map.put('Y', "j"); my_hash_map.put('Z', "2"); my_hash_map.put('0', "o"); my_hash_map.put('1', "L"); + my_hash_map.put('2', "R"); my_hash_map.put('3', "E"); my_hash_map.put('4', "A"); my_hash_map.put('5', "S"); + my_hash_map.put('6', "b"); my_hash_map.put('7', "T"); my_hash_map.put('8', "B"); my_hash_map.put('9', "g"); + + for(char i : array_of_text) { + char upper_char = Character.toUpperCase(i); + if(my_hash_map.containsKey(upper_char)) { + new_text += my_hash_map.get(upper_char); + } else { + new_text += i; + } + } + System.out.println("\n" + "The converted text is: " + new_text); + } +} \ No newline at end of file From 88048f29cca5020a936e79946910829aecd0fe23 Mon Sep 17 00:00:00 2001 From: Giovany Osorio <30839218+giovanyosorio@users.noreply.github.com> Date: Tue, 31 Oct 2023 23:30:24 +0000 Subject: [PATCH 0529/2103] Reto #14 - Javascript --- .../javascript/giovanyosorio.js" | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 "Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/javascript/giovanyosorio.js" diff --git "a/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/javascript/giovanyosorio.js" "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/javascript/giovanyosorio.js" new file mode 100644 index 0000000000..5f4f305461 --- /dev/null +++ "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/javascript/giovanyosorio.js" @@ -0,0 +1,40 @@ +/* + * Crea una función que reciba un número decimal y lo trasforme a Octal + * y Hexadecimal. + * - No está permitido usar funciones propias del lenguaje de programación que + * realicen esas operaciones directamente. + */ +let hexas = { + 10: 'A', + 11: 'B', + 12: 'C', + 13: 'D', + 14: 'E', + 15: 'F' +} +function decimalToOctal(number) { + let octal = ""; + let result = number; + while (result > 0) { + octal = (result % 8) + octal; + result = Math.floor(result / 8); + } + return octal; +} + +function decimalToHexadecimal(number) { + let hexadecimal = ""; + let result = number; + while (result > 0) { + let temp = result % 16; + if (temp > 9) { + temp = hexas[temp]; + } + hexadecimal = temp + hexadecimal; + result = Math.floor(result / 16); + } + return hexadecimal; + } + +console.log(decimalToOctal(10)); +console.log(decimalToHexadecimal(16852)); From fca8a678eeaf7765c9fb36970c0ab3858b5c9dac Mon Sep 17 00:00:00 2001 From: Jamer Rebolledo Date: Tue, 31 Oct 2023 22:11:42 -0500 Subject: [PATCH 0530/2103] =?UTF-8?q?=F0=9F=8E=83=20Soluci=C3=B3n=20Reto?= =?UTF-8?q?=2043,=20Python-Jupyter=20by=20@jamerrq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/jamerrq.ipynb" | 238 ++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jamerrq.ipynb" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jamerrq.ipynb" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jamerrq.ipynb" new file mode 100644 index 0000000000..7c0a243258 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jamerrq.ipynb" @@ -0,0 +1,238 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Simulador de clima\n", + "\n", + "## Parámetros iniciales (a definir o modificar por el usuario)\n", + "\n", + "- Temperatura inicial (en grados Celsius)\n", + "- Probabilidad de lluvia (en porcentaje)" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": {}, + "outputs": [], + "source": [ + "temperatura_inicial = 20\n", + "probabilidad_lluvia = 0.1 # 0 <= probabilidad_lluvia <= 1\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reglas\n", + "\n", + "En cada día que pasa tenemos que\n", + "\n", + "- 10% de probabilidad de que la temperatura aumente o disminuya en 2 grados\n", + "- Si la temperatura supera los 25 grados, la probabilidad de lluvia aumenta en\n", + " 20%\n", + "- Si la temperatura es menor a 5 grados, la probabilidad de lluvia disminuye en\n", + " 20%\n", + "- Si llueve, la temperatura disminuye en 1 grado" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Función\n", + "\n", + "La función recibe:\n", + "\n", + "- Número de días a simular\n", + "\n", + "Y devuelve (muestra):\n", + "\n", + "- Temperatura de cada día\n", + "- Si llovió o no\n", + "- Probabilidad de lluvia de cada día\n", + "- Número de días que llovió" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Algunas librerías útiles" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import random as rnd\n", + "from scipy import interpolate\n", + "import numpy as np\n" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": {}, + "outputs": [], + "source": [ + "def suavizador(x, y, kind='linear'):\n", + " f = interpolate.interp1d(x, y, kind=kind)\n", + " xnew = np.linspace(min(x), max(x), 100)\n", + " ynew = f(xnew)\n", + " return xnew, ynew\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Función principal (simulación)" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [], + "source": [ + "def simulador(numero_dias=30, verbose=False, min_prob=0):\n", + "\n", + " temperatura_actual = temperatura_inicial\n", + " temperaturas = [temperatura_actual]\n", + " dias = [0]\n", + " lluvias = [0] * numero_dias\n", + " probabilidad_actual = probabilidad_lluvia\n", + " probabilidades = [probabilidad_actual]\n", + "\n", + " for dia in range(1, numero_dias):\n", + " random = rnd.random()\n", + " # 10% de probabilidad de que la temperatura aumente\n", + " # o disminuya en 2 grados\n", + " if random < 0.1:\n", + " delta = rnd.choice([-2, 2])\n", + " temperatura_actual += delta\n", + " if verbose:\n", + " print(f'El día {dia} la temperatura cambió en {delta} grados')\n", + "\n", + " # Lluvia\n", + " random_lluvia = rnd.random()\n", + " if random_lluvia < probabilidad_actual:\n", + " temperatura_actual -= 1\n", + " lluvias[dia] = 1\n", + " if verbose:\n", + " print(f'El día {dia} llovió')\n", + "\n", + " # Si temperatura actual > 25\n", + " if temperatura_actual > 25:\n", + " probabilidad_actual = min(1, probabilidad_actual + 0.2)\n", + " if verbose:\n", + " print(f'El día {dia} la probabilidad de lluvia aumentó a {probabilidad_actual}')\n", + "\n", + " # Si temperatura actual < 5\n", + " if temperatura_actual < 5:\n", + " probabilidad_actual = max(0, probabilidad_actual - 0.2)\n", + " if verbose:\n", + " print(f'El día {dia} la probabilidad de lluvia disminuyó a {probabilidad_actual}')\n", + "\n", + " temperaturas.append(temperatura_actual)\n", + " dias.append(dia)\n", + " probabilidades.append(probabilidad_actual)\n", + "\n", + " return dias, temperaturas, lluvias, probabilidades\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Resultados" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "El día 5 la temperatura cambió en 2 grados\n", + "El día 9 llovió\n", + "El día 14 llovió\n", + "El día 20 llovió\n" + ] + }, + { + "data": { + "image/png": "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5hu1m29O1W4JCdFe9zR5HZSGDx/Opk2bmDRpkqe35oYbbsA0TYYOHcpVV13l7SFxOBzceeedHDlyhPfff5/k5GTPY02aNMFut7N9+3YuuOACz/Zt27YB0LJlS69f7+QJ6FXhdAbmxHW53AE7dm1gO5IOgCs52at2CPd281WotVtRk2ZEA8aO7QF9X6HWbtVBbeYbtZtv/NVuPq2j9K9//Yurr76apUuXcvToUZKTk7nwwgs5++yzvT6W0+lk/PjxbNq0ibfeeotGjRqVejwiIoJevXqxaNEiRo0a5dm+YMEC6tWr59WaTQAbN25k586dXH311V7XKtWjZLFJd526Qa5EaiNX02YAWHftDGodIhIafF6Zu2vXrn5Zm2jixIksXbqU+++/n4KCAtasWeN5rFWrVsTFxTF27FhuvPFGHnnkEQYNGsQvv/zChx9+yMSJE0utoTRgwABSU1OZM2cOALNmzWLPnj306NGDOnXqsHXrVl555RUaNmxYqYUqJTgs6cU9SrrPm/jC1az4ClnLvr3gcEBkZJArEpHazOegtHr1alauXElGRgZJSUn06NHDpx6l5cuXA8XrM/3R3Llz6dmzJ926dePll19mypQpfPLJJzRs2JBHHnmkTNhxuVy43Se62Zo3b86XX37JwoULyc3NJTk5mT59+nD33Xd7PbdJqo9nVW6toSQ+MFNSMGNiMfJyse7djatl62CXJCK1mNdBqaCggHvuuYevv/661FwfwzDo06cPU6dOJSoqqtLHW7JkSaX269OnD3369PHqWH379qVv376VrkVqBs993tSjJL4wDFzNmmP7bT3WnTsUlESkSnxamfvbb7/l7rvvZvHixaxdu5bFixczfvx4li9fXm7PkIg3dPsSqaqSeUqWnTuDWoeI1H5eB6WFCxdy55138te//pVGjRoRERFBo0aNuOOOO7jjjjv4/PPPA1GnhBFPj5KG3sRHnpvjanVuEakir4NSQUFBhXORzj77bBwOR5WLkvDmmaOkHiXxka58ExF/8ToodenShXXr1pX72Lp16+jUqVOVi5Iw5nZjZGQA6lES33l6lHapR0lEqsbrydyPPPIIt99+O7GxsQwcOJDExEQyMzOZP38+77//PjNmzAhEnRImjMwMjONXLqpHSXzlbtYMON6jZJpQxXtQikj48ukWJk6nk8cff5zHH38cq9WK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oCQiItXGceXVZOfnY//2a+w/rsS6b68nJOWN/zuFl15+6gOIVDMFJRERqT5WKwU3jqTgxuIrjy1792D/cQVGQQEF190Q5OJEylJQEhGRoHGf2RjHmY2DXYZIhTSZW0RERKQCCkoiIiIiFVBQEhEREamAgpKIiIhIBRSURERERCqgoCQiIiJSAQUlERERkQooKImIiIhUQEFJREREpAIKSiIiIiIVUFASERERqYCCkoiIiEgFFJREREREKmCYpmkGu4jayDRN3G7/N53VasHlcvv9uKFO7eYbtZtv1G7eU5v5Ru3mm4razWIxMAzDq2MpKImIiIhUQENvIiIiIhVQUBIRERGpgIKSiIiISAUUlEREREQqoKAkIiIiUgEFJREREZEKKCiJiIiIVEBBSURERKQCCkoiIiIiFVBQEhEREamAgpKIiIhIBRSURERERCqgoCQiIiJSAQWlGmLHjh3ceuutdO3alT/96U88/vjjFBQUBLusGmvevHm0bdu2zMfkyZODXVqNsmvXLh599FEGDx5Mhw4dGDhwYLn7LVu2jCuvvJJOnToxYMAA3n777WqutGapTLtNmDCh3HPwm2++CULFwbdo0SLGjBlDnz596Nq1K4MGDeKdd97B7XaX2k/nWmmVaTeda6V9++233HjjjfTq1YuOHTvSr18/Jk2aRHZ2dqn9/HWu2fxRtFRNVlYWI0eOJDU1lRdeeIGjR48yadIkMjIy9Iv/NGbOnEl8fLzn6wYNGgSxmppn69atLFu2jC5duuB2uzFNs8w+q1evZsyYMQwePJgJEybwyy+/8PjjjxMREcHQoUODUHXwVabdABo3blzme7Rly5bVUWKNM3v2bFJTU3nggQeoW7cuK1eu5IknnmDPnj08+OCDgM618lSm3UDn2skyMzPp1q0bI0eOJCEhga1bt/Liiy+ydetWXn/9dcDP55opQTdjxgyzS5cuZnp6umfbZ599ZrZp08bctm1bECuruT766COzTZs2pdpMynK5XJ7PH3zwQfPyyy8vs8+tt95qXnPNNaW2PfLII+Z5551X6vnhpDLtVtH2cFXe9+KTTz5pdurUyXQ4HKZp6lwrT2XaTefa6b3//vtmmzZtzAMHDpim6d9zTUNvNcA333zDn/70J+rUqePZdvHFFxMREcGyZcuCWJnUdhbLqb/FCwsLWbFiBZdffnmp7YMGDeLw4cP89ttvgSyvxjpdu0lZJ//8KtG+fXscDgcZGRk61ypwunaTyklKSgLA6XT6/VzTT4MaIC0trUwXakREBE2aNCEtLS1IVdUOAwcOpH379vTr148ZM2bgcrmCXVKtsnv3boqKimjRokWp7a1atQLQ+Xcau3fv5txzz6Vjx44MGTKEr776Ktgl1SirVq0iKSmJunXr6lzzwsntVkLnWlkulwuHw8GGDRuYNm0aF110EY0aNfL7uaY5SjVAVlYWCQkJZbYnJCSQmZkZhIpqvnr16vG3v/2NLl26YBgGS5YsYerUqRw8eJBHH3002OXVGiXn1x/Pv5Kvdf5VrH379nTq1IlWrVqRnZ3Nu+++y9ixY3n++ee55JJLgl1e0K1bt4558+YxduxYrFarzrVK+mO7gc61ilx00UUcPHgQgPPPP58pU6YA/v+5pqBUg5mmiWEYwS6jRjr//PM5//zzPV/37t2byMhI5syZwx133EH9+vWDWF3tU9F5pvOvYiNHjiz1dd++fRk2bBgvvPBCWP/yAjh8+DDjxo2jU6dOjB49utRjOtcqVlG76Vwr36uvvkpeXh7btm3j5Zdf5o477mD27Nmex/11rmnorQZISEggKyurzPbs7Oxye5qkfJdeeikul4uNGzcGu5RaIzExESj7F1bJ+ajzr/IsFgt/+ctfSEtLC+ulPbKzsxk9ejRRUVFMnz4du90O6Fw7nYrarTw614q1a9eOs88+m2uvvZaXXnqJlStX8r///c/v55qCUg3QsmXLMmOmhYWF7N69O2wv/5Tq0aRJE+x2O9u3by+1fdu2bUD4Xn7sK7OCZQTChcPh4M477+TIkSPMnDmT5ORkz2M61yp2qnarSLifa3/Uvn17rFYru3fv9vu5pqBUA1xwwQWsWLGCY8eOebb973//o7CwkD59+gSxstpl4cKFWK1WOnToEOxSao2IiAh69erFokWLSm1fsGAB9erVU1t6we1289///pfWrVsTFRUV7HKqndPpZPz48WzatImZM2fSqFGjUo/rXCvf6dqtPOF+rpVn9erVuFwuzjzzTL+fa5qjVAMMGzaMt956izFjxjBmzBjS09N56qmnGDRoUFj/lXUqt956K7169aJNmzYALF68mA8++ICbbrqJevXqBbm6miM/P9+zxMS+ffvIycnhiy++AKBHjx7UqVOHsWPHcuONN/LII48waNAgfvnlFz788EMmTpwYtpfJn67d8vPzmTBhAgMHDqRJkyZkZmby7rvvsn79el588cVglh40EydOZOnSpdx///0UFBSwZs0az2OtWrUiLi5O51o5TtdumZmZOtf+4K677qJjx460bduWqKgoT8hs27Yt/fv3B/DruWaY6r+rEXbs2MHjjz/OqlWriIqKYuDAgdx33336a6ECjz/+ON9++y0HDhzA7XbTrFkzhg4dyogRIzQp9CR79+6lX79+5T42d+5cevbsCRQv9T9lyhTS0tJo2LAhN998M8OHD6/OUmuU07Vb27Zteeihh9iwYQNHjx7FbrfTsWNHbr/99lIXGYSTvn37sm/fvnIf07lWsdO1m861sl599VUWLlzI7t27MU2TRo0aMWDAAG699Vbi4uI8+/nrXFNQEhEREalAePZ1ioiIiFSCgpKIiIhIBRSURERERCqgoCQiIiJSAQUlERERkQooKImIiIhUQEFJRKQcR44coXfv3kyaNCnYpYhIEGkdJREJefPmzeOhhx7yfB0REUFCQgItWrSgd+/eXHPNNdStW9fzuNvt5uabbyYpKYmpU6dqEVORMKZbmIhI2Jg0aRItWrTA6XSSnp7OqlWreO2113j99df597//zZ///GcAXnjhBVwuF88++6xCkkiYU4+SiIS8kh6l//znP3Tq1KnUY/v37+eGG24gKyuLL7/8kpSUlCBVKSI1keYoiUhYS01N5cEHHyQ3N5f33nsPgBdffJG2bduW2m/hwoXccsst9O7dm86dO3PppZcyefJk8vLyglG2iFQTDb2JSNjr06cPVquVn3/+ucJ9du7cyQUXXMDIkSOJjo5m+/btvPbaa6xdu5a5c+dWY7UiUp0UlEQk7MXExJCcnMyhQ4cq3GfMmDGez03T5Oyzz6Zly5bceOONbNq0iXbt2lVHqSJSzRSUREQoDj+nsmfPHqZOncqKFStIT08vtf/27dsVlERClIKSiIS9vLw8MjIyaNOmTbmP5+bmcsMNNxAZGcndd99Ns2bNiIqK4sCBA9x1110UFBRUc8UiUl0UlEQk7H399de4XC569OhR7uMrVqzg0KFDvPnmm6X2yc7Orq4SRSRIdNWbiIS1/fv388wzzxAfH8+wYcPK3adkLaWIiIhS20uukhOR0KUeJREJG1u3bsXlcuF0Ojl69Cg///wz8+bNw2q18tJLL1GnTp1yn9etWzcSExP5f//v/3HXXXdhs9mYP38+mzdvruZ3ICLVTUFJRMJGyW1M7HY7CQkJtGzZktGjRzN06NAKQxJAcnIyM2bM4Omnn+b+++8nOjqafv368e9//5urrrqqusoXkSDQytwiIiIiFdAcJREREZEKKCiJiIiIVEBBSURERKQCCkoiIiIiFVBQEhEREamAgpKIiIhIBRSURERERCqgoCQiIiJSAQUlERERkQooKImIiIhUQEFJREREpAIKSiIiIiIV+P8iYpgxrwN/MAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.set_theme(style=\"darkgrid\")\n", + "\n", + "dias, temperaturas, lluvias, probabilidades = simulador(verbose=True)\n", + "\n", + "xnew, ynew = suavizador(dias, temperaturas, kind='cubic')\n", + "data = {'Día': xnew, 'Temperatura': ynew}\n", + "df = pd.DataFrame(data)\n", + "sns.lineplot(data=df, x='Día', y='Temperatura', color='red')\n", + "\n", + "\n", + "# data = {'Día': dias, 'Temperatura': temperaturas, 'Lluvia': lluvias, 'Probabilidad': probabilidades}\n", + "# df = pd.DataFrame(data)\n", + "# sns.lineplot(data=df, x='Día', y='Temperatura', color='red')\n", + "\n", + "# Marcar los días de lluvia\n", + "for dia, lluvia in enumerate(lluvias):\n", + " if lluvia:\n", + " plt.plot(dia, temperaturas[dia], 'bo')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Referencias\n", + "\n", + "- [Seaborn Lineplot](https://seaborn.pydata.org/generated/seaborn.lineplot.html)\n", + "\n", + "- [Scipy\n", + " Interpolate](https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From b93554efe53d66841e47583ce0c11e492b60c6eb Mon Sep 17 00:00:00 2001 From: Jamer Rebolledo Date: Tue, 31 Oct 2023 22:17:42 -0500 Subject: [PATCH 0531/2103] =?UTF-8?q?=F0=9F=8E=83=20Soluci=C3=B3n=20Reto?= =?UTF-8?q?=2043,=20Python-Jupyter=20by=20@jamerrq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/jamerrq.ipynb" | 58 +++++++++++++++---- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jamerrq.ipynb" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jamerrq.ipynb" index 7c0a243258..b58efce21d 100644 --- "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jamerrq.ipynb" +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jamerrq.ipynb" @@ -14,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": 116, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -65,19 +65,21 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import random as rnd\n", "from scipy import interpolate\n", - "import numpy as np\n" + "import numpy as np\n", + "import pandas as pd\n", + "import seaborn as sns\n" ] }, { "cell_type": "code", - "execution_count": 118, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -97,7 +99,7 @@ }, { "cell_type": "code", - "execution_count": 119, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -156,22 +158,24 @@ }, { "cell_type": "code", - "execution_count": 120, + "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "El día 5 la temperatura cambió en 2 grados\n", - "El día 9 llovió\n", - "El día 14 llovió\n", - "El día 20 llovió\n" + "El día 1 llovió\n", + "El día 8 la temperatura cambió en 2 grados\n", + "El día 8 llovió\n", + "El día 11 llovió\n", + "El día 16 llovió\n", + "El día 24 la temperatura cambió en -2 grados\n" ] }, { "data": { - "image/png": "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5hu1m29O1W4JCdFe9zR5HZSGDx/Opk2bmDRpkqe35oYbbsA0TYYOHcpVV13l7SFxOBzceeedHDlyhPfff5/k5GTPY02aNMFut7N9+3YuuOACz/Zt27YB0LJlS69f7+QJ6FXhdAbmxHW53AE7dm1gO5IOgCs52at2CPd281WotVtRk2ZEA8aO7QF9X6HWbtVBbeYbtZtv/NVuPq2j9K9//Yurr76apUuXcvToUZKTk7nwwgs5++yzvT6W0+lk/PjxbNq0ibfeeotGjRqVejwiIoJevXqxaNEiRo0a5dm+YMEC6tWr59WaTQAbN25k586dXH311V7XKtWjZLFJd526Qa5EaiNX02YAWHftDGodIhIafF6Zu2vXrn5Zm2jixIksXbqU+++/n4KCAtasWeN5rFWrVsTFxTF27FhuvPFGHnnkEQYNGsQvv/zChx9+yMSJE0utoTRgwABSU1OZM2cOALNmzWLPnj306NGDOnXqsHXrVl555RUaNmxYqYUqJTgs6cU9SrrPm/jC1az4ClnLvr3gcEBkZJArEpHazOegtHr1alauXElGRgZJSUn06NHDpx6l5cuXA8XrM/3R3Llz6dmzJ926dePll19mypQpfPLJJzRs2JBHHnmkTNhxuVy43Se62Zo3b86XX37JwoULyc3NJTk5mT59+nD33Xd7PbdJqo9nVW6toSQ+MFNSMGNiMfJyse7djatl62CXJCK1mNdBqaCggHvuuYevv/661FwfwzDo06cPU6dOJSoqqtLHW7JkSaX269OnD3369PHqWH379qVv376VrkVqBs993tSjJL4wDFzNmmP7bT3WnTsUlESkSnxamfvbb7/l7rvvZvHixaxdu5bFixczfvx4li9fXm7PkIg3dPsSqaqSeUqWnTuDWoeI1H5eB6WFCxdy55138te//pVGjRoRERFBo0aNuOOOO7jjjjv4/PPPA1GnhBFPj5KG3sRHnpvjanVuEakir4NSQUFBhXORzj77bBwOR5WLkvDmmaOkHiXxka58ExF/8ToodenShXXr1pX72Lp16+jUqVOVi5Iw5nZjZGQA6lES33l6lHapR0lEqsbrydyPPPIIt99+O7GxsQwcOJDExEQyMzOZP38+77//PjNmzAhEnRImjMwMjONXLqpHSXzlbtYMON6jZJpQxXtQikj48ukWJk6nk8cff5zHH38cq9WK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oCQiItXGceXVZOfnY//2a+w/rsS6b68nJOWN/zuFl15+6gOIVDMFJRERqT5WKwU3jqTgxuIrjy1792D/cQVGQQEF190Q5OJEylJQEhGRoHGf2RjHmY2DXYZIhTSZW0RERKQCCkoiIiIiFVBQEhEREamAgpKIiIhIBRSURERERCqgoCQiIiJSAQUlERERkQooKImIiIhUQEFJREREpAIKSiIiIiIVUFASERERqYCCkoiIiEgFFJREREREKmCYpmkGu4jayDRN3G7/N53VasHlcvv9uKFO7eYbtZtv1G7eU5v5Ru3mm4razWIxMAzDq2MpKImIiIhUQENvIiIiIhVQUBIRERGpgIKSiIiISAUUlEREREQqoKAkIiIiUgEFJREREZEKKCiJiIiIVEBBSURERKQCCkoiIiIiFVBQEhEREamAgpKIiIhIBRSURERERCqgoCQiIiJSAQWlGmLHjh3ceuutdO3alT/96U88/vjjFBQUBLusGmvevHm0bdu2zMfkyZODXVqNsmvXLh599FEGDx5Mhw4dGDhwYLn7LVu2jCuvvJJOnToxYMAA3n777WqutGapTLtNmDCh3HPwm2++CULFwbdo0SLGjBlDnz596Nq1K4MGDeKdd97B7XaX2k/nWmmVaTeda6V9++233HjjjfTq1YuOHTvSr18/Jk2aRHZ2dqn9/HWu2fxRtFRNVlYWI0eOJDU1lRdeeIGjR48yadIkMjIy9Iv/NGbOnEl8fLzn6wYNGgSxmppn69atLFu2jC5duuB2uzFNs8w+q1evZsyYMQwePJgJEybwyy+/8PjjjxMREcHQoUODUHXwVabdABo3blzme7Rly5bVUWKNM3v2bFJTU3nggQeoW7cuK1eu5IknnmDPnj08+OCDgM618lSm3UDn2skyMzPp1q0bI0eOJCEhga1bt/Liiy+ydetWXn/9dcDP55opQTdjxgyzS5cuZnp6umfbZ599ZrZp08bctm1bECuruT766COzTZs2pdpMynK5XJ7PH3zwQfPyyy8vs8+tt95qXnPNNaW2PfLII+Z5551X6vnhpDLtVtH2cFXe9+KTTz5pdurUyXQ4HKZp6lwrT2XaTefa6b3//vtmmzZtzAMHDpim6d9zTUNvNcA333zDn/70J+rUqePZdvHFFxMREcGyZcuCWJnUdhbLqb/FCwsLWbFiBZdffnmp7YMGDeLw4cP89ttvgSyvxjpdu0lZJ//8KtG+fXscDgcZGRk61ypwunaTyklKSgLA6XT6/VzTT4MaIC0trUwXakREBE2aNCEtLS1IVdUOAwcOpH379vTr148ZM2bgcrmCXVKtsnv3boqKimjRokWp7a1atQLQ+Xcau3fv5txzz6Vjx44MGTKEr776Ktgl1SirVq0iKSmJunXr6lzzwsntVkLnWlkulwuHw8GGDRuYNm0aF110EY0aNfL7uaY5SjVAVlYWCQkJZbYnJCSQmZkZhIpqvnr16vG3v/2NLl26YBgGS5YsYerUqRw8eJBHH3002OXVGiXn1x/Pv5Kvdf5VrH379nTq1IlWrVqRnZ3Nu+++y9ixY3n++ee55JJLgl1e0K1bt4558+YxduxYrFarzrVK+mO7gc61ilx00UUcPHgQgPPPP58pU6YA/v+5pqBUg5mmiWEYwS6jRjr//PM5//zzPV/37t2byMhI5syZwx133EH9+vWDWF3tU9F5pvOvYiNHjiz1dd++fRk2bBgvvPBCWP/yAjh8+DDjxo2jU6dOjB49utRjOtcqVlG76Vwr36uvvkpeXh7btm3j5Zdf5o477mD27Nmex/11rmnorQZISEggKyurzPbs7Oxye5qkfJdeeikul4uNGzcGu5RaIzExESj7F1bJ+ajzr/IsFgt/+ctfSEtLC+ulPbKzsxk9ejRRUVFMnz4du90O6Fw7nYrarTw614q1a9eOs88+m2uvvZaXXnqJlStX8r///c/v55qCUg3QsmXLMmOmhYWF7N69O2wv/5Tq0aRJE+x2O9u3by+1fdu2bUD4Xn7sK7OCZQTChcPh4M477+TIkSPMnDmT5ORkz2M61yp2qnarSLifa3/Uvn17rFYru3fv9vu5pqBUA1xwwQWsWLGCY8eOebb973//o7CwkD59+gSxstpl4cKFWK1WOnToEOxSao2IiAh69erFokWLSm1fsGAB9erVU1t6we1289///pfWrVsTFRUV7HKqndPpZPz48WzatImZM2fSqFGjUo/rXCvf6dqtPOF+rpVn9erVuFwuzjzzTL+fa5qjVAMMGzaMt956izFjxjBmzBjS09N56qmnGDRoUFj/lXUqt956K7169aJNmzYALF68mA8++ICbbrqJevXqBbm6miM/P9+zxMS+ffvIycnhiy++AKBHjx7UqVOHsWPHcuONN/LII48waNAgfvnlFz788EMmTpwYtpfJn67d8vPzmTBhAgMHDqRJkyZkZmby7rvvsn79el588cVglh40EydOZOnSpdx///0UFBSwZs0az2OtWrUiLi5O51o5TtdumZmZOtf+4K677qJjx460bduWqKgoT8hs27Yt/fv3B/DruWaY6r+rEXbs2MHjjz/OqlWriIqKYuDAgdx33336a6ECjz/+ON9++y0HDhzA7XbTrFkzhg4dyogRIzQp9CR79+6lX79+5T42d+5cevbsCRQv9T9lyhTS0tJo2LAhN998M8OHD6/OUmuU07Vb27Zteeihh9iwYQNHjx7FbrfTsWNHbr/99lIXGYSTvn37sm/fvnIf07lWsdO1m861sl599VUWLlzI7t27MU2TRo0aMWDAAG699Vbi4uI8+/nrXFNQEhEREalAePZ1ioiIiFSCgpKIiIhIBRSURERERCqgoCQiIiJSAQUlERERkQooKImIiIhUQEFJRKQcR44coXfv3kyaNCnYpYhIEGkdJREJefPmzeOhhx7yfB0REUFCQgItWrSgd+/eXHPNNdStW9fzuNvt5uabbyYpKYmpU6dqEVORMKZbmIhI2Jg0aRItWrTA6XSSnp7OqlWreO2113j99df597//zZ///GcAXnjhBVwuF88++6xCkkiYU4+SiIS8kh6l//znP3Tq1KnUY/v37+eGG24gKyuLL7/8kpSUlCBVKSI1keYoiUhYS01N5cEHHyQ3N5f33nsPgBdffJG2bduW2m/hwoXccsst9O7dm86dO3PppZcyefJk8vLyglG2iFQTDb2JSNjr06cPVquVn3/+ucJ9du7cyQUXXMDIkSOJjo5m+/btvPbaa6xdu5a5c+dWY7UiUp0UlEQk7MXExJCcnMyhQ4cq3GfMmDGez03T5Oyzz6Zly5bceOONbNq0iXbt2lVHqSJSzRSUREQoDj+nsmfPHqZOncqKFStIT08vtf/27dsVlERClIKSiIS9vLw8MjIyaNOmTbmP5+bmcsMNNxAZGcndd99Ns2bNiIqK4sCBA9x1110UFBRUc8UiUl0UlEQk7H399de4XC569OhR7uMrVqzg0KFDvPnmm6X2yc7Orq4SRSRIdNWbiIS1/fv388wzzxAfH8+wYcPK3adkLaWIiIhS20uukhOR0KUeJREJG1u3bsXlcuF0Ojl69Cg///wz8+bNw2q18tJLL1GnTp1yn9etWzcSExP5f//v/3HXXXdhs9mYP38+mzdvruZ3ICLVTUFJRMJGyW1M7HY7CQkJtGzZktGjRzN06NAKQxJAcnIyM2bM4Omnn+b+++8nOjqafv368e9//5urrrqqusoXkSDQytwiIiIiFdAcJREREZEKKCiJiIiIVEBBSURERKQCCkoiIiIiFVBQEhEREamAgpKIiIhIBRSURERERCqgoCQiIiJSAQUlERERkQooKImIiIhUQEFJREREpAIKSiIiIiIV+P8iYpgxrwN/MAAAAABJRU5ErkJggg==", + "image/png": "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zZ49m2HDhgHB5dcfe+wxNmzYQJs2bbjuuuu48sorG7PUJuVo7darVy/+8Ic/8OOPP5KTk4PX66V///7cdNNNNQbSx5JRo0axY8eOWp/TtXZ4R2s3XWu1e/7555k7dy5bt27Ftm3at2/P6aefzg033EBycnL1ceG63hR4REREJOrFZv+jiIiIxBQFHhEREYl6CjwiIiIS9RR4REREJOop8IiIiEjUU+ARERGRqKfAIyJRa9++fZx88sk88MADTpciIg7TOjwi0iy88847/OEPf6j+3Ofz4ff76datGyeffDIXXXQRLVq0qH7esiyuu+460tLSeOKJJ7SQpUiM09YSItKsPPDAA3Tr1o1AIEB2djZLlixh5syZvPjiizz++OOcdNJJADz11FOYpskjjzyisCMi6uERkeahqofnrbfeYsCAATWe27lzJ1dccQX5+fl8+umntGzZ0qEqRaSp0hgeEWn22rVrx1133UVRURFvvPEGAE8//TS9evWqcdzcuXO5/vrrOfnkkxk4cCBnnXUWjz76KMXFxU6ULSKNSLe0RCQqjBw5ErfbzXfffXfYYzZv3swpp5zCtddeS0JCAhs3bmTmzJksX76c2bNnN2K1ItLYFHhEJCokJiaSnp7Onj17DnvMrbfeWv1327Y59thj6d69O1dddRVr1qyhd+/ejVGqiDhAgUdEosbRhiRu27aNJ554gsWLF5OdnV3j+I0bNyrwiEQxBR4RiQrFxcXs37+fnj171vp8UVERV1xxBXFxcfzmN7+hS5cuxMfHs2vXLiZNmkRpaWkjVywijUmBR0SiwsKFCzFNk6FDh9b6/OLFi9mzZw//+Mc/ahxTUFDQWCWKiIM0S0tEmr2dO3fy8MMPk5KSwmWXXVbrMVVr8fh8vhqPV83qEpHoph4eEWlWsrKyME2TQCBATk4O3333He+88w5ut5tnnnmGjIyMWr9uyJAhpKam8uc//5lJkybh8Xj44IMPWLt2bSO/AxFxggKPiDQrVdtLeL1e/H4/3bt358Ybb+Tiiy8+bNgBSE9PZ8aMGTz00ENMmTKFhIQERo8ezeOPP87555/fWOWLiEO00rKIiIhEPY3hERERkainwCMiIiJRT4FHREREop4Cj4iIiEQ9BR4RERGJego8IiIiEvUUeERERCTqKfCIiIhI1FPgERERkainwCMiIiJRT4FHREREop4Cj4iIiES9/w8k6XtFYylcEgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -201,6 +205,38 @@ " plt.plot(dia, temperaturas[dia], 'bo')\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Estadísticas" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hubo 4 días de lluvia\n", + "La temperatura máxima fue 20 grados\n", + "La temperatura mínima fue 16 grados\n" + ] + } + ], + "source": [ + "dias_lluvia = sum(lluvias)\n", + "max_temperatura = max(temperaturas)\n", + "min_temperatura = min(temperaturas)\n", + "\n", + "print(f'Hubo {dias_lluvia} días de lluvia')\n", + "print(f'La temperatura máxima fue {max_temperatura} grados')\n", + "print(f'La temperatura mínima fue {min_temperatura} grados')\n" + ] + }, { "cell_type": "markdown", "metadata": {}, From d46ed276567fd83fa11505870677399aa06b186b Mon Sep 17 00:00:00 2001 From: jcdm60 Date: Tue, 31 Oct 2023 23:25:07 -0400 Subject: [PATCH 0532/2103] Reto #43 - Python --- .../python/jcdm60.py" | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jcdm60.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jcdm60.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jcdm60.py" new file mode 100644 index 0000000000..3d8ababbd8 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jcdm60.py" @@ -0,0 +1,82 @@ +# Reto #43: Simulador de clima +#### Dificultad: Fácil | Publicación: 30/10/23 | Corrección: 13/11/23 + +## Enunciado + + +# +# 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. +# + +import random + +class WeatherSimulator: + def __init__(self, initial_temperature, prediction_days): + self.temperature = initial_temperature + self.prob_rain = 30 # Probabilidad inicial de lluvia (se puede ajustar) + self.max_temperature = float('-inf') # Inicializar con un valor negativo + self.min_temperature = self.temperature + self.rainy_days = 0 + self.prediction_days = prediction_days + + def simulate_conditions(self): + for day in range(1, self.prediction_days + 1): + # Simular cambios en la temperatura + temperature_change = random.choice([-2, 0, 2]) + + # Ajustar la probabilidad de lluvia en función de la temperatura actual + if self.temperature > 25: + self.prob_rain += 20 + + if self.temperature < 5: + self.prob_rain -= 20 + + # Simular lluvia + is_rain = random.randint(0, 100) < self.prob_rain + + # Actualizar la temperatura + self.temperature += temperature_change + + # Si llueve (100%), disminuir la temperatura en 1 grado + if is_rain: + temperature_change -= 1 + + # Si llueve, incrementar el contador de días de lluvia + if is_rain: + self.rainy_days += 1 + + # Actualizar la temperatura máxima y mínima con estructuras condicionales + if self.temperature > self.max_temperature: + self.max_temperature = self.temperature + if self.temperature < self.min_temperature: + self.min_temperature = self.temperature + + print(f"Dia {day}: Temperatura: {self.temperature}°C, Lluvia: {'Si' if is_rain else 'No'}") + + print(f"Temperatura máxima: {self.max_temperature}°C") + print(f"Temperatura mínima: {self.min_temperature}°C") + print(f"Dias con lluvia: {self.rainy_days}") + +if __name__ == "__main__": + initial_temp = float(input("Temperatura inicial (°C): ")) + prediction_days = int(input("Número de dias de predicción: ")) + + simulator = WeatherSimulator(initial_temp, prediction_days) + simulator.simulate_conditions() + + + + + From fbb9fd6d50546b543cd5237412b735560090a75c Mon Sep 17 00:00:00 2001 From: mrf1989 Date: Wed, 1 Nov 2023 11:12:42 +0100 Subject: [PATCH 0533/2103] Reto #43 - PHP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mejora la predicción de lluvia en base a la probabilidad diaria --- .../php/mrf1989.php" | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/php/mrf1989.php" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/php/mrf1989.php" index 9d475220cb..39cbd214c8 100644 --- "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/php/mrf1989.php" +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/php/mrf1989.php" @@ -7,13 +7,16 @@ function predecir_clima(int $dias, int $tmp_inicial, int $p_lluvia_inicial): voi $dias_lluviosos = 0; $tmp_diarias = array($tmp_inicial); + echo "Hace {$tmp} grados actualmente, con {$p_lluvia}% de probabilidad de lluvia.\n"; + echo "Predicciones para los {$dias} días siguientes:\n\n"; + for ($i = 1; $i <= $dias; $i++) { - echo "Día {$i}\n"; + echo "- Día {$i}\n"; echo "La probabilidad de lluvia es del {$p_lluvia}%\n"; - $cambio = rand(0, 100); + $random = rand(0, 100); - if ($cambio <= 10) { + if ($random <= 10) { $subida = rand(0, 1); if ($subida) { @@ -26,16 +29,18 @@ function predecir_clima(int $dias, int $tmp_inicial, int $p_lluvia_inicial): voi echo "La temperatura es de {$tmp} grados.\n"; array_push($tmp_diarias, $tmp); - if ($p_lluvia == 100) { + if ($random <= $p_lluvia) { + echo "Es una jornada de lluvias.\n"; + $tmp -= 1; $dias_lluviosos++; } + echo "\n"; if ($tmp > 25) { $p_lluvia += 20; if ($p_lluvia > 100) { $p_lluvia = 100; - $tmp -= 1; } } else if ($tmp < 5) { $p_lluvia -= 20; @@ -46,9 +51,9 @@ function predecir_clima(int $dias, int $tmp_inicial, int $p_lluvia_inicial): voi } echo "RESUMEN:\n"; + echo "- Temperatura máxima: " . max($tmp_diarias) . " grados.\n"; + echo "- Tempratura mínima: " . min($tmp_diarias) . " grados.\n"; echo "- Días lluviosos: {$dias_lluviosos}.\n"; - echo "Temperatura máxima: " . max($tmp_diarias) . " grados.\n"; - echo "Tempratura mínima: " . min($tmp_diarias) . " grados.\n"; } -predecir_clima(24, 24, 20); +predecir_clima(10, 24, 30); From f56f6b5f5e5d4f33928c2aef2d2305b6a8de3f24 Mon Sep 17 00:00:00 2001 From: blfuentes Date: Wed, 1 Nov 2023 13:14:47 +0100 Subject: [PATCH 0534/2103] Reto #41 - F# --- .../f#/blfuentes.fsx" | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/f#/blfuentes.fsx" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/f#/blfuentes.fsx" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/f#/blfuentes.fsx" new file mode 100644 index 0000000000..f3c821f1d7 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/f#/blfuentes.fsx" @@ -0,0 +1,51 @@ +open System + +type ClimaData = { + Temperature: int + Rain: float +} + +let getRain (currentRain: float) (temperature: int) = + let rainPerc = + match temperature with + | t when t < 5 -> currentRain * 0.8 + | t when t > 25 -> currentRain * 1.2 + | _ -> currentRain + match rainPerc with + | r when r < 0.0 -> 0.0 + | r when r > 100.0 -> 100.0 + | _ -> rainPerc + +let rec getClimaData (remainingDays: int) (currentDay: ClimaData) (climaCollection: ClimaData list) = + if remainingDays = 0 then + climaCollection + else + // temperatura final base de este día + let endDayTemperature = + if (Random().Next(1, 10) = 5) then + let tmpTemperature = + if (Random().Next(1, 10) > 5) then + currentDay.Temperature + 2 + else + currentDay.Temperature - 2 + tmpTemperature + else + currentDay.Temperature + + // calcular la prob de lluvia del día siguiente con la temperatura del día actual + let nextDayRain = getRain currentDay.Rain endDayTemperature + + // clima del día actual para añadir a la lista + let clima = { Temperature = (if currentDay.Rain = 100.0 then (endDayTemperature - 1) else endDayTemperature); Rain = currentDay.Rain } + + // clima de previsión del día siguiente + let nextClima = { Temperature = clima.Temperature; Rain = nextDayRain } + + getClimaData (remainingDays - 1) nextClima (climaCollection @ [clima]) + +let initialDay:ClimaData = { Temperature = 22; Rain = 70.0 } +let climas = getClimaData 365 initialDay [] + +let daysofRain = climas |> List.filter(fun c -> c.Rain = 100.0) |> List.length +let maxTemperature = climas |> List.maxBy(fun c -> c.Temperature) |> fun c -> c.Temperature +let minTemperature = climas |> List.minBy(fun c -> c.Temperature) |> fun c -> c.Temperature \ No newline at end of file From 786554f798e4db37beb2fa15165e74c6e18759c1 Mon Sep 17 00:00:00 2001 From: deathiwng Date: Wed, 1 Nov 2023 15:39:28 +0100 Subject: [PATCH 0535/2103] Reto #43 - C# --- .../c#/deathwing696.cs" | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/c#/deathwing696.cs" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/c#/deathwing696.cs" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/c#/deathwing696.cs" new file mode 100644 index 0000000000..6875dc2fc4 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/c#/deathwing696.cs" @@ -0,0 +1,109 @@ +/* + * Crea una funcin que simule las condiciones climticas (temperatura y probabilidad de lluvia) + * de un lugar ficticio al pasar un nmero concreto de das segn estas reglas: + * - La temperatura inicial y el % de probabilidad de lluvia lo define el usuario. + * - Cada da 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 da + * siguiente aumenta en un 20%. + * - Si la temperatura baja de 5 grados, la probabilidad de lluvia al da + * siguiente disminuya en un 20%. + * - Si llueve (100%), la temperatura del da siguiente disminuye en 1 grado. + * - La funcin recibe el nmero de das de la prediccin y muestra la temperatura + * y si llueve durante todos esos das. + * - Tambin mostrar la temperatura mxima y mnima de ese periodo y cuntos das va a llover. + */ + +using System; + +namespace reto_43 +{ + public class Reto43 + { + static void Main(string[] args) + { + string cadena; + + Console.Write("De cuantos das quieres la prediccin?"); + cadena = Console.ReadLine(); + + if (Int32.TryParse(cadena.Trim(), out int num_dias)) + { + Clima(num_dias); + } + + Console.ReadKey(); + } + + private static void Clima(int num_dias) + { + int temperatura, prob_lluvia; + string cadena; + + Console.Write("Introduce la temperatura:"); + cadena = Console.ReadLine(); + + if (Int32.TryParse(cadena.Trim(),out temperatura)) + { + Console.Write("Introduce la la probabilidad de lluvia:"); + cadena = Console.ReadLine(); + + if (Int32.TryParse(cadena.Trim(),out prob_lluvia)) + { + Random random = new Random(); + int temperatura_maxima = 0, temperatura_minima = 100, dias_lloviendo = 0; + + Console.WriteLine($"Temperatura: {temperatura}"); + Console.WriteLine($"Probabilidad de lluvia: {prob_lluvia}"); + + for (int i = 0; i < num_dias; i++) + { + if (random.Next(1, 10) == 1) + { + if (random.Next(0, 1) == 0) + temperatura += 2; + else + temperatura -= 2; + } + + if (temperatura > 25) + { + if (prob_lluvia <= 80) + prob_lluvia += 20; + else + prob_lluvia = 100; + } + + if (temperatura < 5) + { + if (prob_lluvia <= 20) + prob_lluvia -= 20; + else + prob_lluvia = 0; + } + + if (prob_lluvia == 100) + temperatura--; + + if (temperatura_maxima < temperatura) + temperatura_maxima = temperatura; + + if (temperatura_minima > temperatura) + temperatura_minima = temperatura; + + if (prob_lluvia == 100) + dias_lloviendo++; + + Console.WriteLine($"Da {i + 1}:"); + + Console.WriteLine($"Temperatura: {temperatura}"); + Console.WriteLine($"Probabilidad de lluvia: {prob_lluvia}"); + } + + Console.WriteLine($"La temperatura mxima ha sido de {temperatura_maxima} grados y la mnima de {temperatura_minima} grados"); + Console.WriteLine($"Va a llover {dias_lloviendo} das"); + } + } + } + } +} \ No newline at end of file From 3a9a0705e47b1cc2de3ad3d73e57549dfec6d81e Mon Sep 17 00:00:00 2001 From: Patricio Date: Wed, 1 Nov 2023 15:20:14 -0300 Subject: [PATCH 0536/2103] Reto #1 - python --- .../python/patotal.py" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/patotal.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/patotal.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/patotal.py" new file mode 100644 index 0000000000..8338ac20a6 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/patotal.py" @@ -0,0 +1,23 @@ +# Reto #0 FIZZ BUZZ +""" +Escribe un programa que muestre por consola (con un print) los +números de 1 a 100 (ambos incluidos y con un salto de línea entre +cada impresión), sustituyendo los siguientes: +Múltiplos de 3 por la palabra "fizz". +Múltiplos de 5 por la palabra "buzz". +Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". +""" + +def fizz_buzz(): + for i in range (1, 101): + if i % 3 == 0 and i % 5 == 0: + print ("fizzbuzz\n") + elif i % 3 == 0: + print("fizz\n") + elif i % 5 == 0: + print("buzz\n") + else: + print(f"{i}\n") + +if __name__ == '__main__': + fizz_buzz() From 730b25344e35a61d148d2c33938cd76ffcd893ca Mon Sep 17 00:00:00 2001 From: Alvaro Date: Wed, 1 Nov 2023 20:50:47 +0100 Subject: [PATCH 0537/2103] Reto#42 - javascript --- .../javascript/almarro1.js" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/almarro1.js" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/almarro1.js" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/almarro1.js" new file mode 100644 index 0000000000..869fb86d55 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/almarro1.js" @@ -0,0 +1,36 @@ +function crossPoint(initialPosA, initialPosB, speedA, speedB) { + const [xa, ya] = initialPosA; + const [xb, yb] = initialPosB; + const [vxa, vya] = speedA; + const [vxb, vyb] = speedB; + + console.log(`Computing crossing point for A0=[${xa},${ya}], Va=[${vxa},${vya}], B0=[${xb},${yb}], Vb=[${vxb},${vyb}]`) + + // compute tx,ty based on final coordinates for x and y + let tx = (xa - xb) / (vxb - vxa); + let ty = (ya - yb) / (vyb - vya); + // transform NaN or negative times into Infinity to simplify comparison in next steps + if (!isFinite(tx) || tx < 0) { tx = Infinity }; + if (!isFinite(ty) || ty < 0) { ty = Infinity }; + + // when tx is a number and positive + if (isFinite(tx)) { + const x = Math.min(xa + tx * vxa, xb + tx * vxb); + const y = Math.min(ya + tx * vya, yb + tx * vyb); + console.log(`Objects will meet at (${x},${y}) after ${tx} seconds`); + } else if (isFinite(ty)) { + // when ty is a number and positive + const x = Math.min(xa + ty * vxa, xb + ty * vxb); + const y = Math.min(ya + ty * vya, yb + ty * vyb); + console.log(`Objects will meet at (${x},${y}) after ${tx} seconds`); + } else { + // tx and ty are not valid numbers + console.log('Objects won\'t meet'); + } +} + +crossPoint([0, 0], [5, 0], [1, 1], [-1, 1]); + +crossPoint([0, 0], [6, 0], [1, 0], [-1, 0]); +crossPoint([0, 0], [6, 0], [1, 0], [1, 0]); +crossPoint([0, 0], [6, 0], [2, 0], [1, 0]); \ No newline at end of file From c4af474c1a1e77337fa26360424222a77b0b2782 Mon Sep 17 00:00:00 2001 From: Liliana Milano <107228065+LilyMilano@users.noreply.github.com> Date: Wed, 1 Nov 2023 15:51:39 -0400 Subject: [PATCH 0538/2103] Reto #22 - Java --- .../java/LilyMilano.java | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Retos/Reto #22 - LA ESPIRAL [Media]/java/LilyMilano.java diff --git a/Retos/Reto #22 - LA ESPIRAL [Media]/java/LilyMilano.java b/Retos/Reto #22 - LA ESPIRAL [Media]/java/LilyMilano.java new file mode 100644 index 0000000000..cf5ce36269 --- /dev/null +++ b/Retos/Reto #22 - LA ESPIRAL [Media]/java/LilyMilano.java @@ -0,0 +1,85 @@ +/* + * Crea una función que dibuje una espiral como la del ejemplo. + * - Únicamente se indica de forma dinámica el tamaño del lado. + * - Símbolos permitidos: ═ ║ ╗ ╔ ╝ ╚ + * + * Ejemplo espiral de lado 5 (5 filas y 5 columnas): + * ════╗ + * ╔══╗║ + * ║╔╗║║ + * ║╚═╝║ + * ╚═══╝ + */ + +class Spiral { + public static void main(String[] args) { + int sideLength = 5; + char[][] matrix = new char[sideLength][sideLength]; + + int rowStart = 0; + int rowEnd = sideLength - 1; + int colStart = 0; + int colEnd = sideLength - 1; + char symbol = '═'; + + while (rowStart <= rowEnd && colStart <= colEnd) { + // Draw top row + for (int i = colStart; i <= colEnd; i++) { + matrix[rowStart][i] = symbol; + } + rowStart++; + + // Draw right column + for (int i = rowStart; i <= rowEnd; i++) { + matrix[i][colEnd] = symbol; + } + colEnd--; + + // Draw bottom row + if (rowStart <= rowEnd) { + for (int i = colEnd; i >= colStart; i--) { + matrix[rowEnd][i] = symbol; + } + rowEnd--; + } + + // Draw left column + if (colStart <= colEnd) { + for (int i = rowEnd; i >= rowStart; i--) { + matrix[i][colStart] = symbol; + } + colStart++; + } + + // Change symbol for the next iteration + switch (symbol) { + case '═': + symbol = '║'; + break; + case '║': + symbol = '╗'; + break; + case '╗': + symbol = '╔'; + break; + case '╔': + symbol = '╝'; + break; + case '╝': + symbol = '╚'; + break; + case '╚': + symbol = '═'; + break; + } + } + + // Print the matrix + for (int i = 0; i < sideLength; i++) { + for (int j = 0; j < sideLength; j++) { + System.out.print(matrix[i][j]); + } + System.out.println(); + } + } +} \ No newline at end of file From 88d311376cc9728896ddf5539a395d52f987cba4 Mon Sep 17 00:00:00 2001 From: davidleonmayor <142275316+davidleonmayor@users.noreply.github.com> Date: Wed, 1 Nov 2023 21:34:51 +0000 Subject: [PATCH 0539/2103] feat: My solution --- .../python/davidleonmayor.py" | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/davidleonmayor.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/davidleonmayor.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/davidleonmayor.py" new file mode 100644 index 0000000000..47e315fe29 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/davidleonmayor.py" @@ -0,0 +1,19 @@ +# /* +# * Escribe un programa que muestre por consola (con un print) los números de 1 a 100 +# * (ambos incluidos y con un salto de línea entre cada impresión), sustituyendo los siguientes: +# * - Múltiplos de 3 por la palabra "fizz". +# * - Múltiplos de 5 por la palabra "buzz". +# * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". +# */ + +sustituir = "" +for i in range(1, 101): + if i % 3 == 0 and i % 5 == 0: + sustituir += f"fizzbuzz: {i}\n" + elif i % 5 == 0: + sustituir += f"buzz: {i}\n" + elif i % 3 == 0: + sustituir += f"fizz: {i}\n" + else: + sustituir += f'{i}\n' +print(sustituir) From e01089f2bf2d75e6358d24d2e319594b2bf3f6d2 Mon Sep 17 00:00:00 2001 From: valero Date: Thu, 2 Nov 2023 00:10:11 +0100 Subject: [PATCH 0540/2103] Basic Functionality --- .../python/valevil27.py" | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/valevil27.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/valevil27.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/valevil27.py" new file mode 100644 index 0000000000..7bfe54dc99 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/valevil27.py" @@ -0,0 +1,58 @@ +from random import random + + +class Climate: + def __init__(self, temp: int, rainprob: float) -> None: + self.temp = temp + self.rainprob = rainprob + self.rain = False + + def simulate_day(self): + # * Today + if random() < self.rainprob: + self.rain = True + else: + self.rain = False + today = (self.temp, self.rain) + + # * Tomorrow + self.set_rainprob() + self.set_temp() + + return today + + def set_rainprob(self): + if self.temp > 25: + self.rainprob = min(self.rainprob + 0.2, 1) + elif self.temp < 5: + self.rainprob = max(self.rainprob - 0.2, 0) + + def set_temp(self): + if self.rain: + self.temp -= 1 + if (x := random()) < 0.1: + if x < 0.05: + self.temp -= 2 + else: + self.temp += 2 + + def __repr__(self) -> str: + return f"Temperature: {self.temp:3d}ºC | Rain: {self.rain:1} | Rainprob: {self.rainprob:.0%}" + + +def simulate(days: int, initial_temp: int, initial_rainprob: float): + climate = Climate(initial_temp, initial_rainprob) + reports = [] + for day in range(days): + print(f"[#] Day {day+1:4d}: {climate}") + reports.append(climate.simulate_day()) + print( + f"""[!] Report for {days} days simmulation: +\t - Maximum Temperature: {max(r[0] for r in reports)}ºC +\t - Minimum Temperature: {min(r[0] for r in reports)}ºC +\t - Total Rain Days: {sum(r[1] for r in reports)}""" + ) + + +if __name__ == "__main__": + simulate(100, 24, 0.2) From 234726da3bdb2337c95bcf9f83121d89eb4f89b2 Mon Sep 17 00:00:00 2001 From: davidleonmayor <142275316+davidleonmayor@users.noreply.github.com> Date: Wed, 1 Nov 2023 23:26:11 +0000 Subject: [PATCH 0541/2103] Reto #1 Bash --- .../bash/davidleonmayor.sh" | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100755 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/bash/davidleonmayor.sh" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/bash/davidleonmayor.sh" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/bash/davidleonmayor.sh" new file mode 100755 index 0000000000..10fc63a023 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/bash/davidleonmayor.sh" @@ -0,0 +1,61 @@ +# /* +# * Escribe un programa que reciba un texto y transforme lenguaje natural a +# * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje +# * se caracteriza por sustituir caracteres alfanuméricos. +# * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) +# * con el alfabeto y los números en "leet". +# * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") +# */ + +# estructura de dato con la tabla de equivalencias +declare -A alfabeto +alfabeto[a]='4' +alfabeto[b]='I3' +alfabeto[c]='[' +alfabeto[d]=')' +alfabeto[e]='3' +alfabeto[f]='|=' +alfabeto[g]='&' +alfabeto[h]='#' +alfabeto[i]='1' +alfabeto[j]=',_|' +alfabeto[k]='>|' +alfabeto[l]='1' +alfabeto[m]='/\/\' +alfabeto[n]='^/' +alfabeto[o]='0' +alfabeto[p]='|*' +alfabeto[q]='(_,)' +alfabeto[r]='I2' +alfabeto[s]='5' +alfabeto[t]='7' +alfabeto[u]='(_)' +alfabeto[v]='\/' +alfabeto[w]='\/\/' +alfabeto[x]='><' +alfabeto[y]='j' +alfabeto[z]='2' +alfabeto[1]='L' +alfabeto[2]='R' +alfabeto[3]='E' +alfabeto[4]='A' +alfabeto[5]='S' +alfabeto[6]='b' +alfabeto[7]='T' +alfabeto[8]='B' +alfabeto[9]='g' +alfabeto[0]='0' +alfabeto[ ]=' ' + +# 1. Pedir el texto y ambiar todo el texto a minuscula +read -p "Indicar el texto que desea traducir: " texto +texto=${texto,,} + +# 2. Recorrer el texto y por cada caracter buscar su equivalencia en la tabla +parsed_texto="" +for ((i=0; i<${#texto}; i++)) { + parsed_texto+="${alfabeto[${texto:i:1}]}" +} + +# 3. Imprimir el texto traducido +echo $parsed_texto From 20107b3af9aa5228b892c55395a13f6b04a92508 Mon Sep 17 00:00:00 2001 From: valero Date: Thu, 2 Nov 2023 00:40:55 +0100 Subject: [PATCH 0542/2103] Added function for input --- .../python/valevil27.py" | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/valevil27.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/valevil27.py" index 7bfe54dc99..7b551eeaf7 100644 --- "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/valevil27.py" +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/valevil27.py" @@ -53,6 +53,35 @@ def simulate(days: int, initial_temp: int, initial_rainprob: float): \t - Total Rain Days: {sum(r[1] for r in reports)}""" ) +def get_initial_conditions(): + while True: + try: + days = int(input("[?] Days to simulate?: ")) + if days < 1: + print("[!] Error: value out of range. Enter an integer greater than 0.") + else: + break + except: + print("[!] Error: input format is not allowed. You must enter an integer.") + + while True: + try: + temp = int(input("[?] Initial temperature (ºC)?: ")) + break + except: + print("[!] Error: input format is not allowed. You must enter an integer.") + + while True: + try: + prob = float(input("[?] Initial rain probability (0-1)?: ")) + if not (0 < prob < 1): + print("[!] Error: probability out of range. Enter a probability between 0 and 1.") + else: + break + except: + print("[!] Error: input format is not allowed. You must enter a float number.") + return days, temp, prob if __name__ == "__main__": - simulate(100, 24, 0.2) + initial_conditions = get_initial_conditions() + simulate(*initial_conditions) From dcf3d4432def9969f8d9f7ea6baa11d8aa778c23 Mon Sep 17 00:00:00 2001 From: Marco Torres Date: Wed, 1 Nov 2023 20:42:27 -0700 Subject: [PATCH 0543/2103] Reto #37 - Python --- .../python/marcoatrs.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/marcoatrs.py diff --git a/Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/marcoatrs.py b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/marcoatrs.py new file mode 100644 index 0000000000..8db155393e --- /dev/null +++ b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/marcoatrs.py @@ -0,0 +1,36 @@ +def dec2hexa(num: int) -> str: + replaces = {10: "A", 11: "B", 12: "C", 13: "D", 14: "E", 15: "F"} + hexa = [] + while num > 16: + hexa.insert(0, replaces.get((num % 16), str((num % 16)))) + num //= 16 + hexa.insert(0, replaces.get(num, str(num))) + return "".join(hexa) + + +def rgb2hex(r: int, g: int, b: int) -> str: + rhex = dec2hexa(r) + ghex = dec2hexa(g) + bhex = dec2hexa(b) + + rhex = rhex if len(rhex) == 2 else f"0{rhex}" + ghex = ghex if len(ghex) == 2 else f"0{ghex}" + bhex = bhex if len(bhex) == 2 else f"0{bhex}" + + return f"#{rhex}{ghex}{bhex}" + + +def hex2rgb(he: str) -> tuple: + he = he.replace("#", "") + if len(he) != 6: + print("Formato no compatible") + return + r = int(he[:2], 16) + g = int(he[2:4], 16) + b = int(he[4:], 16) + return r, g, b + + +print(rgb2hex(0, 0, 0)) +print(hex2rgb("#00FFFF")) +print(hex2rgb(rgb2hex(0, 255, 128))) From 428efdb17e1976bc28decfe109f389147f684169 Mon Sep 17 00:00:00 2001 From: nataliaventura93 Date: Thu, 2 Nov 2023 10:04:21 +0100 Subject: [PATCH 0544/2103] Add natalia'sfirst solution --- .../javascript/nataliaventura93.js" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/nataliaventura93.js" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/nataliaventura93.js" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/nataliaventura93.js" new file mode 100644 index 0000000000..d15b4b1302 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/nataliaventura93.js" @@ -0,0 +1,65 @@ +function getRandomIntInclusive(min, max) { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min + 1) + min); + } + + +function climaticConditions (days) { + let temperature = 20; + let rain = 10; + const temperatureMagicNumber10 = 1; + const temperatureMagicNumber50 = 2; + let currentDay = 0; + let maxTemp = -99; + let minTemp = 99; + let rainningDays = 0; + while (days>0) { + let randomNumber10 = getRandomIntInclusive(1, 10) + if (temperatureMagicNumber10 === randomNumber10){ + let ramdonNumber50 = getRandomIntInclusive(1, 2) + if (temperatureMagicNumber50 === ramdonNumber50) { + temperature-= 2; + } else { + temperature+= 2; + } + } + if (temperature > 25) { + rain += 20; + if (rain > 100) { + rain = 100; + } + } + if (temperature < 5){ + rain -= 20; + if (rain < 0) { + rain = 0; + } + } + if (rain === 100) { + temperature -= 1; + } + currentDay+=1; + days-=1; + let messageOfTheDay = "Hoy es día " + currentDay + ", hay una temperatura de " + temperature + "ºC" + " y una probabilidad de lluvia del " + rain + "%"; + if (rain === 100) { + messageOfTheDay += ". Hoy llueve" + rainningDays += 1; + } else { + messageOfTheDay += ". Hoy no llueve" + } + if (temperature > maxTemp) { + maxTemp = temperature; + } + if (temperature < minTemp) { + minTemp = temperature; + } + + + console.log(messageOfTheDay); + } + let messageOfDays = "Estos días tendremos una temperatura máxima de " + maxTemp + "ºC, y una mínima de " + minTemp + "ºC. Lloverá " + rainningDays + " días." + console.log(messageOfDays); +} + +climaticConditions(5); \ No newline at end of file From 2ca816c070dd96e0b88d603436c441159a29b0c1 Mon Sep 17 00:00:00 2001 From: Othamae Date: Thu, 2 Nov 2023 11:07:05 +0100 Subject: [PATCH 0545/2103] Reto #43 - javascript --- .../javascript/othamae.js" | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/othamae.js" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/othamae.js" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/othamae.js" new file mode 100644 index 0000000000..1cb7762d74 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/othamae.js" @@ -0,0 +1,94 @@ +/* + * 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. + */ + + +const readline = require('readline') +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}) + +async function weatherCondition (){ + let temp = Number(await getTemp()) + let rain = Number(await getRain()) + const days = Number(await getDays()) + let maxTemp = temp + let minTemp = temp + let rainDays = 0 + + for (let i=0; i maxTemp) maxTemp = temp + if (temp< minTemp) minTemp = temp + const changeTemp = Math.floor(Math.random() * 100) + if (changeTemp >= 90){ + temp = (Math.random()< 0.5) ? temp+2 : temp-2 + } + if (temp >= 25) rain+=20 + else if (temp < 5) rain -= 20 + + if (rain >= 100){ + temp-- + rain = 100 + } else if (rain <= 0) rain=0 + } + console.log(`MaxTemp: ${maxTemp}, MinTemp: ${minTemp}, Days raining: ${rainDays}`) + rl.close() +} + + +weatherCondition() + + +function getTemp(){ + return new Promise((resolve, reject) => { + rl.question('Please enter the initial temperature: ', async (answer)=> { + if (isNaN(answer)) { + console.log('Please enter a valid number') + getTemp().then(resolve) + } else { + resolve(answer) + } + }) + }) +} + +function getRain(){ + return new Promise((resolve, reject) => { + rl.question('Please enter the rain probability: ', async (answer)=> { + if (isNaN(answer)) { + console.log('Please enter a valid number') + getRain().then(resolve) + } else { + resolve(answer) + } + }) + }) +} + +function getDays(){ + return new Promise((resolve, reject) => { + rl.question('Please enter the days you want to predict: ', async (answer)=> { + if (isNaN(answer)) { + console.log('Please enter a valid number') + getDays().then(resolve) + } else { + resolve(answer) + } + }) + }) +} From 2dc4f1e4bf5bab77bedb87c6fa305ac4a5c1e9c6 Mon Sep 17 00:00:00 2001 From: patriciotrujilllo Date: Thu, 2 Nov 2023 17:36:11 -0300 Subject: [PATCH 0546/2103] Reto #41 resolve --- .../javascript/patriciotrujilllo.js" | 202 ++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/patriciotrujilllo.js" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/patriciotrujilllo.js" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/patriciotrujilllo.js" new file mode 100644 index 0000000000..eb28198c96 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/javascript/patriciotrujilllo.js" @@ -0,0 +1,202 @@ +/* + * Este es un reto especial por Halloween. + * Te encuentras explorando una mansión abandonada llena de habitaciones. + * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. + * Tu misión es encontrar la habitación de los dulces. + * + * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. + * (Tienes total libertad para ser creativo con los textos) + * + * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 + * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. + * (16 habitaciones, siendo una de entrada y otra donde están los dulces) + * Esta podría ser una representación: + * 🚪⬜️⬜️⬜️ + * ⬜️👻⬜️⬜️ + * ⬜️⬜️⬜️👻 + * ⬜️⬜️🍭⬜️ + * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. + * Si no lo aciertas no podrás desplazarte. + * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. + * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) + * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. + * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y + * tengas que responder dos preguntas para salir de ella. + */ + +const readline = require('readline/promises') + +const rl = readline.createInterface({ + input:process.stdin, + output: process.stdout +}) + +const preguntas = { + 1: "What is the Cosmere?", + 2: "How many planets are in the Cosmere?", + 3: "What is a Shard?", + 4: "Who is Hoid?", + 5: "What is Stormlight?", + 6: "What is Investiture?", + 7: "What is a spren?", + 8: "Who is Kaladin?", + 9: "Who is Dalinar?", + 10: "What is a highstorm?", + 11: "What is Roshar?", + 12: "Who is Vin?", + 13: "What is Allomancy?", + 14: "Who is Elend Venture?", + 15: "What is Feruchemy?", + 16: "Who is Sazed?", + 17: "What is Hemalurgy?", + 18: "Who is the Lord Ruler?", + 19: "What is Scadrial?", + 20: "Who are the Kandra?", + 21: "What are the Ten Essences?", + 22: "Who are the Parshendi?", + 23: "What are Shardblades and Shardplates?", + 24: "Who is Jasnah Kholin?", + 25: "Who are the Knights Radiant?", + 26: "What are the Unmade?", + 27: "Who is Odium?", + 28: "What are the Oathgates?", + 29: "Who are the Heralds?", + 30: "What are the Desolations?" +} + +const respuestas = { + 1: "Universe", + 2: "Ten", + 3: "Power", + 4: "Character", + 5: "Energy", + 6: "Magic", + 7: "Entity", + 8: "Character", + 9: "Character", + 10: "Storm", + 11: "Planet", + 12: "Character", + 13: "Magic", + 14: "Character", + 15: "Magic", + 16: "Character", + 17: "Magic", + 18: "Character", + 19: "Planet", + 20: "Species", + 21: "Concepts", + 22: "Species", + 23: "Weapons", + 24: "Character", + 25: "Order", + 26: "Entities", + 27: "God", + 28:"Portals", + 29:"Characters", + 30:"Events" +} +const habitaciones = [ '❔','👻','❔', + '❔','❔','❔','❔', + '❔','👻','❔','❔', + '❔','🍬','❔','❔' + ] + +const randomRoom = [...habitaciones].sort(() => Math.random() - 0.5) +randomRoom.unshift('🚪') + +let ArrayRandomRoom = [] +for(let i = 0; i<4; i++){ + const valor = i*4 + ArrayRandomRoom.push([...randomRoom].slice(0+valor,4+valor)) +} + +console.log(ArrayRandomRoom) + +let actualRow=0 +let actualColumn=0 +let habitacionActual = ArrayRandomRoom[actualRow][actualColumn] +let Norte +let Sur +let Este +let Oeste + +const moverse = (respuesta) =>{ + let accionNoValida = true + if(respuesta.toLowerCase()==='norte' && Norte){ + habitacionActual=Norte + actualRow-=1 + accionNoValida = false + } + else if(respuesta.toLowerCase()==='sur' && Sur){ + habitacionActual=Sur + actualRow+=1 + accionNoValida = false + } + else if(respuesta.toLowerCase()==='este' && Este){ + habitacionActual=Este + actualColumn += 1 + accionNoValida = false + } + else if(respuesta.toLowerCase()==='oeste' && Oeste){ + habitacionActual=Oeste + actualColumn -=1 + accionNoValida = false + } + else { + console.log('Accion no valida') + accionNoValida = true + } + return accionNoValida +} +console.log('\n') +console.log('BIENVENIDO A LA CASA ENBRUJADA!!!, el objetivo es encontrar el caramelo, si no es la habitacion correcta se te haran preguntas de los libros de Brandon Sanderson :3?\n\n') + + +const House = async() =>{ + + while(habitacionActual!=='🍬'){ + console.log('\n') + + + Norte = ArrayRandomRoom[actualRow-1] && ArrayRandomRoom[actualRow-1][actualColumn] ? ArrayRandomRoom[actualRow-1][actualColumn] : null + Sur = ArrayRandomRoom[actualRow+1] && ArrayRandomRoom[actualRow+1][actualColumn] ? ArrayRandomRoom[actualRow+1][actualColumn]: null + Este = ArrayRandomRoom[actualRow][actualColumn+1] ? ArrayRandomRoom[actualRow][actualColumn+1] : null + Oeste = ArrayRandomRoom[actualRow][actualColumn-1] ? ArrayRandomRoom[actualRow][actualColumn-1] : null + console.log(`Norte: ${Norte ? 'Disponible':'No hay camino'}, Sur: ${Sur ? 'Disponible':'No hay camino'}, Este: ${Este ? 'Disponible':'No hay camino'}, Oeste: ${Oeste ? 'Disponible':'No hay camino'}\n`) + + var validador = true + + while(validador){ + + const respuesta = await rl.question('¿En que direccion quieres moverte?: ') + validador = moverse(respuesta) + + } + console.log('\n') + console.log('Habitacion Actual:' +habitacionActual+'\n') + + const Ghost = habitacionActual === '👻' ? 2 : 1 + let flag=0 + while(flag Date: Thu, 2 Nov 2023 21:30:31 -0400 Subject: [PATCH 0547/2103] Reto 43 resuelto en Python por serenill --- .../python/serenill.py" | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/serenill.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/serenill.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/serenill.py" new file mode 100644 index 0000000000..ab7aab3cc3 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/serenill.py" @@ -0,0 +1,140 @@ +""" +/* Reto #43: Simulador de clima + * Dificultad: Fácil | Publicación: 30/10/23 | Corrección: 13/11/23 + * Enunciado: + + * 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. + + */ + """ + + + +import random + +class WheatherSimulator(): + def __init__(self): + self.days_predicted = self.get_days() + self.intial_temperature = self.get_temperature() + self.initial_rain_probability = self.get_rain_probability() + self.days_rain = 0 + self.temperatures = [] + + print("\nEmpezemos con la predicción") + self.predict_wheather(1, self.intial_temperature, self.initial_rain_probability) + + def get_days(self): + days = input("\nCuántos días quieres que dure la predicción? (introduce un número entero mayor que 0): ") + + try: + int(days) + return int(days) + except Exception: + print("Parámetro incorrecto. Por favor, introduce una cantidad válida") + return self.get_days() + + + def get_temperature(self): + temp = input("Cuál es la temperatura inicial? (introduce un número entero mayor que 0): ") + try: + int(temp) + return int(temp) + except Exception: + print("Parámetro incorrecto. Por favor, introduce un parámetro válido") + return self.get_temperature() + + + def get_rain_probability(self): + rain_prob = input("Cuál es la probabilidad inicial de lluvia? (introduce un número decimal entre cero y uno, siendo 1 máxima posibilidad y 0 imposible): ") + + try: + float(rain_prob) + except Exception: + print("Parámetro incorrecto. Por favor, introduce un parámetro válido") + return self.get_rain_probability() + + if float(rain_prob) <= 1: + return float(rain_prob) + + else: + print("Parámetro incorrecto. Por favor, introduce un parámetro válido") + return self.get_rain_probability() + + + + def predict_wheather(self, day_number: int, temp: int, rain_prob: int): + if day_number <= self.days_predicted: + change_of_temperature = [False, False] #Nos dice si un día hay cambio de temperatura + #Su primer elemento es un boolean, true indica que si hay cambio y falso que no habrá cambio. + #Su segundo elemento puede ser 0, 1 o false, el 0 indica una bajada de temperatura, el 1 un aumento y false se usa cuando no hay cambio de temperatura ese día + + + next_day_data = [temp, rain_prob] #Referencia a las condiciones del día siguiente + + #Comprobamos si hay cambio de temperatura + if random.randint(1, 10) == 1: + change_of_temperature[0], change_of_temperature[1] = True, random.randint(0, 1) + #Comprobamos si es un incremento o un descenso + if change_of_temperature[1] == 0: + temp -= 2 + else: + temp += 2 + + #Registramos la temperatura + self.temperatures.append(temp) + + #Mostramos el reporte + print(f"\nDía {day_number}:\n") + print(f"Temperatura: {temp}") + + #Verificamos si hay lluvia + if random.randint(0, 9) in [number for number in range(int(rain_prob * 10))]: + self.days_rain += 1 + print("Hoy lloverá.") + #Aumentamos la temperatura del día siguente + next_day_data[0] += 1 + else: + print("Hoy no lloverá") + + + #Aumentamos la probabilida de lluvia si la temperatura supera los 25 grados + if temp > 25: + next_day_data[1] += 0.2 + + #Disminuimos la probabilida de lluvia si la temperatura es inferior a los 5 grados + if temp < 5: + next_day_data[1] -= 0.2 + + #Llamamos de nuevo a la función para predecir el clima del próximo día + self.predict_wheather(day_number + 1, next_day_data[0], next_day_data[1]) + + else: + print(f"\nLa temperatura mínima durante la predicción será {min(self.temperatures)} grados y la máxima, de {max(self.temperatures)} grados.") + print(f"En total, lloverá {self.days_rain} días.") + + + +if __name__ == "__main__": + print(""" +Hola, soy un simulador del clima. Puedo predecir el clima en Termolandia, un país muy lejano. +Solo dime las condiciones iniciales y el número de días que quieres predecir.""") + + while True: + WheatherSimulator() + input("\nPresiona Enter para empezar una nueva predicción.\n") + + + + \ No newline at end of file From 5651ea028fe0d02407f63908751842b5a3b0eb03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex?= Date: Fri, 3 Nov 2023 13:59:59 +0100 Subject: [PATCH 0548/2103] Reto #43 - python --- .../python/alexgarcia1907.py" | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/alexgarcia1907.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/alexgarcia1907.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/alexgarcia1907.py" new file mode 100644 index 0000000000..669f48372e --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/alexgarcia1907.py" @@ -0,0 +1,85 @@ +# /* +# * 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. +# */ + +import random + +def getInitialConditions(): + try: + initialTemperature = int(input('Introduce la temperatura inicial (ºC): ')) + initialRainChance = int(input('Introduce la probabilidad de lluvia inicial: ')) + days_prediction = int(input("Introduce el número de días de predicción: ")) + + return initialTemperature, initialRainChance, days_prediction + except (ValueError): + print("Introduce valores correctos.") + getInitialConditions() + +def temperatureChange(): + rand = random.randint(0, 100) + + if rand >= 0 and rand <= 10: + return True + return False + +def temperatureIncrease2Grades(): + rand = random.choice([0, 1]) + if rand == 0: + return True + return False + +def printResults(rainyDays, minTemperature, maxTemperature): + print("\n") + print(" RESULTADOS ") + print("----------------------------------------------------") + print(f"Días de lluvia: {rainyDays}") + print(f"Temperatura mínima: {minTemperature} ºC") + print(f"Temperatura máxima: {maxTemperature} ºC") + +def calculatePredictions(): + initialTemperature, initialRainChance, days_prediction = getInitialConditions() + + rainyDays = 0 + maxTemperature = initialTemperature + minTemperature = initialTemperature + + for day in range(1, days_prediction + 1): + + # 10% de posibilidades de que la temperatura aumente o disminuya 2 grados. + if temperatureChange(): + if temperatureIncrease2Grades(): + initialTemperature += 2 + else: initialTemperature -= 2 + + + # Si la temperatura supera los 25 grados, la probabilidad de lluvia al día siguiente aumenta en un 20%. + if initialTemperature > 25: initialRainChance += 20 + + # Si la temperatura baja de 5 grados, la probabilidad de lluvia al día siguiente disminuya en un 20%. + if initialTemperature < 5: initialRainChance -= 20 + + # Si llueve (100%), la temperatura del día siguiente disminuye en 1 grado. + if initialRainChance >= 100: + initialTemperature -= 1 + rainyDays += 1 + + if initialTemperature < minTemperature: minTemperature = initialTemperature + if initialTemperature > maxTemperature: maxTemperature = initialTemperature + + + return printResults(rainyDays, minTemperature, maxTemperature) + +if __name__ == '__main__': + calculatePredictions() From 1257a47f8f3a33bd370f993de6276e89544e543a Mon Sep 17 00:00:00 2001 From: Carlos Esteban Castro <146273220+ccaicedo09@users.noreply.github.com> Date: Fri, 3 Nov 2023 08:59:09 -0500 Subject: [PATCH 0549/2103] Create ccaicedo.py --- .../python/ccaicedo.py" | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo.py" new file mode 100644 index 0000000000..7df8199fb3 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo.py" @@ -0,0 +1,89 @@ +""" * 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.""" + +import random +import os + +class SimuladorClima(): + + def __init__(self, temperatura, probabilidad_lluvia, dias_prediccion): + self.temperatura = temperatura + self.probabilidad_lluvia = probabilidad_lluvia + self.dias_de_lluvia = 0 + self.temperatura_min = temperatura + self.temperatura_max = temperatura + self.dias_prediccion = dias_prediccion + + def simulador(self): + for dia in range(1, self.dias_prediccion + 1): + + # Considerar: 10% de posibilidades de que la temperatura aumente o disminuya 2 grados. + cambio_temperatura = 0 + lluvia = False + + if 10 > random.randint(1, 100): + if random.randint(0,1) == 0: + cambio_temperatura -= 2 + else: + cambio_temperatura += 2 + + #Simular lluvia de acuerdo a la probabilidad dada--------------------- + + #La probabilidad de lluvia tiene que estar en términos de porcentaje + if self.probabilidad_lluvia>100: + self.probabilidad_lluvia = 100 + elif self.probabilidad_lluvia < 0: + self.probabilidad_lluvia = 0 + + if self.probabilidad_lluvia >= random.randint(1,100): + lluvia = True + cambio_temperatura -= 1 # -> Si llueve (100%), la temperatura del día siguiente disminuye en 1 grado. + self.dias_de_lluvia += 1 + + #Validar probabilidad de lluvia al día siguiente + + if self.temperatura > 25: #Si la temperatura supera los 25 grados, la probabilidad de lluvia al día siguiente aumenta en un 20%. + self.probabilidad_lluvia += 20 + + if self.temperatura < 5: #Si la temperatura baja de 5 grados, la probabilidad de lluvia al día siguiente disminuye en un 20%. + self.probabilidad_lluvia -= 20 + + #Determinar cambios en temperatura mínima y máxima + + if self.temperatura < self.temperatura_min: + self.temperatura_min = self.temperatura + + if self.temperatura > self.temperatura_max: + self.temperatura_max = self.temperatura + + print(f"Día: {dia} Temperatura: {self.temperatura} Lloverá: {'Sí' if lluvia else 'No'}") + + #Aplicar el cambio de temperatura a la temperatura del día siguiente + + self.temperatura += cambio_temperatura + + print(f"\nTemperatura mínima: {self.temperatura_min}°C") + print(f"Temperatura máxima: {self.temperatura_max}°C") + print(f"Días de lluvia: {self.dias_de_lluvia}") + + +if __name__ == "__main__": + os.system("cls") + temperatura = float(input("Ingrese la temperatura inicial (°C): ")) + probabilidad_lluvia = int(input("Ingrese la probabilidad de lluvia inicial (%): ")) + dias_prediccion = int(input("Ingrese los días para la predicción: ")) + print("") + + simulador = SimuladorClima(temperatura, probabilidad_lluvia, dias_prediccion) + simulador.simulador() From 727b8be2473384a4f1b565818d366cff966dd9e3 Mon Sep 17 00:00:00 2001 From: Carlos Esteban Castro <146273220+ccaicedo09@users.noreply.github.com> Date: Fri, 3 Nov 2023 09:04:12 -0500 Subject: [PATCH 0550/2103] =?UTF-8?q?Corregir=20la=20redacci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ejercicio.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ejercicio.md" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ejercicio.md" index 361ad3e087..4269282d45 100644 --- "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ejercicio.md" +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/ejercicio.md" @@ -13,7 +13,7 @@ * - 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%. + * siguiente disminuye 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. From ef607b7db81bd5a766bc3cae6cdb3076acef0c5e Mon Sep 17 00:00:00 2001 From: patriciotrujilllo Date: Fri, 3 Nov 2023 11:43:44 -0300 Subject: [PATCH 0551/2103] Reto #42 resolve --- .../javascript/patriciotrujilllo.js" | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/patriciotrujilllo.js" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/patriciotrujilllo.js" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/patriciotrujilllo.js" new file mode 100644 index 0000000000..85e6b5848f --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/javascript/patriciotrujilllo.js" @@ -0,0 +1,47 @@ +/* + * Crea una función que calcule el punto de encuentro de dos objetos en movimiento + * en dos dimensiones. + * - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento + * (vector de desplazamiento) por unidad de tiempo (también en formato xy). + * - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. + * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarán en lograrlo. + * - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. + */ + +// Vm = (Xf-Xi)/(Tf-Ti) Donde el eje X es la deribada del tiempo y El eje Y es la derivada de la posicion +//Vm(Tf-Ti)=Xf-Xi +//Vm(Tf-Ti) + Xi = Xf como el tiempo inicial=0 entonces la ecuacion queda: +//Xf = Xi + Vm*Tf => /Xf = Xi + (Vf-Vi)*Tf +//Igualdad entre posisciones +//Xf1===Xf2 => Xi1 + Vm1*Tf= Xi2 + Vm2*Tf => Vm1*Tf - Vm2*Tf = Xi2 - Xi1 +//Tf = (Xi2 - Xi1)/(Vm-Vm) +//TF = ((x2,y2) - (x1,y1))/(Vm1-Vm2) //(v1X,v1Y) (v2X,v2Y) + + +const intersecction = (x1,y1,x2,y2,v1X,v1Y,v2X,v2Y) =>{ + const cruceX = (x2-x1)/(v1X-v2X) + const cruceY = (y2-y1)/(v1Y-v2Y) + + if(cruceX>=0){ + //Xf = Xi + Vm*Tf + const X = x1 + v1X*cruceX + const Y = y1 + v1Y*cruceX + console.log('Se cruzan en el tiempo: '+ cruceX) + console.log(`Las coordenadas finales son: (${X},${Y})`) + } + else if(cruceY>=0){ + const X = x1 + v1X*cruceY + const Y = y1 + v1Y*cruceY + console.log('Se cruzan en el tiempo: '+ cruceY) + console.log(`Las coordenadas finales son: (${X},${Y})`) + } + else{ + console.log('No se cruzan') + } + +} + +console.log(intersecction(3,2,1,4,2,1,1,2)) +console.log(intersecction(1,0,0,1,2,0,0,3)) +console.log(intersecction(2,1,4,2,1,0,0,1)) +console.log(intersecction(1,2,3,1,1,1,-1,1)) From 8d9083c90bf4511992a10ab763b55cc581064926 Mon Sep 17 00:00:00 2001 From: Juan David Duque Date: Fri, 3 Nov 2023 12:22:55 -0500 Subject: [PATCH 0552/2103] Reto#27 - jduque1989 - Python --- .../python/jduque1989.py" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #27 - CUENTA ATR\303\201S [Media]/python/jduque1989.py" diff --git "a/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/python/jduque1989.py" "b/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/python/jduque1989.py" new file mode 100644 index 0000000000..3c119e406d --- /dev/null +++ "b/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/python/jduque1989.py" @@ -0,0 +1,36 @@ +import time + +# Funcion para solicitar al usuario los parametros y validación + +def data_input(): + while True: + try: + count_init = int(input("Enter a number to start countdown: ")) + step = int(input("Enter a step size: ")) + checker(count_init, step) + except ValueError: + print("Error, please enter a number") + + +# Funcion para revisar que cumpla la condición de enteros positivos + +def checker(count_init, step): + if count_init < 0 or step < 0: + print("Error, please enter a positive number") + data_input() + else: + count_down(count_init, step) + +# Funcion de la cuenta regresiva + +def count_down(count_init, step): + while count_init >= 0: + print(count_init) + time.sleep(step) + count_init -= 1 + if count_init == 0: + print("Blast off!") + break + + +data_input() From 75c4a14bb1c643f65c6c8857ec29bbac84b1a2c8 Mon Sep 17 00:00:00 2001 From: Patricio Date: Fri, 3 Nov 2023 16:49:29 -0300 Subject: [PATCH 0553/2103] reto#1 - python --- .../python/patotal.py" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/patotal.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/patotal.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/patotal.py" new file mode 100644 index 0000000000..4c28460534 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/patotal.py" @@ -0,0 +1,36 @@ +letras = { + "a" : "4", + "b" : "I3", + "c" : "[", + "d" : ")", + "e" : "3", + "f" : "|=", + "g" : "&", + "h" : "#", + "i" : "1", + "j" : ",_|", + "k" : ">|", + "l" : "1", + "m" : "/\/\\", + "n" : "^/", + "o" : "0", + "p" : "|*", + "q" : "(_,)", + "r" : "I2", + "s" : "5", + "t" : "7", + "u" : "(_)", + "v" : "\/", + "w" : "\/\/", + "x" : "><", + "y" : "j", + "z" : "2", + " " : " ", + } + +frase = input("Frase a convertir: ") +resultado = "" +for i in frase.lower(): + resultado += letras.get(i, i) + +print(resultado) \ No newline at end of file From 180e33fd7d082df03316b25ce755a86fcba6e9a2 Mon Sep 17 00:00:00 2001 From: Troleomotor10 Date: Sat, 4 Nov 2023 03:28:22 +0100 Subject: [PATCH 0554/2103] =?UTF-8?q?a=C3=B1adir=20reto=2043=20en=20javasc?= =?UTF-8?q?ript?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/troleomotor10.js" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/troleomotor10.js" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/troleomotor10.js" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/troleomotor10.js" new file mode 100644 index 0000000000..16ba0d03a8 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/troleomotor10.js" @@ -0,0 +1,69 @@ +/* + * 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. + */ +function simuladorclima(dias, temperatura, probabilidad_lluvia){ + let temperatura_maxima = 0; + let temperatura_minima = temperatura; + let recuento_dias_lluvia = 0; + let lluvia = false + for(let i = 1; i <= dias; i++){ + //Si sale entre 1 y 10 disminuimos la temperatura y si sale entre 11 y 20 aumentamos la temperatura + let aumento_temperatura = Math.floor(Math.random() * 100) + if(aumento_temperatura >= 1 && aumento_temperatura <= 10){ + temperatura -= 2 + }else if(aumento_temperatura >= 11 && aumento_temperatura <= 20){ + temperatura += 2 + } + //Comprobar si la temperatura actual es la maxima o la minima + if(temperatura > temperatura_maxima){ + temperatura_maxima = temperatura + } + if(temperatura < temperatura_minima){ + temperatura_minima = temperatura + } + //Comprobar si hoy llueve + let numero_probabilidad_lluvia = Math.floor(Math.random() * 100) + if(numero_probabilidad_lluvia < probabilidad_lluvia){ + lluvia = true; + } + //Comprobar si la probabilidad de lluvia del dia siguiente aumenta + if(temperatura > 25){ + if(probabilidad_lluvia + 20 > 100){ + probabilidad_lluvia = 100 + }else{ + probabilidad_lluvia += 20 + } + }else if(temperatura < 5){ + if(probabilidad_lluvia - 20 < 0){ + probabilidad_lluvia = 0 + }else{ + probabilidad_lluvia -= 20 + } + } + + //Imprimimos por pantalla los resultados del dia + console.log(`La temperatura del dia ${i} sera de ${temperatura} Cº. Lluvia: ${lluvia ? "Si" : "No"}`) + + //Aumentamos la temperatura del siguiente dia si hoy llueve + if(lluvia == true){ + temperatura -= 1 + recuento_dias_lluvia++ + } + } + //Imprimimos por pantalla el resultado final + console.log(`\nLa temperatura maxima de estos días es de: ${temperatura_maxima}Cº`) + console.log(`La temperatura minima de estos días es de: ${temperatura_minima}Cº`) + console.log(`Llovera durante ${recuento_dias_lluvia} dias`) +} \ No newline at end of file From eedbe32d6f879c3a71d544f16057f7759e460206 Mon Sep 17 00:00:00 2001 From: Hans Escobar <60953384+hdescobarh@users.noreply.github.com> Date: Fri, 3 Nov 2023 22:13:08 -0500 Subject: [PATCH 0555/2103] =?UTF-8?q?Soluci=C3=B3n=20Reto=20#43=20-=20incl?= =?UTF-8?q?uye=20docs=20y=20unit=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rust/hdescobarh.rs" | 268 ++++++++++++++++++ 1 file changed, 268 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/rust/hdescobarh.rs" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/rust/hdescobarh.rs" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/rust/hdescobarh.rs" new file mode 100644 index 0000000000..e6699c5b6e --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/rust/hdescobarh.rs" @@ -0,0 +1,268 @@ +// Author: Hans D. Escobar H. (hdescobarh) + +#![crate_name = "simulador_clima"] +#![crate_type = "cdylib"] + +// rand es la biblioteca para generación de números aleatorios +use rand::distributions::{Bernoulli, Standard}; +use rand::rngs::StdRng; +use rand::{Rng, SeedableRng}; + +// Máximo valor permitido en el modelo +const MAX_ALLOWED_TEMPERATURE: f64 = 90.0; +// Mínimo valor permitido en el modelo +const MIN_ALLOWED_TEMPERATURE: f64 = -110.0; + +/// Representa una simulación del clima dadas unas condiciones iniciales de temperatura y lluvia +pub struct Simulation { + /// Número de días de simulación, incluyendo el día inicial + total_days: usize, + /// Almacena las predicciones de clima para cada día + sample: Vec, + /// Número de días con lluvia + days_with_rain: Option, + /// Máxima temperatura observada + max_temperature: Option, + /// Mínima temperatura observada + min_temperature: Option, +} + +impl Simulation { + /// Inicializa y corre la simulación + /// + /// # Argumentos: + /// * `days` - numero de días de simulación + /// * `init_temperature` - temperatura inicial + /// * `init_rain_probability` - probabilidad de lluvia inicial + /// + /// # Ejemplo: + /// ``` + /// use simulador_clima::*; + /// // simulación de 10 días, temperatura inicial de 24.0ºC + /// // y probabilidad de lluvia inicial del 20% + /// let simulation = Simulation::run(10, 24.0, 0.20); + /// let report = simulation.report(); + /// println!("{report}"); + /// + /// // Ejemplo del output (los valores pueden ser diferentes por le componente aleatorio) + /// // Day Temperature Rain + /// // 0 24 false + /// // 1 24 false + /// // 2 24 true + /// // 3 23 true + /// // 4 22 false + /// // 5 22 false + /// // 6 22 false + /// // 7 22 false + /// // 8 22 false + /// // 9 22 false + /// // - Days with rain: 2 + /// // - Max. temperature (ºC): 24 + /// // - Min. temperature (ºC): 22 + /// ``` + pub fn run(days: usize, init_temperature: f64, init_rain_probability: f64) -> Self { + let mut sample: Vec = Vec::with_capacity(days); + sample.push(Forecast::new( + false, + init_temperature, + init_rain_probability, + )); + let mut simulation = Self { + total_days: days, + sample, + days_with_rain: None, + max_temperature: None, + min_temperature: None, + }; + simulation.sample(); + simulation.fill_stats(); + simulation + } + + pub fn report(&self) -> String { + // inicializa la plantilla y extrae la información de cada día + let mut msg = "Day\tTemperature\tRain\n".to_string(); + for (day, forecast) in self.sample.iter().enumerate() { + let temperature = forecast.temperature; + let rained = forecast.rained; + msg.push_str(&format!("{day}\t{temperature}\t{rained}\n")); + } + // Verifica que exista estadísticas + if self.days_with_rain.is_none() + || self.max_temperature.is_none() + || self.min_temperature.is_none() + { + return msg; + } + msg.push_str(&format!( + "\ + - Days with rain: {}\n\ + - Max. temperature (ºC): {}\n\ + - Min. temperature (ºC): {}\n", + self.days_with_rain.unwrap(), + self.max_temperature.unwrap(), + self.min_temperature.unwrap() + )); + + msg + } + + // simula los demás días a partir del día inicial + fn sample(&mut self) { + while self.sample.len() < self.total_days { + let lastest_forecast = &self.sample[self.sample.len() - 1]; + let next_forecast = lastest_forecast.next_day(); + self.sample.push(next_forecast); + } + } + + fn fill_stats(&mut self) { + // obtiene los dias que llovieron y cuenta su número + let days_with_rain = self + .sample + .iter() + .filter(|forecast| forecast.rained) + .count(); + self.days_with_rain = Some(days_with_rain); + // obtiene la máxima temperatura + let max_temperature = self + .sample + .iter() + .map(|forecast| forecast.temperature) + .reduce(f64::max) + .unwrap(); + self.max_temperature = Some(max_temperature); + // obtiene la temperatura mínima + let min_temperature = self + .sample + .iter() + .map(|forecast| forecast.temperature) + .reduce(f64::min) + .unwrap(); + self.min_temperature = Some(min_temperature) + } +} + +/// Representa las predicciones de un día +struct Forecast { + /// Temperatura en Celsius + temperature: f64, + /// Probabilidad de lluvia, [0.0, 1.0] + rain_probability: f64, + /// Sí efectivamente llovió, es `true` + rained: bool, +} + +impl Forecast { + fn new(rained: bool, temperature: f64, rain_probability: f64) -> Self { + if !(0.0..=1.0).contains(&rain_probability) { + panic!("Probability must be in the close interval [0, 1].") + } + + if !(MIN_ALLOWED_TEMPERATURE..=MAX_ALLOWED_TEMPERATURE).contains(&temperature) { + panic!("Temperature out of bounds.") + } + Self { + rained, + temperature, + rain_probability, + } + } + + // Genera predicciones para el día siguiente + fn next_day(&self) -> Self { + // Temperatura + let next_temperature: f64 = self.temperature_control(); + // Probabilidad de lluvia + let next_rain_probability: f64 = self.rain_probability_control(); + // Resultado efectivo + let next_rained: bool = Self::rain_get_random(next_rain_probability); + + Self::new(next_rained, next_temperature, next_rain_probability) + } + + // Controla como cambia la temperatura del día t+1 según sí llovió en el día t + fn temperature_control(&self) -> f64 { + let next_temperature: f64; + if self.rained { + next_temperature = self.temperature - 1.0; + } else { + // Genera un número aleatorio entre [0, 1) a partir de una distribución uniforme + let val: f64 = StdRng::from_entropy().sample(Standard); + // La P(cambio ±2ºC) = 0.1, asumiendo que P(suba 2 | cambió) = P(disminuya 2 | cambió) = 0.5, + // se tiene que P(suba 2) = P(disminuya 2) = 0.05 + if (0.0..0.05).contains(&val) { + next_temperature = self.temperature + 2.0; + } else if (0.05..0.1).contains(&val) { + next_temperature = self.temperature - 2.0; + } else if (0.1..1.0).contains(&val) { + next_temperature = self.temperature; + } else { + panic!("Unexpected error. Value out of [0, 1)") + } + }; + next_temperature + } + + // Controla como cambia la probabilidad de lluvia del día t+1 según la temperatura del día t + fn rain_probability_control(&self) -> f64 { + let next_rain_probability: f64; + + if self.temperature > 25.0 { + next_rain_probability = f64::min(self.rain_probability + 0.2, 1.0); + } else if self.temperature < 5.0 { + next_rain_probability = f64::max(self.rain_probability - 0.2, 0.0) + } else { + next_rain_probability = self.rain_probability + } + next_rain_probability + } + + // Genera un resultado aleatorio de lluvia para el día siguiente + fn rain_get_random(next_rain_probability: f64) -> bool { + StdRng::from_entropy().sample(Bernoulli::new(next_rain_probability).unwrap()) + } +} + +#[cfg(test)] +mod tests { + // Solo unas básicas. + // Testear correctamente un modelo estocástico es dispendioso y + // creo que va mas allá de los propósitos del ejercicio. + use crate::*; + + #[should_panic] + #[test] + fn invalid_forecast_max_temperature() { + Forecast::new(false, MAX_ALLOWED_TEMPERATURE + 1.0, 0.1); + } + + #[should_panic] + #[test] + fn invalid_forecast_min_temperature() { + Forecast::new(false, MIN_ALLOWED_TEMPERATURE - 1.0, 0.1); + } + + #[should_panic] + #[test] + fn higher_than_valid_probability() { + let temperature = (MAX_ALLOWED_TEMPERATURE + MIN_ALLOWED_TEMPERATURE) / 2.0; + Forecast::new(false, temperature, 1.1); + } + + #[should_panic] + #[test] + fn lower_than_valid_probability() { + let temperature = (MAX_ALLOWED_TEMPERATURE + MIN_ALLOWED_TEMPERATURE) / 2.0; + Forecast::new(false, temperature, -1.0); + } + + #[test] + fn initialize_valid_forecast() { + let temperature = (MAX_ALLOWED_TEMPERATURE + MIN_ALLOWED_TEMPERATURE) / 2.0; + Forecast::new(false, temperature, 1.0); + Forecast::new(true, temperature, 1.0); + Forecast::new(false, temperature, 0.0); + Forecast::new(true, temperature, 0.0); + } +} From fcefcbbba7953245ea0c6d91ecffb56856724c08 Mon Sep 17 00:00:00 2001 From: JosaaXC <114438741+JosaaXc@users.noreply.github.com> Date: Sat, 4 Nov 2023 01:01:03 -0600 Subject: [PATCH 0556/2103] Reto 38 --- .../python/JosaaXC.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/JosaaXC.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/JosaaXC.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/JosaaXC.py new file mode 100644 index 0000000000..b0ec17ae38 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/JosaaXC.py @@ -0,0 +1,35 @@ +def find_sums(numbers: list, target: int)-> list: + def backtracking( start: int, target: int, current_combination: list)-> None: + if target == 0: + combinations.append(current_combination[:]) + return + + for i in range(start, len(numbers)): + if i > start and numbers[i] == numbers[i - 1]: + continue + if numbers[i] > target: + break + + current_combination.append(numbers[i]) + backtracking(i + 1, target - numbers[i], current_combination) + current_combination.pop() + + combinations = [] + backtracking(0, target, []) + return combinations + +def main(): + # numbers = [1, 1,2, 1, 1, 1, 2] + numbers = [1,5,3,2] + target = 6 + combinations = find_sums(numbers, target) + + if combinations: + print(f"Combinaciones que suman {target}:") + for combo in combinations: + print(combo) + else: + print("No se encontraron combinaciones que sumen el objetivo.") + +if __name__ == "__main__": + main() From 3586af9942e2c635e92572250a01ad959a61c178 Mon Sep 17 00:00:00 2001 From: Rdiaz97 <107510814+Rdiaz97@users.noreply.github.com> Date: Sat, 4 Nov 2023 10:26:05 -0400 Subject: [PATCH 0557/2103] Create RafaelDiaz - Reto#0 (fizzbuzz) 1er reto C: --- .../javascript/RafaelDiaz - Reto#0 (fizzbuzz)" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/RafaelDiaz - Reto#0 (fizzbuzz)" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/RafaelDiaz - Reto#0 (fizzbuzz)" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/RafaelDiaz - Reto#0 (fizzbuzz)" new file mode 100644 index 0000000000..82f3b088dd --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/RafaelDiaz - Reto#0 (fizzbuzz)" @@ -0,0 +1,17 @@ + let i=1; + while(i<=100){ + + if(i%3==0 && i%5==0){ + let z ="fizzbuzz"; + console.log(z); + }else if(i%3==0){ + let n="fizz"; + console.log(n); + }else if(i%5==0){ + let m="buzz"; + console.log(m); + }else{ + console.log(i); + } + i++; + } From 0e51a531b775eb584ee3b4bbe30e312d708d9d89 Mon Sep 17 00:00:00 2001 From: Pedro GF Date: Sat, 4 Nov 2023 18:36:53 +0100 Subject: [PATCH 0558/2103] Reto #43 - Javascript --- .../javascript/pedrogf.js" | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/pedrogf.js" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/pedrogf.js" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/pedrogf.js" new file mode 100644 index 0000000000..29236bf644 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/pedrogf.js" @@ -0,0 +1,52 @@ +/* + * 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%. + * 0- 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. + */ + +function weatherSimulation(predictionsDays, temperature, chanceRain) { + let maxTemperature = temperature + let minTemperature = temperature + let nRainyDays = 0 + + for (let d = 0; d < predictionsDays ; d++) { + + // Posibilidad de variadión de temperatura por día + if (Math.floor(Math.random() * 100)<= 10) { + if (Math.floor((Math.random() * 2)) === 0) { // si el valor random es 0 la temp baja + temperature -= 2 + } else { // si el valor no es 0 la temperatura sube + temperature += 2 + } + } + + // Aumento de la posibilidad de lluvia si la temperatura es superior a 25º + if (temperature > 25 && chanceRain <= 80) { + chanceRain += 20 + } else if (temperature < 5 && chanceRain >= 20){ // Si es menor de 5º entonces disminuye. + chanceRain -= 20 + } + + if (temperature > maxTemperature) { maxTemperature = temperature } + if (temperature < minTemperature) { minTemperature = temperature } + if (chanceRain === 100) { + nRainyDays += 1 + temperature-- + } + + console.log(`Probailidades para el día ${ d + 1 } \n -Temperatura: ${temperature}º. \n -Posibilidad de lluvia ${chanceRain}%.\n`) + } + console.log(`Resumen de datos:\n -Temperatura máxima: ${maxTemperature}º.\n -Temperatura mínima: ${minTemperature}º.\n -Días de lluvia: ${nRainyDays}.`) +} + +weatherSimulation(90, 20, 60) \ No newline at end of file From 61c99586325ed700d0784a630a9987b6b83dfece Mon Sep 17 00:00:00 2001 From: Johan Restrepo <62318029+JohanRestrepo19@users.noreply.github.com> Date: Sat, 4 Nov 2023 17:38:10 -0500 Subject: [PATCH 0559/2103] Reto #43 - Typescript. --- .../typescript/johanrestrepo19.ts" | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/typescript/johanrestrepo19.ts" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/typescript/johanrestrepo19.ts" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/typescript/johanrestrepo19.ts" new file mode 100644 index 0000000000..ed867a8681 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/typescript/johanrestrepo19.ts" @@ -0,0 +1,60 @@ +type WeatherCondition = { + temperature: number; + rainChance: number; +}; + +const predictNextDayWheater = ( + currentDay: WeatherCondition, +): WeatherCondition => { + const chance = Math.floor(Math.random() * 10); + let temperature = + chance === 1 + ? currentDay.temperature + 2 + : chance === 2 + ? currentDay.temperature - 2 + : currentDay.temperature; + + const rainChance = + currentDay.rainChance === 100 + ? currentDay.rainChance - 20 + : currentDay.temperature > 25 + ? currentDay.rainChance + 20 + : currentDay.temperature < 5 + ? currentDay.rainChance - 20 + : currentDay.rainChance; + + temperature = currentDay.rainChance === 100 ? temperature - 1 : temperature; + + return { temperature, rainChance }; +}; + +const predictWeather = ( + predictionDays: number, + initWeatherConditions: WeatherCondition = { + temperature: 25, + rainChance: 20, + }, +) => { + let maxTemp = initWeatherConditions.temperature; + let minTemp = initWeatherConditions.temperature; + let rainDaysAmmount = 0; + const weatherConditions: WeatherCondition[] = [initWeatherConditions]; + + for (let day = 0; day <= predictionDays; day++) { + const nextDayConditions = predictNextDayWheater(weatherConditions[day]); + weatherConditions.push(nextDayConditions); + + if (nextDayConditions.temperature > maxTemp) + maxTemp = nextDayConditions.temperature; + + if (nextDayConditions.temperature < minTemp) + minTemp = nextDayConditions.temperature; + + if (nextDayConditions.rainChance === 100) rainDaysAmmount++; + } + + console.table(weatherConditions); + console.log({ maxTemp, minTemp, rainDaysAmmount }); +}; + +predictWeather(50, { temperature: 26, rainChance: 60 }); From 78d0d49d8cae61d30c5e7956d3771cef6ea21121 Mon Sep 17 00:00:00 2001 From: Majinka10 Date: Sat, 4 Nov 2023 17:46:10 -0500 Subject: [PATCH 0560/2103] Reto #37 - Python --- .../python/majinka10.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/majinka10.py diff --git a/Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/majinka10.py b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/majinka10.py new file mode 100644 index 0000000000..1e27e38550 --- /dev/null +++ b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/majinka10.py @@ -0,0 +1,65 @@ +#Tabla de conversion. +#La clave corresponde a su conversión en decimal y el valor a hexadecimal. +conversion={0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, + 9:9, 10:'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F'} + +valores = list(conversion.values()) # Consigo los valores de la tabla para trabajar +# con ellos facilmente luego + +# Conversión de HEX a RGB + +def HEX2RGB(hex:str): + """ + Transforma un color HEX a RGB. + + Args: + - hex (str): Color en formato HEX a convertir. + Returns: + - rgb (list): Lista con el valor de cada uno de los canales (red, blue, green). + """ + + # Obtengo los valores hex correspondientes a cada canal. + red = hex[1:3] + green = hex[3:5] + blue = hex[5:] + + rgb = [] # Inicializo una lista vacía que guardará el valor decimal de cada color. + + # En el siguiente for se itera cada valor hexagecimal de cada canal. + for hexa in red, green, blue: + + # Esta super linea lo que hace es iterar en hexa (valor hexagecimal) y luego + # obtiene el valor decimal de la tabla de conversión, lo multiplica por 16 elevado + # al indice (proceso de conversión de hexagecimal a decimal) y por ultimo lo agrega a la lista rgb. + rgb.append(sum((valores.index(valor) if valor in valores else valor.index(str(valor))) * 16 ** i for i, valor in enumerate(hexa[::-1]))) + + return rgb + +ejemplo_hex = '#000000' +color_rgb = HEX2RGB(ejemplo_hex) +print(f"r: {color_rgb[0]}, g: {color_rgb[1]}, b: {color_rgb[2]}") + +# Conversión de RGB a HEX + +def RGB2HEX(red:int, green:int, blue:int): + """ + Transforma un color RGB a HEX. + + Args: + - red (int): Valor del canal rojo. + - green (int): Valor del canal verde. + - blue (int): Valor del canal azul. + Returns: + - hexadecimal (str): Color en formato HEX. + """ + + hexadecimal = '#' + + for decimal in red, green, blue: + hexadecimal += str(hex(decimal)[2:]) + + return hexadecimal + +ejemplo_rgb = [0, 0, 0] +color_hex = RGB2HEX(ejemplo_rgb[0], ejemplo_rgb[1], ejemplo_rgb[2]) +print(color_hex) From 318b427c5de4516f5f6318a83241547154fd1c37 Mon Sep 17 00:00:00 2001 From: Carlos Esteban Castro <146273220+ccaicedo09@users.noreply.github.com> Date: Sat, 4 Nov 2023 17:57:21 -0500 Subject: [PATCH 0561/2103] Rename ccaicedo.py to ccaicedo09.py --- .../python/ccaicedo09.py" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo.py" => "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo09.py" (100%) diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo09.py" similarity index 100% rename from "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo.py" rename to "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo09.py" From 20c1eca4424bba145bc3c8449018770211aaa6d6 Mon Sep 17 00:00:00 2001 From: GMontalvo404 Date: Sat, 4 Nov 2023 19:22:55 -0500 Subject: [PATCH 0562/2103] Reto #0 - Python --- .../python/gmontalvo404.py" | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/gmontalvo404.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/gmontalvo404.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/gmontalvo404.py" new file mode 100644 index 0000000000..41dc7fd305 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/gmontalvo404.py" @@ -0,0 +1,12 @@ +def solve(): + for i in range(1, 101): + if i % 3 == 0 and i % 5 == 0: + print("FizzBuzz") + elif i % 3 == 0: + print("Fizz") + elif i % 5 == 0: + print("Buzz") + + +if __name__ == '__main__': + solve() From 077de0fd5713463a1c84172fab49d0b5d72ca7d8 Mon Sep 17 00:00:00 2001 From: Marco Torres Date: Sat, 4 Nov 2023 18:22:22 -0700 Subject: [PATCH 0563/2103] Reto #38 - Python --- .../python/marcoatrs.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/marcoatrs.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/marcoatrs.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/marcoatrs.py new file mode 100644 index 0000000000..932a002077 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/marcoatrs.py @@ -0,0 +1,14 @@ +from itertools import combinations +from typing import List + + +def get_sums(list_numbers: List[int], target: int): + results = list() + for size in range(1, len(list_numbers) + 1): + for com in combinations(list_numbers, size): + if sum(com) != target: + continue + results.append(list(com)) + return results + +print(get_sums([1, 5, 3, 2], 6)) From 0c8299adc241f7541ec03c6d8ce407fc03093a88 Mon Sep 17 00:00:00 2001 From: Claudio Rodriguez Herrera Date: Sat, 4 Nov 2023 22:52:56 -0300 Subject: [PATCH 0564/2103] Reto #43 - Python --- .../python/inkhemi.py" | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/inkhemi.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/inkhemi.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/inkhemi.py" new file mode 100644 index 0000000000..e8b6cdfc79 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/inkhemi.py" @@ -0,0 +1,90 @@ +# /* +# * 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. +# */ + +import random + + +def temperatureChange() -> bool: + random_number = random.randint(0, 100) + if random_number >= 0 and random_number <= 10: + return True + else: + return False + + +def temperatureVariation() -> int: + random_number = random.randint(0, 100) + if random_number < 50: + return 2 + elif random_number >= 50: + return -2 + + +def weatherSimulator(temperature: int, rainChance: int, days_prediction: int): + rainy_days = 0 + max_temp = temperature + min_temp = temperature + is_raining = "no está lloviendo" + + for day in range(1, days_prediction + 1): + if temperatureChange(): + temperature += temperatureVariation() + + # Si la temperatura supera el minimo o el máximo, esta los reemplaza + if temperature < min_temp: + min_temp = temperature + elif temperature > max_temp: + max_temp = temperature + + # Si la probabilidad de lluvia es del 100% se le suma un dia de lluvia y se le quita un grado al dia siguiente + if rainChance == 100: + rainy_days += 1 + temperature -= 1 + is_raining = "está lloviendo" + else: + is_raining = "no está lloviendo" + + print(f"Dia {day}, {is_raining}, temperatura: {temperature}") + + # Si la temperatura es mayor a 25 aumenta la probabilidad de lluvia en 20% del dia siguiente + if temperature > 25: + rainChance += 20 + if rainChance > 100: + rainChance = 100 + + # Si la temperatura es menor a 5 disminuye la probabilidad de lluvia en 20% del dia siguiente + if temperature < 5: + rainChance -= 20 + if rainChance < 0: + rainChance = 0 + + print( + f"temperatura máxima: {max_temp}, temperatura mínima: {min_temp}, dias de lluvia: {rainy_days}") + + +while True: + try: + initial_temperature = int( + input('Introduce la temperatura inicial (°C): ')) + initial_rainChance = int( + input('Introduce la probabilidad de lluvia inicial: ')) + days_prediction = int( + input("Introduce el número de días de predicción: ")) + weatherSimulator(initial_temperature, + initial_rainChance, days_prediction) + break + except: + print("Valor invalido") From 23f6a738ec52ff787e8b4c120f1e2c509465d902 Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Sat, 4 Nov 2023 22:06:32 -0700 Subject: [PATCH 0565/2103] reto #43 - python --- .../python/KevinED11.py" | 331 ++++++++++++++++++ 1 file changed, 331 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/KevinED11.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/KevinED11.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/KevinED11.py" new file mode 100644 index 0000000000..4bd3762d65 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/KevinED11.py" @@ -0,0 +1,331 @@ +from typing import NoReturn, Protocol, Iterable, NamedTuple +import random +import functools +import time +import dataclasses +import abc + + +type Number = float | int +type Seconds = Number + + +class InvalidNumberException(Exception): + pass + + +class ProbabilityOutOfRangeException(Exception): + pass + + +def raise_invalid_number_exception(msg: str) -> NoReturn: + raise InvalidNumberException(msg) + + +def raise_probability_out_of_range_exception(msg: str) -> NoReturn: + raise ProbabilityOutOfRangeException(msg) + + +class ITemperatureDataStorage[T](abc.ABC): + def __init__(self) -> None: + self._data: Iterable[T] = [] + + @property + @abc.abstractmethod + def data(self) -> Iterable[T]: + pass + + @data.setter + @abc.abstractmethod + def data(self, *new_data: T) -> None: + pass + + def __getitem__(self, index: int) -> T: + if index >= self.__len__(): + raise IndexError("Index out of range") + + return self._data[index] + + def __len__(self) -> int: + return len(list(self._data)) + + +class TemperatureDataStorageInMemory(ITemperatureDataStorage[Number]): + @property + def data(self) -> Iterable[Number]: + return self._data + + @data.setter + def data(self, *new_data: Number) -> None: + self._data = new_data + + +@dataclasses.dataclass(frozen=True) +class UserSetup: + initial_temp: Number + probability_rain: Number + days_prediction: int + + +@dataclasses.dataclass(frozen=True) +class Setup: + temperature_storage: ITemperatureDataStorage[Number] + + +class ClimateSimulatorFn(Protocol): + def __call__(self, user_setup: UserSetup, setup: Setup) -> None: + ... + + +@functools.lru_cache +def get_cities() -> list[str]: + return [ + "Bogotá", + "Medellín", + "Cali", + "Barranquilla", + "Cartagena", + "Bucaramanga", + "Santa Marta", + "Manizales", + "Villavicencio", + ] + + +def choice_random_city() -> str: + cities = get_cities() + + return random.choice(cities) + + +def start_day_simulation(duration_seconds: Seconds) -> None: + time.sleep(duration_seconds) + + +def calculate_probability(probability: Number = 10) -> bool: + if probability > 1: + probability = probability / 100 + + if probability > 100: + probability = 100 + + return random.random() <= probability + + +change_temperature_with_10_percent_probability_partial_fn = functools.partial( + calculate_probability, probability=10 +) + +is_raining_partial_fn = functools.partial(calculate_probability) + + +class TemperatureOperationFn(Protocol): + def __call__(self, initial_value: Number, quantity: Number) -> Number: + pass + + +class TemperatureOperationPartialFn(Protocol): + def __call__(self, initial_value: Number) -> Number: + pass + + +def increment(initial_value: Number, quantity: Number) -> Number: + return initial_value + quantity + + +def decrement(initial_value: Number, quantity: Number) -> Number: + return initial_value - quantity + + +increase_temperature_by_2_partial_fn = functools.partial(increment, quantity=2) +decrease_temperature_by_2_partial_fn = functools.partial(decrement, quantity=2) +decrease_temperature_by_1_partial_fn = functools.partial(decrement, quantity=1) +decrease_days_by_1_partial_fn = functools.partial(decrement, quantity=1) +increase_rainy_days_by_1_partial_fn = functools.partial(increment, quantity=1) + +increase_rain_probability_by_20_partial_fn = functools.partial(increment, quantity=20) +decrease_rain_probability_by_20_partial_fn = functools.partial(decrement, quantity=20) + + +def random_temperature_operation() -> TemperatureOperationPartialFn: + temperature_operations = [ + increase_temperature_by_2_partial_fn, + decrease_temperature_by_2_partial_fn, + ] + + return random.choice(temperature_operations) + + +def determinate_actual_temperature( + temperature: Number, probability_rain: Number +) -> Number: + actual_temperature = temperature + temperature_operation = random_temperature_operation() + + if change_temperature_with_10_percent_probability_partial_fn(): + actual_temperature = temperature_operation(initial_value=actual_temperature) + + if probability_rain == 100: + actual_temperature = decrease_temperature_by_1_partial_fn( + initial_value=actual_temperature + ) + + return actual_temperature + + +def determinate_probability_rain( + temperature: Number, probability_rain: Number +) -> Number: + actual_temperature = temperature + probability_rain = probability_rain + + if actual_temperature > 25: + probability_rain = increase_rain_probability_by_20_partial_fn( + initial_value=probability_rain + ) + + if actual_temperature < 5: + probability_rain = decrease_rain_probability_by_20_partial_fn( + initial_value=probability_rain + ) + + return probability_rain + + +class Probabilities(NamedTuple): + actual_temperature: Number + probability_rain: Number + + +def determinate_probabilities( + temperature: Number, probability_rain: Number +) -> Probabilities: + actual_temperature = determinate_actual_temperature(temperature, probability_rain) + probability_rain = determinate_probability_rain(temperature, probability_rain) + + return Probabilities( + actual_temperature=actual_temperature, probability_rain=probability_rain + ) + + +def calculate_min_temperature(temperatures: Iterable[Number]) -> Number: + return min(temperatures, default=None) + + +def calculate_max_temperature(temperatures: Iterable[Number]) -> Number: + return max(temperatures, default=None) + + +def validate_climate_simulator_fn(fn: ClimateSimulatorFn) -> ClimateSimulatorFn: + @functools.wraps(fn) + def wrapper(user_setup: UserSetup, setup: Setup) -> None: + if not isinstance(user_setup, UserSetup): + raise TypeError("setup debe ser una instancia de UserSetup") + + if not isinstance(setup, Setup): + raise TypeError("setup debe ser una instancia de Setup") + + if 0 < user_setup.probability_rain > 100: + raise_probability_out_of_range_exception( + msg="La probabilidad de lluvia debe estar entre 0 y 100" + ) + if not isinstance(user_setup.days_prediction, int): + raise_invalid_number_exception( + msg="El número de días de predicción debe ser un número entero" + ) + + if not isinstance(user_setup.initial_temp, (int, float)): + raise_invalid_number_exception( + msg="La temperatura inicial debe ser un número de punto flotante o entero" + ) + + fn(user_setup=user_setup, setup=setup) + + return wrapper + + +def print_temperatures(min_temperature: Number, max_temperature: Number) -> None: + print(f"la temperatura máxima es: {max_temperature}") + print(f"la temperatura mínima es: {min_temperature}") + + +def print_rainy_days(days: int) -> None: + print(f"hay {days} dias de lluvia") + + +@dataclasses.dataclass(frozen=True) +class ClimateSimulatorResult: + rainy_days: int + days_prediction: int + min_temperature: Number + max_temperature: Number + + +def print_climate_simulator_result(result: ClimateSimulatorResult) -> None: + if result.days_prediction == result.rainy_days: + print_rainy_days(days=result.rainy_days) + + print_temperatures( + min_temperature=result.min_temperature, max_temperature=result.max_temperature + ) + print(f"hay {result.rainy_days} dias de lluvia") + + +@validate_climate_simulator_fn +def climate_simulator(user_setup: UserSetup, setup: Setup) -> None: + days = user_setup.days_prediction + actual_temp = user_setup.initial_temp + probability_rain = user_setup.probability_rain + rainy_days = 0 + + temperature_storage = setup.temperature_storage + max_temp = calculate_max_temperature(temperatures=temperature_storage.data) + min_temp = calculate_min_temperature(temperatures=temperature_storage.data) + city = choice_random_city() + + while days > 0: + print(f"la temperatura de hóy es: {actual_temp} en {city}") + start_day_simulation(duration_seconds=10) + + actual_temp, probability_rain = determinate_probabilities( + temperature=actual_temp, probability_rain=probability_rain + ) + temperature_storage.data = actual_temp + + if is_raining_partial_fn(probability=probability_rain): + print("lloviendo") + actual_temp = decrease_temperature_by_1_partial_fn( + initial_value=actual_temp + ) + rainy_days = increase_rainy_days_by_1_partial_fn(initial_value=rainy_days) + + days = decrease_days_by_1_partial_fn(initial_value=days) + + print_climate_simulator_result( + ClimateSimulatorResult( + rainy_days=rainy_days, + days_prediction=days, + min_temperature=min_temp, + max_temperature=max_temp, + ) + ) + + +class Config(NamedTuple): + user_setup: UserSetup + setup: Setup + + +def execute(simulator: ClimateSimulatorFn, config: Config) -> None: + simulator(user_setup=config.user_setup, setup=config.setup) + + +def main() -> None: + user_setup = UserSetup(initial_temp=23, probability_rain=60, days_prediction=5) + setup = Setup(temperature_storage=TemperatureDataStorageInMemory()) + config = Config(user_setup=user_setup, setup=setup) + execute(simulator=climate_simulator, config=config) + + +if __name__ == "__main__": + main() From 82b38aafb672b8cbcfce9f8116aa291d9d4a0286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Sun, 5 Nov 2023 10:38:25 +0100 Subject: [PATCH 0566/2103] feat: Add weather forecasting function to project --- .../swift/didacdev.swift" | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/swift/didacdev.swift" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/swift/didacdev.swift" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/swift/didacdev.swift" new file mode 100644 index 0000000000..88d2b29875 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/swift/didacdev.swift" @@ -0,0 +1,81 @@ +import Foundation + +func weatherForecast(temperature: Double, rainProb: Double, days: Int) { + + var temperatures: [Double] = [temperature] + var rainProbs: [Double] = [rainProb] + + for _ in 1...days { + + var newTemperature: Double = 0.0 + var newRainProb: Double = 0.0 + + if rainProbs.last! == 1.0 { + newTemperature = temperatures.last! - 1.0 + } else { + newTemperature = temperatureChange(temperature: temperatures.last!) + } + + if newTemperature > 20 { + if rainProbs.last! <= 0.8 { + newRainProb = rainProbs.last! + 0.2 + } else { + newRainProb = rainProbs.last! + } + } else if newTemperature < 5 { + if rainProbs.last! >= 0.2 { + newRainProb = rainProbs.last! - 0.2 + } else { + newRainProb = rainProbs.last! + } + } else { + newRainProb = rainProbs.last! + } + + temperatures.append(newTemperature) + rainProbs.append(newRainProb) + } + + for day in 0.. Day \(day + 1): la temperatura es de \(temperatures[day])º y la probabilidad de lluvia del \(round(rainProbs[day]*100))%") + } + + if let temperature = temperatures.max() { + print("La temperatura máxima es de \(temperature)º") + } + + if let temperature = temperatures.min() { + print("La temperatura mínima es de \(temperature)º") + } + + var rainingDays = 0 + rainProbs.forEach { (rainProb) in + if rainProb == 1.0 { + rainingDays += 1 + } + } + + print("Lloverá \(rainingDays) días") + +} + +func temperatureChange(temperature: Double) -> Double { + + let randomNumber = Double.random(in: 0..<1) + + if randomNumber <= 0.1 { + + return temperature + 2 + + } else if randomNumber <= 0.2 { + + return temperature - 2 + + } else { + + return temperature + + } +} + +weatherForecast(temperature: 20, rainProb: 0.8, days: 20) From 4a209de4b35749a1d523f6c344fff3b2405b1db0 Mon Sep 17 00:00:00 2001 From: Jose <77416168+JoseAntonioRuizGarcia@users.noreply.github.com> Date: Sun, 5 Nov 2023 10:08:19 +0000 Subject: [PATCH 0567/2103] Reto #3 - Python --- .../python/JoseAntonioRuizGarcia.py" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/JoseAntonioRuizGarcia.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/JoseAntonioRuizGarcia.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/JoseAntonioRuizGarcia.py" new file mode 100644 index 0000000000..5d56e6e8d8 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/JoseAntonioRuizGarcia.py" @@ -0,0 +1,34 @@ +import random + +def generatePassword(length: int = 8, with_upper: bool = True, with_number: bool = True, with_symbol: bool = True) -> str: + chars = [chr(letra) for letra in range(ord('a'), ord('z') + 1)] + + if with_upper: + upper_letters = [str.upper(ch) for ch in chars] + chars += upper_letters + + if with_number: + numbers = str(list(range(10))) + chars += numbers + + if with_symbol: + symbols = [ + '!', '@', '#', '$', '%', '&', '*', '?', '+', '-', '=', '_', '|', '/', '\\', '^', '~', '<', '>', ':', + ';', ',', '.', '(', ')', '[', ']', '{', '}', '"', "'", '`', '¡', '¿' + ] + chars += symbols + + if (length >= 6) & (length <= 16): + pwd = [] + for _ in range(length): + pwd.append(random.choice(chars)) + pwd = ''.join(pwd) + + else: + pwd = '¡Error! La longitud de la contraseña debe ser entre 8 y 16' + + return pwd + +if __name__=='__main__': + password = generatePassword(length=16, with_upper=True, with_number=False, with_symbol=True) + print(password) From f100ae031fbc224fa4172fd024fc66915a2284f5 Mon Sep 17 00:00:00 2001 From: Jose <77416168+JoseAntonioRuizGarcia@users.noreply.github.com> Date: Sun, 5 Nov 2023 12:07:46 +0000 Subject: [PATCH 0568/2103] Reto #4 - Python --- .../python/JoseAntonioRuizGarcia.py | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/JoseAntonioRuizGarcia.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/JoseAntonioRuizGarcia.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/JoseAntonioRuizGarcia.py new file mode 100644 index 0000000000..0c2b11b91d --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/JoseAntonioRuizGarcia.py @@ -0,0 +1,57 @@ +def isPrimeNumber(number: int) -> bool: + list_numbers = range(1, number) + number_control = 1 + is_prime_number = False + + for num in list_numbers: + number_control *= num + + number_control += 1 + if number_control % number == 0: + is_prime_number = True + + return is_prime_number + +def isFibonacciNumber(number: int) -> bool: + fibonacci_numbers = [1, 2] + is_fibonacci = False + + while fibonacci_numbers[-1] < number: + fibonacci_numbers.append(sum(fibonacci_numbers[-2:])) + + if number in fibonacci_numbers: + is_fibonacci = True + + return is_fibonacci + +def isEvenNumber(number: int) -> bool: + is_even = False + + if number % 2 == 0: + is_even = True + + return is_even + +def controlNumber(number: int) -> None: + answer = f'El número {number} ' + + if isPrimeNumber(number): + answer += 'es primo, ' + else: + answer += 'no es primo, ' + + if isFibonacciNumber(number): + answer += 'es Fibonacci y ' + else: + answer += 'no es Fibonacci y ' + + if isEvenNumber(number): + answer += 'es par.' + else: + answer += 'es impar.' + + print(answer) + +if __name__=='__main__': + number = int(input('Introduce un número: ')) + controlNumber(number) From f3bd18a3e13444676c1c9ec88efce83f9e8338b1 Mon Sep 17 00:00:00 2001 From: Jose <77416168+JoseAntonioRuizGarcia@users.noreply.github.com> Date: Sun, 5 Nov 2023 12:52:21 +0000 Subject: [PATCH 0569/2103] Reto #6 - Python --- .../python/JoseAntonioRuizGarcia.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/JoseAntonioRuizGarcia.py diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/JoseAntonioRuizGarcia.py b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/JoseAntonioRuizGarcia.py new file mode 100644 index 0000000000..557dcf3bf9 --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/JoseAntonioRuizGarcia.py @@ -0,0 +1,36 @@ +''' + Diccionario con las Reglas del juego + Las claves del diccionario ganan a los valores +''' +rules = { + '🗿': ['🦎', '✂️'], + '📄': ['🗿', '🖖'], + '✂️': ['📄', '🦎'], + '🦎': ['🖖', '📄'], + '🖖': ['✂️', '🗿'] +} + +def runGame(game: list) -> None: + points = [] + for round in game: + if round[0] == round[1]: + result_round = [0, 0] + elif round[0] in rules.get(round[1]): + result_round = [0, 1] + else: + result_round = [1, 0] + + points.append(result_round) + + points_pj1 = sum([point[0] for point in points]) + points_pj2 = sum([point[1] for point in points]) + + if points_pj1 == points_pj2: + print('Tie') + elif points_pj1 > points_pj2: + print('Player 1') + else: + print('Player 2') + +if __name__ == '__main__': + runGame([("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")]) From 4477fca70ca62f563051005d4549abcb6130d98d Mon Sep 17 00:00:00 2001 From: bertilein <149420545+bertilein@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:25:05 +0100 Subject: [PATCH 0570/2103] reto #0 - python reto #0 - python --- .../python/bertilein.py" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/bertilein.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/bertilein.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/bertilein.py" new file mode 100644 index 0000000000..32659324e8 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/bertilein.py" @@ -0,0 +1,31 @@ +""" + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". +""" + + +def print_fixx_buzz(): + + cadena = "" + + for i in range(100): + if ((i+1)%3 == 0) and ((i+1)%5 == 0): + cadena="fizzbuzz" + elif ((i+1)%3 == 0) : + cadena="fizz" + elif ((i+1)%5 == 0) : + cadena="buzz" + + + else : + cadena=i+1 + + print(cadena) + + + +print_fixx_buzz() From ac7c5022643948638dd202e42a57d7f2a3d2ae4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danniela=20Rodr=C3=ADguez?= Date: Sun, 5 Nov 2023 14:26:03 -0400 Subject: [PATCH 0571/2103] Reto #0 Python --- .../python/DanniRodrJ.py" | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/DanniRodrJ.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/DanniRodrJ.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/DanniRodrJ.py" new file mode 100644 index 0000000000..11ea670b7a --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/DanniRodrJ.py" @@ -0,0 +1,18 @@ +''' +Escribe un programa que muestre por consola (con un print) los +números de 1 a 100 (ambos incluidos y con un salto de línea entre +cada impresión), sustituyendo los siguientes: +- Múltiplos de 3 por la palabra "fizz". +- Múltiplos de 5 por la palabra "buzz". +- Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". +''' + +for i in range(1, 101): + if i % 3 == 0 and i % 5 == 0: + print('fizzbuzz') + elif i % 3 == 0: + print('fizz') + elif i % 5 == 0: + print('buzz') + else: + print(i) \ No newline at end of file From 331bd0979ba1fa39cc2165e380024accafd99fdc Mon Sep 17 00:00:00 2001 From: Isaac Morcillo Garcia Date: Sun, 5 Nov 2023 19:59:51 +0100 Subject: [PATCH 0572/2103] Reto #34 - c# --- .../Reto #34 - EL TXT [Media]/c#/isaacus98.cs | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Retos/Reto #34 - EL TXT [Media]/c#/isaacus98.cs diff --git a/Retos/Reto #34 - EL TXT [Media]/c#/isaacus98.cs b/Retos/Reto #34 - EL TXT [Media]/c#/isaacus98.cs new file mode 100644 index 0000000000..63d5b6cddf --- /dev/null +++ b/Retos/Reto #34 - EL TXT [Media]/c#/isaacus98.cs @@ -0,0 +1,85 @@ +using System.IO; + +namespace RetosProgramacion +{ +/* + * Crea un programa capaz de interactuar con un fichero TXT. + * IMPORTANTE: El fichero TXT NO debe subirse como parte de la corrección. + * Únicamente el código. + * + * - Si no existe, debe crear un fichero llamado "text.txt". + * - Desde el programa debes ser capaz de introducir texto por consola y guardarlo + * en una nueva línea cada vez que se pulse el botón "Enter". + * - Si el fichero existe, el programa tiene que dar la opción de seguir escribiendo + * a continuación o borrar su contenido y comenzar desde el principio. + * - Si se selecciona continuar escribiendo, se tiene que mostrar por consola + * el texto que ya posee el fichero. + */ + internal class Program + { + static void Main(string[] args) + { + string pathFile = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\text.txt"; + string? option; + string? text; + + if (File.Exists(pathFile)) + { + Console.WriteLine("Pulse \"1\" para seguir escribiendo contenido en el archivo text.txt"); + Console.WriteLine("Pulse \"2\" para borrar el contenido del archivo text.txt"); + + while ((option = Console.ReadLine()) != "1" && option != "2") + { + Console.WriteLine("El valor insertado es incorrecto."); + Console.WriteLine("Pulse \"1\" para seguir escribiendo contenido en el archivo text.txt"); + Console.WriteLine("Pulse \"2\" para borrar el contenido del archivo text.txt"); + } + + Console.WriteLine("Escriba el texto que quiera o escriba \"Exit\" para salir."); + + if (option == "1") + { + Console.WriteLine(); + ReadTextFile(pathFile); + } + else + { + WriteTextFile(pathFile, string.Empty); + } + + } + else + { + FileStream fs = File.Create(pathFile); + fs.Close(); + + Console.WriteLine("Escriba el texto que quiera o escriba \"Exit\" para salir."); + } + + while ((text = Console.ReadLine()) != "Exit") + { + if (text != null) + WriteTextFile (pathFile, text, true); + } + + } + + private static void ReadTextFile(string pathFile) + { + using StreamReader reader = new StreamReader(pathFile); + Console.WriteLine(reader.ReadToEnd()); + } + + private static void WriteTextFile(string path, string text, bool deleteContent = false) + { + using StreamWriter writer = new StreamWriter(path, deleteContent); + { + if (!deleteContent) + writer.Write(text); + else + writer.WriteLine(text); + + } + } + } +} \ No newline at end of file From b8fc18fd817bfdaccef770fb4c22cfe81ba46e89 Mon Sep 17 00:00:00 2001 From: Jose <77416168+JoseAntonioRuizGarcia@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:29:05 +0000 Subject: [PATCH 0573/2103] Reto #7 - Python --- .../python/JoseAntonioRuizGarcia.py | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/JoseAntonioRuizGarcia.py diff --git a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/JoseAntonioRuizGarcia.py b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/JoseAntonioRuizGarcia.py new file mode 100644 index 0000000000..755c75b044 --- /dev/null +++ b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/JoseAntonioRuizGarcia.py @@ -0,0 +1,142 @@ +quiz_harry_potter = { + 'Pregunta 1': { + 'texto': '¿Qué cualidad valoras más?', + 'opciones': { + 1: { + 'texto': 'Opción 1: Coraje', + 'respuesta': 'Gryffindor' + }, + 2: { + 'texto': 'Opción 2: Ambición', + 'respuesta': 'Slytherin' + }, + 3: { + 'texto': 'Opción 3: Lealtad', + 'respuesta': 'Hufflepuff' + }, + 4: { + 'texto': 'Opción 4: Intelecto', + 'respuesta': 'Ravenclaw' + } + } + }, + 'Pregunta 2': { + 'texto': 'Elige una mascota mágica:', + 'opciones': { + 1: { + 'texto': 'Opción 1: León', + 'respuesta': 'Gryffindor' + }, + 2: { + 'texto': 'Opción 2: Serpiente', + 'respuesta': 'Slytherin' + }, + 3: { + 'texto': 'Opción 3: Tejón', + 'respuesta': 'Hufflepuff' + }, + 4: { + 'texto': 'Opción 4: Águila', + 'respuesta': 'Ravenclaw' + } + } + }, + 'Pregunta 3': { + 'texto': '¿Qué tipo de libros prefieres?', + 'opciones': { + 1: { + 'texto': 'Opción 1: Aventuras emocionantes', + 'respuesta': 'Gryffindor' + }, + 2: { + 'texto': 'Opción 2: Misterio y astucia', + 'respuesta': 'Slytherin' + }, + 3: { + 'texto': 'Opción 3: Historias reconfortantes', + 'respuesta': 'Hufflepuff' + }, + 4: { + 'texto': 'Opción 4: Conocimiento profundo', + 'respuesta': 'Ravenclaw' + } + } + }, + 'Pregunta 4': { + 'texto': 'Elige una asignatura favorita:', + 'opciones': { + 1: { + 'texto': 'Opción 1: Defensa Contra las Artes Oscuras', + 'respuesta': 'Gryffindor' + }, + 2: { + 'texto': 'Opción 2: Pociones', + 'respuesta': 'Slytherin' + }, + 3: { + 'texto': 'Opción 3: Cuidado de Criaturas Mágicas', + 'respuesta': 'Hufflepuff' + }, + 4: { + 'texto': 'Opción 4: Adivinación', + 'respuesta': 'Ravenclaw' + } + } + }, + 'Pregunta 5': { + 'texto': '¿Cuál es tu color favorito?', + 'opciones': { + 1: { + 'texto': 'Opción 1: Rojo', + 'respuesta': 'Gryffindor' + }, + 2: { + 'texto': 'Opción 2: Verde', + 'respuesta': 'Slytherin' + }, + 3: { + 'texto': 'Opción 3: Amarillo', + 'respuesta': 'Hufflepuff' + }, + 4: { + 'texto': 'Opción 4: Azul', + 'respuesta': 'Ravenclaw' + } + } + } +} + +def quizHarryPotter() -> None: + houses = ['Gryffindor', 'Slytherin' , 'Hufflepuff', 'Ravenclaw'] + houses_count = [] + answers = [] + + for question in quiz_harry_potter: + print(question) + print(quiz_harry_potter[question].get('texto')) + + for option in quiz_harry_potter[question].get('opciones'): + print(quiz_harry_potter[question]['opciones'][option].get('texto')) + + validation = range(1, 5) + option_selected = 0 + + while option_selected not in validation: + option_selected = input('Introduce una respuesta: ') + + if option_selected.isnumeric(): + option_selected = int(option_selected) + + answers.append(quiz_harry_potter[question]['opciones'][option_selected].get('respuesta')) + print('') + + for house in houses: + count = answers.count(house) + houses_count.append([house, count]) + houses_sort = sorted(houses_count, key=lambda x: x[1], reverse=True) + house_selected = houses_sort[0][0] + + print(f'El sombrero te ha asignado la casa {house_selected}') + +if __name__ == '__main__': + quizHarryPotter() From a7edb008116ffd582254ae06d30027be92baa712 Mon Sep 17 00:00:00 2001 From: cesarjv Date: Sun, 5 Nov 2023 15:56:11 -0400 Subject: [PATCH 0574/2103] Reto #23 - Java --- .../java/cesarjv.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Retos/Reto #23 - LA BASE DE DATOS [Media]/java/cesarjv.java diff --git a/Retos/Reto #23 - LA BASE DE DATOS [Media]/java/cesarjv.java b/Retos/Reto #23 - LA BASE DE DATOS [Media]/java/cesarjv.java new file mode 100644 index 0000000000..3f85919f1b --- /dev/null +++ b/Retos/Reto #23 - LA BASE DE DATOS [Media]/java/cesarjv.java @@ -0,0 +1,32 @@ +import java.sql.*; + +public class cesarjv { + public static void main(String[] args) { + try(Connection conn=getInstance(); + Statement stmt=conn.createStatement(); + ResultSet rs=stmt.executeQuery("SELECT * FROM challenges")){ + + while(rs.next()){ + System.out.print(rs.getInt(1)); + System.out.print(" | "); + System.out.print(rs.getString(2)); + System.out.print(" | "); + System.out.print(rs.getString(3)); + System.out.print(" | "); + System.out.println(rs.getString(4)); + } + + } catch (SQLException e) { + e.printStackTrace(); + } + } + + private static Connection getInstance() throws SQLException { + final String url="jdbc:mysql://mysql-5707.dinaserver.com:3306/moure_test?serverTimezone=America/Caracas"; + final String username="mouredev_read"; + final String password="mouredev_pass"; + Connection connection = null; + connection = DriverManager.getConnection(url, username, password); + return connection; + } +} From 950510b72afa482fdf096ded575101f2c7096c4d Mon Sep 17 00:00:00 2001 From: zarrok Date: Sun, 5 Nov 2023 20:36:44 -0500 Subject: [PATCH 0575/2103] Create Zarrok2112.py --- .../python/Zarrok2112.py" | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/Zarrok2112.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/Zarrok2112.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/Zarrok2112.py" new file mode 100644 index 0000000000..733631a14b --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/Zarrok2112.py" @@ -0,0 +1,109 @@ +# /* +# * 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. +# */ + +import random + +## Initial conditions +def getStartInputs(): + ## temperature input + while True: + try: + initialTemperature = int(input('Introduce la temperatura inicial (ºC): ')) + if -50 <= initialTemperature <= 60: + break + else: + print("La temperatura inicial debe estar entre -50 y 60.") + except ValueError: + print("La temperatura inicial debe ser un número entero.") + ## rain chance input + while True: + try: + initialRainChance = int(input('Introduce la probabilidad de lluvia inicial: ')) + if 0 <= initialRainChance <= 100: + break + else: + print("La probabilidad de lluvia inicial debe estar entre 0 y 100.") + except ValueError: + print("La probabilidad de lluvia inicial debe ser un número entero.") + ## days prediction input + while True: + try: + days_prediction = int(input("Introduce el número de días de predicción: ")) + if days_prediction >= 0: + break + else: + print("El número de días de predicción debe ser un número entero no negativo.") + except ValueError: + print("El número de días de predicción debe ser un número entero.") + + return initialTemperature, initialRainChance, days_prediction + +## temperature change probability +def temperatureChange(): + rand = random.randint(0, 100) + + if rand >= 0 and rand <= 10: + rand = random.choice([0, 1]) + if rand == 0: + return 2 + return -2 + return False + + +def oracule_app(): + initialTemperature, initialRainChance, days_prediction = getStartInputs() + + rainyDays = 0 + + temperature = initialTemperature + rainChance = initialRainChance + + minTemperature = initialTemperature + maxTemperature = initialTemperature + + + for day in range(1, days_prediction + 1): + temperatureChangeValue = temperatureChange() + if temperatureChangeValue: + temperature += temperatureChangeValue + ## temperature change + if temperature > 25: + rainChance += 20 + if temperature < 5: + rainChance -= 20 + ##rain chances + if rainChance >= 100: + rainyDays += 1 + temperature -= 1 + ## temperature change in max and min + if temperature > maxTemperature: + maxTemperature = temperature + if temperature < minTemperature: + minTemperature = temperature + + + print("\n") + print(" RESULTADOS ") + print("----------------------------------------------------") + print(f"Días de lluvia: {rainyDays}") + print(f"Temperatura mínima: {minTemperature} ºC") + print(f"Temperatura máxima: {maxTemperature} ºC") + print("\n") + + + +if __name__ == '__main__': + oracule_app() From 7f6f69208a82ff447a974c47ca428a824cbe2b41 Mon Sep 17 00:00:00 2001 From: Rdiaz97 <107510814+Rdiaz97@users.noreply.github.com> Date: Sun, 5 Nov 2023 21:42:20 -0400 Subject: [PATCH 0576/2103] Create RafaelDiaz - reto#1 lenguaje hacker --- .../javascript/RafaelDiaz - reto#1" | 167 ++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/RafaelDiaz - reto#1" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/RafaelDiaz - reto#1" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/RafaelDiaz - reto#1" new file mode 100644 index 0000000000..7417c5a3fb --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/RafaelDiaz - reto#1" @@ -0,0 +1,167 @@ + + + + + + Reto #1 + + +
+ + +
+ + + + From a4050cf3a6e57ba344bed11e64920beb15b7e0e5 Mon Sep 17 00:00:00 2001 From: Rdiaz97 <107510814+Rdiaz97@users.noreply.github.com> Date: Sun, 5 Nov 2023 21:49:24 -0400 Subject: [PATCH 0577/2103] RafaelDiaz - Reto#0 --- .../html-css-js/Reto#0" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/html-css-js/Reto#0" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/html-css-js/Reto#0" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/html-css-js/Reto#0" new file mode 100644 index 0000000000..dae499bc18 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/html-css-js/Reto#0" @@ -0,0 +1,29 @@ + + + + + + Reto #0 + + + + + From b4e0b53fae5330b0a2ba5a8c40f9548931cbc348 Mon Sep 17 00:00:00 2001 From: Rdiaz97 <107510814+Rdiaz97@users.noreply.github.com> Date: Sun, 5 Nov 2023 21:50:27 -0400 Subject: [PATCH 0578/2103] Add files via upload --- .../html-js/reto#1.html" | 167 ++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/html-js/reto#1.html" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/html-js/reto#1.html" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/html-js/reto#1.html" new file mode 100644 index 0000000000..9408726c60 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/html-js/reto#1.html" @@ -0,0 +1,167 @@ + + + + + + Reto #1 + + +
+ + +
+ + + + \ No newline at end of file From 3e17ff97b81e84869da46c947445556d389dfeab Mon Sep 17 00:00:00 2001 From: Emill Date: Sun, 5 Nov 2023 22:04:59 -0500 Subject: [PATCH 0579/2103] resuelto reto fizz buzz con c# --- .../c#/Lemito66.cs" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/Lemito66.cs" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/Lemito66.cs" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/Lemito66.cs" new file mode 100644 index 0000000000..25b4c95f6f --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/Lemito66.cs" @@ -0,0 +1,17 @@ +// See https://aka.ms/new-console-template for more information +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ + +for (int i = 1; i <= 100; i++) +{ + if (i % 3 == 0 && i % 5 == 0) Console.WriteLine("fizzbuzz"); + else if (i % 3 == 0) Console.WriteLine("fizz"); + else if (i % 5 == 0) Console.WriteLine("buzz"); + else Console.WriteLine(i); +} \ No newline at end of file From 9ab3c163047ef8c46070d767a3c1c1d59bf6972e Mon Sep 17 00:00:00 2001 From: Carlos Esteban Castro <146273220+ccaicedo09@users.noreply.github.com> Date: Sun, 5 Nov 2023 23:09:38 -0500 Subject: [PATCH 0580/2103] Update ccaicedo09.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Un cambio para optimización y una pequeña mejora visual. --- .../python/ccaicedo09.py" | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo09.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo09.py" index 7df8199fb3..f5a35510b4 100644 --- "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo09.py" +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ccaicedo09.py" @@ -67,15 +67,15 @@ def simulador(self): if self.temperatura > self.temperatura_max: self.temperatura_max = self.temperatura - print(f"Día: {dia} Temperatura: {self.temperatura} Lloverá: {'Sí' if lluvia else 'No'}") + print(f"Día: {dia} | Temperatura: {self.temperatura}°C | Lloverá: {'Sí' if lluvia else 'No'}") #Aplicar el cambio de temperatura a la temperatura del día siguiente self.temperatura += cambio_temperatura - print(f"\nTemperatura mínima: {self.temperatura_min}°C") - print(f"Temperatura máxima: {self.temperatura_max}°C") - print(f"Días de lluvia: {self.dias_de_lluvia}") + print(f"\nTemperatura mínima: {self.temperatura_min}°C\n" + f"Temperatura máxima: {self.temperatura_max}°C\n" + f"Días de lluvia: {self.dias_de_lluvia}") if __name__ == "__main__": From c0fdd899b1e95507e3a637fe6b73f1395e232f87 Mon Sep 17 00:00:00 2001 From: pyRamsd Date: Mon, 6 Nov 2023 09:19:57 -0500 Subject: [PATCH 0581/2103] Reto #42 - python --- .../python/pyramsd.py" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/pyramsd.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/pyramsd.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/pyramsd.py" new file mode 100644 index 0000000000..5890339838 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/pyramsd.py" @@ -0,0 +1,36 @@ +def Colision(pa, sa, pb, sb): + xa, ya = pa + xb, yb = pb + vxa, vya = sa + vxb, vyb = sb + + if vxa - vxb == 0: + if xa == xb: + tx = 0 + else: + return "No se encontrarán" + else: + tx = (xb - xa) / (vxa - vxb) + + + if vya - vyb == 0: + if ya == yb: + ty = 0 + else: + return "No se encontrarán" + else: + ty = (yb - ya) / (vya - vyb) + + + if tx == ty: + t = tx + x = xa + vxa * tx + y = ya + vya * ty + return f"Se colisionarán en el punto ({x}, {y}) en un tiempo de {t}." + else: + return "No se encontrarán" + + +print(Colision((5, 0), (0, 1), (0, 5), (1, 0))) +print(Colision((2, 0), (0, 1), (0, 2), (1, 0))) +print(Colision((0, 0), (10, 5), (100, 50), (-5, -2.5))) From c0a8ff6a06124880be67fa23dd53c62a3b7f966a Mon Sep 17 00:00:00 2001 From: Oscar Hernandez Date: Mon, 6 Nov 2023 09:19:08 -0600 Subject: [PATCH 0582/2103] Solucion ejercicio #4 --- .../python/oscar503sv.py | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/oscar503sv.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/oscar503sv.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/oscar503sv.py new file mode 100644 index 0000000000..ca50fd6c6d --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/oscar503sv.py @@ -0,0 +1,50 @@ +''' +/* + * Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. + * Ejemplos: + * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" + * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" + */ +''' + +def es_primo(numero: int) -> bool: + if numero <= 1: + return False # Los números menores o iguales a 1 no son primos + + if numero <= 3: + return True # 2 y 3 son primos + + if numero % 2 == 0 or numero % 3 == 0: + return False # Los múltiplos de 2 o 3 no son primos + + i = 5 + while i * i <= numero: + if numero % i == 0 or numero % (i + 2) == 0: + return False # Si n es divisible por i o i+2, no es primo + i += 6 + + return True + +def es_fibonacci(numero: int) -> bool: + a, b = 0, 1 + while a < numero: + a, b = b, a + b + if a == numero: + return True + else: + return False + +def es_par(numero: int) -> bool: + if numero % 2 == 0: + return True + return False + +def main(): + try: + num = int(input("Ingrese un número: ")) + print(f"""El número {num} es primo: {es_primo(num)} \nEl número {num} es fibonacci: {es_fibonacci(num)} \nEl número {num} es par: {es_par(num)}""") + except: + print("Entrada incorrecta") + +if __name__ == "__main__": + main() From 1fc9a7254ba5274dd4032938645c97b7c151e8cf Mon Sep 17 00:00:00 2001 From: Lemito66 Date: Mon, 6 Nov 2023 15:55:44 -0500 Subject: [PATCH 0583/2103] listo reto 29 --- .../javascript/Lemito66.js" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/javascript/Lemito66.js" diff --git "a/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/javascript/Lemito66.js" "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/javascript/Lemito66.js" new file mode 100644 index 0000000000..1caf5cc697 --- /dev/null +++ "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/javascript/Lemito66.js" @@ -0,0 +1,27 @@ +/* + * Crea una función que reciba dos cadenas de texto casi iguales, + * a excepción de uno o varios caracteres. + * La función debe encontrarlos y retornarlos en formato lista/array. + * - Ambas cadenas de texto deben ser iguales en longitud. + * - Las cadenas de texto son iguales elemento a elemento. + * - No se pueden utilizar operaciones propias del lenguaje + * que lo resuelvan directamente. + * + * Ejemplos: + * - Me llamo mouredev / Me llemo mouredov -> ["e", "o"] + * - Me llamo.Brais Moure / Me llamo brais moure -> [" ", "b", "m"] + */ + +const find_differences = (str1, str2) => { + const differences = []; + if (str1.length === str2.length) { + for (let i = 0; i < str1.length; i++) { + if (str1[i] !== str2[i]) { + differences.push(str2[i]); + } + } + } + return differences; +}; + +console.log(find_differences("Me llamo mouredev", "Me llemo mouredov")); \ No newline at end of file From 54f4fc25231e6243086a5d4f277f8760c6d1bea5 Mon Sep 17 00:00:00 2001 From: Majinka10 Date: Mon, 6 Nov 2023 18:11:20 -0500 Subject: [PATCH 0584/2103] Reto #38 - Python --- .../python/majinka10.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/python/majinka10.py diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/majinka10.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/majinka10.py new file mode 100644 index 0000000000..72215c6964 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/majinka10.py @@ -0,0 +1,35 @@ +def sumaObjetivo(numeros:list, objetivo:int): + """ + Encuentra todas las combinaciones de los números de una + lista que suman el valor objetivo. + + Args: + - numeros (list): Lista de numeros, enteros positivos, de la que quiero + encontrar las combinaciones. + - objetivo (int): Valor entero positivo objetivo. + Returns: + - combinaciones (list): Lista con las combinaciones encontradas. + """ + # Caso base de la recursión (que la suma de la lista sea el numero) + if sum(numeros) == objetivo: + return [numeros] + + # Defino la lista donde guardadaré las combinaciones + combinaciones = [] + + for i in range(len(numeros)): + # Evaluo cada lista posible + resto_numeros = numeros[:i] + numeros[i+1:] + # Encuentro las listas que cumplen + combinaciones_resto = sumaObjetivo(resto_numeros, objetivo) + + # Para cada combinacion encontrada, si no está en las combinaciones, la añado + # el if lo aplico para evitar listas repetidas + for combinacion in combinaciones_resto: + if combinacion not in combinaciones: + combinaciones.append(combinacion) + + return combinaciones + +resultado = sumaObjetivo([1, 5, 3, 2, 3, 6], 6) +print(f"Soluciones: {resultado}") \ No newline at end of file From 63776d4a8b836da7d309b7a2cf18ff507a829bc4 Mon Sep 17 00:00:00 2001 From: blackriper Date: Mon, 6 Nov 2023 18:35:26 -0600 Subject: [PATCH 0585/2103] Reto#7-go --- .../go/blackriper.go | 149 ++++++++++++++++++ .../go/blackriper.go | 38 +++++ 2 files changed, 187 insertions(+) create mode 100644 Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/go/blackriper.go create mode 100644 Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/go/blackriper.go diff --git a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/go/blackriper.go b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/go/blackriper.go new file mode 100644 index 0000000000..4d11f2f435 --- /dev/null +++ b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/go/blackriper.go @@ -0,0 +1,149 @@ +package main + +import ( + "fmt" +) + +// definir metodos de trabajo +type SortingHat interface { + StartQuesting() + ShowResults() +} + +// estructura para definir preguntas +type HatQuestion struct { + Question string + Answers [][]string +} + +func (h HatQuestion) GetQuestion() string { + return h.Question +} + +func (h HatQuestion) GetAnswers() [][]string { + return h.Answers +} + +var Hatquestions []HatQuestion = []HatQuestion{ + { + Question: "¿Cómo te definirías?", + Answers: [][]string{ + {"1. Valiente", "gryffindor"}, + {"2. Leal", "hufflepuff"}, + {"3. Sabio", "ravenclaw"}, + {"4. Ambicioso", "slytherin"}, + }, + }, + { + Question: "¿Cuál es tu clase favorita?", + Answers: [][]string{ + {"1. Vuelo", "gryffindor"}, + {"2. Pociones", "ravenclaw"}, + {"3. Defensa contra las artes oscuras", "slytherin"}, + {"4. Animales fantásticos", "hufflepuff"}, + }, + }, + { + Question: "¿Dónde pasarías más tiempo?", + Answers: [][]string{ + {"1. Invernadero", "hufflepuff"}, + {"2. Biblioteca", "ravenclaw"}, + {"3. En la sala común", "slytherin"}, + {"4. Explorando", "gryffindor"}, + }, + }, + { + Question: "¿Cuál es tu color favorito?", + Answers: [][]string{ + {"1. Rojo", "gryffindor"}, + {"2. Azul", "ravenclaw"}, + {"3. Verde", "slytherin"}, + {"4. Amarillo", "hufflepuff"}, + }, + }, + { + Question: "¿Cuál es tu mascota?", + Answers: [][]string{ + {"1. Sapo", "ravenclaw"}, + {"2. Lechuza", "gryffindor"}, + {"3. Gato", "hufflepuff"}, + {"4. Serpiente", "slytherin"}, + }, + }, +} + +type Hat struct { + Gryffindor int + Hufflepuff int + Ravenclaw int + Slytherin int + Max int +} + +func (h *Hat) StartQuesting() { + var option int + fmt.Print("Hola, soy el \"Sombrero Seleccionador\"\nTendrás que responder cinco preguntas para ayudarme a descubrir tu casa de Hogwarts.\n") + for _, HatQ := range Hatquestions { + + answers := HatQ.GetAnswers() + fmt.Println(HatQ.GetQuestion()) + + for _, ans := range answers { + fmt.Println(ans[0]) + } + fmt.Println("Responde 1,2,3 o 4 : ") + fmt.Scanf("%d", &option) + + switch answers[option-1][1] { + case "gryffindor": + h.Gryffindor += 1 + case "hufflepuff": + h.Hufflepuff += 1 + case "ravenclaw": + h.Ravenclaw += 1 + case "slytherin": + h.Slytherin += 1 + } + + if h.Gryffindor > h.Max { + h.Max = h.Gryffindor + } + if h.Hufflepuff > h.Max { + h.Max = h.Hufflepuff + } + if h.Ravenclaw > h.Max { + h.Max = h.Ravenclaw + } + if h.Slytherin > h.Max { + h.Max = h.Slytherin + } + + } +} + +func (h Hat) ShowResults() { + + fmt.Println("Resultados ") + fmt.Printf("Gryffindor: %v \n ", h.Gryffindor) + fmt.Printf("Hufflepuff: %v \n ", h.Hufflepuff) + fmt.Printf("Ravenclaw: %v \n", h.Ravenclaw) + fmt.Printf("Slytherin: %v \n", h.Slytherin) + + switch { + case h.Max == h.Gryffindor: + fmt.Println("Tu casa es Gryffindor") + case h.Max == h.Hufflepuff: + fmt.Println("Tu casa es Hufflepuff") + case h.Max == h.Ravenclaw: + fmt.Println("Tu casa es Ravenclaw") + case h.Max == h.Slytherin: + fmt.Println("Tu casa es Slytherin") + } + +} + +func main() { + var hatShorting SortingHat = &Hat{} + hatShorting.StartQuesting() + hatShorting.ShowResults() +} diff --git a/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/go/blackriper.go b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/go/blackriper.go new file mode 100644 index 0000000000..be83d1d3cc --- /dev/null +++ b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/go/blackriper.go @@ -0,0 +1,38 @@ +package main + +import ( + "fmt" + "time" +) + +// definir metodos de trabajo +type Random interface { + GenerateNumber() + ShowNumber() +} + +// implementar metodos de trabajo +type Generator struct { + Num int +} + +func (g *Generator) GenerateNumber() { + seed := int(time.Now().Unix() % 100) + num := (5*seed + 7) % 8 + num2 := num * 8 + if num2 >= 0 && num2 <= 100 { + g.Num = num2 + } + +} + +func (g Generator) ShowNumber() { + fmt.Println(g.Num) +} + +/* +func main() { + var rand Random = &Generator{} + rand.GenerateNumber() + rand.ShowNumber() +}*/ From 8991b9f169d26e066687852f20b1535d6c20cb5c Mon Sep 17 00:00:00 2001 From: JosaaXC <114438741+JosaaXc@users.noreply.github.com> Date: Mon, 6 Nov 2023 18:46:19 -0600 Subject: [PATCH 0586/2103] Reto 0 --- .../python/JosaaXC.py" | 13 +++++++++++++ .../Reto #38 - LAS SUMAS [Media]/python/JosaaXC.py | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/JosaaXC.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/JosaaXC.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/JosaaXC.py" new file mode 100644 index 0000000000..a5fe2668cc --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/JosaaXC.py" @@ -0,0 +1,13 @@ +def main(): + for i in range(1, 101): + if i % 3 == 0: + print(f"{i} => fizz") + if i % 5 == 0: + print(f"{i} => buzz") + if i % 15 == 0: + print(f"{i} => fizzbuzz") + +if __name__ == "__main__": + main() + + \ No newline at end of file diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/python/JosaaXC.py b/Retos/Reto #38 - LAS SUMAS [Media]/python/JosaaXC.py index b0ec17ae38..615dba334f 100644 --- a/Retos/Reto #38 - LAS SUMAS [Media]/python/JosaaXC.py +++ b/Retos/Reto #38 - LAS SUMAS [Media]/python/JosaaXC.py @@ -19,8 +19,8 @@ def backtracking( start: int, target: int, current_combination: list)-> None: return combinations def main(): - # numbers = [1, 1,2, 1, 1, 1, 2] - numbers = [1,5,3,2] + numbers = [1, 1,2, 1, 1, 1, 2] + # numbers = [1,5,3,2] target = 6 combinations = find_sums(numbers, target) From ac496274a01d9bf8883a02cac4344c475a79d523 Mon Sep 17 00:00:00 2001 From: Juan Pablo Patino Lopez Date: Tue, 7 Nov 2023 14:06:10 +0100 Subject: [PATCH 0587/2103] Juanppdev - Reto #43 - Python --- .../python/juanppdev.py" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/juanppdev.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/juanppdev.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/juanppdev.py" new file mode 100644 index 0000000000..5a3d9035d2 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/juanppdev.py" @@ -0,0 +1,44 @@ +import random + +def simular_condiciones_climaticas(dias_prediccion): + temperatura_actual = float(input("Introduce la temperatura inicial: ")) + probabilidad_lluvia_actual = float(input("Introduce la probabilidad de lluvia inicial (%): ")) + + temperatura_maxima = temperatura_actual + temperatura_minima = temperatura_actual + dias_lluvia = 0 + + for dia in range(1, dias_prediccion + 1): + # Determinar si la temperatura aumenta o disminuye en 2 grados + cambio_temperatura = random.choice([-2, 2]) + temperatura_actual += cambio_temperatura + + # Actualizar probabilidad de lluvia + if temperatura_actual > 25: + probabilidad_lluvia_actual += 20 + if temperatura_actual < 5: + probabilidad_lluvia_actual -= 20 + + probabilidad_lluvia_actual = max(0, min(100, probabilidad_lluvia_actual)) + + # Determinar si llueve en este día + llueve = random.randint(1, 100) <= probabilidad_lluvia_actual + + if llueve: + temperatura_actual -= 1 + dias_lluvia += 1 + + # Actualizar temperatura máxima y mínima + temperatura_maxima = max(temperatura_actual, temperatura_maxima) + temperatura_minima = min(temperatura_actual, temperatura_minima) + + # Mostrar información del día + print(f"Día {dia}: Temperatura: {temperatura_actual}°C, Probabilidad de lluvia: {probabilidad_lluvia_actual}%") + + print(f"Temperatura máxima: {temperatura_maxima}°C") + print(f"Temperatura mínima: {temperatura_minima}°C") + print(f"Días de lluvia: {dias_lluvia}") + +# Llama a la función con el número de días de predicción +dias_prediccion = int(input("Introduce el número de días de predicción: ")) +simular_condiciones_climaticas(dias_prediccion) From ef570a354afac4cb80c5668f53ba55696980b92c Mon Sep 17 00:00:00 2001 From: Alejo Torres Date: Tue, 7 Nov 2023 10:45:10 -0300 Subject: [PATCH 0588/2103] Reto #43 - javascript --- .../javascript/alejotorres90.js" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/alejotorres90.js" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/alejotorres90.js" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/alejotorres90.js" new file mode 100644 index 0000000000..8495fc9255 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/alejotorres90.js" @@ -0,0 +1,46 @@ +const DAYS_AMOUNT = 7 +const INITIAL_CONDITIONS = { + temperature: 30, + rainProbability: 100 +} + +const forecastWeather = (daysAmount, initialConditions) => { + + const forecast = [initialConditions] + + for (i = 0; i < daysAmount; i++) { + const lastDaysForecast = forecast[forecast.length - 1] + let temperature = lastDaysForecast.temperature + let rainProbability = lastDaysForecast.rainProbability + + // 10% de posibilidades de que la temperatura aumente o disminuya 2 grados. + const randomNumber = Math.floor(Math.random() * 20) + if (randomNumber === 0) temperature = temperature - 2 + if (randomNumber === 1) temperature = temperature + 2 + + // Si la temperatura supera los 25 grados, la probabilidad de lluvia al día siguiente aumenta en un 20%. + if (lastDaysForecast.temperature > 25) rainProbability = rainProbability + 20 + // Si la temperatura baja de 5 grados, la probabilidad de lluvia al día siguiente disminuya en un 20%. + else if (lastDaysForecast.temperature < 5) rainProbability = rainProbability - 20 + if (rainProbability > 100) rainProbability = 100 + if (rainProbability < 0) rainProbability = 0 + + // Si llueve (100%), la temperatura del día siguiente disminuye en 1 grado. + if (lastDaysForecast.rainProbability === 100) temperature = temperature - 1 + + forecast.push({ temperature: temperature, rainProbability: rainProbability }) + } + + const minTemperature = forecast.reduce((accumulator, current) => accumulator < current.temperature ? accumulator : current.temperature, forecast[0].temperature) + const maxTemperature = forecast.reduce((accumulator, current) => accumulator > current.temperature ? accumulator : current.temperature, forecast[0].temperature) + const rainDaysAmount = forecast.reduce((accumulator, current) => accumulator + (current.rainProbability === 100 ? 1 : 0), 0) + + return { + minTemperature: minTemperature, + maxTemperature: maxTemperature, + rainDaysAmount: rainDaysAmount, + forecast: forecast + } +} + +console.log(forecastWeather(DAYS_AMOUNT, INITIAL_CONDITIONS)) \ No newline at end of file From 3cbe21590ec586fce421a9e8cc4fdcd0a81a5bd2 Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Tue, 7 Nov 2023 08:49:01 -0500 Subject: [PATCH 0589/2103] Reto #19 - Python --- .../python/sublian.py" | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 "Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/python/sublian.py" diff --git "a/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/python/sublian.py" "b/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/python/sublian.py" new file mode 100644 index 0000000000..d45a685e8e --- /dev/null +++ "b/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/python/sublian.py" @@ -0,0 +1,56 @@ +# Reto #19: Análisis de texto +# Dificultad: Media | Publicación: 11/05/23 | Corrección: 15/05/23 | Solución: 07/11/2023 +# Enunciado +""" + * Crea un programa que analice texto y obtenga: + * - Número total de palabras. + * - Longitud media de las palabras. + * - Número de oraciones del texto (cada vez que aparecen un punto). + * - Encuentre la palabra más larga. + * - Todo esto utilizando un único bucle. + """ + +class CheckTexto: + def __init__(self, texto): + self.texto = texto + self.palabras = "".join(e for e in texto if e.isalnum() or e.isspace()).split() + self.num_palabras = len(self.palabras) + self.longitud_total = sum(len(palabra) for palabra in self.palabras) + self.num_oraciones = texto.count('.') + self.palabra_mas_larga = max(self.palabras, key=len) + + def longitud_media(self): + return self.longitud_total / self.num_palabras + + def __str__(self): + return f"Número total de palabras: {self.num_palabras}\n" \ + f"Longitud media de las palabras: {self.longitud_media():.2f}\n" \ + f"Número de oraciones del texto: {self.num_oraciones}\n" \ + f"Palabra más larga: '{self.palabra_mas_larga}', con: {len(self.palabra_mas_larga)} letras" + +texto = """En un mundo de código y sintaxis, +Python se alza con elegancia y eficacia. +Con su legibilidad y estructura clara, +El lenguaje de programación que nos deslumbra. + +Desde su inicio, su filosofía se destaca, +Con énfasis en la legibilidad, nunca se opaca. +Con indentación y bloques bien definidos, +Python nos guía por caminos fluidos y unidos. + +Sus librerías y módulos son vastos y poderosos, +Desde matemáticas hasta inteligencia artificial, asombrosos. +Con una comunidad activa y colaborativa, +Python nos brinda soluciones creativas. + +Ya sea en desarrollo web o análisis de datos, +Python se destaca en diferentes campos y mercados. +Su versatilidad lo hace único y especial, +Un lenguaje que nos impulsa a crear sin igual. + +Así, Python conquista corazones con pasión, +Uniendo a programadores en cada ocasión. +Con su belleza y simplicidad sin igual, +Python, el lenguaje que nunca dejará de brillar.""" +palabra = CheckTexto(texto) +print(palabra) \ No newline at end of file From f0af68cf12f93e9ca7c1e5c3dcde807466a2c78e Mon Sep 17 00:00:00 2001 From: Armando Date: Tue, 7 Nov 2023 11:41:19 -0500 Subject: [PATCH 0590/2103] Reto # 1 Javascript --- .../javascript/armandortm.js" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/armandortm.js" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/armandortm.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/armandortm.js" new file mode 100644 index 0000000000..29a6516d33 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/armandortm.js" @@ -0,0 +1,65 @@ + +const LOWER_CASE_LETTERS = + ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; + +const UPPER_CASE_LETTERS = + ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; + +const LEET_SPEAK_ALPHABET = + ['4', 'I3', '[', ')', '3', '|=', '&', '#', '1', ',_|', '>|', '1', 'IVI', + '^/', '0', '|*', '(_,)', 'I2', '5', '7', '(_)', '\/', '\/\/', '><', 'j', '2'] + +const LEET_NUMBERS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; +const NUMBERS_TO_LEET = ['()', 'L', 'R', 'E', 'A', 'S', 'b', 'T', 'B', 'g']; + + +function convert_to_leet_alphabet(){ + + // get the string + let stringFromUser = prompt("Please enter an entry"); + let string_hacked = []; + + // convert to an array + let arrayFromString = stringFromUser.split(""); + + // using a foreach to compare each character with each array element + arrayFromString.forEach(element => { + + let indexOfLetters; + let indexOfNumbers; + + // to check if it's a lower case letter + if (LOWER_CASE_LETTERS.includes(element)) { + + indexOfLetters = LOWER_CASE_LETTERS.indexOf(element); + string_hacked.push(LEET_SPEAK_ALPHABET[indexOfLetters]); + } + + // to check if it's a upper case letter + else if (UPPER_CASE_LETTERS.includes(element)) { + + indexOfLetters = UPPER_CASE_LETTERS.indexOf(element); + string_hacked.push(LEET_SPEAK_ALPHABET[indexOfLetters]); + } + + // To check if it's a number + else if (LEET_NUMBERS.includes(Number(element))) { + + indexOfNumbers = LEET_NUMBERS.indexOf(Number(element)); + string_hacked.push(NUMBERS_TO_LEET[indexOfNumbers]); + } + + // to identify if there is a space + else if (element == "") { + + string_hacked.push(" "); + } + }); + + console.log(string_hacked); +} + +// calling the function +convert_to_leet_alphabet(); \ No newline at end of file From 9f7d7f7d1dad10d241cb92c41f044ae7c3467583 Mon Sep 17 00:00:00 2001 From: Emill Date: Tue, 7 Nov 2023 13:07:16 -0500 Subject: [PATCH 0591/2103] tabla de multiplicar realizada --- .../python/Lemito66.py" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Lemito66.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Lemito66.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Lemito66.py" new file mode 100644 index 0000000000..173ee5e29b --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/Lemito66.py" @@ -0,0 +1,16 @@ +""" /* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ """ + +def multiplication_table(number, stop): + for numbers in range(0, stop + 1): + print(f"{number} x {numbers} = {number * numbers}") + +print("Multiplication table") +multiplication_table(5, 20) \ No newline at end of file From 1d39454702145fa957c9035512c6d976c2c12a03 Mon Sep 17 00:00:00 2001 From: Lemito66 Date: Tue, 7 Nov 2023 13:10:40 -0500 Subject: [PATCH 0592/2103] caracter infiltrado listo en c# --- .../c#/Lemito66.cs" | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 "Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/c#/Lemito66.cs" diff --git "a/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/c#/Lemito66.cs" "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/c#/Lemito66.cs" new file mode 100644 index 0000000000..8013f010fc --- /dev/null +++ "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/c#/Lemito66.cs" @@ -0,0 +1,55 @@ +// See https://aka.ms/new-console-template for more information + + +/* + * Crea una función que reciba dos cadenas de texto casi iguales, + * a excepción de uno o varios caracteres. + * La función debe encontrarlos y retornarlos en formato lista/array. + * - Ambas cadenas de texto deben ser iguales en longitud. + * - Las cadenas de texto son iguales elemento a elemento. + * - No se pueden utilizar operaciones propias del lenguaje + * que lo resuelvan directamente. + * + * Ejemplos: + * - Me llamo mouredev / Me llemo mouredov -> ["e", "o"] + * - Me llamo.Brais Moure / Me llamo brais moure -> [" ", "b", "m"] + */ + +using System.Collections; + +static List findDifference(string textOne, string textTwo) +{ + List differences = new List(); + + if (textOne.Length == textTwo.Length) + { + for (int i = 0; i < textOne.Length; i++) + { + if (textOne[i] != textTwo[i]) + { + differences.Add(textTwo[i]); + } + } + } + + return differences; +} + +var result = findDifference("Me llamo mouredev", "Me llemo mouredov"); +//var result = findDifference("M", "M"); + +if (result.Count == 0) Console.WriteLine("[]"); +else +{ + Console.Write("["); + + for (int i = 0; i < result.Count; i++) + { + Console.Write($"\"{result[i]}\""); + + if (i < result.Count - 1) + Console.Write(", "); + } + + Console.Write("]"); +} \ No newline at end of file From e07f1f1dd2e3183ac1ff7de00195abc4eabd521a Mon Sep 17 00:00:00 2001 From: Lemito66 Date: Tue, 7 Nov 2023 13:39:22 -0500 Subject: [PATCH 0593/2103] listo reto 40 en c# --- .../javascript/Lemito66.js" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/Lemito66.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/Lemito66.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/Lemito66.js" new file mode 100644 index 0000000000..1d5b771c2a --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/Lemito66.js" @@ -0,0 +1,17 @@ +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +const multiplicationTable = (number, stop) => { + for (let i = 1; i <= stop; i++) { + console.log(`${number} x ${i} = ${number * i}`); + } +}; + +console.log(multiplicationTable(5, 30)); \ No newline at end of file From 8a133ad4234ef0540a4f5489826da623a12ccd42 Mon Sep 17 00:00:00 2001 From: Lemito66 Date: Tue, 7 Nov 2023 13:50:49 -0500 Subject: [PATCH 0594/2103] tabla de multiplicar realizada --- .../c#/Lemito66.cs" | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/Lemito66.cs" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/Lemito66.cs" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/Lemito66.cs" new file mode 100644 index 0000000000..d73338bc15 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/c#/Lemito66.cs" @@ -0,0 +1,11 @@ +// See https://aka.ms/new-console-template for more information + +void multiplicationTable(int number, int stop) +{ + for (int i = 0; i <= stop; i++) + { + Console.WriteLine($"{number} x {i} = {number * i}"); + } +} + +multiplicationTable(5, 10); \ No newline at end of file From 0ecdceaa4c31ed85b53d0e91c85110bf258dba36 Mon Sep 17 00:00:00 2001 From: Edwin Date: Tue, 7 Nov 2023 16:01:23 -0400 Subject: [PATCH 0595/2103] Reto #4 - JavaScript --- .../javascript/EdGonzz.js | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/EdGonzz.js diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/EdGonzz.js b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/EdGonzz.js new file mode 100644 index 0000000000..e0a11a981b --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/EdGonzz.js @@ -0,0 +1,58 @@ +// ``` +// /* +// * Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. +// * Ejemplos: +// * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" +// * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" +// */ +// ``` + +function isNumeroPrimo(num) { + let isPrimo = true + let result + + if (num < 1) { + isPrimo = false + } + + for (let i = 2; i < num; i++) { + if (num % i === 0) { + isPrimo = false + } + } + + isPrimo == true ? result = 'es primo' : result = 'es compuesto'; + return result +} + +function isFibonacci(num) { + let result + let prev1 = 0 + let prev2 = 1 + + for (let i = 0; i < num; i++) { + var suma = prev1 + prev2 + prev1 = prev2 + prev2 = suma + } + + num == suma ? result = 'es Fibonacci' : result = 'no es Fibonacci' + return result +} + +function isNumeroPar(num) { + let result + num % 2 === 0 ? result = 'es par' : result = 'es impar' + return result +} + +function comprobar(num) { + console.log(`${num} ${isNumeroPrimo(num)}, ${isFibonacci(num)} y ${isNumeroPar(num)}`); +} + +comprobar(2) +comprobar(7) +comprobar(8) +comprobar(13) +comprobar(0) +comprobar(256) \ No newline at end of file From 0221fbda281d11e049dda813149f8c4fd1b3206a Mon Sep 17 00:00:00 2001 From: manuelmslv <61946375+manuelmslv@users.noreply.github.com> Date: Wed, 8 Nov 2023 10:08:07 -0300 Subject: [PATCH 0596/2103] Create manuelmslv.py --- .../python/manuelmslv.py" | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/manuelmslv.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/manuelmslv.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/manuelmslv.py" new file mode 100644 index 0000000000..7ba9d4553b --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/manuelmslv.py" @@ -0,0 +1,9 @@ +def mult(number:int): + for n in range (1,11): + result = number * n + print (f"{number} x {n} = {result}") + + +response = input('Ingrese numero: ') +response = int(response) +mult (response) From f3d8d6d719be881a7aafa5c5afb5c62742c1d3df Mon Sep 17 00:00:00 2001 From: Ricardo Mesa Gallego Date: Wed, 8 Nov 2023 19:44:34 -0500 Subject: [PATCH 0597/2103] Reto 4 Python - Rimega92 --- .../python/rimega92.py | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/rimega92.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/rimega92.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/rimega92.py new file mode 100644 index 0000000000..e3c314b431 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/rimega92.py @@ -0,0 +1,58 @@ +# Escribe un programa que, dado un número, compruebe y muestre si es primo, +# fibonacci y par. +# Ejemplos: +# - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" +# - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" + + +def primo(n): + if n < 2: + return False + for i in range(2, n): + if n % i == 0 and n != i: + return False + return True + +def fibonacci(n): + a = 0 + b = 1 + for i in range(n): + c = a + b + a = b + b = c + if n == a: + return True + return False + +def par(n): + if n % 2 == 0: + return True + else: + return False + + +def main(): + n = int(input("Ingrese un número: ")) + is_prime = primo(n) + is_fibonacci = fibonacci(n) + is_even = par(n) + + if is_prime and is_fibonacci and is_even: + print(f"{n} es primo, fibonacci y es par") + elif is_prime and not is_fibonacci and is_even: + print(f"{n} es primo, no es fibonacci y es par") + elif is_prime and not is_fibonacci and not is_even: + print(f"{n} es primo, no es fibonacci y es impar") + elif not is_prime and not is_fibonacci and is_even: + print(f"{n} no es primo, no es fibonacci y es par") + elif not is_prime and not is_fibonacci and not is_even: + print(f"{n} no es primo, no es fibonacci y es impar") + elif not is_prime and is_fibonacci and is_even: + print(f"{n} no es primo, es fibonacci y es par") + elif not is_prime and is_fibonacci and not is_even: + print(f"{n} no es primo, es fibonacci y es impar") + elif is_prime and is_fibonacci and not is_even: + print(f"{n} es primo, es fibonacci y es impar") + +if __name__ == '__main__': + main() \ No newline at end of file From e0cb42e7e716dac9028b7dcf663622f3816be196 Mon Sep 17 00:00:00 2001 From: Ricardo Mesa Gallego Date: Wed, 8 Nov 2023 19:51:49 -0500 Subject: [PATCH 0598/2103] Reto 3 - Rimega92 --- .../python/rimega92.py" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rimega92.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rimega92.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rimega92.py" new file mode 100644 index 0000000000..d0496ded11 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rimega92.py" @@ -0,0 +1,44 @@ +# Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. +# Podrás configurar generar contraseñas con los siguientes parámetros: +# - Longitud: Entre 8 y 16. +# - Con o sin letras mayúsculas. +# - Con o sin números. +# - Con o sin símbolos. +# (Pudiendo combinar todos estos parámetros entre ellos) + +import random +import string + +def generar_contrasena(longitud, mayusculas, numeros, simbolos): + caracteres = string.ascii_lowercase + if mayusculas: + caracteres += string.ascii_uppercase + if numeros: + caracteres += string.digits + if simbolos: + caracteres += string.punctuation + contrasena = ''.join(random.choice(caracteres) for i in range(longitud)) + return contrasena + +def main(): + longitud = int(input("Longitud de la contraseña: ")) + mayusculas = input("¿Incluir mayúsculas? (S/N): ") + numeros = input("¿Incluir números? (S/N): ") + simbolos = input("¿Incluir símbolos? (S/N): ") + if mayusculas == 'S': + mayusculas = True + else: + mayusculas = False + if numeros == 'S': + numeros = True + else: + numeros = False + if simbolos == 'S': + simbolos = True + else: + simbolos = False + contrasena = generar_contrasena(longitud, mayusculas, numeros, simbolos) + print(contrasena) + +if __name__ == '__main__': + main() \ No newline at end of file From f909ccb470146a2968703b583c78e7bc1a6e8390 Mon Sep 17 00:00:00 2001 From: Ricardo Mesa Gallego Date: Wed, 8 Nov 2023 20:03:11 -0500 Subject: [PATCH 0599/2103] Add Hola Mundo program in Python --- .../python/rimega92.py" | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/rimega92.py" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/rimega92.py" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/rimega92.py" new file mode 100644 index 0000000000..9bc20bf370 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/rimega92.py" @@ -0,0 +1,7 @@ +# Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas. +# Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado, +# o quizás quieres dar tus primeros pasos... ¡Pues este es el momento! +# +# A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí... + +print('!Hola Mundo!') \ No newline at end of file From 6b51736681a858f8af2f9a3f1b7e9af67fa411be Mon Sep 17 00:00:00 2001 From: Ricardo Mesa Gallego Date: Wed, 8 Nov 2023 20:10:00 -0500 Subject: [PATCH 0600/2103] Add function to calculate winner in piedra, papel, tijera, lagarto, spock game --- .../python/rimega92.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/rimega92.py diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/rimega92.py b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/rimega92.py new file mode 100644 index 0000000000..a373a379b8 --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/rimega92.py @@ -0,0 +1,38 @@ +# Crea un programa que calcule quien gana más partidas al piedra, +# papel, tijera, lagarto, spock. +# - El resultado puede ser: "Player 1", "Player 2", "Tie" (empate) +# - La función recibe un listado que contiene pares, representando cada jugada. +# - El par puede contener combinaciones de "🗿" (piedra), "📄" (papel), +# "✂️" (tijera), "🦎" (lagarto) o "🖖" (spock). +# - Ejemplo. Entrada: [("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")]. Resultado: "Player 2". +# - Debes buscar información sobre cómo se juega con estas 5 posibilidades. + +def piedra_papel_tijera_lagarto_spock(lista): + def get_winner(play1, play2): + if play1 == play2: + return 'Tie' + elif (play1, play2) in [('🗿', '✂️'), ('🗿', '🦎'), ('📄', '🗿'), ('📄', '🖖'), ('✂️', '🖖'), ('✂️', '🦎'), ('🦎', '🖖'), ('🦎', '📄'), ('🖖', '🗿'), ('🖖', '✂️')]: + return 'Player 1' + else: + return 'Player 2' + + player1 = 0 + player2 = 0 + for i in lista: + winner = get_winner(i[0], i[1]) + if winner == 'Player 1': + player1 += 1 + elif winner == 'Player 2': + player2 += 1 + + if player1 > player2: + return 'Player 1' + elif player2 > player1: + return 'Player 2' + else: + return 'Tie' + +print(piedra_papel_tijera_lagarto_spock([('🗿','✂️'), ('✂️','🗿'), ('📄','✂️')])) +print(piedra_papel_tijera_lagarto_spock([('🗿','🦎'), ('🦎','🗿'), ('📄','🦎')])) +print(piedra_papel_tijera_lagarto_spock([('🗿','🖖'), ('🖖','🗿'), ('📄','🖖')])) +print(piedra_papel_tijera_lagarto_spock([('🗿','📄'), ('📄','🗿'), ('📄','📄')])) \ No newline at end of file From 4b8eec53bed2b99efb340d98b5823e1228f3ecf0 Mon Sep 17 00:00:00 2001 From: Marco Torres Date: Wed, 8 Nov 2023 21:53:35 -0700 Subject: [PATCH 0601/2103] Reto #39 - Python --- .../python/marcoatrs.py" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/marcoatrs.py" diff --git "a/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/marcoatrs.py" "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/marcoatrs.py" new file mode 100644 index 0000000000..30c123f1a5 --- /dev/null +++ "b/Retos/Reto #39 - TRIPLES PITAG\303\223RICOS [Media]/python/marcoatrs.py" @@ -0,0 +1,17 @@ +from itertools import product + + +def triples_pitagoricos(max_number: int) -> list: + result = [] + for combi in product(list(range(1, max_number+1)), list(range(1, max_number+1))): + hipo = (combi[0] ** 2 + combi[1] ** 2) ** 0.5 + if (hipo != int(hipo)) or (hipo > max_number): + continue + res = sorted([combi[0], combi[1], int(hipo)]) + if res in result: + continue + result.append(res) + return result + + +print(triples_pitagoricos(10)) From 18caea0a64411ad56ee427398151668500cf851d Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 9 Nov 2023 09:56:49 +0100 Subject: [PATCH 0602/2103] Reto #42 - Kotlin --- .../kotlin/pisanowp.kt" | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/kotlin/pisanowp.kt" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/kotlin/pisanowp.kt" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/kotlin/pisanowp.kt" new file mode 100644 index 0000000000..56e6585fb2 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/kotlin/pisanowp.kt" @@ -0,0 +1,117 @@ + +import kotlin.math.sqrt + +fun main() { + + /* + * Reto #42 23/10/2023 PUNTO DE ENCUENTRO + * + * Crea una función que calcule el punto de encuentro de dos objetos en movimiento + * en dos dimensiones. + * - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento + * (vector de desplazamiento) por unidad de tiempo (también en formato xy). + * - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. + * - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. + * - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. + * + */ + + // Se cruzan en t5, (5, 5) + var obj1 = Objeto(0, 0, 1, 1) + var obj2 = Objeto(5, 0, 0, 1) + + puntoDeEncuentro(obj1, obj2) + + obj1 = Objeto(3, 2, 1, 4) + obj2 = Objeto(2, 1, 1, 2) + puntoDeEncuentro(obj1, obj2) + + // Rectas paralelas verticales, no se cruzan nunca + obj1 = Objeto(1, 0, 0, 1) + obj2 = Objeto(2, 0, 0, 3) + puntoDeEncuentro(obj1, obj2) + + // Rectas que tampoco se cruzan + obj1 = Objeto(2, 1, 4, 2) + obj2 = Objeto(1, 0, 0, 1) + puntoDeEncuentro(obj1, obj2) + + // Se ecuentran en el origen del eje + obj1 = Objeto(-1, -1, 1, 1) + obj2 = Objeto(2, -2, -2, 2) + puntoDeEncuentro(obj1, obj2) + + // Rectas paralelas verticales misma velocidad, no se cruzan nunca + obj1 = Objeto(1, 0, 0, 1) + obj2 = Objeto(2, 0, 0, 1) + puntoDeEncuentro(obj1, obj2) + + + +} + +fun puntoDeEncuentro(obj1: Objeto, obj2: Objeto) { + + obj1.mostrarPosicion("Objeto1") + obj2.mostrarPosicion("Objeto2") + + val distancia = obj1.distanciaAObjeto(obj2) + var nuevaDistancia = distancia + println("Distancia entre los puntos $distancia") + + var acercandose = true + var tiempo = 1 + while (acercandose){ + obj1.nuevaPosicion() + obj2.nuevaPosicion() + + obj1.mostrarPosicion("Objeto1") + obj2.mostrarPosicion("Objeto2") + nuevaDistancia = obj1.distanciaAObjeto(obj2) + + println("Nueva distancia entre los puntos $nuevaDistancia") + + if (nuevaDistancia < distancia){ + tiempo++ + + } else { + // Se alejan, ya no van a coincidir en el tiempo + acercandose = false + } + + if (nuevaDistancia < 1){ + // Se han encontrado + acercandose = false + } + + } + + if ( nuevaDistancia < 1 ) { + println("Se cruzan en el tiempo: $tiempo en el punto ( ${obj1.posX}, ${obj1.posY} )") + } else { + println("Los puntos no se cruzan nunca") + } + +} + +class Objeto(var posX: Int, var posY: Int, val velX: Int, val velY: Int){ + + fun mostrarPosicion(nombre:String){ + println( "$nombre => ($posX, $posY)") + } + + fun nuevaPosicion(){ + posX += velX + posY += velY + } + + fun distanciaAObjeto(obj2: Objeto):Double{ + + val posX2 = (( obj2.posX - this.posX) * (obj2.posX - this.posX)).toDouble() + val posY2 = (( obj2.posY - this.posY) * (obj2.posY - this.posY)).toDouble() + + return sqrt( posX2 + posY2 ) + + } +} + From 45cf900301a5438a0390fb83c352cf64374788b9 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 9 Nov 2023 10:01:00 +0100 Subject: [PATCH 0603/2103] Reto #43 - Kotlin --- .../kotlin/pisanowp.kt" | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/kotlin/pisanowp.kt" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/kotlin/pisanowp.kt" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/kotlin/pisanowp.kt" new file mode 100644 index 0000000000..b88eb0a4db --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/kotlin/pisanowp.kt" @@ -0,0 +1,107 @@ +import kotlin.math.roundToInt + +fun main() { + + /* + * Reto #43 30/10/2023 SIMLULADOR DE CLIMA + * + * 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. + */ + + val temperature = pideNumeroPositivo("Set initial temperature") + val rainPercentage = pideNumeroPositivo("Set initial rain percentaje") + val numDays = pideNumeroPositivo("Set number days of simulation") + + val simmulate = Weather(temperature, rainPercentage.toFloat()) + simmulate.simulate(numDays) + +} + +class Weather( + private var temperature: Int = 34, + private var rainPercentage: Float = 10f +) { + private var maxTemp = 0 + private var minTemp = 0 + private var daysWithRain = 0 + + fun simulate(numDays: Int = 7) { + + println("Start simulation") + + maxTemp = temperature + minTemp = temperature + + (1..numDays).forEach { day -> + if (temperature > maxTemp) + maxTemp = temperature + + if (temperature < minTemp) + minTemp = temperature + + println(" - Day number $day Temperature: ${temperature}º Rain percentaje: ${rainPercentage.roundToInt()} %") + + if ((1..100).random() <= 10) { + + when (listOf("up", "down").random()) { + "up" -> { + temperature += 2 + } + + "down" -> { + temperature -= 2 + } + } + + } + + if (temperature > 25) { + rainPercentage *= 1.20f + + } + + if (temperature < 5) { + rainPercentage -= ((rainPercentage * 20) / 100) + } + + if (rainPercentage >= 100) { + + rainPercentage = 100f + temperature -= 1 + } + + if (rainPercentage < 1) { + rainPercentage = 1f + + } + + if ((1..100).random() <= rainPercentage) { + println("¡¡¡¡¡LLUEVE !!!") + daysWithRain++ + + } + + + } + + println("End simulation for $numDays days") + println() + println("Maximum temperature ${maxTemp}º") + println("Minimum temperature ${minTemp}º") + println("Days with rain ${daysWithRain}") + + } + +} \ No newline at end of file From a3122b630468768be3229c9aba1eee35a2584b5a Mon Sep 17 00:00:00 2001 From: idevcm Date: Thu, 9 Nov 2023 09:14:15 +0000 Subject: [PATCH 0604/2103] Reto #0 - Java --- .../java/Idevcm.java" | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Idevcm.java" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Idevcm.java" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Idevcm.java" new file mode 100644 index 0000000000..7491ce2c8a --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/java/Idevcm.java" @@ -0,0 +1,11 @@ +import java.util.stream.IntStream; + +public class Idevcm { + public static void main(String[] args) { + IntStream + .range(1, 101) + .mapToObj(number -> + number % 3 == 0 ? number % 5 == 0 ? "FizzBuzz" : "Fizz" : number % 5 == 0 ? "Buzz" : number) + .forEach(System.out::println); + } +} From 510ff99248f29f0ed44870688a618c861fff7d03 Mon Sep 17 00:00:00 2001 From: ariveroi Date: Thu, 9 Nov 2023 13:04:22 +0100 Subject: [PATCH 0605/2103] agus rivero reto 43 --- .../python/agus_rivero.py" | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/agus_rivero.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/agus_rivero.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/agus_rivero.py" new file mode 100644 index 0000000000..a34bd71b94 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/agus_rivero.py" @@ -0,0 +1,70 @@ +""" + * 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. +""" +import random + + +class ClimateConditionsSimulator: + def __init__(self, initial_temp: int, initial_rain_prob: float): + self.temp = initial_temp + self.rain_prob = initial_rain_prob + self.rainy_days = [] + self.max_temp = initial_temp + self.min_temp = initial_temp + + def get_climate_conditions_on_day_n(self, day_n: int) -> dict: + for day in range(day_n): + next_day_temp = self.get_augmented_temp() + next_day_rain_prob = self.rain_prob + + if self.temp > 25: + next_day_rain_prob += 0.2 + elif self.temp < 5: + next_day_rain_prob -= 0.2 + if self.rain_prob == 1: + self.rainy_days.append(day) + next_day_temp -= 1 + if next_day_temp > self.max_temp: + self.max_temp = next_day_temp + elif next_day_temp < self.min_temp: + self.min_temp = next_day_temp + + self.temp = next_day_temp + self.rain_prob = next_day_rain_prob + + def get_augmented_temp(self): + prob = random.randint(0, 100) + augment_or_reduce = random.randint(0, 1) + if augment_or_reduce == 0 and prob <= 10: + return self.temp + 2 + elif augment_or_reduce == 1 and prob <= 10: + return self.temp - 2 + else: + return self.temp + + def get_results(self): + return { + "max_temperature": self.max_temp, + "min_temperature": self.min_temp, + "rainy_days": self.rainy_days, + "rainy_days_count": len(self.rainy_days), + "day_n_temp": self.temp, + } + + +if __name__ == "__main__": + simulator = ClimateConditionsSimulator(40, 1) + simulator.get_climate_conditions_on_day_n(10000) + print(simulator.get_results()) From e3c818c088b75d7901eed94e92b1bab38ee3161c Mon Sep 17 00:00:00 2001 From: ariveroi Date: Thu, 9 Nov 2023 13:06:44 +0100 Subject: [PATCH 0606/2103] changed file name --- .../python/ariveroi.py" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/agus_rivero.py" => "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ariveroi.py" (100%) diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/agus_rivero.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ariveroi.py" similarity index 100% rename from "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/agus_rivero.py" rename to "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ariveroi.py" From bbdc0a91687dc1c041d954776fc12688ef7f9937 Mon Sep 17 00:00:00 2001 From: Bruno Cicerchia Date: Thu, 9 Nov 2023 11:11:30 -0300 Subject: [PATCH 0607/2103] Create brunocicerchia.py --- .../python/brunocicerchia.py" | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/brunocicerchia.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/brunocicerchia.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/brunocicerchia.py" new file mode 100644 index 0000000000..c3ba934fac --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/brunocicerchia.py" @@ -0,0 +1,62 @@ +import random + +def nextDay(days, temp, rain): + minTemp = 100 + maxTemp = 0 + rainCount = 0 + # For que recorre los dias elegidos por el usuario + for i in range(days): + print("Day: " + str(i+1)) + + # 10% de probabilidad de que la temperatura cambie 2 grados + if random.randint(0,100) < 10: + if random.randint(0,100) < 50: + temp = temp - 2 + else: + temp = temp + 2 + + # Si la temperatua es mayor a 25 grados aumenta la probabilidad de lluvia + if temp > 25: + # Validacion para no superar el 100% de lluvia + if rain < 80: + rain = rain + 20 + else: + rain = 100 + + # Si la temperatura es menor a 5 grados disminuye la probabilidad de lluvia + if temp < 5: + if rain < 20: + rain = 0 + else: + rain = rain - 20 + + # Si llueve la temperatura disminuye 1 grado y se suma un dia de lluvia + if rain == 100: + rainCount = rainCount + 1 + print("Rainy day") + + # Checkeo si la temperatura es minima o maxima + + if temp < minTemp: + minTemp = temp + + if temp > maxTemp: + maxTemp = temp + + print("Temperature: " + str(temp)) + print("Rain probability: " + str(rain)) + + print("") + + print("Rainy days: " + str(rainCount)) + print("Min temperature: " + str(minTemp)) + print("Max temperature: " + str(maxTemp)) + + +def main(): + temp = int(input("Insert temperature: ")) + rain = int(input("Insert rain probability(%): ")) + nextDay(int(input("Insert days: ")), temp, rain) + +if __name__ == "__main__": + main() \ No newline at end of file From 036f3e0d33888390bdcdc48da2959a00c30f3df3 Mon Sep 17 00:00:00 2001 From: Tebaah Date: Thu, 9 Nov 2023 16:20:51 -0300 Subject: [PATCH 0608/2103] feat(reto 0): realizo el reto 0 en C# --- .../c#/tebaah.cs" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/tebaah.cs" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/tebaah.cs" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/tebaah.cs" new file mode 100644 index 0000000000..1e70330c08 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/tebaah.cs" @@ -0,0 +1,31 @@ +// See https://aka.ms/new-console-template for more information +Console.WriteLine("Hello, World!"); + +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ + + for (int i = 1; i <= 100; i++) + { + if ((i % 3) == 0 && (i % 5) == 0) + { + Console.WriteLine($"{i} fizzbuzz"); + } + else if((i % 3) == 0) + { + Console.WriteLine($"{i} fizz"); + } + else if((i % 5) == 0) + { + Console.WriteLine($"{i} buzz"); + } + else + { + Console.WriteLine(i); + } + } \ No newline at end of file From 1e94624d6187c15626a6149db885662a3cd7bd92 Mon Sep 17 00:00:00 2001 From: feltoxXx <5326671+feltoxXx@users.noreply.github.com> Date: Thu, 9 Nov 2023 18:30:09 -0300 Subject: [PATCH 0609/2103] Reto #0 - Python --- .../python/feltoxXx.py" | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/feltoxXx.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/feltoxXx.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/feltoxXx.py" new file mode 100644 index 0000000000..a874bb53d7 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/feltoxXx.py" @@ -0,0 +1,19 @@ +# Reto #0: EL FAMOSO "FIZZ BUZZ" + +# +# Escribe un programa que muestre por consola (con un print) los +# números de 1 a 100 (ambos incluidos y con un salto de línea entre +# cada impresión), sustituyendo los siguientes: +# - Múltiplos de 3 por la palabra "fizz". +# - Múltiplos de 5 por la palabra "buzz". +# - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". +# + + +def fizz_buzz(): + for n in range(100): + print("fizz" * ( n%3==0 ) + "buzz" * ( n%5==0 ) or n) + + +if __name__ == '__main__': + fizz_buzz() From 68a3bde2d2b52e7b97c97c3e72c3b88a88e9e4cf Mon Sep 17 00:00:00 2001 From: feltoxXx <5326671+feltoxXx@users.noreply.github.com> Date: Thu, 9 Nov 2023 18:34:12 -0300 Subject: [PATCH 0610/2103] Reto #1 - Python --- .../python/feltoxXx.py" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/feltoxXx.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/feltoxXx.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/feltoxXx.py" new file mode 100644 index 0000000000..f2b75d17a2 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/feltoxXx.py" @@ -0,0 +1,31 @@ +# Reto #1: EL "LENGUAJE HACKER" + +# +# Escribe un programa que reciba un texto y transforme lenguaje natural a +# "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje +# se caracteriza por sustituir caracteres alfanuméricos. +# Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) +# con el alfabeto y los números en "leet". +# (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") +# + +LEET = {"A": "4", "B": "I3", "C": "[", "D": ")", "E": "3", "F": "|=", "G": "&", "H": "#", "I": "1", + "J": ",_|", "K": ">|", "L": "1", "M": "/\/\\", "N": " ^/", "O": "0", "P": " |*", "Q": "(_,)", + "R": "I2", "S": "5", "T": "7", "U": "(_)", "V": "\/", "W": "\/\/", "X": "><", "Y": "j", "Z": "2", + "1": "L", "2": "R", "3": "E", "4": "A", "5": "S", "6": "b", "7": "T", "8": "B", "9": "g", "0": "o"} + +def translator(text): + + leet_text = "" + + for word in text: + if word.upper() in LEET.keys(): + leet_text += LEET[word.upper()] + else: + leet_text += word + + return leet_text + + +if __name__ == '__main__': + print(translator(input("Texto a traducir: "))) From bdd93deb9b52cb32a22820e447c5ec74ea61c759 Mon Sep 17 00:00:00 2001 From: feltoxXx <5326671+feltoxXx@users.noreply.github.com> Date: Thu, 9 Nov 2023 18:36:35 -0300 Subject: [PATCH 0611/2103] Reto # 2 - Python --- .../python/feltoxXx.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/feltoxXx.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/feltoxXx.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/feltoxXx.py new file mode 100644 index 0000000000..af54e50f6f --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/feltoxXx.py @@ -0,0 +1,66 @@ +# Reto #2: EL PARTIDO DE TENIS + +# +# Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. +# El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien +# gane cada punto del juego. +# +# - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. +# - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: +# 15 - Love +# 30 - Love +# 30 - 15 +# 30 - 30 +# 40 - 30 +# Deuce +# Ventaja P1 +# Ha ganado el P1 +# - Si quieres, puedes controlar errores en la entrada de datos. +# - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. +# + +def game_resolver(secuencia: list): + + # Inicializar puntajes + p1_puntaje = 0 + p2_puntaje = 0 + finished = False + error = False + + # Mapear puntajes a su representación en el tenis + puntajes = ["Love", "15","30","40"] + + for punto in secuencia: + + + if punto == "P1": + p1_puntaje += 1 + else: + p2_puntaje += 1 + + if p1_puntaje >= 3 and p2_puntaje >= 3: + if not finished and abs(p1_puntaje - p2_puntaje) <= 1: + print("Deuce" if p1_puntaje == p2_puntaje else + "Ventaja P1" if p1_puntaje > p2_puntaje else "Ventaja P2") + else: + finished = True + else: + if p1_puntaje < 4 and p2_puntaje < 4: + print(f"{puntajes[p1_puntaje]} - {puntajes[p2_puntaje]}") + else: + finished = True + + if error or not finished: + print("Los puntos no son correctos o faltan puntos para terminar el partido") + else: + print("Ha ganado el P1" if p1_puntaje > p2_puntaje else "Ha ganado el P2") + + + +def main(): + + secuencia = ["P1", "P1", "P2", "P2", "P2", "P1", "P1", "P2", "P1", "P1"] + game_resolver(secuencia) + +if __name__=="__main__": + main() From 8d090711336938430c4a608d0a9dd859fc2786bf Mon Sep 17 00:00:00 2001 From: jlcontini Date: Thu, 9 Nov 2023 18:59:03 -0300 Subject: [PATCH 0612/2103] Add(Reto#6): jlcontini.py --- .../python/jlcontini.py | 194 ++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/jlcontini.py diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/jlcontini.py b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/jlcontini.py new file mode 100644 index 0000000000..cd44ab0490 --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/jlcontini.py @@ -0,0 +1,194 @@ +# Reto #6: Piedra, Papel, Tijera, Lagarto, Spock +#### Dificultad: Media | Publicación: 06/02/23 | Corrección: 13/02/23 + +## Enunciado + +""" +``` +/* + * Crea un programa que calcule quien gana más partidas al piedra, + * papel, tijera, lagarto, spock. + * - El resultado puede ser: "Player 1", "Player 2", "Tie" (empate) + * - La función recibe un listado que contiene pares, representando cada jugada. + * - El par puede contener combinaciones de "🗿" (piedra), "📄" (papel), + * "✂️" (tijera), "🦎" (lagarto) o "🖖" (spock). + * - Ejemplo. Entrada: [("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")]. Resultado: "Player 2". + * - Debes buscar información sobre cómo se juega con estas 5 posibilidades. + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. +""" + +""" +# Logica del juego en texto: +Las tijeras cortan el papel, el papel envuelve la piedra, la piedra aplasta al lagarto, el lagarto envenena a Spock, Spock aplasta las tijeras, las tijeras decapitan al lagarto, el lagarto devora el papel, el papel desaprueba a Spock, Spock desintegra la piedra y, como siempre, la piedra aplasta las tijeras. +""" + +# Asignación de números a las opciones +# tijera: 1, papel: 2, piedra: 3, lagarto: 4, spock: 5 + +# Asignacion de numeros a las opciones graficas en un diccionario +game_options: dict = { +"✂️": 1, +"📄": 2, +"🗿": 3, +"🦎": 4, +"🖖": 5 +} + +print(f"\nDiccionario 'game_options'\n{game_options}") + + +def assign_game_key_values(game) -> list: + # Assign key value to game graphic elements + game_key_values = [] + counter = 0 + + for element in game: + counter += 1 + if counter < 3: + + for key in game_options: + if key == element: + game_key_values.append(game_options[key]) + else: + continue + + else: + return IOError("The game has too many elements (more than 2)") + + print(f"\ngame: {game}\ngame_key_values: {game_key_values}") + + return game_key_values + + + +# Lógica para ganar el juego +def game_logic(game_values: list) -> str: + print(f"\ndef game_logic") + + result = "" + + if game_values[0] == game_values[1]: + result = 0 + elif game_values in [[1, 2], [1, 4]]: # suman 3 y 5 # restan -1 1 // -3 3 + result = 1 + elif game_values in [[2, 3], [2, 5]]: # suman 5 y 7 # restan -1 1 // -3 3 + result = 2 + elif game_values in [[3, 4], [1, 3]]: # suman 7 y 4 # restan -1 1 // 2 -2 + result = 3 + elif game_values in [[4, 5], [2, 4]]: # suman 9 y 6 # restan 1 -1 // 2- 2 + result = 4 + elif game_values in [[1, 5], [3, 5]]: # suman 6 y 8 # restan 4 -4 // 2 -2 + result = 5 + else: + IOError("Input Error in game_values at def game_logic.") + + game_winner = str(result) + + print(f"game_winner: {game_winner}") + + return game_winner + + +def play_game(game_values: list) -> str: + + print("def play_game") + + game_winner = "" + + # Assign element to player + P1 = str(game_values[0]) + P2 = str(game_values[1]) + + print(f"P1= {P1} , P2= {P2}") + + if P1 == P2: + game_winner = "Tie" + else: + + # order elements in list + print("game_values original: ", game_values) + game_sort = game_values.copy() + game_sort.sort() + print("game_values .sort: ", game_sort) + + result = str(game_logic(game_sort)) + + print(f"\nvuelvo a def play_game\nresult: {result} (wins)") + print(f"'result' me devuelve el elemento que prevalece por lógica (gana) en valor numerico del 1 al 5") + + if result == P1: + game_winner = "P1" + elif result == P2: + game_winner = "P2" + else: + + print("No se pudo igualar a P1 ni a P2.") + + print("game_winner: ", game_winner) + + return game_winner + + +def check_winner_games(games_list): + print("def check_winner_games") + print(f"series of games:\n{games_list}\n") + + P1 = 0 + P2 = 0 + game_count = 0 + + for each_game in games_list: + + game_with_key_values = assign_game_key_values(each_game) + game_winner = play_game(game_with_key_values) + + if game_winner == "P1": + P1 += 1 + elif game_winner == "P2": + P2 += 1 + elif game_winner == "Tie": + pass + + game_count += 1 + print(f"Game {game_count}: {each_game}\nP1: {P1} - P2: {P2}\n") + + if P1 == P2: + winner = "Tie" + elif P1 > P2: + winner = "Player 1" + else: + winner = "Player 2" + + print(winner) + + return winner + + + +def main(): + print("\nmain\n") + + # Elementos "✂️", "📄", "🗿", "🦎", "🖖" + + games_list = [("✂️", "✂️"), ("🦎", "✂️"), ("📄", "🗿",), ("🗿", "🖖"), ("🦎", "📄"), ("📄", "🖖"), ("🖖", "🦎"), ("🗿", "🦎"), ("📄", "✂️")] + # games_list = [["🗿","✂️"]] + + # Ejemplo. + # games_list = [("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")] + # Resultado esperado: "Player 2". + + winner = check_winner_games(games_list) + + print(f"\n{winner}") + print(f"\nEl ganador de los partidos es {winner}\n") + + + +if __name__ == "__main__": + main() From 0cf87ac0e3d97924393a725a1ac3b8e1231121ca Mon Sep 17 00:00:00 2001 From: Patricio Date: Thu, 9 Nov 2023 20:03:40 -0300 Subject: [PATCH 0613/2103] reto#2 - python --- .../python/patotal.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/patotal.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/patotal.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/patotal.py new file mode 100644 index 0000000000..2b0da6e76e --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/patotal.py @@ -0,0 +1,65 @@ +""" + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. +""" + +def convierte_punto(punto): + if punto == 0: + return "Love" + if punto == 1: + return "15" + if punto == 2: + return "30" + if punto == 3: + return "40" + +marcador_p1 = 0 +marcador_p2 = 0 +while True: + entrada = input(str("Ingrese punto p1 o p2: ")) + if entrada not in ("p1", "p2"): + print("Valor inválido, vuelva a intentarlo") + continue + if entrada == "p1": + marcador_p1 += 1 + if entrada == "p2": + marcador_p2 += 1 + + if marcador_p1 > 3 and marcador_p2 <= 2: + print ("P1 ha ganado") + break + elif marcador_p2 > 3 and marcador_p1 <= 2: + print ("P2 ha ganado") + break + elif marcador_p1 >= 3 and marcador_p2 >= 3: + if marcador_p1 == marcador_p2: + print ("Deuce") + elif marcador_p1 > marcador_p2: + if marcador_p1 - marcador_p2 >= 2: + print ("P1 ha ganado") + break + else: + print("Ventaja P1") + elif marcador_p2 > marcador_p1: + if marcador_p2 - marcador_p1 >= 2: + print ("P2 ha ganado") + break + else: + print("Ventaja P2") + else: + print(f"{convierte_punto(marcador_p1)} - {convierte_punto(marcador_p2)}") + From 4be1cd38453bc56fa9d5ac75745431287663c8e9 Mon Sep 17 00:00:00 2001 From: Emill Date: Thu, 9 Nov 2023 19:00:25 -0500 Subject: [PATCH 0614/2103] uso de comprehension list --- .../python/Lemito66.py" | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git "a/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/Lemito66.py" "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/Lemito66.py" index c64087f03c..3f942c2894 100644 --- "a/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/Lemito66.py" +++ "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/Lemito66.py" @@ -13,14 +13,10 @@ """ def find_difference(string_one: str , string_two: str) -> list: - difference = [] if len(string_one) != len(string_two): return "Ambas cadenas de texto deben ser iguales en longitud." - for word in range(len(string_one)): - if string_one[word] != string_two[word]: - difference.append(string_two[word]) - return difference + return [string_two[word] for word in range(len(string_one)) if string_one[word] != string_two[word]] print(find_difference("Me llamo mouredev", "Me llemo mouredov")) print(find_difference("Me llamo.Brais Moure", "Me llamo brais moure")) From c66bfed9d2e5b8f79023e7fb17148c76433c8e2d Mon Sep 17 00:00:00 2001 From: Ricardo Mesa Gallego Date: Thu, 9 Nov 2023 19:39:32 -0500 Subject: [PATCH 0615/2103] Retos 7-8-9-10 --- .../python/rimega92.py | 30 ++++++++++ .../python/rimega92.py | 56 +++++++++++++++++++ .../python/rimega92.py | 10 ++++ .../python/rimega92.py" | 32 +++++++++++ 4 files changed, 128 insertions(+) create mode 100644 Retos/Reto #10 - LA API [Media]/python/rimega92.py create mode 100644 Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/rimega92.py create mode 100644 Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/rimega92.py create mode 100644 "Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/rimega92.py" diff --git a/Retos/Reto #10 - LA API [Media]/python/rimega92.py b/Retos/Reto #10 - LA API [Media]/python/rimega92.py new file mode 100644 index 0000000000..dd93a6e203 --- /dev/null +++ b/Retos/Reto #10 - LA API [Media]/python/rimega92.py @@ -0,0 +1,30 @@ +import requests + +def get_pokemon_info(pokemon_name): + url = f'https://pokeapi.co/api/v2/pokemon/{pokemon_name}' + + # Realizar la solicitud GET a la API + response = requests.get(url) + + # Comprobar el estado de la respuesta + if response.status_code == 200: # 200 significa éxito + # Mostrar la información obtenida en formato JSON + data = response.json() + print(f"Información de {pokemon_name.capitalize()}:") + print(f"Nombre: {data['name']}") + print(f"ID: {data['id']}") + print("Habilidades:") + for ability in data['abilities']: + print(f"- {ability['ability']['name']}") + else: + print(f"Error al obtener datos de {pokemon_name}. Código de estado: {response.status_code}") + +def main(): + pokemon_list = ['pikachu', 'charmander', 'squirtle', 'bulbasaur', 'jigglypuff', 'eevee', 'magikarp', 'snorlax'] + + for pokemon in pokemon_list: + get_pokemon_info(pokemon) + print("") + +if __name__ == "__main__": + main() diff --git a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/rimega92.py b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/rimega92.py new file mode 100644 index 0000000000..1cc7caff6d --- /dev/null +++ b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/rimega92.py @@ -0,0 +1,56 @@ +# Crea un programa que simule el comportamiento del sombrero selccionador del +# universo mágico de Harry Potter. +# - De ser posible realizará 5 preguntas (como mínimo) a través de la terminal. +# - Cada pregunta tendrá 4 respuestas posibles (también a selecciona una a través de terminal). +# - En función de las respuestas a las 5 preguntas deberás diseñar un algoritmo que +# coloque al alumno en una de las 4 casas de Hogwarts: +# (Gryffindor, Slytherin , Hufflepuff y Ravenclaw) +# - Ten en cuenta los rasgos de cada casa para hacer las preguntas +# y crear el algoritmo seleccionador: +# Por ejemplo, en Slytherin se premia la ambición y la astucia. + +def hacer_pregunta(pregunta, opciones): + print(pregunta) + for i, opcion in enumerate(opciones, 1): + print(f"{i}. {opcion}") + respuesta = int(input("Selecciona tu respuesta (escribe el número): ")) + while respuesta not in range(1, len(opciones) + 1): + respuesta = int(input("Respuesta inválida. Por favor, selecciona un número válido: ")) + return respuesta - 1 + +def sombrero_seleccionador(): + preguntas = [ + "¿Qué cualidad es más importante para ti?", + "¿Qué tipo de animal te gustaría ser?", + "¿Qué habilidad te gustaría tener?", + "En una situación difícil, ¿qué harías?", + "¿Qué lugar te llama más la atención?" + ] + + opciones = [ + ["Valentía", "Ambición", "Lealtad", "Intelecto"], + ["León", "Serpiente", "Tejón", "Águila"], + ["Poder", "Astucia", "Paciencia", "Conocimiento"], + ["Enfrentar el desafío directamente", "Planear cuidadosamente", "Apoyar a otros", "Analizar la situación"], + ["Bosque oscuro", "Sala común de Slytherin", "Campo abierto", "Biblioteca"] + ] + + puntajes = { + "Gryffindor": 0, + "Slytherin": 0, + "Hufflepuff": 0, + "Ravenclaw": 0 + } + + for i in range(5): + respuesta = hacer_pregunta(preguntas[i], opciones[i]) + puntajes["Gryffindor"] += respuesta == 0 # Añade 1 punto si la respuesta es la opción 1 + puntajes["Slytherin"] += respuesta == 1 # Añade 1 punto si la respuesta es la opción 2 + puntajes["Hufflepuff"] += respuesta == 2 # Añade 1 punto si la respuesta es la opción 3 + puntajes["Ravenclaw"] += respuesta == 3 # Añade 1 punto si la respuesta es la opción 4 + + casa_seleccionada = max(puntajes, key=puntajes.get) + print(f"¡Eres de la casa {casa_seleccionada}!") + +if __name__ == "__main__": + sombrero_seleccionador() diff --git a/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/rimega92.py b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/rimega92.py new file mode 100644 index 0000000000..cf5ee26dfd --- /dev/null +++ b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/rimega92.py @@ -0,0 +1,10 @@ +import time + +def generar_numero_pseudoaleatorio(): + seed = int(time.time()) # Obtener el tiempo actual como semilla + seed = (1103515245 * seed + 12345) % (2**31) # Algoritmo lineal congruente + numero_aleatorio = seed % 101 # Escalar el número para estar en el rango de 0 a 100 + return numero_aleatorio + +numero_aleatorio = generar_numero_pseudoaleatorio() +print(numero_aleatorio) \ No newline at end of file diff --git "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/rimega92.py" "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/rimega92.py" new file mode 100644 index 0000000000..199c690f37 --- /dev/null +++ "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/rimega92.py" @@ -0,0 +1,32 @@ +#Crea 3 funciones, cada una encargada de detectar si una cadena de +#texto es un heterograma, un isograma o un pangrama. +#- Debes buscar la definición de cada uno de estos términos. + + + + +def heterograma(cadena): + cadena = cadena.lower() + for i in cadena: + if cadena.count(i) > 1: + return False + return True + +def isograma(cadena): + cadena = cadena.lower() + for i in cadena: + if cadena.count(i) > 1: + return False + return True + +def pangrama(cadena): + cadena = cadena.lower() + for i in "abcdefghijklmnopqrstuvwxyz": + if i not in cadena: + return False + return True + +print(heterograma("luteranismo")) +print(isograma("papelera")) +print(pangrama("Benjamín pidió una bebida de kiwi y fresa. Noé, sin vergüenza, la más exquisita champaña del menú.")) + From 6f86771ee6cab3e661b4904568a6fd5672ada600 Mon Sep 17 00:00:00 2001 From: Oscar Hernandez Date: Thu, 9 Nov 2023 19:32:16 -0600 Subject: [PATCH 0616/2103] Solucion ejercicio #5 --- "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/ruby/oscar503sv.rb" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/ruby/oscar503sv.rb" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/ruby/oscar503sv.rb" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/ruby/oscar503sv.rb" new file mode 100644 index 0000000000..063be4f836 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/ruby/oscar503sv.rb" @@ -0,0 +1 @@ +puts "¡Hola mundo! :D" \ No newline at end of file From 9ba709676c020318531d67cd4c02a459e01c47b6 Mon Sep 17 00:00:00 2001 From: feltoxXx <5326671+feltoxXx@users.noreply.github.com> Date: Thu, 9 Nov 2023 22:33:54 -0300 Subject: [PATCH 0617/2103] Reto # 3 - Python --- .../python/feltoxXx.py" | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/feltoxXx.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/feltoxXx.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/feltoxXx.py" new file mode 100644 index 0000000000..1833649113 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/feltoxXx.py" @@ -0,0 +1,57 @@ +# Reto #3: EL GENERADOR DE CONTRASEÑAS + +# +# Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. +# Podrás configurar generar contraseñas con los siguientes parámetros: +# - Longitud: Entre 8 y 16. +# - Con o sin letras mayúsculas. +# - Con o sin números. +# - Con o sin símbolos. +# (Pudiendo combinar todos estos parámetros entre ellos) +# + +import argparse +import random +import string + +def generar_contrasena(longitud, incluir_mayusculas=True, incluir_numeros=True, incluir_simbolos=True): + try: + if 8 <= longitud <= 16: + caracteres = string.ascii_lowercase # caracteres en minúsculas + + if incluir_mayusculas: + caracteres += string.ascii_uppercase # agregar caracteres en mayúsculas + if incluir_numeros: + caracteres += string.digits # agregar números + if incluir_simbolos: + caracteres += string.punctuation # agregar símbolos + + if not (incluir_mayusculas or incluir_numeros or incluir_simbolos): + print(f"\nAñade el parámetro -h o --help para conocer las opciones.\n") + + contrasena = ''.join(random.choice(caracteres) for _ in range(longitud)) + print(f"Contraseña generada: {contrasena}") + else: + raise ValueError("La longitud de la contraseña debe estar entre 8 y 16 caracteres.") + + except: + print("La longitud de la contraseña debe estar entre 8 y 16 caracteres.") + + + + +def main(): + parser = argparse.ArgumentParser(description="Generador de contraseñas aleatorias") + parser.add_argument("-l", "--longitud", type=int, default=8, help="Longitud de la contraseña") + parser.add_argument("-m", "--mayusculas", action="store_true", help="Incluir letras mayúsculas") + parser.add_argument("-n", "--numeros", action="store_true", help="Incluir números") + parser.add_argument("-s", "--simbolos", action="store_true", help="Incluir símbolos") + + args = parser.parse_args() + + generar_contrasena(args.longitud, args.mayusculas, args.numeros, args.simbolos) + + + +if __name__ == "__main__": + main() From b10c77e2c37fff1cd40d6415f793b35b5b680b51 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Thu, 9 Nov 2023 19:46:04 -0600 Subject: [PATCH 0618/2103] resolucion a ejercicio 0 con javascript --- .../javascript/marvnramos.js" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/marvnramos.js" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/marvnramos.js" new file mode 100644 index 0000000000..3be1d1f931 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/marvnramos.js" @@ -0,0 +1,21 @@ +function fizzbuzz(){ + for(let i = 1; i <= 100; i++){ + if(i % 3 === 0){ + if(i % 5 === 0){ + console.log('fizzbuzz'); + } + else{ + console.log('fizz'); + } + } + else if(i % 5 === 0){ + console.log('buzz'); + } + else{ + console.log(i); + } + + + } +} +fizzbuzz(); \ No newline at end of file From 078c5b8d1a5894b69a6eae52078508ad77aa1e20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Ramos?= Date: Thu, 9 Nov 2023 21:56:39 -0400 Subject: [PATCH 0619/2103] Reto #4 - Python --- .../python/CaesaRR19.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/CaesaRR19.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/CaesaRR19.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/CaesaRR19.py new file mode 100644 index 0000000000..3e87cb11a3 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/CaesaRR19.py @@ -0,0 +1,27 @@ +def es_par(n: int) -> str: + if n % 2 == 0: + return "es par" + return "es impar" + + +def es_fibo(n: int) -> str: + a, b = 0, 1 + while n >= a: + b, a = a + b, b + if n == a: + return "fibonnaci" + return "no es fibonnaci" + + +def es_primo(n: int) -> str: + for x in range(2, n - 1): + if n % x == 0: + return "no es primo" + return "es primo" + + +def es_par_fibo_primo(n: int) -> str: + par = es_par(n) + fibo = es_fibo(n) + primo = es_primo(n) + return f"{n} {primo}, {fibo} y {par}" From b412b5b699123b6bb3f70dca0c4a0da787eaeea1 Mon Sep 17 00:00:00 2001 From: Rdiaz97 <107510814+Rdiaz97@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:39:34 -0400 Subject: [PATCH 0620/2103] Rename RafaelDiaz - Reto#0 (fizzbuzz) to Rdiaz97 - JavaScript --- .../javascript/Rdiaz97 - JavaScript" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/RafaelDiaz - Reto#0 (fizzbuzz)" => "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97 - JavaScript" (100%) diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/RafaelDiaz - Reto#0 (fizzbuzz)" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97 - JavaScript" similarity index 100% rename from "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/RafaelDiaz - Reto#0 (fizzbuzz)" rename to "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97 - JavaScript" From 0fcb8604b866e01aab1633bf487e3b133b7c4e23 Mon Sep 17 00:00:00 2001 From: Rdiaz97 <107510814+Rdiaz97@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:40:02 -0400 Subject: [PATCH 0621/2103] Rename Rdiaz97 - JavaScript to Rdiaz97.JavaScript --- .../javascript/Rdiaz97.JavaScript" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97 - JavaScript" => "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97.JavaScript" (100%) diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97 - JavaScript" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97.JavaScript" similarity index 100% rename from "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97 - JavaScript" rename to "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97.JavaScript" From 9f450998689020a50e7f481f2c9da4dabffe29f9 Mon Sep 17 00:00:00 2001 From: Rdiaz97 <107510814+Rdiaz97@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:42:53 -0400 Subject: [PATCH 0622/2103] Rename Rdiaz97.JavaScript to Rdiaz97.js --- .../javascript/Rdiaz97.js" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97.JavaScript" => "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97.js" (100%) diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97.JavaScript" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97.js" similarity index 100% rename from "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97.JavaScript" rename to "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/Rdiaz97.js" From c6c47490bcbc97bd6c633b51605d2ec1cf166f5e Mon Sep 17 00:00:00 2001 From: Rdiaz97 <107510814+Rdiaz97@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:44:10 -0400 Subject: [PATCH 0623/2103] =?UTF-8?q?Rename=20Retos/Reto=20#1=20-=20EL=20L?= =?UTF-8?q?ENGUAJE=20HACKER=20[F=C3=A1cil]/javascript/RafaelDiaz=20-=20ret?= =?UTF-8?q?o#1=20to=20Retos/Reto=20#1=20-=20EL=20LENGUAJE=20HACKER=20[F?= =?UTF-8?q?=C3=A1cil]/javascriptRdiaz97.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascriptRdiaz97.js" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/RafaelDiaz - reto#1" => "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascriptRdiaz97.js" (100%) diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/RafaelDiaz - reto#1" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascriptRdiaz97.js" similarity index 100% rename from "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/RafaelDiaz - reto#1" rename to "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascriptRdiaz97.js" From d4d03f4a325774fb9d724337da3d4ef2839b500d Mon Sep 17 00:00:00 2001 From: Rdiaz97 <107510814+Rdiaz97@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:57:47 -0400 Subject: [PATCH 0624/2103] Add files via upload From 95c05fcba4777139b93f062f125b8f3ce8407967 Mon Sep 17 00:00:00 2001 From: Rdiaz97 <107510814+Rdiaz97@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:58:31 -0400 Subject: [PATCH 0625/2103] Update and rename reto#1.html to Rdiaz97.html --- .../html-js/Rdiaz97.html" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/html-js/reto#1.html" => "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/html-js/Rdiaz97.html" (97%) diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/html-js/reto#1.html" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/html-js/Rdiaz97.html" similarity index 97% rename from "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/html-js/reto#1.html" rename to "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/html-js/Rdiaz97.html" index 9408726c60..862ea6d459 100644 --- "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/html-js/reto#1.html" +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/html-js/Rdiaz97.html" @@ -164,4 +164,4 @@ - \ No newline at end of file + From e52afc376ab1c331e9636c9afa1738b1b4ce6d22 Mon Sep 17 00:00:00 2001 From: Rdiaz97 <107510814+Rdiaz97@users.noreply.github.com> Date: Fri, 10 Nov 2023 11:10:13 -0400 Subject: [PATCH 0626/2103] =?UTF-8?q?Delete=20Retos/Reto=20#1=20-=20EL=20L?= =?UTF-8?q?ENGUAJE=20HACKER=20[F=C3=A1cil]/javascriptRdiaz97.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascriptRdiaz97.js" | 167 ------------------ 1 file changed, 167 deletions(-) delete mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascriptRdiaz97.js" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascriptRdiaz97.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascriptRdiaz97.js" deleted file mode 100644 index 7417c5a3fb..0000000000 --- "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascriptRdiaz97.js" +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - Reto #1 - - -
- - -
- - - - From a03c5700df03bc850a7954130597f0c463fabfa9 Mon Sep 17 00:00:00 2001 From: Rdiaz97 <107510814+Rdiaz97@users.noreply.github.com> Date: Fri, 10 Nov 2023 11:11:04 -0400 Subject: [PATCH 0627/2103] =?UTF-8?q?Delete=20Retos/Reto=20#0=20-=20EL=20F?= =?UTF-8?q?AMOSO=20FIZZ=20BUZZ=20[F=C3=A1cil]/html-css-js/Reto#0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../html-css-js/Reto#0" | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/html-css-js/Reto#0" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/html-css-js/Reto#0" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/html-css-js/Reto#0" deleted file mode 100644 index dae499bc18..0000000000 --- "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/html-css-js/Reto#0" +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - Reto #0 - - - - - From b00350e6eeb63775c5187c9d17c9fc30c64493e5 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Fri, 10 Nov 2023 19:38:54 +0100 Subject: [PATCH 0628/2103] reto#36 - javascript --- .../javascript/almarro1.js | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Retos/Reto #36 - PERMUTACIONES [Media]/javascript/almarro1.js diff --git a/Retos/Reto #36 - PERMUTACIONES [Media]/javascript/almarro1.js b/Retos/Reto #36 - PERMUTACIONES [Media]/javascript/almarro1.js new file mode 100644 index 0000000000..5f651cfcbd --- /dev/null +++ b/Retos/Reto #36 - PERMUTACIONES [Media]/javascript/almarro1.js @@ -0,0 +1,22 @@ +function permutar(palabra) { + const letras = palabra.split(''); + function permutaArray(array) { + const permutaciones = []; + for (let indice = 0; indice < array.length; indice++) { + if (array.length > 1) { + const primero = array.shift(); + permutaArray(array).forEach(x => { + const y = [primero, ...x]; + permutaciones.push([...y]); + }); + array.push(primero); + } else { + permutaciones.push([...array]); + } + } + return permutaciones; + } + return permutaArray(letras).map(x => x.join('')); +} + +console.log(permutar('abcde')); From 69fef21ad8ef63e82c90aac71a6a46531f875ca6 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Fri, 10 Nov 2023 19:56:53 +0100 Subject: [PATCH 0629/2103] reto#32 - javascript --- .../javascript/almarro1.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/javascript/almarro1.js diff --git a/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/javascript/almarro1.js b/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/javascript/almarro1.js new file mode 100644 index 0000000000..374d69cae5 --- /dev/null +++ b/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/javascript/almarro1.js @@ -0,0 +1,15 @@ +const LABELS = [ + // 0 - 6 + 'A', 'B', 'C', 'D', 'E', 'F', 'G', + // 7 - 13 + 'H', 'I', 'J', 'K', 'L', 'M', 'N', + // 14 - 20 + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', + // 21 - 25 + 'V', 'W', 'X', 'Y', 'Z']; +function columnIndex(columnText) { + const letters = columnText.toUpperCase().split(''); + return letters.reduce((total, digit) => total * 26 + LABELS.indexOf(digit) + 1, 0); +} + +['A', 'AA', 'CA', 'ZZ'].forEach(test => console.log(`Índice para ${test}=${columnIndex(test)}`)); From 7e2a8c3d5a5882f4e0047d9b8fdfe8fb8ca9f750 Mon Sep 17 00:00:00 2001 From: Ricardo Mesa Gallego Date: Fri, 10 Nov 2023 14:02:11 -0500 Subject: [PATCH 0630/2103] Add new Python scripts for URL parameters and Friday the 13th, and a game for guessing a hidden word. --- .../python/rimega92.py" | 18 +++++++ .../python/rimega92.py" | 17 ++++++ .../python/rimega92.py | 52 +++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 "Retos/Reto #11 - URL PARAMS [F\303\241cil]/python/rimega92.py" create mode 100644 "Retos/Reto #12 - VIERNES 13 [F\303\241cil]/python/rimega92.py" create mode 100644 Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rimega92.py diff --git "a/Retos/Reto #11 - URL PARAMS [F\303\241cil]/python/rimega92.py" "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/python/rimega92.py" new file mode 100644 index 0000000000..a77f85e67f --- /dev/null +++ "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/python/rimega92.py" @@ -0,0 +1,18 @@ +from urllib.parse import urlparse, parse_qs + +def obtener_valores_parametros(url): + # Obtener la parte de la consulta de la URL + parsed_url = urlparse(url) + + # Obtener un diccionario con los valores de los parámetros + parametros_dict = parse_qs(parsed_url.query) + + # Convertir el diccionario a un diccionario de claves y valores + clave_valor_dict = {clave: valor[0] for clave, valor in parametros_dict.items()} + + return clave_valor_dict + +url_ejemplo = "https://retosdeprogramacion.com?year=2023&challenge=0" +resultado = obtener_valores_parametros(url_ejemplo) +for clave, valor in resultado.items(): + print(clave,':', valor) diff --git "a/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/python/rimega92.py" "b/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/python/rimega92.py" new file mode 100644 index 0000000000..227ef2a60e --- /dev/null +++ "b/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/python/rimega92.py" @@ -0,0 +1,17 @@ +from datetime import datetime + +def existe_viernes_13(mes, anio): + # Crear un objeto de fecha para el 13 del mes y año dados + fecha_13 = datetime(anio, mes, 13) + + # Verificar si el día de la semana es viernes (código 4 en la librería datetime) + return fecha_13.weekday() == 4 + +mes_ejemplo = 10 # Octubre +anio_ejemplo = 2023 +resultado = existe_viernes_13(mes_ejemplo, anio_ejemplo) + +if resultado: + print(f'¡Sí existe un viernes 13 en {mes_ejemplo}/{anio_ejemplo}!') +else: + print(f'No hay un viernes 13 en {mes_ejemplo}/{anio_ejemplo}.') \ No newline at end of file diff --git a/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rimega92.py b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rimega92.py new file mode 100644 index 0000000000..ab94f961ee --- /dev/null +++ b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rimega92.py @@ -0,0 +1,52 @@ +import random + +def ocultar_letras(palabra): + """ + Oculta aleatoriamente algunas letras de la palabra. + No oculta más del 60% de las letras y siempre deja la primera letra visible. + """ + letras_ocultas = list(palabra[1:]) + random.shuffle(letras_ocultas) + num_letras_ocultas = max(1, int(0.6 * len(letras_ocultas))) + letras_ocultas = letras_ocultas[:num_letras_ocultas] + + palabra_oculta = [palabra[0]] + ['_' if letra in letras_ocultas else letra for letra in palabra[1:]] + + return ''.join(palabra_oculta) + +def jugar_adivinanza(palabra, intentos_maximos=6): + palabra_oculta = ocultar_letras(palabra) + intentos_restantes = intentos_maximos + + print(f"Bienvenido al juego de adivinanza. Palabra a adivinar: {palabra_oculta}") + + while intentos_restantes > 0 and '_' in palabra_oculta: + entrada_usuario = input(f"\nIntentos restantes: {intentos_restantes}. Ingresa una letra o la palabra completa: ").lower() + + if len(entrada_usuario) == 1 and entrada_usuario.isalpha(): + if entrada_usuario in palabra[1:]: + print("¡Correcto! La letra está en la palabra.") + palabra_oculta = ''.join([letra if letra == entrada_usuario or palabra_oculta[i] != '_' else '_' for i, letra in enumerate(palabra)]) + else: + print("Incorrecto. La letra no está en la palabra.") + intentos_restantes -= 1 + elif len(entrada_usuario) == len(palabra) and entrada_usuario.isalpha(): + if entrada_usuario == palabra: + print("¡Felicidades! Has adivinado la palabra correctamente.") + break + else: + print("Incorrecto. La palabra no es la correcta.") + intentos_restantes -= 1 + else: + print("Entrada inválida. Ingresa una letra o la palabra completa de la longitud correcta.") + + print(f"Palabra actual: {palabra_oculta}") + + if '_' not in palabra_oculta: + print("\n¡Felicidades! Has adivinado la palabra correctamente.") + else: + print(f"\n¡Lo siento! Has agotado todos tus intentos. La palabra correcta era: {palabra}") + +# Ejemplo de uso +palabra_a_adivinar = "RicardoMesaGallego" +jugar_adivinanza(palabra_a_adivinar) From 9c182888a5d2c26dbae83b95fb9c5edf6035c379 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Fri, 10 Nov 2023 20:06:13 +0100 Subject: [PATCH 0631/2103] reto#31 - javascript --- .../javascript/almarro1.js" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/javascript/almarro1.js" diff --git "a/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/javascript/almarro1.js" "b/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/javascript/almarro1.js" new file mode 100644 index 0000000000..38e2577810 --- /dev/null +++ "b/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/javascript/almarro1.js" @@ -0,0 +1,10 @@ +function abaco(numero) { + return numero.toString().padStart(7, '0').split('') + .map(x => Number(x)) + .map(digit => `${'0'.repeat(digit)}---${'0'.repeat(9 - digit)}`); +} + +[1302790, 0, 9999999].forEach(n => { + console.log(n); + console.log(abaco(n)); +}); From 1a3f06f0e364b7f33bcffec1b05cc2ff3bb85d9e Mon Sep 17 00:00:00 2001 From: Alvaro Date: Fri, 10 Nov 2023 20:16:17 +0100 Subject: [PATCH 0632/2103] reto#30 - javascript --- .../javascript/almarro1.js | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Retos/Reto #30 - EL TECLADO T9 [Media]/javascript/almarro1.js diff --git a/Retos/Reto #30 - EL TECLADO T9 [Media]/javascript/almarro1.js b/Retos/Reto #30 - EL TECLADO T9 [Media]/javascript/almarro1.js new file mode 100644 index 0000000000..d7646cd4cc --- /dev/null +++ b/Retos/Reto #30 - EL TECLADO T9 [Media]/javascript/almarro1.js @@ -0,0 +1,34 @@ +const translations = { + '2': 'A', + '22': 'B', + '222': 'C', + '3': 'D', + '33': 'E', + '333': 'F', + '4': 'G', + '44': 'H', + '444': 'I', + '5': 'J', + '55': 'K', + '555': 'L', + '6': 'M', + '66': 'N', + '666': 'O', + '7': 'P', + '77': 'Q', + '777': 'R', + '7777': 'S', + '8': 'T', + '88': 'U', + '888': 'V', + '9': 'W', + '99': 'X', + '999': 'Y', + '9999': 'Z', +}; + +function translate(sequence) { + return sequence.split('-').map(x => translations[x]).join(''); +} + +console.log(`6-666-88-777-33-3-33-888 -> ${translate('6-666-88-777-33-3-33-888')}`) \ No newline at end of file From 9d62c18f5299d648a61432a51aad428363e8677c Mon Sep 17 00:00:00 2001 From: Damian Date: Fri, 10 Nov 2023 20:25:15 -0300 Subject: [PATCH 0633/2103] Reto #42 - C --- .../c/paluzz.c" | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c/paluzz.c" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c/paluzz.c" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c/paluzz.c" new file mode 100644 index 0000000000..5235f8e4b7 --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c/paluzz.c" @@ -0,0 +1,81 @@ +#include + +struct vector +{ + float coordenada[2]; + float velocidad[2]; +}; +void rellenarVector(struct vector *p) +{ + int i; + for (i = 0; i < 2; i++) + { + printf("Datos iniciales Vector #%d: \n", i + 1); + printf("En [m]... \n"); + printf("Ingrese Xi: "); + scanf("%f", &((p + i)->coordenada[0])); + printf("Ingrese Yi: "); + scanf("%f", &((p + i)->coordenada[1])); + printf("En [m/s]... \n"); + printf("Ingrese Vxi: "); + scanf("%f", &((p + i)->velocidad[0])); + printf("Ingrese Vyi: "); + scanf("%f", &((p + i)->velocidad[1])); + } +} + +int colision(struct vector *p, float *px, float *py) +{ + float vx, vy; + float posx, posy; + float tiempox, tiempoy, tiempo; + + vx = (p + 0)->velocidad[0] - (p + 1)->velocidad[0]; + vy = (p + 0)->velocidad[1] - (p + 1)->velocidad[1]; + posx = (p + 1)->coordenada[0] - (p + 0)->coordenada[0]; + posy = (p + 1)->coordenada[1] - (p + 0)->coordenada[1]; + + if (vx != 0 && vy != 0) + { + tiempox = posx / vx; + tiempoy = posy / vy; + if (tiempox == tiempoy) + { + *px = (p + 0)->coordenada[0] + ((p + 0)->velocidad[0] * tiempox); + *py = (p + 0)->coordenada[1] + ((p + 0)->velocidad[1] * tiempoy); + + tiempo = tiempox; + } + else + { + tiempo = -1; + } + } + else + { + tiempo = -1; + } + + return tiempo; +} + +int main(void) +{ + struct vector v[2]; + float px, py, t; + + rellenarVector(v); + printf("\n"); + + t = colision(v, &px, &py); + if (t >= 0) + { + printf("Los vectores colisionan en [%.2f,%.2f] a los %.2f segundos\n", px, py, t); + } + else + { + printf("Los vectores no colisionan\n"); + } + + return 0; +} \ No newline at end of file From 1b9a547955a46a1b0476fe4657358559517a8d21 Mon Sep 17 00:00:00 2001 From: Damian Date: Fri, 10 Nov 2023 22:15:40 -0300 Subject: [PATCH 0634/2103] Reto #42 - C --- .../Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c/paluzz.c" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c/paluzz.c" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c/paluzz.c" index 5235f8e4b7..eace840e37 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c/paluzz.c" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/c/paluzz.c" @@ -24,7 +24,7 @@ void rellenarVector(struct vector *p) } } -int colision(struct vector *p, float *px, float *py) +float colision(struct vector *p, float *px, float *py) { float vx, vy; float posx, posy; From c66283f594f5415ddc281aeaf4797f9db57fe7d9 Mon Sep 17 00:00:00 2001 From: Damian Date: Sat, 11 Nov 2023 00:39:38 -0300 Subject: [PATCH 0635/2103] Reto #43 - c --- .../c/paluzz.c" | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/c/paluzz.c" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/c/paluzz.c" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/c/paluzz.c" new file mode 100644 index 0000000000..11e442ce84 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/c/paluzz.c" @@ -0,0 +1,134 @@ +/* + * 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 disminuye 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. + */ +#include +#include +#include +#include + +void iniciarTimer(void); +int randomTemp(int); +int max(int *, int); +int min(int *, int); +void clima(int, float, int); + +int main(void) +{ + clima(24, 0.9, 10); + clima(26, 0.5, 7); + clima(29, 0.3, 14); + + return 0; +} + +void iniciarTimer(void) +{ + srand(time(NULL)); +} + +int randomTemp(int temp) +{ + int prob = rand() % 20; + // asignamos una Prob de 5% de aumentar y un 5% de disminuir + if (prob == 1) + { + temp += 2; + } + else if (prob == 2) + { + temp -= 2; + } + + return temp; +} + +int max(int *p, int cant) +{ + int i, max = 0; + for (i = 0; i < cant; i++) + { + if (*(p + i) > max) + { + max = *(p + i); + } + } + return max; +} + +int min(int *p, int cant) +{ + int i, min = *(p + 0); + for (i = 0; i < cant; i++) + { + if (*(p + i) < min) + { + min = *(p + i); + } + } + return min; +} + +void clima(int tempActual, float plluvia, int cantDias) +{ + iniciarTimer(); + + int llueve = 0, i; + int maxTemp = 0, minTemp; + int *dia; + // asignamos memoria dinamica + dia = (int *)malloc(sizeof(int) * cantDias); + if (dia == NULL) + { + printf("Error asignacion memoria\n"); + exit(1); + } + + for (i = 0; i < cantDias; i++) + { + if (plluvia >= 1) + { + llueve++; + tempActual -= 1; + } + if (tempActual > 25) + { + plluvia += 0.2; + } + else if ((maxTemp - tempActual) >= 5) + { + plluvia -= 0.2; + } + // guardamos la temperatura actual + dia[i] = tempActual; + // calculamos la temp maxima + maxTemp = max(dia, (i + 1)); + // actualizamos la temperatura + tempActual = randomTemp(tempActual); + } + + minTemp = min(dia, cantDias); + + printf("Temperatura maxima: %d°C\n", maxTemp); + printf("Temperatura minima: %d°C\n", minTemp); + if (llueve > 0) + { + printf("Llueve %d dias\n", llueve); + } + else + { + printf("No ha llovido\n"); + } + free(dia); +} \ No newline at end of file From 7fe547c49b624940cf9854babeb4393c2ba47e58 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Fri, 10 Nov 2023 22:14:18 -0600 Subject: [PATCH 0636/2103] reto #0 solucion con py --- .../python/marvnramos.py" | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/marvnramos.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/marvnramos.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/marvnramos.py" new file mode 100644 index 0000000000..2d523a3d49 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/marvnramos.py" @@ -0,0 +1,13 @@ +def bizzbuzz(): + for number in range(1,101): + if number % 3 == 0: + if number % 5 == 0: + print('fizzbuzz') + else: + print('fizz') + elif number % 5 == 0: + print('buzz') + else: + print(number) + +bizzbuzz() \ No newline at end of file From cde3422d7ddd63455c48504758bccce4f8aaa10c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20Silanes?= Date: Sat, 11 Nov 2023 13:18:19 +0100 Subject: [PATCH 0637/2103] [reto-043] Completado --- .../python/isilanes.py" | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/isilanes.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/isilanes.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/isilanes.py" new file mode 100644 index 0000000000..8f101e34cd --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/isilanes.py" @@ -0,0 +1,127 @@ +""" +Comentarios: +- El enunciado no exige aplicar mínimos o máximos a temperatura o probabilidad de lluvia. + Por sentido común, he forzado la probabilidad de lluvia a ester entre (0%, 100%), + y la temperatura a estar entre dos valores configurables ((-20, +50) por defecto). +- El enunciado parece implicar que sólo llueve cuando la probabilidad es de 100%, + no que llueva según la probabilidad de lluvia. +- El enunciado no aclara si cuando llueve la probabilidad de lluvia al día + siguiente se modifica. +- El enunciado no aclara si el 10% de probabilidad de que la temperatura suba o baje + de un día a otro se reparte igualmente entre subir o bajar. He supuesto que sí, + con lo cual habría un 5% de subir, un 5% de bajar y un 90% de mantenerse. +- El enunciado no menciona unidades para la temperatura, así que no se han usado. +""" +import random +import sys +from typing import Tuple + + +MIN_TEMPERATURE = -20 +MAX_TEMPERATURE = 50 +TEMPERATURE_THRESHOLD_INCREASE_RAIN = 25 # above this temp, rain prob increases next day +TEMPERATURE_THRESHOLD_DECREASE_RAIN = 5 # below this temp, rain prob decreases next day +RAIN_PROBABILITY_DELTA = 20 # percent prob increase/decrease if temp above/below thresholds +TEMPERATURE_DELTA_IF_RAIN = 1 # decrease in next-day temp if it rains today +PROBABILITY_TEMPERATURE_DELTA = 10 # probability that temperature changes wrt previous temp + + +def validated_input() -> Tuple[int, float, float]: + """ + Get input simulation days and initial rain probability from the arguments + passed in the script call. + + Args: + None. + + Returns: + Tuple: (simulation days, initial temperature, initial rain probability). + """ + try: + days = int(sys.argv[1]) + except (IndexError, ValueError): + raise ValueError("You must pass a valid amount of days as first argument.") + + if days <= 1: + raise ValueError(f"Simulation does not make sense for fewer than 2 days (you entered {days})") + + try: + temperature = float(sys.argv[2]) + except (IndexError, ValueError): + raise ValueError("You must pass a valid temperature as second argument.") + + if not (MIN_TEMPERATURE <= temperature <= MAX_TEMPERATURE): + raise ValueError(f"Temperature must be between {MIN_TEMPERATURE} and {MAX_TEMPERATURE}") + + try: + rain_prob = float(sys.argv[3]) + except (IndexError, ValueError): + raise ValueError("You must pass a valid rain probability as third argument.") + + if not (0 <= rain_prob <= 100): + raise ValueError("Rain probability must be between 0 and 100") + + return days, temperature, rain_prob + + +def new_random_temperature(temperature: float) -> float: + """ + Given an initial temperature, return today's new temperature. + The rules are: + - (100 - PROBABILITY_TEMPERATURE_DELTA) probability of temperature staying the same. + - PROBABILITY_TEMPERATURE_DELTA probability of temperature going up or down: + - 50% probability of going up by 2 degrees + - 50% probability of going down by 2 degrees + """ + if random.random() <= (1. - PROBABILITY_TEMPERATURE_DELTA/100.): + return temperature + + if random.random() <= 0.5: + return temperature + 2 + + return temperature - 2 + + +def main(days: int, temperature: float, rain_prob: float) -> None: + """ + Run the simulation. + """ + min_temperature, max_temperature, rain_days = None, None, 0 + for day in range(days): + it_rained = False + temperature = new_random_temperature(temperature) + + if rain_prob >= 100: + rain_prob = 100 + it_rained = True + elif rain_prob <= 0: + rain_prob = 0 + + if min_temperature is None or temperature < min_temperature: + min_temperature = temperature + + if max_temperature is None or temperature > max_temperature: + max_temperature = temperature + + print(f"Day {day}: {temperature} degrees, {'it rained' if it_rained else 'it did not rain'}") + + if temperature > TEMPERATURE_THRESHOLD_INCREASE_RAIN: + rain_prob += RAIN_PROBABILITY_DELTA + elif temperature < TEMPERATURE_THRESHOLD_DECREASE_RAIN: + rain_prob -= RAIN_PROBABILITY_DELTA + + if it_rained: + temperature -= TEMPERATURE_DELTA_IF_RAIN + rain_days += 1 + + if temperature > MAX_TEMPERATURE: + temperature = MAX_TEMPERATURE + elif temperature < MIN_TEMPERATURE: + temperature = MIN_TEMPERATURE + + print(f"\nSummary:\n Max T: {max_temperature}\n Min T: {min_temperature}\n Rain days: {rain_days}") + + +if __name__ == "__main__": + simulation_days, initial_temperature, initial_rain_prob = validated_input() + main(days=simulation_days, temperature=initial_temperature, rain_prob=initial_rain_prob) From 7c7f8a135e1da3e927949513c57bfb8e72c1e680 Mon Sep 17 00:00:00 2001 From: feltoxXx <5326671+feltoxXx@users.noreply.github.com> Date: Sat, 11 Nov 2023 09:23:09 -0300 Subject: [PATCH 0638/2103] Reto #4 - Python --- .../python/feltoxXx.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/feltoxXx.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/feltoxXx.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/feltoxXx.py new file mode 100644 index 0000000000..857df024ba --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/feltoxXx.py @@ -0,0 +1,49 @@ +# Reto #4: PRIMO, FIBONACCI Y PAR + +# +# +# Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. +# Ejemplos: +# - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" +# - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" +# + + +def es_primo(numero): + if numero < 2: + return False + for i in range(2, int(numero**0.5) + 1): + if numero % i == 0: + return False + return True + +def es_fibonacci(numero): + # Un número es un cuadrado perfecto en la secuencia de Fibonacci si y solo si es mayor a 0 y (5 * n^2 + 4) o (5 * n^2 - 4) es un cuadrado perfecto + return numero > 0 and (((5 * numero**2 + 4)**0.5 % 1 == 0) or ((5 * numero**2 - 4)**0.5 % 1 == 0)) + +def es_par(numero): + return numero % 2 == 0 + +def main(): + numero = int(input("Ingrese un número: ")) + + if es_primo(numero): + primo = "es primo" + else: + primo = "no es primo" + + if es_fibonacci(numero): + fibonacci = "es fibonacci" + else: + fibonacci = "no es fibonacci" + + if es_par(numero): + par = "par" + else: + par = "impar" + + resultado = f"{numero} {primo}, {fibonacci} y es {par}" + print(resultado) + +if __name__ == "__main__": + main() From 9cf589bc3a4c9f3ef03c4a67451fbe1be8a16642 Mon Sep 17 00:00:00 2001 From: feltoxXx <5326671+feltoxXx@users.noreply.github.com> Date: Sat, 11 Nov 2023 09:28:22 -0300 Subject: [PATCH 0639/2103] Reto # 5 - Python --- .../python/feltoxXx.py" | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/feltoxXx.py" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/feltoxXx.py" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/feltoxXx.py" new file mode 100644 index 0000000000..86441ef7bb --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/feltoxXx.py" @@ -0,0 +1,12 @@ +# Reto #5: ¡Hola Mundo! + + +# +# Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas. +# Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado, +# o quizás quieres dar tus primeros pasos... ¡Pues este es el momento! +# +# A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí... +# + +print("Hola Mundo!") \ No newline at end of file From c08add77c5b11cf9049b1b7792ecb46d376549d6 Mon Sep 17 00:00:00 2001 From: feltoxXx <5326671+feltoxXx@users.noreply.github.com> Date: Sat, 11 Nov 2023 09:59:23 -0300 Subject: [PATCH 0640/2103] Reto # 6 - Python --- .../python/feltoxXx.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/feltoxXx.py diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/feltoxXx.py b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/feltoxXx.py new file mode 100644 index 0000000000..bf4596b2ff --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/feltoxXx.py @@ -0,0 +1,37 @@ +# Reto #6: Piedra, Papel, Tijera, Lagarto, Spock + +# Crea un programa que calcule quien gana más partidas al piedra, +# papel, tijera, lagarto, spock. +# - El resultado puede ser: "Player 1", "Player 2", "Tie" (empate) +# - La función recibe un listado que contiene pares, representando cada jugada. +# - El par puede contener combinaciones de "🗿" (piedra), "📄" (papel), +# "✂️" (tijera), "🦎" (lagarto) o "🖖" (spock). +# - Ejemplo. Entrada: [("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")]. Resultado: "Player 2". +# - Debes buscar información sobre cómo se juega con estas 5 posibilidades. +# + +def rock_paper_scissor_lizard_spock(games): + rules = { + "🗿": ["✂️", "🦎"], + "📄": ["🗿", "🖖"], + "✂️": ["📄", "🦎"], + "🦎": ["🖖", "📄"], + "🖖": ["🗿", "✂️"] + } + + player_one = 0 + player_two = 0 + + for player_one_game, player_two_game in games: + if player_one_game != player_two_game: + if player_two_game in rules[player_one_game]: + player_one += 1 + else: + player_two += 1 + + return "Tie" if player_one == player_two else "Player 1" if player_one > player_two else "Player 2" + +if __name__ == '__main__': + print(rock_paper_scissor_lizard_spock([("🗿", "✂️"), ("📄", "🗿"), ("✂️", "📄"), ("🦎", "🖖"), ("🖖", "🗿")])) + print(rock_paper_scissor_lizard_spock([("🗿", "🗿")])) + print(rock_paper_scissor_lizard_spock([("🗿", "📄"), ("✂️", "🗿"), ("📄", "✂️"), ("🖖", "🦎"), ("🦎", "📄")])) From 755a4c0ba7866a4a31782ec27914c6466fe918ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20Silanes?= Date: Sat, 11 Nov 2023 16:36:47 +0100 Subject: [PATCH 0641/2103] [reto-042] Completado --- .../python/isilanes.py" | 188 ++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/isilanes.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/isilanes.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/isilanes.py" new file mode 100644 index 0000000000..c820e3ba5e --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/isilanes.py" @@ -0,0 +1,188 @@ +""" +Comentarios: + +- El enunciado no menciona que los objetos tengan tamaño. Si no lo tienen, + la probabilidad de cruzarse es cero, excepto que sus vectores de velocidad + sean colineares, y su velocidad relativa sea negativa. Voy a asumir que + los puntos tienen un tamaño finito, definido como el resto de variables. + +Desarrollo matemático: + +Definamos las posiciones los objetos en un momento t como: + + p1(t) = (x1(t), y1(t)) + p2(t) = (x2(t), y2(t)) + + Nos puede resultar útil definir: + + dx(t) = x2(t) - x1(t) + = x2(0) + v2x * t - (x1(0) + v1x) * t + = x2(0) - x1(0) + (v2x - v1x) * t + = dx(0) + dvx * t + dy(t) = y2(t) - y1(t) + = dy(0) + dvy * t + +La distancia entre ambos objetos en un instante cualquiera será: + +D(t) = sqrt((x2(t)-x1(t))**2 + (y2(t)-y1(t))**2) + +Encontrar el mínimo de D(t) equivaldrá a encontrar el mínimo de D(t)**2 (siendo D +siempre positivo), y es más fácil de calcular: + +D(t)**2 = (x2(t)-x1(t))**2 + (y2(t)-y1(t))**2 + = dx(t)**2 + dy(t)**2 + +El mínimo de esa función (respecto al tiempo) se hallará igualando su derivada +(respecto al tiempo) a cero: + +[D(t)**2]' = 2 * dx(t) * [dx(t)]' + 2 * dy(t) * [dy(t)]' + 0 = dx(t) * dx(t)' + dy(t) * dy(t)' + +Las derivadas de dx(t) y dy(t), usando las ecuaciones del segundo bloque arriba: + +dx(t)' = [dx(0) + dvx * t]' + = dvx +dy(t)' = dvy + +Por tanto: +0 = dx(t) * dvx + dy(t) * dvy + = (dx(0) + dvx * t) * dvx + (dy(0) + dvy * t) * dvy + = t * (dvx**2 + dvy**2) + dx(0) * dvx + dy(0) * dvy + +Y finalmente: + +t = (-dx(0) * dvx - dy(0) * dvy) / (dvx**2 + dvy**2) +""" +import math +from dataclasses import dataclass + + +EPSILON = 10**-9 + + +@dataclass +class Position: + x: float + y: float + + def distance_to(self, other: 'Position') -> float: + dx = other.x - self.x + dy = other.y - self.y + + return math.sqrt(dx**2 + dy**2) + + +@dataclass +class Velocity: + x: float + y: float + + +@dataclass +class MovingObject: + radius: float + position: Position + velocity: Velocity + + def position_after_time(self, t: float) -> Position: + x = self.position.x + t * self.velocity.x + y = self.position.y + t * self.velocity.y + + return Position(x=x, y=y) + + +@dataclass +class Result: + time: float + distance: float + position1: Position + position2: Position + we_have_collision: bool = False + + +def calculate_closest_time(object1: MovingObject, object2: MovingObject) -> float: + """ + Given two objects moving in a 2D plane, say when they will be closest to each other. + See mathematical procedure at the top of this file for an explanation. + + Args: + object1 (MovingObject): first moving object. + object2 (MovingObject): second moving object. + + Return: + Time, as a float. + """ + dx0 = object2.position.x - object1.position.x + dvx = object2.velocity.x - object1.velocity.x + dy0 = object2.position.y - object1.position.y + dvy = object2.velocity.y - object1.velocity.y + + return (-dx0 * dvx - dy0 * dvy)/(dvx**2 + dvy**2) + + +def calculate_collision(object1: MovingObject, object2: MovingObject) -> Result: + """ + Given two objects moving in a 2D plane, say if, when and where + they will meet. + The objects are considered to meet if their closest approach is + closer than the sum of their radii. + + Args: + object1 (MovingObject): first moving object. + object2 (MovingObject): second moving object. + + Return: + A Result object, with all the data we want. + """ + t = calculate_closest_time(object1, object2) + + # Closest distance: + p1 = object1.position_after_time(t) + p2 = object2.position_after_time(t) + + d = p1.distance_to(p2) + + we_have_collision = d <= (object1.radius + object2.radius) + return Result(time=t, distance=d, position1=p1, position2=p2, we_have_collision=we_have_collision) + + +if __name__ == "__main__": + # Example: + print("Example:") + o1 = MovingObject(radius=0.1, position=Position(0, 0), velocity=Velocity(0, 0)) + o2 = MovingObject(radius=0.1, position=Position(1, 0), velocity=Velocity(-1, 0)) + r = calculate_collision(o1, o2) + print(o1) + print(o2) + print(r) + + # Test #1: + assert r.we_have_collision is True + assert abs(r.time - 1.0) < EPSILON + print("\nTest #1 - pass") + + # Test #2: + o1.velocity.y = 0.25 + o2.velocity = Velocity(-0.25, 0.25) + r = calculate_collision(o1, o2) + assert r.we_have_collision is True + assert abs(r.time - 4.0) < EPSILON + print("Test #2 - pass") + + # Test #3: + o1.velocity.y = 0.25 + o2.velocity = Velocity(-0.125, 0.125) + r = calculate_collision(o1, o2) + assert r.we_have_collision is False + assert abs(r.time - 4.0) < EPSILON + assert abs(r.distance - math.sqrt(0.5)) < EPSILON + print("Test #3 - pass") + + # Test #4: + o1.velocity = Velocity(0, 1) + o2.velocity = Velocity(0, -1) + r = calculate_collision(o1, o2) + assert r.we_have_collision is False + assert abs(r.time) < EPSILON + assert abs(r.distance - 1.0) < EPSILON + print("Test #4 - pass") From f31a937aa6f56da5b96b0f7c21c1e1e155b2bd86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20Silanes?= Date: Sat, 11 Nov 2023 16:47:52 +0100 Subject: [PATCH 0642/2103] [reto-042] Eliminada variable 'radius' --- .../python/isilanes.py" | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/isilanes.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/isilanes.py" index c820e3ba5e..60ecb36606 100644 --- "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/isilanes.py" +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/isilanes.py" @@ -2,9 +2,11 @@ Comentarios: - El enunciado no menciona que los objetos tengan tamaño. Si no lo tienen, - la probabilidad de cruzarse es cero, excepto que sus vectores de velocidad - sean colineares, y su velocidad relativa sea negativa. Voy a asumir que - los puntos tienen un tamaño finito, definido como el resto de variables. + la probabilidad de cruzarse es cero, excepto que se muevan en 1D (sus vectores + de velocidad sean paralelos entre sí y colineares con el vector de posición relativa), + y su velocidad relativa sea negativa. Voy a asumir que la colisión se produce si en + el punto de mayor aproximación los objetos están separados por una distancia menor + a un valor pequeño arbitrario (la variable global EPSILON, que defino como 10**-9). Desarrollo matemático: @@ -52,6 +54,9 @@ Y finalmente: t = (-dx(0) * dvx - dy(0) * dvy) / (dvx**2 + dvy**2) + +De este tiempo t, y las posiciones iniciales y velocidades de los objetos, +puede sacarse, obviamente las posiciones en el momento de máxima aproximación. """ import math from dataclasses import dataclass @@ -80,7 +85,6 @@ class Velocity: @dataclass class MovingObject: - radius: float position: Position velocity: Velocity @@ -123,9 +127,7 @@ def calculate_closest_time(object1: MovingObject, object2: MovingObject) -> floa def calculate_collision(object1: MovingObject, object2: MovingObject) -> Result: """ Given two objects moving in a 2D plane, say if, when and where - they will meet. - The objects are considered to meet if their closest approach is - closer than the sum of their radii. + they will collide (their relative distance smaller than a threshold). Args: object1 (MovingObject): first moving object. @@ -135,22 +137,24 @@ def calculate_collision(object1: MovingObject, object2: MovingObject) -> Result: A Result object, with all the data we want. """ t = calculate_closest_time(object1, object2) - - # Closest distance: p1 = object1.position_after_time(t) p2 = object2.position_after_time(t) - d = p1.distance_to(p2) - we_have_collision = d <= (object1.radius + object2.radius) - return Result(time=t, distance=d, position1=p1, position2=p2, we_have_collision=we_have_collision) + return Result( + time=t, + distance=d, + position1=p1, + position2=p2, + we_have_collision=d <= EPSILON, + ) if __name__ == "__main__": # Example: print("Example:") - o1 = MovingObject(radius=0.1, position=Position(0, 0), velocity=Velocity(0, 0)) - o2 = MovingObject(radius=0.1, position=Position(1, 0), velocity=Velocity(-1, 0)) + o1 = MovingObject(position=Position(0, 0), velocity=Velocity(0, 0)) + o2 = MovingObject(position=Position(1, 0), velocity=Velocity(-1, 0)) r = calculate_collision(o1, o2) print(o1) print(o2) From 7160131d1c1342c675a6dcbbbd1e7851bb06ada1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cesar=20Daniel=20Pi=C3=B1a=20Gonzalez?= Date: Sat, 11 Nov 2023 19:30:00 -0600 Subject: [PATCH 0643/2103] Reto #2 - Javascript --- .../javascript/Cesarpinagon.js | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/Cesarpinagon.js diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/Cesarpinagon.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/Cesarpinagon.js new file mode 100644 index 0000000000..2de8686cb2 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/Cesarpinagon.js @@ -0,0 +1,28 @@ +//hecho por: Cesarpinagon +function tennisGame(points) { + let scoreP1 = 0; + let scoreP2 = 0; + const scoreNames = ["Love", "15", "30", "40"]; + + for (let point of points) { + if (point === "P1") scoreP1++; + else scoreP2++; + + if (scoreP1 >= 3 && scoreP2 >= 3) { + if (scoreP1 === scoreP2) console.log("Deuce"); + else if (scoreP1 === scoreP2 + 1) console.log("Ventaja P1"); + else if (scoreP2 === scoreP1 + 1) console.log("Ventaja P2"); + else if (scoreP1 > scoreP2 + 1) { + console.log("Ha ganado el P1"); + return; + } else { + console.log("Ha ganado el P2"); + return; + } + } else { + console.log(scoreNames[scoreP1] + " - " + scoreNames[scoreP2]); + } + } +} + +tennisGame(["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"]); \ No newline at end of file From 18a70fe7f9675c3bbe7629ebf4b453acaf85c90f Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sat, 11 Nov 2023 21:05:34 -0600 Subject: [PATCH 0644/2103] reto 1 resulto con js --- .../javascript/marvnramos.js" | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/marvnramos.js" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/marvnramos.js" new file mode 100644 index 0000000000..b04d87d8fe --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/marvnramos.js" @@ -0,0 +1,78 @@ +// const alphabet = { +// a: [4, `/${String.fromCharCode(92)}`, "@", `/-${String.fromCharCode(92)}`, "^", "aye", "(L", "Д"], +// b: ["13", "8", "13", "|3", "ß", "!3", "(3", "/3", ")3", "|-]", "j3", "6"], +// c: ["[","¢", "{", "<", "(", "©"], +// d: [")", "|)", "(|", "[)", "I>", "|>", "?", "T)", "I7", "cl", "|}", ">", "|]"], +// e: ["3", "&", "£", "€", "ë", "[-", "|=-"], +// f: ["|=", "ƒ", "|#", "ph", "/=", "v"], +// g: ["&", "6", "(_+", "9", "C-", "gee", "(?,", "[", "{", "<-", "(."], +// h: ["#", "/-/", "[-]", "]-[", ")-(", "(-)", ":-:", "|~|", "|-|", "]~[", "}{", "!-!", "1-1", "\\-/", "I+I", "/-\\"], +// i: ["1", "[]", "|", "!", "eye", "3y3", "]["], +// j: [",_|", "_|", "._|", "._]", "_]", ",_]", "]", ";1"], +// k: [">|", "|<", "/<", "1<", "|c", "|(", "|{"], +// l: ["1", "£", "7", "|_", "|"], +// m: ["/\\/\\", "/V\\", "JVI", "[V]", "[]V[]", "|\\/|", "^^", "<\\/>", "{V}", "(v)", "(V)", "|V|", "nn", "IVI", "|\\|\\", "]\\/[", "1^1", "ITI", "JTI"], +// n: ["^/", "|\\|", "/\\/", "[\\]", "<\\>", "{\\}", "|V", "/V", "И", "^", "ท"], +// o: ["0", "Q", "()", "oh", "[]", "p", "<>", "Ø"], +// p: ["|*", "|o", "|º", "?", "|^", "|>", "|\"", "9", "[]D", "|°", "|7"], +// q: ["(_,)", "9", "()_", "2", "0_", "<|", "&"], +// r: ["I2", "|`", "|~", "|?", "/2", "|^", "lz", "|9", "2", "12", "®", "[z", "Я", ".-", "|2", "|-"], +// s: ["5", "$", "z", "§", "ehs", "es", "2"], +// t: ["7", "+", "-|-", "']['", "†", "\"|\"", "~|~"], +// u: ["(_)", "|_|", "v", "L|", "µ", "บ"], +// v: ["\\/", "|/", "\\|"], +// w: ["\/\/", "VV", "\\N", "'//", "\\'", "\\^/", "(n)", "\\V/", "\\X/", "\\|/", "\\_|_/", "\\_:_/", "Ш", "Щ", "uu", "2u", "\\\\//\\\\//", "พ", "v²"], +// x: ["><", "Ж", "}{", "ecks", "×", "?", ")(", "]["], +// y: ["j", "`/", "Ч", "7", "\\|/", "¥", "\\//"], +// z: ["2", "7_", "-/_", "%", ">_", "s", "~/_", "-\\_", "-|_"] +// } + + +const hacker_alphabet = { + a: "4", + b: "13", + c: "[", + d: ")", + e: "3", + f: "|=", + g: "&", + h: "#", + i: "1", + j: ",_|", + k: ">|", + l: "1", + m: "/\\/\\", + n: "^/", + o: "0", + p: "|*", + q: "(_,)", + r: "I2", + s: "5", + t: "7", + u: "(_)", + v: "\\/", + w: "\\/\\/", + x: "><", + y: "j", + z: "2" +} + + +function hackerLanguage(text){ + let newText = ""; + let regex = /^[0-9!¡@#\$%\^\&*\)\(+=._-\s,:;]+$/; + + for(let character in text){ + let current_character = text[character].toLowerCase(); + + if(regex.test(current_character)){ + newText += current_character; + } + else{ + newText += hacker_alphabet[current_character]; + } + } + return newText; +} + +console.log(hackerLanguage("¡Hola, mundo!")); From ae9a9dc534a0e93aa7e84976893a9dd579b86719 Mon Sep 17 00:00:00 2001 From: davidleonmayor <142275316+davidleonmayor@users.noreply.github.com> Date: Sun, 12 Nov 2023 16:02:44 +0000 Subject: [PATCH 0645/2103] Reto#2 davidleonmayor --- .../c#/davidleonmayor.cs | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/c#/davidleonmayor.cs diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/c#/davidleonmayor.cs b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/c#/davidleonmayor.cs new file mode 100644 index 0000000000..9b65c67a73 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/c#/davidleonmayor.cs @@ -0,0 +1,72 @@ +/* + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ + +public class TennisGame +{ + private int player1Score = 0; + private int player2Score = 0; + + private string ScoreToTennisTerms(int score) + { + switch (score) + { + case 0: return "Love"; + case 1: return "15"; + case 2: return "30"; + case 3: return "40"; + default: return "Error"; + } + } + + public void PlayGame(List points) + { + foreach (string point in points) + { + if (point == "P1") player1Score++; + else if (point == "P2") player2Score++; + + if (player1Score >= 3 && player2Score >= 3) + { + if (Math.Abs(player1Score - player2Score) >= 2) + { + Console.WriteLine($"Player {(player1Score > player2Score ? "1" : "2")} wins"); + return; + } + else if (player1Score == player2Score) + { + Console.WriteLine("Deuce"); + continue; + } + else + { + Console.WriteLine($"Advantage Player {(player1Score > player2Score ? "1" : "2")}"); + continue; + } + } + + Console.WriteLine($"{ScoreToTennisTerms(player1Score)} - {ScoreToTennisTerms(player2Score)}"); + } + } + + static void Main(string[] args) + { + var game = new TennisGame(); + game.PlayGame(new List { "P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1" }); + } +} From f95a7cda4f78044010d1dc12d71c1352056cc980 Mon Sep 17 00:00:00 2001 From: Oscar Hernandez Date: Sun, 12 Nov 2023 13:48:05 -0600 Subject: [PATCH 0646/2103] Solucion ejercicio #6 --- .../python/oscar503sv.py | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/oscar503sv.py diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/oscar503sv.py b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/oscar503sv.py new file mode 100644 index 0000000000..d90df11825 --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/oscar503sv.py @@ -0,0 +1,57 @@ +''' +# Crea un programa que calcule quien gana más partidas al piedra, papel, tijera, lagarto, spock. +# - El resultado puede ser: "Player 1", "Player 2", "Tie" (empate) +# - La función recibe un listado que contiene pares, representando cada jugada. +# - El par puede contener combinaciones de "🗿" (piedra), "📄" (papel), +# "✂️" (tijera), "🦎" (lagarto) o "🖖" (spock). +# - Ejemplo. Entrada: [("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")]. Resultado: "Player 2". +# - Debes buscar información sobre cómo se juega con estas 5 posibilidades. + +# Todos las combinaciones ganan a 2, y pierden contra 2 +# Piedra: Gana contra -> Tijeras y Lagarto, Pierde contra -> Papel y Spock +# Papel: Gana contra -> Piedra y Spock, Pierde contra -> Tijera y Lagarto +# Tijera: Gana contra -> Papel y Lagarto, Pierde contra -> Piedra y Spock +# Lagarto: Gana contra -> Papel y Spock, Pierde contra -> Piedra y Tijera +# Spock: Gana contra -> Tijeras y Piedra, Pierde contra -> Papel y Lagarto +''' + +RULES = { + '🗿': ['🦎', '✂️'], + '📄': ['🗿', '🖖'], + '✂️': ['📄', '🦎'], + '🦎': ['🖖', '📄'], + '🖖': ['🗿', '✂️'], +} + +def who_wins(player_one: str, player_two: str) -> str: + if player_two in RULES[player_one]: + return "Player 1 wins" + elif player_one in RULES[player_two]: + return "Player 2 wins" + else: + "Tie" + +def play_game(games: list[tuple[str,str]]) -> str: + player1_score = 0 + player2_score = 0 + + for game in games: + player_one, player_two = game + result = who_wins(player_one, player_two) + if result == "Player 1 wins": + player1_score +=1 + elif result == "Player 2 wins": + player2_score +=1 + + if player1_score > player2_score: + return "Player 1 won the game." + elif player2_score > player1_score: + return "Player 2 won the game." + else: + return "Tie" + +def main(): + print(play_game([('🦎','✂️'),('🖖','✂️'),('🗿','📄'),('🖖','🗿'),('🦎','📄')])) + +if __name__ == "__main__": + main() From b9014f2459603f38f4a48f6f58418f9f87d1cabf Mon Sep 17 00:00:00 2001 From: Oscar Hernandez Date: Sun, 12 Nov 2023 13:52:15 -0600 Subject: [PATCH 0647/2103] Solucion ejercicio #7 --- .../python/oscar503sv.py | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/oscar503sv.py diff --git a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/oscar503sv.py b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/oscar503sv.py new file mode 100644 index 0000000000..41b5b80f7c --- /dev/null +++ b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/oscar503sv.py @@ -0,0 +1,72 @@ +import time + +""" +Crea un programa que simule el comportamiento del sombrero seleccionador del +universo mágico de Harry Potter. +- De ser posible realizará 5 preguntas (como mínimo) a través de la terminal. +- Cada pregunta tendrá 4 respuestas posibles (también a selecciona una a través de terminal). +- En función de las respuestas a las 5 preguntas deberás diseñar un algoritmo que + coloque al alumno en una de las 4 casas de Hogwarts (Gryffindor, Slytherin , Hufflepuff y Ravenclaw) +- Ten en cuenta los rasgos de cada casa para hacer las preguntas y crear el algoritmo seleccionador. + Por ejemplo, en Slytherin se premia la ambición y la astucia. + + Gryffindor: valentía, disposición, coraje y caballerosidad + Hufflepuff: leales, honestos y que no teman el trabajo pesado. + Ravenclaw: creativos, curiosos y que siempre busquen la respuesta. + Slytherin: ambición y la astucia. +""" + +def ask_questions(houses: dict) -> dict: + questions = { + "¿Qué cualidad valoras más en un amigo?": "a. La valentía b. La astucia c. La sabiduría d. La lealtad", + "\n¿Qué asignatura te resulta más interesante?": "a. Defensa contra las Artes Oscuras b. Pociones c. Astronomía d. Herbologia", + "\n¿Qué tipo de tarea te resulta más satisfactoria?": "a. Superar tus propios limites b. Vencer a tus oponentes c. Descubrir nuevos conocimientos d. Ayudar a los demás", + "\n¿Qué lugar te gustará explorar en Hogwarts?": "a. La Sala de los Menesteres b. Las Mazmorras c. La Biblioteca d. El Invernadero", + "\n¿Qué te motiva a seguir adelante?": "a. La búsqueda de aventura b. La búsqueda de poder c. La búsqueda del conocimiento d. La búsqueda de la verdad", + } + + for question in questions: + while True: + print(question) + print(questions[question]) + answer = input("Respuesta: ").lower() + if answer in ["a", "b", "c", "d"]: + if answer == "a": + houses["Gryffindor"] += 1 + elif answer == "b": + houses["Hufflepuff"] += 1 + elif answer == "c": + houses["Ravenclaw"] += 1 + elif answer == "d": + houses["Slytherin"] += 1 + break + else: + print("\nRespuesta inválida") + return houses + + +def hats_choice(houses: dict) -> str: + max_points = max(houses.values()) + for house, points in houses.items(): + if points == max_points: + return house + +def main(): + houses = { + "Gryffindor": 0, + "Slytherin": 0, + "Hufflepuff": 0, + "Ravenclaw": 0 + } + + selected_house = hats_choice(ask_questions(houses)) + print("Ha sido una decisión muy difícil...") + time.sleep(2) + print("Pero...") + time.sleep(2) + print("Pero...") + time.sleep(2) + print(f"\nTu casa es: ¡{selected_house}!\n") + +if __name__ == "__main__": + main() From 77d8ade57a625b470fe150734cf726bbbc1deb19 Mon Sep 17 00:00:00 2001 From: Oscar Hernandez Date: Sun, 12 Nov 2023 13:53:49 -0600 Subject: [PATCH 0648/2103] Solucion ejercicio #8 --- .../python/oscar503sv.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/oscar503sv.py diff --git a/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/oscar503sv.py b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/oscar503sv.py new file mode 100644 index 0000000000..6bdc5646b8 --- /dev/null +++ b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/oscar503sv.py @@ -0,0 +1,12 @@ +import datetime +""" + Crea un generador de números pseudoaleatorios entre 0 y 100. + - No puedes usar ninguna función "random" (o semejante) del lenguaje de programación seleccionado. +""" + +def main(): + print(datetime.datetime.now().microsecond % 101) + + +if __name__ == '__main__': + main() From 4235ff38f425ebc9081eaf611c7e75c5f75717bb Mon Sep 17 00:00:00 2001 From: MarcosDigu Date: Sun, 12 Nov 2023 22:55:29 +0100 Subject: [PATCH 0649/2103] new file: "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/MarcosDigu.py" --- .../python/MarcosDigu.py" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/MarcosDigu.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/MarcosDigu.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/MarcosDigu.py" new file mode 100644 index 0000000000..449b0a656d --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/MarcosDigu.py" @@ -0,0 +1,23 @@ +""" + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + """ + +for numero in range(1, 101): + + if ((numero % 3 == 0) and (numero % 5 == 0)): + print ("fizzbuzz") + + elif (numero % 3 == 0): + print ("fizz") + + elif (numero % 5 == 0): + print ("buzz") + + else: + print (numero) + input(f"This is numero {numero}") From faf5388ba1dddf500270ea7a4312f0c8f4f37757 Mon Sep 17 00:00:00 2001 From: MarcosDigu Date: Sun, 12 Nov 2023 23:53:24 +0100 Subject: [PATCH 0650/2103] new file: "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/MarcosDigu.py" --- .../python/MarcosDigu.py" | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/MarcosDigu.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/MarcosDigu.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/MarcosDigu.py" new file mode 100644 index 0000000000..a0bea710de --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/MarcosDigu.py" @@ -0,0 +1,38 @@ +""" + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") +""" + +traductor = { + "a": "4", "b": "l3", "c": "[", "d": ")", "e": "3", + "f": "|=", "g": "&", "h": "#", "i": "1", "j": ",_|", + "k": ">|", "l": "1", "m": "/\/\\", "n": "^/", "o": "0", + "p": "|*", "q": "(,)", "r": "|2", "s": "5", "t": "7", + "u": "(_)", "v": "\/", "w": "\/\/", "x": "><", "y": "j", "z": "2" +} + +def leet_speak(texto): + leet_text = "" + for char in texto: + leet_char = traductor.get(char, char) + leet_text += leet_char + return leet_text + +while True: + texto = input("Tu mensaje es: ") + texto = texto.lower() # Convertir a minúsculas para manejar mayúsculas + resultado = leet_speak(texto) + + print("Tu mensaje en leet speak es:") + print("\n" + resultado + "\n") + + end = input("¿Deseas repetir? (y/n) ").lower() + while end not in ["y", "n"]: + end = input("Por favor, prueba otra vez: ").lower() + + if end == "n": + break From b259608b07a239b6c8cfede88949836080902a96 Mon Sep 17 00:00:00 2001 From: Enel1980 <150091010+Enel1980@users.noreply.github.com> Date: Sun, 12 Nov 2023 17:47:24 -0600 Subject: [PATCH 0651/2103] Reto #43 Python --- .../python/enel1980.py" | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/enel1980.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/enel1980.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/enel1980.py" new file mode 100644 index 0000000000..8a47a566c3 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/enel1980.py" @@ -0,0 +1,47 @@ +# /* +# * 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. +# */ + +# Mi solución +import random + +def meteorologo()->list: + final = [["D, T, P"]] + temp = int(input("Ingrese temperatura inicial: ")) + prob_lluvia = int(input("Ingrese probabilidad de lluvia inicial: ")) + dias = int(input("¿Cuántos días vamos a estimar: ")) + for i in range(1, dias + 1): + if prob_lluvia == 100: + temp -= 1 + if random.randint(0,100) < 10: + temp += 2 + if random.randint(0,100) > 90: + temp -= 2 + if temp > 25: + prob_lluvia += 20 + if prob_lluvia > 99: + prob_lluvia = 100 + elif temp < 5: + prob_lluvia -= 20 + if prob_lluvia < 1: + prob_lluvia = 0 + + print(f"La temperatura el dia {i} es: {temp} Celsius") + print(f"La probabilidad de lluvia el dia {i} es: {prob_lluvia} %") + final.append([f"{i}", f"{temp}" , f"{prob_lluvia}"]) # Por algún motivo no le gustaba el cambio de type + return final +final = meteorologo() +for i in range(len(final)): + print(final[i]) \ No newline at end of file From fb03528ed2c457a58eb27896a1fed3d4e9da11c9 Mon Sep 17 00:00:00 2001 From: feltoxXx <5326671+feltoxXx@users.noreply.github.com> Date: Sun, 12 Nov 2023 23:37:47 -0300 Subject: [PATCH 0652/2103] Reto # 7 - Python --- .../python/feltoxXx.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/feltoxXx.py diff --git a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/feltoxXx.py b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/feltoxXx.py new file mode 100644 index 0000000000..c8a2b8b56f --- /dev/null +++ b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/python/feltoxXx.py @@ -0,0 +1,49 @@ +# Reto #7: El sombrero seleccionador + +# +# Crea un programa que simule el comportamiento del sombrero seleccionador del universo mágico de Harry Potter. +# - De ser posible realizará 5 preguntas (como mínimo) a través de la terminal. +# - Cada pregunta tendrá 4 respuestas posibles (también a selecciona una a través de terminal). +# - En función de las respuestas a las 5 preguntas deberás diseñar un algoritmo que coloque al alumno en una de las 4 casas de Hogwarts (Gryffindor, Slytherin , Hufflepuff y Ravenclaw) +# - Ten en cuenta los rasgos de cada casa para hacer las preguntas y crear el algoritmo seleccionador. +# Por ejemplo, en Slytherin se premia la ambición y la astucia. +# + +def hacer_pregunta(pregunta, opciones): + print(pregunta) + for i, opcion in enumerate(opciones, 1): + print(f"{i}. {opcion}") + + respuesta = input("Selecciona tu respuesta (1-4): ") + while not respuesta.isdigit() or int(respuesta) not in range(1, 5): + print("Respuesta no válida. Introduce un número del 1 al 4.") + respuesta = input("Selecciona tu respuesta (1-4): ") + + return int(respuesta) + +def sombrero_seleccionador(): + preguntas = [ + ("¿Qué cualidad valoras más?", ["Valentía", "Astucia", "Lealtad", "Intelecto"]), + ("¿Qué animal prefieres?", ["León", "Serpiente", "Tejón", "Águila"]), + ("¿Cómo te describirían tus amigos?", ["Audaz", "Ambicioso", "Leal", "Inteligente"]), + ("¿Qué lugar prefieres?", ["Bosque", "Mazmorra", "Campo", "Torre"]), + ("¿Qué harías si encuentras una llave de oro?", ["Intentar abrirla", "Ignorarla", "Protegerla", "Estudiarla"]) + ] + + respuestas = [] + + for pregunta, opciones in preguntas: + respuesta = hacer_pregunta(pregunta, opciones) + respuestas.append(respuesta) + + # Lógica del sombrero seleccionador + puntajes = {"Gryffindor": 0, "Slytherin": 0, "Hufflepuff": 0, "Ravenclaw": 0} + + for i, casa in enumerate(puntajes): + puntajes[casa] += respuestas[i] + + casa_seleccionada = max(puntajes, key=puntajes.get) + print(f"\n¡Bienvenido a {casa_seleccionada}!") + +if __name__ == "__main__": + sombrero_seleccionador() From a65486d888112e7b6bcb1c75cea9242ee2714998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Mart=C3=ADn=20Leal?= Date: Mon, 13 Nov 2023 17:51:04 +0100 Subject: [PATCH 0653/2103] Reto #0 - PHP --- .../php/moon-woman.php" | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/moon-woman.php" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/moon-woman.php" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/moon-woman.php" new file mode 100644 index 0000000000..289a6a001e --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/moon-woman.php" @@ -0,0 +1,39 @@ +"; + break; + case (esMultiplo($i,3)) : + echo "fizz
"; + break; + case (esMultiplo($i,5)) : + echo "buzz
"; + break; + default: + echo $i . "
"; + break; + } + + } + + + +?> \ No newline at end of file From 7462c1e946f438fc4c15fc0d87108d4c549120cb Mon Sep 17 00:00:00 2001 From: Jesusway69 Mac mini macOS Date: Mon, 13 Nov 2023 18:13:47 +0100 Subject: [PATCH 0654/2103] Reto #43 - Java --- .../java/JesusWay69.java" | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/java/JesusWay69.java" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/java/JesusWay69.java" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/java/JesusWay69.java" new file mode 100644 index 0000000000..ad0e1fe2f3 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/java/JesusWay69.java" @@ -0,0 +1,56 @@ +package reto_43; + +/* + * 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. + */ +public class JesusWay69 { + + public static void main(String[] args) { + + weatherStation(31, 24, 20); + + } + + public static void weatherStation(int days, int temperature , double percRain) { + int tempMax = temperature; + int tempMin = temperature; + double rainProbAcc = 0.0; + int rainyDays = 0; + for (int i = 1; i < days + 1; i++) { + double rainProb = Math.random() + rainProbAcc; + double twoDegreesUp = Math.random(); + double twoDegreesDown = Math.random(); + if (rainProb < (percRain/100)) { + System.out.print("el día " + i + " sí llovió"); + System.out.println(" y la temperatura fue de " + temperature + " grados"); + temperature--; + rainyDays++; + } else { + System.out.print("el día " + i + " no llovió"); + System.out.println(" y la temperatura fue de " + temperature + " grados"); + } + if (twoDegreesUp > 0.9) temperature += 2; + if (twoDegreesDown < 0.1) temperature -= 2; + if (temperature > 25) rainProbAcc -= 0.2; + if (temperature < 5) rainProbAcc += 0.2; + if (temperature < tempMin) tempMin=temperature; + if (temperature > tempMax) tempMax=temperature; + + } + System.out.println("\nLlovió un total de " + rainyDays + " días"); + System.out.println("\nLa temperatura máxima fue de " + tempMax + " grados"); + System.out.println("\nLa temperatura mínima fue de " + tempMin + " grados"); } + +} From ce438afe3e6341a7a3ef5edf8e3a7de510a77c12 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Mon, 13 Nov 2023 14:59:02 -0300 Subject: [PATCH 0655/2103] commint reto#0 --- .../python/rokmanhaman.py" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/rokmanhaman.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/rokmanhaman.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/rokmanhaman.py" new file mode 100644 index 0000000000..b64675eed6 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/rokmanhaman.py" @@ -0,0 +1,27 @@ +""" +Reto #0: EL FAMOSO "FIZZ BUZZ" +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ + """ + +for x in range(1,101,1): + y = "" + if x % 3 == 0: + y = "fizz" + if x % 5 == 0: + y = y + "buzz" + elif x % 5 == 0: + y = y + "buzz" + else: + y = x + print(y) + + + + From 7df935ba3aabd200fc1ba738a2301a87f58a9b61 Mon Sep 17 00:00:00 2001 From: Carlos Esteban Castro <146273220+ccaicedo09@users.noreply.github.com> Date: Mon, 13 Nov 2023 13:08:10 -0500 Subject: [PATCH 0656/2103] Reto #3 - Python --- .../python/ccaicedo09.py" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/ccaicedo09.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/ccaicedo09.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/ccaicedo09.py" new file mode 100644 index 0000000000..840c7ca7d6 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/ccaicedo09.py" @@ -0,0 +1,44 @@ +""" + * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + * Podrás configurar generar contraseñas con los siguientes parámetros: + * - Longitud: Entre 8 y 16. + * - Con o sin letras mayúsculas. + * - Con o sin números. + * - Con o sin símbolos. + * (Pudiendo combinar todos estos parámetros entre ellos) +""" +import random + +def password_generator(length=8, capital = False, numbers = False, symbols = False): #Establecemos los valores predeterminados de los parametros + + letters = "abcdefghijklmnopqrstuvwxyz" + numbers_ = "0123456789" + symbols_ = "!#$%&'()*+,-./:;<=>?@[]^_`{|}~" + password = "" + password_chars = [] + correct_length = 8 + + if length < 8: + correct_length = 8 + elif length > 16: + correct_length = 16 + else: + correct_length = length + + if capital: + letters = letters.upper() + password_chars += letters + else: + password_chars += letters + + if numbers: + password_chars += numbers_ + + if symbols: + password_chars += symbols_ + + password = "".join(random.choices(password_chars, k=correct_length)) + + return password + +print(password_generator(length = 12, capital = True, numbers = True, symbols = True)) \ No newline at end of file From c264eefb08a5933134abca21cb0653ac0df4194c Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Mon, 13 Nov 2023 15:08:59 -0300 Subject: [PATCH 0657/2103] commit reto1 --- .../python/rokmanhaman.py" | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/rokmanhaman.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/rokmanhaman.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/rokmanhaman.py" new file mode 100644 index 0000000000..1385100a17 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/rokmanhaman.py" @@ -0,0 +1,60 @@ +text = input("ingrese un texto: ") + +out = [] + +for t in text: + if t == "a": + t = "4" + elif t == "b": + t = "I3" + elif t == "c": + t = "[" + elif t == "d": + t = ")" + elif t == "e": + t = "3" + elif t == "f": + t = "|=" + elif t == "g": + t = "&" + elif t == "h": + t = "#" + elif t == "i": + t = "1" + elif t == "j": + t = ",_|" + elif t == "k": + t = ">|" + elif t == "l": + t = "1" + elif t == "m": + t = 'm' + elif t == "n": + t = "^/" + elif t == "o": + t = "0" + elif t == "p": + t = "|*" + elif t == "q": + t = "(_,)" + elif t == "r": + t = "I2" + elif t == "s": + t = "5" + elif t == "t": + t = "7" + elif t == "u": + t = "(_)" + elif t == "v": + t = "\/" + elif t == "w": + t = "\/\/" + elif t == "x": + t = "><" + elif t == "y": + t = "j" + elif t == "z": + t = "2" + out.append(t) + +print(''.join(out)) \ No newline at end of file From 78ab6bffafb2a6761a6f8212bd86274e5359e8cd Mon Sep 17 00:00:00 2001 From: Jesusway69 Mac mini macOS Date: Mon, 13 Nov 2023 19:50:09 +0100 Subject: [PATCH 0658/2103] Reto #43 - Python --- .../python/JesusWay69.py" | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/JesusWay69.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/JesusWay69.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/JesusWay69.py" new file mode 100644 index 0000000000..ed909e0ee7 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/JesusWay69.py" @@ -0,0 +1,35 @@ +import os +os.system('clear') +import random +def weather_station (days:int,temperature:int,perc_rain:int): + temp_max = temperature + temp_min = temperature + rain_prob_acc = 0.0 + rainy_days = 0 + + for i in range (1 , days): + rain_prob = random.random() + two_degrees_up = random.random() + two_degrees_down = random.random() + if rain_prob < perc_rain/100: + print ("el dia " , i , "sí llovió y la temperatura fue de ", temperature , " grados") + temperature = temperature - 1 + rainy_days = rainy_days + 1 + else: + print ("el dia " , i , "no llovió y la temperatura fue de ", temperature , " grados") + + if two_degrees_up > 0.9: temperature += 2 + if two_degrees_down < 0.1: temperature -= 2 + if temperature > 25: rain_prob -= 0.2 + if temperature < 5: rain_prob += 0.2 + if temperature < temp_min: temp_min=temperature + if temperature > temp_min: temp_min=temperature + + print("Llovió un total de " , rainy_days , " días") + print("La temperatura máxima fue de " , temp_max , " grados") + print("La temperatura mínima fue de " , temp_min , " grados") + + + + +weather_station (31,24,20) \ No newline at end of file From 63f70f3f77550a7871d6cb9e38a442992dea5d7b Mon Sep 17 00:00:00 2001 From: Carlos Esteban Castro <146273220+ccaicedo09@users.noreply.github.com> Date: Mon, 13 Nov 2023 14:49:05 -0500 Subject: [PATCH 0659/2103] Reto #6 - Python --- .../python/ccaicedo09.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/ccaicedo09.py diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/ccaicedo09.py b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/ccaicedo09.py new file mode 100644 index 0000000000..13d3263fca --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/ccaicedo09.py @@ -0,0 +1,39 @@ +""" + * Crea un programa que calcule quien gana más partidas al piedra, + * papel, tijera, lagarto, spock. + * - El resultado puede ser: "Player 1", "Player 2", "Tie" (empate) + * - La función recibe un listado que contiene pares, representando cada jugada. + * - El par puede contener combinaciones de "🗿" (piedra), "📄" (papel), + * "✂️" (tijera), "🦎" (lagarto) o "🖖" (spock). + * - Ejemplo. Entrada: [("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")]. Resultado: "Player 2". + * - Debes buscar información sobre cómo se juega con estas 5 posibilidades. +""" + +def game(rounds: list) -> str: + + situations = {"🗿": "✂️🦎", + "📄": "🗿🖖", + "✂️": "📄🦎", + "🦎": "📄🖖", + "🖖": "🗿✂️" + } + player_1 = 0 + player_2 = 0 + + for game in rounds: + if game[0] != game[1]: + if game[1] in situations[game[0]]: + player_1 +=1 + else: + player_2 += 1 + + if player_1 == player_2: + return "Tie" + elif player_1 > player_2: + return "Player 1" + else: + return "Player 2" + +print(game([("🗿", "🗿")])) +print(game([("🗿", "✂️")])) +print(game([("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")])) From 4fdde45fb1ec567da97b839a55346ce2b28f7980 Mon Sep 17 00:00:00 2001 From: Carlos Esteban Castro <146273220+ccaicedo09@users.noreply.github.com> Date: Mon, 13 Nov 2023 15:09:33 -0500 Subject: [PATCH 0660/2103] Update ccaicedo09.py --- .../python/ccaicedo09.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/ccaicedo09.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/ccaicedo09.py" index 840c7ca7d6..6bd1018b2e 100644 --- "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/ccaicedo09.py" +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/ccaicedo09.py" @@ -41,4 +41,4 @@ def password_generator(length=8, capital = False, numbers = False, symbols = Fal return password -print(password_generator(length = 12, capital = True, numbers = True, symbols = True)) \ No newline at end of file +print(password_generator(length = 12, capital = True, numbers = True, symbols = True)) From b584c3b5562ea615794832319a30e321f6b7145a Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 13 Nov 2023 21:27:14 +0100 Subject: [PATCH 0661/2103] =?UTF-8?q?Correcci=C3=B3n=20Reto=20#43?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++- .../python/mouredev.py" | 45 +++++++++++++++++++ .../ejercicio.md" | 28 ++++++++++++ 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/mouredev.py" create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/ejercicio.md" diff --git a/README.md b/README.md index 1724ca2b0a..0b314c8736 100644 --- a/README.md +++ b/README.md @@ -60,9 +60,10 @@ Aquí encontrarás el listado de retos, su fecha de publicación, dificultad y e * **#40** - 09/10/23 | Fácil | [`TABLA DE MULTIPLICAR`](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2340%20-%20TABLA%20DE%20MULTIPLICAR%20%5BFácil%5D/)] * **#41** - 16/10/23 | Difícil | [`LA CASA ENCANTADA`](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/)] * **#42** - 23/10/23 | Difícil | [`PUNTO DE ENCUENTRO`](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/ejercicio.md) Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/)] -* **#43** - 30/10/23 | Fácil | [`SIMULADOR DE CLIMA`](./Retos/Reto%20%2343%20-%20SIMULADOR%20DE%20CLIMA%20%5BFácil%5D/ejercicio.md) | Último reto publicado +* **#43** - 30/10/23 | Fácil | [`SIMULADOR DE CLIMA`](./Retos/Reto%20%2343%20-%20SIMULADOR%20DE%20CLIMA%20%5BFácil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2343%20-%20SIMULADOR%20DE%20CLIMA%20%5BFácil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2343%20-%20SIMULADOR%20DE%20CLIMA%20%5BFácil%5D/)] +* **#44** - 13/10/23 | Media | [`ADIVINANZAS MATEMÁTICAS`](./Retos/Reto%20%2344%20-%20ADIVINANZAS%20MATEMÁTICAS%20%5BMedia%5D/ejercicio.md) | Último reto publicado -> **Corrección y Publicación próximo reto - 13/11/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1165944540453150741) en [Twitch](https://twitch.tv/mouredev)** +> **Corrección y Publicación próximo reto - 20/11/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1173570988865232968) en [Twitch](https://twitch.tv/mouredev)** *Puedes ejecutar el archivo [language_stats.py](./Retos/language_stats.py) para visualizar las estadísticas de uso de cada lenguaje.* diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/mouredev.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/mouredev.py" new file mode 100644 index 0000000000..9831f79e34 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/mouredev.py" @@ -0,0 +1,45 @@ +import random + + +def weather_simulator(temperature: int, rain: int, days: int): + + rainy_days = 0 + min_temperature = temperature + max_temperature = temperature + + for day in range(1, days + 1): + + print( + f"Día {day}: {temperature} grados y {rain}% de probabilidad de lluvia") + + if rain == 100: + rainy_days += 1 + + if temperature < min_temperature: + min_temperature = temperature + + if temperature > max_temperature: + max_temperature = temperature + + if random.randint(1, 10) == 1: + temperature += 2 if random.randint(1, 2) == 1 else -2 + + if temperature > 25: + rain += 20 + if rain > 100: + rain = 100 + + elif temperature < 5: + rain -= 20 + if rain < 0: + rain = 0 + + if rain == 100: + temperature -= 1 + + print(f"Días lluviosos: {rainy_days}") + print(f"Temperatura mínima: {min_temperature}") + print(f"Temperatura máxima: {max_temperature}") + + +weather_simulator(24, 100, 365) diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/ejercicio.md" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/ejercicio.md" new file mode 100644 index 0000000000..eca56c8ca0 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/ejercicio.md" @@ -0,0 +1,28 @@ +# Reto #44: Adivinanzas matemáticas +#### Dificultad: Media | Publicación: 13/11/23 | Corrección: 20/11/23 + +## Enunciado + +``` +/* + * Crea un juego interactivo por terminal en el que tendrás que adivinar + * el resultado de diferentes + * operaciones matemáticas aleatorias (suma, resta, multiplicación + * o división de dos números enteros). + * - Tendrás 3 segundos para responder correctamente. + * - El juego finaliza si no se logra responder en ese tiempo. + * - Al finalizar el juego debes mostrar cuántos cálculos has acertado. + * - Cada 5 aciertos debes aumentar en uno el posible número de cifras + * de la operación (cada vez en un operando): + * - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) + * - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) + * - Preguntas 11 a 15: XX operación YY + * - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY + * ... + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file From 5da23bbf5908740c173c30864174490deefccd3a Mon Sep 17 00:00:00 2001 From: MarcosDigu Date: Mon, 13 Nov 2023 22:33:19 +0100 Subject: [PATCH 0662/2103] new file: Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/MarcosDigu.py --- .../python/MarcosDigu.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/MarcosDigu.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/MarcosDigu.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/MarcosDigu.py new file mode 100644 index 0000000000..735cee17c6 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/MarcosDigu.py @@ -0,0 +1,41 @@ +import os + +os.system('cls') + +puntaje = ["0", "15", "30", "40", "Ad"] + +P1 = puntaje[0] +P2 = puntaje[0] + +game_finished = False + +while not game_finished: + print(f"Score P1: {P1}") + print(f"Score P2: {P2}") + print(" ") + + winner = input("Type P1 or P2: ") + + if P1 == "Ad" and P2 == "40" and winner == "P1": + game_finished = True + elif P2 == "Ad" and P1 == "40" and winner == "P2": + game_finished = True + else: + index_P1 = puntaje.index(P1) + index_P2 = puntaje.index(P2) + + if winner == "P1": + P1 = puntaje[index_P1 + 1] + if P1 == "Ad" and P2 in ["0", "15", "30"]: + game_finished = True + else: + P2 = puntaje[index_P2 + 1] + if P2 == "Ad" and P1 in ["0", "15", "30"]: + game_finished = True + + os.system('cls') + +if P1 == "Ad": + print("Player 1 won") +else: + print("Player 2 won") From 5021dc1b59a2b49918aae3ae0c76d0069cf100f1 Mon Sep 17 00:00:00 2001 From: Samunta Date: Mon, 13 Nov 2023 18:35:13 -0300 Subject: [PATCH 0663/2103] Reto #43 - Python --- .../python/evilpotato04.py" | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/evilpotato04.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/evilpotato04.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/evilpotato04.py" new file mode 100644 index 0000000000..9cb2a270d5 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/evilpotato04.py" @@ -0,0 +1,62 @@ +# 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 disminuye 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. + +import random + +def weather_forecast(total_days, temperature, probability_of_rain): + next_day = 0 + days_of_rain = 0 + max_temperature = temperature + min_temperature = temperature + + print(" day | temperature (C°) | probability of rain (%)") + print("--------------------------------------------------") + while next_day < total_days: + next_day += 1 + raining_today = " (raining day)" if probability_of_rain == 100 else "" + days_of_rain = days_of_rain + 1 if probability_of_rain == 100 else days_of_rain + max_temperature = temperature if max_temperature < temperature else max_temperature + min_temperature = temperature if min_temperature > temperature else min_temperature + + print(" " + + str(next_day) + " | " + + str(temperature) + " | " + + str(probability_of_rain) + raining_today) + + if random.randint(1, 100) < 10: + temperature = temperature - 2 if random.randint(1,2) == 1 else temperature + 2 + + if temperature < 5: + probability_of_rain -= 20 + if temperature > 25: + probability_of_rain += 20 + + if probability_of_rain < 0: + probability_of_rain = 0 + if probability_of_rain > 100: + probability_of_rain = 100 + if probability_of_rain == 100: + temperature -= 1 + + print("--------------------------------------------------") + print("Total days of rain: " + str(days_of_rain)) + print("Maximum temperature: " + str(max_temperature)) + print("Minimum temperature: " + str(min_temperature)) + print("--------------------------------------------------") + +total_days = int(input("Insert the number of days to weather forecast: ")) +current_temperature = int(input("Insert the current temperature: ")) +current_probability_of_rain = int(input("Insert the current probability of rain: ")) + +weather_forecast(total_days, current_temperature, current_probability_of_rain) \ No newline at end of file From db0cc3eee34a183f534eb35c7080ba0bf506c22f Mon Sep 17 00:00:00 2001 From: ShinMugenNoKabe Date: Mon, 13 Nov 2023 23:01:08 +0100 Subject: [PATCH 0664/2103] Reto #44 - Python --- .../ShinMugenNoKabe.py" | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/ShinMugenNoKabe.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/ShinMugenNoKabe.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/ShinMugenNoKabe.py" new file mode 100644 index 0000000000..53cccae43c --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/ShinMugenNoKabe.py" @@ -0,0 +1,90 @@ +# Crea un juego interactivo por terminal en el que tendrás que adivinar +# el resultado de diferentes +# operaciones matemáticas aleatorias (suma, resta, multiplicación +# o división de dos números enteros). +# - Tendrás 3 segundos para responder correctamente. +# - El juego finaliza si no se logra responder en ese tiempo. +# - Al finalizar el juego debes mostrar cuántos cálculos has acertado. +# - Cada 5 aciertos debes aumentar en uno el posible número de cifras +# de la operación (cada vez en un operando): +# - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) +# - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) +# - Preguntas 11 a 15: XX operación YY +# - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY +# ... + +from random import choice, randint +from threading import Timer +from os import _exit +from functools import cache + +ARITHMETIC_OPERATORS: list[str] = ["+", "-", "*", "/"] +TIMER_SECONDS = 3 + + +@cache +def find_maximum_number(digits: int) -> int: + if digits <= 0: + raise ValueError("Invalid number of digits") + + one_plus_max_num: int = "1" + ("0" * digits) + return int(f"{one_plus_max_num}") - 1 + + +def resolve_arithmetic_expression(expression: str) -> int | float: + return round(eval(expression), 2) + + +def generate_arithmetic_expression(digits_operator_1: int, digits_operator_2: int) -> str: + maximum_number_1 = find_maximum_number(digits_operator_1) + maximum_number_2 = find_maximum_number(digits_operator_2) + + operator_1: int = randint(1, maximum_number_1) + operator_2: int = randint(1, maximum_number_2) + arithmetic_operator: str = choice(ARITHMETIC_OPERATORS) + + return f"{operator_1} {arithmetic_operator} {operator_2}" + + +def check_user_solution(arithmetic_expression: str, current_score: int) -> None: + t = Timer(TIMER_SECONDS, finish_game, args=[current_score]) + t.start() + + while True: + try: + answer: float = float(input(f"{arithmetic_expression} = ")) + solution: int | float = resolve_arithmetic_expression(arithmetic_expression) + + if answer != solution: + print("Wrong answer!") + else: + t.cancel() + break + except ValueError: + print("Invalid input!") + + +def finish_game(score: int): + print(f"\nTime's up! Total score: {score}") + _exit(0) + + +def play_game(): + current_score: int = 0 + digits_operator_1: int = 1 + digits_operator_2: int = 1 + + while True: + arithmetic_expression: str = generate_arithmetic_expression( digits_operator_1, digits_operator_2) + check_user_solution(arithmetic_expression, current_score) + current_score += 1 + + if current_score % 5 == 0: + if digits_operator_2 < digits_operator_1: + digits_operator_2 += 1 + else: + digits_operator_1 += 1 + + +if __name__ == "__main__": + play_game() \ No newline at end of file From 86e59bc7007a6cf16fb2ad2b94b688e16e17e446 Mon Sep 17 00:00:00 2001 From: ShinMugenNoKabe Date: Mon, 13 Nov 2023 23:12:07 +0100 Subject: [PATCH 0665/2103] Reto #44 - Python --- .../ShinMugenNoKabe.py" | 90 ------------------- 1 file changed, 90 deletions(-) delete mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/ShinMugenNoKabe.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/ShinMugenNoKabe.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/ShinMugenNoKabe.py" deleted file mode 100644 index 53cccae43c..0000000000 --- "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/ShinMugenNoKabe.py" +++ /dev/null @@ -1,90 +0,0 @@ -# Crea un juego interactivo por terminal en el que tendrás que adivinar -# el resultado de diferentes -# operaciones matemáticas aleatorias (suma, resta, multiplicación -# o división de dos números enteros). -# - Tendrás 3 segundos para responder correctamente. -# - El juego finaliza si no se logra responder en ese tiempo. -# - Al finalizar el juego debes mostrar cuántos cálculos has acertado. -# - Cada 5 aciertos debes aumentar en uno el posible número de cifras -# de la operación (cada vez en un operando): -# - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) -# - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) -# - Preguntas 11 a 15: XX operación YY -# - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY -# ... - -from random import choice, randint -from threading import Timer -from os import _exit -from functools import cache - -ARITHMETIC_OPERATORS: list[str] = ["+", "-", "*", "/"] -TIMER_SECONDS = 3 - - -@cache -def find_maximum_number(digits: int) -> int: - if digits <= 0: - raise ValueError("Invalid number of digits") - - one_plus_max_num: int = "1" + ("0" * digits) - return int(f"{one_plus_max_num}") - 1 - - -def resolve_arithmetic_expression(expression: str) -> int | float: - return round(eval(expression), 2) - - -def generate_arithmetic_expression(digits_operator_1: int, digits_operator_2: int) -> str: - maximum_number_1 = find_maximum_number(digits_operator_1) - maximum_number_2 = find_maximum_number(digits_operator_2) - - operator_1: int = randint(1, maximum_number_1) - operator_2: int = randint(1, maximum_number_2) - arithmetic_operator: str = choice(ARITHMETIC_OPERATORS) - - return f"{operator_1} {arithmetic_operator} {operator_2}" - - -def check_user_solution(arithmetic_expression: str, current_score: int) -> None: - t = Timer(TIMER_SECONDS, finish_game, args=[current_score]) - t.start() - - while True: - try: - answer: float = float(input(f"{arithmetic_expression} = ")) - solution: int | float = resolve_arithmetic_expression(arithmetic_expression) - - if answer != solution: - print("Wrong answer!") - else: - t.cancel() - break - except ValueError: - print("Invalid input!") - - -def finish_game(score: int): - print(f"\nTime's up! Total score: {score}") - _exit(0) - - -def play_game(): - current_score: int = 0 - digits_operator_1: int = 1 - digits_operator_2: int = 1 - - while True: - arithmetic_expression: str = generate_arithmetic_expression( digits_operator_1, digits_operator_2) - check_user_solution(arithmetic_expression, current_score) - current_score += 1 - - if current_score % 5 == 0: - if digits_operator_2 < digits_operator_1: - digits_operator_2 += 1 - else: - digits_operator_1 += 1 - - -if __name__ == "__main__": - play_game() \ No newline at end of file From 8c382cb94cec8aa463118c5bca7d2ab8ef55b877 Mon Sep 17 00:00:00 2001 From: AlbertoVf Date: Mon, 13 Nov 2023 23:12:39 +0100 Subject: [PATCH 0666/2103] reto#44 - typescript --- .../typescript/albertovf.ts" | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/albertovf.ts" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/albertovf.ts" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/albertovf.ts" new file mode 100644 index 0000000000..e31aed036c --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/albertovf.ts" @@ -0,0 +1,64 @@ +enum Dificultad { + MUY_FACIL = 1, + FACIL = 2, + PRIMARIA = 3, + SECUNDARIA = 4, + DIFICIL = 5, + UNIVERSIDAD = 6, + MUY_DIFICIL = 7, + IMPOSIBLE = 8, + GENIO = 9, + TRAMPAS = 10, + OREDENADOR = 11 +} +const TIEMPO_PREGUNTA = 5 +const DIFICULTAD_MAXIMA: Dificultad = Dificultad.OREDENADOR +const PREGUNTAS_DIFICULTAD = 10 + +const operacion = (dificultad: Dificultad) => { + const operando = (): String => { + let simbolos = ["+", "-", "/", "*"] + const indiceAleatorio = Math.floor(Math.random() * simbolos.length) + return simbolos[indiceAleatorio] + } + + const obtenerNumero = (dificultad: Dificultad): number => { + let maximo = Number.parseInt('9'.repeat(dificultad).toString()) + let numero = Math.floor(Math.random() * (maximo + 1)) + 1 + return numero + } + + let n1 = obtenerNumero(dificultad) + let sim = operando() + let n2 = obtenerNumero(dificultad) + let cuenta = `${n1} ${sim} ${n2}` + return { cuenta, resultado: eval(cuenta) } +} + +const time = (): number => Math.round(new Date().getTime() / 1000) + +const reto = (): void => { + let dificultad = 1 + let valido = true + let pregunta = 1 + while (valido) { + let a = time() + let { cuenta, resultado } = operacion(dificultad) + let respuesta = prompt(`[OPERACION]: ${cuenta} = `) + // let respuesta = resultado + let b = time() + console.log({ pregunta, cuenta: `[OPERACION]: ${cuenta} = `, respuesta, resultado, tiempo: b - a }) + + if (resultado != respuesta || (b - a) > TIEMPO_PREGUNTA) { + valido = false + console.log(`HAS FALLADO. Has acertado un total de ${pregunta - 1} preguntas`) + } + + if (pregunta % PREGUNTAS_DIFICULTAD == 0 && dificultad < DIFICULTAD_MAXIMA) { + dificultad++ + } + pregunta++ + } +} + +reto() \ No newline at end of file From ad47a90ed522e1140a9389470d07436fa50aa4a0 Mon Sep 17 00:00:00 2001 From: ShinMugenNoKabe Date: Mon, 13 Nov 2023 23:14:57 +0100 Subject: [PATCH 0667/2103] Reto #44 - Python --- .../python/ShinMugenNoKabe.py" | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/ShinMugenNoKabe.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/ShinMugenNoKabe.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/ShinMugenNoKabe.py" new file mode 100644 index 0000000000..53cccae43c --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/ShinMugenNoKabe.py" @@ -0,0 +1,90 @@ +# Crea un juego interactivo por terminal en el que tendrás que adivinar +# el resultado de diferentes +# operaciones matemáticas aleatorias (suma, resta, multiplicación +# o división de dos números enteros). +# - Tendrás 3 segundos para responder correctamente. +# - El juego finaliza si no se logra responder en ese tiempo. +# - Al finalizar el juego debes mostrar cuántos cálculos has acertado. +# - Cada 5 aciertos debes aumentar en uno el posible número de cifras +# de la operación (cada vez en un operando): +# - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) +# - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) +# - Preguntas 11 a 15: XX operación YY +# - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY +# ... + +from random import choice, randint +from threading import Timer +from os import _exit +from functools import cache + +ARITHMETIC_OPERATORS: list[str] = ["+", "-", "*", "/"] +TIMER_SECONDS = 3 + + +@cache +def find_maximum_number(digits: int) -> int: + if digits <= 0: + raise ValueError("Invalid number of digits") + + one_plus_max_num: int = "1" + ("0" * digits) + return int(f"{one_plus_max_num}") - 1 + + +def resolve_arithmetic_expression(expression: str) -> int | float: + return round(eval(expression), 2) + + +def generate_arithmetic_expression(digits_operator_1: int, digits_operator_2: int) -> str: + maximum_number_1 = find_maximum_number(digits_operator_1) + maximum_number_2 = find_maximum_number(digits_operator_2) + + operator_1: int = randint(1, maximum_number_1) + operator_2: int = randint(1, maximum_number_2) + arithmetic_operator: str = choice(ARITHMETIC_OPERATORS) + + return f"{operator_1} {arithmetic_operator} {operator_2}" + + +def check_user_solution(arithmetic_expression: str, current_score: int) -> None: + t = Timer(TIMER_SECONDS, finish_game, args=[current_score]) + t.start() + + while True: + try: + answer: float = float(input(f"{arithmetic_expression} = ")) + solution: int | float = resolve_arithmetic_expression(arithmetic_expression) + + if answer != solution: + print("Wrong answer!") + else: + t.cancel() + break + except ValueError: + print("Invalid input!") + + +def finish_game(score: int): + print(f"\nTime's up! Total score: {score}") + _exit(0) + + +def play_game(): + current_score: int = 0 + digits_operator_1: int = 1 + digits_operator_2: int = 1 + + while True: + arithmetic_expression: str = generate_arithmetic_expression( digits_operator_1, digits_operator_2) + check_user_solution(arithmetic_expression, current_score) + current_score += 1 + + if current_score % 5 == 0: + if digits_operator_2 < digits_operator_1: + digits_operator_2 += 1 + else: + digits_operator_1 += 1 + + +if __name__ == "__main__": + play_game() \ No newline at end of file From e3adad94f70adc2c50f35619cd6bf2d259807e0e Mon Sep 17 00:00:00 2001 From: Claudio Rodriguez Herrera Date: Mon, 13 Nov 2023 19:17:37 -0300 Subject: [PATCH 0668/2103] Reto #44 - Python --- .../python/inkhemi.py" | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/inkhemi.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/inkhemi.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/inkhemi.py" new file mode 100644 index 0000000000..31fd26f6c7 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/inkhemi.py" @@ -0,0 +1,77 @@ +import random +import threading +import queue +import os + +operations = { + 1: "+", + 2: "-", + 3: "*", + 4: "/" +} + + +def get_input(input_queue): + input_queue.put(float(input("Respuesta: "))) + + +input_queue = queue.Queue() + + +def operations_game(): + ''' + Juego de resolución de operaciones matemáticas básicas con limite de tiempo de 3 segundos. + ''' + + digits_1 = 1 + digits_2 = 1 + questions = 0 + cont = 0 + + while True: + op = random.randint(1, 4) + number_1 = random.randint(0, int("9" * digits_1)) + number_2 = random.randint(0, int("9" * digits_2)) + + if op == 1: + result = number_1 + number_2 + elif op == 2: + result = number_1 - number_2 + elif op == 3: + result = number_1 * number_2 + else: + if number_2 == 0: # Si el divisor es 0, se cambia por 1 para evitar errores + number_2 += 1 + result = number_1 / number_2 + + print(f"{number_1} {operations[op]} {number_2} = ?") + input_thread = threading.Thread(target=get_input, args=(input_queue,)) + input_thread.start() + input_thread.join(timeout=3) + + if input_thread.is_alive(): + print("\nTiempo agotado!") + break + + answer = input_queue.get() + + if answer == result: + print("Correcto!\n") + else: + break + + questions += 1 + cont += 1 + if cont == 5: + if digits_1 == digits_2: + digits_1 += 1 + else: + digits_2 += 1 + cont = 0 + + print(f"Fin del juego \nRespuestas correctas: {questions}") + # Se usa os._exit(0) para terminar el programa cuando se acaba el tiempo + os._exit(0) + + +operations_game() From 7c495b4b42da79ce7cdec164d0283625589e1104 Mon Sep 17 00:00:00 2001 From: ShinMugenNoKabe Date: Mon, 13 Nov 2023 23:41:26 +0100 Subject: [PATCH 0669/2103] Reto #43 - Python --- .../python/ShinMugenNoKabe.py" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ShinMugenNoKabe.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ShinMugenNoKabe.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ShinMugenNoKabe.py" new file mode 100644 index 0000000000..51d76222f4 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/ShinMugenNoKabe.py" @@ -0,0 +1,69 @@ +# 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 disminuye 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. + +from random import randint, getrandbits + + +def climate_change(initial_days: int, initial_temperature: float, inititial_risk_of_rain: float): + days: int = initial_days + next_temperature: float = initial_temperature + next_risk_of_rain: float = inititial_risk_of_rain + + min_temperature: float = initial_temperature + max_temperature: float = initial_temperature + + for day in range(days): + temperature: float = next_temperature + risk_of_rain: float = next_risk_of_rain + + print(f"Day {day + 1}, temperature: {temperature}, is raining: {risk_of_rain == 100} ") + + if risk_of_rain == 100: + next_temperature -= 1 + + if temperature < min_temperature: + min_temperature = temperature + + if temperature > max_temperature: + max_temperature = temperature + + increase_decrease_temperature_prob: int = randint(1, 100) + + if increase_decrease_temperature_prob >= 1 and increase_decrease_temperature_prob <= 10: + increase_temperature: bool = bool(getrandbits(1)) + + if increase_temperature: + next_temperature += 2 + else: + next_temperature -= 2 + + if next_temperature > 25: + next_risk_of_rain += 20 + elif next_temperature < 5: + next_risk_of_rain -= 20 + + if next_risk_of_rain < 0: + next_risk_of_rain = 0 + elif next_risk_of_rain > 100: + next_risk_of_rain = 100 + + print(f"Min temperature: {min_temperature}º, max temperature: {max_temperature}º") + + +if __name__ == "__main__": + days: int = int(input("Number of days: ")) + temperature: float = float(input("Initial number of temperature: ")) + risk_of_rain: float = float(input("Initial risk of rain: ")) + + climate_change(days, temperature, risk_of_rain) \ No newline at end of file From 09f8f6f67745aeada3406c0e5053daaca9dff95c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danniela=20Rodr=C3=ADguez?= Date: Mon, 13 Nov 2023 19:05:53 -0400 Subject: [PATCH 0670/2103] Reto #1 Python --- .../python/DanniRodrJ.py" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/DanniRodrJ.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/DanniRodrJ.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/DanniRodrJ.py" new file mode 100644 index 0000000000..79fbf88b3f --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/DanniRodrJ.py" @@ -0,0 +1,30 @@ +''' +Escribe un programa que reciba un texto y transforme lenguaje natural a +"lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje +se caracteriza por sustituir caracteres alfanuméricos. +- Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) +con el alfabeto y los números en "leet". +(Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") +''' +def translator(text): + leet_speak = {'a': 4, 'b': 8, 'c': '<', 'd': '>', 'e': '&', 'f': 'v', 'g': 9, 'h': '#', + 'i': 1, 'j': ';', 'k': '1<', 'l': '£', 'm': '^^', 'n': 'И', 'o': 0, 'p': 9, + 'q': 2, 'r': 'Я', 's': 5, 't': 7, 'u': 'µ', 'v': '\/', 'w': 'Ш', 'x': 'ecks', + 'y': '¥', 'z': 's'} + list_ls = [] + + for letter in text: + if letter in leet_speak.keys(): + list_ls.append(leet_speak[letter]) + else: + list_ls.append(letter) + + end_text = ''.join(map(str, list_ls)) + return end_text + + +test = 'Leet speak o leet es un tipo de escritura compuesta de caracteres alfanuméricos' +print(translator(test)) + +user = input('Texto a traducir: ').lower() +print(translator(user)) \ No newline at end of file From c0869fb0316fc50468699909b3592d439dcac9c8 Mon Sep 17 00:00:00 2001 From: Marco Torres Date: Mon, 13 Nov 2023 17:29:02 -0700 Subject: [PATCH 0671/2103] Reto #40 - Python --- .../python/marcoatrs.py" | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/marcoatrs.py" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/marcoatrs.py" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/marcoatrs.py" new file mode 100644 index 0000000000..7c8026afbb --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/python/marcoatrs.py" @@ -0,0 +1,5 @@ +def tabla_multiplicar(numero): + for i in range(1, 11): + print(f"{numero} x {i} = {numero * i}") + +tabla_multiplicar(12) From 26e8d7142e4c8f4342bf1a50621fc5a4518a559c Mon Sep 17 00:00:00 2001 From: deathiwng Date: Tue, 14 Nov 2023 01:41:54 +0100 Subject: [PATCH 0672/2103] Reto #44 - C# --- .../c#/deathwing696.cs" | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/c#/deathwing696.cs" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/c#/deathwing696.cs" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/c#/deathwing696.cs" new file mode 100644 index 0000000000..c0cb564565 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/c#/deathwing696.cs" @@ -0,0 +1,114 @@ +/* + * Crea un juego interactivo por terminal en el que tendrs que adivinar + * el resultado de diferentes + * operaciones matemticas aleatorias (suma, resta, multiplicacin + * o divisin de dos nmeros enteros). + * - Tendrs 3 segundos para responder correctamente. + * - El juego finaliza si no se logra responder en ese tiempo. + * - Al finalizar el juego debes mostrar cuntos clculos has acertado. + * - Cada 5 aciertos debes aumentar en uno el posible nmero de cifras + * de la operacin (cada vez en un operando): + * - Preguntas 1 a 5: X (entre 0 y 9) operacin Y (entre 0 y 9) + * - Preguntas 6 a 10: XX (entre 0 y 99) operacin Y (entre 0 y 9) + * - Preguntas 11 a 15: XX operacin YY + * - Preguntas 16 a 20: XXX (entre 0 y 999) operacin YY + * ... + */ + +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace reto44 +{ + public class Reto44 + { + static void Main(string[] args) + { + int num_respuestas = 0, respuesta, resultado = 0; + CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); + CancellationToken cancellationToken = cancellationTokenSource.Token; + Task readInputTask; + + do + { + readInputTask = Task.Run(() => Lanza_operacion(num_respuestas, out resultado), cancellationToken); + respuesta = Task.WaitAny(new Task[] { readInputTask }, TimeSpan.FromSeconds(2)); + + if (Task.WaitAny(new Task[] { readInputTask }, TimeSpan.FromSeconds(3)) != -1) + { + if (readInputTask.Result == resultado) + { + num_respuestas++; + } + else + { + Console.WriteLine($"El resultado {readInputTask.Result} no es correcto, el valor esperado era {resultado}"); + respuesta = -2; + } + } + else + { + respuesta = -1; + break; + } + + } while (respuesta != -1 && respuesta != -2); + + cancellationTokenSource.Cancel(); + + if (respuesta == -1) + { + Console.WriteLine(); + Console.WriteLine($"Has tardado ms de 3 segundos en responder, lo siento, has perdido pero has respondido bien a {num_respuestas} respuestas"); + } + + Console.ReadKey(); + } + + public static int Lanza_operacion(int num_respuestas, out int resultado) + { + Random random = new Random(); + int operacion, respuesta; + string num1 = "", num2 = "", operador = ""; + + for (int i = 0; i < Math.Floor(num_respuestas / 5.0) + 1; i++) + num1 += random.Next(0, 10).ToString(); + + for (int i = 0; i < Math.Floor(num_respuestas / 5.0) + 1; i++) + num2 += random.Next(0, 10).ToString(); + + operacion = random.Next(0, 4); + + switch (operacion) + { + case 0: + operador = "+"; + resultado = Int32.Parse(num1) + Int32.Parse(num2); + break; + case 1: + operador = "-"; + resultado = Int32.Parse(num1) - Int32.Parse(num2); + break; + case 2: + operador = "x"; + resultado = Int32.Parse(num1) * Int32.Parse(num2); + break; + case 3: + operador = "/"; + resultado = Int32.Parse(num1) / Int32.Parse(num2); + break; + default: + resultado = 0; + break; + } + + Console.Write($"Resuelve: {num1} {operador} {num2} = "); + + if (Int32.TryParse(Console.ReadLine(), out respuesta)) + return respuesta; + else + return 0; + } + } +} \ No newline at end of file From 13af5ca991648ddf6e5b972a0b34d57181dbc4e8 Mon Sep 17 00:00:00 2001 From: Daniel Tamayo Date: Mon, 13 Nov 2023 19:52:59 -0500 Subject: [PATCH 0673/2103] "Reto 0, 5 y 6 terminados" --- .../python/iTzBigPerrito.py" | 8 +-- .../javascript/iTzBigPerrito.js" | 1 + .../python/iTzBigPerrito.py | 65 +++++++++++++++++++ 3 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/iTzBigPerrito.js" create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/iTzBigPerrito.py diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/iTzBigPerrito.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/iTzBigPerrito.py" index c12fd666d5..d770a5969a 100644 --- "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/iTzBigPerrito.py" +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/iTzBigPerrito.py" @@ -6,15 +6,15 @@ def main(): multiplo3 = x % 3 multiplo5 = x % 5 - if(multiplo3 == 0): + if(multiplo3 == 0 and multiplo5 == 0): + print('fizzbuzz') + continue + elif(multiplo3 == 0): print('fizz') continue elif(multiplo5 == 0): print('buzz') continue - elif(multiplo3 == 0 and multiplo5 == 0): - print('fizzbuzz') - continue else: print(x) diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/iTzBigPerrito.js" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/iTzBigPerrito.js" new file mode 100644 index 0000000000..00b254cb13 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/iTzBigPerrito.js" @@ -0,0 +1 @@ +console.log('Hola Mundo!'); \ No newline at end of file diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/iTzBigPerrito.py b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/iTzBigPerrito.py new file mode 100644 index 0000000000..b0c7792e9e --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/iTzBigPerrito.py @@ -0,0 +1,65 @@ +def main(): + print('PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK') + rockWin = ['lagarto', 'tijera'] + paperWin = ['piedra', 'spock'] + scissorsWin = ['papel', 'lagarto'] + lizzardWin = ['spock', 'papel'] + spockWin = ['piedra','tijera'] + playLog = [] + for x in range(1,4): + print(f'RONDA {x}') + fPlayerInput = str(input('Player 1 plays: ')).lower + sPlayerInput = str(input('Player 2 plays: ')).lower + result = 0 + fPlayerScore = 0 + sPlayerScore = 0 + + if(fPlayerInput == sPlayerInput): + result = 'Tie' + # Piedra if + elif(fPlayerInput == 'piedra'): + if(sPlayerInput in rockWin): + result = 1 + else: + result = 2 + # Papel if + elif(fPlayerInput == 'papel'): + if(sPlayerInput in paperWin): + result = 1 + else: + result = 2 + # Tijera if + elif(fPlayerInput == 'tijera'): + if(sPlayerInput in scissorsWin): + result = 1 + else: + result = 2 + # Lagarto if + elif(fPlayerInput == 'lagarto'): + if(sPlayerInput in lizzardWin): + result = 1 + else: + result = 2 + # Spock if + elif(fPlayerInput == 'spock'): + if(sPlayerInput in spockWin): + result = 1 + else: + result = 2 + # First Player Score + if(result == 1): + fPlayerScore += 1 + # Second Player Score + if(result == 2): + sPlayerScore += 1 + playLog.append(result) + if(fPlayerScore == sPlayerScore): + winner = 'Tie' + elif(fPlayerScore > sPlayerScore): + winner = 'Player 1' + else: + winner = 'Player 2' + print(f'Resultado: {winner}') + +if __name__ == '__main__': + main() \ No newline at end of file From d3aa5d5ec9ab0fd07afb0435da73461015ee5f1e Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Mon, 13 Nov 2023 18:58:30 -0600 Subject: [PATCH 0674/2103] add marvnramos.js file --- .../javascript/marvnramos.js | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/marvnramos.js diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/marvnramos.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/marvnramos.js new file mode 100644 index 0000000000..80caa5b705 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/marvnramos.js @@ -0,0 +1,2 @@ +// P1 (player 1) +// P2 (player 2) From d64adac448b71f1c8b95ef8559858207073076a4 Mon Sep 17 00:00:00 2001 From: blackriper Date: Mon, 13 Nov 2023 19:00:20 -0600 Subject: [PATCH 0675/2103] Reto#44-go --- .../go/blackriper.go" | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/go/blackriper.go" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/go/blackriper.go" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/go/blackriper.go" new file mode 100644 index 0000000000..3e49dd3172 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/go/blackriper.go" @@ -0,0 +1,89 @@ +package main + +import ( + "fmt" + "math/rand" + "time" +) + +/* definir metodos de trabajo*/ +type MathematicalRiddles interface { + PlayRiddles() +} + +// implementar metodos de interface +type RiddlesGame struct { + Sucess int +} + +func (r *RiddlesGame) PlayRiddles() { + var ( + res int + answer int + question int = 1 + ) + + for { + fmt.Println("***** MathematicalRiddles *****") + x, signal, y := GeneratorRiddles(question) + GetResultRiddle(x, y, &res, signal) + fmt.Printf("Write the correct answer to the following operation %v %v %v = ", x, signal, y) + fmt.Scanf("%d", &answer) + time.Sleep(3 * time.Second) + if answer != res { + fmt.Println("you lost game !!") + fmt.Printf("you solved %v operations correctly ", r.Sucess) + break + } else if answer == res { + question++ + r.Sucess++ + } + + } + +} + +/* funciones auxiliares*/ +func GeneratorRiddles(question int) (x int, signal string, y int) { + + signals := []string{"+", "-", "*", "/"} + + switch { + case question >= 1 && question <= 5: + x = rand.Intn(9) + y = rand.Intn(9) + + case question >= 6 && question <= 10: + x = rand.Intn(99) + y = rand.Intn(9) + + case question >= 11 && question <= 15: + x = rand.Intn(99) + y = rand.Intn(99) + + case question >= 16 && question <= 20: + x = rand.Intn(999) + y = rand.Intn(99) + } + signal = signals[rand.Intn(len(signals))] + + return x, signal, y +} + +func GetResultRiddle(x, y int, res *int, signal string) { + switch signal { + case "+": + *res = x + y + case "-": + *res = x - y + case "*": + *res = x * y + case "/": + *res = x / y + } +} + +func main() { + var game MathematicalRiddles = &RiddlesGame{} + game.PlayRiddles() +} From 47c7135d942b3fb2a01d5e9244dedaa1ab3f6cf2 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Mon, 13 Nov 2023 19:12:47 -0600 Subject: [PATCH 0676/2103] initiating exercise logic --- .../javascript/marvnramos.js | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/marvnramos.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/marvnramos.js index 80caa5b705..e50e299b26 100644 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/marvnramos.js +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/marvnramos.js @@ -1,2 +1,36 @@ // P1 (player 1) // P2 (player 2) + +const show_score = (plays) =>{ + // initializing player's score + let P1 = 0; + let P2 = 0; + + // Iterate over each play in array plays + for(let play in plays){ + if(play === "P1"){ + P1++; + } + else{ + P2++; + } + + // logic to determinate the game status + game_status = determinate_game_status(P1, P2) + console.log(game_status); + + if(game_status === "Ganador"){ + break; + } + } +} + +const determinate_game_status = (P1, P2) =>{ + // logica para determinar el estado del juego + // devolver el estado del juego + // (love, 15, 30, 40, Deuce, Ventaja, Ganador) +} + +// Ej. de uso +let sequence_of_actions = ["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"]; +show_score(sequence_of_actions); From bd9d85927f2215fc16ff9e6b83c5e0cc62334535 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Mon, 13 Nov 2023 20:04:31 -0600 Subject: [PATCH 0677/2103] challenge 2 solved --- .../javascript/marvnramos.js | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/marvnramos.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/marvnramos.js index e50e299b26..7012d14f5a 100644 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/marvnramos.js +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/marvnramos.js @@ -8,7 +8,7 @@ const show_score = (plays) =>{ // Iterate over each play in array plays for(let play in plays){ - if(play === "P1"){ + if(plays[play] === "P1"){ P1++; } else{ @@ -16,7 +16,7 @@ const show_score = (plays) =>{ } // logic to determinate the game status - game_status = determinate_game_status(P1, P2) + let game_status = determinate_game_status(P1, P2); console.log(game_status); if(game_status === "Ganador"){ @@ -26,11 +26,30 @@ const show_score = (plays) =>{ } const determinate_game_status = (P1, P2) =>{ - // logica para determinar el estado del juego - // devolver el estado del juego - // (love, 15, 30, 40, Deuce, Ventaja, Ganador) + if(P1 == 1 && P2 == 0){ + return "15 - Love"; + } + else if(P1 == 2 && P2 == 0){ + return "30 - Love"; + } + else if(P1 == 2 && P2 == 1){ + return "30 - 15"; + } + else if(P1 == 2 && P2 == 2){ + return "30 - 30"; + } + else if(P1 == 3 && P2 == 2){ + return "40 - 30"; + } + else if(P1 == P2){ + return "Deuce"; + }else if (P1 == 4) { + return "Ventaja P1"; + }else if (P1 > 4) { + return "Ha ganado el P1"; + } } -// Ej. de uso + let sequence_of_actions = ["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"]; show_score(sequence_of_actions); From 02c37cb309d1d215c6400a2cd4b7742f4706cda0 Mon Sep 17 00:00:00 2001 From: jcdm60 Date: Tue, 14 Nov 2023 01:01:37 -0400 Subject: [PATCH 0678/2103] Reto #44 - Python --- .../python/jcdm60.py" | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/jcdm60.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/jcdm60.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/jcdm60.py" new file mode 100644 index 0000000000..4eac963a39 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/jcdm60.py" @@ -0,0 +1,95 @@ +# Reto #44: Adivinanzas matemáticas +#### Dificultad: Media | Publicación: 13/11/23 | Corrección: 20/11/23 + +## Enunciado + +# +# Crea un juego interactivo por terminal en el que tendrás que adivinar +# el resultado de diferentes +# operaciones matemáticas aleatorias (suma, resta, multiplicación +# o división de dos números enteros). +# - Tendrás 3 segundos para responder correctamente. +# - El juego finaliza si no se logra responder en ese tiempo. +# - Al finalizar el juego debes mostrar cuántos cálculos has acertado. +# - Cada 5 aciertos debes aumentar en uno el posible número de cifras +# de la operación (cada vez en un operando): +# - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) +# - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) +# - Preguntas 11 a 15: XX operación YY +# - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY +# + +import random +import time + +class GuessingGame: + def __init__(self): + self.level = 1 + self.correct_guesses = 0 + self.time_limit = 3 + + def set_time_limit(self): + try: + self.time_limit = float(input("Ingrese el limite de tiempo de espera para las respuesta (en segundos): ")) + except ValueError: + print("Límite invalido, usaré el límite por defecto de 3 segundos") + + def generate_operation(self): + if self.level <= 5: + x = random.randint(0, 9) + y = random.randint(1, 9) + elif self.level <= 10: + x = random.randint(0, 99) + y = random.randint(1, 9) + elif self.level <= 15: + x = random.randint(0, 99) + y = random.randint(1, 99) + else: + x = random.randint(0, 999) + y = random.randint(1, 99) + + operators = ['+', '-', '*', '/'] + operator = random.choice(operators) + + operation = f"{x} {operator} {y}" + result = eval(operation) if operator != '/' or y != 0 else x + + return operation, result + + def play(self): + self.set_time_limit() + + while self.level <= 20: + print(f"\nPregunta {self.level}:") + operation, correct_result = self.generate_operation() + print(f"Cuál es el resultado de: {operation}?") + + start_time = time.time() + user_answer = input("Respuesta: ") + + if time.time() - start_time > self.time_limit: + print("Tiempo agotado!") + break + + try: + user_answer = eval(user_answer) + except (ValueError, ZeroDivisionError): + print("Respuesta no válida") + continue + + if round(user_answer, 2) == round(correct_result, 2): + print("Correcto!") + self.correct_guesses += 1 + else: + print(f"Incorrecto. La respuesta correcta era: {correct_result}.") + + if self.correct_guesses % 5 == 0: + print(f"\nUsted obtuvo {self.correct_guesses} respuestas correctas! Vamos a aumentar el número de dígitos!") + + self.level += 1 + + print(f"\nFin del juego. Total de respuestas correctas: {self.correct_guesses}") + +if __name__ == "__main__": + game = GuessingGame() + game.play() From eb330ba4f9a3a043fed516f5ce001752691e29b3 Mon Sep 17 00:00:00 2001 From: Raul Garcia Date: Tue, 14 Nov 2023 10:46:28 +0100 Subject: [PATCH 0679/2103] Reto #43 - Python --- .../python/raulG91.py" | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/raulG91.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/raulG91.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/raulG91.py" new file mode 100644 index 0000000000..9fdb6305c1 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/raulG91.py" @@ -0,0 +1,59 @@ +from random import randrange + +def sim_weather(ini_temp,ini_rain_percentage,num_days=7): + min_temp = ini_temp + max_temp = ini_temp + rain_percentage = ini_rain_percentage + rain_days = 0 + temperature_today = ini_temp + temperature_previos_day = temperature_today + temperature_next_day = temperature_today + + for day in range(1,num_days + 1): + is_raining = False + temperature_previos_day = temperature_today + temperature_today = temperature_next_day + + print("Temparature on day " + str(day) + " is " + str(temperature_today)) + #Adjust min and max temperature + if temperature_today < min_temp: + min_temp = temperature_today + elif temperature_today > max_temp: + max_temp = temperature_today + #Generate a random number to check if it will rain + random = randrange(0,100) + if random <= rain_percentage: + #It will rain + is_raining = True + rain_days +=1 + print("it will rain") + else: + print("it won't rain") + if temperature_today > 25: + #Temparature is bigger than 25 so we increase rain percentage 20% + rain_percentage += 20 + if temperature_previos_day - temperature_today == 5: + #Temperature decrease 5 degrees + rain_percentage -= 20 + + if is_raining : + #if it's raining 100% temperature will decrease 1 degree + temperature_next_day = temperature_today - 1 + else: + # there is a 10% of changing temparature + random = randrange(0,100) + if random <= 10: + #Temperature will change and new random will be generated to know if it will + # increase or decrease + random = randrange(0,1) + if random == 0: + temperature_next_day = temperature_today + 2 + else: + temperature_next_day = temperature_today - 2 + print("Number days with rain " + str(rain_days)) + print("Max temperature expected " + str(max_temp) + " , min temperature expected " + str(min_temp)) + +ini_temp = int(input("Set initial temperature ")) +ini_rain_percentage = int(input("Set initial rain probability ")) + +sim_weather(ini_temp=ini_temp, ini_rain_percentage= ini_rain_percentage) \ No newline at end of file From 311e5b8053d4483e4e540a89d84c5e1ba2b72bce Mon Sep 17 00:00:00 2001 From: Othamae Date: Tue, 14 Nov 2023 10:54:23 +0100 Subject: [PATCH 0680/2103] Reto #44 - javascript --- .../javascript/othamae.js" | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/othamae.js" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/othamae.js" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/othamae.js" new file mode 100644 index 0000000000..7d0d2e9948 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/othamae.js" @@ -0,0 +1,115 @@ +/* + * Crea un juego interactivo por terminal en el que tendrás que adivinar + * el resultado de diferentes + * operaciones matemáticas aleatorias (suma, resta, multiplicación + * o división de dos números enteros). + * - Tendrás 3 segundos para responder correctamente. + * - El juego finaliza si no se logra responder en ese tiempo. + * - Al finalizar el juego debes mostrar cuántos cálculos has acertado. + * - Cada 5 aciertos debes aumentar en uno el posible número de cifras + * de la operación (cada vez en un operando): + * - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) + * - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) + * - Preguntas 11 a 15: XX operación YY + * - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY + * ... + */ + +const readline = require('readline') +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}) + +playGame() + +function playGame(){ + console.log('Welcome to the math game!') + console.log('You have 3 seconds to answer...') + console.log('Good luck!!') + game(0) + +} + +function game(points){ + const [number1,operation, number2] = getQuestion(points) + const question = `${number1} ${operation} ${number2}` + const result =getResult(number1, operation, number2) + + const timer = setTimeout(() => { + console.log('\nTime is up! Game over :('); + console.log(`You answered ${points} questions correctly`); + rl.close(); + }, 3000) + + rl.question(`What is the result of the operation: ${question} = `, (answer) => { + console.log(result) + clearTimeout(timer); + if (parseInt(answer) === result){ + console.log('Correct answer') + points++ + console.log(`You have ${points} points`) + game(points) + } + else { + console.log('Game over :(') + console.log(`You answered ${points} questions correctly`) + rl.close() + } + }) + +} + +// helper functions +function getOperator(){ + const operations = ['+','-','*','/']; + return operations[Math.floor(Math.random()*operations.length)]; +} + +function getOneDigitNumber(){ + return Math.floor(Math.random()*10); +} + +function getTwoDigitNumber(){ + return Math.floor(Math.random()*100); +} + +function getThreeDigitNumber(){ + return Math.floor(Math.random()*1000); +} + +function getQuestion(points){ + let number1 + let number2 + if (points< 5 ){ + number1 = getOneDigitNumber() + number2 = getOneDigitNumber() + } else if (points< 10){ + number1 = getTwoDigitNumber() + number2 = getOneDigitNumber() + } else if (points< 15){ + number1 = getTwoDigitNumber() + number2 = getTwoDigitNumber() + } else if (points< 20){ + number1 = getThreeDigitNumber() + number2 = getTwoDigitNumber() + } else if (points< 25){ + number1 = getThreeDigitNumber() + number2 = getThreeDigitNumber() + } + const operation = getOperator() + return [number1, operation, number2] +} + +function getResult(number1, operator, number2){ + if (operator === '+'){ + return number1 + number2 + } else if (operator === '-'){ + return number1 - number2 + } else if (operator === '*'){ + return number1 * number2 + } else if (operator === '/'){ + return Math.round(number1 / number2) + } +} + From 3893821dc4446f6e5c7c63a9b8c51484949c6dcb Mon Sep 17 00:00:00 2001 From: valero Date: Tue, 14 Nov 2023 11:49:09 +0100 Subject: [PATCH 0681/2103] Added solution to Reto #44 --- .../python/valevil27.py" | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/valevil27.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/valevil27.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/valevil27.py" new file mode 100644 index 0000000000..9311ffb7c6 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/valevil27.py" @@ -0,0 +1,97 @@ +import os +import random +import sys +import select +from time import sleep +from typing import Callable + +operations: list[tuple[str, Callable[[int, int], int]]] = [ + ("+", lambda x, y: x + y), + ("-", lambda x, y: x - y), + ("⨉", lambda x, y: x * y), + ("÷", lambda x, y: x // y), +] + + +def timed_input(prompt: str, timeout: float = 3.0): + print(prompt, end="", flush=True) + + rlist, _, _ = select.select([sys.stdin], [], [], timeout) + if not rlist: + return None + return sys.stdin.readline().rstrip("\n") + + +def generate_question(x_digits: int, y_digits: int) -> tuple[str, int]: + op_sign, op_func = random.choice(operations) + x = random.randint(0, int("9" * x_digits)) + y = random.randint(0, int("9" * y_digits)) + + if op_sign == "÷" and y == 0: + while y == 0: + y = random.randint(0, int("9" * y_digits)) + + if x < y and x != 0: + x, y = y, x + + return f"[?] {x} {op_sign} {y} = ", op_func(x, y) + + +def handle_player_loses(points): + print(f"[*] You scored {points}!") + + +def handle_difficulty(points: int = 0, x_digits: int = 0, y_digits: int = 0): + if points == 0: + return x_digits, y_digits + if points % 5 == 0: + if points % 2 == 0: + return x_digits, y_digits + 1 + else: + return x_digits + 1, y_digits + return x_digits, y_digits + + +def main(): + print("➕🟰 Welcome to the Ultimate Math Quest! ➖➗") + for i in range(3,0,-1): + print(f"[!] Starting in {i}...") + sleep(1) + print ("\033[A \033[A") + points, x_digits , y_digits = 0, 1, 1 + while True: + # handle digits + x_digits, y_digits = handle_difficulty(points, x_digits, y_digits) + + # question and answer + question, result = generate_question(x_digits, y_digits) + user_input = timed_input(question, 3) + + # if timeout + if not user_input: + print("\n[!] Too Slow! You have been disqualified!") + handle_player_loses(points) + return + + # getting the answer + try: + answer = int(user_input.strip()) + except: + print("[!] Incorret format! You have been disqualified!") + handle_player_loses(points) + return + + # * wrong answer + if answer != result: + print("[!] Game over! Incorrect answer!") + print(f"{question}{result}") + handle_player_loses(points) + return + + # * correct answer + points += 1 + + +if __name__ == "__main__": + os.system("clear") + main() From 2e92820ad87577bc8b204ca975b4f31533d09862 Mon Sep 17 00:00:00 2001 From: Jordi Ayala Date: Tue, 14 Nov 2023 08:40:22 -0600 Subject: [PATCH 0682/2103] Reto #43 - Java --- .../java/asjordi.java" | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/java/asjordi.java" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/java/asjordi.java" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/java/asjordi.java" new file mode 100644 index 0000000000..5197fcb3c5 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/java/asjordi.java" @@ -0,0 +1,45 @@ +package facil.reto43; + +public class WeatherSimulator { + + public static void main(String[] args) { + simulate(7, 25, 0.2); + } + + public static void simulate(int days, double initialTemp, double initialRainProbability){ + double temperature = initialTemp; + double chanceOfRain = initialRainProbability; + double tempMax = temperature; + double tempMin = temperature; + int rainDays = 0; + + for (int i = 1; i <= days ; i++) { + // simulate change of temperature + if (Math.random() < 0.1){ + temperature += Math.random() < 0.5 ? 2 : -2; + } + + // update rain probability + if (temperature > 25) chanceOfRain += 0.2; + else if (temperature < 5) chanceOfRain -= 0.2; + + // set limite to rain probability + chanceOfRain = Math.min(1, Math.max(0, chanceOfRain)); + + // simulate rain + if (Math.random() < chanceOfRain){ + temperature -= 1; + rainDays++; + } + + // update math and min temperature + tempMax = Math.max(tempMax, temperature); + tempMin = Math.min(tempMin, temperature); + } + + String data = String.format("Max temperature %s °C%nMin temperature %s °C%nRaining days %s", tempMax, tempMin, rainDays); + + System.out.println(data); + } + +} From 3ab9963ac40fdee884a7cb8822b8dd93bfbbab0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Andr=C3=A9s?= <102297884+vandresca@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:14:34 +0100 Subject: [PATCH 0683/2103] Create vandresca.py --- .../python/vandresca.py" | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/vandresca.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/vandresca.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/vandresca.py" new file mode 100644 index 0000000000..7afec42446 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/vandresca.py" @@ -0,0 +1,91 @@ +""" +/* + * Crea un juego interactivo por terminal en el que tendrás que adivinar + * el resultado de diferentes + * operaciones matemáticas aleatorias (suma, resta, multiplicación + * o división de dos números enteros). + * - Tendrás 3 segundos para responder correctamente. + * - El juego finaliza si no se logra responder en ese tiempo. + * - Al finalizar el juego debes mostrar cuántos cálculos has acertado. + * - Cada 5 aciertos debes aumentar en uno el posible número de cifras + * de la operación (cada vez en un operando): + * - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) + * - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) + * - Preguntas 11 a 15: XX operación YY + * - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY + * ... + */ +""" +from enum import Enum +import random +from inputimeout import inputimeout, TimeoutOccurred + +class Operator(Enum): + ADD = 1 + SUBSTRACT = 2 + MULTIPLY = 3 + DIVIDE = 4 + +class ResultOperation(Enum): + OK = 1 + ERROR_DIV_0 = 2 + +def get_operator(): + rand_operator =random.randint(1,4) + return(Operator(rand_operator)) + +def get_number(digits): + number = 0 + for d in range(digits): + if d == 0: + rand_digit = random.randint(0,9) + else: + rand_digit = random.randint(1,9) + number += 10**d * rand_digit + return number + +def do_operation(digit_op1, digit_op2): + operand_one = get_number(digit_op1) + operand_two = get_number(digit_op2) + operator = get_operator() + match operator: + case Operator.ADD: + print(f"{operand_one} + {operand_two} = ", end="") + return (operand_one + operand_two), ResultOperation.OK + case Operator.SUBSTRACT: + print(f"{operand_one} - {operand_two} = ", end="") + return (operand_one - operand_two), ResultOperation.OK + case Operator.MULTIPLY: + print(f"{operand_one} * {operand_two} = ", end="") + return (operand_one * operand_two), ResultOperation.OK + case Operator.DIVIDE: + if operand_two == 0: + return 0, ResultOperation.ERROR_DIV_0 + print(f"{operand_one} / {operand_two} = ", end="") + return (operand_one / operand_two), ResultOperation.OK + +correct_answers = 0 +digit_op1 = 1 +digit_op2 = 1 + +while True: + guess, isOK = do_operation(digit_op1, digit_op2) + if isOK == ResultOperation.ERROR_DIV_0: + continue + try: + result = inputimeout(prompt='', timeout=10) + except TimeoutOccurred: + print("Perdiste") + break + if round(float(result),2) == round(float(guess),2): + correct_answers += 1 + pack_5answer_count = int(correct_answers / 5) + if correct_answers % 5 == 0 and not pack_5answer_count == 0: + print("Has subido de nivel. Nivel: "+str(pack_5answer_count)) + if pack_5answer_count % 2 == 0: + digit_op2 += 1 + else: + digit_op1 += 1 + else: + print("Perdiste") + break From b2703015d1b150223d39c376dc074b30d697fb22 Mon Sep 17 00:00:00 2001 From: feltoxXx <5326671+feltoxXx@users.noreply.github.com> Date: Tue, 14 Nov 2023 13:49:18 -0300 Subject: [PATCH 0684/2103] Reto # 8 - Python --- .../python/feltoxXx.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/feltoxXx.py diff --git a/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/feltoxXx.py b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/feltoxXx.py new file mode 100644 index 0000000000..abc1960b5a --- /dev/null +++ b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/python/feltoxXx.py @@ -0,0 +1,23 @@ +# Reto #8: El generador pseudoaleatorio + + +# +# Crea un generador de números pseudoaleatorios entre 0 y 100. +# - No puedes usar ninguna función "random" (o semejante) del lenguaje de programación seleccionado. +# +# Es más complicado de lo que parece... +# + +import time + +def rand_val(x): + + random=int(time.time()*1000) + + random %= (x + 1) + + return random + + +for x in range(100): + print(rand_val(x)) From dc32f62c71c493efc24daf5bb42d180b47617bb4 Mon Sep 17 00:00:00 2001 From: DanielR Date: Tue, 14 Nov 2023 11:54:00 -0500 Subject: [PATCH 0685/2103] reto #2 --- .../python/danielzx9.py | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py new file mode 100644 index 0000000000..a25277755c --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py @@ -0,0 +1,68 @@ +"""``` +/* + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ +```""" + +def control(): + p1=0 + p2=0 + win = "" + while win == "": + point_g = point() + + if point_g == "p1": + p1 = p1+ 1 + else: + p2 += 1 + win = tennis_game(p1,p2) + print(win) + + +def point(): + point_p = input("Que jugador obtiene un punto?") + if point_p == "p1" or point_p == "p2": + return point_p + else: + print("El punto no es valido.") + return point + +def tennis_game(p1,p2): + puntaje = ["Love", "15", "30", "40"] + if p1 == 3 and p2 == 3: + print("Deuce") + elif p1 >= 4 or p2 >= 4: + resto = p1 - p2 + if resto == 0: + print("Deuce") + elif resto == 1: + print("Ventaja P1") + elif resto == -1: + print("Ventaja P2") + elif resto >= 2: + print("Ha ganado P1") + return "P1" + else: + print("Ha ganado P2") + return "P2" + else: + print(f"{puntaje[p1]} - {puntaje[p2]}") + return "" + + +control() \ No newline at end of file From b382ff7621c0be83a87996a580619bd7de655842 Mon Sep 17 00:00:00 2001 From: Hugovrc Date: Tue, 14 Nov 2023 11:19:21 -0600 Subject: [PATCH 0686/2103] Reto #43 - Python --- .../python/Hugovrc.py" | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/Hugovrc.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/Hugovrc.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/Hugovrc.py" new file mode 100644 index 0000000000..48938bd477 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/Hugovrc.py" @@ -0,0 +1,50 @@ +import random + +def simulador_clima(dias: int): + temp_ini = int(input("Digita la temperatura inicial: ")) + prob_lluv = int(input("Digita el % de probabilidad de lluvia: ")) + dias_luvia = 0 + temp_min = 100 + temp_max = 0 + lluvia = "No" + + for dia in range(0, dias): + prob_tem = random.randint(0,10) == 1 + aum_o_dis = random.randint(1,2) + + if prob_tem: + if aum_o_dis == 1: + temp_ini += 2 + else: + temp_ini -= 2 + if temp_ini > 25: + if prob_lluv >= 100: + prob_lluv = 100 + elif prob_lluv < 100: + restante = 100 - prob_lluv + prob_lluv += restante + else: + prob_lluv += 20 + if prob_lluv == 100: + temp_ini -= 1 + lluvia = "Si" + if temp_ini < 5: + if prob_lluv <= 0: + prob_lluv = 0 + else: + prob_lluv -= 20 + if temp_ini > temp_max: + temp_max = temp_ini + if temp_ini < temp_min: + temp_min = temp_ini + if prob_lluv < 100: + lluvia = "No" + if lluvia == "Si": + dias_luvia += 1 + print(f"Dia: {dia} , Temperatura: {temp_ini} ,probabilidad de Lluvia: {lluvia, prob_lluv}") + print(f"Temperatura max: {temp_max}") + print(f"Temperatura min: {temp_min}") + print(f"Dias de Luvia: {dias_luvia}") + + +simulador_clima(10) \ No newline at end of file From b991c88318269aba1ed48f9d77df17b357120e49 Mon Sep 17 00:00:00 2001 From: DanielR Date: Tue, 14 Nov 2023 12:37:26 -0500 Subject: [PATCH 0687/2103] reto #2 --- .../python/danielzx9.py | 73 ++++++++----------- 1 file changed, 32 insertions(+), 41 deletions(-) diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py index a25277755c..5addedb867 100644 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py @@ -19,50 +19,41 @@ */ ```""" -def control(): - p1=0 - p2=0 - win = "" - while win == "": - point_g = point() - - if point_g == "p1": - p1 = p1+ 1 +def puntaje(puntos_p1, puntos_p2): + puntajes = ["Love", "15", "30", "40"] + if puntos_p1 == puntos_p2: + if puntos_p1 < 3: + return f"{puntajes[puntos_p1]} - {puntajes[puntos_p2]}" + elif puntos_p1 == 3: + return "Deuce" else: - p2 += 1 - win = tennis_game(p1,p2) - print(win) - - -def point(): - point_p = input("Que jugador obtiene un punto?") - if point_p == "p1" or point_p == "p2": - return point_p + return "Ventaja" + elif puntos_p1 >= 4 or puntos_p2 >= 4: + diferencia = abs(puntos_p1 - puntos_p2) + if diferencia == 1: + return f"Ventaja {'P1' if puntos_p1 > puntos_p2 else 'P2'}" + else: + return f"Ha ganado el {'P1' if puntos_p1 > puntos_p2 else 'P2'}" else: - print("El punto no es valido.") - return point + return f"{puntajes[puntos_p1]} - {puntajes[puntos_p2]}" -def tennis_game(p1,p2): - puntaje = ["Love", "15", "30", "40"] - if p1 == 3 and p2 == 3: - print("Deuce") - elif p1 >= 4 or p2 >= 4: - resto = p1 - p2 - if resto == 0: - print("Deuce") - elif resto == 1: - print("Ventaja P1") - elif resto == -1: - print("Ventaja P2") - elif resto >= 2: - print("Ha ganado P1") - return "P1" +def game(partido): + p1 = 0 + p2 = 0 + + for punto in partido: + if punto == "P1": + p1 += 1 + elif punto == "P2": + p2 += 1 else: - print("Ha ganado P2") - return "P2" - else: - print(f"{puntaje[p1]} - {puntaje[p2]}") - return "" + print("Entrada no válida") + + resultado = puntuacion(p1, p2) + print(resultado) + if "Ha ganado" in resultado: + break -control() \ No newline at end of file +secuenciaJuego = ["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"] +game(secuenciaJuego) From d529989d84eabdc8228aad234e88483c887142e7 Mon Sep 17 00:00:00 2001 From: DanielR Date: Tue, 14 Nov 2023 12:37:58 -0500 Subject: [PATCH 0688/2103] reto #2 - 2 --- Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py index 5addedb867..1430548648 100644 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/danielzx9.py @@ -49,7 +49,7 @@ def game(partido): else: print("Entrada no válida") - resultado = puntuacion(p1, p2) + resultado = puntaje(p1, p2) print(resultado) if "Ha ganado" in resultado: From 8e08e5fad66b6318e14dd5d4491e6be564d63ab0 Mon Sep 17 00:00:00 2001 From: jamerrq Date: Tue, 14 Nov 2023 14:10:37 -0500 Subject: [PATCH 0689/2103] =?UTF-8?q?=F0=9F=A7=AE=20Soluci=C3=B3n=20Reto?= =?UTF-8?q?=2044,=20Python=20by=20@jamerrq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/jamerrq.py" | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/jamerrq.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/jamerrq.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/jamerrq.py" new file mode 100644 index 0000000000..c3e1ab699a --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/jamerrq.py" @@ -0,0 +1,140 @@ +import random as rd +import sys +from pytimedinput import timedInput + + +class Game: + + def __init__(self, lang='en') -> None: + self.xlevel = 0 + self.ylevel = 0 + self.score = 0 + # User correct hits + self.uhits = 0 + # Limit time to answer (in seconds) + self.limit_time = 5 + self.timed_out = False + self.lang = lang + + def generate_random_question(self): + operations = ['+', '-', '*', '/'] + operation = rd.choice(operations) + a = rd.randint(10 ** self.xlevel, 10 ** (self.xlevel + 1)) + b = rd.randint(10 ** self.ylevel, 10 ** (self.ylevel + 1)) + c = 0 + if operation == '+': + c = a + b + elif operation == '-': + c = a - b + elif operation == '*': + c = a * b + elif operation == '/': + c = a // b + + return a, b, c, operation + + def show_game_status(self, current_operation, result_symbol, result_color): + clear() + sys.stdout.write( + f"\033[1;32m🎯 Score {self.score} | ❓ {current_operation}\033[0m\n") + sys.stdout.write(f"{result_color}{result_symbol}\033[0m ") + # sys.stdout.write("→ ") + + def show_stats(self): + if self.lang == 'es': + print(f'🎯 Tu puntaje: {self.score}') + print(f'🔥 Dificultad: {self.xlevel + self.ylevel + 1}') + print(f'🏆 Respuestas correctas: {self.uhits}') + else: + print(f'\n🎯 Your score: {self.score}') + print(f'🔥 Difficulty: {self.xlevel + self.ylevel + 1}') + print(f'🏆 Correct hits: {self.uhits}') + + def play(self): + while True: + a, b, c, operation = self.generate_random_question() + + # Show initial game status + self.show_game_status(f"{a} {operation} {b}", "", "") + + x, timedOut = timedInput("→ ", timeout=self.limit_time) + if timedOut: + self.timed_out = True + break + + if x == 'exit': + break + + try: + x = int(x) + + if x == c: + self.uhits += 1 + self.score += self.xlevel + self.ylevel + 1 + else: + break + + except ValueError: + break + + self.show_game_status("", "", "") + # time.sleep(0.5) + + if self.uhits % 5 == 0 and self.uhits != 0: + if self.xlevel > self.ylevel: + self.ylevel += 1 + else: + self.xlevel += 1 + + clear() + if self.timed_out: + if self.lang == 'es': + print('⌛ Se acabó el tiempo 😭') + else: + print('⌛ You ran out of time 😭') + else: + if self.lang == 'es': + print('💀 Respondiste mal 💀') + else: + print('💀 You answered wrong 💀') + + print() + self.show_stats() + + +def clear(): + sys.stdout.write("\033c") + + +def show_welcome_message(lang='en'): + es_welcome_message = ''' + 🧮 Bienvenido al juego de preguntas matemáticas! 🧮 + + 🤓 Tienes que responder tantas preguntas como puedas. + 🧠 Cada 5 respuestas correctas, la dificultad aumentará. + ❌ Si respondes mal, el juego terminará. + ⏰ Ten cuidado, tienes 5 segundos para responder cada pregunta! + ➗ Para la división, solo escribe el cociente (parte entera). + ''' + en_welcome_message = ''' + 🧮 Welcome to the math quiz game! 🧮 + + 🤓 You have to answer as many questions as you can. + 🧠 Every 5 correct answers, the difficulty will increase. + ❌ If you answer wrong, the game will end. + ⏰ Be careful, you have 5 seconds to answer each question! + ➗ For division, just write the quotient (integer part). + ''' + + if lang == 'es': + print(es_welcome_message) + input('Presiona cualquier tecla para comenzar 🎮\n') + else: + print(en_welcome_message) + input('Press any key to start 🎮\n') + +if __name__ == '__main__': + clear() + show_welcome_message() + game = Game() + game.play() From f4b99119af9b4989d532d42eae1139c4a67159e9 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Tue, 14 Nov 2023 16:56:20 -0300 Subject: [PATCH 0690/2103] reto #3 --- .../python/rokmanhaman.py" | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rokmanhaman.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rokmanhaman.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rokmanhaman.py" new file mode 100644 index 0000000000..ae52136a10 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rokmanhaman.py" @@ -0,0 +1,70 @@ +import random +import string + + + +class password(): + + possible_characters = [] + + def __init__(self, long=8, upper_case=False, numeric=False, symbolyc=False): + self.long = long + self.final_lenght = 8 if long < 8 else 16 if long > 16 else long + self.upper_case = upper_case + self.numeric = numeric + self.symbolyc = symbolyc + + + def config(self): + #possible_characters = [] + ### + if self.upper_case == 0: + l_lower_case = list(string.ascii_lowercase) + for l in l_lower_case: + self.possible_characters.append(l) + elif self.upper_case == 1: + l_letters = list(string.ascii_letters) + for l in l_letters: + self.possible_characters.append(l) + else: + print("error Elija 0 o 1") + ### + if self.numeric == 0: + pass + elif self.numeric == 1: + l_digits = list(string.digits) + for l in l_digits: + self.possible_characters.append(l) + ### + if self.symbolyc == 0: + pass + elif self.symbolyc ==1: + l_punctuation = list(string.punctuation) + for l in l_punctuation: + self.possible_characters.append(l) + + return ' los caracteres posibles son: ' +'\n'+ '{}'.format(self.possible_characters) #+ '{} {} {} {}'.format(self.long, self.upper_case, self.numeric, self.symbolyc) + + + def generattor(self): + pass_out = [] + for i in range(self.final_lenght): + + pass_out.append(random.choice(self.possible_characters)) + + return 'la contraseña es: {}'.format(''.join(pass_out)) + + + + + + +#pwd1 = password(12, True, True, True) +pwd1 = password(10,True, True, True) + + +print(pwd1.config()) + +print(pwd1.generattor()) + + From a4a055f5a1fc4dcc2aa35f2adf5c3a9ccf5a07f2 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 14 Nov 2023 23:12:00 +0100 Subject: [PATCH 0691/2103] Reto#44 javierfiestasbotella --- .../python/javierfiestasbotella.py" | 132 ++++++++++++++++++ .../python/javierfiestasbotella.py" | 0 2 files changed, 132 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/javierfiestasbotella.py" create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/javierfiestasbotella.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/javierfiestasbotella.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/javierfiestasbotella.py" new file mode 100644 index 0000000000..52dd6605dd --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/javierfiestasbotella.py" @@ -0,0 +1,132 @@ +import tkinter as tk +import random +from tkinter import simpledialog, messagebox + +'''entry = "🚪" +exit = "🍭" +room = "⬜" +ghost = "👻" +player = "🐍"''' + + +# Define las casillas +CASILLA_PUERTA = '🚪' +CASILLA_HABITACION_OCULTA = '⬜' +CASILLA_HABITACION_DULCES = '🍭' +CASILLA_ILUMINADA = '💡' + +# Enigmas y respuestas +ENIGMAS_RESPUESTAS = { + "¿Qué tiene ojos pero no puede ver?": "plátano", + "¿Qué tiene llaves pero no abre puertas?": "piano", + "¿Qué es lo que tiene dientes pero no puede morder?": "peine", + # Agrega más enigmas y respuestas aquí +} + +# Preguntas de los fantasmas y respuestas +PREGUNTAS_FANTASMAS_RESPUESTAS = { + "Pregunta de fantasma 1": "R1", + "Pregunta de fantasma 2": "R2", + # Agrega más preguntas de fantasmas y respuestas aquí +} + +class JuegoHalloween: + def __init__(self, ventana): + self.ventana = ventana + self.ventana.title("Juego de Halloween") + self.jugador = simpledialog.askstring("Bienvenido", "Ingresa tu nombre:") + self.ruta = [(0, 0)] + self.intentos_restantes = 4 + self.instrucciones = "Instrucciones:\n\n1. Debes avanzar en la mansión 4x4 hasta encontrar la habitación de los dulces.\n\n2. Cada vez que avanzas hacia una casilla oculta, debes responder a un enigma o preguntas de fantasmas.\n\n3. Tienes 4 intentos para avanzar en la dirección que elijas (arriba, abajo, izquierda o derecha).\n\n4. Si respondes correctamente a un enigma o pregunta de fantasma, la casilla se iluminará.\n\n5. Si encuentras la habitación de los dulces, ¡has ganado, {}! ¡Diviértete!".format(self.jugador) + self.crear_mansion() + self.crear_interfaz() + self.mostrar_instrucciones() + + def crear_mansion(self): + # Crea la mansión como una matriz 4x4 con casillas ocultas + self.mansion = [[CASILLA_HABITACION_OCULTA] * 4 for _ in range(4)] + self.mansion[0][0] = CASILLA_PUERTA + + # Coloca la casilla de los dulces de manera aleatoria + dulces_fila = random.randint(0, 3) + dulces_columna = random.randint(0, 3) + self.mansion[dulces_fila][dulces_columna] = CASILLA_HABITACION_DULCES + + def crear_interfaz(self): + # Crea la interfaz gráfica con botones para cada habitación + for fila, habitaciones_fila in enumerate(self.mansion): + for columna, tipo_habitacion in enumerate(habitaciones_fila): + boton = tk.Button(self.ventana, text=" ", font=("Arial", 16), command=lambda row=fila, col=columna: self.hacer_movimiento(row, col)) + boton.grid(row=fila, column=columna) + + def mostrar_instrucciones(self): + respuesta_instrucciones = simpledialog.askstring("Instrucciones", "¿Quieres ver las instrucciones? (Sí/No)") + if respuesta_instrucciones and respuesta_instrucciones.lower() == "si": + messagebox.showinfo("Instrucciones", self.instrucciones) + else: + messagebox.showinfo("¡Comencemos!", "¡Que comience el juego!") + + def hacer_movimiento(self, fila, columna): + if self.intentos_restantes == 0: + return + + if fila < self.ruta[-1][0]: + direccion = "arriba" + elif fila > self.ruta[-1][0]: + direccion = "abajo" + elif columna < self.ruta[-1][1]: + direccion = "izquierda" + elif columna > self.ruta[-1][1]: + direccion = "derecha" + else: + return + + self.intentos_restantes -= 1 + self.ruta.append((fila, columna)) + self.actualizar_interfaz() + + if direccion: + if self.mansion[fila][columna] == CASILLA_HABITACION_DULCES: + messagebox.showinfo("¡Felicidades!", "¡Has encontrado la habitación de los dulces, {}! ¡Has ganado!".format(self.jugador)) + self.ventana.quit() + elif self.mansion[fila][columna] == CASILLA_HABITACION_OCULTA: + if random.random() < 0.1: + # Aparece un fantasma + pregunta_fantasma = random.choice(list(PREGUNTAS_FANTASMAS_RESPUESTAS.keys())) + respuesta_correcta_fantasma = PREGUNTAS_FANTASMAS_RESPUESTAS[pregunta_fantasma] + respuesta_usuario = simpledialog.askstring("Fantasma", pregunta_fantasma) + if respuesta_usuario and respuesta_usuario.lower() == respuesta_correcta_fantasma.lower(): + self.mansion[fila][columna] = CASILLA_ILUMINADA + self.actualizar_interfaz() + messagebox.showinfo("¡Escapaste del fantasma!", "Respuesta correcta. Puedes continuar.") + else: + messagebox.showerror("¡Fantasma te ha atrapado!", "Respuesta incorrecta. El fantasma te atrapó.") + self.ventana.quit() + else: + # Pregunta de enigma + pregunta_enigma = random.choice(list(ENIGMAS_RESPUESTAS.keys())) + respuesta_correcta_enigma = ENIGMAS_RESPUESTAS[pregunta_enigma] + respuesta_usuario = simpledialog.askstring("Enigma", pregunta_enigma) + if respuesta_usuario and respuesta_usuario.lower() == respuesta_correcta_enigma.lower(): + self.mansion[fila][columna] = CASILLA_ILUMINADA + self.actualizar_interfaz() + else: + messagebox.showerror("Respuesta Incorrecta", "La respuesta es incorrecta. Inténtalo de nuevo en otra habitación.") + + self.intentos_restantes = 4 + + def actualizar_interfaz(self): + for fila, habitaciones_fila in enumerate(self.mansion): + for columna, tipo_habitacion in enumerate(habitaciones_fila): + if tipo_habitacion == CASILLA_ILUMINADA: + self.ventana.grid_slaves(row=fila, column=columna)[0].config(text=tipo_habitacion) + elif self.ruta[-1] == (fila, columna): + self.ventana.grid_slaves(row=fila, column=columna)[0].config(text="👣") + else: + self.ventana.grid_slaves(row=fila, column=columna)[0].config(text=" ") + +if __name__ == "__main__": + ventana = tk.Tk() + juego = JuegoHalloween(ventana) + ventana.mainloop() + diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/javierfiestasbotella.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/javierfiestasbotella.py" new file mode 100644 index 0000000000..e69de29bb2 From 79ff7051240d791f49570bf240226853f3d60530 Mon Sep 17 00:00:00 2001 From: Giovany Osorio <30839218+giovanyosorio@users.noreply.github.com> Date: Tue, 14 Nov 2023 22:15:13 +0000 Subject: [PATCH 0692/2103] Reto #15- js --- .vscode/settings.json | 5 ++ .../javascript/giovanyosorio.js" | 49 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 "Retos/Reto #15 - AUREBESH [F\303\241cil]/javascript/giovanyosorio.js" diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..b242572efb --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "githubPullRequests.ignoredPullRequestBranches": [ + "main" + ] +} \ No newline at end of file diff --git "a/Retos/Reto #15 - AUREBESH [F\303\241cil]/javascript/giovanyosorio.js" "b/Retos/Reto #15 - AUREBESH [F\303\241cil]/javascript/giovanyosorio.js" new file mode 100644 index 0000000000..0835ec8903 --- /dev/null +++ "b/Retos/Reto #15 - AUREBESH [F\303\241cil]/javascript/giovanyosorio.js" @@ -0,0 +1,49 @@ +/* + * Crea una función que sea capaz de transformar Español al lenguaje básico del universo + * Star Wars: el "Aurebesh". + * - Puedes dejar sin transformar los caracteres que no existan en "Aurebesh". + * - También tiene que ser capaz de traducir en sentido contrario. + * + * ¿Lo has conseguido? Nómbrame en twitter.com/mouredev y escríbeme algo en Aurebesh. + * + * ¡Que la fuerza os acompañe! + */ + +const aurebesh = { + 'A': 'Aurek', + 'B': 'Besh', + 'C': 'Cresh', + 'D': 'Dorn', + 'E': 'Esk', + 'F': 'Forn', + 'G': 'Grek', + 'H': 'Herf', + 'I': 'Isk', + 'J': 'Jenth', + 'K': 'Krill', + 'L': 'Leth', + 'M': 'Mern', + 'N': 'Nern', + 'O': 'Osk', + 'P': 'Peth', + 'Q': 'Qek', + 'R': 'Resh', + 'S': 'Senth', + 'T': 'Trill', + 'U': 'Usk', + 'V': 'Vev', + 'W': 'Wesk', + 'X': 'Xesh', + 'Y': 'Yirt', + 'Z': 'Zerek' +} + + +function translateToAurebesh(text) { + return text.split('').map(char => aurebesh[char.toUpperCase()] || char).join(''); +} + + + +console.log(translateToAurebesh('Hola Mundo')); + From 775619456916405915592ec5fa3cc1ce855adc5b Mon Sep 17 00:00:00 2001 From: Daniel Amaya Date: Tue, 14 Nov 2023 16:59:15 -0600 Subject: [PATCH 0693/2103] Reto #2 - JavaScript --- .../javascript/daldev14.js | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/daldev14.js diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/daldev14.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/daldev14.js new file mode 100644 index 0000000000..6a71543939 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/daldev14.js @@ -0,0 +1,62 @@ +/* + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ + +function jugarTenis(secuencia) { + let puntuacionP1 = 0 + let puntuacionP2 = 0 + + const puntuaciones = ["Love", 15, 30, 40] + + for (let punto of secuencia) { + if (punto === "P1") { + puntuacionP1++ + } else if (punto === "P2") { + puntuacionP2++ + } + + // Mostrar puntuación actual + if (puntuacionP1 >= 3 && puntuacionP2 >= 3) { + if (puntuacionP1 === puntuacionP2) { + console.log("Deuce") + } else if (puntuacionP1 > puntuacionP2) { + console.log("Ventaja P1") + } else { + console.log("Ventaja P2") + } + } else { + console.log( + `${puntuaciones[puntuacionP1]} - ${puntuaciones[puntuacionP2]}` + ) + } + + // Verificar si hay un ganador + if (puntuacionP1 >= 4 && puntuacionP1 - puntuacionP2 >= 2) { + console.log("Ha ganado el P1") + return + } else if (puntuacionP2 >= 4 && puntuacionP2 - puntuacionP1 >= 2) { + console.log("Ha ganado el P2") + return + } + } +} + +// Ejemplo de uso +const secuenciaJuego = ["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"] +jugarTenis(secuenciaJuego) + From 63cdfe3924ab9b84d2fcd8dc2ff3e35f27c8795a Mon Sep 17 00:00:00 2001 From: julianpk19961 Date: Tue, 14 Nov 2023 21:34:22 -0500 Subject: [PATCH 0694/2103] =?UTF-8?q?actualizaci=C3=B3n=20de=20reto#01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../php/julianpk19961.php" | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) rename "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961" => "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961.php" (98%) diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961.php" similarity index 98% rename from "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961" rename to "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961.php" index 02c52d6712..485c15ed02 100644 --- "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961" +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/php/julianpk19961.php" @@ -86,5 +86,4 @@ function sentencesToLeet($sentence = 'Sentence is void') sentencesToLeet(25660); sentencesToLeet(25, 5); sentencesToLeet(25.5); -sentencesToLeet("Hello"); - +sentencesToLeet("Hello"); \ No newline at end of file From ad782a7e1602fa6d4f252bf036d1c2cd9160cd5b Mon Sep 17 00:00:00 2001 From: Leandro Espino Date: Tue, 14 Nov 2023 21:00:28 -0600 Subject: [PATCH 0695/2103] Reto #18 - java --- .../java/EspinoLeandroo.java" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/java/EspinoLeandroo.java" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/java/EspinoLeandroo.java" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/java/EspinoLeandroo.java" new file mode 100644 index 0000000000..114dc31fdf --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/java/EspinoLeandroo.java" @@ -0,0 +1,29 @@ +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; +import java.io.IOException; + +public class EspinoLeandroo { + + public static void main(String[] args) { + String url = "https://holamundo.day"; + + try { + Document doc = Jsoup.connect(url).get(); + + // Encuentra la sección de la agenda del día 8 + Elements agendaItems = doc.select("div.agenda-day-8 div.agenda-item"); + + // Itera sobre los elementos de la agenda e imprime la hora e información + for (Element item : agendaItems) { + String hora = item.select("span.agenda-hour").text(); + String informacion = item.select("span.agenda-info").text(); + System.out.println(hora + " | " + informacion); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} + From 043be916c1e385c39c5538cc997d57bbc2c1bde8 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Tue, 14 Nov 2023 21:42:30 -0600 Subject: [PATCH 0696/2103] add marvnramos.js file --- .../javascript/marvnramos.js" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" new file mode 100644 index 0000000000..0326898115 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" @@ -0,0 +1,22 @@ +/* + * RETO #3: GENERADOR DE CONTRASEÑAS + * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + * Podrás configurar generar contraseñas con los siguientes parámetros: + * - Longitud: Entre 8 y 16. + * - Con o sin letras mayúsculas. + * - Con o sin números. + * - Con o sin símbolos. + * (Pudiendo combinar todos estos parámetros entre ellos) + */ + + + +const alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; +const numbers = [0,1,2,3,4,5,6,7,8,9]; +const symbols = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '-', '=', '[', ']', '{', '}', ';', ':', ',', '.', '<', '>', '/', '?', '|'] + +const passwordGenerator = (password_length, upperCase, withNumbers, withSymbols) =>{ + +} + +console.log(Math.floor(Math.random()*10)); \ No newline at end of file From 5dfb97c9cb9a767635889916dc2386f12065b393 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Tue, 14 Nov 2023 23:21:15 -0600 Subject: [PATCH 0697/2103] initiating logic --- .../javascript/marvnramos.js" | 98 ++++++++++++++++++- 1 file changed, 93 insertions(+), 5 deletions(-) diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" index 0326898115..c6d3b2f73b 100644 --- "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" @@ -11,12 +11,100 @@ -const alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; -const numbers = [0,1,2,3,4,5,6,7,8,9]; -const symbols = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '-', '=', '[', ']', '{', '}', ';', ':', ',', '.', '<', '>', '/', '?', '|'] +// const alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; +// const numbers = [0,1,2,3,4,5,6,7,8,9]; +// const symbols = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '-', '=', '[', ']', '{', '}', ';', ':', ',', '.', '<', '>', '/', '?', '|'] -const passwordGenerator = (password_length, upperCase, withNumbers, withSymbols) =>{ +const parameters = { + alphabet: [ + 'a', 'b', 'c', 'd', 'e', + 'f', 'g', 'h', 'i', 'j', + 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', + 'u', 'v', 'w', 'x', 'y', + 'z' + ], + symbols: [ + '!', '@', '#', '$', '%', + '^', '&', '*', '(', ')', + '_', '+', '-', '=', '[', + ']', '{', '}', ';', ':', + ',', '.', '<', '>', '/', + '?', '|' + ], + numbers: [0,1,2,3,4,5,6,7,8,9] +} + + +const getIndex = (num) => { + if(!num){ + return 'Parámetro requerido.'; + } + + const randomNumber = Math.floor(Math.random()*num); + + return randomNumber; +}; + +const getParameter = (obj) => { + if (!obj) { + return 'Parámetro requerido.'; + } + + const key = Object.keys(obj); + if(key === 0){ + return 'Objeto vacío.'; + } + + const randomKey = Math.floor(Math.random() * key.length); + const randomObjectMember = obj[key[randomKey]]; + + return randomObjectMember; + ; + +}; + +const getPasswordWithAllParameters = (passwordLength, upperCase, withNumbers, withSymbols) =>{ + let password = ''; + const regex = /^(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};:,.<>\/?|]).*$/; + + if(upperCase, withNumbers, withSymbols){ + for(let i = 0; i <= passwordLength - 1; i++){ + const parameter = getParameter(parameters); + const index = getIndex(parameter.length); + password += parameter[index]; + } + + password = password.toUpperCase(); + + return regex.test(password) ? password : getPassword(upperCase, withNumbers, withSymbols); + } } +const getPasswordWithLowerCase = ()=>{ + // logica +} + +const passwordGenerator = (passwordLength, upperCase, withNumbers, withSymbols) =>{ + let password = ''; + + const validPasswordLength = passwordLength >= 8 && passwordLength <= 16; + + if(!validPasswordLength){ + return 'La longitud de la contraseña debe estar entre 8 y 16'; + } + + if(upperCase, withNumbers, withSymbols){ + password = getPasswordWithAllParameters(passwordLength, upperCase, withNumbers, withSymbols); + return password; + } + else if( upperCase === true && (withNumbers, withSymbols) === false){ + // logica + } + + +}; + -console.log(Math.floor(Math.random()*10)); \ No newline at end of file +console.log(passwordGenerator(8, true, true, true)); +// console.log(getParameter(parameters)) From f81e03d04b62d5de5480df11f3bb6865f310a3e1 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Wed, 15 Nov 2023 08:21:47 -0300 Subject: [PATCH 0698/2103] reto #3 --- .../python/rokmanhaman.py" | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rokmanhaman.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rokmanhaman.py" index ae52136a10..c340fe2c76 100644 --- "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rokmanhaman.py" +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rokmanhaman.py" @@ -16,7 +16,7 @@ def __init__(self, long=8, upper_case=False, numeric=False, symbolyc=False): def config(self): - #possible_characters = [] + ### if self.upper_case == 0: l_lower_case = list(string.ascii_lowercase) @@ -55,15 +55,11 @@ def generattor(self): return 'la contraseña es: {}'.format(''.join(pass_out)) - - - -#pwd1 = password(12, True, True, True) -pwd1 = password(10,True, True, True) +pwd1 = password(20,True, True, True) -print(pwd1.config()) +pwd1.config() print(pwd1.generattor()) From e8cd047ef1c4d8d17be39993c56849e1a0393009 Mon Sep 17 00:00:00 2001 From: MarcosDigu Date: Wed, 15 Nov 2023 18:37:13 +0100 Subject: [PATCH 0699/2103] new file: "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/MarcosDigu.py" new file: Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/MarcosDigu.py --- .../python/MarcosDigu.py" | 43 +++++++++++++++++++ .../python/MarcosDigu.py | 31 +++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/MarcosDigu.py" create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/MarcosDigu.py diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/MarcosDigu.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/MarcosDigu.py" new file mode 100644 index 0000000000..c1c65abd58 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/MarcosDigu.py" @@ -0,0 +1,43 @@ +""" + * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + * Podrás configurar generar contraseñas con los siguientes parámetros: + * - Longitud: Entre 8 y 16. + * - Con o sin letras mayúsculas. + * - Con o sin números. + * - Con o sin símbolos. + * (Pudiendo combinar todos estos parámetros entre ellos) +""" +import string +import random +import os + +os.system('cls') + +def generate_password(length, use_uppercase, use_numbers, use_symbols): + characters = "" + + if use_uppercase: + characters += string.ascii_uppercase + if use_numbers: + characters += string.digits + if use_symbols: + characters += "!@#$%^&*()_-+=<>?/[]{}|" + + if not any([use_uppercase, use_numbers, use_symbols]): + # If no character type is selected, default to lowercase letters + characters = string.ascii_lowercase + + password = ''.join(random.choice(characters) for _ in range(length)) + return password + +char = int(input("Number of characters (8-16): ")) +uplo = input("U: Include uppercase - L: Lowercase only: ") +num = input("Include numbers (y/n): ") +sym = input("Include symbols (y/n): ") + +# Validate input for the number of characters +char = max(8, min(char, 16)) + +password = generate_password(char, uplo == "U", num == "y", sym == "y") + +print(f"Your password is: {password}") diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/MarcosDigu.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/MarcosDigu.py new file mode 100644 index 0000000000..24ae697340 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/MarcosDigu.py @@ -0,0 +1,31 @@ +def es_primo(num): + """Verifica si un número es primo.""" + if num < 2: + return False + for i in range(2, int(num**0.5) + 1): + if num % i == 0: + return False + return True + +def es_numero_fibonacci(num): + """Verifica si un número es un número de Fibonacci.""" + def es_cuadrado_perfecto(n): + """Verifica si un número es un cuadrado perfecto.""" + raiz = int(n**0.5) + return n == raiz**2 + + return es_cuadrado_perfecto(5 * num**2 + 4) or es_cuadrado_perfecto(5 * num**2 - 4) + +def es_par(num): + """Verifica si un número es par.""" + return num % 2 == 0 + +def checker(num): + """Imprime información sobre si un número es primo, de Fibonacci y par.""" + primo = "primo" if es_primo(num) else "compuesto" + fibo = "fibonacci" if es_numero_fibonacci(num) else "no fibonacci" + par = "par" if es_par(num) else "impar" + + print(f"El número {num} es {primo}, {fibo} y {par}.") + +checker(10) From 975a32194df3662bf11634cf70f0961d24966693 Mon Sep 17 00:00:00 2001 From: jamerrq Date: Wed, 15 Nov 2023 13:33:20 -0500 Subject: [PATCH 0700/2103] =?UTF-8?q?=F0=9F=A7=AE=20Soluci=C3=B3n=20Reto?= =?UTF-8?q?=2044,=20Python=20by=20@jamerrq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/jamerrq.py" | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/jamerrq.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/jamerrq.py" index c3e1ab699a..925f02e70c 100644 --- "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/jamerrq.py" +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/jamerrq.py" @@ -15,6 +15,8 @@ def __init__(self, lang='en') -> None: self.limit_time = 5 self.timed_out = False self.lang = lang + self.level = 0 + self.prev = 0 def generate_random_question(self): operations = ['+', '-', '*', '/'] @@ -36,8 +38,8 @@ def generate_random_question(self): def show_game_status(self, current_operation, result_symbol, result_color): clear() sys.stdout.write( - f"\033[1;32m🎯 Score {self.score} | ❓ {current_operation}\033[0m\n") - sys.stdout.write(f"{result_color}{result_symbol}\033[0m ") + f"\033[1;32m🎯 Score {self.score} | ❓ {current_operation} | ⏲️ {self.limit_time}s | 🧮 Level {self.level}\n") + # sys.stdout.write(f"{result_color}{result_symbol}\033[0m ") # sys.stdout.write("→ ") def show_stats(self): @@ -53,6 +55,7 @@ def show_stats(self): def play(self): while True: a, b, c, operation = self.generate_random_question() + self.prev = c # Show initial game status self.show_game_status(f"{a} {operation} {b}", "", "") @@ -80,11 +83,16 @@ def play(self): self.show_game_status("", "", "") # time.sleep(0.5) - if self.uhits % 5 == 0 and self.uhits != 0: - if self.xlevel > self.ylevel: - self.ylevel += 1 - else: - self.xlevel += 1 + if self.uhits != 0: + # Each 4 levels, give more time to answer + if self.uhits % 4 == 0: + self.limit_time += 1 + if self.uhits % 5 == 0: + self.level += 1 + if self.xlevel > self.ylevel: + self.ylevel += 1 + else: + self.xlevel += 1 clear() if self.timed_out: @@ -99,6 +107,8 @@ def play(self): print('💀 You answered wrong 💀') print() + final_message = f'🦃 Respuesta correcta: {self.prev}' if self.lang == 'es' else f'🦃 Correct answer: {self.prev}' + print(final_message) self.show_stats() @@ -113,7 +123,7 @@ def show_welcome_message(lang='en'): 🤓 Tienes que responder tantas preguntas como puedas. 🧠 Cada 5 respuestas correctas, la dificultad aumentará. ❌ Si respondes mal, el juego terminará. - ⏰ Ten cuidado, tienes 5 segundos para responder cada pregunta! + ⏰ Ten cuidado, tienes tiempo limitado para responder cada pregunta! ➗ Para la división, solo escribe el cociente (parte entera). ''' en_welcome_message = ''' @@ -122,7 +132,7 @@ def show_welcome_message(lang='en'): 🤓 You have to answer as many questions as you can. 🧠 Every 5 correct answers, the difficulty will increase. ❌ If you answer wrong, the game will end. - ⏰ Be careful, you have 5 seconds to answer each question! + ⏰ Be careful, you have limited time to answer each question! ➗ For division, just write the quotient (integer part). ''' From c13fa0b0f4e536e91efc8afd2d1d9c65eeec96fd Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Wed, 15 Nov 2023 17:44:49 -0300 Subject: [PATCH 0701/2103] Reto #3 - Python --- .../python/rokmanhaman.py" | 2 +- .../python/rokmanhamman.py | 69 +++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/rokmanhamman.py diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rokmanhaman.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rokmanhaman.py" index c340fe2c76..482671cbfb 100644 --- "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rokmanhaman.py" +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/rokmanhaman.py" @@ -7,7 +7,7 @@ class password(): possible_characters = [] - def __init__(self, long=8, upper_case=False, numeric=False, symbolyc=False): + def __init__(self, long, upper_case=False, numeric=False, symbolyc=False): self.long = long self.final_lenght = 8 if long < 8 else 16 if long > 16 else long self.upper_case = upper_case diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/rokmanhamman.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/rokmanhamman.py new file mode 100644 index 0000000000..5a9160d263 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/rokmanhamman.py @@ -0,0 +1,69 @@ +### RETO 4 + +"""/* + * Escribe un programa que, dado un número, compruebe y muestre si es primo, + * fibonacci y par. + * Ejemplos: + * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" + * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" + */""" + +class Number(): + def __init__(self, num): + self.value = num + + def check_even(self): #chequeo si es par + if self.value % 2 == 0: + paridad = "es par" + else: + paridad = "es impar" + return paridad + + def check_fibonacci(self): #chequeo si pertenece a un numero de fibonacci + fibo_list = [0, 1] + while self.value > fibo_list[-1]: + fibo_list.append(fibo_list[-2] + fibo_list[-1]) + + if self.value in fibo_list: + fibo = "es fibonacci" + else: + fibo = "no es fibonacci" + + return fibo + + def check_primo(self): + if self.value < 2: + primitud = "indefinido" + else: + list_resto=[] + for w in range(1,self.value+1): + resto = self.value % w + list_resto.append(resto) + + if list_resto.count(0) == 2: + primitud = "es primo" + else: + primitud = "no es primo" + + return primitud + + + +n= Number(7) + +print(f"{n.value} {n.check_primo()}, {n.check_fibonacci()} y {n.check_even()}") + + + + +"""for x in range(50): + print("------------------------------------------------") + n= Number(x) + print(f"{n.value} {n.check_primo()}, {n.check_fibonacci()} y {n.check_even()}") +""" + + + + + + \ No newline at end of file From 8c6431bfe1096a3dcb38c21a74836c6bb9c80eba Mon Sep 17 00:00:00 2001 From: feltoxXx <5326671+feltoxXx@users.noreply.github.com> Date: Wed, 15 Nov 2023 23:03:02 -0300 Subject: [PATCH 0702/2103] Reto # 9 - Python --- .../python/feltoxXx.py" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/feltoxXx.py" diff --git "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/feltoxXx.py" "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/feltoxXx.py" new file mode 100644 index 0000000000..fc5d35ef54 --- /dev/null +++ "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/feltoxXx.py" @@ -0,0 +1,34 @@ +# Reto #9: Heterograma, isograma y pangrama + +# +# Crea 3 funciones, cada una encargada de detectar si una cadena de texto es un heterograma, un isograma o un pangrama. +# - Debes buscar la definición de cada uno de estos términos. +# + +def es_heterograma(texto): + texto = texto.replace(" ", "").lower() + return len(texto) == len(set(texto)) + + +def es_isograma(texto): + texto = texto.replace(" ", "").lower() + return len(texto) == len(set(texto)) + + +def es_pangrama(texto): + alfabeto = set("abcdefghijklmnopqrstuvwxyz") + texto = texto.lower() + return set(texto) >= alfabeto + + +texto_heterograma = "hiperblanduzcos" +texto_isograma = "anna" +texto_pangrama = "Benjamín pidió una bebida de kiwi y fresa. Noé, sin vergüenza, la más exquisita champaña del menú" + +resultado_heterograma = es_heterograma(texto_heterograma) +print(f'"{texto_heterograma}" es un heterograma: {resultado_heterograma}') +resultado_isograma = es_isograma(texto_isograma) +print(f'"{texto_isograma}" es un isograma: {resultado_isograma}') +resultado_pangrama = es_pangrama(texto_pangrama) +print(f'"{texto_pangrama}" es un pangrama: {resultado_pangrama}') + From 38e52c21b8d7551be31eac7c8888f1e9ad117c94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateo=20=C3=81lvarez?= Date: Wed, 15 Nov 2023 22:19:22 -0500 Subject: [PATCH 0703/2103] Reto #44 - Python --- .../python/drifterDev.py" | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/drifterDev.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/drifterDev.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/drifterDev.py" new file mode 100644 index 0000000000..a3ad309e07 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/drifterDev.py" @@ -0,0 +1,57 @@ +import time +import random + +def nums(level): + if level % 2 == 0: + return [random.randint(0, 10**(level//2 +1) - 1), random.randint(0, 10**(level//2) - 1)] + else: + potencia = 10**((level+1)//2) - 1 + return [random.randint(0, potencia), random.randint(0, potencia)] + +def operacion(num1, num2, op, res): + try: + res = int(res) + if res == num1+num2 and op == "+": + return True + elif res == num1-num2 and op == "-": + return True + elif res == num1*num2 and op == "*": + return True + elif res == num1//num2 and op == "/": + return True + else: + print("\nRespuesta incorrecta") + except: + print("\nEntrada no valida") + return False + +def main(): + ops = ["+", "-", "*", "/"] + level = 1 + aciertos = 0 + print("Bienvenido a la prueba de matematicas") + print("Las operaciones se resolveran en menos de 3 segundos y las divisiones seran enteras\n") + print("Nivel de dificultad:",(level),"\n") + while True: + num1, num2 = nums(level) + op = random.choice(ops) + if op == "/" and num2 == 0: + num2 = 1 + tiempo = time.time() + res = input(str(num1)+" "+op+" "+str(num2)+" = ") + if time.time() - tiempo > 3: + print("Se acabó el tiempo") + break + if operacion(num1, num2, op, res): + aciertos += 1 + else: + break + if aciertos % 5 == 0: + level += 1 + print("\nNivel de dificultad:",(level),"\n") + + + print("Aciertos:",aciertos) + +if __name__ == "__main__": + main() From 33f2c27946179166ad4465691ab50a0fb6f2fe15 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Wed, 15 Nov 2023 21:36:59 -0600 Subject: [PATCH 0704/2103] add lower case password feature --- .../javascript/marvnramos.js" | 74 +++++++++++++------ 1 file changed, 52 insertions(+), 22 deletions(-) diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" index c6d3b2f73b..b9a0ed69d9 100644 --- "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" @@ -35,7 +35,6 @@ const parameters = { numbers: [0,1,2,3,4,5,6,7,8,9] } - const getIndex = (num) => { if(!num){ return 'Parámetro requerido.'; @@ -55,8 +54,8 @@ const getParameter = (obj) => { if(key === 0){ return 'Objeto vacío.'; } - - const randomKey = Math.floor(Math.random() * key.length); +// Math.floor(Math.random() * key.length); + const randomKey = getIndex(key.length) const randomObjectMember = obj[key[randomKey]]; return randomObjectMember; @@ -64,47 +63,78 @@ const getParameter = (obj) => { }; -const getPasswordWithAllParameters = (passwordLength, upperCase, withNumbers, withSymbols) =>{ +const getPassword = (passwordLength, upperCase, withNumbers, withSymbols) =>{ let password = ''; - const regex = /^(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};:,.<>\/?|]).*$/; - if(upperCase, withNumbers, withSymbols){ - for(let i = 0; i <= passwordLength - 1; i++){ + const regexWithUpperCase = /^(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};:,.<>\/?|]).*$/; + const regexWithLowerCase = /^(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};:,.<>\/?|]).*$/; + + + + if(upperCase && withNumbers && withSymbols){ + for(let i = 0; i < passwordLength; i++){ const parameter = getParameter(parameters); const index = getIndex(parameter.length); password += parameter[index]; } - password = password.toUpperCase(); - return regex.test(password) ? password : getPassword(upperCase, withNumbers, withSymbols); + return regexWithUpperCase.test(password) ? password : getPassword(upperCase, withNumbers, withSymbols); } + else if(!upperCase && !withNumbers && !withSymbols){ + for(let i = 0; i < passwordLength; i++){ + const parameter = parameters.alphabet; + const index = getIndex(parameter.length); + + password += parameter[index]; + } + return password; + } + else if(!upperCase && withNumbers && withSymbols){ + for(let i = 0; i < passwordLength; i++){ + const parameter = getParameter(parameters); + const index = getIndex(parameter.length); + + password += parameter[index]; + } + + return regexWithLowerCase.test(password) ? password : getPassword(upperCase, withNumbers, withSymbols); + } + // else if(!upperCase && !withNumbers && withSymbols){ + // for(let i = 0; i < passwordLength; i++){ + // const parameter = getParameter(parameters) != ? parameter : ; + // } } -const getPasswordWithLowerCase = ()=>{ - // logica -} + const passwordGenerator = (passwordLength, upperCase, withNumbers, withSymbols) =>{ - let password = ''; + let password = getPassword(passwordLength, upperCase, withNumbers, withSymbols); const validPasswordLength = passwordLength >= 8 && passwordLength <= 16; if(!validPasswordLength){ return 'La longitud de la contraseña debe estar entre 8 y 16'; - } - - if(upperCase, withNumbers, withSymbols){ - password = getPasswordWithAllParameters(passwordLength, upperCase, withNumbers, withSymbols); - return password; - } - else if( upperCase === true && (withNumbers, withSymbols) === false){ - // logica } + + return password; + }; +const passwordLength = 8; +const upperCase = false; +const withNumbers = true; +const withSymbols = true; + +const newPassword1 = passwordGenerator(12, true, true, true) +const newPassword2 = passwordGenerator(10, false, true, true); +const newPassword3 = passwordGenerator(10, false, false, false); + + +console.log(newPassword1); // primera condicion con upper +console.log(newPassword2); // segunda condicion con lower +console.log(newPassword3) -console.log(passwordGenerator(8, true, true, true)); // console.log(getParameter(parameters)) From 02a905c04caa80dbd31fb959929f1935622e3021 Mon Sep 17 00:00:00 2001 From: Leandro Espino Date: Wed, 15 Nov 2023 21:38:53 -0600 Subject: [PATCH 0705/2103] Reto #18 - python --- .../python/EspinoLeandroo.py" | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/EspinoLeandroo.py" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/EspinoLeandroo.py" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/EspinoLeandroo.py" new file mode 100644 index 0000000000..0ba7f59410 --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/EspinoLeandroo.py" @@ -0,0 +1,8 @@ +from bs4 import BeautifulSoup +import requests + +blockquotes = BeautifulSoup(requests.get( + "https://holamundo.day").content).find_all("blockquote") + +for blockquote in blockquotes[21:]: + print(blockquote.text) \ No newline at end of file From 94c58f32fd99f3fa3395e3a3e7866e47a7c6ad6e Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Wed, 15 Nov 2023 21:51:53 -0600 Subject: [PATCH 0706/2103] add no upper case and no numbers feature --- .../javascript/marvnramos.js" | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" index b9a0ed69d9..6a92f9e5c3 100644 --- "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" @@ -54,12 +54,11 @@ const getParameter = (obj) => { if(key === 0){ return 'Objeto vacío.'; } -// Math.floor(Math.random() * key.length); + const randomKey = getIndex(key.length) const randomObjectMember = obj[key[randomKey]]; return randomObjectMember; - ; }; @@ -101,10 +100,25 @@ const getPassword = (passwordLength, upperCase, withNumbers, withSymbols) =>{ return regexWithLowerCase.test(password) ? password : getPassword(upperCase, withNumbers, withSymbols); } - // else if(!upperCase && !withNumbers && withSymbols){ - // for(let i = 0; i < passwordLength; i++){ - // const parameter = getParameter(parameters) != ? parameter : ; - // } + else if(!upperCase && !withNumbers && withSymbols){ + for(let i = 0; i < passwordLength; i++){ + let parameter = ''; + let flag = true; + + while(flag){ + parameter = getParameter(parameters); + + if(parameter !== parameters.numbers){ + flag = false; + } + }; + + const index = getIndex(parameter.length); + + password += parameter[index]; + } + return password; + } } @@ -131,10 +145,14 @@ const withSymbols = true; const newPassword1 = passwordGenerator(12, true, true, true) const newPassword2 = passwordGenerator(10, false, true, true); const newPassword3 = passwordGenerator(10, false, false, false); +const newPassword4 = passwordGenerator(10,false, false, true); console.log(newPassword1); // primera condicion con upper console.log(newPassword2); // segunda condicion con lower -console.log(newPassword3) +console.log(newPassword3); +console.log(newPassword4); + -// console.log(getParameter(parameters)) +console.log(getParameter(parameters)); +console.log(parameters.numbers) \ No newline at end of file From 03165c1b0da70979765b0c5be9d4556c5673d427 Mon Sep 17 00:00:00 2001 From: Raul Garcia Date: Thu, 16 Nov 2023 16:53:11 +0100 Subject: [PATCH 0707/2103] Reto #44 - Python --- .../python/raulG91.py" | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/raulG91.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/raulG91.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/raulG91.py" new file mode 100644 index 0000000000..da53240144 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/raulG91.py" @@ -0,0 +1,63 @@ +from random import randint +from threading import Timer +from os import _exit + +def end_game(i): + print(" /\nTiempo!! ") + print("Nº respuestas correctas: " + str(i)) + _exit(0) + +def get_number(num_digits): + #Create a random number with num_digits digits + max_number = (10** num_digits) - 1 + return randint(1,max_number) + + +def game(): + lv_end = False + number_digit1 = 1 + number_digit2 = 1 + num_correct = 0 + + while not(lv_end): + #Get numbers + a = get_number(number_digit1) + b = get_number(number_digit2) + #Calculate operation + random = randint(0,3) + result = 0 + + if random == 0: + result = a + b + print("Operacion: " + str(a) + " + " + str(b)) + elif random == 1: + result = a-b + print("Operacion: " + str(a) + " - " + str(b)) + elif random == 2: + result = a*b + print("Operacion: " + str(a) + " * " + str(b)) + elif random == 3: + result = a//b + print("Operacion: " + str(a) + " / " + str(b)) + #Set a 3 seconds timer + t = Timer(3.0,end_game,[num_correct]) + t.start() + user_input = int(input("Resultado: ")) + t.cancel() + + if result != user_input: + #Incorrect answer --> cancel execution + lv_end = True + else: + num_correct += 1 + + if num_correct % 5 == 0: + #5 questions have been answered correctly + if number_digit1 == number_digit2: + number_digit1 += 1 + elif number_digit2 < number_digit1: + number_digit2 += 1 + print("Nº respuestas correctas: " + str(num_correct)) + + +game() \ No newline at end of file From cddb0727195322d8bda2872c145d13ba5c3ec325 Mon Sep 17 00:00:00 2001 From: Fran <92172549+franpelirrojo@users.noreply.github.com> Date: Thu, 16 Nov 2023 17:44:06 +0100 Subject: [PATCH 0708/2103] Create java --- "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java" new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java" @@ -0,0 +1 @@ + From 85c618fe9397e96750a7180e9912f2f89d41848f Mon Sep 17 00:00:00 2001 From: Fran <92172549+franpelirrojo@users.noreply.github.com> Date: Thu, 16 Nov 2023 17:44:26 +0100 Subject: [PATCH 0709/2103] =?UTF-8?q?Delete=20Retos/Reto=20#44=20-=20ADIVI?= =?UTF-8?q?NANZAS=20MATEM=C3=81TICAS=20[Media]/java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java" | 1 - 1 file changed, 1 deletion(-) delete mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java" deleted file mode 100644 index 8b13789179..0000000000 --- "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java" +++ /dev/null @@ -1 +0,0 @@ - From cbbea929e268284de496094e5c78ecd8ac69b142 Mon Sep 17 00:00:00 2001 From: Fran Date: Thu, 16 Nov 2023 17:46:46 +0100 Subject: [PATCH 0710/2103] Reto#44 - Java --- .../java/Franpelirrojo.java" | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java/Franpelirrojo.java" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java/Franpelirrojo.java" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java/Franpelirrojo.java" new file mode 100644 index 0000000000..020a016e56 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java/Franpelirrojo.java" @@ -0,0 +1,125 @@ +import java.util.Scanner; + +/* + * https://github.com/franpelirrojo + */ + +public class Franpelirrojo { + private static int resultado; + private static double vuelta = 0; + private static int nX = 1; + private static int nY = 1; + + private enum Estado {SIN_TIMEPO, INCORRECTO}; + private static Estado estado; + + public static void main(String[] args) throws InterruptedException { + Thread main = Thread.currentThread(); + + System.out.println("¡Responde rápido!"); + while (true){ + Thread crono = new Thread(() -> { //bucle del tiempo de juego + try { + while (true){ + Thread.sleep(3000); + if (!Thread.interrupted()){ + estado = Estado.SIN_TIMEPO; + main.interrupt(); + break; + } + } + } catch (InterruptedException e) { + System.out.println("¡3 segundos!"); + } + }); + + Thread juego = new Thread(() ->{ //bucle de juego + Scanner usuario = new Scanner(System.in); + generarOperacion(); + + int respuesta = usuario.nextInt(); + if (respuesta != resultado){ + estado = Estado.INCORRECTO; + main.interrupt(); + }else { + crono.interrupt(); + } + + vuelta ++; + comprobarVueltas(); + }); + juego.setDaemon(true); + + juego.start(); + crono.start(); + try { + juego.join(); + } catch (InterruptedException e) { + break; + } + } + + if (estado.equals(Estado.INCORRECTO)){ //Diferenciamos fin de juego + System.out.println("¡FIN DEL JUEGO!"); + System.out.println("Acertaste " + (vuelta!=0 ? (int)(vuelta - 1) : vuelta) + " operaciones."); + System.out.println("La respuesta correcta era: " + resultado); + } else if (estado.equals(Estado.SIN_TIMEPO)) { + System.out.println("¡FIN DEL JUEGO!"); + System.out.println("Te quedaste sin tiempo"); + System.out.println("Acertaste " + (vuelta!=0 ? (int)(vuelta - 1) : vuelta) + " operaciones."); + } + } + + /* + * Generamos aleatoriamente una de las cuatro cuentas posibles. + * La longitud de los operandos depende del exponente de 10. + * */ + private static void generarOperacion(){ + int operandoX; + int operandoY; + int operador = (int) (Math.random() * 3.9); + do { + operandoX = (int) (Math.random() * Math.pow(10, nX)); + operandoY = (int) (Math.random() * Math.pow(10, nY)); + } while (operador == 2 && operandoY == 0 || operandoX { //suma + System.out.println(operandoX + " + " + operandoY); + resultado = operandoX + operandoY; + } + case 1 -> { //multiplicación + System.out.println(operandoX + " * " + operandoY); + resultado = operandoX * operandoY; + } + case 2 -> { //división + System.out.println(operandoX + " / " + operandoY); + try { + resultado = operandoX / operandoY; + } catch (ArithmeticException e) { + throw new RuntimeException(operandoX + " / " + operandoY); + } + + } + case 3 -> { //resta + System.out.println(operandoX + " - " + operandoY); + resultado = operandoX - operandoY; + } + } + } + + /* + * Aumenta los operadores dependiendo de en qué momento de juego estamos. + * Si el numero de vueltas que hemos dado al bucle de juego es divisible entre 5 + * aumenta el operador X. En cambio si también lo es entre 2 aumenta el operador Y. + * */ + private static void comprobarVueltas(){ + if (vuelta%5 == 0 ){ + if (vuelta%2 == 0){ + nY++; + }else { + nX++; + } + } + } +} From 670e5d5313c3bb5c616bea6ceea8bd4475813713 Mon Sep 17 00:00:00 2001 From: Fran <92172549+franpelirrojo@users.noreply.github.com> Date: Thu, 16 Nov 2023 18:10:19 +0100 Subject: [PATCH 0711/2103] =?UTF-8?q?eliminaci=C3=B3n=20de=20un=20try=20ca?= =?UTF-8?q?tch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/Franpelirrojo.java" | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java/Franpelirrojo.java" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java/Franpelirrojo.java" index 020a016e56..bb4971ebbc 100644 --- "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java/Franpelirrojo.java" +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java/Franpelirrojo.java" @@ -94,12 +94,7 @@ private static void generarOperacion(){ } case 2 -> { //división System.out.println(operandoX + " / " + operandoY); - try { - resultado = operandoX / operandoY; - } catch (ArithmeticException e) { - throw new RuntimeException(operandoX + " / " + operandoY); - } - + resultado = operandoX / operandoY; } case 3 -> { //resta System.out.println(operandoX + " - " + operandoY); From 6e31b458dd313893d075d26ff6c01797eac42c82 Mon Sep 17 00:00:00 2001 From: DHiebl <108873454+sirnas1983@users.noreply.github.com> Date: Thu, 16 Nov 2023 14:53:40 -0300 Subject: [PATCH 0712/2103] Reton #44 - python --- .../python/sirnas1983.py" | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/sirnas1983.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/sirnas1983.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/sirnas1983.py" new file mode 100644 index 0000000000..7d66c76bac --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/sirnas1983.py" @@ -0,0 +1,62 @@ +import random +import time + +def operacion_aleatoria(tupla): + a,b = tupla + op = random.randint(1,4) + if op == 1: + res = a + b + signo = '+' + elif op == 2: + res = a - b + signo = '-' + elif op == 3: + res = a * b + signo = 'x' + else: + if b == 0: + b = 1 + res = a // b + signo = '//' + return res, f"{a} {signo} {b} = " + +def operandos_aleatorios(nivel): + a = random.randint(1,10**nivel) - 1 + b = random.randint(1,10**nivel) - 1 + return a, b + +def juego_matematicas(): + jugar = input("¿Quieres jugar? s/n: ").lower() == "s" + tiempo = 3 + nivel = 1 + correctas = 0 + while jugar: + if correctas == 0: + print("¿Preparado?") + print("Nota: En las divisiones ingresar la parte entera unicamente") + time.sleep(0.7) + resp, texto = operacion_aleatoria(operandos_aleatorios(nivel)) + print(texto) + cronom_on = time.time() + guess = float(input("respuesta: ")) + cronom_off = time.time() + vuelta = cronom_off - cronom_on + if vuelta > tiempo: + print(f"Tiempo agotado, tienes {tiempo} seg. para contestar correctamente") + jugar = False + elif guess == resp: + print("¡Respuesta correcta!") + correctas += 1 + if correctas % 5 == 0 and correctas < 16: + nivel += 1 + print(f"¡¡Felicidades, pasaste al nivel {nivel}!!") + else: + print("Respuesta incorrecta") + print(f"La respuesta correcta era {resp}") + jugar = False + if not jugar: + print("Gracias por participar") + print(f"Usted logro {correctas} respuestas correctas") + +juego_matematicas() + From 8d4c4c18145475ce4712cabf0d0232fed4534e79 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Thu, 16 Nov 2023 16:48:02 -0300 Subject: [PATCH 0713/2103] Reto # 6 - Python --- .../python/rokmanhaman.py | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/rokmanhaman.py diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/rokmanhaman.py b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/rokmanhaman.py new file mode 100644 index 0000000000..37db3d7f2f --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/python/rokmanhaman.py @@ -0,0 +1,46 @@ + +"""Reto #6: PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK +/* + * Crea un programa que calcule quien gana más partidas al piedra, + * papel, tijera, lagarto, spock. + * - El resultado puede ser: "Player 1", "Player 2", "Tie" (empate) + * - La función recibe un listado que contiene pares, representando cada jugada. + * - El par puede contener combinaciones de "🗿" (piedra), "📄" (papel), + * "✂️" (tijera), "🦎" (lagarto) o "🖖" (spock). + * - Ejemplo. Entrada: [("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")]. Resultado: "Player 2". + * - Debes buscar información sobre cómo se juega con estas 5 posibilidades. + */""" + + +def who_win(games): + + rules_win = { + "ROCK" : ["SCISSORS", "LIZARD"], + "PAPER" : ["ROCK", "SPOCK"], + "SCISSORS" : ["PAPER", "LIZARD"], + "SPOCK" : ["ROCK", "SCISSORS"], + "LIZARD" : ["PAPER", "SPOCK"] + } + + pp1 = 0 # puntos player 1 + pp2 = 0 # puntos player 2 + for game in games: + if game[0] != game[1]: + if game[1] in rules_win[game[0]]: + pp1 +=1 + else: + pp2 +=1 + print(f"{pp1} a {pp2}") + + + + return "Tie" if pp1 == pp2 else "Player 1" if pp1 > pp2 else "Player 2" + + +print(who_win([("SCISSORS", "LIZARD"), ("PAPER", "LIZARD"), ("ROCK", "SCISSORS"), ("ROCK", "SCISSORS"), ("ROCK", "SCISSORS")])) + + + + + + From 57a1cd1c52a339954120cc1906637cca5c3f52e2 Mon Sep 17 00:00:00 2001 From: Hans Escobar <60953384+hdescobarh@users.noreply.github.com> Date: Thu, 16 Nov 2023 16:45:30 -0500 Subject: [PATCH 0714/2103] Reto #44 --- .../rust/hdescobarh.rs" | 234 ++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/rust/hdescobarh.rs" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/rust/hdescobarh.rs" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/rust/hdescobarh.rs" new file mode 100644 index 0000000000..54e744be88 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/rust/hdescobarh.rs" @@ -0,0 +1,234 @@ +// author: Hans D. Escobar H. (hdescobarh) + +/* +Solución con el mínimo número de bibliotecas externas. + +rand es necesario porque en la biblioteca estándar de Rust no hay herramientas +para generar números aleatorios. + */ + +use std::fmt::Display; +use std::io::{stdout, Write}; +use std::num::ParseIntError; +use std::sync::mpsc::{channel, Receiver, TryRecvError}; +use std::thread; +use std::time::Duration; + +// Biblioteca para la generación de valores aleatorios +use rand::distributions::{Distribution, Standard}; +use rand::rngs::StdRng; +use rand::{Rng, SeedableRng}; + +/// Indica cuanto tiempo (en ms) dura cada tick del juego +pub const TICK_LENGTH: u64 = 1000; +/// Indica los conteos máximos por pregunta. Multiplicado por TICK_LENGTH resulta en el tiempo en ms por pregunta. +pub const MAX_TICKS_PER_QUESTION: usize = 3; + +fn main() { + let mut game = Game::default(); + + // initial question + game.make_question(); + let mut stdout = stdout(); + + // Canal para capturar desde otro hilo el input. + let stdin_rx = stdin_channel(); + let mut ticks: usize = 0; + let clean_line = " ".repeat(20); + + // Ciclo principal del juego + loop { + ticks += 1; + // refresca el stdout + let _ = stdout.write_fmt(format_args!("{clean_line}\r")); + let _ = stdout.write_fmt(format_args!("{game}\ttime: {ticks}s:\t")); + let _ = stdout.flush(); + thread::sleep(Duration::from_millis(TICK_LENGTH)); + + let game_over: bool = if ticks >= MAX_TICKS_PER_QUESTION { + true + } else { + match stdin_rx.try_recv() { + Ok(Ok(answer)) => !game.check_answer(answer), + Ok(Err(_)) => true, + Err(TryRecvError::Empty) => continue, + Err(TryRecvError::Disconnected) => break, + } + }; + + if game_over { + println!("\nGame Over\nScore: {}", game.get_score()); + std::process::exit(0); + } + + game.make_question(); + ticks = 0; + } +} + +fn stdin_channel() -> Receiver> { + let (tx, rx) = channel(); + thread::spawn(move || loop { + let mut input_buffer = String::new(); + std::io::stdin() + .read_line(&mut input_buffer) + .expect("Unexpected error while reading input."); + tx.send(input_buffer.trim().parse::()).unwrap(); + }); + rx +} + +/// Operadores validos a emplear en el juego +pub enum Operator { + Addition, + Subtraction, + Division, + Multiplication, +} + +/// Distribución de probabilidad para generar operadores de forma aleatoria +impl Distribution for Standard { + fn sample(&self, rng: &mut R) -> Operator { + let n: u8 = rng.gen_range(0..=4); + match n { + 0 => Operator::Addition, + 1 => Operator::Subtraction, + 2 => Operator::Division, + _ => Operator::Multiplication, + } + } +} + +/// Implementa el juego y sus normas +pub struct Game { + /// Marcador de puntos. Otorga un punto por cada respuesta correcta. Cada 5 puntos incrementa la dificultad en uno. + score: usize, + /// Indica la dificultad del juego. El número de dígitos totales de cada pregunta es la dificultad + 1. + difficulty_level: usize, + /// Contiene el primer y segundo operando y el operador. + question: (isize, isize, Operator), + /// Contiene el resultado correcto de la operación. + answer: isize, +} + +impl Default for Game { + fn default() -> Self { + Self { + score: 0, + difficulty_level: 1, + question: (0, 0, Operator::Addition), + answer: 0, + } + } +} + +impl Game { + /// Genera una operación valida y su respuesta correcta. + pub fn make_question(&mut self) { + // llama generate_numbers para obtener el par de operando + // = U+003D Equals Sign + let (first_digits, second_digits) = self.generate_operands_digits(); + let first_operand = Self::sample_operand(first_digits); + let second_operand = Self::sample_operand(second_digits); + + let operator = Self::sample_operator(); + let answer: isize = match operator { + Operator::Addition => first_operand + second_operand, + Operator::Subtraction => first_operand - second_operand, + Operator::Division => first_operand / second_operand, + Operator::Multiplication => first_operand * second_operand, + }; + self.answer = answer; + self.question = (first_operand, second_operand, operator); + } + + // Determina los dígitos del primer y segunda operando + fn generate_operands_digits(&self) -> (usize, usize) { + let total_digits: usize = self.difficulty_level + 1; + let second_operand: usize = total_digits / 2; + let first_operand: usize = total_digits - second_operand; + (first_operand, second_operand) + } + + // Obtiene un valor de operador aleatorio entre en el intervalo [0, 9*D], + // donde D es un numero de la forma 1111... conteniendo digit_number dígitos. + fn sample_operand(digit_number: usize) -> isize { + let upper_bound = "9".repeat(digit_number).parse().unwrap(); + // para permitir el cero es necesario agregar un control cuando el divisor es 0. + StdRng::from_entropy().gen_range(1..=upper_bound) + } + + // Escoge aleatoriamente la operación a realizar + fn sample_operator() -> Operator { + StdRng::from_entropy().sample(Standard) + } + + /// Verifica si la respuesta ingresada es correcta. Retorna true sí es correcta. + /// + /// # Argumentos: + /// * `answer` - respuesta ingresada + pub fn check_answer(&mut self, answer: isize) -> bool { + if self.answer == answer { + self.score += 1; + self.update(); + return true; + } + false + } + + // Actualiza los contadores internos + fn update(&mut self) { + if self.score % 5 == 0 { + self.difficulty_level += 1; + } + } + + /// Presenta la tabla de puntuación + pub fn get_score(&self) -> &usize { + &self.score + } +} + +// Implementación de la vista para Game +impl Display for Game { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let operator_str = match self.question.2 { + // U+002B Plus Sign + Operator::Addition => "+", + // U+2212 Minus Sign + Operator::Subtraction => "−", + // U+00F7 Division Sign + Operator::Division => "÷", + // U+00D7 Multiplication Sign + Operator::Multiplication => "×", + }; + + write!( + f, + "{} {} {}", + self.question.0, operator_str, self.question.1 + ) + } +} + +#[cfg(test)] +mod test { + use super::*; + #[test] + fn operand_digits_works() { + let mut game = Game::default(); + assert_eq!((1, 1), game.generate_operands_digits()); + game.difficulty_level = 2; + assert_eq!((2, 1), game.generate_operands_digits()); + game.difficulty_level = 3; + assert_eq!((2, 2), game.generate_operands_digits()); + game.difficulty_level = 4; + assert_eq!((3, 2), game.generate_operands_digits()); + game.difficulty_level = 12; + assert_eq!((7, 6), game.generate_operands_digits()); + game.difficulty_level = 13; + assert_eq!((7, 7), game.generate_operands_digits()); + game.difficulty_level = 81; + assert_eq!((41, 41), game.generate_operands_digits()); + } +} From f32afdcf411eece5dde0fe8b4c671d06d29a5b9a Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 16 Nov 2023 22:54:08 +0100 Subject: [PATCH 0715/2103] Reto #44 Python --- .../python/javierfiestasbotella.py" | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/javierfiestasbotella.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/javierfiestasbotella.py" index e69de29bb2..a47aafb39c 100644 --- "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/javierfiestasbotella.py" +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/javierfiestasbotella.py" @@ -0,0 +1,68 @@ +''' + Crea un juego interactivo por terminal en el que tendrás que adivinar + * el resultado de diferentes + * operaciones matemáticas aleatorias (suma, resta, multiplicación + * o división de dos números enteros). + * - Tendrás 3 segundos para responder correctamente. + * - El juego finaliza si no se logra responder en ese tiempo. + * - Al finalizar el juego debes mostrar cuántos cálculos has acertado. + * - Cada 5 aciertos debes aumentar en uno el posible número de cifras + * de la operación (cada vez en un operando): + * - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) + * - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) + * - Preguntas 11 a 15: XX operación YY + * - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY''' + +import random +import time + +aciertos = 0 +numero_pregunta = 1 + +while True: + + signo = random.choice(['+', '-', '*', '/']) + + + if numero_pregunta <= 5: + a = random.randint(0, 9) + b = random.randint(0, 9) + elif numero_pregunta > 5 and numero_pregunta <= 10: + a = random.randint(0, 99) + b = random.randint(0, 9) + elif numero_pregunta > 10 and numero_pregunta <= 15: + a = random.randint(10, 99) + b = random.randint(10, 99) + elif numero_pregunta > 15 and numero_pregunta <= 20: + a = random.randint(0, 999) + b = random.randint(0, 99) + + + pregunta = f'{a} {signo} {b} ' + print(pregunta) + inicio_tiempo = time.time() + + try: + + respuesta_usuario = input("Respuesta: ") + resultado = eval(pregunta) + respuesta_usuario = int(respuesta_usuario) + + if respuesta_usuario == resultado: + aciertos += 1 + print("¡Correcto!\n") + else: + print(f"Incorrecto. La respuesta correcta es: {resultado}\n") + break + + except ValueError: + print("Debes ingresar un número válido.\n") + + + tiempo_transcurrido = time.time() - inicio_tiempo + + if tiempo_transcurrido > 3: + print("¡Lo siento, fuera de tiempo... han pasado sus 3 segundos!\n") + break + +print(f"¡Has conseguido {aciertos} aciertos! ¡Suerte la próxima vez!\n") From 3a3b1020fe2094cf09ac1eea915c4248974ac9e1 Mon Sep 17 00:00:00 2001 From: Johan Restrepo <62318029+JohanRestrepo19@users.noreply.github.com> Date: Thu, 16 Nov 2023 18:17:48 -0500 Subject: [PATCH 0716/2103] implentar sistema de preguntas. --- .../typescript/johanrestrepo19.ts" | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/johanrestrepo19.ts" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/johanrestrepo19.ts" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/johanrestrepo19.ts" new file mode 100644 index 0000000000..9250b4ae27 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/johanrestrepo19.ts" @@ -0,0 +1,142 @@ +//@ts-ignore +import { stdin as input, stdout as output } from "node:process"; +//@ts-ignore +import { createInterface } from "node:readline/promises"; + +const readLine = createInterface({ input, output }); + +enum Operations { + ADD = "add", + SUBTRAC = "subtrac", + MULTIPLY = "multiply", + DIVIDE = "divide", +} + +type Question = { + x: number; + y: number; + operation: Operations; + operationSign?: string; + result: number; +}; + +const getRandomEnumKey = (someEnum: T): T[keyof T] => { + const enumKeys = Object.values(someEnum); + const randomIndex = Math.floor(Math.random() * enumKeys.length); + return enumKeys[randomIndex]; +}; + +class Game { + private _answeredQuestionAmm: number; + private _currentQuestion?: Question; + + constructor() { + this._answeredQuestionAmm = 0; + } + + get currentQuestion() { + return this._currentQuestion; + } + + get answeredQuestionAmm () { + return this._answeredQuestionAmm + } + + generateQuestion(): void { + //TODO: Incrementar el número de digitos segun las respuestas acertadas + + const x = Math.floor(Math.random() * 10); + const y = Math.floor(Math.random() * 10); + const operation = getRandomEnumKey(Operations); + let operationSign = ""; + let result = 0; + + switch (operation) { + case Operations["ADD"]: + result = x + y; + operationSign = "+"; + break; + case Operations["SUBTRAC"]: + result = x - y; + operationSign = "-"; + break; + case Operations["MULTIPLY"]: + result = x * y; + operationSign = "*"; + break; + case Operations["DIVIDE"]: + result = x / y; + operationSign = "/"; + break; + } + + this._currentQuestion = { x, y, operation, result, operationSign }; + } + + validateAnswer(answer: number): boolean { + if (this.currentQuestion?.result === answer) { + this._answeredQuestionAmm++; + return true; + } + return false; + } +} + +//------------------------------- +// Metodos de vista +//------------------------------- +const showQuestion = (question: Question): void => { + console.log( + `Resultado de la siguiente operación: ${question.x} ${question.operationSign} ${question.y}?`, + ); +}; + +const waitAnswerForAmmTime = ( + timeToWait = 3000, +): Promise<{ value: number; hasAnswered: boolean }> => { + const ac = new AbortController(); + + return new Promise(async (resolve) => { + const timeOutId = setTimeout(() => ac.abort(), timeToWait); + + try { + const userAnswer = Number( + await readLine.question("Ingrese su respuesta: ", { + signal: ac.signal, + }), + ); + clearTimeout(timeOutId); + if (isNaN(userAnswer)) throw Error; + resolve({ value: userAnswer, hasAnswered: true }); + } catch { + resolve({ value: NaN, hasAnswered: false }); + } + }); +}; + +const main = async () => { + console.clear(); + const game = new Game(); + + while (true) { + game.generateQuestion(); + if (game.currentQuestion) showQuestion(game.currentQuestion); + + try { + const userAnswer = await waitAnswerForAmmTime(); + if (!userAnswer.hasAnswered) break; + const isValidAnswer = game.validateAnswer(userAnswer.value); + if (!isValidAnswer) break; + } catch (error) { + console.error(error); + } + } + + //Mostrar resultados + + console.clear(); + console.log("No has respondido correctamente "); + console.log(`Lograste responder correctamente ${game.answeredQuestionAmm} preguntas`); +}; + +main(); From 246d368675185fc9c260031ae832398e978ca89e Mon Sep 17 00:00:00 2001 From: Andres Parra Date: Thu, 16 Nov 2023 18:58:16 -0500 Subject: [PATCH 0717/2103] Reto #0 TypeScript --- .../typescript/andeveling.ts" | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/typescript/andeveling.ts" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/typescript/andeveling.ts" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/typescript/andeveling.ts" new file mode 100644 index 0000000000..f6ac0ed54c --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/typescript/andeveling.ts" @@ -0,0 +1,11 @@ +const fizzBuzz = (limit: number): void => { + const numbers = Array.from({ length: limit }, (_, index) => index + 1) + for (const number of numbers) { + if (number % 3 === 0) console.log("fizz") + if (number % 5 === 0) console.log("buzz") + if (number % 3 === 0 && number % 5 === 0) console.log("fizzbuzz") + else console.log(number) + } +} + +fizzBuzz(100) From 93a207783113ce00f4c17dbcd50bc7cc20e81bfb Mon Sep 17 00:00:00 2001 From: treber Date: Thu, 16 Nov 2023 19:02:17 -0500 Subject: [PATCH 0718/2103] Reto #1 - Python --- .../python/treber.py" | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/treber.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/treber.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/treber.py" new file mode 100644 index 0000000000..cc7c679fec --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/treber.py" @@ -0,0 +1,42 @@ +""" +Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + + """ + +leetAlphabet = {'a':'4','b':'I3','c':'[','d':')','e':'3','f':'|=','g':'&','h':'#','i':'1','j':',_|', + 'k':'>|','l':'1','m':'/\/\'','n':'^/','o':'0','p':'|*','q':'(_,)','r':'I2', + 's':'5','t':'7','u':'(_)','v':'\/','w':'\/\/','x':'><','y':'j','z':'2'} + +leetNumber = {"0":"o", "1":"L", "2":"R", "3":"E", "4":"A", "5":"S", "6":"b", "7":"T", "8":"B", "9":"g"} + + +def inputTxt(): + + text = input("Escribe su texto aquí (solo alfanumerico): ").lower() + if text.isalnum(): + return text + else: + return inputTxt() + + +def hackerTxt(text): + + txtTransform = "" + + for caracter in text: + if caracter in leetAlphabet.keys(): + txtTransform+= leetAlphabet[caracter] + else: + txtTransform+= leetNumber[caracter] + + return txtTransform + + +text = inputTxt() +newTxt = hackerTxt(text) +print(newTxt) From e940c90afacbb68ff445086748256e4c60cb023c Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Thu, 16 Nov 2023 20:22:41 -0600 Subject: [PATCH 0719/2103] add with feature to no symbols parameter --- .../javascript/marvnramos.js" | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" index 6a92f9e5c3..c8ce8ff70b 100644 --- "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" @@ -57,7 +57,6 @@ const getParameter = (obj) => { const randomKey = getIndex(key.length) const randomObjectMember = obj[key[randomKey]]; - return randomObjectMember; }; @@ -119,11 +118,28 @@ const getPassword = (passwordLength, upperCase, withNumbers, withSymbols) =>{ } return password; } + else if (upperCase && withNumbers && !withSymbols) { + for(let i = 0; i < passwordLength; i++){ + const parametersWithNoSymbols = { alphabet : [...parameters.alphabet], numbers: [...parameters.numbers]}; + + const parameter = getParameter(parametersWithNoSymbols); + const index = getIndex(parameter.length); + + password += parameter[index]; + + } + + return password; + } + + else if(upperCase && !withNumbers && !withSymbols){ + + } } const passwordGenerator = (passwordLength, upperCase, withNumbers, withSymbols) =>{ - let password = getPassword(passwordLength, upperCase, withNumbers, withSymbols); + const password = getPassword(passwordLength, upperCase, withNumbers, withSymbols); const validPasswordLength = passwordLength >= 8 && passwordLength <= 16; @@ -131,10 +147,7 @@ const passwordGenerator = (passwordLength, upperCase, withNumbers, withSymbols) return 'La longitud de la contraseña debe estar entre 8 y 16'; } - return password; - - - + return password; }; const passwordLength = 8; @@ -147,6 +160,14 @@ const newPassword2 = passwordGenerator(10, false, true, true); const newPassword3 = passwordGenerator(10, false, false, false); const newPassword4 = passwordGenerator(10,false, false, true); +// por hacer +const newPassword5 = passwordGenerator(10, true, true, false); // no symbols +const newPassword6 = passwordGenerator(10, true, false, false); + +console.log(newPassword5) // no symbols + + +//---------------------- console.log(newPassword1); // primera condicion con upper console.log(newPassword2); // segunda condicion con lower @@ -154,5 +175,5 @@ console.log(newPassword3); console.log(newPassword4); -console.log(getParameter(parameters)); -console.log(parameters.numbers) \ No newline at end of file +// console.log(getParameter(parameters)); +// console.log(parameters.numbers) \ No newline at end of file From e36d03b18fd3848e046040f1d4851d08d59e962d Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Thu, 16 Nov 2023 20:33:34 -0600 Subject: [PATCH 0720/2103] challenge 3 solved --- .../javascript/marvnramos.js" | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" index c8ce8ff70b..b7309ee8ff 100644 --- "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/marvnramos.js" @@ -133,7 +133,13 @@ const getPassword = (passwordLength, upperCase, withNumbers, withSymbols) =>{ } else if(upperCase && !withNumbers && !withSymbols){ + for(let i = 0; i < passwordLength; i++){ + const parameter = parameters.alphabet; + const index = getIndex(parameter.length); + password += parameter[index]; + } + return password.toUpperCase(); } } @@ -150,30 +156,20 @@ const passwordGenerator = (passwordLength, upperCase, withNumbers, withSymbols) return password; }; -const passwordLength = 8; -const upperCase = false; -const withNumbers = true; -const withSymbols = true; -const newPassword1 = passwordGenerator(12, true, true, true) -const newPassword2 = passwordGenerator(10, false, true, true); -const newPassword3 = passwordGenerator(10, false, false, false); -const newPassword4 = passwordGenerator(10,false, false, true); - -// por hacer -const newPassword5 = passwordGenerator(10, true, true, false); // no symbols -const newPassword6 = passwordGenerator(10, true, false, false); - -console.log(newPassword5) // no symbols +const newPassword1 = passwordGenerator(12, true, true, true); // capital letters, numbers and symbols +const newPassword2 = passwordGenerator(10, false, true, true); // lowercase letters, numbers and symbols +const newPassword3 = passwordGenerator(10, false, false, false); // lowercase letters only +const newPassword4 = passwordGenerator(10,false, false, true); // lowercase letters and symbols +const newPassword5 = passwordGenerator(10, true, true, false); // capital letters and numbers +const newPassword6 = passwordGenerator(10, true, false, false); // capital letters only //---------------------- console.log(newPassword1); // primera condicion con upper console.log(newPassword2); // segunda condicion con lower -console.log(newPassword3); -console.log(newPassword4); - - -// console.log(getParameter(parameters)); -// console.log(parameters.numbers) \ No newline at end of file +console.log(newPassword3); // just lower cases +console.log(newPassword4); // no capital letters or numbers +console.log(newPassword5) // no symbols +console.log(newPassword6) // just upper cases \ No newline at end of file From ccd8db8e392752b137195abcbb4379d1c2d7560c Mon Sep 17 00:00:00 2001 From: Leandro Espino Date: Thu, 16 Nov 2023 21:16:34 -0600 Subject: [PATCH 0721/2103] Reto #19 - java --- .../java/EspinoLeandroo.java" | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 "Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/java/EspinoLeandroo.java" diff --git "a/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/java/EspinoLeandroo.java" "b/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/java/EspinoLeandroo.java" new file mode 100644 index 0000000000..8d989a3978 --- /dev/null +++ "b/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/java/EspinoLeandroo.java" @@ -0,0 +1,37 @@ +public class EspinoLeandroo { + + public static void main(String[] args) { + String texto = "Este es un ejemplo de análisis de texto. Contiene varias oraciones y palabras de diferentes longitudes."; + + int numeroPalabras = 0; + int longitudTotalPalabras = 0; + int numeroOraciones = 0; + String palabraMasLarga = ""; + + String[] palabras = texto.split("\\s+"); + + for (String palabra : palabras) { + // Elimina signos de puntuación al final de las palabras + + if (palabra.contains(".") || palabra.contains("!") || palabra.contains("?")) { + numeroOraciones++; + } + + palabra = palabra.replaceAll("[.,;!?]+$", ""); + + numeroPalabras++; + longitudTotalPalabras += palabra.length(); + + if (palabra.length() > palabraMasLarga.length()) { + palabraMasLarga = palabra; + } + } + + double longitudMediaPalabras = (double) longitudTotalPalabras / numeroPalabras; + + System.out.println("Número total de palabras: " + numeroPalabras); + System.out.println("Longitud media de las palabras: " + longitudMediaPalabras); + System.out.println("Número de oraciones: " + numeroOraciones); + System.out.println("Palabra más larga: " + palabraMasLarga); + } +} From 9e0435ab4456bec79a4d5772ffbcf4238790f260 Mon Sep 17 00:00:00 2001 From: DCRael Date: Thu, 16 Nov 2023 22:56:11 -0600 Subject: [PATCH 0722/2103] Reto #13 - Python --- .../python/DCRael.py | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/DCRael.py diff --git a/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/DCRael.py b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/DCRael.py new file mode 100644 index 0000000000..d8bc06001f --- /dev/null +++ b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/DCRael.py @@ -0,0 +1,91 @@ +from random import choice, randint, sample +from os import * + +longitud_palabra = "" + +def inicio(): + system("cls") + words = ['LAPTOP', 'CELULAR', 'JIRAFA', 'PYTHON', 'GATO', 'MESSI', 'GOAT'] + global longitud_palabra + print('ADIVINA LA PALABRA') + palabra_seleccionada = choice(words) + longitud_palabra = len(palabra_seleccionada) + palabra_adivinanza = list("_" * longitud_palabra) + + # Se delimita las letras mostradas y selecciona indices que se mostraran + num_letras_mostradas = randint(2, longitud_palabra//2) + posiciones_mostradas = sample(range(longitud_palabra), num_letras_mostradas) + + # Reemplazar los guiones bajos en las posiciones seleccionadas con las letras correspondientes + for i in posiciones_mostradas: + palabra_adivinanza[i] = palabra_seleccionada[i] + + juego(palabra_seleccionada, palabra_adivinanza) + + +def juego(palabra_seleccionada, palabra_adivinanza): + intentos = 6 + + while True: + + espacios = 0 + print("INTENTOS DISPONIBLES: ", intentos) + print(" ".join(palabra_adivinanza)) + dibujo(intentos) + + for i in range(longitud_palabra): + if palabra_adivinanza[i] == '_': + espacios += 1 + + if espacios == 0 and intentos != 0: + print('has ganado bien jugado') + system("pause") + inicio() + + elif intentos == 0: + print('Haz perdido') + system("pause") + inicio() + + texto = input('Escribe una letra o la palabra: ').upper() + + + if len(texto) == 1: + + if texto in palabra_seleccionada: + i = palabra_seleccionada.find(texto) + palabra_adivinanza[i] = palabra_seleccionada[i] + else: + intentos -= 1 + + elif len(texto) == longitud_palabra: + + if texto == palabra_seleccionada: + palabra_adivinanza = palabra_seleccionada + else: + intentos -= 1 + + else: + intentos -= 1 + + + +def dibujo(intentos): + + if intentos == 6: + print("\n _______\n | |\n |\n |\n |\n |\n |\n ----------") + elif intentos == 5: + print("\n _______\n | |\n | 0\n |\n |\n |\n |\n ----------") + elif intentos == 4: + print("\n _______\n | |\n | 0\n | |\n |\n |\n |\n ----------") + elif intentos == 3: + print("\n _______\n | |\n | 0\n | /|\n |\n |\n |\n ----------") + elif intentos == 2: + print("\n _______\n | |\n | 0\n | /|\ \n |\n |\n |\n ----------") + elif intentos == 1: + print("\n _______\n | |\n | 0\n | /|\ \n | /\n |\n |\n ----------") + elif intentos == 0: + print("\n _______\n | |\n | 0\n | /|\ \n | / \ \n |\n |\n ----------") + + +inicio() \ No newline at end of file From 670c25fe84585d66b334251299bde86748cbaa11 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Fri, 17 Nov 2023 07:51:01 +0100 Subject: [PATCH 0723/2103] Reto #44 - Kotlin --- .../kotlin/pisanowp.kt" | 156 ++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/kotlin/pisanowp.kt" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/kotlin/pisanowp.kt" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/kotlin/pisanowp.kt" new file mode 100644 index 0000000000..5f7e6ab473 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/kotlin/pisanowp.kt" @@ -0,0 +1,156 @@ +import java.time.Duration +import java.time.LocalDateTime + +fun main() { + + /* + * Reto #44 13/11/2023 ADIVINANZAS MATEMÁTICAS + * + * Crea un juego interactivo por terminal en el que tendrás que adivinar + * el resultado de diferentes + * operaciones matemáticas aleatorias (suma, resta, multiplicación + * o división de dos números enteros). + * - Tendrás 3 segundos para responder correctamente. + * - El juego finaliza si no se logra responder en ese tiempo. + * - Al finalizar el juego debes mostrar cuántos cálculos has acertado. + * - Cada 5 aciertos debes aumentar en uno el posible número de cifras + * de la operación (cada vez en un operando): + * - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) + * - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) + * - Preguntas 11 a 15: XX operación YY + * - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY + * ... + */ + + adivinanzasMatematicas() + +} + +fun adivinanzasMatematicas(tiempoParaResponder:Long = 3){ + + var ronda = 0 + var finJuego = false + + while (!finJuego){ + ronda++ + val operacion = dameOperacion() + var num1 = 0 + var num2 = 0 + var limiteInferior = 0 + + if (operacion == '/') { + limiteInferior = 1 + } + + if (ronda in (1..5)) { + num1 = dameNumero(0, 9) + num2 = dameNumero(limiteInferior, 9) + + } else if (ronda in (6..10) ) { + num1 = dameNumero(0, 99) + num2 = dameNumero(limiteInferior, 9) + + } else if (ronda in (11..15) ) { + num1 = dameNumero(0, 99) + num2 = dameNumero(limiteInferior, 99) + + } else if (ronda in (16..20) ) { + num1 = dameNumero(0, 999) + num2 = dameNumero(limiteInferior, 99) + + } else if (ronda in (11..25) ) { + num1 = dameNumero(0, 999) + num2 = dameNumero(limiteInferior, 999) + + } + + + print("Ronda nº$ronda. ") + val resultado = dameResultado(num1, num2, operacion) + + + val resultadoUsuario = pideResultado("$num1 ${operacion} $num2", tiempoParaResponder) + if (resultadoUsuario==-1) { + println("Has tardado más de $tiempoParaResponder segundos en responder :(") + finJuego = true + + } else if (resultadoUsuario!=resultado) { + println("Error, el resutaldo era $resultado :(") + finJuego = true + } else { + println("¡¡¡ Enhorabuena !!! :D, vamos a por otra ...") + } + + } + +} + + +fun dameNumero( limiteInferior : Int = 0, limiteSuperior : Int = 9) : Int { + return (limiteInferior..limiteSuperior).random() +} + +fun dameOperacion() : Char { + val operaciones = listOf('+', '-', '*', '/') + return operaciones.random() +} + +fun dameResultado(num1:Int, num2:Int, operacion:Char): Int{ + val resultado : Int + when (operacion) { + '+' -> { + resultado = num1 + num2 + } + '-' -> { + resultado = num1 - num2 + } + '*' -> { + resultado = num1 * num2 + } + '/' -> { + resultado = num1 / num2 + } + else -> { + resultado = 0 + } + } + return resultado + +} + +fun pideResultado( etiqueta : String, tiempoParaResponder: Long = 3): Int { + var numero: Int? = null + var valido = false + + + val tiempoInicial = LocalDateTime.now() + + while (!valido) { + print("Introduce $etiqueta = ") + val input = readLine() + + try { + numero = input?.toInt() + if (numero != null) { + valido = true + } else { + println("Entrada inválida. Debes ingresar un número entero positivo.") + } + + } catch (e: NumberFormatException) { + println("Entrada inválida. Debes ingresar un número entero positivo.") + } + } + + val tiempoFinal = LocalDateTime.now() + val duracion: Duration = Duration.between(tiempoInicial, tiempoFinal) + + // Obtener la diferencia en segundos + val segundos = duracion.seconds + if (segundos> tiempoParaResponder){ + numero=-1 + } + + return numero!! + +} \ No newline at end of file From dcbed4ecc7e1d12188c6f66af6d68771ea9b43e4 Mon Sep 17 00:00:00 2001 From: DHiebl <108873454+sirnas1983@users.noreply.github.com> Date: Fri, 17 Nov 2023 08:18:54 -0300 Subject: [PATCH 0724/2103] Reto #44 - python Correccion en digitos de la tupla aleatoria segun nivel del juego --- .../python/sirnas1983.py" | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/sirnas1983.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/sirnas1983.py" index 7d66c76bac..3b3a204d84 100644 --- "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/sirnas1983.py" +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/sirnas1983.py" @@ -21,13 +21,17 @@ def operacion_aleatoria(tupla): return res, f"{a} {signo} {b} = " def operandos_aleatorios(nivel): - a = random.randint(1,10**nivel) - 1 - b = random.randint(1,10**nivel) - 1 + exp = nivel//2 + 1 + a = random.randint(1,10**exp) - 1 + if nivel%2==0: + b = random.randint(1,10**(exp -1)) - 1 + else: + b = random.randint(1,10**exp) - 1 return a, b def juego_matematicas(): jugar = input("¿Quieres jugar? s/n: ").lower() == "s" - tiempo = 3 + tiempo = 5 nivel = 1 correctas = 0 while jugar: @@ -59,4 +63,3 @@ def juego_matematicas(): print(f"Usted logro {correctas} respuestas correctas") juego_matematicas() - From 9dd8e837a160c50fdaccff02b6548b9ae88e3b2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miquel=20Gonz=C3=A1lez=20Cie?= Date: Fri, 17 Nov 2023 12:56:08 +0000 Subject: [PATCH 0725/2103] Reto #44 - C# C# .NET 7.0 TDD --- .../c#/miquelcie.cs" | 174 ++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/c#/miquelcie.cs" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/c#/miquelcie.cs" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/c#/miquelcie.cs" new file mode 100644 index 0000000000..ea3279b616 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/c#/miquelcie.cs" @@ -0,0 +1,174 @@ +namespace Reto44; + +/* + * Crea un juego interactivo por terminal en el que tendrs que adivinar + * el resultado de diferentes + * operaciones matemticas aleatorias (suma, resta, multiplicacin + * o divisin de dos nmeros enteros). + * - Tendrs 3 segundos para responder correctamente. + * - El juego finaliza si no se logra responder en ese tiempo. + * - Al finalizar el juego debes mostrar cuntos clculos has acertado. + * - Cada 5 aciertos debes aumentar en uno el posible nmero de cifras + * de la operacin (cada vez en un operando): + * - Preguntas 1 a 5: X (entre 0 y 9) operacin Y (entre 0 y 9) + * - Preguntas 6 a 10: XX (entre 0 y 99) operacin Y (entre 0 y 9) + * - Preguntas 11 a 15: XX operacin YY + * - Preguntas 16 a 20: XXX (entre 0 y 999) operacin YY + * ... + + Para ejecutar + + using Reto44; + Adivinanza adivinanza= new Adivinanza(); + adivinanza.Init(); + + */ + +public class Adivinanza +{ + private int Score { get; set; } + private Operator Operator { get; set; } + + private DateTime InitTime; + private DateTime EndTime; + private int IntervalCountNumber1 = 5; + private int IntervalCountNumber2 = 10; + private int powCounterNumber1 = 1; + private int powCounterNumber2 = 1; + private static Random random = new Random(); + + + private string ShowOperation(int number1, int number2, Operator operation) + { + InitTime = DateTime.Now; + Operator = operation; + string operationShow = ""; + switch (operation) + { + case Operator.Plus: + operationShow = $"{number1} + {number2} = "; + break; + case Operator.Minus: + operationShow = $"{number1} - {number2} = "; + break; + case Operator.Multiplication: + operationShow = $"{number1} * {number2} = "; + break; + case Operator.Division: + + operationShow = $"{number1} / {number2} = "; + break; + } + + return operationShow; + } + + private void CalculateOperation(int number1, int number2, int result) + { + EndTime = DateTime.Now; + int resultado = 0; + switch (Operator) + { + case Operator.Plus: + resultado = number1 + number2; + break; + case Operator.Minus: + resultado = number1 - number2; + break; + case Operator.Multiplication: + resultado = number1 * number2; + break; + case Operator.Division: + + resultado = number1 / number2; + break; + } + + if (resultado == result) + Score++; + + } + + private string ShowScoreEndGame() + { + return $"Haz acertado {Score} operaciones"; + } + + private bool IsInTime() + { + TimeSpan diference = EndTime - InitTime; + return diference.TotalSeconds <= 3; + } + + private int GetNumber1() + { + if (Score <= 5) + { + return random.Next(1, 10); + } + + if (Score > IntervalCountNumber1) + { + powCounterNumber1++; + IntervalCountNumber1 += 10; + } + + return random.Next(1, (int)Math.Pow(10, powCounterNumber1)); + + } + + private int GetNumber2() + { + if (Score <= 5) + { + return random.Next(1, 10); + } + + if (Score > IntervalCountNumber2) + { + powCounterNumber2++; + IntervalCountNumber2 += 10; + } + + return random.Next(1, (int)Math.Pow(10, powCounterNumber2)); + } + private Operator GetRandomOperation() + { + return (Operator)random.Next(4); + } + + public void Init() + { + + while (this.IsInTime()) + { + var number1 = this.GetNumber1(); + var number2 = this.GetNumber2(); + var operation = this.GetRandomOperation(); + + string operationText = this.ShowOperation(number1, number2, operation); + Console.Write(operationText); + string result = Console.ReadLine(); + int resultInt; + if (int.TryParse(result, out resultInt)) + this.CalculateOperation(number1, number2, resultInt); + + } + + Console.WriteLine(ShowScoreEndGame()); + Console.WriteLine("Presione enter para salir"); + Console.ReadLine(); + + + } + + +} + +public enum Operator +{ + Plus, + Minus, + Multiplication, + Division +} \ No newline at end of file From 4ccdc1d6460cc17cdcc626a0addde2f18611a653 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Fri, 17 Nov 2023 11:17:04 -0300 Subject: [PATCH 0726/2103] Reto #9 - Python --- .../python/rokmanhamman.py | 2 +- .../python/rokmanhaman.py" | 74 +++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 "Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/rokmanhaman.py" diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/rokmanhamman.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/rokmanhamman.py index 5a9160d263..3cf7724b85 100644 --- a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/rokmanhamman.py +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/rokmanhamman.py @@ -49,7 +49,7 @@ def check_primo(self): -n= Number(7) +n= Number(17) print(f"{n.value} {n.check_primo()}, {n.check_fibonacci()} y {n.check_even()}") diff --git "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/rokmanhaman.py" "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/rokmanhaman.py" new file mode 100644 index 0000000000..7c35182215 --- /dev/null +++ "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/rokmanhaman.py" @@ -0,0 +1,74 @@ +"""Reto #9: HETEROGRAMA, ISOGRAMA Y PANGRAMA +FÁCIL | Publicación: 27/02/23 | Resolución: 06/03/23 +/* + * Crea 3 funciones, cada una encargada de detectar si una cadena de + * texto es un heterograma, un isograma o un pangrama. + * - Debes buscar la definición de cada uno de estos términos. + */""" + +# HETEROGRAMA: palabra o frase que no contiene ninguna letra repetida. +# ISOGRAMA: palabra o frase en la que cada letra aparece el mismo número de veces +# PANGRAMA: es un texto que usa todas las letras posibles del alfabeto de un idioma + +import string + +class MyText(): + + def __init__(self, text): + self.text = text + + def is_heterograma(self): + text_without_spaces = self.text.replace(" ", "") + text_without_duplicated = set(text_without_spaces) + + ocurrencias = { + text_without_duplicated: + self.text.count(text_without_duplicated) + for text_without_duplicated in text_without_duplicated} + + max_occ = max(ocurrencias.values()) + + return "es HETEROGRAMA" if max_occ == 1 else "no es HETEROGRAMA" + + def is_isograma(self): + text_without_spaces = self.text.replace(" ", "") + text_without_duplicated = set(text_without_spaces) + + ocurrencias = { + text_without_duplicated: + self.text.count(text_without_duplicated) + for text_without_duplicated in text_without_duplicated} + + lista = list(ocurrencias.values()) + check = True + for index, val in enumerate(lista): + check = lista[index] == lista[0] and check + + return "es ISOGRAMA" if check == True else "no es ISOGRAMA" + + def is_pangrama(self): + text_without_spaces = self.text.replace(" ", "") + text_without_duplicated = set(text_without_spaces) + lpos = string.ascii_lowercase + + check = True + for l in lpos: + if l in text_without_duplicated: + check = True and check + else: + check = False + + + + return "es PANGRAMA" if check == True else "no es PANGRAMA" + + +#frase = "murciélago" +#frase = "mama" +frase = "El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja" + +f = MyText(frase) +print(f.is_heterograma()) +print(f.is_isograma()) +print(f.is_pangrama()) + From 361bac4f4c941c4fd8b5bc818c8b678ce933901c Mon Sep 17 00:00:00 2001 From: Johan Restrepo <62318029+JohanRestrepo19@users.noreply.github.com> Date: Fri, 17 Nov 2023 13:10:16 -0500 Subject: [PATCH 0727/2103] Reto #44 - Typescript. --- .../typescript/johanrestrepo19.ts" | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/johanrestrepo19.ts" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/johanrestrepo19.ts" index 9250b4ae27..1021ff2572 100644 --- "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/johanrestrepo19.ts" +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/johanrestrepo19.ts" @@ -29,24 +29,41 @@ const getRandomEnumKey = (someEnum: T): T[keyof T] => { class Game { private _answeredQuestionAmm: number; private _currentQuestion?: Question; + private _nextIncrement: "x" | "y"; + private _digitsX: number; + private _digitsY: number; constructor() { this._answeredQuestionAmm = 0; + this._digitsX = this._digitsY = 10; + this._nextIncrement = "x"; } get currentQuestion() { return this._currentQuestion; } - get answeredQuestionAmm () { - return this._answeredQuestionAmm + get answeredQuestionAmm() { + return this._answeredQuestionAmm; + } + + private calculateDigists() { + if (this._answeredQuestionAmm > 0 && this._answeredQuestionAmm % 5 === 0) { + if (this._nextIncrement === "x") { + this._digitsX = this._digitsX * 10; + this._nextIncrement = "y"; + } else if (this._nextIncrement === "y") { + this._digitsY = this._digitsY * 10; + this._nextIncrement = "x"; + } + } } generateQuestion(): void { - //TODO: Incrementar el número de digitos segun las respuestas acertadas + this.calculateDigists(); - const x = Math.floor(Math.random() * 10); - const y = Math.floor(Math.random() * 10); + const x = Math.floor(Math.random() * this._digitsX); + const y = Math.floor(Math.random() * this._digitsY); const operation = getRandomEnumKey(Operations); let operationSign = ""; let result = 0; @@ -66,6 +83,7 @@ class Game { break; case Operations["DIVIDE"]: result = x / y; + result = Number(result.toFixed(2)); operationSign = "/"; break; } @@ -82,9 +100,6 @@ class Game { } } -//------------------------------- -// Metodos de vista -//------------------------------- const showQuestion = (question: Question): void => { console.log( `Resultado de la siguiente operación: ${question.x} ${question.operationSign} ${question.y}?`, @@ -114,6 +129,14 @@ const waitAnswerForAmmTime = ( }); }; +const showGameOver = (answeredQuestions: number) => { + console.log(); + console.log("No has respondido correctamente "); + console.log( + `Lograste responder correctamente ${answeredQuestions} preguntas`, + ); +}; + const main = async () => { console.clear(); const game = new Game(); @@ -130,13 +153,10 @@ const main = async () => { } catch (error) { console.error(error); } + console.log(); } - //Mostrar resultados - - console.clear(); - console.log("No has respondido correctamente "); - console.log(`Lograste responder correctamente ${game.answeredQuestionAmm} preguntas`); + showGameOver(game.answeredQuestionAmm); }; main(); From dbdfedaff1d3b2831a6cd7b429d345de4e1b2121 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Fri, 17 Nov 2023 15:28:07 -0300 Subject: [PATCH 0728/2103] Reto #10 - Python --- .../python/rokmanhaman.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Retos/Reto #10 - LA API [Media]/python/rokmanhaman.py diff --git a/Retos/Reto #10 - LA API [Media]/python/rokmanhaman.py b/Retos/Reto #10 - LA API [Media]/python/rokmanhaman.py new file mode 100644 index 0000000000..43779a6efc --- /dev/null +++ b/Retos/Reto #10 - LA API [Media]/python/rokmanhaman.py @@ -0,0 +1,23 @@ +""" +Reto #10: LA API +/* + * Llamar a una API es una de las tareas más comunes en programación. + * + * Implementa una llamada HTTP a una API (la que tú quieras) y muestra su + * resultado a través de la terminal. Por ejemplo: Pokémon, Marvel... + * + * Aquí tienes un listado de posibles APIs: + * https://github.com/public-apis/public-apis + */ + """ + +import requests + +url = "https://www.fruityvice.com/api/fruit/all" + + +response = requests.get(url) + + +for fruit in response.json(): + print(f"{fruit['name']} --- {fruit['family']}") From 9536936c318632a254dc58f99003ffb1975bfcc9 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Fri, 17 Nov 2023 16:02:03 -0300 Subject: [PATCH 0729/2103] Reto #11 - Python --- .../python/rokmanhaman.py" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "Retos/Reto #11 - URL PARAMS [F\303\241cil]/python/rokmanhaman.py" diff --git "a/Retos/Reto #11 - URL PARAMS [F\303\241cil]/python/rokmanhaman.py" "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/python/rokmanhaman.py" new file mode 100644 index 0000000000..13dea600eb --- /dev/null +++ "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/python/rokmanhaman.py" @@ -0,0 +1,24 @@ +""" +Reto #11: URL PARAMS +FÁCIL | Publicación: 13/03/23 | Resolución: 20/03/23 +/* + * Dada una URL con parámetros, crea una función que obtenga sus valores. + * No se pueden usar operaciones del lenguaje que realicen esta tarea directamente. + * + * Ejemplo: En la url https://retosdeprogramacion.com?year=2023&challenge=0 + * los parámetros serían ["2023", "0"] + */ +""" + +def split_url(url): + url_p0 = url.split("?")[0] + url_p1 = url.split("?")[1] + parametrs = url_p1.split("&") + my_dict = {param.split("=")[0]: param.split("=")[1] for param in parametrs} + + return my_dict.values() + + +url = "https://retosdeprogramacion.com?year=2023&challenge=0&activo=true&visible=false&pag=42&q=consulta" +s = split_url(url) +print(s) From 85389f88255e14dc61d9e24fa1b258039e4f6f06 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Fri, 17 Nov 2023 18:01:14 -0300 Subject: [PATCH 0730/2103] Reto #12 - Python --- .../python/rokmanhaman.py" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #12 - VIERNES 13 [F\303\241cil]/python/rokmanhaman.py" diff --git "a/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/python/rokmanhaman.py" "b/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/python/rokmanhaman.py" new file mode 100644 index 0000000000..fbf0eda7e9 --- /dev/null +++ "b/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/python/rokmanhaman.py" @@ -0,0 +1,23 @@ +""" +Reto #12: VIERNES 13 +FÁCIL | Publicación: 20/03/23 | Resolución: 27/03/23 +/* + * Crea una función que sea capaz de detectar si existe un viernes 13 + * en el mes y el año indicados. + * - La función recibirá el mes y el año y retornará verdadero o falso. + */ +""" +from datetime import datetime + +def det_v13(year, month): + fecha_especifica = datetime(year, month, 13) + dia_de_la_semana = fecha_especifica.weekday() + + + + return True if fecha_especifica.weekday() == 4 else False + +#2023 month 1 ==> True +#2023 month 10 ==> True +indicado = det_v13(2023, 11) +print(indicado) \ No newline at end of file From e429a351823ca665e5afbdfdc4cf34beeb41039c Mon Sep 17 00:00:00 2001 From: Andres Parra Date: Fri, 17 Nov 2023 19:06:57 -0500 Subject: [PATCH 0731/2103] Reto #1 TypeScript --- .../typescript/Andeveling.ts" | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/typescript/Andeveling.ts" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/typescript/Andeveling.ts" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/typescript/Andeveling.ts" new file mode 100644 index 0000000000..95a7096809 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/typescript/Andeveling.ts" @@ -0,0 +1,53 @@ +const leetTable: Record = { + A: "4", + B: "I3", + C: "[", + D: ")", + E: "3", + F: "|=", + G: "&", + H: "#", + I: "1", + J: ",_|", + K: ">|", + L: "1", + M: "//\\", + N: "^/", + O: "0", + P: "|*", + Q: "(_,)", + R: "I2", + S: "5", + T: "7", + U: "(_)", + V: "/", + W: "//", + X: "><", + Y: "`/", + Z: "2", + 1: "L", + 2: "R", + 3: "E", + 4: "A", + 5: "S", + 6: "b", + 7: "T", + 8: "B", + 9: "g", + 0: "o", +} + +/** + * Translates a given text by replacing characters according to a provided leet table. + * + * @param {string} text - The text to be translated. + * @param {Record} leetTable - The leet table containing character mappings. + * @return {string} The translated text. + */ +const translateLeet = (text: string = "", leetTable: Record): string => + text + .split("") + .map((char) => leetTable[char.toUpperCase()] || char) + .join("") + +console.log(translateLeet("Hello World", leetTable)) From b95dab4f053e9a62b94bd4d77eb0f46c3f3e5d80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cesar=20Daniel=20Pi=C3=B1a=20Gonzalez?= Date: Fri, 17 Nov 2023 19:05:03 -0600 Subject: [PATCH 0732/2103] Reto #21 - Javascript --- .../javascript/Cesarpinagon.js" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/javascript/Cesarpinagon.js" diff --git "a/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/javascript/Cesarpinagon.js" "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/javascript/Cesarpinagon.js" new file mode 100644 index 0000000000..b5ebf85be8 --- /dev/null +++ "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/javascript/Cesarpinagon.js" @@ -0,0 +1,17 @@ +function isPrime(num) { + for(let i = 2, sqrt = Math.sqrt(num); i <= sqrt; i++) + if(num % i === 0) return false; + return num > 1; +} + +function findTwinPrimes(n) { + let twinPrimes = []; + for(let i = 2; i <= n - 2; i++) { + if(isPrime(i) && isPrime(i + 2)) { + twinPrimes.push([i, i + 2]); + } + } + return twinPrimes; +} + +console.log(findTwinPrimes(14)); \ No newline at end of file From aa6432ada8f4a5f1f9872cb9320fe8c56219c8e1 Mon Sep 17 00:00:00 2001 From: Edwin Date: Fri, 17 Nov 2023 21:09:21 -0400 Subject: [PATCH 0733/2103] Reto #5 - JavaScript --- .../javascript/EdGonzz.js" | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/EdGonzz.js" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/EdGonzz.js" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/EdGonzz.js" new file mode 100644 index 0000000000..1ba44c718f --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/EdGonzz.js" @@ -0,0 +1,11 @@ +// ``` +// /* +// * Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas. +// * Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado, +// * o quizás quieres dar tus primeros pasos... ¡Pues este es el momento! +// * +// * A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí... +// */ +// ``` + +console.log('Hola Mundo!') \ No newline at end of file From 771b2d4a0a30ca5a821b7fb3d81782d7f8df2e7c Mon Sep 17 00:00:00 2001 From: Edwin Date: Fri, 17 Nov 2023 21:18:02 -0400 Subject: [PATCH 0734/2103] Reto #5 - Python --- "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/EdGonzz.py" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/EdGonzz.py" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/EdGonzz.py" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/EdGonzz.py" new file mode 100644 index 0000000000..865c819b61 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/EdGonzz.py" @@ -0,0 +1 @@ +print("Hola Mundo!") \ No newline at end of file From 2b0b4680998ef7bd4c424515076f6eb64567ca55 Mon Sep 17 00:00:00 2001 From: Edwin Date: Fri, 17 Nov 2023 21:40:46 -0400 Subject: [PATCH 0735/2103] Reto #5 - C# --- .../Reto #5 - HOLA MUNDO [F\303\241cil]/c#/EdGonzz.cs" | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c#/EdGonzz.cs" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c#/EdGonzz.cs" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c#/EdGonzz.cs" new file mode 100644 index 0000000000..dbabd12b1f --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c#/EdGonzz.cs" @@ -0,0 +1,9 @@ +using System; + +public class HolaMundo +{ + public static void Main() + { + Console.WriteLine("Hola Mundo"); + } +} \ No newline at end of file From 2e5607253a7f2612cfab4fe336084cf40256b604 Mon Sep 17 00:00:00 2001 From: Edwin Date: Fri, 17 Nov 2023 21:46:32 -0400 Subject: [PATCH 0736/2103] Reto #5 - Go --- "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/go/EdGonzz.go" | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/go/EdGonzz.go" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/go/EdGonzz.go" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/go/EdGonzz.go" new file mode 100644 index 0000000000..2892e4847f --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/go/EdGonzz.go" @@ -0,0 +1,7 @@ +package main + +import "ftm" + +func main() { + ftm.println("Hola Mundo!") +} \ No newline at end of file From a6379b03ff9d4525a058fe10f699a38986bf3b3f Mon Sep 17 00:00:00 2001 From: Samunta Date: Fri, 17 Nov 2023 23:38:25 -0300 Subject: [PATCH 0737/2103] Reto #44 - Python --- .../python/evilpotato04.py" | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/evilpotato04.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/evilpotato04.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/evilpotato04.py" new file mode 100644 index 0000000000..2856122f5c --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/evilpotato04.py" @@ -0,0 +1,141 @@ +# Crea un juego interactivo por terminal en el que tendrás que adivinar +# el resultado de diferentes +# operaciones matemáticas aleatorias (suma, resta, multiplicación +# o división de dos números enteros). +# - Tendrás 3 segundos para responder correctamente. +# - El juego finaliza si no se logra responder en ese tiempo. +# - Al finalizar el juego debes mostrar cuántos cálculos has acertado. +# - Cada 5 aciertos debes aumentar en uno el posible número de cifras +# de la operación (cada vez en un operando): +# - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) +# - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) +# - Preguntas 11 a 15: XX operación YY +# - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY +# ... + +import random +from multiprocessing import TimeoutError +from multiprocessing.pool import ThreadPool + +def timeout(seconds): + def decorator(function): + def wrapper(*args, **kwargs): + pool = ThreadPool(processes=1) + result = pool.apply_async(function, args=args, kwds=kwargs) + try: + return result.get(timeout=seconds) + except TimeoutError as e: + return e + return wrapper + return decorator + +def seleccionar_operacion_matematica(): + rand = random.randint(1, 4) + operacion = "" + if rand == 1: + operacion = "+" + elif rand == 2: + operacion = "-" + elif rand == 3: + operacion = "*" + elif rand == 4: + operacion = "/" + else: + operacion = "" + return operacion + +def generar_calculo_aleatorio(nivel_de_dificultad): + valor1 = 0 + valor2 = 0 + + if nivel_de_dificultad == 1: + valor1 = int(random.randint(0,9)) + valor2 = int(random.randint(0,9)) + elif nivel_de_dificultad == 2: + valor1 = int(random.randint(0,99)) + valor2 = int(random.randint(0,9)) + elif nivel_de_dificultad == 3: + valor1 = int(random.randint(0,99)) + valor2 = int(random.randint(0,99)) + elif nivel_de_dificultad == 4: + valor1 = int(random.randint(0,999)) + valor2 = int(random.randint(0,99)) + elif nivel_de_dificultad == 5: + valor1 = int(random.randint(0,999)) + valor2 = int(random.randint(0,999)) + elif nivel_de_dificultad == 6: + valor1 = int(random.randint(0,9999)) + valor2 = int(random.randint(0,999)) + elif nivel_de_dificultad == 7: + valor1 = int(random.randint(0,9999)) + valor2 = int(random.randint(0,9999)) + elif nivel_de_dificultad == 8: + valor1 = int(random.randint(0,99999)) + valor2 = int(random.randint(0,9999)) + elif nivel_de_dificultad == 9: + valor1 = int(random.randint(0,99999)) + valor2 = int(random.randint(0,99999)) + elif nivel_de_dificultad == 10: + valor1 = int(random.randint(0,999999)) + valor2 = int(random.randint(0,99999)) + else: + print("Eres un genio de las matemáticas!\nMejor estudia algo de literatura!") + valor1 = -1 + valor2 = -1 + + operacion = seleccionar_operacion_matematica() + + if operacion == "/" and valor2 == 0: + valor2 = 1 + + return [valor1, operacion, valor2] + +def calcular_respuesta_correcta(valor1, operacion, valor2): + resultado = 0 + if operacion == "+": + resultado = valor1 + valor2 + elif operacion == "-": + resultado = valor1 - valor2 + elif operacion == "*": + resultado = valor1 * valor2 + elif operacion == "/": + resultado = valor1 / valor2 + else: + print("Operación invalida") + return resultado + +@timeout(3) +def leer_respuesta_del_jugador(calculo): + return float(input(str(calculo[0]) + " " + calculo[1] + " " + str(calculo[2]) + " = ")) + +def empiezar_juego_nuevo(): + fin_del_juego = False + respuestas_correctas = 49 + nivel_de_dificultad = 10 + + while fin_del_juego == False: + calculo = generar_calculo_aleatorio(nivel_de_dificultad) + + if calculo[0] < 0: + print("Fin del juego! :D\nTu puntuación: " + str(respuestas_correctas) + " respuestas correctas") + break + + respuesta_del_jugador = leer_respuesta_del_jugador(calculo) + + if isinstance(respuesta_del_jugador, TimeoutError): + fin_del_juego = True + print("\nFin del juego! :(\nTu puntuación: " + str(respuestas_correctas) + " respuestas correctas") + break + + respuesta_correcta = calcular_respuesta_correcta(calculo[0], calculo[1], calculo[2]) + + if respuesta_del_jugador == respuesta_correcta: + respuestas_correctas += 1 + if respuestas_correctas >= (nivel_de_dificultad * 5): + nivel_de_dificultad += 1 + else: + fin_del_juego = True + print("Fin del juego! :(\nTu puntuación: " + str(respuestas_correctas) + " respuestas correctas") + +empiezar_juego_nuevo() + From 76133907ab327cd28709dd424cdc01ba9ad60d1a Mon Sep 17 00:00:00 2001 From: Samunta Date: Fri, 17 Nov 2023 23:38:25 -0300 Subject: [PATCH 0738/2103] Reto #44 - Python --- .../python/evilpotato04.py" | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/evilpotato04.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/evilpotato04.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/evilpotato04.py" new file mode 100644 index 0000000000..2856122f5c --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/evilpotato04.py" @@ -0,0 +1,141 @@ +# Crea un juego interactivo por terminal en el que tendrás que adivinar +# el resultado de diferentes +# operaciones matemáticas aleatorias (suma, resta, multiplicación +# o división de dos números enteros). +# - Tendrás 3 segundos para responder correctamente. +# - El juego finaliza si no se logra responder en ese tiempo. +# - Al finalizar el juego debes mostrar cuántos cálculos has acertado. +# - Cada 5 aciertos debes aumentar en uno el posible número de cifras +# de la operación (cada vez en un operando): +# - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) +# - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) +# - Preguntas 11 a 15: XX operación YY +# - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY +# ... + +import random +from multiprocessing import TimeoutError +from multiprocessing.pool import ThreadPool + +def timeout(seconds): + def decorator(function): + def wrapper(*args, **kwargs): + pool = ThreadPool(processes=1) + result = pool.apply_async(function, args=args, kwds=kwargs) + try: + return result.get(timeout=seconds) + except TimeoutError as e: + return e + return wrapper + return decorator + +def seleccionar_operacion_matematica(): + rand = random.randint(1, 4) + operacion = "" + if rand == 1: + operacion = "+" + elif rand == 2: + operacion = "-" + elif rand == 3: + operacion = "*" + elif rand == 4: + operacion = "/" + else: + operacion = "" + return operacion + +def generar_calculo_aleatorio(nivel_de_dificultad): + valor1 = 0 + valor2 = 0 + + if nivel_de_dificultad == 1: + valor1 = int(random.randint(0,9)) + valor2 = int(random.randint(0,9)) + elif nivel_de_dificultad == 2: + valor1 = int(random.randint(0,99)) + valor2 = int(random.randint(0,9)) + elif nivel_de_dificultad == 3: + valor1 = int(random.randint(0,99)) + valor2 = int(random.randint(0,99)) + elif nivel_de_dificultad == 4: + valor1 = int(random.randint(0,999)) + valor2 = int(random.randint(0,99)) + elif nivel_de_dificultad == 5: + valor1 = int(random.randint(0,999)) + valor2 = int(random.randint(0,999)) + elif nivel_de_dificultad == 6: + valor1 = int(random.randint(0,9999)) + valor2 = int(random.randint(0,999)) + elif nivel_de_dificultad == 7: + valor1 = int(random.randint(0,9999)) + valor2 = int(random.randint(0,9999)) + elif nivel_de_dificultad == 8: + valor1 = int(random.randint(0,99999)) + valor2 = int(random.randint(0,9999)) + elif nivel_de_dificultad == 9: + valor1 = int(random.randint(0,99999)) + valor2 = int(random.randint(0,99999)) + elif nivel_de_dificultad == 10: + valor1 = int(random.randint(0,999999)) + valor2 = int(random.randint(0,99999)) + else: + print("Eres un genio de las matemáticas!\nMejor estudia algo de literatura!") + valor1 = -1 + valor2 = -1 + + operacion = seleccionar_operacion_matematica() + + if operacion == "/" and valor2 == 0: + valor2 = 1 + + return [valor1, operacion, valor2] + +def calcular_respuesta_correcta(valor1, operacion, valor2): + resultado = 0 + if operacion == "+": + resultado = valor1 + valor2 + elif operacion == "-": + resultado = valor1 - valor2 + elif operacion == "*": + resultado = valor1 * valor2 + elif operacion == "/": + resultado = valor1 / valor2 + else: + print("Operación invalida") + return resultado + +@timeout(3) +def leer_respuesta_del_jugador(calculo): + return float(input(str(calculo[0]) + " " + calculo[1] + " " + str(calculo[2]) + " = ")) + +def empiezar_juego_nuevo(): + fin_del_juego = False + respuestas_correctas = 49 + nivel_de_dificultad = 10 + + while fin_del_juego == False: + calculo = generar_calculo_aleatorio(nivel_de_dificultad) + + if calculo[0] < 0: + print("Fin del juego! :D\nTu puntuación: " + str(respuestas_correctas) + " respuestas correctas") + break + + respuesta_del_jugador = leer_respuesta_del_jugador(calculo) + + if isinstance(respuesta_del_jugador, TimeoutError): + fin_del_juego = True + print("\nFin del juego! :(\nTu puntuación: " + str(respuestas_correctas) + " respuestas correctas") + break + + respuesta_correcta = calcular_respuesta_correcta(calculo[0], calculo[1], calculo[2]) + + if respuesta_del_jugador == respuesta_correcta: + respuestas_correctas += 1 + if respuestas_correctas >= (nivel_de_dificultad * 5): + nivel_de_dificultad += 1 + else: + fin_del_juego = True + print("Fin del juego! :(\nTu puntuación: " + str(respuestas_correctas) + " respuestas correctas") + +empiezar_juego_nuevo() + From 6e05722fb8446a455cab8977011323a6e1ec2415 Mon Sep 17 00:00:00 2001 From: Ale Mohamad Date: Sat, 18 Nov 2023 11:57:26 +0100 Subject: [PATCH 0739/2103] Reto mouredev#44 - swift --- .../swift/alemohamad.swift" | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/swift/alemohamad.swift" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/swift/alemohamad.swift" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/swift/alemohamad.swift" new file mode 100644 index 0000000000..5b54b93c19 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/swift/alemohamad.swift" @@ -0,0 +1,81 @@ +import Foundation + +// Este reto solo funciona en línea de comando. +// Se debe llamar usando `swift reto44.swift` para probarlo. +// Es por esta razón que no funciona en Swift Playgrounds. + +func generateOperation(level: Int) -> (String, Int) { + let operations = ["+", "-", "*", "/"] + let selectedOperation = operations.randomElement()! + var operand1: Int + var operand2: Int + + if selectedOperation == "/" { + repeat { + operand1 = Int.random(in: 1...maxByLevel(level)) + operand2 = Int.random(in: 1...maxByLevel(level)) + } while operand1 % operand2 != 0 + } else { + operand1 = Int.random(in: 0...maxByLevel(level)) + operand2 = Int.random(in: 0...maxByLevel(level)) + } + + let question = "\(operand1) \(selectedOperation) \(operand2)" + let answer = evaluateOperation(operand1, operand2, selectedOperation) + + return (question, answer) +} + +func maxByLevel(_ level: Int) -> Int { + switch level { + case 1: return 9 + case 2: return 99 + case 3: return 999 + default: return 9 + } +} + +func evaluateOperation(_ operand1: Int, _ operand2: Int, _ operation: String) -> Int { + switch operation { + case "+": return operand1 + operand2 + case "-": return operand1 - operand2 + case "*": return operand1 * operand2 + case "/": return operand2 != 0 ? operand1 / operand2 : 0 + default: return 0 + } +} + +func startQuestion(question: String, correctAnswer: Int) -> Bool { + print(question) + print("Your answer: ", terminator: "") + let startTime = Date() + + guard let input = readLine() else { + print("No answer was provided.") + return false + } + + guard let userAnswer = Int(input) else { + print("Please enter a valid number.") + return false + } + + let timeElapsed = Date().timeIntervalSince(startTime) + return timeElapsed <= 3 && userAnswer == correctAnswer +} + +var hits = 0 +var level = 1 + +while true { + let (question, correctAnswer) = generateOperation(level: level) + let isCorrect = startQuestion(question: question, correctAnswer: correctAnswer) + + if !isCorrect { + print("Game over. You got \(hits) right.") + break + } else { + hits += 1 + if hits % 5 == 0 { level += 1 } + } +} From 501532eaf751704de20a157dc475dc8951134e15 Mon Sep 17 00:00:00 2001 From: Andres Parra Date: Sat, 18 Nov 2023 07:00:12 -0500 Subject: [PATCH 0740/2103] Reto #2 TypeScript --- .../typescript/Andeveling.ts | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/typescript/Andeveling.ts diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/typescript/Andeveling.ts b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/typescript/Andeveling.ts new file mode 100644 index 0000000000..9c874aff0c --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/typescript/Andeveling.ts @@ -0,0 +1,91 @@ +const P1 = "P1" +const P2 = "P2" +const sequence = [P1, P1, P2, P2, P1, P2, P1, P1] + +enum Scores { + Love = 0, + Fifteen = 1, + Thirty = 2, + Forty = 3, + Deuce = 4, + Advantage = 5, + Winner = 6, +} + +const scores = { + 0: "Love", + 1: 15, + 2: 30, + 3: 40, + 4: "Deuce", + 5: "Advantage", + 6: "Winner", +} + +class Player { + name: string + score: Scores = Scores.Love + + constructor(name: string) { + this.name = name + } + makePoint() { + this.score++ + } + + getScore() { + return this.score + } +} + +class Game { + player1: Player = new Player(P1) + player2: Player = new Player(P2) + scorePlayer1: Scores = Scores.Love + scorePlayer2: Scores = Scores.Love + isDeuce: boolean = false + + start(sequence: string[]) { + for (const iterator of sequence) { + if (iterator === P1) { + this.player1.score++ + } + if (iterator === P2) { + this.player2.score++ + } + if (this.changeDeuce()) { + this.player1.score++ + this.player2.score++ + console.log("Deuce") + this.isDeuce = true + } else { + const player1Score = this.player1.getScore() + const player2Score = this.player2.getScore() + if (this.isDeuce && player1Score === Scores.Advantage) { + console.log(`${scores[this.player1.score]} ${this.player1.name}`) + } else if (this.isDeuce && player2Score === Scores.Advantage) { + console.log(`${scores[this.player2.score]} ${this.player2.name}`) + } else { + if (player1Score === Scores.Winner) { + console.log(`The winner is ${this.player1.name}`) + break + } + if (player2Score === Scores.Winner) { + console.log(`The winner is ${this.player2.name}`) + break + } + console.log(this.getScoreGame()) + } + } + } + } + changeDeuce() { + return this.player1.score === Scores.Forty && this.player2.score === Scores.Forty + } + + getScoreGame() { + return scores[this.player1.score] + " - " + scores[this.player2.score] + } +} + +new Game().start(sequence) From fed2e15f285091c5548c4731f928c5a416992f96 Mon Sep 17 00:00:00 2001 From: Armando Date: Sat, 18 Nov 2023 09:52:54 -0500 Subject: [PATCH 0741/2103] Reto #1 - JavaScript --- .../javascript/aran-tm.js" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/aran-tm.js" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/aran-tm.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/aran-tm.js" new file mode 100644 index 0000000000..29a6516d33 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/aran-tm.js" @@ -0,0 +1,65 @@ + +const LOWER_CASE_LETTERS = + ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; + +const UPPER_CASE_LETTERS = + ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; + +const LEET_SPEAK_ALPHABET = + ['4', 'I3', '[', ')', '3', '|=', '&', '#', '1', ',_|', '>|', '1', 'IVI', + '^/', '0', '|*', '(_,)', 'I2', '5', '7', '(_)', '\/', '\/\/', '><', 'j', '2'] + +const LEET_NUMBERS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; +const NUMBERS_TO_LEET = ['()', 'L', 'R', 'E', 'A', 'S', 'b', 'T', 'B', 'g']; + + +function convert_to_leet_alphabet(){ + + // get the string + let stringFromUser = prompt("Please enter an entry"); + let string_hacked = []; + + // convert to an array + let arrayFromString = stringFromUser.split(""); + + // using a foreach to compare each character with each array element + arrayFromString.forEach(element => { + + let indexOfLetters; + let indexOfNumbers; + + // to check if it's a lower case letter + if (LOWER_CASE_LETTERS.includes(element)) { + + indexOfLetters = LOWER_CASE_LETTERS.indexOf(element); + string_hacked.push(LEET_SPEAK_ALPHABET[indexOfLetters]); + } + + // to check if it's a upper case letter + else if (UPPER_CASE_LETTERS.includes(element)) { + + indexOfLetters = UPPER_CASE_LETTERS.indexOf(element); + string_hacked.push(LEET_SPEAK_ALPHABET[indexOfLetters]); + } + + // To check if it's a number + else if (LEET_NUMBERS.includes(Number(element))) { + + indexOfNumbers = LEET_NUMBERS.indexOf(Number(element)); + string_hacked.push(NUMBERS_TO_LEET[indexOfNumbers]); + } + + // to identify if there is a space + else if (element == "") { + + string_hacked.push(" "); + } + }); + + console.log(string_hacked); +} + +// calling the function +convert_to_leet_alphabet(); \ No newline at end of file From 0fbeb6a81f562218b49eab7215375a6945bbc867 Mon Sep 17 00:00:00 2001 From: Armando Date: Sat, 18 Nov 2023 10:16:47 -0500 Subject: [PATCH 0742/2103] Reto #1 - JavaScript --- .../javascript/aran-tm.js" | 1 - 1 file changed, 1 deletion(-) diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/aran-tm.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/aran-tm.js" index 29a6516d33..66ab2c2824 100644 --- "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/aran-tm.js" +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/aran-tm.js" @@ -14,7 +14,6 @@ const LEET_SPEAK_ALPHABET = const LEET_NUMBERS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; const NUMBERS_TO_LEET = ['()', 'L', 'R', 'E', 'A', 'S', 'b', 'T', 'B', 'g']; - function convert_to_leet_alphabet(){ // get the string From 631a206c29aca71a6228eba07bd0a15425462f24 Mon Sep 17 00:00:00 2001 From: Exander <55327537+ExanderGuitar@users.noreply.github.com> Date: Sat, 18 Nov 2023 16:23:33 +0100 Subject: [PATCH 0743/2103] Create exanderguitar.cpp --- .../c++/exanderguitar.cpp" | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/c++/exanderguitar.cpp" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/c++/exanderguitar.cpp" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/c++/exanderguitar.cpp" new file mode 100644 index 0000000000..e594c42370 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/c++/exanderguitar.cpp" @@ -0,0 +1,168 @@ +#include +#include +#include +#include + +enum MathOperator { + ADD, + SUBSTRACT, + MULTIPLY, + DIVIDE +}; + +void getTime (std::chrono::steady_clock::time_point& timePoint); +double calculateInterval (std::chrono::steady_clock::time_point start, std::chrono::steady_clock::time_point end); +bool game (int& level, int& prevLevel, double timeLimit, int& digitLeft, int& digitRight); +int prepareQuestion (int rightAnswers, int prevLevel, int& digitLeft, int& digitRight); +int randomNumber (int digits); +void randomOperator (MathOperator& quizOperator); + +int main() { + + bool finish {false}; + int currentLevel {1}; + int previousLevel {1}; + double timeLimit {20.0}; + int leftDigit {1}; + int rightDigit {1}; + + while(!finish) { + finish = game(currentLevel, previousLevel, timeLimit, leftDigit, rightDigit); + } + + std::cout << '\n'; + std::cout << "Has tenido " << currentLevel - 1<< " aciertos.\n"; + + return 0; +} + +void getTime (std::chrono::steady_clock::time_point& timePoint) { + + timePoint = std::chrono::steady_clock::now(); + +} + +double calculateInterval (std::chrono::steady_clock::time_point start, std::chrono::steady_clock::time_point end) { + + std::chrono::duration timeInterval = std::chrono::duration_cast>(end - start); + + return timeInterval.count(); +} + +bool game(int& level, int& prevLevel, double timeLimit, int& digitLeft, int& digitRight) { + + std::chrono::steady_clock::time_point startTime {}; + std::chrono::steady_clock::time_point endTime {}; + + std::cout << "¡Ponte a prueba con adivinanzas matematicas!\n\n"; + std::cout << "Nivel " << level << "\n\n"; + + int result {prepareQuestion (level, prevLevel, digitLeft, digitRight)}; + + getTime (startTime); + + int userAnswer {}; + std::cin >> userAnswer; + + std::cout << '\n'; + + getTime (endTime); + double interval {calculateInterval (startTime, endTime)}; + + if(result == userAnswer) { + std::cout << "¡Correcto!\n"; + level++; + } + else { + std::cout << "¡Incorrecto! El resultado era: " << result << '\n'; + prevLevel = level; + } + + if(interval > timeLimit) { + std::cout << "Lo siento, pero has tardado demasiado en responder.\n"; + return true; + } + + return false; +} + +int prepareQuestion (int rightAnswers, int prevLevel, int& digitLeft, int& digitRight) { + + MathOperator quizOperator {}; + randomOperator (quizOperator); + + if(rightAnswers % 5 == 0 && prevLevel != rightAnswers) { + if(digitLeft == digitRight) { + digitLeft++; + } + else { + digitRight++; + } + } + + int leftOperand {randomNumber(digitLeft)}; + int rightOperand {randomNumber(digitRight)}; + int result {}; + + switch(quizOperator) { + case ADD: + std::cout << leftOperand << " + " << rightOperand << " = "; + result = leftOperand + rightOperand; + break; + case SUBSTRACT: + std::cout << leftOperand << " - " << rightOperand << " = "; + result = leftOperand - rightOperand; + break; + case MULTIPLY: + std::cout << leftOperand << " * " << rightOperand << " = "; + result = leftOperand * rightOperand; + break; + case DIVIDE: + if(rightOperand == 0) { + rightOperand++; + } + std::cout << leftOperand << " / " << rightOperand << " = "; + result = leftOperand / rightOperand; + break; + default: + std::cout << "Error in prepareQuestion switch\n"; + break; + } + + return result; +} + +int randomNumber (int digits) { + + int upperLimit {static_cast(std::pow(10, digits) - 1)}; + + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution numberDis(0, upperLimit); + + return numberDis(gen); +} + +void randomOperator (MathOperator& quizOperator) { + + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution numberDis(0,3); + + switch(numberDis(gen)) { + case 0: + quizOperator = ADD; + break; + case 1: + quizOperator = SUBSTRACT; + break; + case 2: + quizOperator = MULTIPLY; + break; + case 3: + quizOperator = DIVIDE; + break; + default: + std::cout << "Error in switch operator\n"; + } +} From f8900b061d0bc2be6468765a23ffc16b47d9af5e Mon Sep 17 00:00:00 2001 From: DanielR Date: Sat, 18 Nov 2023 12:29:59 -0500 Subject: [PATCH 0744/2103] Reto #3 --- .../python/danielzx9.py" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/danielzx9.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/danielzx9.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/danielzx9.py" new file mode 100644 index 0000000000..d014ee77e6 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/danielzx9.py" @@ -0,0 +1,44 @@ + +'''``` +/* + * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + * Podrás configurar generar contraseñas con los siguientes parámetros: + * - Longitud: Entre 8 y 16. + * - Con o sin letras mayúsculas. + * - Con o sin números. + * - Con o sin símbolos. + * (Pudiendo combinar todos estos parámetros entre ellos) + */ +``` +''' + +import string +import random + +def contra(longitudContra, mayus, numeros, simbol): + caracteres = string.ascii_lowercase + if mayus: + caracteres += string.ascii_uppercase + if numeros: + caracteres += string.digits + if simbol: + caracteres += string.punctuation + + contrasena = ''.join(random.choice(caracteres) for _ in range(longitudContra)) + return contrasena + +def main(): + longitudContra = int(input("Ingrese la longitud que desea para la contraseña (entre 8 y 16): ")) + if not (8 <= longitudContra <= 16): + print("Longitud no válida. Debe estar entre 8 y 16 caracteres.") + return + + mayus = input("Incluir letras mayúsculas (si/no): ").lower() == 'si' + numeros = input("Incluir números (si/no): ").lower() == 'si' + simbol = input("Incluir símbolos (si/no): ").lower() == 'si' + + contrasena = contra(longitudContra, mayus, numeros, simbol) + print(f"\nContraseña generada: {contrasena}") + +if __name__ == "__main__": + main() From 9e4a6f2adc950db30c8d9d96c5c432f51fc0b7cc Mon Sep 17 00:00:00 2001 From: Pepe <94927052+PepeGonzale@users.noreply.github.com> Date: Sat, 18 Nov 2023 22:35:59 +0100 Subject: [PATCH 0745/2103] =?UTF-8?q?Reto=20#44=20-=20ADIVINANZAS=20MATEM?= =?UTF-8?q?=C3=81TICAS=20[Media]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/PepeGonzale.js" | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/PepeGonzale.js" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/PepeGonzale.js" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/PepeGonzale.js" new file mode 100644 index 0000000000..9e08b9e5dc --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/PepeGonzale.js" @@ -0,0 +1,89 @@ +/* + * Crea un juego interactivo por terminal en el que tendrás que adivinar + * el resultado de diferentes + * operaciones matemáticas aleatorias (suma, resta, multiplicación + * o división de dos números enteros). + * - Tendrás 3 segundos para responder correctamente. + * - El juego finaliza si no se logra responder en ese tiempo. + * - Al finalizar el juego debes mostrar cuántos cálculos has acertado. + * - Cada 5 aciertos debes aumentar en uno el posible número de cifras + * de la operación (cada vez en un operando): + * - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) + * - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) + * - Preguntas 11 a 15: XX operación YY + * - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY + * ... + */ +let correct = 0; +let questions = 0; +let digits_number = 0; +let x = 9; +let y = 9; +let myTimeout; +const rl = require("readline").createInterface({ + input: process.stdin, + output: process.stdout, +}); +const generateOperator = () => { + let operators = ["+", "-", "/", "*"]; + let operator = Math.floor(operators.length * Math.random()); + return operators[operator]; +}; +generateOperator(); +const generateRandomNumbers = () => { + if (correct % 5 === 0 && correct != 0) { + digits_number++; + if (!(digits_number % 2 === 0)) { + x = parseInt(x + "9"); + } else { + y = parseInt(y + "9"); + } + } + + let first = Math.floor(Math.random() * x); + let second = Math.floor(Math.random() * y); + return { + first, + second, + }; +}; +const adivinanzas_matematicas = () => { + let { first, second } = generateRandomNumbers(correct); + let operator = generateOperator(); + myTimeout = timeout(); + rl.question( + `What is the result of this ${first} ${operator} ${second} => `, + (user_result) => { + questions++; + console.log(`Question number ${questions}`); + let result = eval(`${first} ${operator} ${second}`); + console.log( + `The correct result is: ${result}, and your result is ${user_result}` + ); + if ( + result === parseInt(user_result) || + result === parseFloat(user_result) + ) { + correct++; + console.log(`Correct answer!`); + clearTimeout(myTimeout); + adivinanzas_matematicas(); + } else { + console.log( + `You solved ${correct} questions, try again to beat your record!` + ); + rl.close(); + } + } + ); +}; +const timeout = () => { + return setTimeout(() => { + console.log( + `You solved ${correct} questions, try again to beat your record!` + ); + rl.close(); + }, 3000); +}; + +adivinanzas_matematicas(); From ce7f107b97daa17c9f028d9002fe985f8e989e48 Mon Sep 17 00:00:00 2001 From: sfmolinaUMA Date: Sat, 18 Nov 2023 22:36:03 +0100 Subject: [PATCH 0746/2103] Reto #44 - Haskell --- .../haskell/sfmolina.hs" | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/haskell/sfmolina.hs" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/haskell/sfmolina.hs" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/haskell/sfmolina.hs" new file mode 100644 index 0000000000..4936e52840 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/haskell/sfmolina.hs" @@ -0,0 +1,136 @@ +module Main where + +import Data.Time.Clock.POSIX ( getPOSIXTime ) +import System.Timeout ( timeout ) +import Control.Concurrent +import Text.Read (readMaybe) +import Data.Maybe +import System.IO + + +---- + + +main :: IO () +main = do + + hSetBuffering stdout NoBuffering -- Corrige errores de salida a terminal al compilar con ghc + hSetBuffering stdin LineBuffering -- Corrige errores de entrada al ejecutar con ghci + + putStrLn "--------------------------------------" + putStrLn "¡Bienvenido a Adivinanzas matemáticas!" + putStrLn "--------------------------------------" + putStrLn $ + "Tendrás 3 segundos para responder correctamente el resultado de una operación matemática." ++ + "\n" ++ + "- Si lo consigues, se te presentará una nueva cuestión. Cada 5 aciertos aumentará en uno" ++ + " el posible número de cifras de un operando." ++ + "\n" ++ + "- Si no lo consigues, acabará el juego y se mostrará tu puntuación final." + + iniciar + + +---- + + +iniciar :: IO () +iniciar = do + putStrLn "---" + putStr "Cuando estés listo escribe 'y': " + respuesta <- getLine + if respuesta == "y" + then comenzarJuego (1, 1) 0 + else do + putStrLn "No hay prisa, ya sabes..." + iniciar + + +---- + + +comenzarJuego :: (Int, Int) -> Int -> IO () +comenzarJuego longitud puntuacion = do + + semilla1 <- obtenerSemilla + semilla2 <- obtenerSemilla + semilla3 <- obtenerSemilla + + let opStr = operacionAleatoria semilla1 + op = strToOp opStr + x = numeroAleatorio (semilla2 + 564851568) (fst longitud) + y = if opStr /= "/" then numeroAleatorio (semilla3 + 3219781323) (snd longitud) else (numeroAleatorio (semilla3 + 98202238) (snd longitud)) + 1 + -- Controla la división entre 0 + + putStr "\n" + putStrLn "--------------------------------------" + putStrLn $ "Pregunta " ++ show (puntuacion + 1) + putStr "\n" + putStr $ ">>> " ++ show x ++ opStr ++ show y ++ " = " + + maybeRespuesta <- timeout (3 * 10^6) getLine -- Máximo 3 segundos para responder + let solucion = x `op` y + + case maybeRespuesta of + Nothing -> incorrecto solucion -- El jugador no responde + Just respuestaStr -> case readMaybe respuestaStr of -- El jugador responde + Nothing -> incorrecto solucion -- El jugador da una respuesta no válida + Just respuestaInt -> -- La respuesta es válida + if respuestaInt == solucion + then correcto longitud puntuacion -- El jugador acierta + else incorrecto solucion -- El jugador falla + + where + incorrecto :: Int -> IO () + incorrecto s = do + putStr "\n" + putStrLn "--------------------------------------" + putStrLn "¡Has fallado!" + putStrLn $ "La respuesta correcta era: " ++ show s + putStrLn $ "Tu puntuación final: " ++ show puntuacion + putStrLn "--------------------------------------" + + correcto :: (Int, Int) -> Int -> IO () + correcto l p + | (p `mod` 5) /= 0 || p == 0 = comenzarJuego longitud (puntuacion + 1) + | otherwise = comenzarJuego (actualizar longitud) (puntuacion + 1) + + actualizar :: (Int, Int) -> (Int, Int) + actualizar (l1, l2) + | l1 == l2 = (l1 + 1, l2) + | otherwise = (l1, l2 + 1) + + obtenerSemilla :: IO Int + obtenerSemilla = round <$> getPOSIXTime + + +---- + + +operaciones :: [String] +operaciones = ["+", "-", "*", "/"] + + +operacionAleatoria :: Int -> String +operacionAleatoria semilla = operaciones !! (semilla `mod` length operaciones) + + +strToOp :: String -> (Int -> Int -> Int) +strToOp "+" = (+) +strToOp "-" = (-) +strToOp "*" = (*) +strToOp "/" = div +strToOp _ = error "ERROR: Operador no reconocido" + + +---- + + +numeroAleatorio :: Int -> Int -> Int +numeroAleatorio semilla longitud + | longitud <= 0 = error "ERROR: La longitud de un número debe ser mayor que 0" + | otherwise = semilla `mod` (limiteSuperior - limiteInferior + 1) + limiteInferior + where + limiteSuperior = 10 ^ longitud - 1 + limiteInferior = 0 + From 63c26d22381dfd18cd98cb069c78289e2debe86c Mon Sep 17 00:00:00 2001 From: Pepe <94927052+PepeGonzale@users.noreply.github.com> Date: Sat, 18 Nov 2023 22:36:40 +0100 Subject: [PATCH 0747/2103] =?UTF-8?q?Reto=20#44=20-=20ADIVINANZAS=20MATEM?= =?UTF-8?q?=C3=81TICAS=20[Media]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/pepegonzale.js" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/PepeGonzale.js" => "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/pepegonzale.js" (100%) diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/PepeGonzale.js" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/pepegonzale.js" similarity index 100% rename from "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/PepeGonzale.js" rename to "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/pepegonzale.js" From 9b21adceb47b54ee3d494aaa0248034be7ae2c3c Mon Sep 17 00:00:00 2001 From: Meidencore Date: Sat, 18 Nov 2023 16:49:10 -0500 Subject: [PATCH 0748/2103] Reto #4 javascript --- .../javascript/meidencore.js | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/meidencore.js diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/meidencore.js b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/meidencore.js new file mode 100644 index 0000000000..a307d912e1 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/meidencore.js @@ -0,0 +1,52 @@ +/* + * Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. + * Ejemplos: + * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" + * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" + */ + +const isEven = (number) => { + if (number % 2 === 0) { + return "Es par" + } else { + return "Es impar" + } +} + +const isFibonacci = (number) => { + let previusNumber = 0; + let nextNumber = 1; + while (previusNumber < number) { + const temp = previusNumber; + previusNumber = nextNumber; + nextNumber = temp + nextNumber; + } + if (previusNumber === number) { + return "es fibonacci" + } else { + return "no es fibonacci" + } +} + +const isPrime = (number) => { + // los numeros menores que 1 no son primos + if (number <= 1) { + return "no es primo" + } + // comprueba que es divisible por un numero desde 2 hasta la raiz cuadrada del numero + for (let i = 2; i <= Math.sqrt(number); i++) { + if (number % i === 0) { + return 'no es primo' + } + } + return "es primo" +} + +// genera valores enteros aleatorios entre 0 y 1000 +const number = Math.floor(Math.random() * 1000) + +console.log(`El numero ==> ${number} ${isEven(number)}, ${isFibonacci(number)} y ${isPrime(number)}.`) + + + + From edaaf9ed557d219270b85e0d314393613418fc4b Mon Sep 17 00:00:00 2001 From: keltoi-dev Date: Sat, 18 Nov 2023 20:48:32 -0300 Subject: [PATCH 0749/2103] Reto #44 - Python --- .../python/keltoi-dev.py" | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/keltoi-dev.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/keltoi-dev.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/keltoi-dev.py" new file mode 100644 index 0000000000..aa095eddd0 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/keltoi-dev.py" @@ -0,0 +1,97 @@ +""" +* Crea un juego interactivo por terminal en el que tendrás que adivinar + * el resultado de diferentes + * operaciones matemáticas aleatorias (suma, resta, multiplicación + * o división de dos números enteros). + * - Tendrás 3 segundos para responder correctamente. + * - El juego finaliza si no se logra responder en ese tiempo. + * - Al finalizar el juego debes mostrar cuántos cálculos has acertado. + * - Cada 5 aciertos debes aumentar en uno el posible número de cifras + * de la operación (cada vez en un operando): + * - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) + * - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) + * - Preguntas 11 a 15: XX operación YY + * - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY + """ + +import random +import time + +nivel = 1 + +def establece_nivel(): + global nivel + if nivel <= 5: + x = 9 + y = 9 + elif nivel >5 and nivel <= 10: + x = 99 + y = 9 + elif nivel > 10 and nivel <= 15: + x = 99 + y = 99 + elif nivel > 15: + x = 999 + y = 99 + + return x, y + +def sortea_operacion(): + operacion = random.choice(["+", "-", "*", "/"]) + + return operacion + +def sortea_numeros(x, y, operacion): + operador_1 = random.randint(0, x) + operador_2 = random.randint(0, y) + if operacion == "/" and operador_2 == 0: + operador_2 = random.randint(1, y) + elif operacion == "/" and operador_2 > operador_1: + operador_2 = random.randint(1, operador_1) + pregunta = str(operador_1) + operacion + str(operador_2) + + return pregunta + +def prepara_tablero(): + + x, y = establece_nivel() + + operacion = sortea_operacion() + + pregunta = sortea_numeros(x, y, operacion) + + return pregunta + +def a_jugar(pregunta, tiempo): + global nivel + calculo = eval(pregunta) + ini_tiempo = time.time() + resultado = int(input(f"Cual es el resultado de {pregunta} = ")) + fin_tiempo = time.time() + + if fin_tiempo - ini_tiempo > tiempo: + print("\nHas perdido") + print("Expiro el tiempo") + return False + elif resultado == round(calculo, 0): + nivel += 1 + print(f"La respuesta es correcta, has pasado al nivel {nivel}\n") + return True + else: + print("La respuesta es incorrecta, vuelve a intentarlo\n") + return True + +condicion = True +tiempo = 10 +print("Vamos a jugar!!!") +print(f"Tienes {tiempo} segundos para responder cada operacion matematica.\n") +print(f"Estas en el nivel {nivel}") +print("*" * 25) + +while condicion: + pregunta = prepara_tablero() + condicion = a_jugar(pregunta, tiempo) + +print("*" * 25) +print("El juego se termino!!!") +print(f"Respondiste correctamente {nivel - 1} operaciones\n") From 08f05716569ba96bcb6b14c7cf7ad5ddc38a2233 Mon Sep 17 00:00:00 2001 From: Juan Pablo Date: Sat, 18 Nov 2023 19:10:25 -0500 Subject: [PATCH 0750/2103] Reto #0 Python --- .../python/JuanPaperez.py" | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/JuanPaperez.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/JuanPaperez.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/JuanPaperez.py" new file mode 100644 index 0000000000..bf9e35ef1c --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/JuanPaperez.py" @@ -0,0 +1,9 @@ +for i in range(1,101): + if i%3 == 0 and i%5 == 0: + print("fizz buzz") + elif i%3 == 0: + print("fizz") + elif i%5 == 0: + print("buzz") + else: + print(i) \ No newline at end of file From 7f599d463fb40bc78089371f36e22ed407268c89 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sat, 18 Nov 2023 20:35:00 -0600 Subject: [PATCH 0751/2103] add marvnramos.js --- .../javascript/marvnramos.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js new file mode 100644 index 0000000000..e69de29bb2 From cb3ee4482c04e1c051bd484e90f150d44bdae12d Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sat, 18 Nov 2023 21:49:05 -0600 Subject: [PATCH 0752/2103] add isPar, isPrime, isFibonacci feature --- .../javascript/marvnramos.js | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js index e69de29bb2..b1fc2cdddd 100644 --- a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js @@ -0,0 +1,67 @@ +/* + si un numero es par su reciduo de división modular es 0, + sino es impar. + + para determinar un número fibonacci se puede usar la formula + test de la raiz cuadrada de 5° o el criterio de la suma + de cuadrados. + + Un número n es número fibonacci si y solo si uno de los + siguientes es verdadero: + 5n^2 + 4 ó 5n^2 - 4 +*/ + +function isPar(num){ + if(num % 2 === 0){ + return true; + } + return false; // es impar +} + +function isPrime(num){ + let sqrt = Math.floor(Math.sqrt(num)); + + if(num <= 1){ + return false; // uno no es ni primo ni par + } + + for(let i = 2; i <= sqrt; i++){ + if(num % i === 0){ + return false; + } + } + + return true; +} + +function isFibonacci(num){ + const firstResult = 5 * num**2 + 4; + const secondResult = 5 * num**2 - 4; + + const firstSqrt = Math.sqrt(firstResult); + const secondSqrt = Math.sqrt(secondResult); + + + if(Number.isInteger(firstSqrt) || Number.isInteger(secondSqrt)){ + return true; + } + return false; +} + +const num = 0; + +const numberIs = (num) =>{ + let result = ""; + + if(isPar(num)){ + result = `${num} es par` + } + +} + +// console.log(primeFibonacciAndPar(num)); +// const x = 5*1**2 + 4; +// const y = 5*1**2 - 4; + +// console.log(Math.sqrt(11)); +// console.log(Math.sqrt(y)); \ No newline at end of file From f23e412943fa4caea18059d8ee884f76053fd7d8 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sat, 18 Nov 2023 21:58:50 -0600 Subject: [PATCH 0753/2103] add numberIs feature --- .../javascript/marvnramos.js | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js index b1fc2cdddd..944ba5fc8d 100644 --- a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js @@ -48,20 +48,34 @@ function isFibonacci(num){ return false; } -const num = 0; const numberIs = (num) =>{ let result = ""; + if(isPrime(num)){ + result = `${num} es primo, `; + }else{ + result = `${num} no es primo, `; + } + + if(isFibonacci(num)){ + result += "fibonacci, "; + } + else{ + result += "no es fibonacci, " + } + if(isPar(num)){ - result = `${num} es par` + result += "y es par"; + } + else{ + result += "y es impar"; } + console.log(result); + } -// console.log(primeFibonacciAndPar(num)); -// const x = 5*1**2 + 4; -// const y = 5*1**2 - 4; +const num = 7; -// console.log(Math.sqrt(11)); -// console.log(Math.sqrt(y)); \ No newline at end of file +numberIs(num); From e441fcfe1e4c19fbe1a57346e2d4d14403f362fd Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sat, 18 Nov 2023 22:11:59 -0600 Subject: [PATCH 0754/2103] add optimization to some functions --- .../javascript/marvnramos.js | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js index 944ba5fc8d..dba7af5ced 100644 --- a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js @@ -12,10 +12,7 @@ */ function isPar(num){ - if(num % 2 === 0){ - return true; - } - return false; // es impar + return num % 2 === 0; } function isPrime(num){ @@ -41,11 +38,7 @@ function isFibonacci(num){ const firstSqrt = Math.sqrt(firstResult); const secondSqrt = Math.sqrt(secondResult); - - if(Number.isInteger(firstSqrt) || Number.isInteger(secondSqrt)){ - return true; - } - return false; + return Number.isInteger(firstSqrt) || Number.isInteger(secondSqrt); } @@ -53,9 +46,9 @@ const numberIs = (num) =>{ let result = ""; if(isPrime(num)){ - result = `${num} es primo, `; + result += `${num} es primo, `; }else{ - result = `${num} no es primo, `; + result += `${num} no es primo, `; } if(isFibonacci(num)){ @@ -76,6 +69,6 @@ const numberIs = (num) =>{ } -const num = 7; +const num = 2; numberIs(num); From d4abb6da7c7f44f8e779262a5c9a313a48f7b6b1 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sat, 18 Nov 2023 22:23:05 -0600 Subject: [PATCH 0755/2103] add some comments --- .../javascript/marvnramos.js | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js index dba7af5ced..782e808743 100644 --- a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/marvnramos.js @@ -11,10 +11,21 @@ 5n^2 + 4 ó 5n^2 - 4 */ + + +/** + * Comprueba si un número es par. + * @param {number} num - El número a evaluar. + * @returns {boolean} - Devuelve true si el número es par, false si es impar. + */ function isPar(num){ return num % 2 === 0; } - +/** + * Comprueba si un número es primo. + * @param {number} num - El número a evaluar. + * @returns {boolean} - Devuelve true si el número es primo, false si no lo es. + */ function isPrime(num){ let sqrt = Math.floor(Math.sqrt(num)); @@ -30,18 +41,29 @@ function isPrime(num){ return true; } - +/** + * Comprueba si un numero pertenece a la secuencia de Fibonacci + * @param {number} num - El número a evaluar + * @returns {boolean} - Devuelve true si el numero cumple una de las dos condiciones, sino devuelve false + */ function isFibonacci(num){ + // Calcula dos posibles resultados de la fórmula que indica la pertenencia a la secuencia de Fibonacci. const firstResult = 5 * num**2 + 4; const secondResult = 5 * num**2 - 4; + // Calcula las raíces cuadradas de los resultados y verifica si son números enteros. const firstSqrt = Math.sqrt(firstResult); const secondSqrt = Math.sqrt(secondResult); + // Devuelve true si al menos uno de los resultados es un número entero. return Number.isInteger(firstSqrt) || Number.isInteger(secondSqrt); } +/** + * Analiza un número e imprime mensajes que indican si es primo, pertenece a la secuencia de Fibonacci y si es par o impar. + * @param {number} num - El número a analizar. + */ const numberIs = (num) =>{ let result = ""; @@ -70,5 +92,4 @@ const numberIs = (num) =>{ } const num = 2; - -numberIs(num); +numberIs(num); \ No newline at end of file From da582749398f48d9c8d1c229c942fa2e7f8d44ba Mon Sep 17 00:00:00 2001 From: Juan Pablo Patino Lopez Date: Sun, 19 Nov 2023 09:20:20 +0100 Subject: [PATCH 0756/2103] Juanppdev - Reto #44 - Python --- .../python/juanppdev.py" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/juanppdev.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/juanppdev.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/juanppdev.py" new file mode 100644 index 0000000000..59598a2653 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/juanppdev.py" @@ -0,0 +1,41 @@ +import random +import time + +def generar_operacion(num_digitos): + num1 = random.randint(0, 10 ** num_digitos - 1) + num2 = random.randint(0, 9) + operadores = ['+', '-', '*', '/'] + operador = random.choice(operadores) + operacion = f"{num1} {operador} {num2}" + return operacion + +def jugar(): + aciertos = 0 + num_digitos = 1 + + while True: + operacion = generar_operacion(num_digitos) + print(f"Calcula: {operacion}") + + start_time = time.time() + respuesta = input("Respuesta: ") + + if time.time() - start_time > 3: + print("¡Tiempo agotado! Fin del juego.") + break + + resultado_correcto = eval(operacion) + + if float(respuesta) == resultado_correcto: + aciertos += 1 + print("¡Correcto!\n") + else: + print(f"Incorrecto. La respuesta correcta era {resultado_correcto}.\n") + + if aciertos % 5 == 0: + num_digitos += 1 + + print(f"Juego finalizado. Aciertos totales: {aciertos}") + +if __name__ == "__main__": + jugar() From af67cf4ec00958af758e190efc9675c3be8538dc Mon Sep 17 00:00:00 2001 From: RodriJOk Date: Sun, 19 Nov 2023 10:34:36 -0300 Subject: [PATCH 0757/2103] Resolucion del reto 43 --- .../javascript/RodriJOk.js" | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/RodriJOk.js" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/RodriJOk.js" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/RodriJOk.js" new file mode 100644 index 0000000000..c7ae0bb2c1 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/RodriJOk.js" @@ -0,0 +1,57 @@ +/* + * 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. + */ + +function weather_simulator(dias, temperatura_inicial, probabilidad_lluvia){ + if(dias < 1) return "El número de días debe ser mayor que 0"; + let temperatura_max = temperatura_inicial; + let temperatura_min = temperatura_inicial; + let llueve = false; + + for(let i=0; i 25){ + probabilidad_lluvia += 20; + }else if(temperatura_inicial < 5){ + probabilidad_lluvia -= 20; + } + if(probabilidad_lluvia > 100){ + probabilidad_lluvia = 100; + }else if(probabilidad_lluvia < 0){ + probabilidad_lluvia = 0; + } + if(probabilidad <= probabilidad_lluvia){ + temperatura_inicial -= 1; + llueve = true; + } + if(temperatura_inicial > temperatura_max){ + temperatura_max = temperatura_inicial; + }else if(temperatura_inicial < temperatura_min){ + temperatura_min = temperatura_inicial; + } + } + if(llueve){ + return `La temperatura máxima es ${temperatura_max}°C, la mínima es ${temperatura_min}°C y va a llover ${dias} días`; + } + + return `La temperatura máxima es ${temperatura_max}°C, la mínima es ${temperatura_min}°C y no va a llover`; +} + +console.log(weather_simulator(7, 20, 50)); \ No newline at end of file From 1ff8401823c7551e1446e6ffbf5f9c14267eef77 Mon Sep 17 00:00:00 2001 From: Pepe <94927052+PepeGonzale@users.noreply.github.com> Date: Sun, 19 Nov 2023 20:11:11 +0100 Subject: [PATCH 0758/2103] Reto #29 - El Caracter infiltrado --- .../go/pepegonzalez.go" | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 "Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/go/pepegonzalez.go" diff --git "a/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/go/pepegonzalez.go" "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/go/pepegonzalez.go" new file mode 100644 index 0000000000..41771e9517 --- /dev/null +++ "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/go/pepegonzalez.go" @@ -0,0 +1,28 @@ +package main + +import ( + "fmt" +) + +func main() { + caracter_infiltrado("Me llamo mouredev", "Me llemo mouredov") + caracter_infiltrado("Me llamo.Brais Moure", "Me llamo brais moure") +} + +func caracter_infiltrado(word1 string, word2 string) []string { + var characters_infiltrados int = 0 + var array = [2]string{word1, word2} + var characters []string + for i := 0; i < len(array)-1; i++ { + for j := 0; j < len(array[i])-1; j++ { + if array[i][j] != array[i+1][j] { + characters_infiltrados++ + + characters = append(characters, string(array[i+1][j])) + } + } + + } + fmt.Println(word1, " / ", word2, " => ", characters) + return characters +} From 369cf899c7af7b25af100ac63e9162ab76ad22b9 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sun, 19 Nov 2023 18:52:53 -0600 Subject: [PATCH 0759/2103] add marvnramos.js y .py --- .../javascript/marvnramos.js" | 1 + "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/marvnramos.py" | 1 + 2 files changed, 2 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/marvnramos.js" create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/marvnramos.py" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/marvnramos.js" new file mode 100644 index 0000000000..06f320c59b --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/marvnramos.js" @@ -0,0 +1 @@ +console.log("Hello, world!"); \ No newline at end of file diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/marvnramos.py" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/marvnramos.py" new file mode 100644 index 0000000000..7b6a0e7e4a --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/marvnramos.py" @@ -0,0 +1 @@ +print("hello, world!") \ No newline at end of file From b13b26f39269e59891a875bc24be1da2fc3cfc43 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sun, 19 Nov 2023 19:24:57 -0600 Subject: [PATCH 0760/2103] add marvnramos.js --- .../javascript/marvnramos.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js new file mode 100644 index 0000000000..e69de29bb2 From 52fc6f8a24873c899bfbc20998617ec2325b625c Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sun, 19 Nov 2023 19:25:34 -0600 Subject: [PATCH 0761/2103] raising game logic --- .../javascript/marvnramos.js | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js index e69de29bb2..813ff806e9 100644 --- a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js @@ -0,0 +1,27 @@ +/* +player 1 +player 2 +tie +*/ + +/* +===== Lógica del juego ===== + 🖖 rompe ✂️ + 🖖 vaporiza 🗿 + + ✂️ decapita 🦎 + ✂️ corta 📄 + + 📄 desautoriza 🖖 + 📄 envuelve 🗿 + + 🗿 aplasta ✂️ + 🗿 aplasta 🦎 + + 🦎 envenena 🖖 + 🦎 devora 📄 +*/ + + + + From e63a61e565d077dec0f2c750c11f9c2c1ce0946e Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sun, 19 Nov 2023 19:55:15 -0600 Subject: [PATCH 0762/2103] add firstPlace function --- .../javascript/marvnramos.js | 83 ++++++++++++++++--- 1 file changed, 73 insertions(+), 10 deletions(-) diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js index 813ff806e9..e531c985a0 100644 --- a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js @@ -6,22 +6,85 @@ tie /* ===== Lógica del juego ===== - 🖖 rompe ✂️ - 🖖 vaporiza 🗿 + 🖖 rompe ✂️ [✅] + 🖖 vaporiza 🗿 [✅] - ✂️ decapita 🦎 - ✂️ corta 📄 + ✂️ decapita 🦎 [✅] + ✂️ corta 📄 [✅] - 📄 desautoriza 🖖 - 📄 envuelve 🗿 + 📄 desautoriza 🖖 [✅] + 📄 envuelve 🗿 [✅] - 🗿 aplasta ✂️ - 🗿 aplasta 🦎 + 🗿 aplasta ✂️ [✅] + 🗿 aplasta 🦎 [✅] - 🦎 envenena 🖖 - 🦎 devora 📄 + 🦎 envenena 🖖 [✅] + 🦎 devora 📄 [✅] */ +const input = [ + ["🗿","✂️"], // 0 + ["✂️","🗿"], // 1 + ["📄","✂️"] // 2 +]; + +function firstPlace(input){ + let player1 = 0; + let player2 = 0; + let tie = 0; + + for(let i = 0; i < input.length; i++){ + if(input[i][0] === input[i][1]){ + tie++; + } + else if(input[i][0] === "🖖" && input[i][1] === "✂️"){ + player1++; + + } + else if(input[i][0] === "🖖" && input[i][1] === "🗿"){ + player1++; + } + else if(input[i][0] === "✂️" && input[i][1] === "🦎"){ + player1++; + } + else if(input[i][0] === "✂️" && input[i][1] === "📄"){ + player1++; + } + else if(input[i][0] === "📄" && input[i][1] === "🖖"){ + player1++; + } + else if(input[i][0] === "📄" && input[i][1] === "🗿"){ + player1++; + } + else if(input[i][0] === "🗿" && input[i][1] === "✂️"){ + player1++; + } + else if(input[i][0] === "🗿" && input[i][1] === "🦎"){ + player1++; + } + else if(input[i][0] === "🦎" && input[i][1] === "🖖"){ + player1++; + } + else if(input[i][0] === "🦎" && input[i][1] === "📄"){ + player1++; + } + else{ + player2++; + } + } + + if(tie > player1 && tie > player2){ + console.log("tie"); + } + else if(player1 > player2){ + console.log(`Player 1: ${player1} wins`); + } + else{ + console.log(`Player 2: ${player2} wins`); + } +} + +firstPlace(input); From eeeace5db7a63dce6f53f7f168fb77392c629fbb Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sun, 19 Nov 2023 19:59:02 -0600 Subject: [PATCH 0763/2103] add some comments --- .../javascript/marvnramos.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js index e531c985a0..da152b10a0 100644 --- a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js @@ -28,6 +28,11 @@ const input = [ ["📄","✂️"] // 2 ]; + +/** + * Calcula e imprime qué jugador gana más partidas + * @param {Array} input - Arreglo de arreglos con las jugadas de cada jugador + */ function firstPlace(input){ let player1 = 0; let player2 = 0; From 00a4e1d3e15162d2ad73e5a8a2534b0b599e2e20 Mon Sep 17 00:00:00 2001 From: DanielR Date: Sun, 19 Nov 2023 21:43:37 -0500 Subject: [PATCH 0764/2103] reto #4 --- .../python/danielzx9.py | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/danielzx9.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/danielzx9.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/danielzx9.py new file mode 100644 index 0000000000..d99e423d66 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/danielzx9.py @@ -0,0 +1,46 @@ +''' * Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. + * Ejemplos: + * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" + * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar"''' + +def par(num): + return num % 2 == 0 + +def primo(num): + if num < 2: + return False + for i in range(2, int(num**0.5) + 1): + if num % i == 0: + return False + return True + +def fibo(num): + a, b = 0, 1 + while a < num: + a, b = b, a + b + return a == num + +def veri(): + try: + num = int(input("Ingrese un número: ")) + if primo(num) and fibo(num) and par(num): + print(f"{num} es primo, fibonacci y es par") + elif primo(num) and fibo(num) and not par(num): + print(f"{num} es primo, fibonacci y es impar") + elif primo(num) and not fibo(num) and par(num): + print(f"{num} es primo, no es fibonacci y es par") + elif primo(num) and not fibo(num) and not par(num): + print(f"{num} es primo, no es fibonacci y es impar") + elif not primo(num) and fibo(num) and par(num): + print(f"{num} no es primo, es fibonacci y es par") + elif not primo(num) and fibo(num) and not par(num): + print(f"{num} no es primo, es fibonacci y es impar") + elif not primo(num) and not fibo(num) and par(num): + print(f"{num} no es primo, no es fibonacci y es par") + elif not primo(num) and not fibo(num) and not par(num): + print(f"{num} no es primo, no es fibonacci y es impar") + except ValueError: + print("Por favor, ingrese un número válido.") + + +veri() From 6bce29aa1b637718a4c9fd8dccad99b209270f1e Mon Sep 17 00:00:00 2001 From: Luis Lopez Date: Sun, 19 Nov 2023 18:45:59 -0800 Subject: [PATCH 0765/2103] Solved Challenge Number 44 --- .../typescript/luishendrix92.ts" | 154 ++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/luishendrix92.ts" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/luishendrix92.ts" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/luishendrix92.ts" new file mode 100644 index 0000000000..72b7f467cc --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/typescript/luishendrix92.ts" @@ -0,0 +1,154 @@ +// Run it yourself +// ========================================================= +// https://replit.com/@luishendrix92/Reto44MoureDev#index.ts + +import * as readline from "readline"; +import { exit } from "process"; + +const STATISTICS_MSG = (correct: number, total: number) => + `You answered ${correct}/${total} questions correctly!`; +const WRONG_ANSWER_MSG = "❌ Your answer is wrong; better luck next time."; +const RIGHT_ANSWER_MSG = "✅ Congratulations! your answer was correct."; +const TIMEOUT_MSG = "⌛ Sorry, you took more than 3 seconds to answer."; +const TIME_BETWEEN_QUESTIONS = 1_500; +const MAX_TIME = 3_000; + +type BinaryOp = (a: number, b: number) => number; +type Operator = "+" | "-" | "*" | "/"; + +interface Question { + operator: Operator; + argA: number; + argB: number; +} + +const operations: Record = { + "+": (a, b) => a + b, + "-": (a, b) => a - b, + "/": (a, b) => a / b, + "*": (a, b) => a * b, +}; + +const sleep = (time: number) => + new Promise((resolve) => setTimeout(resolve, time)); + +const choice = (items: T[]): T => { + const randomIndex = Math.floor(Math.random() * items.length); + + return items[randomIndex]; +}; + +const randInt = (digits: number) => + Math.floor(Math.random() * Math.pow(10, digits)); + +const digitsPair = (rightAnswersCount: number) => { + const digCount = Math.floor(rightAnswersCount / 5) + 1; + const turn = digCount % 2 === 0; + + /** + * Every 5 right answers, digCount will grow by 1, and whether digit A + * or B grow by 1 depends on if digCount is odd or pair. And since + * we're working with 2 values, we divide by 2. */ + return [ + (digCount + Number(turn) + 1) / 2, + (digCount + Number(!turn)) / 2 + ]; +}; + +function* questionGenerator(): Generator { + let rightAnswerCount = 0; + + while (true) { + const [argA, argB] = digitsPair(rightAnswerCount).map(randInt); + const operator = choice(Object.keys(operations)) as Operator; + + rightAnswerCount = yield { argA, operator, argB }; + } +} + +const formatQuestion = ({ argA, operator, argB }: Question) => { + const prompt = `How much is ${argA} ${operator} ${argB}?`; + + return ` + .${"_".repeat(prompt.length)}. +{ ${prompt} } + \\${"-".repeat(prompt.length)}/ + \\ + \\ \\_\\_ _/_/ + \\ \\__/ + (oo)\\_______ + (__)\\ )\\/\\ + ||----w | + || || + +Your answer: `; +}; + +function askQuestion({ argA, operator, argB }: Question): Promise { + const rightAnswer = Math.floor(operations[operator](argA, argB)); + const promptMsg = formatQuestion({ operator, argA, argB }); + + /** + * NOTE: Readline and cancellation mechanism sources + * ================================================= + * https://stackoverflow.com/questions/66318202/how-to-abort-a-readline-interface-question + * https://nodejs.org/api/readline.html#rlquestionquery-options-callback + */ + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + return new Promise((resolve, reject) => { + const ac = new AbortController(); + const signal = ac.signal; + const timeout = setTimeout(() => ac.abort(), MAX_TIME); + + signal.addEventListener('abort', () => { + rl.close(); + reject(new Error(TIMEOUT_MSG)); + }); + + rl.question(promptMsg, { signal }, (answer: string) => { + clearTimeout(timeout); + rl.close(); + resolve(Number(answer) === rightAnswer); + }); + }); +} + +// NOTE: Bear in mind emojis use variable charater spaces. +const fmtMsg = (msg: string) => ` +┌─${"─".repeat(msg.length)}──┐ +│ ${msg} │ +└─${"─".repeat(msg.length)}──┘ +`; + +async function main() { + let [questionCount, rightAnswerCount] = [0, 0]; + const questions = questionGenerator(); + + while (true) { + console.clear(); + + try { + const isRightAnswer = await askQuestion( + questions.next(rightAnswerCount).value + ); + + questionCount++; + console.log(fmtMsg(isRightAnswer ? RIGHT_ANSWER_MSG : WRONG_ANSWER_MSG)); + isRightAnswer && rightAnswerCount++; + + await sleep(TIME_BETWEEN_QUESTIONS); + } catch (error) { + // HACK: Typescript needs the IF in order to access .message + if (error instanceof Error) console.log(fmtMsg(error.message)); + + console.log(STATISTICS_MSG(rightAnswerCount, questionCount)); + exit(0); + } + } +} + +main(); From e50d7f2844174a0b800eef17efcabf1f855d3f63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Mon, 20 Nov 2023 14:25:06 +0100 Subject: [PATCH 0766/2103] Reto 44 didacdev --- .../swift/didacdev.swift" | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/swift/didacdev.swift" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/swift/didacdev.swift" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/swift/didacdev.swift" new file mode 100644 index 0000000000..7553e936a3 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/swift/didacdev.swift" @@ -0,0 +1,119 @@ +import Foundation + +enum Operations { + case sum + case sub + case mul + case div +} + +var rightAnswers = 0 +var finish: Bool = false + +enum MyError: Error { + case runtimeError(String) +} + +func randomOperation() -> Operations { + let random = Int.random(in: 0...3) + switch random { + case 0: + return .sum + case 1: + return .sub + case 2: + return .mul + default: + return .div + } +} + +func operation() -> (String, Int) { + var numberOne = 0 + var numberTwo = 0 + var result = 0 + + do { + numberOne = try getNumber(digits: getDigitsX()) + numberTwo = try getNumber(digits: getDigitsY()) + } catch { + print(error) + } + + let sign = randomOperation() + + switch sign { + case Operations.sum: + result = numberOne + numberTwo + return ("\(numberOne) + \(numberTwo)", result) + case Operations.sub: + result = numberOne - numberTwo + return ("\(numberOne) - \(numberTwo)", result) + case Operations.mul: + result = numberOne * numberTwo + return ("\(numberOne) * \(numberTwo)", result) + case Operations.div: + result = numberOne / numberTwo + return ("\(numberOne) / \(numberTwo)", result) + } + +} + +func getNumber(digits: Int) throws -> Int { + var numberString = "" + + for _ in 1...digits { + let randomNumber = String(Int.random(in:0...9)) + numberString += randomNumber + } + + if let number = Int(numberString) { + return number + } else { + throw MyError.runtimeError("No se ha podido convertir el String en Int") + } +} + +func getDigitsX() -> Int { + + return (((rightAnswers - 1) + 5) / 10 + 1) +} + +func getDigitsY() -> Int { + + return ((rightAnswers - 1) / 10 + 1) +} + +func askQuestion() { + let question = operation() + + print() + print(question.0) + + let semaphore = DispatchSemaphore(value: 0) + + var answer: String? + + DispatchQueue.global().async { + answer = readLine() + semaphore.signal() + } + + if semaphore.wait(timeout: .now() + 3) == .timedOut { + print("Te quedaste sin tiempo 💀") + finish = true + } else if let answer = answer { + if answer == String(question.1) { + rightAnswers += 1 + print("✅ ¡¡Respuesta correcta!!") + print("Llevas \(rightAnswers) puntos") + } else { + print("❌ Error") + finish = true + } + } +} + +while !finish { + askQuestion() +} From 68397637d89ebc6dfe413c57b7f177a1490b4969 Mon Sep 17 00:00:00 2001 From: Marco Torres Date: Mon, 20 Nov 2023 08:22:07 -0700 Subject: [PATCH 0767/2103] Reto #41 - Python --- .../python/marcoatrs.py" | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 "Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/marcoatrs.py" diff --git "a/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/marcoatrs.py" "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/marcoatrs.py" new file mode 100644 index 0000000000..412dca6645 --- /dev/null +++ "b/Retos/Reto #41 - LA CASA ENCANTADA [Dif\303\255cil]/python/marcoatrs.py" @@ -0,0 +1,94 @@ +import random + + +def generate_pos(a: int, b: int) -> tuple[int, int]: + return (random.randint(a, b), random.randint(a, b)) + +def generate_house() -> list[list[str]]: + house = [["⬜️" for _ in range(4)] for _ in range(4)] + house[0][0] = "🚪" + occup_roms = [(0, 0)] + exit_pos = (0, 0) + while exit_pos in occup_roms: + exit_pos = generate_pos(1, 3) + occup_roms.append(exit_pos) + house[exit_pos[0]][exit_pos[1]] = "🍭" + return house + + +def draw_house(house: list): + for row in house: + print(f'{"".join(row)}') + + +def get_valid_pos(pos: list[int, int]) -> list[str]: + valid_pos = [] + if pos[0] > 0: + valid_pos.append("norte") + if pos[0] < 3: + valid_pos.append("sur") + if pos[1] < 3: + valid_pos.append("este") + if pos[1] > 0: + valid_pos.append("oeste") + return valid_pos + + +def play_game(): + house = generate_house() + print("Sal de la mansión pero cuidado con las fantasmas") + pos = [0, 0] + win = False + draw_house(house) + while not win: + print(f"Estas en {pos}\n") + valid_pos = get_valid_pos(pos) + move = input(f"¿A donde te quieres mover? ({'/'.join(valid_pos)}) ").lower() + if move not in valid_pos: + continue + if move == "norte": + pos[0] = max(0, pos[0] - 1) + elif move == "sur": + pos[0] = min(3, pos[0] + 1) + elif move == "este": + pos[1] = min(3, pos[1] + 1) + else: + pos[1] = max(0, pos[1] - 1) + if house[pos[0]][pos[1]] == "🍭": + print("Encontraste los dulces 🍭🍭🍭, ganaste :)") + win = True + continue + questions = 1 + if random.random() <= 0.1: + print("Encontraste un fantasma, contesta 2 preguntas para pasar 👻") + house[pos[0]][pos[1]] = "👻" + draw_house(house) + questions += 1 + while questions > 0: + question = generate_question() + answer = input(f"{question[0]}: ").lower() + if answer == question[1]: + print("Correcto") + questions -= 1 + else: + print("Fallaste, intenta de nuevo 👻") + + +def generate_question() -> str: + questions = [ + ("¿Cuantas patas tiene una araña?", "8"), + ("¿Que lenguage de programacion tiene nombre de serpiente?", "python"), + ("¿Cuantos lados tiene un rombo", "4"), + ("¿Cual es el planeta rojo", "marte"), + ("¿Como esta compuesta es agua?", "h2o"), + ("¿Cual es el planeta mas cercano al Sol?", "mercurio"), + ("¿En qué disciplina deportiva juega Leo Messi?", "futbol"), + ("¿En qué país vivieron los samuráis?", "japon"), + ("El sol es una estrella. ¿Verdadero o falso?", "verdadero"), + ("¿Cuantas vocales tiene el abcedario?", "5") + ] + return random.choice(questions) + + +if __name__ == "__main__": + play_game() From c1375a5551d91aa11dbba6deb3846463f0b6db11 Mon Sep 17 00:00:00 2001 From: Billy Torres Date: Mon, 20 Nov 2023 09:49:06 -0600 Subject: [PATCH 0768/2103] =?UTF-8?q?Soluci=C3=B3n=20reto=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/BRivasTorres.js" | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/BRivasTorres.js" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/BRivasTorres.js" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/BRivasTorres.js" new file mode 100644 index 0000000000..fc64ef607e --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/BRivasTorres.js" @@ -0,0 +1,13 @@ +const fizzBuzz = () => { + for (let i = 0; i <= 100; i++) { + if (i % 3 === 0 && i % 5 === 0) { + console.log("fizzBuzz"); + } else if (i % 3 === 0) { + console.log("fizz"); + } else if (i % 5 === 0) { + console.log("buzz"); + } + } +}; + +console.log(fizzBuzz()); From 79f2a7faa4988b0afd3e0bf3dad645500dab5a63 Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Mon, 20 Nov 2023 10:54:17 -0500 Subject: [PATCH 0769/2103] Reto #20 - Python --- .../python/sublian.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Retos/Reto #20 - LA TRIFUERZA [Media]/python/sublian.py diff --git a/Retos/Reto #20 - LA TRIFUERZA [Media]/python/sublian.py b/Retos/Reto #20 - LA TRIFUERZA [Media]/python/sublian.py new file mode 100644 index 0000000000..cdbb7a2a14 --- /dev/null +++ b/Retos/Reto #20 - LA TRIFUERZA [Media]/python/sublian.py @@ -0,0 +1,35 @@ +# Reto #20: La Trifuerza +#### Dificultad: Media | Publicación: 15/05/23 | Corrección: 22/05/23 | Mi Solución : 20/11/23 +## Enunciado +""" + ¡El nuevo "The Legend of Zelda: Tears of the Kingdom" ya está disponible! + + Crea un programa que dibuje una Trifuerza de "Zelda" + formada por asteriscos. + - Debes indicarle el número de filas de los triángulos con un entero positivo (n). + - Cada triángulo calculará su fila mayor utilizando la fórmula 2n-1. + + Ejemplo: Trifuerza 2 + + * + *** + * * + *** *** +""" + +def trifuerza(n: int) -> None: + longitud = 2 * n + + for i in range(1, n + 1): + text = "*" * (2 * i - 1) + text = text.center(longitud * 2) + print(text) + + for i in range(1, n + 1): + text = "*" * (2 * i - 1) + text = text.center(longitud)*2 + print(text) + + +if __name__ == "__main__": + trifuerza(abs(int(input("Indica tu fuerza: ")))) \ No newline at end of file From 6efdf3e19d9b1a88c594bdffc3e07be5f178ec7d Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 20 Nov 2023 21:43:17 +0100 Subject: [PATCH 0770/2103] =?UTF-8?q?Correcci=C3=B3n=20Reto=20#44?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +- .../python/mouredev.py" | 69 +++++++++++++++++++ .../ejercicio.md" | 29 ++++++++ 3 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/mouredev.py" create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/ejercicio.md" diff --git a/README.md b/README.md index 0b314c8736..f631667d2a 100644 --- a/README.md +++ b/README.md @@ -61,9 +61,10 @@ Aquí encontrarás el listado de retos, su fecha de publicación, dificultad y e * **#41** - 16/10/23 | Difícil | [`LA CASA ENCANTADA`](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2341%20-%20LA%20CASA%20ENCANTADA%20%5BDifícil%5D/)] * **#42** - 23/10/23 | Difícil | [`PUNTO DE ENCUENTRO`](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/ejercicio.md) Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/)] * **#43** - 30/10/23 | Fácil | [`SIMULADOR DE CLIMA`](./Retos/Reto%20%2343%20-%20SIMULADOR%20DE%20CLIMA%20%5BFácil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2343%20-%20SIMULADOR%20DE%20CLIMA%20%5BFácil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2343%20-%20SIMULADOR%20DE%20CLIMA%20%5BFácil%5D/)] -* **#44** - 13/10/23 | Media | [`ADIVINANZAS MATEMÁTICAS`](./Retos/Reto%20%2344%20-%20ADIVINANZAS%20MATEMÁTICAS%20%5BMedia%5D/ejercicio.md) | Último reto publicado +* **#44** - 13/11/23 | Media | [`ADIVINANZAS MATEMÁTICAS`](./Retos/Reto%20%2344%20-%20ADIVINANZAS%20MATEMÁTICAS%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2344%20-%20ADIVINANZAS%20MATEMÁTICAS%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2344%20-%20ADIVINANZAS%20MATEMÁTICAS%20%5BMedia%5D/)] +* **#45** - 20/11/23 | Fácil | [`EL CALENDARIO DE ADEVIENTO 2023`](./Retos/Reto%20%2345%20-%20EL%20CALENDARIO%20DE%20ADEVIENTO%202023%20%5BFácil%5D/ejercicio.md) | Último reto publicado -> **Corrección y Publicación próximo reto - 20/11/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1173570988865232968) en [Twitch](https://twitch.tv/mouredev)** +> **Corrección y Publicación próximo reto - 27/11/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1176113149049585764) en [Twitch](https://twitch.tv/mouredev)** *Puedes ejecutar el archivo [language_stats.py](./Retos/language_stats.py) para visualizar las estadísticas de uso de cada lenguaje.* diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/mouredev.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/mouredev.py" new file mode 100644 index 0000000000..3689dcf93c --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/mouredev.py" @@ -0,0 +1,69 @@ +import random +import threading + + +def random_int(digits) -> int: + return random.randint(0, 10**digits - 1) + + +def input_with_timeout(): + + def on_timeout(): + print("\n¡El tiempo ha finalizado! Pulsa enter.") + global game_on + game_on = False + + timer = threading.Timer(3, on_timeout) + timer.start() + + try: + answer = input(f"¿Cuál es el resultado de {num1} {operation} {num2}? ") + finally: + timer.cancel() + return answer + + +operations = ["+", "-", "*", "/"] +correct_answers = 0 +num1_digits = 1 +num2_digits = 1 + +game_on = True + +while game_on: + + num1 = random_int(num1_digits) + num2 = random_int(num2_digits) + operation = random.choice(operations) + + if operation == "+": + result = num1 + num2 + elif operation == "-": + result = num1 - num2 + elif operation == "*": + result = num1 * num2 + elif operation == "/": + while num2 == 0: + num2 = random_int(num2_digits) + result = num1 / num2 + result = round(result, 1) + + answer = input_with_timeout() + + if not game_on: + break + elif answer == str(result): + print("Respuesta correcta!") + correct_answers += 1 + + if correct_answers % 5 == 0: + if correct_answers % 2 == 0: + num2_digits += 1 + else: + num1_digits += 1 + + else: + print("Respuesta incorrecta!") + game_on = False + +print(f"Juego finalizado. Has acertado {correct_answers} cálculos.") diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/ejercicio.md" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/ejercicio.md" new file mode 100644 index 0000000000..a2b70f9a70 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/ejercicio.md" @@ -0,0 +1,29 @@ +# Reto #45: El calendario de aDEViento 2023 +#### Dificultad: Fácil | Publicación: 20/11/23 | Corrección: 27/11/23 + +## Enunciado + +``` +/* + * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participación: + * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. + * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. + * (Y no lo duplicacrás) + * - Si seleccionas mostrar los participantes, se listarán todos. + * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - Si seleccionas realizar el sorteo, elegirás una persona al azar y se eliminará del listado. + * - Si seleccionas salir, el programa finalizará. + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file From 52a326e6391bb91f2909e7e8f1ca2f41d3efbf1d Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 20 Nov 2023 21:44:24 +0100 Subject: [PATCH 0771/2103] =?UTF-8?q?Correcci=C3=B3n=20Reto=20#44?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ejercicio.md" | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/ejercicio.md" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/ejercicio.md" index a2b70f9a70..92de45c51b 100644 --- "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/ejercicio.md" +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/ejercicio.md" @@ -14,11 +14,12 @@ * participantes, mostrarlos, lanzar el sorteo o salir. * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. - * (Y no lo duplicacrás) + * (Y no lo duplicarás) * - Si seleccionas mostrar los participantes, se listarán todos. * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. * (Avisando de si lo has eliminado o el nombre no existe) - * - Si seleccionas realizar el sorteo, elegirás una persona al azar y se eliminará del listado. + * - Si seleccionas realizar el sorteo, elegirás una persona al azar + * y se eliminará del listado. * - Si seleccionas salir, el programa finalizará. */ ``` From 8ca32944b45d7bbb294807fabc7bb478521cc418 Mon Sep 17 00:00:00 2001 From: blackriper Date: Mon, 20 Nov 2023 17:13:39 -0600 Subject: [PATCH 0772/2103] Reto#45-go --- .../go/blackriper.go" | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/go/blackriper.go" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/go/blackriper.go" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/go/blackriper.go" new file mode 100644 index 0000000000..d15f768886 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/go/blackriper.go" @@ -0,0 +1,129 @@ +package main + +import ( + "fmt" + "math/rand" +) + +/*interfaces de trabajo*/ +type Adev interface { + ShowMenuOptions() +} + +type ParticipanCrud interface { + AddParticipan(name string) + ShowParticipans() + DeleteParticipan(name string) + HoldaDraw() +} + +/*Implementar interface para acciones de los participantes*/ + +type Hold struct { + Participans []string +} + +func (h *Hold) AddParticipan(name string) { + if exists := ExistParticipan(h.Participans, name); exists == false { + h.Participans = append(h.Participans, name) + fmt.Printf("participant %v successfully added\n", name) + } else { + fmt.Printf("participan %v already exists\n", name) + } +} + +func (h *Hold) ShowParticipans() { + fmt.Println("+++Register participans aDEViento+++") + for _, participan := range h.Participans { + fmt.Println(participan) + } +} +func (h *Hold) DeleteParticipan(name string) { + if exists := ExistParticipan(h.Participans, name); exists == true { + indx := GetIndex(h.Participans, name) + h.Participans = append(h.Participans[:indx], h.Participans[indx+1:]...) + fmt.Printf("participan %v delete successfully\n", name) + } else { + fmt.Printf("participan %v not exists \n", name) + } +} + +func (h *Hold) HoldaDraw() { + random := rand.Intn(len(h.Participans)) + winner := h.Participans[random] + h.Participans = append(h.Participans[:random], h.Participans[random+1:]...) + fmt.Printf("Congratulations %v you winner a prieze\n", winner) +} + +/*funciones auxilares*/ +func GetIndex(participans []string, name string) int { + indx := 0 + for ind, parparticipan := range participans { + if parparticipan == name { + indx = ind + } + } + return indx +} + +func ExistParticipan(participans []string, name string) bool { + for _, part := range participans { + if name == part { + return true + } + } + return false +} + +/* implementar metodos para mostrar menu de opciones*/ +type ADEViento struct { + Adev ParticipanCrud +} + +func (ad *ADEViento) ShowMenuOptions() { + var ( + option int + name string + ) +adviento: + for { + fmt.Println("************************") + fmt.Println("Welcome hold ADEViento") + fmt.Println("**************************") + fmt.Println("1.-Add participan") + fmt.Println("2.-Show participans") + fmt.Println("3.-Delete participan") + fmt.Println("4.-Hold a Draw") + fmt.Println("5.-Exit to program") + + fmt.Println("Enter a number to perform an action: ") + fmt.Scanf("%d", &option) + + switch option { + + case 1: + fmt.Println("What is name for a new participian?") + fmt.Scanf("%s", &name) + ad.Adev.AddParticipan(name) + case 2: + ad.Adev.ShowParticipans() + case 3: + fmt.Println("What is name for delete participan?") + fmt.Scanf("%s", &name) + ad.Adev.DeleteParticipan(name) + case 4: + ad.Adev.HoldaDraw() + case 5: + break adviento + } + + } + +} + +func main() { + var crudpart ParticipanCrud = &Hold{} + var adev Adev = &ADEViento{Adev: crudpart} + adev.ShowMenuOptions() + +} From 8772599e2def2b920b7d44d9afe5fda394261dee Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Mon, 20 Nov 2023 18:57:43 -0600 Subject: [PATCH 0773/2103] add marvnramos.js --- .../javascript/marvnramos.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/javascript/marvnramos.js diff --git a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/javascript/marvnramos.js b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/javascript/marvnramos.js new file mode 100644 index 0000000000..e69de29bb2 From 1e8d4ef95bcb2bce7dfa26df302bd05a7a816e2f Mon Sep 17 00:00:00 2001 From: treber Date: Mon, 20 Nov 2023 20:15:56 -0500 Subject: [PATCH 0774/2103] Reto #11 - Python --- .../python/treber.py" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #11 - URL PARAMS [F\303\241cil]/python/treber.py" diff --git "a/Retos/Reto #11 - URL PARAMS [F\303\241cil]/python/treber.py" "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/python/treber.py" new file mode 100644 index 0000000000..996ea280bc --- /dev/null +++ "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/python/treber.py" @@ -0,0 +1,30 @@ +# Reto #11: URL params +#### Dificultad: Fácil | Publicación: 13/03/23 | Corrección: 20/03/23 + +## Enunciado + +""" +/* + * Dada una URL con parámetros, crea una función que obtenga sus valores. + * No se pueden usar operaciones del lenguaje que realicen esta tarea directamente. + * + * Ejemplo: En la url https://retosdeprogramacion.com?year=2023&challenge=0 + * los parámetros serían ["2023", "0"] + */ +""" + +url = input("Pegue su url con parámetros: ") + + +def findParams(): + params = [] + x = url.split("?") + lista = x[1].split("&") # ['year=2023', 'challenge=0'] + for y in lista: + z = y.split("=") # ['year', '2023'] + params.append(z[1]) + + return params + +params_url = findParams() +print(f"los parámetros de la url son: {params_url}") From 97cb96395b148257692ff0cbfa4ea518d4f36cd1 Mon Sep 17 00:00:00 2001 From: jcdm60 Date: Mon, 20 Nov 2023 22:23:25 -0400 Subject: [PATCH 0775/2103] Reto #45 - Python --- .../python/jcdm60.py" | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/jcdm60.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/jcdm60.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/jcdm60.py" new file mode 100644 index 0000000000..f828af4b53 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/jcdm60.py" @@ -0,0 +1,91 @@ +# Reto #45: El calendario de aDEViento 2023 +#### Dificultad: Fácil | Publicación: 20/11/23 | Corrección: 27/11/23 + +## Enunciado + +# +# ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? +# 24 días, 24 regalos sorpresa relacionados con desarrollo de software. +# Desde el 1 al 24 de diciembre. +# +# Crea un programa que simule el mecanismo de participación: +# - Mediante la terminal, el programa te preguntará si quieres añadir y borrar +# participantes, mostrarlos, lanzar el sorteo o salir. +# - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. +# - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. +# (Y no lo duplicarás) +# - Si seleccionas mostrar los participantes, se listarán todos. +# - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. +# (Avisando de si lo has eliminado o el nombre no existe) +# - Si seleccionas realizar el sorteo, elegirás una persona al azar +# y se eliminará del listado. +# - Si seleccionas salir, el programa finalizará. +# + +import random + +class ParticipantManager: + def __init__(self): + self.participants = {} + + def add_participant(self, name): + if name in self.participants: + print(f"El participante '{name}' ya existe.") + else: + self.participants[name] = True + print(f"El participante '{name}' ha sido añadido.") + + def show_participants(self): + if self.participants: + print("Lista de participantes:") + for participant in self.participants: + print(participant) + else: + print("No hay participantes registrados.") + + def remove_participant(self, name): + if name in self.participants: + del self.participants[name] + print(f"El participante '{name}' ha sido eliminado.") + else: + print(f"El participante '{name}' no existe en la lista.") + + def draw(self): + if self.participants: + selected_participant = random.choice(list(self.participants.keys())) + print(f"El participante sorteado es: {selected_participant}") + del self.participants[selected_participant] + else: + print("No hay participantes para realizar el sorteo.") + +def main(): + manager = ParticipantManager() + + while True: + print("\nQué acción deseas realizar?") + print("1. Añadir participante") + print("2. Mostrar participantes") + print("3. Eliminar participante") + print("4. Realizar sorteo") + print("5. Salir") + + option = input("Ingresa tu selección ") + + if option == '1': + name = input("Ingresa el nombre del participante: ") + manager.add_participant(name) + elif option == '2': + manager.show_participants() + elif option == '3': + name = input("Ingresa el nombre del participante a eliminar: ") + manager.remove_participant(name) + elif option == '4': + manager.draw() + elif option == '5': + break + else: + print("Opción no válida. Por favor, elige una opción del 1 al 5.") + +if __name__ == "__main__": + main() + From 02ea2b1e8926c4f7d55df5e791588bb76e137898 Mon Sep 17 00:00:00 2001 From: Claudio Rodriguez Herrera Date: Mon, 20 Nov 2023 23:45:24 -0300 Subject: [PATCH 0776/2103] Reto #45 - Python --- .../python/inkhemi.py" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/inkhemi.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/inkhemi.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/inkhemi.py" new file mode 100644 index 0000000000..d4b3371c0b --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/inkhemi.py" @@ -0,0 +1,46 @@ +import random + +participants = [] + +while True: + print("\nSeleccione una opción:") + print("1. Añadir participante") + print("2. Eliminar participante") + print("3. Mostrar participantes") + print("4. Realizar sorteo") + print("5. Salir") + + option = input("Ingrese el número de la opción: ") + + if option == "5": + break + elif option == "1": + name = input("Ingrese el nombre del participante: ") + if name in participants: + print("Este participante ya existe.") + else: + participants.append(name) + print(f"{name} ha sido añadido.") + elif option == "2": + name = input("Ingrese el nombre del participante: ") + if name not in participants: + print("El participante no existe.") + else: + participants.remove(name) + print(f"{name} ha sido eliminado.") + elif option == "3": + if not participants: + print("No hay participantes.") + else: + print("Participantes:") + for index, name in enumerate(participants): + print(f"{index + 1}. {name}") + elif option == "4": + if not participants: + print("No hay participantes para realizar el sorteo.") + else: + winner = random.choice(participants) + print(f"El ganador es {winner}") + participants.remove(winner) + else: + print("Opción inválida. Por favor, seleccione una opción válida.") From 53c46027cff7df07b805d13cf9ecb1bbced675f5 Mon Sep 17 00:00:00 2001 From: Fairdev <148779252+FedeAirala@users.noreply.github.com> Date: Tue, 21 Nov 2023 06:03:01 -0300 Subject: [PATCH 0777/2103] Reto #44 Python --- .../python/Reto #44 Python" | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto #44 Python" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto #44 Python" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto #44 Python" new file mode 100644 index 0000000000..eb77d5d21a --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto #44 Python" @@ -0,0 +1,114 @@ +### Reto 44 Python ### + +""" + Crea un juego interactivo por terminal en el que tendrás que adivinar + el resultado de diferentes + operaciones matemáticas aleatorias (suma, resta, multiplicación + o división de dos números enteros). + - Tendrás 3 segundos para responder correctamente. + - El juego finaliza si no se logra responder en ese tiempo. + - Al finalizar el juego debes mostrar cuántos cálculos has acertado. + - Cada 5 aciertos debes aumentar en uno el posible número de cifras + de la operación (cada vez en un operando): + - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) + - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) + - Preguntas 11 a 15: XX operación YY + - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY + + """ +import random +from inputimeout import inputimeout, TimeoutOccurred + +operacion=["+","-","*","/"] + +def request (result_operator,num_one,num_two): + if result_operator== 1: + op= operacion[0] + elif result_operator==2: + op=operacion[1] + elif result_operator==3: + op=operacion[2] + else: + op=operacion[3] + while True: + try: + valor = (int(inputimeout(prompt=f"{num_one} {op} {num_two}: ",timeout=3))) + break + except TimeoutOccurred: + print ("Tiempo Agotado PERDISTE") + valor=None + break + return valor + +def operation(question): + num_one=0 + num_two=0 + if question<5: + x=9 + y=9 + elif question<10: + x=99 + y=9 + elif question<15: + x=99 + y=99 + else: + x=999 + y=99 + operator=random.randint(1,4) + num_one=random.randint(0,x) + if operator==4: + num_two=random.randint(1,y) + else: + num_two=random.randint(0,y) + return operator,num_one,num_two + +print (input("Para comenzar presione cualquier tecla")) +try: + def interactive_game (): + error=0 + question=0 + while error == 0: + if question<20: + operator = operation(question) + result_operator=operator[0] + num_one =operator[1] + num_two = operator[2] + valor=request(result_operator,num_one,num_two) + if valor is None: + break + if operator[0] == 1: + + if valor == num_one + num_two: + print ("Correcto") + question += 1 + else: + print("Incorrecto") + elif operator[0] == 2: + if valor == num_one-num_two: + print ("Correcto") + question += 1 + else: + print("Incorrecto") + elif operator[0] == 3: + if valor == num_one*num_two: + print ("Correcto") + question += 1 + else: + print("Incorrecto") + else: + if valor == num_one//num_two: + print ("Correcto") + question += 1 + else: + print("Incorrecto") + + else: + error=1 + print(f"Ha respondido {question} respuesta/s correcta/s") + + interactive_game() +except ValueError: + print ("Error en la ejecución") +finally: + print("Ha finalizado el juego") From 5375ebd2ed9a10aa8313c2c9ed7454cf7cc9d727 Mon Sep 17 00:00:00 2001 From: Othamae Date: Tue, 21 Nov 2023 10:04:37 +0100 Subject: [PATCH 0778/2103] Reto #45 - javascript --- .../javascript/othamae.js" | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/othamae.js" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/othamae.js" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/othamae.js" new file mode 100644 index 0000000000..ca61322cc3 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/othamae.js" @@ -0,0 +1,82 @@ +/* + * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participación: + * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. + * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. + * (Y no lo duplicarás) + * - Si seleccionas mostrar los participantes, se listarán todos. + * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - Si seleccionas realizar el sorteo, elegirás una persona al azar + * y se eliminará del listado. + * - Si seleccionas salir, el programa finalizará. + */ + +const readline = require('readline') +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}) + +function aDEViento(){ + console.log("Welcome to aDEViento!!") + console.log("Please, select an action from the list:") + console.log("a - Add a participant") + console.log("r - Remove a participant") + console.log("s - Show the list of participants") + console.log("d - Draw the lottery") + console.log("e - Exit") + const listOfParticipants = [] + game() + function game(){ + rl.question("What do you want to do? ", (answer) => { + if (answer.toLowerCase() === 'a'){ + rl.question("Please, write the name of the participant: ", (answer) => { + if (listOfParticipants.includes(answer.toLowerCase())){ + console.log("This participant is already in the list") + } else { + listOfParticipants.push(answer.toLowerCase()) + console.log("Participant added successfully") + } + game() + }) + } else if (answer.toLowerCase() === 'r'){ + rl.question("Please, write the name of the participant to be removed: ", (answer) => { + if (!listOfParticipants.includes(answer.toLowerCase())){ + console.log("This participant is not in the list") + } else { + const index = listOfParticipants.indexOf(answer.toLowerCase()) + listOfParticipants.splice(index, 1) + console.log("This participant has been removed from the list") + } + game() + }) + } else if (answer.toLowerCase() === 's'){ + console.log("Here is the list of participants:") + console.log(listOfParticipants) + game() + } else if (answer.toLowerCase() === 'd'){ + const randomNumber = Math.floor(Math.random() * listOfParticipants.length) + const winner = listOfParticipants[randomNumber] + console.log({randomNumber, winner}) + console.log(`The winner is ${winner}`) + listOfParticipants.splice(randomNumber, 1) + game() + } else if (answer.toLowerCase() === 'e'){ + console.log("See you later!!") + rl.close() + } else { + console.log("Please, select a valid option") + game() + } + }) + } + +} + +aDEViento() \ No newline at end of file From 3814405fbd0f2a38233c75a74ea0ce59c8eb3fa1 Mon Sep 17 00:00:00 2001 From: Fairdev <148779252+FedeAirala@users.noreply.github.com> Date: Tue, 21 Nov 2023 06:10:19 -0300 Subject: [PATCH 0779/2103] Fairdev --- .../python/Fairdev" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto #44 Python" => "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Fairdev" (100%) diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto #44 Python" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Fairdev" similarity index 100% rename from "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto #44 Python" rename to "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Fairdev" From 9cce91ffa07e9427a1fc29b3ca9b251752d8f37e Mon Sep 17 00:00:00 2001 From: Fairdev <148779252+FedeAirala@users.noreply.github.com> Date: Tue, 21 Nov 2023 06:24:12 -0300 Subject: [PATCH 0780/2103] Add files via upload --- .../python/Reto#44 Python.py" | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto#44 Python.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto#44 Python.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto#44 Python.py" new file mode 100644 index 0000000000..85af8224ec --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto#44 Python.py" @@ -0,0 +1,114 @@ +### Reto 44 by Brais Moure ### + +""" + Crea un juego interactivo por terminal en el que tendrás que adivinar + el resultado de diferentes + operaciones matemáticas aleatorias (suma, resta, multiplicación + o división de dos números enteros). + - Tendrás 3 segundos para responder correctamente. + - El juego finaliza si no se logra responder en ese tiempo. + - Al finalizar el juego debes mostrar cuántos cálculos has acertado. + - Cada 5 aciertos debes aumentar en uno el posible número de cifras + de la operación (cada vez en un operando): + - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) + - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) + - Preguntas 11 a 15: XX operación YY + - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY + + """ +import random +from inputimeout import inputimeout, TimeoutOccurred + +operacion=["+","-","*","/"] + +def request (result_operator,num_one,num_two): + if result_operator== 1: + op= operacion[0] + elif result_operator==2: + op=operacion[1] + elif result_operator==3: + op=operacion[2] + else: + op=operacion[3] + while True: + try: + valor = (int(inputimeout(prompt=f"{num_one} {op} {num_two}: ",timeout=3))) + break + except TimeoutOccurred: + print ("Tiempo Agotado PERDISTE") + valor=None + break + return valor + +def operation(question): + num_one=0 + num_two=0 + if question<5: + x=9 + y=9 + elif question<10: + x=99 + y=9 + elif question<15: + x=99 + y=99 + else: + x=999 + y=99 + operator=random.randint(1,4) + num_one=random.randint(0,x) + if operator==4: + num_two=random.randint(1,y) + else: + num_two=random.randint(0,y) + return operator,num_one,num_two + +print (input("Para comenzar presione cualquier tecla")) +try: + def interactive_game (): + error=0 + question=0 + while error == 0: + if question<20: + operator = operation(question) + result_operator=operator[0] + num_one =operator[1] + num_two = operator[2] + valor=request(result_operator,num_one,num_two) + if valor is None: + break + if operator[0] == 1: + + if valor == num_one + num_two: + print ("Correcto") + question += 1 + else: + print("Incorrecto") + elif operator[0] == 2: + if valor == num_one-num_two: + print ("Correcto") + question += 1 + else: + print("Incorrecto") + elif operator[0] == 3: + if valor == num_one*num_two: + print ("Correcto") + question += 1 + else: + print("Incorrecto") + else: + if valor == num_one//num_two: + print ("Correcto") + question += 1 + else: + print("Incorrecto") + + else: + error=1 + print(f"Ha respondido {question} respuesta/s correcta/s") + + interactive_game() +except ValueError: + print ("Error en la ejecución") +finally: + print("Ha finalizado el juego") \ No newline at end of file From 18bb8229e4677598dfa878f5fe9202fc9038aecf Mon Sep 17 00:00:00 2001 From: Fairdev <148779252+FedeAirala@users.noreply.github.com> Date: Tue, 21 Nov 2023 06:27:07 -0300 Subject: [PATCH 0781/2103] =?UTF-8?q?Delete=20Retos/Reto=20#44=20-=20ADIVI?= =?UTF-8?q?NANZAS=20MATEM=C3=81TICAS=20[Media]/python/Reto#44=20Python.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/Reto#44 Python.py" | 114 ------------------ 1 file changed, 114 deletions(-) delete mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto#44 Python.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto#44 Python.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto#44 Python.py" deleted file mode 100644 index 85af8224ec..0000000000 --- "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Reto#44 Python.py" +++ /dev/null @@ -1,114 +0,0 @@ -### Reto 44 by Brais Moure ### - -""" - Crea un juego interactivo por terminal en el que tendrás que adivinar - el resultado de diferentes - operaciones matemáticas aleatorias (suma, resta, multiplicación - o división de dos números enteros). - - Tendrás 3 segundos para responder correctamente. - - El juego finaliza si no se logra responder en ese tiempo. - - Al finalizar el juego debes mostrar cuántos cálculos has acertado. - - Cada 5 aciertos debes aumentar en uno el posible número de cifras - de la operación (cada vez en un operando): - - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) - - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) - - Preguntas 11 a 15: XX operación YY - - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY - - """ -import random -from inputimeout import inputimeout, TimeoutOccurred - -operacion=["+","-","*","/"] - -def request (result_operator,num_one,num_two): - if result_operator== 1: - op= operacion[0] - elif result_operator==2: - op=operacion[1] - elif result_operator==3: - op=operacion[2] - else: - op=operacion[3] - while True: - try: - valor = (int(inputimeout(prompt=f"{num_one} {op} {num_two}: ",timeout=3))) - break - except TimeoutOccurred: - print ("Tiempo Agotado PERDISTE") - valor=None - break - return valor - -def operation(question): - num_one=0 - num_two=0 - if question<5: - x=9 - y=9 - elif question<10: - x=99 - y=9 - elif question<15: - x=99 - y=99 - else: - x=999 - y=99 - operator=random.randint(1,4) - num_one=random.randint(0,x) - if operator==4: - num_two=random.randint(1,y) - else: - num_two=random.randint(0,y) - return operator,num_one,num_two - -print (input("Para comenzar presione cualquier tecla")) -try: - def interactive_game (): - error=0 - question=0 - while error == 0: - if question<20: - operator = operation(question) - result_operator=operator[0] - num_one =operator[1] - num_two = operator[2] - valor=request(result_operator,num_one,num_two) - if valor is None: - break - if operator[0] == 1: - - if valor == num_one + num_two: - print ("Correcto") - question += 1 - else: - print("Incorrecto") - elif operator[0] == 2: - if valor == num_one-num_two: - print ("Correcto") - question += 1 - else: - print("Incorrecto") - elif operator[0] == 3: - if valor == num_one*num_two: - print ("Correcto") - question += 1 - else: - print("Incorrecto") - else: - if valor == num_one//num_two: - print ("Correcto") - question += 1 - else: - print("Incorrecto") - - else: - error=1 - print(f"Ha respondido {question} respuesta/s correcta/s") - - interactive_game() -except ValueError: - print ("Error en la ejecución") -finally: - print("Ha finalizado el juego") \ No newline at end of file From 378a0f3a55e73dbf31a253459ab129c861c897e1 Mon Sep 17 00:00:00 2001 From: Fairdev <148779252+FedeAirala@users.noreply.github.com> Date: Tue, 21 Nov 2023 06:27:23 -0300 Subject: [PATCH 0782/2103] =?UTF-8?q?Delete=20Retos/Reto=20#44=20-=20ADIVI?= =?UTF-8?q?NANZAS=20MATEM=C3=81TICAS=20[Media]/python/Fairdev?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/Fairdev" | 114 ------------------ 1 file changed, 114 deletions(-) delete mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Fairdev" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Fairdev" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Fairdev" deleted file mode 100644 index eb77d5d21a..0000000000 --- "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Fairdev" +++ /dev/null @@ -1,114 +0,0 @@ -### Reto 44 Python ### - -""" - Crea un juego interactivo por terminal en el que tendrás que adivinar - el resultado de diferentes - operaciones matemáticas aleatorias (suma, resta, multiplicación - o división de dos números enteros). - - Tendrás 3 segundos para responder correctamente. - - El juego finaliza si no se logra responder en ese tiempo. - - Al finalizar el juego debes mostrar cuántos cálculos has acertado. - - Cada 5 aciertos debes aumentar en uno el posible número de cifras - de la operación (cada vez en un operando): - - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) - - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) - - Preguntas 11 a 15: XX operación YY - - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY - - """ -import random -from inputimeout import inputimeout, TimeoutOccurred - -operacion=["+","-","*","/"] - -def request (result_operator,num_one,num_two): - if result_operator== 1: - op= operacion[0] - elif result_operator==2: - op=operacion[1] - elif result_operator==3: - op=operacion[2] - else: - op=operacion[3] - while True: - try: - valor = (int(inputimeout(prompt=f"{num_one} {op} {num_two}: ",timeout=3))) - break - except TimeoutOccurred: - print ("Tiempo Agotado PERDISTE") - valor=None - break - return valor - -def operation(question): - num_one=0 - num_two=0 - if question<5: - x=9 - y=9 - elif question<10: - x=99 - y=9 - elif question<15: - x=99 - y=99 - else: - x=999 - y=99 - operator=random.randint(1,4) - num_one=random.randint(0,x) - if operator==4: - num_two=random.randint(1,y) - else: - num_two=random.randint(0,y) - return operator,num_one,num_two - -print (input("Para comenzar presione cualquier tecla")) -try: - def interactive_game (): - error=0 - question=0 - while error == 0: - if question<20: - operator = operation(question) - result_operator=operator[0] - num_one =operator[1] - num_two = operator[2] - valor=request(result_operator,num_one,num_two) - if valor is None: - break - if operator[0] == 1: - - if valor == num_one + num_two: - print ("Correcto") - question += 1 - else: - print("Incorrecto") - elif operator[0] == 2: - if valor == num_one-num_two: - print ("Correcto") - question += 1 - else: - print("Incorrecto") - elif operator[0] == 3: - if valor == num_one*num_two: - print ("Correcto") - question += 1 - else: - print("Incorrecto") - else: - if valor == num_one//num_two: - print ("Correcto") - question += 1 - else: - print("Incorrecto") - - else: - error=1 - print(f"Ha respondido {question} respuesta/s correcta/s") - - interactive_game() -except ValueError: - print ("Error en la ejecución") -finally: - print("Ha finalizado el juego") From b28b2a86eaef21a837627d8985d6957fabc194d6 Mon Sep 17 00:00:00 2001 From: Fairdev <148779252+FedeAirala@users.noreply.github.com> Date: Tue, 21 Nov 2023 06:29:48 -0300 Subject: [PATCH 0783/2103] Create Fairdev.py --- .../python/Fairdev.py" | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Fairdev.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Fairdev.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Fairdev.py" new file mode 100644 index 0000000000..eb77d5d21a --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/Fairdev.py" @@ -0,0 +1,114 @@ +### Reto 44 Python ### + +""" + Crea un juego interactivo por terminal en el que tendrás que adivinar + el resultado de diferentes + operaciones matemáticas aleatorias (suma, resta, multiplicación + o división de dos números enteros). + - Tendrás 3 segundos para responder correctamente. + - El juego finaliza si no se logra responder en ese tiempo. + - Al finalizar el juego debes mostrar cuántos cálculos has acertado. + - Cada 5 aciertos debes aumentar en uno el posible número de cifras + de la operación (cada vez en un operando): + - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) + - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) + - Preguntas 11 a 15: XX operación YY + - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY + + """ +import random +from inputimeout import inputimeout, TimeoutOccurred + +operacion=["+","-","*","/"] + +def request (result_operator,num_one,num_two): + if result_operator== 1: + op= operacion[0] + elif result_operator==2: + op=operacion[1] + elif result_operator==3: + op=operacion[2] + else: + op=operacion[3] + while True: + try: + valor = (int(inputimeout(prompt=f"{num_one} {op} {num_two}: ",timeout=3))) + break + except TimeoutOccurred: + print ("Tiempo Agotado PERDISTE") + valor=None + break + return valor + +def operation(question): + num_one=0 + num_two=0 + if question<5: + x=9 + y=9 + elif question<10: + x=99 + y=9 + elif question<15: + x=99 + y=99 + else: + x=999 + y=99 + operator=random.randint(1,4) + num_one=random.randint(0,x) + if operator==4: + num_two=random.randint(1,y) + else: + num_two=random.randint(0,y) + return operator,num_one,num_two + +print (input("Para comenzar presione cualquier tecla")) +try: + def interactive_game (): + error=0 + question=0 + while error == 0: + if question<20: + operator = operation(question) + result_operator=operator[0] + num_one =operator[1] + num_two = operator[2] + valor=request(result_operator,num_one,num_two) + if valor is None: + break + if operator[0] == 1: + + if valor == num_one + num_two: + print ("Correcto") + question += 1 + else: + print("Incorrecto") + elif operator[0] == 2: + if valor == num_one-num_two: + print ("Correcto") + question += 1 + else: + print("Incorrecto") + elif operator[0] == 3: + if valor == num_one*num_two: + print ("Correcto") + question += 1 + else: + print("Incorrecto") + else: + if valor == num_one//num_two: + print ("Correcto") + question += 1 + else: + print("Incorrecto") + + else: + error=1 + print(f"Ha respondido {question} respuesta/s correcta/s") + + interactive_game() +except ValueError: + print ("Error en la ejecución") +finally: + print("Ha finalizado el juego") From 223561f2cdcd4ff342f5ed4f1e5641d4e53a2a5c Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Tue, 21 Nov 2023 12:17:29 -0300 Subject: [PATCH 0784/2103] first commint Reto13 --- .../python/rokmanhaman.py | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rokmanhaman.py diff --git a/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rokmanhaman.py b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rokmanhaman.py new file mode 100644 index 0000000000..5d44ac8dc9 --- /dev/null +++ b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rokmanhaman.py @@ -0,0 +1,77 @@ +""" +Reto #13: ADIVINA LA PALABRA +FÁCIL | Publicación: 27/03/23 | Resolución: 03/04/23 +/* + * Crea un pequeño juego que consista en adivinar palabras en un número máximo de intentos: + * - El juego comienza proponiendo una palabra aleatoria incompleta + * - Por ejemplo "m_ur_d_v", y el número de intentos que le quedan + * - El usuario puede introducir únicamente una letra o una palabra (de la misma longitud que + * la palabra a adivinar) + * - Si escribe una letra y acierta, se muestra esa letra en la palabra. Si falla, se resta + * uno al número de intentos + * - Si escribe una resolución y acierta, finaliza el juego, en caso contrario, se resta uno + * al número de intentos + * - Si el contador de intentos llega a 0, el jugador pierde + * - La palabra debe ocultar de forma aleatoria letras, y nunca puede comenzar + * ocultando más del 60% + * - Puedes utilizar las palabras que quieras y el número de intentos que consideres + */ + """ +import math +import random + +class Word(): + + def __init__(self, word, attemps): + self.word = word + self.attemps = attemps + + + def initial_sample(self): + max_zeros = 0.6 + + length = len(self.word) + bin = '' + for i in range(length): + if random.random() < max_zeros: + bin += self.word[i] + elif self.word[i] != " ": + bin += '_' + return bin + + def guess_word(self): + ini_sample = self.initial_sample() + + ini_sample_list = list(ini_sample) + print(f"la palabra a adivinar es: {ini_sample}") + + att = self.attemps + + while att > 0: + l = input("Ingrese una letra: ") + + if l in self.word: + index = [i for i, c in enumerate(self.word) if c == l] + for ind in index: + ini_sample_list[ind] = l + out = ''.join(ini_sample_list) + print(f"la palabra a adivinar es: {out}") + else: + att = att - 1 + print(f"la letra: {l} no se encuentra en la frase. Le quedan {att} intentos") + + if att == 0: + message = "GAME OVER!!!" + + out = ''.join(ini_sample_list) + + if self.word == out: + message = "WINNER!!!" + break + + return print(message) + + +word = Word("hola manola campeon", 5) +#print(word.initial_sample()) +word.guess_word() \ No newline at end of file From da8f13140818eaedb5710128e39c62e153859de5 Mon Sep 17 00:00:00 2001 From: Alexander Ortega Date: Tue, 21 Nov 2023 10:21:33 -0500 Subject: [PATCH 0785/2103] Create alexg1t.py --- .../python/alexg1t.py" | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/alexg1t.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/alexg1t.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/alexg1t.py" new file mode 100644 index 0000000000..020aeef05a --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/alexg1t.py" @@ -0,0 +1,106 @@ +# """ +# * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? +# * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. +# * Desde el 1 al 24 de diciembre. +# * +# * Crea un programa que simule el mecanismo de participación: +# * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar +# * participantes, mostrarlos, lanzar el sorteo o salir. +# * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. +# * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. +# * (Y no lo duplicarás) +# * - Si seleccionas mostrar los participantes, se listarán todos. +# * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. +# * (Avisando de si lo has eliminado o el nombre no existe) +# * - Si seleccionas realizar el sorteo, elegirás una persona al azar +# * y se eliminará del listado. +# * - Si seleccionas salir, el programa finalizará. +# """ + +import sqlite3 +import random + +#CREAR BASE DE DATOS +# Conectar a base de datos o crear si no existe +conn = sqlite3.connect('participantes.db') +# Crear un cursor +cursor = conn.cursor() +# Crear una tabla +cursor.execute('''CREATE TABLE IF NOT EXISTS participantes (nombre VARCHAR(50))''') + + +#FUNCIONES READ/UPDATE/DELETE +# Insertar participante +def a_participante(nombre): + # Comprobar si el participante ya existe + cursor.execute("SELECT * FROM participantes WHERE nombre=?", (nombre,)) + if cursor.fetchone() is not None: + print("Ya existe el participante") + # Si no existe, añadirlo + else: + cursor.execute("INSERT INTO participantes VALUES (?)", (nombre,)) + print("Participante añadido") +# Eliminar participante +def rm_participante(nombre): + # Comprobar si el participante existe + cursor.execute("SELECT * FROM participantes WHERE nombre=?", (nombre,)) + if cursor.fetchone() is not None: + cursor.execute("DELETE FROM participantes WHERE nombre=?", (nombre,)) + print("Participante eliminado") + # Si no existe, mostrar mensaje + else: + print("No existe el participante") +# Mostrar participantes +def m_participante(): + # Comprobar si hay participantes + cursor.execute("SELECT * FROM participantes") + participants = cursor.fetchall() + if participants: + print("Participantes:") + for participant in participants: + print(participant[0]) + else: + print("No hay participantes") +# Elegir participante ganador +def get_ganador(): + cursor.execute("SELECT * FROM participantes") + participantes = cursor.fetchall() + # Si hay participantes, elegir uno al azar y eliminarlo + if participantes: + winner = random.choice(participantes) + cursor.execute("DELETE FROM participantes WHERE nombre=?", (winner[0],)) + print("El ganador:", winner[0]) + # Si no hay participantes, mostrar mensaje + else: + print("No hay participantes") + +while True: + print("\n--- Menú ---") + print("1. Agregar participante") + print("2. Remover participante") + print("3. Mostrar participantes") + print("4. Elegir ganador") + print("5. Salir") + print("------------") + el = input("Elige opción (1-5): ") + + if el == "1": + nombre = input("Ingresa nombre del participante a añadir: ") + a_participante(nombre) + elif el == "2": + nombre = input("Ingresa nombre del participante a eliminar: ") + rm_participante(nombre) + elif el == "3": + m_participante() + elif el == "4": + get_ganador() + elif el == "5": + break + else: + print("Elije una opción válida") + +# Cerrar conexión +conn.commit() +conn.close() + + From e34b9f89926eaa8eda2dc4566de7521af2f47353 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cesar=20Daniel=20Pi=C3=B1a=20Gonzalez?= Date: Tue, 21 Nov 2023 12:13:35 -0600 Subject: [PATCH 0786/2103] Reto #40 - Javascript --- .../javascript/Cesarpinagon.js" | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/Cesarpinagon.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/Cesarpinagon.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/Cesarpinagon.js" new file mode 100644 index 0000000000..a97780e628 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/Cesarpinagon.js" @@ -0,0 +1,5 @@ +var numero = 5; //cambiar el numero para ver la tabla de multiplicar de otro numero + +for (var i = 1; i <= 10; i++) { + console.log(numero + " x " + i + " = " + (numero * i)) +} \ No newline at end of file From 71bdf3e0234ad3d21ea39a87c4ebabba4cf640c3 Mon Sep 17 00:00:00 2001 From: Exander <55327537+ExanderGuitar@users.noreply.github.com> Date: Tue, 21 Nov 2023 19:50:25 +0100 Subject: [PATCH 0787/2103] Add files via upload --- .../main.cpp" | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/main.cpp" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/main.cpp" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/main.cpp" new file mode 100644 index 0000000000..7780e90ee3 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/main.cpp" @@ -0,0 +1,137 @@ +#include +#include +#include + +int main() { + std::vector contestants {}; + + bool exitFlag {false}; + + while(!exitFlag) { + std::cout << "Sorteo Calendario de Adviento\n"; + std::cout << "=============================\n"; + std::cout << '\n'; + std::cout << "Selecciona una opcion.\n"; + std::cout << " 1. Nuevo participante.\n"; + std::cout << " 2. Borrar participante.\n"; + std::cout << " 3. Mostrar lista de participantes.\n"; + std::cout << " 4. Realizar sorteo.\n"; + std::cout << " 5. Salir.\n"; + std::cout << "\n >> "; + + int selection {}; + std::cin >> selection; + + std::cout << '\n'; + + switch(selection) { + case 1: + { + std::cout << "Cual es el nombre del participante?\n"; + std::cout << ">> "; + + std::string userName {}; + std::cin >> userName; + + bool userExists {false}; + + for(size_t i = 0; i < contestants.size(); i++) { + if(userName == contestants[i]) { + userExists = true; + } + } + + if(userExists) { + std::cout << "Este usuario ya existe.\n"; + } + else { + contestants.push_back(userName); + } + } + + std::cout << '\n'; + + break; + + case 2: + { + std::cout << "Que participante quieres borrar?\n"; + std::cout << ">> "; + + std::string userName {}; + std::cin >> userName; + + bool userExists {false}; + + for(size_t i = 0; i < contestants.size(); i++) { + if(userName == contestants[i]) { + contestants.erase(contestants.begin() + i); + userExists = true; + } + } + + std::cout << '\n'; + + userExists ? + std::cout << "El nombre ha sido borrado.\n" : + std::cout << "Este participante no existe.\n"; + + std::cout << '\n'; + } + break; + + case 3: + std::cout << "Esta es la lista de participantes.\n"; + std::cout << "==================================\n"; + + if(contestants.empty()) { + std::cout << "Aun no hay participantes.\n"; + } + else { + for(size_t i = 0; i < contestants.size(); i++) { + std::cout << contestants[i] << '\n'; + } + } + + std::cout << '\n'; + + break; + + case 4: + { + if(!contestants.empty()) { + std::cout << "Empieza el sorteo.\n"; + std::cout << '\n'; + std::cout << "El ganador es: "; + + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution numGenerator(0, contestants.size()); + int randomNumber = numGenerator(gen); + + std::cout << contestants[randomNumber] << '\n'; + + contestants.erase(contestants.begin() + randomNumber); + } + else { + std::cout << "No hay participantes para el sorteo.\n"; + } + + std::cout << '\n'; + } + break; + + case 5: + std::cout << "Hasta pronto"; + exitFlag = true; + break; + + default: + std::cout << "No te entinedo.\n"; + break; + } + + } + + return 0; +} From 52090e8e4641496f6f774785029c040427f5a4b7 Mon Sep 17 00:00:00 2001 From: Exander <55327537+ExanderGuitar@users.noreply.github.com> Date: Tue, 21 Nov 2023 19:51:15 +0100 Subject: [PATCH 0788/2103] =?UTF-8?q?Update=20and=20rename=20Retos/Reto=20?= =?UTF-8?q?#45=20-=20EL=20CALENDARIO=20DE=20ADEVIENTO=202023=20[F=C3=A1cil?= =?UTF-8?q?]/main.cpp=20to=20Retos/Reto=20#45=20-=20EL=20CALENDARIO=20DE?= =?UTF-8?q?=20ADEVIENTO=202023=20[F=C3=A1cil]/c++/exanderguitar.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../c++/exanderguitar.cpp" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/main.cpp" => "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c++/exanderguitar.cpp" (100%) diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/main.cpp" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c++/exanderguitar.cpp" similarity index 100% rename from "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/main.cpp" rename to "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c++/exanderguitar.cpp" From 7bcd45453c991d07b044418c6b33cab7d373e8b2 Mon Sep 17 00:00:00 2001 From: "Luis A. Guisado" <130678121+PushoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:16:27 -0400 Subject: [PATCH 0789/2103] Respuesta Reto 45 Agregar mi archivo de Reto No.45 "EL CALENDARIO DE ADEVIENTO 2023" --- .../python/PushoDev.py" | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/PushoDev.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/PushoDev.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/PushoDev.py" new file mode 100644 index 0000000000..bd028212a2 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/PushoDev.py" @@ -0,0 +1,98 @@ +# Reto #45: El calendario de aDEViento 2023 +# Dificultad: Fácil | Publicación: 20/11/23 | Corrección: 27/11/23 +#----------------------------------------------------------------- +# ENUNCIADO DEL EJERCICIO +#----------------------------------------------------------------- +# /* +# * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? +# * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. +# * Desde el 1 al 24 de diciembre. +# * +# * Crea un programa que simule el mecanismo de participación: +# * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar +# * participantes, mostrarlos, lanzar el sorteo o salir. +# * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. +# * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. +# * (Y no lo duplicarás) +# * - Si seleccionas mostrar los participantes, se listarán todos. +# * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. +# * (Avisando de si lo has eliminado o el nombre no existe) +# * - Si seleccionas realizar el sorteo, elegirás una persona al azar +# * y se eliminará del listado. +# * - Si seleccionas salir, el programa finalizará. +#----------------------------------------------------------------- + +import random + + +print ("Pushodev") +print ("https://github.com/PushoDev") + +class CalendarioAdvento: + def __init__(self): + self.participantes = [] + + def agregar_participante(self, nombre): + if nombre in self.participantes: + print(f"{nombre} ya está en la lista de participantes.") + else: + self.participantes.append(nombre) + print(f"{nombre} ha sido añadido a la lista.") + + def mostrar_participantes(self): + if not self.participantes: + print("No hay participantes en la lista.") + else: + print("Lista de participantes:") + for participante in self.participantes: + print(participante) + + def eliminar_participante(self, nombre): + if nombre in self.participantes: + self.participantes.remove(nombre) + print(f"{nombre} ha sido eliminado de la lista.") + else: + print(f"{nombre} no existe en la lista de participantes.") + + def realizar_sorteo(self): + if not self.participantes: + print("No hay participantes para realizar el sorteo.") + else: + participante_ganador = random.choice(self.participantes) + print(f"¡El ganador del sorteo es: {participante_ganador}!") + self.participantes.remove(participante_ganador) + +# Función principal +def calendario_advento(): + calendario = CalendarioAdvento() + + while True: + print("\n--- Calendario de aDEViento 2023 ---") + print("1. Añadir participante") + print("2. Mostrar participantes") + print("3. Eliminar participante") + print("4. Realizar sorteo") + print("5. Salir") + + opcion = input("Seleccione una opción (1-5): ") + + if opcion == "1": + nombre_participante = input("Ingrese el nombre del participante: ") + calendario.agregar_participante(nombre_participante) + elif opcion == "2": + calendario.mostrar_participantes() + elif opcion == "3": + nombre_participante = input("Ingrese el nombre del participante a eliminar: ") + calendario.eliminar_participante(nombre_participante) + elif opcion == "4": + calendario.realizar_sorteo() + elif opcion == "5": + print("Saliendo del programa. ¡Hasta luego!") + break + else: + print("Opción no válida. Por favor, seleccione una opción del 1 al 5.") + +# Ejecutar el programa +calendario_advento() + +print("Gracias por Participar......") \ No newline at end of file From 32b1372b905959e3a98140f8c96ac8c4a41f8c63 Mon Sep 17 00:00:00 2001 From: "Luis A. Guisado" <130678121+PushoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:25:02 -0400 Subject: [PATCH 0790/2103] Respuesta Reto 43 Agregar mi respuesta Reto No.43 - SIMULADOR DE CLIMA --- .../python/PushoDev.py" | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/PushoDev.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/PushoDev.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/PushoDev.py" new file mode 100644 index 0000000000..0f77ba605e --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/PushoDev.py" @@ -0,0 +1,85 @@ +# +# Reto #43: Simulador de clima +# Dificultad: Fácil | Publicación: 30/10/23 | Corrección: 13/11/23 +#----------------------------------------------------------------- +# ENUNCIADO DEL EJERCICIO +#----------------------------------------------------------------- +# /* +# * 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 disminuye 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. +# */ +#----------------------------------------------------------------- + +import random + + +print ("Pushodev") +print ("https://github.com/PushoDev") + +def simular_clima_interactivo(): + # Solicitar entrada del usuario + dias = int(input("Ingrese el número de días para la predicción: ")) + temp_inicial = float(input("Ingrese la temperatura inicial: ")) + prob_lluvia_inicial = float(input("Ingrese la probabilidad inicial de lluvia (0-1): ")) + + # Inicializar variables + temperatura = temp_inicial + prob_lluvia = prob_lluvia_inicial + llueve = False + dias_lluvia = 0 + temperaturas = [] + + # Simular condiciones climáticas + for _ in range(dias): + # 10% de posibilidades de cambio de temperatura + if random.random() < 0.1: + cambio_temperatura = random.choice([-2, 2]) + temperatura += cambio_temperatura + + # Ajustar probabilidad de lluvia según la temperatura + if temperatura > 25: + prob_lluvia += 0.2 + elif temperatura < 5: + prob_lluvia -= 0.2 + + # Verificar si llueve + llueve = random.random() < prob_lluvia + + # Ajustar temperatura si llueve + if llueve: + temperatura -= 1 + + # Registrar datos del día + temperaturas.append(temperatura) + + # Contar días de lluvia + if llueve: + dias_lluvia += 1 + + # Mostrar resultados + temp_maxima = max(temperaturas) + temp_minima = min(temperaturas) + + print(f"\nPredicción para los próximos {dias} días:") + print(f"Temperatura máxima: {temp_maxima}°C") + print(f"Temperatura mínima: {temp_minima}°C") + print(f"Días de lluvia: {dias_lluvia}") + print("Detalles por día:") + for i, temp in enumerate(temperaturas, start=1): + print(f"Día {i}: {temp}°C {'(lluvia)' if llueve else ''}") + +# Ejecutar la simulación interactiva +simular_clima_interactivo() + +print("Gracias por participar ...") From 744b6cd59276b4eb19d9eea9094cbba20d476dd6 Mon Sep 17 00:00:00 2001 From: "Luis A. Guisado" <130678121+PushoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:27:42 -0400 Subject: [PATCH 0791/2103] Agregar respuesta Agregar respuesta del Reto No.42 - PUNTO DE ENCUENTRO --- .../python/PushoDev.py" | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 "Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/PushoDev.py" diff --git "a/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/PushoDev.py" "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/PushoDev.py" new file mode 100644 index 0000000000..d4ba90cccd --- /dev/null +++ "b/Retos/Reto #42 - PUNTO DE ENCUENTRO [Dif\303\255cil]/python/PushoDev.py" @@ -0,0 +1,123 @@ +# Reto No.42 - Punto de Encuentro +# Dificultad: Difícil | Publicación: 23/10/23 | Corrección: 30/10/23 +#----------------------------------------------------------------- +# ENUNCIADO +# Crea una función que calcule el punto de encuentro de dos objetos en movimiento +# en dos dimensiones. +# - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento +# (vector de desplazamiento) por unidad de tiempo (también en formato xy). +# - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades. +# - La función calculará y mostrará el punto en el que se encuentran y el tiempo que tardarn en lograrlo. +# - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse. +# ... +#----------------------------------------------------------------- + +from typing import NamedTuple, Protocol, TypeAlias +import math + +print ("Pushodev") +print ("https://github.com/PushoDev") + +Number: TypeAlias = float | int + + +class Coordinates(NamedTuple): + x: Number + y: Number + + +class Velocity(Coordinates): + pass + + +class Object(NamedTuple): + start_point: Coordinates + velocity: Velocity + + +class Objects(NamedTuple): + object1: Object + object2: Object + + +def calculate_diff_coordinates( + obj1_coords: Coordinates, obj2_coords: Coordinates +) -> Coordinates: + diff_x = obj2_coords.x - obj1_coords.x + diff_y = obj2_coords.y - obj1_coords.y + + return Coordinates(x=diff_x, y=diff_y) + + +def calculate_diff_velocity(obj1_vel: Velocity, obj2_vel: Velocity) -> Velocity: + diff_vel_x = obj2_vel.x - obj1_vel.x + diff_vel_y = obj2_vel.y - obj1_vel.y + + return Velocity(x=diff_vel_x, y=diff_vel_y) + + +def calculate_time_to_intersection( + diff_coordinates: Coordinates, diff_velocity: Velocity +) -> float: + time_to_intersection = math.sqrt( + diff_coordinates.x**2 + diff_coordinates.y**2 + ) / math.sqrt(diff_velocity.x**2 + diff_velocity.y**2) + + return time_to_intersection + + +def calculate_intersection_point( + object1: Object, time_to_intersection: float +) -> Coordinates: + intersection_x = object1.start_point.x + object1.velocity.x * time_to_intersection + intersection_y = object1.start_point.y + object1.velocity.y * time_to_intersection + + return Coordinates(x=intersection_x, y=intersection_y) + + +def is_same_direction(diff_velocity: Velocity) -> bool: + return diff_velocity.x == 0 and diff_velocity.y == 0 + + +def calculate_intersection_point_in_motion(objects: Objects) -> None: + diff_coordinates: Coordinates = calculate_diff_coordinates( + objects.object1.start_point, objects.object2.start_point + ) + diff_velocity: Velocity = calculate_diff_velocity( + objects.object1.velocity, objects.object2.velocity + ) + + if is_same_direction(diff_velocity): + print("Los objetos o puntos de encuentro son paralelos y nunca se encuentran.") + return + + time_to_intersection = calculate_time_to_intersection( + diff_coordinates, diff_velocity + ) + intersection_point = calculate_intersection_point( + objects.object1, time_to_intersection + ) + intersection_x = intersection_point.x + intersection_y = intersection_point.y + + print(f"El punto de encuentro es ({intersection_x}, {intersection_y})") + print(f"El tiempo que les tomará encontrarse es {time_to_intersection}") + + +class MotionCalculatorFn(Protocol): + def __call__(self, objects: Objects) -> None: + ... + + +def execute(motion_calculator: MotionCalculatorFn, objects: Objects) -> None: + motion_calculator(objects=objects) + + +if __name__ == "__main__": + object1 = Object(start_point=Coordinates(x=2, y=2), velocity=Velocity(x=2, y=2)) + object2 = Object(start_point=Coordinates(x=2, y=2), velocity=Velocity(x=2, y=2)) + objects = Objects(object1=object1, object2=object2) + + execute(motion_calculator=calculate_intersection_point_in_motion, objects=objects) + +print ("Los puntos nunca se encuentran ... :(") \ No newline at end of file From 01e335892117759597b2e8528af0792b88dd0916 Mon Sep 17 00:00:00 2001 From: AlbertoVf Date: Tue, 21 Nov 2023 21:45:25 +0100 Subject: [PATCH 0792/2103] reto#45 - typescript --- .../typescript/albertovf.ts" | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/albertovf.ts" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/albertovf.ts" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/albertovf.ts" new file mode 100644 index 0000000000..6122520f22 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/albertovf.ts" @@ -0,0 +1,56 @@ +let participantes: String[] = ["Anonimo", "1", "2", "3", "4"] + +const add = (participante: String) => { + if (participantes.indexOf(participante) != -1) { + participantes.push(participante) + } else { + console.log(`El participante ${participante} ya existe`); + } +} + +const del = (participante: String) => { + let l = participantes.findIndex(i => i == participante) + if (l == -1) { + console.log(`El participante ${participante} no existe`); + } else { + participantes.splice(l, 1); + } +} + +const mostrar = () => { + console.log(participantes); +} + +const sortear = () => { + let numero = Math.floor(Math.random() * participantes.length) + console.log(`El ganador es Nº${numero} ${participantes[numero]}`); + participantes.splice(numero, 1) +} + +const reto = () => { + + while (true) { + const accion = prompt('Selecciona una opcion [A]ñadir, [S]ortear, [B]orrar, [M]ostrar, [E]xit') + + switch (accion) { + case 'A': + add(prompt('Introduce el nombre que quieres agregar:') || "") + break; + case 'S': + sortear() + break; + case 'B': + del(prompt('Introduce el nombre que quieres borrar: ') || "") + break; + case 'M': + mostrar(); + break; + case 'E': + return false; + default: + mostrar() + break; + } + } +} +reto() \ No newline at end of file From 622a9f77f39b7b8376a5920489185e0e49580827 Mon Sep 17 00:00:00 2001 From: deathiwng Date: Tue, 21 Nov 2023 23:28:49 +0100 Subject: [PATCH 0793/2103] Reto #45 - C# --- .../c#/deathwing696.cs" | 165 ++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/deathwing696.cs" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/deathwing696.cs" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/deathwing696.cs" new file mode 100644 index 0000000000..80f8667986 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/deathwing696.cs" @@ -0,0 +1,165 @@ +/* + * Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 das, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participacin: + * - Mediante la terminal, el programa te preguntar si quieres aadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - Si seleccionas aadir un participante, podrs escribir su nombre y pulsar enter. + * - Si seleccionas aadir un participante, y este ya existe, avisars de ello. + * (Y no lo duplicars) + * - Si seleccionas mostrar los participantes, se listarn todos. + * - Si seleccionas eliminar un participante, podrs escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - Si seleccionas realizar el sorteo, elegirs una persona al azar + * y se eliminar del listado. + * - Si seleccionas salir, el programa finalizar. + */ + +using System; +using System.Collections.Generic; +using System.ComponentModel.Design; +using System.Text.RegularExpressions; +using System.Threading; + +namespace reto45 +{ + public class Reto45 + { + static void Main(string[] args) + { + int opcion; + List participantes = new List(); + + do + { + opcion = Menu(); + + switch (opcion) + { + case 0: + break; + + case 1: + Append_participante(participantes); + break; + + case 2: + Delete_participante(participantes); + break; + + case 3: + Console.WriteLine("Lista de participantes:"); + + foreach (var participante in participantes) + { + Console.WriteLine(participante.ToString()); + } + + break; + + case 4: + Realizar_sorteo(participantes); + break; + + default: + Console.WriteLine("Opcin invlida, por favor introduzca una opcin vlida (Del 0 al 4)"); + opcion = 5; + break; + + } + } while (opcion != 0); + + Console.WriteLine("Adioooooos!"); + Console.ReadKey(); + } + + private static int Menu() + { + string cadena; + + Console.WriteLine("*************************************************************"); + Console.WriteLine("** Bienvenido al calendario de aDEViento Qu desea hacer? **"); + Console.WriteLine("** 1. Aadir participante **"); + Console.WriteLine("** 2. Borrar participante **"); + Console.WriteLine("** 3. Mostrar lista de participantes **"); + Console.WriteLine("** 4. Lanzar el sorteo **"); + Console.WriteLine("** 0. Salir **"); + Console.WriteLine("*************************************************************"); + + cadena = Console.ReadLine(); + + if (Int32.TryParse(cadena, out int opcion)) + { + return opcion; + } + else + { + Console.WriteLine("Opcin invlida, por favor introduzca una opcin vlida (Del 0 al 4)"); + return Menu(); + } + } + + private static void Append_participante(List participantes) + { + string participante, pattern = "^[a-zA-Z--0-9_.]+$"; + Regex regex = new Regex(pattern); + + Console.Write("Introduce el nombre del nuevo participante:"); + participante = Console.ReadLine(); + + if (regex.IsMatch(participante)) + { + if (participantes.Contains(participante)) + { + Console.WriteLine("El participante ya existe en la lista"); + } + else + { + participantes.Add(participante); + Console.WriteLine("Participante aadido"); + } + } + else + { + Console.WriteLine("Por favor, introduzca un nombre de usuario vlido compuesto por letras, nmeros o los caracteres \"_\" o \".\""); + } + } + + private static void Delete_participante(List participantes) + { + string participante; + + Console.WriteLine("Introduce el nombre del participante a eliminar"); + participante = Console.ReadLine(); + + if (participantes.Remove(participante)) + { + Console.WriteLine($"Participante {participante} eliminado con xito"); + } + else + { + Console.WriteLine($"El participante {participante} no existe en la lista y no ha podido ser eliminado"); + } + } + + private static void Realizar_sorteo(List participantes) + { + Random random = new Random(); + int ganador; + + if (participantes.Count > 0) + { + Console.Write("Se va a proceder a realizar el sorteo...el ganador es..."); + ganador = random.Next(0, participantes.Count-1); + Thread.Sleep(3000); + Console.WriteLine($"{participantes[ganador]}"); + } + else + { + Console.WriteLine("No se puede lanzar el sorteo, la lista est vaca, por favor, introduce, al menos, un participante"); + } + } + } +} \ No newline at end of file From 3fda3d813e81a8dfb1de8a2b3b668da0abbdb04d Mon Sep 17 00:00:00 2001 From: giovany osorio Date: Tue, 21 Nov 2023 17:59:02 -0500 Subject: [PATCH 0794/2103] Reto #24 Javascript --- .../javascript/giovanyosorio.js" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/javascript/giovanyosorio.js" diff --git "a/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/javascript/giovanyosorio.js" "b/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/javascript/giovanyosorio.js" new file mode 100644 index 0000000000..621e51d1a1 --- /dev/null +++ "b/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/javascript/giovanyosorio.js" @@ -0,0 +1,49 @@ +function cifrar(palabra, clave){ + let letra,respuesta="" + let alfabeto = 'abcdefghijklmnopqrstuvwxyz'; + let cifrado=alfabeto.slice(-clave) + console.log(cifrado) + cifrado+=alfabeto.slice(0,alfabeto.length-clave) + console.log("cifrado "+ cifrado) + console.log(palabra.length) + + for(let i=0;i Date: Tue, 21 Nov 2023 18:02:12 -0500 Subject: [PATCH 0795/2103] Reto #24 Javascript --- .vscode/settings.json | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index b242572efb..0000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "githubPullRequests.ignoredPullRequestBranches": [ - "main" - ] -} \ No newline at end of file From d0f519c13cd1723e74e2d0a204f4c65fdefa5210 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Tue, 21 Nov 2023 20:16:58 -0300 Subject: [PATCH 0796/2103] second commint Reto13 --- .../python/rokmanhaman.py | 67 ++++++++++--------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rokmanhaman.py b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rokmanhaman.py index 5d44ac8dc9..955cc1e380 100644 --- a/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rokmanhaman.py +++ b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rokmanhaman.py @@ -29,49 +29,54 @@ def __init__(self, word, attemps): def initial_sample(self): max_zeros = 0.6 - - length = len(self.word) - bin = '' - for i in range(length): - if random.random() < max_zeros: - bin += self.word[i] - elif self.word[i] != " ": - bin += '_' - return bin + hidden_word = "" + word_list = self.word.split() + + for word in word_list: + for i, letter in enumerate(word): + if random.random() < max_zeros: + hidden_word += word[i] + else: + hidden_word += '_' + + hidden_word = hidden_word + " " + + return hidden_word[:-1] def guess_word(self): - ini_sample = self.initial_sample() - ini_sample_list = list(ini_sample) - print(f"la palabra a adivinar es: {ini_sample}") + dict_hidden = {index: character for index, character in enumerate(self.initial_sample())} + dict_word = {index: character for index, character in enumerate(self.word)} + att = self.attemps + a = ''.join(dict_hidden.values()) + b = ''.join(dict_word.values()) + while att > 0: - l = input("Ingrese una letra: ") - if l in self.word: - index = [i for i, c in enumerate(self.word) if c == l] - for ind in index: - ini_sample_list[ind] = l - out = ''.join(ini_sample_list) - print(f"la palabra a adivinar es: {out}") - else: - att = att - 1 - print(f"la letra: {l} no se encuentra en la frase. Le quedan {att} intentos") - - if att == 0: - message = "GAME OVER!!!" + print(f"la palabra a adivinar es: {''.join(dict_hidden.values())}") + letter = input("Ingrese una letra: ") + + if letter not in dict_word.values(): + att = att - 1 + print(f"la letra: {letter} no se encuentra en la frase. Le quedan {att} intentos") - out = ''.join(ini_sample_list) - - if self.word == out: - message = "WINNER!!!" + elif dict_hidden == dict_word: + out = "WiNNer!!!" break + + else: + indexs = [key for key, value in dict_word.items() if value == letter] + for index in indexs: + dict_hidden[index] = letter - return print(message) + if att == 0: + out = "GaMe OvEr!!!" + + return print(out) - word = Word("hola manola campeon", 5) #print(word.initial_sample()) word.guess_word() \ No newline at end of file From b44c10e429cac04b0bdd513e9bd3850f4fe800c0 Mon Sep 17 00:00:00 2001 From: Giovany Osorio <30839218+giovanyosorio@users.noreply.github.com> Date: Tue, 21 Nov 2023 19:06:06 -0500 Subject: [PATCH 0797/2103] =?UTF-8?q?Delete=20Retos/Reto=20#15=20-=20AUREB?= =?UTF-8?q?ESH=20[F=C3=A1cil]/javascript/giovanyosorio.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/giovanyosorio.js" | 49 ------------------- 1 file changed, 49 deletions(-) delete mode 100644 "Retos/Reto #15 - AUREBESH [F\303\241cil]/javascript/giovanyosorio.js" diff --git "a/Retos/Reto #15 - AUREBESH [F\303\241cil]/javascript/giovanyosorio.js" "b/Retos/Reto #15 - AUREBESH [F\303\241cil]/javascript/giovanyosorio.js" deleted file mode 100644 index 0835ec8903..0000000000 --- "a/Retos/Reto #15 - AUREBESH [F\303\241cil]/javascript/giovanyosorio.js" +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Crea una función que sea capaz de transformar Español al lenguaje básico del universo - * Star Wars: el "Aurebesh". - * - Puedes dejar sin transformar los caracteres que no existan en "Aurebesh". - * - También tiene que ser capaz de traducir en sentido contrario. - * - * ¿Lo has conseguido? Nómbrame en twitter.com/mouredev y escríbeme algo en Aurebesh. - * - * ¡Que la fuerza os acompañe! - */ - -const aurebesh = { - 'A': 'Aurek', - 'B': 'Besh', - 'C': 'Cresh', - 'D': 'Dorn', - 'E': 'Esk', - 'F': 'Forn', - 'G': 'Grek', - 'H': 'Herf', - 'I': 'Isk', - 'J': 'Jenth', - 'K': 'Krill', - 'L': 'Leth', - 'M': 'Mern', - 'N': 'Nern', - 'O': 'Osk', - 'P': 'Peth', - 'Q': 'Qek', - 'R': 'Resh', - 'S': 'Senth', - 'T': 'Trill', - 'U': 'Usk', - 'V': 'Vev', - 'W': 'Wesk', - 'X': 'Xesh', - 'Y': 'Yirt', - 'Z': 'Zerek' -} - - -function translateToAurebesh(text) { - return text.split('').map(char => aurebesh[char.toUpperCase()] || char).join(''); -} - - - -console.log(translateToAurebesh('Hola Mundo')); - From 1841ab62cd0ccb9839dede75944442b50e3b9689 Mon Sep 17 00:00:00 2001 From: Giovany Osorio <30839218+giovanyosorio@users.noreply.github.com> Date: Wed, 22 Nov 2023 00:11:55 +0000 Subject: [PATCH 0798/2103] Reto #24 Js --- .../javascript/giovanyosorio.js" | 1 + 1 file changed, 1 insertion(+) diff --git "a/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/javascript/giovanyosorio.js" "b/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/javascript/giovanyosorio.js" index 621e51d1a1..7b8458bf5e 100644 --- "a/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/javascript/giovanyosorio.js" +++ "b/Retos/Reto #24 - CIFRADO C\303\211SAR [F\303\241cil]/javascript/giovanyosorio.js" @@ -26,6 +26,7 @@ function cifrar(palabra, clave){ } + function descifrar(palabra, clave){ let letra,respuesta="" From febf10c7adcf8c1fdb35d6b5f9b9cee8180908bd Mon Sep 17 00:00:00 2001 From: Luis Lopez Date: Tue, 21 Nov 2023 18:33:13 -0800 Subject: [PATCH 0799/2103] Reto #45 --- .../shell/luishendrix92.sh" | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/shell/luishendrix92.sh" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/shell/luishendrix92.sh" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/shell/luishendrix92.sh" new file mode 100644 index 0000000000..8280b278d8 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/shell/luishendrix92.sh" @@ -0,0 +1,108 @@ +#f/bin/bash + +participants=() + +participant_exists() { + local already_entered=false + + for entry in "${participants[@]}"; do + if [[ "$entry" == "$1" ]]; then + already_entered=true + break + fi + done + + echo "$already_entered" +} + +add_entry() { + if [[ "$(participant_exists $1)" == false ]]; then + participants+=("$1") + echo "Successfully added $1 to the list!" + else + echo "The name $1 was already registered..." + fi +} + +remove_entry() { + if [[ "$(participant_exists $1)" == true ]]; then + for i in "${!participants[@]}"; do + if [[ ${participants[i]} = $1 ]]; then + unset 'participants[i]' + fi + done + + for i in "${!participants[@]}"; do + participants_copy+=("${participants[i]}") + done + + participants=("${participants_copy[@]}") + unset participants_copy + echo "The name $1 was successfully removed!" + else + echo "There was no $1 to remove..." + fi +} + +list_entries() { + for entry in "${participants[@]}"; do + echo "$entry" + done +} + +pick_winner() { + if [ ${#participants[@]} -eq 0 ]; then + echo "The list of participants is empty." + else + winner="${participants[ $RANDOM % ${#participants[@]} ]}" + + echo "And the winner is: $winner! 🎉" + fi +} + +while true; do + clear + + echo "What do you want to do?" + echo "-----------------------" + echo "1- List all participants." + echo "2- Add a new participant." + echo "3- Remove a participant." + echo "4- Choose a lucky winner!" + echo "5- EXIT" + + read -p "Choose an option: " user_option + clear + + case $user_option in + 1) + echo "Entry list" + echo "----------" + list_entries + ;; + + 2) + read -p "Enter the name you wish to add: " new_name + add_entry "$new_name" + ;; + + 3) + read -p "Enter the name you wish to remove: " to_remove + remove_entry "$to_remove" + ;; + + 4) + pick_winner + ;; + + 5) + exit 0 + ;; + + *) + echo "Unknown option [$user_option]." + ;; + esac + + read -p $'\n'"Press to continue..." +done From 271ef3d0b620ba3126ea86db6885bfe2e8734ef1 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Tue, 21 Nov 2023 21:34:43 -0600 Subject: [PATCH 0800/2103] add askQuestion, startSortingHat feature --- .../javascript/marvnramos.js | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/javascript/marvnramos.js b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/javascript/marvnramos.js index e69de29bb2..b76f1edaa5 100644 --- a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/javascript/marvnramos.js +++ b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/javascript/marvnramos.js @@ -0,0 +1,67 @@ +/* + * Crea un programa que simule el comportamiento del sombrero seleccionador del + * universo mágico de Harry Potter. + * - De ser posible realizará 5 preguntas (como mínimo) a través de la terminal. + * - Cada pregunta tendrá 4 respuestas posibles (también a selecciona una a través de terminal). + * - En función de las respuestas a las 5 preguntas deberás diseñar un algoritmo que + * coloque al alumno en una de las 4 casas de Hogwarts (Gryffindor, Slytherin , Hufflepuff y Ravenclaw) + * - Ten en cuenta los rasgos de cada casa para hacer las preguntas y crear el algoritmo seleccionador. + * Por ejemplo, en Slytherin se premia la ambición y la astucia. + */ + +const readline = require('readline'); + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +function askQuestion(question, options) { + return new Promise((resolve, reject) => { + const formattedOptions = options.map((option, index) => `${index + 1}. ${option}`); + rl.question(`${question}\n${formattedOptions.join('\n')}\n`, (answer) => { + const selectedOption = parseInt(answer); + if (isNaN(selectedOption) || selectedOption < 1 || selectedOption > options.length) { + console.log('Respuesta no válida. Por favor, elige una opción válida.'); + reject(); + } else { + resolve(selectedOption); + } + }); + }); +} + +async function startSortingHat() { + console.log('¡Bienvenido al Sombrero Seleccionador de Hogwarts!'); + + const answers = []; + + // Preguntas + answers.push(await askQuestion('¿Qué cualidad valoras más?', ['Valentía', 'Ambición', 'Lealtad', 'Intelecto'])); + answers.push(await askQuestion('¿Cómo te enfrentas a los desafíos?', ['Con coraje', 'Con astucia', 'Con paciencia', 'Con sabiduría'])); + answers.push(await askQuestion('¿Cuál es tu animal favorito?', ['León', 'Serpiente', 'Tejón', 'Águila'])); + answers.push(await askQuestion('¿Qué color te gusta más?', ['Rojo', 'Verde', 'Amarillo', 'Azul'])); + answers.push(await askQuestion('¿Qué actividad disfrutas más?', ['Deportes', 'Planificación estratégica', 'Cuidar de otros', 'Estudio'])); + + // Algoritmo de selección de casa + const totalGryffindor = answers[0] + answers[1]; + const totalSlytherin = answers[1] + answers[3]; + const totalHufflepuff = answers[2] + answers[4]; + const totalRavenclaw = answers[4] + answers[3]; + + const maxTotal = Math.max(totalGryffindor, totalSlytherin, totalHufflepuff, totalRavenclaw); + + if (maxTotal === totalGryffindor) { + console.log('¡Eres de Gryffindor!'); + } else if (maxTotal === totalSlytherin) { + console.log('¡Eres de Slytherin!'); + } else if (maxTotal === totalHufflepuff) { + console.log('¡Eres de Hufflepuff!'); + } else { + console.log('¡Eres de Ravenclaw!'); + } + + rl.close(); +} + +startSortingHat(); From 039ef896fc5073f20af1e49b64abb183e4bce9c5 Mon Sep 17 00:00:00 2001 From: Carolina Date: Wed, 22 Nov 2023 00:20:03 -0500 Subject: [PATCH 0801/2103] Reto #[45] - [Python] --- .../python/angiedylexx.py" | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/angiedylexx.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/angiedylexx.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/angiedylexx.py" new file mode 100644 index 0000000000..1b47dd4b24 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/angiedylexx.py" @@ -0,0 +1,59 @@ +import random + +class calendarioAdvento: + def __init__(self): + self.participantes = [] + def mostrar_menu(self): + print("1. Añadir participante") + print("2. Mostrar participantes") + print("3. Eliminar participante") + print("4. Realizar sorteo") + print("5. SALIR") + + def añadirParticipante(self, nombre): + nombre = nombre.lower() + if nombre not in self.participantes: + self.participantes.append(nombre) + print (f"Participante {nombre} añadido") + else : + print ("El participante ya existe") + + def mostrarParticipantes(self): + print("Participantes:") + print("\n".join(self.participantes)) #Join(), concatena los nobres con una salto de linea + + def eliminarParticipante(self, nombre): + if nombre in self.participantes: + self.participantes.remove(nombre) + print (f"Participante {nombre} eliminado") + else : + print ("El participante no encontrado") + + def realizarSorteo(self): + if not self.participantes: + print("No hay participantes para realizar el sorteo") + else: + random.shuffle(self.participantes) + ganador = self.participantes.pop() + print(f"¡El participante ganador es: {ganador}!") + +calendario = calendarioAdvento() + +while True: #puesto solo se sale , al oprimir salir + + calendario.mostrar_menu() + seleccion = input("Selecciona una opción (1-5):") + + if seleccion == "1": + calendario.añadirParticipante(input("Introduce el nombre del participante: ")) + elif seleccion == "2": + calendario.mostrarParticipantes() + elif seleccion == "3": + calendario.eliminarParticipante(input("Introduce el nombre del participante a eliminar: ")) + elif seleccion == "4": + calendario.realizarSorteo() + elif seleccion == "5": + print("¡Hasta luego!") + break + else: + print("Opción no válida. Intentalo de nuevo") \ No newline at end of file From ddb8b46bdbfb70784764397ddb5e1dae77f9c4aa Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Wed, 22 Nov 2023 09:22:37 +0100 Subject: [PATCH 0802/2103] Reto #45 - Kotlin --- .../kotlin/pisanowp.kt" | 153 ++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/pisanowp.kt" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/pisanowp.kt" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/pisanowp.kt" new file mode 100644 index 0000000000..7aae09ce26 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/pisanowp.kt" @@ -0,0 +1,153 @@ +package retos2023 + +fun main() { + + /* + * Reto #45 20/11/2023 EL CALENDARIO DE ADEVIENTO 2023 + * + * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participación: + * - [X] Mediante la terminal, el programa te preguntará si quieres añadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - [X] Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. + * - [X] Si seleccionas añadir un participante, y este ya existe, avisarás de ello. + * (Y no lo duplicarás) + * - [X] Si seleccionas mostrar los participantes, se listarán todos. + * - [X] Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - [X] Si seleccionas realizar el sorteo, elegirás una persona al azar + * y se eliminará del listado. + * - [X] Si seleccionas salir, el programa finalizará. + * + */ + + val cal = CalendarioADeviento() + cal.menu() + + +} + +class CalendarioADeviento() { + + private val participantes: MutableList = mutableListOf() + + fun menu() { + + var opcion = 0 + while (opcion != 5) { + println() + println("1 - Añadir participante") + println("2 - Borrar participante") + println("3 - Listar participantes") + println("4 - Realizar sorteo") + println("5 - Salir") + opcion = pideNumeroPositivo("Elige una opción") + + when (opcion) { + 1 -> addParticipante() + 2 -> borrarParticipante() + 3 -> listarParticipantes() + 4 -> realizarSorteo() + 5 -> println("Fin") + else -> println("Opción no válida") + } + + } + + } + + fun realizarSorteo() { + if (participantes.isEmpty()) { + println("Aún no hay participantes en la lista. Añade alguno antes de realizar el sorteo") + + } else { + println("El ganador es ${participantes.random()} ¡¡ENHORABUENA!!") + } + + } + + fun listarParticipantes() { + if (participantes.isEmpty()) { + println("Aún no hay participantes en la lista.") + + } else { + println("Lista de participantes") + participantes.forEach() { + println(it) + + } + + } + } + + fun borrarParticipante() { + val participante = pedirNombreParticipante("Introduce el participante a añadir") + if (participantes.contains(participante)) { + participantes.remove(participante) + println("$participante eliminado a la lista de participantes.") + + } else { + println("$participante NO ESTA en la lista de participantes.") + + } + + + } + + fun addParticipante() { + val participante = pedirNombreParticipante("Introduce el participante a añadir") + if (participantes.contains(participante)) { + println("$participante YA ESTA en la lista de participantes.") + } else { + participantes.add(participante) + println("$participante añadido a la lista de participantes.") + } + } + + + fun pedirNombreParticipante(pregunta: String): String { + + var valido = false + var input: String? = null + + while (!valido) { + print("$pregunta >") + input = readLine() + if (input != null) { + valido = true + } + } + + return input!! + + } + + fun pideNumeroPositivo( etiqueta : String): Int { + var numero: Int? = null + var valido = false + + while (!valido) { + print("Introduce $etiqueta >") + val input = readLine() + + try { + numero = input?.toInt() + if (numero != null) { + if (numero > 0){ + valido = true + } else { + println("Entrada inválida. Debes ingresar un número entero positivo.") + } + } + + } catch (e: NumberFormatException) { + println("Entrada inválida. Debes ingresar un número entero positivo.") + } + } + return numero!! + } + +} \ No newline at end of file From e71802f4aa61b9a662d1c05cf0c5c6c16cc899c4 Mon Sep 17 00:00:00 2001 From: Fairdev <148779252+FedeAirala@users.noreply.github.com> Date: Wed, 22 Nov 2023 06:27:36 -0300 Subject: [PATCH 0803/2103] Fairdev.py --- .../python/Fairdev.py" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/Fairdev.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/Fairdev.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/Fairdev.py" new file mode 100644 index 0000000000..aa0cf66b6e --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/Fairdev.py" @@ -0,0 +1,31 @@ +### Reto 3 ### + +""" + Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + Podrás configurar generar contraseñas con los siguientes parámetros: + - Longitud: Entre 8 y 16. + - Con o sin letras mayúsculas. + - Con o sin números. + - Con o sin símbolos. + (Pudiendo combinar todos estos parámetros entre ellos) +""" +import random + +def characters (numbers=False,symbol=False): + cont=random.randint(8,16) + contraseña="" + character=list (range(97,123)) + if numbers: + character+=list (range(48,58)) + if symbol: + character+= list(range(33, 48)) + list(range(58, 65)) + list(range(91, 97)) + for i in range (cont): + contraseña+=chr(random.choice(character)) + print (f"La contrseña tiene {cont} dígitos") + return contraseña + + +print (characters()) +print (characters(numbers=True)) +print (characters(symbol=True)) +print (characters(numbers=True,symbol=True)) From 55f13b59ada84a2c5a5d296886b89764b366d06e Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Wed, 22 Nov 2023 08:51:18 -0300 Subject: [PATCH 0804/2103] Reto 13 - Python --- .../python/rokmanhaman.py | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rokmanhaman.py b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rokmanhaman.py index 955cc1e380..70751a8cfa 100644 --- a/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rokmanhaman.py +++ b/Retos/Reto #13 - ADIVINA LA PALABRA [Media]/python/rokmanhaman.py @@ -56,24 +56,31 @@ def guess_word(self): while att > 0: - print(f"la palabra a adivinar es: {''.join(dict_hidden.values())}") - letter = input("Ingrese una letra: ") - - if letter not in dict_word.values(): - att = att - 1 - print(f"la letra: {letter} no se encuentra en la frase. Le quedan {att} intentos") - - elif dict_hidden == dict_word: + if list(dict_hidden.values()).count("_") == 0: out = "WiNNer!!!" break - + else: - indexs = [key for key, value in dict_word.items() if value == letter] - for index in indexs: - dict_hidden[index] = letter + print(f"la palabra a adivinar es: {''.join(dict_hidden.values())}") + letter = input("Ingrese una letra: ") + + if letter not in dict_word.values(): + att = att - 1 + print(f"la letra: {letter} no se encuentra en la frase. Le quedan {att} intentos") + + """ + elif dict_hidden == dict_word: + out = "WiNNer!!!" + break + """ + else: + indexs = [key for key, value in dict_word.items() if value == letter] + + for index in indexs: + dict_hidden[index] = letter - if att == 0: - out = "GaMe OvEr!!!" + if att == 0: + out = "GaMe OvEr!!!" return print(out) From 7fd3dd70a5f74199611a73cd6e16b76e59462610 Mon Sep 17 00:00:00 2001 From: Hector Date: Wed, 22 Nov 2023 15:15:56 +0100 Subject: [PATCH 0805/2103] Reto #45 - Javascript --- .../javascript/HectorIglesias.js" | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/HectorIglesias.js" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/HectorIglesias.js" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/HectorIglesias.js" new file mode 100644 index 0000000000..cd8beef32d --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/HectorIglesias.js" @@ -0,0 +1,85 @@ +/* + * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participación: + * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. + * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. + * (Y no lo duplicarás) + * - Si seleccionas mostrar los participantes, se listarán todos. + * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - Si seleccionas realizar el sorteo, elegirás una persona al azar + * y se eliminará del listado. + * - Si seleccionas salir, el programa finalizará. + */ + +function program(){ + + const array_part = ["Pepe", "Julio"] + let aux = true + + console.log("Bienvenido. A continuación te mostramos las acciones posibles") + + while(aux){ + console.log("1. Añadir participante") + console.log("2. Borrar participante") + console.log("3. Mostrar participantes") + console.log("4. Lanzar sorteo") + console.log("5. Salir") + let respuesta = prompt("¿Qué deseas hacer? ") + respuesta = parseInt(respuesta) + + if(respuesta == 1) add(array_part) + else if (respuesta == 2) erase(array_part) + else if (respuesta == 3) show(array_part) + else if (respuesta == 4) sorteo(array_part) + else if (respuesta == 5){ + aux = false + } + } + +} + +function add(array_part){ + let respuesta = prompt("Escriba el nombre del participante: ") + + + if(array_part.includes(respuesta)){ + console.log("Este participante ya existe, introduzca otro nombre") + add(array_part) + } + else{ + array_part.push(respuesta) + } +} + +function erase(array_part){ + let respuesta = prompt("Escriba el nombre del participante: ") + + if(array_part.includes(respuesta)){ + let index = array_part.indexOf(respuesta) + array_part.splice(index, 1) + } + else{ + console.log("Este participante no existe. Introduzca otro nombre.") + erase(array_part) + } +} + +function show(array_part){ + for(let i=0; i Date: Wed, 22 Nov 2023 17:18:25 +0100 Subject: [PATCH 0806/2103] Reto mouredev #45 - Python --- .../python/troleomotor10.py" | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/troleomotor10.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/troleomotor10.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/troleomotor10.py" new file mode 100644 index 0000000000..3321e0d768 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/troleomotor10.py" @@ -0,0 +1,132 @@ +# /* +# * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? +# * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. +# * Desde el 1 al 24 de diciembre. +# * +# * Crea un programa que simule el mecanismo de participación: +# * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar +# * participantes, mostrarlos, lanzar el sorteo o salir. +# * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. +# * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. +# * (Y no lo duplicarás) +# * - Si seleccionas mostrar los participantes, se listarán todos. +# * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. +# * (Avisando de si lo has eliminado o el nombre no existe) +# * - Si seleccionas realizar el sorteo, elegirás una persona al azar +# * y se eliminará del listado. +# * - Si seleccionas salir, el programa finalizará. +# */ +import os +import random +import time + +participantes = [] + +def empty_list(): + if len(participantes) <= 0: + return True + +def add_user(): + os.system("cls") + print("=== AÑADIR USUARIOS ===") + while True: + try: + cantidad = int(input("Cuantos participante te gustaría añadir: ")) + for x in range(cantidad): + encontrado = False + user = input("Nombre del participantes a agregar: ") + if empty_list(): + participantes.append(user.capitalize()) + else: + for z in participantes: + if z.lower() == user.lower(): + print("El participante ya existe!") + encontrado = True + break + if not encontrado: + participantes.append(user.capitalize()) + break + except: + print("El valor introducido no es correcto!") + input("Pulsa una tecla para continuar...") + menu() + +def remove_user(): + os.system("cls") + print("=== QUITAR USUARIOS ===") + if empty_list(): + print("No existen usuarios dentro de la lista.") + input("Pulsa una tecla para continuar...") + menu() + else: + user = input("Que usuario te gustaría eliminar: ") + encontrado = False + for x in participantes: + if user.capitalize() == x.capitalize(): + encontrado = True + if encontrado: + participantes.remove(user.capitalize()) + print("El usuario ha sido eliminado!") + else: + print("El usuario no se ha encontrado!") + input("Pulsa una tecla para continuar...") + menu() + +def list_users(): + os.system("cls") + print("=== LISTA DE PARTICIPANTES ===") + for i in participantes: + print(i) + print("Hay {} participantes en la lista".format(len(participantes))) + input("Pulsa una tecla para continuar...") + menu() + +def start_giveway(): + os.system("cls") + print("=== SORTEO ===") + if empty_list(): + print("¡No hay participantes! ¡El sorteo no se puede realizar!") + input("Pulsa una tecla para salir....") + menu() + else: + print("El ganador es....") + for x in range(3,0, -1): + print(x) + time.sleep(1) + winner = random.choice(participantes) + print("¡{} se lleva el premio! ¡Muchas felicidades!".format(winner)) + participantes.remove(winner) + input("Pulsa una tecla para salir....") + menu() + +def showapp(option): + if option == 1: + add_user() + elif option == 2: + remove_user() + elif option == 3: + list_users() + elif option == 4: + start_giveway() + elif option == 5: + print("¡Que tengas un buen dia!") + exit() + +def menu(): + option = 0 + try: + while(int(option) not in {1, 2, 3, 4, 5}): + os.system("cls") + print("=== MENU CALENDARIO ADVIENTO 2023 ===") + print("[1] Añadir participante") + print("[2] Borrar participante") + print("[3] Listar participante") + print("[4] Comenzar sorteo") + print("[5] Salir") + option = int(input("Introduce tu opción: ")) + except: + print("¡El valor introducido no es correcto!") + menu() + showapp(int(option)) + +menu() \ No newline at end of file From de1a0c02d5c7d9dfde7a465790dd1a1b33fdef62 Mon Sep 17 00:00:00 2001 From: allbertoMD Date: Wed, 22 Nov 2023 17:27:20 +0100 Subject: [PATCH 0807/2103] Reto 45 Swift --- .../swift/allbertoMD.swift" | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/swift/allbertoMD.swift" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/swift/allbertoMD.swift" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/swift/allbertoMD.swift" new file mode 100644 index 0000000000..a6b693cab1 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/swift/allbertoMD.swift" @@ -0,0 +1,82 @@ +import Foundation + +var participants: [String] = [] + +showMenu() + +print("Introduce una opcion y pulsa Enter") + +var validInput = true + +while validInput { + if let input: String = readLine(), let option = Int(input) { + switch option { + case 1: + print("Añadir participante") + addParticipant() + case 2: + print("Eliminar participante") + deleteParticipant() + case 3: + print("Mostrar participantes") + showParticipants() + case 4: + print("Lanzar sorteo") + toHoldRaffle() + validInput = false + case 5: + print("Salir") + validInput = false + default: + print("Enter a valid option") + } + } +} + +func showMenu() { + print("\n") + print("[1]-Añadir participante") + print("[2]-Borrar participante") + print("[3]-Mostrar participantes") + print("[4]-Lanzar sorteo") + print("[5]-Salir") +} + +func addParticipant() { + print("Introduce el numbre del participante") + + if let input = readLine() { + participants.append(input) + } + print("Participante añadido") + + showMenu() +} + +func deleteParticipant() { + print("Introduce el nombre del participante que quieres eliminar") + + if let input = readLine() { + if let index = participants.firstIndex(of: input) { + participants.remove(at: index) + } + } + print("Participante eliminado") + + showMenu() +} + +func showParticipants() { + print("Todos los participantes:") + + for participant in participants { + print(participant) + } + showMenu() +} + +func toHoldRaffle() { + if let winner = participants.randomElement() { + print("El ganador de concurso es: \(winner)") + } +} From 074e047a3d627688231712c9cb49658ec41114a3 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 22 Nov 2023 18:06:51 +0100 Subject: [PATCH 0808/2103] Reto #45 Python --- .../python/javierfiestasbotella.py" | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/javierfiestasbotella.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/javierfiestasbotella.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/javierfiestasbotella.py" new file mode 100644 index 0000000000..dae0b8b7ea --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/javierfiestasbotella.py" @@ -0,0 +1,78 @@ +''' + * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participación: + * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. + * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. + * (Y no lo duplicarás) + * - Si seleccionas mostrar los participantes, se listarán todos. + * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - Si seleccionas realizar el sorteo, elegirás una persona al azar + * y se eliminará del listado. + * - Si seleccionas salir, el programa finalizará.''' +from random import choice +class Sorteo: + def __init__(self): + self.participantes=[] + self.participantes_premiados=[] + self.premios=[] + def menu(self): + return ''' + 1- Añadir participate + 2- Mostrar los participantes + 3- Eliminar + 4- Relalizar Sorteo + 5- Salir + ''' + def incluir(self): + self.name=input('Introduce el nombre del participante: ') + if self.name in self.participantes: + return f'{self.name} ya está incluido en la lista de participantes' + else: + self.participantes.append(self.name) + def mostrar(self): + for i in self.participantes: + print(i) + def eliminar(self): + self.name=input('Introduce el nombre del participante a eliminar: ') + if self.name in self.participantes: + self.participantes.remove(self.name) + return f'{self.name} ha sido eliminado de la lista de participantes' + else: + return f'{self.name} no se encuentra en la lista de participantes.' + def sorteo(self): + premiado=choice(self.participantes) + if premiado in self.participantes_premiados: + self.sorteo() + else: + self.participantes_premiados.append(premiado) + return f' El participante premiado ha sido {premiado}' + + + +s=Sorteo() + +if __name__ == "__main__": + while True: + print(s.menu()) + opc=int(input('Introduce un opción: ')) + if opc == 1: + print(s.incluir()) + elif opc == 2: + s.mostrar() + elif opc ==3: + print(s.eliminar()) + elif opc == 4: + print(s.sorteo()) + elif opc == 5: + break + else: + print('Ha intruducido un valor erróneo.') + + + From 4797873b3d5693c574f0d6dd115baa79dd2ca939 Mon Sep 17 00:00:00 2001 From: Jordi Ayala Date: Wed, 22 Nov 2023 13:21:42 -0600 Subject: [PATCH 0809/2103] Reto #44 - Java --- .../java/asjordi.java" | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java/asjordi.java" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java/asjordi.java" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java/asjordi.java" new file mode 100644 index 0000000000..06f1f76dfb --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/java/asjordi.java" @@ -0,0 +1,80 @@ +import java.util.Random; +import java.util.Scanner; +import java.util.Timer; +import java.util.TimerTask; + +public class MathRiddle { + + static boolean gameOn = true; + static int correctAnswers = 0; + static int num1Digits = 1; + static int num2Digits = 1; + static Random random = new Random(); + + public static void main(String[] args) { + while (gameOn) { + int num1 = randomInt(num1Digits); + int num2 = randomInt(num2Digits); + char operation = randomOperation(); + + int result; + if (operation == '+') result = num1 + num2; + else if (operation == '-') result = num1 - num2; + else if (operation == '*') result = num1 * num2; + else { + while (num2 == 0) num2 = randomInt(num2Digits); + result = num1 / num2; + } + + String answer = inputWithTimeout(num1, num2, operation); + + if (!gameOn) break; + else if (answer.equals(Integer.toString(result))) { + System.out.println("Respuesta correcta!"); + correctAnswers++; + + if (correctAnswers % 5 == 0) { + if (correctAnswers % 2 == 0) num2Digits++; + else num1Digits++; + } + + } else { + System.out.println("Respuesta incorrecta!"); + gameOn = false; + } + } + + System.out.println("Juego finalizado. Has acertado " + correctAnswers + " cálculos."); + } + + private static int randomInt(int digits) { + return random.nextInt((int) Math.pow(10, digits)); + } + + private static char randomOperation() { + char[] operations = {'+', '-', '*', '/'}; + return operations[random.nextInt(operations.length)]; + } + + private static String inputWithTimeout(int num1, int num2, char operation) { + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + System.out.println("\n¡El tiempo ha finalizado! Pulsa enter."); + gameOn = false; + } + }, 3000); + + String answer; + try { + System.out.print("¿Cuál es el resultado de " + num1 + " " + operation + " " + num2 + "? "); + answer = new Scanner(System.in).nextLine(); + } finally { + timer.cancel(); + } + + return answer; + } + +} From 564784733b8e866a8289a4c3891d6246323fff69 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Wed, 22 Nov 2023 16:56:32 -0300 Subject: [PATCH 0810/2103] Reto 14 - Python --- .../python/rokmanhaman.py" | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 "Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/rokmanhaman.py" diff --git "a/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/rokmanhaman.py" "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/rokmanhaman.py" new file mode 100644 index 0000000000..6230c92323 --- /dev/null +++ "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/rokmanhaman.py" @@ -0,0 +1,61 @@ +""" +Reto #14: OCTAL Y HEXADECIMAL +FÁCIL | Publicación: 03/04/23 | Resolución: 10/04/23 +/* + * Crea una función que reciba un número decimal y lo trasforme a Octal + * y Hexadecimal. + * - No está permitido usar funciones propias del lenguaje de programación que + * realicen esas operaciones directamente. + */ +""" + +class Number(): + + def __init__(self, number): + self.number = number + + def dec_to_oct(self): + + cociente_list = [self.number // 8] + resto_list = [self.number % 8] + i = 0 + while cociente_list[i] >= 8: + cociente_list.append(cociente_list[i] // 8) + resto_list.append(cociente_list[i] % 8) + i = i + 1 + + + largo = len(resto_list) + last_cociente = cociente_list[i] + invert_resto = [resto_list[x] for x in range(largo-1,-1,-1)] + + resultado_text = str(last_cociente)+ "".join(map(str, invert_resto)) + + return print(f" el num decimal: {self.number} se corresponde con el num octal: {resultado_text}") + + def dec_to_hex(self): + cociente_list = [self.number // 16] + resto_list = [self.number % 16] + i = 0 + while cociente_list[i] >= 16: + cociente_list.append(cociente_list[i] // 16) + resto_list.append(cociente_list[i] % 16) + i = i + 1 + + + largo = len(resto_list) + last_cociente = cociente_list[i] + invert_resto = [resto_list[x] for x in range(largo-1,-1,-1)] + hex_values = "0123456789ABCDEF" + invert_resto_hex =[hex_values[y] for y in invert_resto] + + resultado_text = str(last_cociente)+ "".join(map(str, invert_resto_hex)) + + return print(f" el num decimal: {self.number} se corresponde con el num hexa: {resultado_text}") + + +num_dec = Number(460) + +num_dec.dec_to_oct() +num_dec.dec_to_hex() + From 31eafdfc38e57e6aa27427c1f4fea9910b02f0fb Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Wed, 22 Nov 2023 19:36:27 -0600 Subject: [PATCH 0811/2103] add marvnramos.js --- .../javascript/marvnramos.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/javascript/marvnramos.js diff --git a/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/javascript/marvnramos.js b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/javascript/marvnramos.js new file mode 100644 index 0000000000..e69de29bb2 From 5e93005efea46112bc9204a70c5fe29944be5bd0 Mon Sep 17 00:00:00 2001 From: PandorasActor0 Date: Wed, 22 Nov 2023 21:55:55 -0500 Subject: [PATCH 0812/2103] Reto #45 - python --- .../python/PandorasActor0.py" | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/PandorasActor0.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/PandorasActor0.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/PandorasActor0.py" new file mode 100644 index 0000000000..b849f5685a --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/PandorasActor0.py" @@ -0,0 +1,85 @@ +# Reto #45: El calendario de aDEViento 2023 +#### Dificultad: Fácil | Publicación: 20/11/23 | Corrección: 27/11/23 + +## Enunciado + +# +# ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? +# 24 días, 24 regalos sorpresa relacionados con desarrollo de software. +# Desde el 1 al 24 de diciembre. +# +# Crea un programa que simule el mecanismo de participación: +# - Mediante la terminal, el programa te preguntará si quieres añadir y borrar +# participantes, mostrarlos, lanzar el sorteo o salir. +# - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. +# - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. +# (Y no lo duplicarás) +# - Si seleccionas mostrar los participantes, se listarán todos. +# - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. +# (Avisando de si lo has eliminado o el nombre no existe) +# - Si seleccionas realizar el sorteo, elegirás una persona al azar +# y se eliminará del listado. +# - Si seleccionas salir, el programa finalizará. +# + +import random + +class Opciones: + def __init__(self): + self.Participantes = [] + + def addparticipante(self,Nombre): + if Nombre in self.Participantes: + print("El participante ya esta concursando") + else: + self.Participantes.append(Nombre) + print("Se agrego correctamente el participante {0}".format(Nombre)) + + def eliminarParticipante(self,Nombre): + if Nombre in self.Participantes: + print("El participante {0} se elimino".format(Nombre)) + self.Participantes.remove(Nombre) + else: + print("El participante {0} No se encuentra registrado".format(Nombre)) + + def mostrarParticipantes(self): + if self.Participantes: + print(self.Participantes) + else: + print("No tienes participantes registrados") + + def sorteo(self): + if self.Participantes: + ganador = random.choice(self.Participantes) + print("El ganador es: {0}".format(ganador)) + self.Participantes.remove(ganador) + else: + print("No tiene participantes") + +if __name__ == '__main__': + opciones = Opciones() + + while True: + print("\nmenu:") + print("1. Agregar participante") + print("2. Eliminar Participante") + print("3. Mostrar Participantes") + print("4. Realziar sorteo") + print("5. Salir") + + opcion = input("Seleciona una opcion (1-5) : ") + + menu = { + "1": lambda : opciones.addparticipante(input("Ingrese el Nombre del participante ")), + "2": lambda : opciones.eliminarParticipante(input("Ingrese el Nombre del participante ")), + "3": opciones.mostrarParticipantes, + "4": opciones.sorteo, + "5": lambda: print("¡Hasta Luego!") or exit(), + } + + + accion = menu.get(opcion, lambda: print("Opcion no valida.")) + + accion() + + input("Presione Enter para continuar...") \ No newline at end of file From 32b6d96f9fd407f88da6ef69918280c2fe224b64 Mon Sep 17 00:00:00 2001 From: Laura Ortega <54899954+Pancratzia@users.noreply.github.com> Date: Thu, 23 Nov 2023 00:46:52 -0400 Subject: [PATCH 0813/2103] Ejercicio de la trifuerza finalizado --- .../javascript/Pancratzia.js | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Retos/Reto #20 - LA TRIFUERZA [Media]/javascript/Pancratzia.js diff --git a/Retos/Reto #20 - LA TRIFUERZA [Media]/javascript/Pancratzia.js b/Retos/Reto #20 - LA TRIFUERZA [Media]/javascript/Pancratzia.js new file mode 100644 index 0000000000..68153f2cad --- /dev/null +++ b/Retos/Reto #20 - LA TRIFUERZA [Media]/javascript/Pancratzia.js @@ -0,0 +1,41 @@ +/* + * ¡El nuevo "The Legend of Zelda: Tears of the Kingdom" ya está disponible! + * + * Crea un programa que dibuje una Trifuerza de "Zelda" + * formada por asteriscos. + * - Debes indicarle el número de filas de los triángulos con un entero positivo (n). + * - Cada triángulo calculará su fila mayor utilizando la fórmula 2n-1. + * + * Ejemplo: Trifuerza 2 + * + * * + * *** + * * * + * *** *** + * + */ + + function dibujarTriFuerza(n = 1) { + + baseTriangulo = 2*n - 1; + let trifuerza = ""; + + for (let i = 0; i < n; i++) { + trifuerza += " ".repeat(baseTriangulo - i) + "*".repeat(2 * i + 1) + "\n"; + } + + + let espaciosDer = n; + let espaciosIzq = 2*n - 1; + //Dibujo los dos triangulos inferiores + for (let i = 0; i < n; i++) { + + trifuerza += " ".repeat(espaciosIzq) + "*".repeat(2 * i + 1) + " ".repeat(espaciosDer) + "\n"; + } + + console.log(trifuerza); + } + + dibujarTriFuerza(2); + dibujarTriFuerza(3); + \ No newline at end of file From dc2be3b52abe8f5e739085b933a86e07acf424d6 Mon Sep 17 00:00:00 2001 From: Laura Ortega <54899954+Pancratzia@users.noreply.github.com> Date: Thu, 23 Nov 2023 00:47:20 -0400 Subject: [PATCH 0814/2103] Fix --- .../javascript/Pancratzia.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Retos/Reto #20 - LA TRIFUERZA [Media]/javascript/Pancratzia.js b/Retos/Reto #20 - LA TRIFUERZA [Media]/javascript/Pancratzia.js index 68153f2cad..b86d02243c 100644 --- a/Retos/Reto #20 - LA TRIFUERZA [Media]/javascript/Pancratzia.js +++ b/Retos/Reto #20 - LA TRIFUERZA [Media]/javascript/Pancratzia.js @@ -25,12 +25,16 @@ } - let espaciosDer = n; + let espaciosDer = n-1; let espaciosIzq = 2*n - 1; + //Dibujo los dos triangulos inferiores for (let i = 0; i < n; i++) { - trifuerza += " ".repeat(espaciosIzq) + "*".repeat(2 * i + 1) + " ".repeat(espaciosDer) + "\n"; + trifuerza += " ".repeat(espaciosDer) + "*".repeat(2 * i + 1) + " ".repeat(espaciosIzq) + "*".repeat(2 * i + 1) + "\n"; + + espaciosDer--; + espaciosIzq-=2; } console.log(trifuerza); @@ -38,4 +42,5 @@ dibujarTriFuerza(2); dibujarTriFuerza(3); + dibujarTriFuerza(10); \ No newline at end of file From 49346e5f131e7e21133fbd298eb33fb24f187dcc Mon Sep 17 00:00:00 2001 From: Laura Ortega <54899954+Pancratzia@users.noreply.github.com> Date: Thu, 23 Nov 2023 00:52:03 -0400 Subject: [PATCH 0815/2103] Ejercicios de primos gemelos listo --- .../javascript/Pancratzia.js" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/javascript/Pancratzia.js" diff --git "a/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/javascript/Pancratzia.js" "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/javascript/Pancratzia.js" new file mode 100644 index 0000000000..3ea04e065f --- /dev/null +++ "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/javascript/Pancratzia.js" @@ -0,0 +1,30 @@ +/* + * Crea un programa que encuentre y muestre todos los pares de números primos + * gemelos en un rango concreto. + * El programa recibirá el rango máximo como número entero positivo. + * + * - Un par de números primos se considera gemelo si la diferencia entre + * ellos es exactamente 2. Por ejemplo (3, 5), (11, 13) + * + * - Ejemplo: Rango 14 + * (3, 5), (5, 7), (11, 13) + */ +function esPrimo(n){ + if (numero == 0 || numero == 1 || numero == 4) return false; + for (let x = 2; x < numero / 2; x++) { + if (numero % x == 0) return false; + } + return true; +} + +function primosGemelos(rango = 10){ + let primosGemelos=""; + + for(let i=1; i<=rango; i++){ + + } + +} + +primosGemelos(10); +primosGemelos(30); \ No newline at end of file From 45d333e2a12a1c60d5c360cfcc172d9a0e2f53f4 Mon Sep 17 00:00:00 2001 From: Laura Ortega <54899954+Pancratzia@users.noreply.github.com> Date: Thu, 23 Nov 2023 00:52:29 -0400 Subject: [PATCH 0816/2103] Finalizando correctamente el ejercicio --- .../javascript/Pancratzia.js" | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/javascript/Pancratzia.js" "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/javascript/Pancratzia.js" index 3ea04e065f..b650f3d8d8 100644 --- "a/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/javascript/Pancratzia.js" +++ "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/javascript/Pancratzia.js" @@ -9,7 +9,7 @@ * - Ejemplo: Rango 14 * (3, 5), (5, 7), (11, 13) */ -function esPrimo(n){ +function esPrimo(numero){ if (numero == 0 || numero == 1 || numero == 4) return false; for (let x = 2; x < numero / 2; x++) { if (numero % x == 0) return false; @@ -21,9 +21,13 @@ function primosGemelos(rango = 10){ let primosGemelos=""; for(let i=1; i<=rango; i++){ - + if(esPrimo(i) && esPrimo(i+2)){ + primosGemelos += "("+i+", "+(i+2)+") "; + } } + console.log(primosGemelos); + } primosGemelos(10); From 956731dc08e8b89438f073acd7e478dad67e98f6 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Balsamo Date: Thu, 23 Nov 2023 02:20:12 -0300 Subject: [PATCH 0817/2103] Reto #44 - javascript --- .../javascript/npminit-dev.js" | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/npminit-dev.js" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/npminit-dev.js" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/npminit-dev.js" new file mode 100644 index 0000000000..a44c522508 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/npminit-dev.js" @@ -0,0 +1,79 @@ +const readline = require('readline') + +let questCount = 1 +let correct = 0 +const ops = ['+', '-'] + +const createIF = (readline) => readline.createInterface({ + input: process.stdin, + output: process.stdout +}) + +const getOperation = (ops, quesCount) => { + const op = ops[Math.round(Math.random() * (ops.length - 1))] + let left + let right + if(quesCount <= 5) { + left = Math.round(Math.random() * 9) + right = Math.round(Math.random() * 9) + } else if(quesCount > 5 && quesCount <= 10) { + left = Math.round(Math.random() * 90) + right = Math.round(Math.random() * 9) + } else if(quesCount > 10 && quesCount <= 15) { + left = Math.round(Math.random() * 99) + right = Math.round(Math.random() * 99) + } else { + left = Math.round(Math.random() * 999) + right = Math.round(Math.random() * 99) + } + return [ + `${left}${op}${right}`, + eval(`Math.trunc(${left}${op}${right})`) + ] +} + +console.clear() +console.log( +` ---- MATH OPS GAME ---- +All result must be rounded to nearest the integer +3 seconds contown per question...`) + +const question =() => { + return new Promise((res, rej) => { + let rl = createIF(readline) + let [opstring, expect] = getOperation(ops, questCount) + rl.question( + `- Question ${questCount}: + Which is the result of ${opstring}?\n`, (result) => { + if(parseInt(result) === expect) correct++ + rl.close() + console.clear() + res('') + }) + setTimeout(() => { + rl.close() + rej('') + }, 3000) + }) +} + +setTimeout(async () => { + console.clear() + while(questCount <= 20) { + try { await question() } + catch(_) { break } + questCount ++ + } + console.clear() + console.log(` + GAME END!!! + Correct answers: ${correct}/20 + ${correct <= 10 ? + 'Meh... better luck next time' : + correct > 10 && correct <= 15 ? + 'Not bad, but you can improve' : + correct > 15 && correct <= 19 ? + 'Great work!' : 'Perfect!!!' + }`) + process.exit(0) +}, 4000) From 182dd31eca0c8b2a29f7c3571b3f7dcfc1377cd3 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Balsamo Date: Thu, 23 Nov 2023 05:47:50 -0300 Subject: [PATCH 0818/2103] Correciones minimas --- .../javascript/npminit-dev.js" | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/npminit-dev.js" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/npminit-dev.js" index a44c522508..c965774ec6 100644 --- "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/npminit-dev.js" +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/npminit-dev.js" @@ -2,7 +2,7 @@ const readline = require('readline') let questCount = 1 let correct = 0 -const ops = ['+', '-'] +const ops = ['+', '-', '*', '/'] const createIF = (readline) => readline.createInterface({ input: process.stdin, @@ -34,9 +34,9 @@ const getOperation = (ops, quesCount) => { console.clear() console.log( -` ---- MATH OPS GAME ---- -All result must be rounded to nearest the integer -3 seconds contown per question...`) +` <--- MATH OPS GAME ---> +All results must be rounded to the nearest integer +3 seconds contdown per question...`) const question =() => { return new Promise((res, rej) => { From 4e8391fdb0f0ffbbb01c9d3ac69076abc8e54e00 Mon Sep 17 00:00:00 2001 From: n4nd1k4nd3 <74754768+n4nd1k4nd3@users.noreply.github.com> Date: Thu, 23 Nov 2023 11:18:43 +0100 Subject: [PATCH 0819/2103] Create n4nd1k4nde.py --- .../python/n4nd1k4nde.py" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/n4nd1k4nde.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/n4nd1k4nde.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/n4nd1k4nde.py" new file mode 100644 index 0000000000..6d4274bcd4 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/n4nd1k4nde.py" @@ -0,0 +1,20 @@ +''' +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ +''' + +for i in range(1, 101): + if i % 3 and i % 5 == 0: + print("fizzbuzz") + elif i % 5 == 0: + print("buzz") + elif i % 3 == 0: + print("fizz") + else: + print(i) From 1fba59511e56ca5bd4e510a34c941596e7c3223d Mon Sep 17 00:00:00 2001 From: Javi Date: Thu, 23 Nov 2023 11:28:49 +0100 Subject: [PATCH 0820/2103] Python - Reto 54 --- .../python/hernandezpalo83.py" | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/hernandezpalo83.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/hernandezpalo83.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/hernandezpalo83.py" new file mode 100644 index 0000000000..9c017dc6ca --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/hernandezpalo83.py" @@ -0,0 +1,94 @@ +# Reto #45: El calendario de aDEViento 2023 +#### Dificultad: Fácil | Publicación: 20/11/23 | Corrección: 27/11/23 + +## Enunciado + +# +# ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? +# 24 días, 24 regalos sorpresa relacionados con desarrollo de software. +# Desde el 1 al 24 de diciembre. +# +# Crea un programa que simule el mecanismo de participación: +# - Mediante la terminal, el programa te preguntará si quieres añadir y borrar +# participantes, mostrarlos, lanzar el sorteo o salir. +# - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. +# - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. +# (Y no lo duplicarás) +# - Si seleccionas mostrar los participantes, se listarán todos. +# - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. +# (Avisando de si lo has eliminado o el nombre no existe) +# - Si seleccionas realizar el sorteo, elegirás una persona al azar +# y se eliminará del listado. +# - Si seleccionas salir, el programa finalizará. +# + +import random + +class CalendarioAdvento: + def __init__(self): + self.participantes = [] + + def agregar_participante(self, nombre): + if nombre in self.participantes: + print(f"{nombre} ya está en la lista.") + else: + self.participantes.append(nombre) + print(f"{nombre} ha sido añadido.") + + def mostrar_participantes(self): + print("Lista de participantes:") + for participante in self.participantes: + print(participante) + + def eliminar_participante(self, nombre): + if nombre in self.participantes: + self.participantes.remove(nombre) + print(f"{nombre} ha sido eliminado.") + else: + print(f"{nombre} no se encuentra en la lista.") + + def realizar_sorteo(self): + if not self.participantes: + print("No hay participantes para realizar el sorteo.") + else: + ganador = random.choice(self.participantes) + print(f"¡El ganador es: {ganador}!") + self.participantes.remove(ganador) + +if __name__ == "__main__": + calendario = CalendarioAdvento() + + while True: + print("\n--- Calendario de aDEViento ---") + print("1. Añadir participante") + print("2. Mostrar participantes") + print("3. Eliminar participante") + print("4. Realizar sorteo") + print("5. Salir") + + try: + opcion = int(input("Selecciona una opción (1-5): ")) + except ValueError: + print("Por favor, ingresa un número válido.") + continue + + if opcion == 1: + nombre_participante = input("Introduce el nombre del participante: ") + calendario.agregar_participante(nombre_participante) + + elif opcion == 2: + calendario.mostrar_participantes() + + elif opcion == 3: + nombre_participante = input("Introduce el nombre del participante a eliminar: ") + calendario.eliminar_participante(nombre_participante) + + elif opcion == 4: + calendario.realizar_sorteo() + + elif opcion == 5: + print("¡Hasta luego!") + break + + else: + print("Opción no válida. Inténtalo de nuevo.") From a8ae49829c745423d17bcf01aac3fe8b7e9765f0 Mon Sep 17 00:00:00 2001 From: danivendetta Date: Thu, 23 Nov 2023 11:51:35 +0100 Subject: [PATCH 0821/2103] =?UTF-8?q?feat(adeviento)=20:sparkles:=20danive?= =?UTF-8?q?ndetta=20resoluci=C3=B3n=20del=20ejecicio.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/danivendetta.py" | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/danivendetta.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/danivendetta.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/danivendetta.py" new file mode 100644 index 0000000000..e916d077cd --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/danivendetta.py" @@ -0,0 +1,74 @@ +from random import randint +from pprint import pprint + +participantes = [] +def menu(): + print("Opciones:") + print("1: Añadir participante") + print("2: Eliminar participante") + print("3: Listar participantes") + print("4: Realizar sorteo") + print("5: Salir") + + op = input("Selecciona una opción: ") + while op not in ["1", "2", "3", "4", "5"]: + print(f'{op} no es una opción válida, vuelve a intentarlo!') + op = input("Selecciona una opción: ") + + return op + +def add_participante(participante: str): + if participante in participantes: + print(f'{participante} ya está en la lista de participantes') + else: + participantes.append(participante) + print(f'{participante} añadido a la lista de participantes') + +def del_participante(participante: str): + if participante not in participantes: + print(f'{participante} no está en la lista de participantes') + else: + participantes.remove(participante) + print(f'{participante} eliminado de la lista de participantes') + +def list_participantes(): + pprint(participantes) + +def realizar_sorteo(): + if len(participantes) == 0: + print("Primero debes añadir usuarios a la lista de participantes") + else: + ganador = participantes[randint(0, len(participantes)-1)] + print(f'El participante ganador ha sido: {ganador}') + del_participante(ganador) + +if __name__ == "__main__": + op = menu() + while op != "5": + if op == "1": + print("1: Añadir participante") + participante = input("Participante: ") + add_participante(participante) + op = menu() + elif op == "2": + print("2: Eliminar participante") + participante = input("Participante: ") + del_participante(participante) + op = menu() + elif op == "3": + print("3: Listar participantes") + list_participantes() + op = menu() + elif op == "4": + print("4: Realizar sorteo") + realizar_sorteo() + op = menu() + else: + print("5: Salir") + + print("Exit!!") + + + + + From 9c4479e0a429374e54eb9035b350c5bfa381edca Mon Sep 17 00:00:00 2001 From: Raul Garcia Date: Thu, 23 Nov 2023 14:34:38 +0100 Subject: [PATCH 0822/2103] Reto #45 - python --- .../python/raulG91.py" | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/raulG91.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/raulG91.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/raulG91.py" new file mode 100644 index 0000000000..c2a87da049 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/raulG91.py" @@ -0,0 +1,37 @@ +from random import choice +users = [] + +while True: + print("¿Que desea hacer?") + print("Pulsa A: Añadir nuevo usuario \nPulsa B: para eliminar un participante \nPulsa L: Para listar los participantes \nPulsa S: Para realizar el sorteo \nPulsa E: Para salir del programa" ) + user_choice = input() + user_choice = user_choice.upper() + + match user_choice: + case "A": + name = input("Intorduce el nombre del participante ") + if users.count(name) > 0: + print("El usuario ya existe en el sistema ") + else: + users.append(name) + case "B": + name = input("Introduzca el usuario a borrar ") + if users.count(name) > 0: + users.remove(name) + print("Usuario "+ name +" eliminado del sistema") + else: + print("El usuario no existe en el sistema") + case "L": + for user in users: + print(user) + case "S": + if len(users) > 0: + user_winner = choice(users) + print("El ganador del sorteo es: " + user_winner) + users.remove(user_winner) + else: + print("No hay usuarios en el sistema") + + case "E": + break + From 69ee0876ca91c5e492005a0c8dd49c0992c59e43 Mon Sep 17 00:00:00 2001 From: Billy Torres Date: Thu, 23 Nov 2023 08:34:35 -0600 Subject: [PATCH 0823/2103] Reto #1 JavaScript --- .../javascript/BRivasTorres.js" | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/BRivasTorres.js" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/BRivasTorres.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/BRivasTorres.js" new file mode 100644 index 0000000000..3ea8aba8d9 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/BRivasTorres.js" @@ -0,0 +1,50 @@ +const leetAlphabet = { + a: "4", + b: "13", + c: "[", + d: ")", + e: "3", + f: "|=", + g: "&", + h: "#", + i: "1", + j: ",_|", + k: ">|", + l: "1", + m: "|/|", + n: "^/", + o: "0", + p: "|*", + q: "(_,)", + r: "|2", + s: "5", + t: "7", + u: "(_)", + v: "/", + w: "//", + x: "><", + y: "`j", + z: "2", + 1: "L", + 2: "R", + 3: "E", + 4: "A", + 5: "S", + 6: "b", + 7: "T", + 8: "B", + 9: "g", + 0: "o", +}; + +const lenguajeHacker = (s) => { + let r = ""; + for (let char of s.toLowerCase()) { + let isChar = leetAlphabet[char]; + isChar ? (r += isChar) : (r += char); + } + return r; +}; + +console.log(lenguajeHacker("Reto mouredev #4")); +console.log(lenguajeHacker("Hola Mundo")); From 2ab644bbe22aa51f4a01cf7b100911d855694e4d Mon Sep 17 00:00:00 2001 From: Fairdev <148779252+FedeAirala@users.noreply.github.com> Date: Thu, 23 Nov 2023 12:38:43 -0300 Subject: [PATCH 0824/2103] Fairdev.py --- .../python/Fairdev.py | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/Fairdev.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/Fairdev.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/Fairdev.py new file mode 100644 index 0000000000..0c0de98df5 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/Fairdev.py @@ -0,0 +1,68 @@ +### Reto 4 ### + +""" + Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. + Ejemplos: + - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" + - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" + + """ + +def fibonacci(num): + ant=0 + post=1 + fib=[ant,post] + + for i in range (0,num): + result=ant+post + ant=post + post=result + fib.append(result) + for i in fib: + if i==num: + fibo="es fibonacci" + break + else: + fibo="no es fibonacci" + return fibo + + +def par(num): + if num%2==0: + is_pair="y es par" + else: + is_pair="y es impar" + return is_pair + +def es_primo(num): + global is_cousin + if num<=2 and num>0: + is_cousin="es primo" + else: + for n in range(2, num): + if num % n == 0: + is_cousin="no es primo" + break + else: + is_cousin="es primo" + return is_cousin + +try: + question=0 + while True: + num = int(input("Ingrese un número: ")) + + es_fibo=fibonacci(num) + es_par=par(num) + primo=es_primo(num) + + print (f"El número {num} {primo} , {es_fibo} {es_par}") + + +except ValueError: + print ("No es un número válido") +finally: + print ("Finaliza la ejecición") + + + From 25623887ed29192ae2f17a98f89c3a702432d2ca Mon Sep 17 00:00:00 2001 From: Rodrigo Sambade Date: Thu, 23 Nov 2023 17:02:42 +0100 Subject: [PATCH 0825/2103] =?UTF-8?q?A=C3=B1adida=20soluci=C3=B3n=20al=20r?= =?UTF-8?q?eto=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/rodrigo-sambade-saa.js" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rodrigo-sambade-saa.js" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rodrigo-sambade-saa.js" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rodrigo-sambade-saa.js" new file mode 100644 index 0000000000..5ed6d7794c --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rodrigo-sambade-saa.js" @@ -0,0 +1,31 @@ +const fizzbuzz = numVal => { + if (typeof numVal !== 'number') { + throw new Error(`"${numVal}" is not a number`) + } + + if (numVal === 0) { + return numVal + } + + if (numVal % 3 === 0 && numVal % 5 === 0) { + return 'fizzbuzz' + } + + if (numVal % 3 === 0) { + return 'fizz' + } + + if (numVal % 5 === 0) { + return 'buzz' + } + + return numVal + } + +const printFizzbuzz = number => { + for (let i = 1; i <= number; i++) { + console.log(`${fizzbuzz(i)}`) + } + } + +printFizzbuzz(100) \ No newline at end of file From 570c25384b0035adc502be37fd73fc57b24c6109 Mon Sep 17 00:00:00 2001 From: Rodrigo Sambade Date: Thu, 23 Nov 2023 17:30:40 +0100 Subject: [PATCH 0826/2103] =?UTF-8?q?A=C3=B1adida=20soluci=C3=B3n=20al=20r?= =?UTF-8?q?eto=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/rodrigo-sambade-saa.js" | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigo-sambade-saa.js" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigo-sambade-saa.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigo-sambade-saa.js" new file mode 100644 index 0000000000..585ad414b6 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigo-sambade-saa.js" @@ -0,0 +1,33 @@ +function generatePassword(length, includeUppercase, includeNumbers, includeSymbols) { + const lowercaseChars = 'abcdefghijklmnopqrstuvwxyz'; + const uppercaseChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + const numberChars = '0123456789'; + const symbolChars = '!@#$%^&*()_+[]{}|;:,.<>?'; + + let validChars = lowercaseChars; + + if (includeUppercase) { + validChars += uppercaseChars; + } + + if (includeNumbers) { + validChars += numberChars; + } + + if (includeSymbols) { + validChars += symbolChars; + } + + let password = ''; + + for (let i = 0; i < length; i++) { + const randomIndex = Math.floor(Math.random() * validChars.length); + password += validChars[randomIndex]; + } + + return password; + } + + const newPassword = generatePassword(16, true, true, true); + console.log(newPassword); + \ No newline at end of file From 4f6b9fe50ddcabb752d9b7ef04e63ab499c73170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateo=20=C3=81lvarez?= Date: Thu, 23 Nov 2023 12:11:59 -0500 Subject: [PATCH 0827/2103] Reto #45 - Python --- .../python/drifterDev.py" | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/drifterDev.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/drifterDev.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/drifterDev.py" new file mode 100644 index 0000000000..6301d920e3 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/drifterDev.py" @@ -0,0 +1,82 @@ +import random + +class App: + def __init__(self): + self.persons = [] + + def add(self, person): + if person not in self.persons: + self.persons.append(person) + return True + else: + return False + + def delete(self, person): + if person in self.persons: + self.persons.remove(person) + return True + else: + return False + + def lottery(self): + if len(self.persons) == 0: + return None + choice = random.choice(self.persons) + self.persons.remove(choice) + return choice + + def show(self): + if len(self.persons) == 0: + print("No hay participantes") + return + print("Participantes:") + for p in self.persons: + print(p) + +def main(): + app = App() + menu = """ + Selecciona una opcion: + 1. Anadir participante + 2. Eliminar participante + 3. Mostrar participantes + 4. Realizar sorteo + 5. Salir + """ + while True: + print(menu) + try: + option = int(input("Opcion: ")) + if option == 1: + name = input("Participante: ") + result = app.add(name) + if result: + print("Anadido") + else: + print("Paricipante ya existe") + elif option == 2: + name = input("Participante: ") + result = app.delete(name) + if result: + print("Eliminado") + else: + print("Participante no existe") + elif option == 3: + app.show() + elif option == 4: + result = app.lottery() + if result == None: + print("No hay participantes") + else: + print("El ganador del sorteo es:", result) + elif option == 5: + print("Adios") + break + else: + print("Opcion invalida") + except: + print("Opcion invalida") + + +if __name__ == "__main__": + main() From 6d88e52d646f46b538fdb4f236e8451dade00770 Mon Sep 17 00:00:00 2001 From: Rodrigo Sambade Date: Thu, 23 Nov 2023 18:20:07 +0100 Subject: [PATCH 0828/2103] Update rodrigo-sambade-saa.js --- .../javascript/rodrigo-sambade-saa.js" | 4 ++++ 1 file changed, 4 insertions(+) diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigo-sambade-saa.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigo-sambade-saa.js" index 585ad414b6..64ee06896c 100644 --- "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigo-sambade-saa.js" +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigo-sambade-saa.js" @@ -1,4 +1,8 @@ function generatePassword(length, includeUppercase, includeNumbers, includeSymbols) { + if (length < 8 || length > 16) { + throw new Error('Invalid password length ' + length); + } + const lowercaseChars = 'abcdefghijklmnopqrstuvwxyz'; const uppercaseChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; const numberChars = '0123456789'; From 817d45e19b67e8835633781f1d6c689098f0b02d Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Thu, 23 Nov 2023 16:01:00 -0300 Subject: [PATCH 0829/2103] Reto 19 - Python --- .../python/rokmanhaman.py" | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 "Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/python/rokmanhaman.py" diff --git "a/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/python/rokmanhaman.py" "b/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/python/rokmanhaman.py" new file mode 100644 index 0000000000..92ea686724 --- /dev/null +++ "b/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/python/rokmanhaman.py" @@ -0,0 +1,43 @@ +""" +Reto #19: ANÁLISIS DE TEXTO +MEDIA | Publicación: 11/05/23 | Resolución: 15/05/23 +/* + * Crea un programa que analice texto y obtenga: + * - Número total de palabras. + * - Longitud media de las palabras. + * - Número de oraciones del texto (cada vez que aparecen un punto). + * - Encuentre la palabra más larga. + * + * Todo esto utilizando un único bucle. + */ +""" + + +def analice_text(text): + + num_sentences = text.count(".") + list = text.split() + num_word = len(list) + + my_dict = { word : len(word) for word in list} + ave_length = round(sum(my_dict.values()) / len(my_dict.values()), 2) + + key_max_len = max(my_dict, key=my_dict.get) + print(my_dict) + + + + + return num_sentences, num_word, ave_length, key_max_len + + + + + +text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam volutpat, velit a aliquam cursus, justo turpis viverra libero, ac fringilla lectus justo nec turpis. Sed non ligula nec elit hendrerit laoreet. Suspendisses nec rhoncus libero. Maecenas a neque quis ipsum commodo vestibulum. Fusce consectetur urna at est ultrices, a posuere orci commodo. Vestibulum vel justo a justo tristique accumsan. Proin efficitur nisi quis metus luctus, in hendrerit lectus fermentum. Nullam sagittis, nisl vel tincidunt tristique, eros lacus tincidunt elit, vel consequat justo sapien vel eros. In hac habitasse platea dictumst. Vivamus fringilla metus ac ante varius, vel lacinia mi tincidunt. Curabitur accumsan, ex ut hendrerit semper, orci tortor volutpat ligula, sit amet blandit metus urna at tellus. Curabitur in vehicula enim. Nullam sit amet lacinia odio." + +a, b, c, d = analice_text(text) +print(f"\nLa cantidad de oraciones es: {a}") +print(f"\nEl numero de palabras es: {b}") +print(f"\nLa longitud media de las palabras es: {c}") +print(f"\nLa palabra mas larga es : {d}") \ No newline at end of file From 68731be8ffa256a6e84bc82c2b2c6012dcd05dd2 Mon Sep 17 00:00:00 2001 From: Armando Date: Thu, 23 Nov 2023 15:17:24 -0500 Subject: [PATCH 0830/2103] Cambio del nombre del fichero --- .../javascript/armandortm.js" | 65 ------------------- 1 file changed, 65 deletions(-) delete mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/armandortm.js" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/armandortm.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/armandortm.js" deleted file mode 100644 index 29a6516d33..0000000000 --- "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/armandortm.js" +++ /dev/null @@ -1,65 +0,0 @@ - -const LOWER_CASE_LETTERS = - ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; - -const UPPER_CASE_LETTERS = - ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; - -const LEET_SPEAK_ALPHABET = - ['4', 'I3', '[', ')', '3', '|=', '&', '#', '1', ',_|', '>|', '1', 'IVI', - '^/', '0', '|*', '(_,)', 'I2', '5', '7', '(_)', '\/', '\/\/', '><', 'j', '2'] - -const LEET_NUMBERS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; -const NUMBERS_TO_LEET = ['()', 'L', 'R', 'E', 'A', 'S', 'b', 'T', 'B', 'g']; - - -function convert_to_leet_alphabet(){ - - // get the string - let stringFromUser = prompt("Please enter an entry"); - let string_hacked = []; - - // convert to an array - let arrayFromString = stringFromUser.split(""); - - // using a foreach to compare each character with each array element - arrayFromString.forEach(element => { - - let indexOfLetters; - let indexOfNumbers; - - // to check if it's a lower case letter - if (LOWER_CASE_LETTERS.includes(element)) { - - indexOfLetters = LOWER_CASE_LETTERS.indexOf(element); - string_hacked.push(LEET_SPEAK_ALPHABET[indexOfLetters]); - } - - // to check if it's a upper case letter - else if (UPPER_CASE_LETTERS.includes(element)) { - - indexOfLetters = UPPER_CASE_LETTERS.indexOf(element); - string_hacked.push(LEET_SPEAK_ALPHABET[indexOfLetters]); - } - - // To check if it's a number - else if (LEET_NUMBERS.includes(Number(element))) { - - indexOfNumbers = LEET_NUMBERS.indexOf(Number(element)); - string_hacked.push(NUMBERS_TO_LEET[indexOfNumbers]); - } - - // to identify if there is a space - else if (element == "") { - - string_hacked.push(" "); - } - }); - - console.log(string_hacked); -} - -// calling the function -convert_to_leet_alphabet(); \ No newline at end of file From c856c90f3ce86a7a96aa4bf09c0d02f56145da05 Mon Sep 17 00:00:00 2001 From: Giovany Osorio <30839218+giovanyosorio@users.noreply.github.com> Date: Thu, 23 Nov 2023 20:52:39 +0000 Subject: [PATCH 0831/2103] #Reto 16 Javascript --- .../javascript/giovanyosorio.js | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Retos/Reto #16 - LA ESCALERA [Media]/javascript/giovanyosorio.js diff --git a/Retos/Reto #16 - LA ESCALERA [Media]/javascript/giovanyosorio.js b/Retos/Reto #16 - LA ESCALERA [Media]/javascript/giovanyosorio.js new file mode 100644 index 0000000000..8bf92d560e --- /dev/null +++ b/Retos/Reto #16 - LA ESCALERA [Media]/javascript/giovanyosorio.js @@ -0,0 +1,48 @@ +/* + * Crea una función que dibuje una escalera según su número de escalones. + * - Si el número es positivo, será ascendente de izquiera a derecha. + * - Si el número es negativo, será descendente de izquiera a derecha. + * - Si el número es cero, se dibujarán dos guiones bajos (__). + * + * Ejemplo: 4 + * _ + * _| + * _| + * _| + * _| + * + +*/ + + +function escalera(num){ + let space=" " + if(num>0) + { + for (let index = 0; index < num; index++) + { + console.log(space.repeat(num-index) + '_|'); + } + } + + if(num<0) + { + let newnum=Math.abs(num) + for (let index = 0; index < newnum; index++) + { + console.log(space.repeat(index) + '_|'); + } + console.log("menos 0") + } + + if(num==0){ + return '__'; + } + + + +} +escalera(-2) +escalera(4) + +escalera(0) \ No newline at end of file From f032397a586a0fb449ea0c65eb8673ffe6662237 Mon Sep 17 00:00:00 2001 From: Giovany Osorio <30839218+giovanyosorio@users.noreply.github.com> Date: Fri, 24 Nov 2023 00:50:35 +0000 Subject: [PATCH 0832/2103] Reto #19 Javascript --- .../javascript/giovanyosorio.js" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/javascript/giovanyosorio.js" diff --git "a/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/javascript/giovanyosorio.js" "b/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/javascript/giovanyosorio.js" new file mode 100644 index 0000000000..bed906771e --- /dev/null +++ "b/Retos/Reto #19 - AN\303\201LISIS DE TEXTO [Media]/javascript/giovanyosorio.js" @@ -0,0 +1,34 @@ +/* + * Crea un programa que analice texto y obtenga: + * - Número total de palabras. + * - Longitud media de las palabras. + * - Número de oraciones del texto (cada vez que aparecen un punto). + * - Encuentre la palabra más larga. + * + * Todo esto utilizando un único bucle. + */ + +function analizar(texto){ + const palabras=texto.split(" ") + let sentences=texto.split(".") + let mayor=palabras[0] + + for(let i=0;imayor.length){ + mayor=palabras[i] + } + } + //console.log(palabras) + //console.log(palabras.join("").length) + //console.log(palabras.length) + let average=palabras.join("").length/palabras.length + console.log("Longitud media de palabras: "+average) + console.log("Numero total de palabras: "+texto.split(" ").length) + console.log("letra mayor: "+mayor) + console.log("numero de oraciones del texto: "+sentences.length) + } + + analizar("Crea un programa que analice texto y obtenga: Número total de palabras. Longitud media de las palabras. Número de oraciones del texto(cada vez que aparecen un punto). Encuentre la palabra más larga (Supercalifragilisticoespialidoso). Todo esto utilizando un único bucle.") + + \ No newline at end of file From 9b55d9cfb3dc8991b448637b9753f341c1e49882 Mon Sep 17 00:00:00 2001 From: Hans Escobar <60953384+hdescobarh@users.noreply.github.com> Date: Thu, 23 Nov 2023 19:55:39 -0500 Subject: [PATCH 0833/2103] Reto # 45 - Rust --- .../rust/hdescobarh.rs" | 282 ++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/rust/hdescobarh.rs" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/rust/hdescobarh.rs" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/rust/hdescobarh.rs" new file mode 100644 index 0000000000..2a40b6d416 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/rust/hdescobarh.rs" @@ -0,0 +1,282 @@ +// author: Hans D. Escobar H. (hdescobarh) + +/* +Solución con el mínimo de bibliotecas externas. Solo emplea rand para generar números aleatorios. + +Esta organizada en tres módulos: +- giveaway_data: contiene las entidades encargadas del acceso a los medios de persistencia. +- giveaway: se encarga de la logica de negocio +- giveaway_cli: interfaz de linea de comandos + +Cargo manifest: +[package] +name = "giveaway" +version = "0.1.0" +edition = "2021" +[dependencies] +rand = "0.8.5" +*/ + +use giveaway::Giveaway; +use giveaway_cli::Cli; +use giveaway_data::MockRepository; + +fn main() { + // inicializa la interfaz de linea de comandos + let mut cli = Cli::default(); + // inicializa el controlador y el repositorio, uno falso para el ejercicio. + let mut giveaway = Giveaway::new(MockRepository::default()); + loop { + let state = cli.run(&mut giveaway); + println!("{}", state); + } +} + +// command line interface module +pub mod giveaway_cli { + use crate::giveaway::{Giveaway, Request}; + + const PROMPT_OPTION: &str = "\n\ + Ingrese el número de la acción que desea realizar: + 1 Agregar participante. + 2 Mostrar todos los participantes. + 3 Eliminar a un participante. + 4 Realizar el sorteo. + 5 Salir."; + const PROMPT_USERNAME: &str = "Por favor ingrese el nombre de usuario del participante."; + const MSG_INVALID_OPTION: &str = "La opción ingresada no es valida."; + const MSG_EXIT: &str = "Cerrando el programa. Hasta pronto."; + + #[derive(Default)] + pub struct Cli { + buffer: String, + } + + impl Cli { + pub fn run(&mut self, giveaway: &mut Giveaway) -> String { + self.buffer.clear(); + println!("{}", PROMPT_OPTION); + + std::io::stdin().read_line(&mut self.buffer).unwrap(); + + let choice = match self.buffer.trim().parse::() { + Ok(number) => { + if (1..=5).contains(&number) { + number + } else { + return MSG_INVALID_OPTION.to_string(); + } + } + Err(_) => return MSG_INVALID_OPTION.to_string(), + }; + + match choice { + 1 => giveaway.request(Request::AddParticipant, Some(self.ask_username())), + 2 => giveaway.request(Request::ListParticipants, None), + 3 => giveaway.request(Request::RemoveParticipant, Some(self.ask_username())), + 4 => giveaway.request(Request::Draw, None), + 5 => { + println!("{}", MSG_EXIT); + std::process::exit(0) + } + _ => panic!("Unexpected error: allowed choice out of bounds."), + } + } + + fn ask_username(&mut self) -> &str { + self.buffer.clear(); + println!("{}", PROMPT_USERNAME); + std::io::stdin().read_line(&mut self.buffer).unwrap(); + self.buffer.trim() + } + } +} + +pub mod giveaway { + use crate::giveaway_data::{ErrorKind, Participant, Repository}; + use rand::seq::SliceRandom; + use std::fmt::Display; + + const MSG_ERR_NOT_FOUND: &str = "El participante no existe."; + const MSG_ERR_ALREADY_EXIST: &str = "El participante ya se encuentra en el sorteo."; + const MSG_ERR_EMPTY_DATA: &str = "No hay participantes en el sorteo."; + const MSG_SUCCESS_ADDING: &str = "Se ha agregado un al participante."; + const MSG_SUCCESS_DELETING: &str = "El participante ha sido removido."; + const MSG_WARNING_MISSING: &str = "Faltó el nombre de usaurio."; + const MSG_WINNER: &str = "El ganador es el usuario"; + + pub struct Giveaway { + repository: Box, + } + + impl Giveaway { + pub fn new(repository: impl Repository + 'static) -> Self { + Self { + repository: Box::new(repository), + } + } + + pub fn request(&mut self, kind: Request, username: Option<&str>) -> String { + match kind { + Request::AddParticipant => match username { + Some(username) => self.add_participant(username), + None => MSG_WARNING_MISSING.to_string(), + }, + Request::ListParticipants => self.get_all_participants(), + Request::RemoveParticipant => match username { + Some(username) => self.remove_participant(username), + None => MSG_WARNING_MISSING.to_string(), + }, + Request::Draw => self.draw(), + } + } + + // Agrega un nuevo participante + fn add_participant(&mut self, username: &str) -> String { + match self.repository.create(Participant { + username: username.to_owned(), + }) { + Ok(_) => MSG_SUCCESS_ADDING.to_string(), + Err(e) => format!("{e}"), + } + } + + // Lista todos los participantes + fn get_all_participants(&self) -> String { + match self.repository.read_all() { + Ok(l) => String::from_iter( + l.into_iter() + .map(|participant| format!("- {}\n", participant.username)), + ), + Err(e) => format!("{e}"), + } + } + + // Remueve por nombre de usuario a un participante + fn remove_participant(&mut self, username: &str) -> String { + match self.repository.delete(username) { + Ok(_) => MSG_SUCCESS_DELETING.to_string(), + Err(e) => format!("{e}"), + } + } + + // Obtiene un ganador y lo remueve de la lista de participantes + fn draw(&mut self) -> String { + let mut rng = rand::thread_rng(); + let participants = match self.repository.read_all() { + Ok(l) => l, + Err(e) => return format!("{e}"), + }; + + let winner = match participants.choose(&mut rng) { + Some(participant) => participant.username.to_owned(), + None => return format!("{}", ErrorKind::Empty), + }; + match self.repository.delete(&winner) { + Ok(_) => format!("{} {}.", MSG_WINNER, winner), + Err(e) => format!("{e}"), + } + } + } + + pub enum Request { + AddParticipant, + ListParticipants, + RemoveParticipant, + Draw, + } + + impl Display for ErrorKind { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let msg = match self { + ErrorKind::NotFound => MSG_ERR_NOT_FOUND, + ErrorKind::AlreadyExist => MSG_ERR_ALREADY_EXIST, + ErrorKind::Empty => MSG_ERR_EMPTY_DATA, + }; + write!(f, "{msg}") + } + } +} + +pub mod giveaway_data { + + // Las nombres de usuario de Twitter son únicos, por lo que pueden usarse como identificadores únicos del participante + #[derive(PartialEq, Clone)] + pub struct Participant { + pub username: String, + } + + pub trait Repository { + fn create(&mut self, participant: Participant) -> Result<(), ErrorKind>; + fn read_all(&self) -> Result, ErrorKind>; + fn delete(&mut self, username: &str) -> Result<(), ErrorKind>; + } + + #[non_exhaustive] + pub enum ErrorKind { + NotFound, + AlreadyExist, + Empty, + } + + // Para el ejercicio la "conexión" será falseada por una simple colección + pub struct MockRepository { + connection: Vec, + } + + impl MockRepository { + fn get_username_index(&self, username: &str) -> Result { + for (index, entry) in self.connection.iter().enumerate() { + if entry.username == username { + return Ok(index); + } + } + Err(ErrorKind::NotFound) + } + } + + impl Default for MockRepository { + fn default() -> Self { + Self { + connection: Vec::from( + [ + "QuantumFracture", + "mouredev", + "midudev", + "sama", + "neiltyson", + "HiromuArakawa", + ] + .map(|i| Participant { + username: i.to_string(), + }), + ), + } + } + } + + impl Repository for MockRepository { + fn create(&mut self, participant: Participant) -> Result<(), ErrorKind> { + if self.connection.contains(&participant) { + return Err(ErrorKind::AlreadyExist); + } + + self.connection.push(participant); + Ok(()) + } + + fn read_all(&self) -> Result, ErrorKind> { + if self.connection.is_empty() { + Err(ErrorKind::Empty) + } else { + Ok(Vec::from_iter(self.connection.iter().cloned())) + } + } + + fn delete(&mut self, username: &str) -> Result<(), ErrorKind> { + let index = self.get_username_index(username)?; + self.connection.swap_remove(index); + Ok(()) + } + } +} From ecfa6158a42adede311c30db5292670de807182d Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Thu, 23 Nov 2023 20:12:56 -0600 Subject: [PATCH 0834/2103] challenge solution --- .../javascript/marvnramos.js | 3 --- .../javascript/marvnramos.js | 7 +++++ .../javascript/marvnramos.js | 26 +++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js index da152b10a0..774a382fab 100644 --- a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/marvnramos.js @@ -90,6 +90,3 @@ function firstPlace(input){ } firstPlace(input); - - - diff --git a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/javascript/marvnramos.js b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/javascript/marvnramos.js index b76f1edaa5..b93766e3af 100644 --- a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/javascript/marvnramos.js +++ b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/javascript/marvnramos.js @@ -16,6 +16,12 @@ const rl = readline.createInterface({ output: process.stdout }); +/** + * + * @param {*} question - Pregunta a realizar + * @param {*} options - Array de opciones + * @returns - Promise que se resuelve con la opción seleccionada + */ function askQuestion(question, options) { return new Promise((resolve, reject) => { const formattedOptions = options.map((option, index) => `${index + 1}. ${option}`); @@ -31,6 +37,7 @@ function askQuestion(question, options) { }); } + async function startSortingHat() { console.log('¡Bienvenido al Sombrero Seleccionador de Hogwarts!'); diff --git a/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/javascript/marvnramos.js b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/javascript/marvnramos.js index e69de29bb2..f786827ebc 100644 --- a/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/javascript/marvnramos.js +++ b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/javascript/marvnramos.js @@ -0,0 +1,26 @@ +/** + * Generates a random number between min and max (inclusive). + * @param {number} min - The minimum number in the range. + * @param {number} max - The maximum number in the range. + * @returns {number} - A random number between min and max. + */ +const getRandomNumber = (min, max) =>{ + + // Get the last 3 digits of the current timestamp + const lastThreeDigits = Date.now().toString().slice(-3); + + // Convert the last three digits to a number and divide by 10, rounding it + let randomNumber = Math.round(Number(lastThreeDigits) / 10); + + + // Ensure the random number is within the specified range + if (randomNumber < min) { + randomNumber = min; + } else if (randomNumber > max) { + randomNumber = max; + } + + return randomNumber; +} + +console.log(getRandomNumber(0, 100)); \ No newline at end of file From 812acae3c0a29dcb7b2adc29c9ff48f16f8f60fa Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Fri, 24 Nov 2023 09:11:55 -0300 Subject: [PATCH 0835/2103] Reto #27 - Python --- .../python/rokmanhaman.py" | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 "Retos/Reto #27 - CUENTA ATR\303\201S [Media]/python/rokmanhaman.py" diff --git "a/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/python/rokmanhaman.py" "b/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/python/rokmanhaman.py" new file mode 100644 index 0000000000..4fb401b616 --- /dev/null +++ "b/Retos/Reto #27 - CUENTA ATR\303\201S [Media]/python/rokmanhaman.py" @@ -0,0 +1,28 @@ +""" +Reto #27: CUENTA ATRÁS +MEDIA | Publicación: 03/07/23 | Resolución: 10/07/23 +/* + * Crea una función que reciba dos parámetros para crear una cuenta atrás. + * - El primero, representa el número en el que comienza la cuenta. + * - El segundo, los segundos que tienen que transcurrir entre cada cuenta. + * - Sólo se aceptan números enteros positivos. + * - El programa finaliza al llegar a cero. + * - Debes imprimir cada número de la cuenta atrás. + */ +""" + +import time + + +def countdown(number, second): + + if number <= 0 or type(number)== float: + print("\nError. El numero debe ser un entero positivo\n") + else: + for i in range(number, -1,-1): + print(i) + time.sleep(second) + print("Boom!!! 💥") + + +countdown(8,2) \ No newline at end of file From 89b2f5751933658b41ffb9409697bcab61a051da Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Fri, 24 Nov 2023 09:28:00 -0300 Subject: [PATCH 0836/2103] Reto #29 - Python --- .../python/rokmanhaman.py" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/rokmanhaman.py" diff --git "a/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/rokmanhaman.py" "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/rokmanhaman.py" new file mode 100644 index 0000000000..287f3bb1bf --- /dev/null +++ "b/Retos/Reto #29 - EL CAR\303\201CTER INFILTRADO [F\303\241cil]/python/rokmanhaman.py" @@ -0,0 +1,36 @@ +""" +Reto #29: EL CARÁCTER INFILTRADO +FÁCIL | Publicación: 17/07/23 | Resolución: 24/07/23 +/* + * Crea una función que reciba dos cadenas de texto casi iguales, + * a excepción de uno o varios caracteres. + * La función debe encontrarlos y retornarlos en formato lista/array. + * - Ambas cadenas de texto deben ser iguales en longitud. + * - Las cadenas de texto son iguales elemento a elemento. + * - No se pueden utilizar operaciones propias del lenguaje + * que lo resuelvan directamente. + * + * Ejemplos: + * - Me llamo mouredev / Me llemo mouredov -> ["e", "o"] + * - Me llamo.Brais Moure / Me llamo brais moure -> [" ", "b", "m"] + */ +""" + +def text_compare(text1, text2): + + lista = [text2[i] for i,j in enumerate(text2) if text1[i]!=text2[i]] + + + return lista + + + + +#a = "Me llamo.Brais Moure" +a = "Me llamo mouredev" +#b = "Me llamo brais moure" +b = "Me llemo mouredov" + +diff = text_compare(a,b) + +print(diff) \ No newline at end of file From f09e51a0dce604d0ae8b2dd2b8ace64f6d6eb472 Mon Sep 17 00:00:00 2001 From: Ramon Estol <131182895+REstolSurf@users.noreply.github.com> Date: Fri, 24 Nov 2023 12:43:00 +0000 Subject: [PATCH 0837/2103] Reto #45 - TypeScript --- .../typescript/restolsurf.ts" | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/restolsurf.ts" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/restolsurf.ts" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/restolsurf.ts" new file mode 100644 index 0000000000..9785f4f29d --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/restolsurf.ts" @@ -0,0 +1,129 @@ + +// readline es un módulo en Node.js que proporciona una interfaz para leer datos desde un flujo de entrada + +import * as readline from 'readline'; + +// Creamos la interfaz para realizar operaciones de entrada/salida +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +// Preguntamos si queremos mostrar el menú de nuevo +const menuPrompt = () => { + drawLine(); + console.log("(Introduce '0' si quieres volver a mostrar el menú.)"); + handleUserChoice(); +}; + +const drawLine = () => console.log("------------------------"); + +// creamos una clase para gestionar los participantes +class ParticipantesSorteoaDEViento { + participants: string[]; + + constructor() { + this.participants = []; + } + + // métodos para gestionar la clase + addParticipant(participantName: string): void { + if (this.participants.includes(participantName)) + console.log("El Participante ya existe"); + else { + this.participants.push(participantName); + console.log(`Felicidades! ${participantName} ha sido añadido.`); + } + } + + removeParticipant(participantName: string): void { + if (this.participants.includes(participantName)) { + const index = this.participants.indexOf(participantName); + this.participants.splice(index, 1); + console.log(`${participantName} ha sido eliminado del sorteo.`); + } else console.log("El Participante no existe"); + } + + showParticpants(): void { + this.participants.length === 0 + ? console.log("No hay ningún participante") + : this.participants.forEach((e) => console.log(e)); + } + + theWinnerIs(): void { + if (this.participants.length === 0) + console.log("No hay ningún participante todavía"); + else { + const indexWinner = Math.floor(Math.random() * this.participants.length); + const winnerName = this.participants[indexWinner]; + + console.log(`Muchas Felicidades! El ganador es ${winnerName}`); + this.removeParticipant(winnerName); + } + } +} + +// creamos los participantes e inicializamos mostrando el menú +const participants = new ParticipantesSorteoaDEViento(); +showMenu(); + +// Mostamos el menú de opciones en la terminal +function showMenu(): void { + console.log(`Menú: + 1. Añade un nuevo participante. + 2. Borra un participante. + 3. Muestra todos los participantes. + 4. Elije un ganador. + 5. Salir.`); + drawLine(); + handleUserChoice(); +} + +// configuramos rl para leer desde la consola y escribir en la consola. +function handleUserChoice(): void { + rl.question("Selecciona una opción: ", (respuesta) => { + drawLine(); + // respuesta recibe una string=> la convertimos a number + switch (Number(respuesta)) { + case 0: + showMenu(); + break; + case 1: + rl.question("Introduce un participante: ", (respuesta) => { + participants.addParticipant(respuesta); + menuPrompt(); + }); + break; + case 2: + rl.question("Introduce el participante a eliminar: ", (respuesta) => { + participants.removeParticipant(respuesta); + menuPrompt(); + }); + + break; + case 3: + participants.showParticpants(); + menuPrompt(); + break; + case 4: + participants.theWinnerIs(); + menuPrompt(); + break; + case 5: + rl.close(); + break; + default: + console.log( + "Esta opción no es valida. Selecciona una opción del menú." + ); + drawLine(); + showMenu(); + } + }); +} + +// Cerrar la interfaz readline al finalizar +rl.on("close", () => { + console.log("¡Hasta luego!"); + process.exit(0); +}); From 48a3633b21f0be5439e1f7abca59cb17776fd154 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Fri, 24 Nov 2023 10:40:52 -0300 Subject: [PATCH 0838/2103] Reto 30 - Python --- .../python/rokmanhaman.py | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Retos/Reto #30 - EL TECLADO T9 [Media]/python/rokmanhaman.py diff --git a/Retos/Reto #30 - EL TECLADO T9 [Media]/python/rokmanhaman.py b/Retos/Reto #30 - EL TECLADO T9 [Media]/python/rokmanhaman.py new file mode 100644 index 0000000000..2b94ceb994 --- /dev/null +++ b/Retos/Reto #30 - EL TECLADO T9 [Media]/python/rokmanhaman.py @@ -0,0 +1,62 @@ +""" +Reto #30: EL TECLADO T9 +MEDIA | Publicación: 24/07/23 | Resolución: 31/07/23 +/* + * Los primeros dispositivos móviles tenían un teclado llamado T9 + * con el que se podía escribir texto utilizando únicamente su + * teclado numérico (del 0 al 9). + * + * Crea una función que transforme las pulsaciones del T9 a su + * representación con letras. + * - Debes buscar cuál era su correspondencia original. + * - Cada bloque de pulsaciones va separado por un guión. + * - Si un bloque tiene más de un número, debe ser siempre el mismo. + * - Ejemplo: + * Entrada: 6-666-88-777-33-3-33-888 + * Salida: MOUREDEV + */ +""" + +def t9_code(number): + dict_code = { + "2" : "A", + "22" : "B", + "222" : "C", + "3" : "D", + "33" : "E", + "333" : "F", + "4" : "G", + "44" : "H", + "444" : "I", + "5" : "J", + "55" : "K", + "555" : "L", + "6" : "M", + "66" : "N", + "666" : "O", + "7" : "P", + "77" : "Q", + "777" : "R", + "7777" : "S", + "8" : "T", + "88" : "U", + "888" : "V", + "9" : "W", + "99" :"X", + "999" : "Y", + "9999" : "Z" + } + + out = "" + nlist= number.split("-") + for n in nlist: + out += dict_code[n] + + + return out + + + +num = "6-666-88-777-33-3-33-888" +output = t9_code(num) +print(output) \ No newline at end of file From 4788aff8c6606b15c1894eebfec706e56a48c327 Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Fri, 24 Nov 2023 08:41:54 -0500 Subject: [PATCH 0839/2103] Reto #21 - Python --- .../python/sublian.py" | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 "Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/python/sublian.py" diff --git "a/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/python/sublian.py" "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/python/sublian.py" new file mode 100644 index 0000000000..1a11e73ccd --- /dev/null +++ "b/Retos/Reto #21 - N\303\232MEROS PRIMOS GEMELOS [Media]/python/sublian.py" @@ -0,0 +1,42 @@ +# Reto #21: Números primos gemelos +#### Dificultad: Media | Publicación: 22/05/23 | Corrección: 29/05/23 | Mi solución: 24/11/2023 + +## Enunciado +# Crea un programa que encuentre y muestre todos los pares de números primos +# gemelos en un rango concreto. +# El programa recibirá el rango máximo como número entero positivo. +# - Un par de números primos se considera gemelo si la diferencia entre +# ellos es exactamente 2. Por ejemplo (3, 5), (11, 13) +# - Ejemplo: Rango 14 +# (3, 5), (5, 7), (11, 13) + +#creacion de funcion que revisa si es primo o no +def is_prime(number: int)->bool: + #definamos caso base + if number < 2: + return False + + #revisamos si es un numero primo + for index in range(2, number): + if number%index ==0: + return False + return True + +#mostramos los primos gemelos +def find_prime_twins(range_number: int): + if range_number >2: + print(f"Valores gemelos primos para <{range_number}>") + for index in range(2, range_number): + #revisa si el valor no excede el rango y valida si cada elemento es primo + if index +2 <=range_number and is_prime(index) and is_prime(index+2): + print(f"({index}, {index+2})") + else: + print(f"No hay numeros primos gemelos para <{range_number}>") + +if __name__ == "__main__": + + find_prime_twins(42) + find_prime_twins(2) + find_prime_twins(-100) + find_prime_twins(int(input("Ingresa un valor para evaluar la existencia de # primos gemelos: "))) + \ No newline at end of file From 5d9197534f4e1071e5346bb1a9a4864409e0333c Mon Sep 17 00:00:00 2001 From: Miquel Date: Fri, 24 Nov 2023 15:35:11 +0000 Subject: [PATCH 0840/2103] Reto #45 - C# --- .../c#/miquelcie.cs" | 171 ++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/miquelcie.cs" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/miquelcie.cs" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/miquelcie.cs" new file mode 100644 index 0000000000..dcd819d50c --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/miquelcie.cs" @@ -0,0 +1,171 @@ +/* + * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participación: + * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. + * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. + * (Y no lo duplicarás) + * - Si seleccionas mostrar los participantes, se listarán todos. + * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - Si seleccionas realizar el sorteo, elegirás una persona al azar + * y se eliminará del listado. + * - Si seleccionas salir, el programa finalizará. + */ +using System; +using static System.Runtime.InteropServices.JavaScript.JSType; + +namespace reto45 +{ + public class Reto45 + { + static void Main(string[] args) + { + Concurso concurso = new Concurso(); + Concurso.Option option = Concurso.Option.Inicio; + + + while (option != Concurso.Option.Salir) + { + option = concurso.ShowMenu(); + switch (option) + { + case Concurso.Option.Mostrar: + concurso.Mostrar(); + break; + case Concurso.Option.Anadir: + concurso.Anadir(); + break; + case Concurso.Option.Borrar: + concurso.Borrar(); + break; + case Concurso.Option.Lanzar: + concurso.Lanzar(); + break; + default: + break; + } + + } + } + + public class Concurso + { + private List participantes; + + public Concurso() + { + participantes = new List(); + } + + public void Lanzar() + { + Console.WriteLine("\n********* Sorteo ****************"); + Random random = new Random(); + int indiceAleatorio = random.Next(0, participantes.Count); + string nombreParticipante = participantes[indiceAleatorio]; + Console.WriteLine($"¡¡El ganador es {nombreParticipante}!!"); + + participantes.Remove(nombreParticipante); + + Console.WriteLine("*********************************\n"); + + Continuar(); + } + + private static void Continuar() + { + Console.WriteLine("Pulse una tecla para continuar"); + Console.ReadLine(); + } + + public void Borrar() + { + Console.WriteLine("\n********* Borrar participante ****************"); + Console.Write("Introduzca su nombre: "); + string nombreParticipante = Console.ReadLine(); + if (!string.IsNullOrWhiteSpace(nombreParticipante) && participantes.Contains(nombreParticipante)) + { + participantes.Remove(nombreParticipante); + Console.WriteLine($"El participante {nombreParticipante} se ha borrado"); + } + else + { + Console.WriteLine("¡¡El participante no existe!!"); + } + Console.WriteLine("*************************************************\n"); + + Continuar(); + } + + public void Anadir() + { + Console.WriteLine("\n********* Añadir participante ****************"); + Console.Write("Introduzca su nombre: "); + string nombre = Console.ReadLine(); + if (!participantes.Contains(nombre)) + { + participantes.Add(nombre); + } + else + { + Console.WriteLine("¡¡Participante ya existe!!"); + } + Console.WriteLine("*************************************************\n"); + + Continuar(); + } + + public void Mostrar() + { + + Console.WriteLine("\n********* Lista de participantes ****************"); + foreach (string participante in participantes) + { + Console.WriteLine(participante); + } + + Console.WriteLine("*************************************************\n"); + + Continuar(); + } + + public Option ShowMenu() + { + Console.Clear(); + + Console.WriteLine("\n*************************"); + Console.WriteLine("0. Salir"); + Console.WriteLine("1. Mostrar participantes"); + Console.WriteLine("2. Añadir participante"); + Console.WriteLine("3. Borrar participante"); + Console.WriteLine("4. Lanzar sorteo"); + Console.WriteLine("*************************\n"); + Console.Write("Elija una opción: "); + Option option = (Option)Enum.Parse(typeof(Option), Console.ReadLine()); + if (!Enum.IsDefined(typeof(Option), option)) + { + Console.WriteLine("¡¡Opcion no permitida!!"); + } + + return option; + + } + + public enum Option + { + Inicio = -1, + Salir = 0, + Mostrar = 1, + Anadir = 2, + Borrar = 3, + Lanzar = 4 + } + } + } + +} \ No newline at end of file From f57973d40d8ed24351fa9cf1e0d2bc3dc2e5710c Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Fri, 24 Nov 2023 12:37:49 -0300 Subject: [PATCH 0841/2103] Reto #31 - Python --- .../python/rokmanhaman.py" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/python/rokmanhaman.py" diff --git "a/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/python/rokmanhaman.py" "b/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/python/rokmanhaman.py" new file mode 100644 index 0000000000..1573bda5df --- /dev/null +++ "b/Retos/Reto #31 - EL \303\201BACO [F\303\241cil]/python/rokmanhaman.py" @@ -0,0 +1,41 @@ +""" +Reto #31: EL ÁBACO +FÁCIL | Publicación: 31/07/23 | Resolución: 07/08/23 +/* + * Crea una función que sea capaz de leer el número representado por el ábaco. + * - El ábaco se representa por un array con 7 elementos. + * - Cada elemento tendrá 9 "O" (aunque habitualmente tiene 10 para realizar + * operaciones) para las cuentas y una secuencia de "---" para el alambre. + * - El primer elemento del array representa los millones, y el último las unidades. + * - El número en cada elemento se representa por las cuentas que están a + * la izquierda del alambre. + * + * Ejemplo de array y resultado: + * ["O---OOOOOOOO", + * "OOO---OOOOOO", + * "---OOOOOOOOO", + * "OO---OOOOOOO", + * "OOOOOOO---OO", + * "OOOOOOOOO---", + * "---OOOOOOOOO"] + * + * Resultado: 1.302.790 + */ +""" + + + +def abaco(array): + + num = "" + for n in array: + num += str(len(n.split("-")[0])) + + return num + + +n = ["O---0OOOOOOO", "OOO---OOOOOO", "---OOOOOOOOO", "OO---OOOOOOO","OOOOOOO---OO","OOOOOOOOO---","---OOOOOOOOO"] + +numero = abaco(n) + +print(numero) From 45e5035b3b00f97c7e8841370b58326e5791359d Mon Sep 17 00:00:00 2001 From: Juan Pablo Patino Lopez Date: Fri, 24 Nov 2023 19:19:59 +0100 Subject: [PATCH 0842/2103] Juanppdev - Reto #45 - Python --- .../python/juanppdev.py" | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/juanppdev.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/juanppdev.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/juanppdev.py" new file mode 100644 index 0000000000..9459bce8fb --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/juanppdev.py" @@ -0,0 +1,60 @@ +import random + +participantes = [] + +def mostrar_participantes(): + print("Lista de participantes:") + for participante in participantes: + print(participante) + print() + +def agregar_participante(): + nombre = input("Introduce el nombre del participante: ") + if nombre in participantes: + print("Este participante ya existe.") + else: + participantes.append(nombre) + print(f"{nombre} ha sido añadido correctamente.") + +def eliminar_participante(): + nombre = input("Introduce el nombre del participante que deseas eliminar: ") + if nombre in participantes: + participantes.remove(nombre) + print(f"{nombre} ha sido eliminado correctamente.") + else: + print("Este participante no existe en la lista.") + +def realizar_sorteo(): + if participantes: + ganador = random.choice(participantes) + print(f"¡El ganador del sorteo es: {ganador}!") + participantes.remove(ganador) + else: + print("No hay participantes para realizar el sorteo.") + +def main(): + while True: + print("1. Añadir participante") + print("2. Mostrar participantes") + print("3. Eliminar participante") + print("4. Realizar sorteo") + print("5. Salir") + + opcion = input("Selecciona una opción (1-5): ") + + if opcion == "1": + agregar_participante() + elif opcion == "2": + mostrar_participantes() + elif opcion == "3": + eliminar_participante() + elif opcion == "4": + realizar_sorteo() + elif opcion == "5": + print("Saliendo del programa. ¡Hasta luego!") + break + else: + print("Opción no válida. Por favor, selecciona una opción válida.") + +if __name__ == "__main__": + main() From ab8f9d88a8288d019da9f6c1448556fad88e5e98 Mon Sep 17 00:00:00 2001 From: keltoi-dev Date: Fri, 24 Nov 2023 18:46:53 -0300 Subject: [PATCH 0843/2103] Reto #45 - Python --- .../python/keltoi-dev.py" | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/keltoi-dev.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/keltoi-dev.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/keltoi-dev.py" new file mode 100644 index 0000000000..b3b0a93947 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/keltoi-dev.py" @@ -0,0 +1,103 @@ +""" +* ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participación: + * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. + * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. + * (Y no lo duplicarás) + * - Si seleccionas mostrar los participantes, se listarán todos. + * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - Si seleccionas realizar el sorteo, elegirás una persona al azar + * y se eliminará del listado. + * - Si seleccionas salir, el programa finalizará. +""" + +import random +import os + +condicion = "" +particpantes = [] + +def menu(): + if os.name == "nt": + os.system("cls") + else: + os.system("clear") + + opciones = "1234" + print("*** MENU ***") + print("1.- Añadir un participante") + print("2.- Eliminar un participante") + print("3.- Listar los participantes") + print("4.- Sortear premio") + print("0.- Salir de la aplicacion") + seleccion = input("\nSelecciones una opcion: ") + global condicion + if seleccion in opciones: + condicion = True + else: + condicion = False + + return seleccion + +def alta(): + global particpantes + ingresante = input("Ingrese un participante: ") + if ingresante != "": + if ingresante.capitalize() in particpantes: + print("El dato ingresado ya existe.") + alta() + else: + particpantes.append(ingresante.capitalize()) + + continuar = input("Desea ingresar otro participante? (s/n) ") + if continuar.lower() == "s": + alta() + +def baja(): + ingresante = input("Ingrese el participante a eliminar: ") + if ingresante != "": + if ingresante.capitalize() in particpantes: + particpantes.remove(ingresante.capitalize()) + else: + print("El participante no existe:") + baja() + + continuar = input("Desea eliminar otro participante? (s/n) ") + if continuar.lower() == "s": + baja() + +def mostrar(): + print("Listado de participantes") + for i in particpantes: + print(i) + continuar = input("Presione una tecla para continuar") + + +def sorteo(): + print("Sorteo de premio") + if not particpantes: + print("No hay perticipantes para realizar el sorteo") + else: + ganador = random.choice(particpantes) + print(f"El ganador es {ganador}") + particpantes.remove(ganador) + continuar = input("Presione una tecla para continuar") + +print("Bienvenido!!!") +seleccion = menu() +while condicion: + if seleccion == "1": + alta() + elif seleccion == "2": + baja() + elif seleccion == "3": + mostrar() + else: + sorteo() + seleccion = menu() \ No newline at end of file From 2cf189bf928f97adc335fb9d838b1a2c151f9a8e Mon Sep 17 00:00:00 2001 From: Miguel Jimenez Lopez Date: Sat, 25 Nov 2023 01:08:23 +0100 Subject: [PATCH 0844/2103] Reto 43: Javascript. --- .../javascript/klyone.js" | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/klyone.js" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/klyone.js" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/klyone.js" new file mode 100644 index 0000000000..1dcd3fcfa5 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/javascript/klyone.js" @@ -0,0 +1,81 @@ + +function simulateWeather(initialTemperature, rainLikehood, days) { + result = {} + simulation = [] + simulation.push({temperature: initialTemperature, + rain: rainLikehood, rained: (rainLikehood == 100) ? true : false}) + + let temperature = initialTemperature + let rain = rainLikehood + + for (i = 0 ; i < days ; i++) { + let d = passNextDay({temperature: temperature, rain: rain}) + simulation.push(d) + temperature = d.temperature + rain = d.rain + } + + result.simulation = simulation + + let maxTemp = result.simulation[0].temperature + let minTemp = result.simulation[0].temperature + let rainedDays = 0 + + result.simulation.forEach((d) => { + if (d.temperature > maxTemp) + maxTemp = d.temperature + if (d.temperature < minTemp) + minTemp = d.temperature + if (d.rained) + rainedDays++ + }) + + result.metrics = {maxTemperature: maxTemp, minTemperature: minTemp, rainedDays: rainedDays} + + return result +} + +function passNextDay({temperature, rain}) +{ + let newTemperature = temperature + let newRain = rain + let rained = false + const getRandom = () => Math.floor(Math.random() * 101) + + if (rain == 100) { + newTemperature -= 1 + newRain = 0 + rained = true + } + else { + let tempIncrease = getRandom() < 10 + if (tempIncrease) { + newTemperature += 2 + } + else { + let tempDecrease = getRandom() < 10 + if (tempDecrease) { + newTemperature -= 2 + } + } + } + + if (temperature > 25) { + newRain += 20 + if (newRain > 100) + newRain = 100 + } else { + if (temperature < 5) { + newRain -= 20; + if (newRain < 0) + newRain = 0 + } + } + + return {temperature: newTemperature, rain: newRain, rained: rained} +} + +console.log(simulateWeather(15, 10, 7)) +console.log(simulateWeather(25, 30, 10)) +console.log(simulateWeather(5, 25, 3)) +console.log(simulateWeather(30, 50, 9)) From ea8f6fd46d11db0c54a1b7303c2d42f57d8df51a Mon Sep 17 00:00:00 2001 From: treber Date: Fri, 24 Nov 2023 21:02:18 -0500 Subject: [PATCH 0845/2103] Reto #9 - Python --- .../python/treber.py" | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 "Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/treber.py" diff --git "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/treber.py" "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/treber.py" new file mode 100644 index 0000000000..c136322cae --- /dev/null +++ "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/python/treber.py" @@ -0,0 +1,80 @@ +# Reto #9: Heterograma, isograma y pangrama +#### Dificultad: Fácil | Publicación: 27/02/23 | Corrección: 06/03/23 + +## Enunciado +""" +/* + * Crea 3 funciones, cada una encargada de detectar si una cadena de + * texto es un heterograma, un isograma o un pangrama. + * - Debes buscar la definición de cada uno de estos términos. + */ +""" +""" +* Heterograma: +Un heterograma (del griego héteros, 'diferente' y gramma, 'letra') +es una palabra o frase que no contiene ninguna letra repetida. + +* Isograma: +Un isograma (del griego isos, 'igual' y gramma, 'letra') +es una palabra o frase en la que cada letra aparece el mismo número de veces + +* Pangrama: +Un pangrama (del griego pan, 'todo' y gramma, 'letra') +es una frase en la que aparecen todas las letras del abecedario. +Si cada letra aparece sólo una vez, formando por tanto un heterograma, se le llama pangrama perfecto + +""" +import string + +def pangrama(txt): # + + txt = txt.lower() + for i in string.ascii_lowercase: + if i not in txt: + return False + + return True + +def heterograma(txt): + + for i in range(len(txt)): + start = i+1 + if start < len(txt): + if txt[i] in txt[start:len(txt)]: + return False + + return True + +def isograma(txt): + + for i in range(len(txt)): + start = i+1 + if start < len(txt): + if txt[i] in txt[start:len(txt)]: + return True + + return False + + +def inputTexto(): + + txt_input = input("Escriba una palabra o frase: ") + + if pangrama(txt_input): + print("El texto es un pangrama.") + elif heterograma(txt_input): + print("El texto es un heterograma.") + elif isograma(txt_input): + print("El texto es un isograma.") + else: + print("El texto no es un heterograma, isograma ni pangrama.") + + +inputTexto() + +""" +Probar los siguientes textos: +1. Benjamín pidió una bebida de kiwi y fresa. Noé, sin vergüenza, la más exquisita champaña del menú +2. yuxtaponer +3. escritura +""" \ No newline at end of file From 62c348262edaa3664244cff8307e12801fd60957 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Fri, 24 Nov 2023 20:37:02 -0600 Subject: [PATCH 0846/2103] add marvnramos.js --- .../javascript/marvnramos.js" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" diff --git "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" new file mode 100644 index 0000000000..e69de29bb2 From f1074935515b94c25c78c9971a27e606c4a838ea Mon Sep 17 00:00:00 2001 From: Robert Barrios <70554812+robertbarac@users.noreply.github.com> Date: Fri, 24 Nov 2023 21:38:52 -0500 Subject: [PATCH 0847/2103] Create robertbarac.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit agregando mi primera aproximación a la solución del reto 45 --- .../python/robertbarac.py" | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/robertbarac.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/robertbarac.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/robertbarac.py" new file mode 100644 index 0000000000..b5a2d11518 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/robertbarac.py" @@ -0,0 +1,94 @@ +import os +from time import sleep +from random import choice + +lista_regalos = [i for i in range(1,25)] +lista_participantes = [] + +def menu(): + mensaje_input = """ + Programa navideño aDEViento + Seleccione una de las opciones: + 1. Añadir participante + 2. Eliminar participante + 3. Mostrar participantes + 4. Lanzar el sorteo + 5. Salir + """ + print(mensaje_input) + opcion = int(input()) + while True: + if opcion == 1: + os.system("cls") + agregar_participante() + elif opcion == 2: + eliminar_participante() + elif opcion == 3: + os.system("cls") + mostrar_participante() + elif opcion == 4: + os.system("cls") + lanzar_sorteo() + elif opcion == 5: + os.system("cls") + salir() + else: + print("Opción errada") + + +def agregar_participante(): + nombre = input("Ingresa el nombre del participante: ") + nombre = nombre.title() + if nombre in lista_participantes: + print("Este participante está agregado previamente") + sleep(1) + os.system("cls") + menu() + else: + lista_participantes.append(nombre) + print("Participante agregado...") + sleep(1) + os.system("cls") + menu() + +def eliminar_participante(): + nombre = input("Escriba el nombre del participante a eliminar: ").title() + if nombre in lista_participantes: + indice = lista_participantes.index(nombre) + print(f"Eliminando a {nombre}...") + sleep(1) + lista_participantes.remove(nombre) + print(f"Ha sido eliminado {nombre}") + sleep(1) + os.system("cls") + menu() + else: + print(f"{nombre} no está en los participantes") + sleep(1) + os.system("cls") + menu() + +def mostrar_participante(): + print("Éstos son los participantes:") + for i in range(len(lista_participantes)): + print(lista_participantes[i]) + sleep(1) + os.system("cls") + menu() + +def lanzar_sorteo(): + nombre = choice(lista_participantes) + regalo = choice(lista_regalos) + print(f"Hoy ganó {nombre} el regalo {regalo}") + sleep(2) + lista_participantes.remove(nombre) + os.system("cls") + menu() + +def salir(): + print("Saliendo de aplicación") + print("Adiós") + exit() + +if __name__ == "__main__": + menu() From 5921b16144254a41606a6ebde8d708101961a78f Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Fri, 24 Nov 2023 20:40:21 -0600 Subject: [PATCH 0848/2103] hello world in cs --- .../c#/marvnramos.cs" | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c#/marvnramos.cs" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c#/marvnramos.cs" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c#/marvnramos.cs" new file mode 100644 index 0000000000..ff168f9c1e --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c#/marvnramos.cs" @@ -0,0 +1,9 @@ +using System; + +public class Program +{ + public static void Main() + { + Console.WriteLine("Hello, World!"); + } +} From 11136af3957b690586a001dd097f1853212a9d87 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Fri, 24 Nov 2023 20:51:30 -0600 Subject: [PATCH 0849/2103] add functions isHeterogram, isIsogram y IsPangram --- .../javascript/marvnramos.js" | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" index e69de29bb2..5166b57a99 100644 --- "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" +++ "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" @@ -0,0 +1,13 @@ + +const isHeterogram = function(string){ + // logic here +} + +const isIsogram = function(string){ + // logic here +} + + +const isPangram = function(string){ + // logic here +} \ No newline at end of file From 7ec8edd089fd9ba61629f038b59037622f4bdd4a Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Fri, 24 Nov 2023 21:31:33 -0600 Subject: [PATCH 0850/2103] add isHeterogram feature logic --- .../javascript/marvnramos.js" | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" index 5166b57a99..68b53de405 100644 --- "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" +++ "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" @@ -1,13 +1,29 @@ - +/** + * A function that tests if a string is a heterogram + * @param {*} string - a string to be tested + * @returns - true if the string is a heterogram, false otherwise + */ const isHeterogram = function(string){ - // logic here -} + for(let i = 0; i < string.length; i++){ + let character = string[i]; + + if(string.indexOf(character) !== string.lastIndexOf(character)){ + return false; // the character is repeated + }; + }; + + return true; +}; const isIsogram = function(string){ // logic here -} +}; const isPangram = function(string){ // logic here -} \ No newline at end of file +}; + +let string = "abcdefga"; + +console.log(isHeterogram(string)); From 4dff0c298e69d96e0e65e82c66c2c79e65b96b5b Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Fri, 24 Nov 2023 21:58:30 -0600 Subject: [PATCH 0851/2103] add isIsogram feature logic --- .../javascript/marvnramos.js" | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" index 68b53de405..4b925a4fe2 100644 --- "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" +++ "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" @@ -15,8 +15,27 @@ const isHeterogram = function(string){ return true; }; +/** + * Validates if a string is an isogram + * @param {*} string - a string to be tested + * @returns - true if the string is an isogram, false otherwise + */ const isIsogram = function(string){ - // logic here + const containsNumbers = /[0-9]/; + + if(containsNumbers.test(string)){ + return false; // the string contains numbers so it is not an isogram + } + + for(let i = 0; i < string.length; i++){ + let character = string[i]; + + if(string.indexOf(character) !== string.lastIndexOf(character)){ + return false; // the character is repeated + }; + }; + + return true; }; @@ -24,6 +43,6 @@ const isPangram = function(string){ // logic here }; -let string = "abcdefga"; - -console.log(isHeterogram(string)); +let string = "abcdefg 1xyz"; +// console.log(isHeterogram(string)); +console.log(isIsogram(string)); From f819dd710b8ed7da61f7e7fa5fe24cef25249c32 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Fri, 24 Nov 2023 22:21:28 -0600 Subject: [PATCH 0852/2103] add isPangram feature logic --- .../javascript/marvnramos.js" | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" index 4b925a4fe2..6311e6a853 100644 --- "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" +++ "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/marvnramos.js" @@ -38,11 +38,36 @@ const isIsogram = function(string){ return true; }; - +/** + * Validates if a string is a pangram + * @param {*} string - a string to be tested + * @returns - true if the string is a pangram, false otherwise + */ const isPangram = function(string){ - // logic here + const containsNumbers = /[0-9]/; + const containsSpecialCharacters = /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/; + + if(containsNumbers.test(string) || containsSpecialCharacters.test(string)){ + return false; // the string contains numbers or special characteres so it is not an pangram + } + + const regex = /[a-z]/g; + let lowerCaseString = string.toLowerCase(); + let letters = new Set(lowerCaseString.match(regex)); + + return letters.size === 26; // the string contains all the letters of the alphabet }; -let string = "abcdefg 1xyz"; -// console.log(isHeterogram(string)); -console.log(isIsogram(string)); + +let string_heterogram = "Hi, het3rog4m"; +console.log(isHeterogram(string_heterogram)); + + +let string_isogram = "H3y, 1s0gr4ms 4r3 c00l!"; +let string_isogram2 = "Hey isogram"; +console.log(isIsogram(string_isogram)); +console.log(isIsogram(string_isogram2)); + +let string_pangram = "The quick brown fox jumps over a lazy dog"; +console.log(isPangram(string_pangram)); + From dd193be1f0225ffd2e2ad1932188ae7f60f1a191 Mon Sep 17 00:00:00 2001 From: jamerrq Date: Sat, 25 Nov 2023 00:49:21 -0500 Subject: [PATCH 0853/2103] =?UTF-8?q?=F0=9F=8E=84=20Soluci=C3=B3n=20Reto?= =?UTF-8?q?=2044,=20Python=20by=20@jamerrq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/jamerrq.py" | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/jamerrq.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/jamerrq.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/jamerrq.py" new file mode 100644 index 0000000000..5297b98b6f --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/jamerrq.py" @@ -0,0 +1,132 @@ +import random as rd +import sys + + +def clear(): + sys.stdout.write("\033c") + + +class Participation: + + def __init__(self): + + self.participants = set([]) + self.cursor = '→' + self.prompt = f'Inserta el nombre del participante\n{self.cursor} ' + + def ask_prompt(self): + + name = input(self.prompt) + return name + + def add_participant(self): + + name = self.ask_prompt() + + if name in self.participants: + + print('Error: este personaje ya existe') + + else: + + self.participants.add(name) + print('El participante ha sido agregado correctamente!') + + def delete_participant(self): + + name = self.ask_prompt() + + if name in self.participants: + + self.participants.remove(name) + print('El participante ha sido borrado exitosamente!') + + else: + + print(f'Error: no ha sido encontrado un particante con nombre: {name}') + + def show_participants(self): + + print('***** Lista de participantes *****') + + for (index, participant) in enumerate(self.participants): + + print(index + 1, participant) + + print(f'Hay un total de {len(self.participants)} {"participantes" if len(self.participants) != 1 else "participante"} registrado{"s" if len(self.participants) != 1 else ""}!\n') + + def giveaway(self): + + if not len(self.participants): + + print('Error: no hay participantes registrados todavía!') + + else: + + winner = rd.choice(list(self.participants)) + + print(f'The winner is: {winner}') + self.participants.remove(winner) + + + def show_menu(self): + + print('1. Añadir participante.') + print('2. Remover participante.') + print('3. Listar participantes.') + print('4. Realizar sorteo') + print('5. Salir') + + while True: + + option = input(self.cursor + ' ') + + try: + + option = int(option) + + if 0 <= option or option > 5: + print('Error. Opción fuera de rango') + print(option) + + except ValueError: + + print('Error: Opción inválida') + print(option) + continue + + return option + + + def start(self): + + print('Bienvenido al calendario de aDEViento') + print('24 días, 24 regalos sorpresa relacionados con desarrollo de software') + print('Desde el 1 al 24 de diciembre.') + + while True: + + + option = self.show_menu() + clear() + + if option == 1: + self.add_participant() + + if option == 2: + self.delete_participant() + + if option == 3: + self.show_participants() + + if option == 4: + self.giveaway() + + if option == 5: + print('Saliendo...') + break + + +if __name__ == '__main__': + calendar = Participation() + calendar.start() From 6febde0ead1f44c5e8fae9ebab49a014d3b8ad15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Jos=C3=A9=20Lojo=20Ojeda?= <57002879+ajloinformatico@users.noreply.github.com> Date: Sat, 25 Nov 2023 14:25:39 +0100 Subject: [PATCH 0854/2103] Add reto 45 --- .../python/ajloinformatico.py" | 229 ++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/ajloinformatico.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/ajloinformatico.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/ajloinformatico.py" new file mode 100644 index 0000000000..991f483502 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/ajloinformatico.py" @@ -0,0 +1,229 @@ +import os +import random + +""" +/* + * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participación: + * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. + * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. + * (Y no lo duplicarás) + * - Si seleccionas mostrar los participantes, se listarán todos. + * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - Si seleccionas realizar el sorteo, elegirás una persona al azar + * y se eliminará del listado. + * - Si seleccionas salir, el programa finalizará. + */ +""" + +APP_NAME = """ +####################################### + Lottery + + by infolojo + https:://infolojo.es + Antonio José Lojo Ojeda +####################################### +""" + +class Competitor: + def __init__(self, id: int, name: str): + self.id = id + self.name = name + +class ErrorMessages: + def __init__(self): + self.no_competitors: str = "There are not registered competitors yet" + self.id_type_error: str = "Error: I think that was not an id" + self.not_found: str = "Competitor not found" + self.empty_name: str = "Competitor name can not be empty" + self.duplicated: str = "We have a competitor registered with this name" + +class Lottery: + def __init__(self, competitors: list = list(), lastId = 0): + self.commands: str = """ +Please select a command (id or name): + 0. commands + 1. add + 2. remove + 3. list + 4. Play + 5. exit + """ + self.currentLottery: int = 0 + self.lastId: int = lastId + self.app_name: str = APP_NAME + self.error_manager: ErrorMessages = ErrorMessages() + self.competitors: list = competitors + + # region main class methods + def start(self): + self.start + + def clear(self): + # uncomment by checking your or + # clear windows screen + os.system('CLS') + # clear linux screen + # os.system('clear') + + def add(self, competitor: Competitor): + self.competitors.append(competitor) + + def remove(self, idOrName: str): + id: int = -1 + name: str = "" + + try: + id = int(idOrName) + except: + name = idOrName.lower().capitalize() + + for competitor in self.competitors: + if competitor.id == id or name == competitor.name: + print(competitor.name + " has been removed") + self.competitors.remove(competitor) + return + + print(self.error_manager.not_found) + + def are_competitors_empty(self): + if (len(self.competitors) == 0): + print(self.error_manager.no_competitors) + return True + return False + + def check_if_exists(self, name: str): + for competitor in self.competitors: + if competitor.name == name: + print(self.error_manager.duplicated) + return True + return False + # endregion main class methods + + # region menu actions + def print_commands(self): + print(self.commands) + + def print_competitors(self): + if self.are_competitors_empty(): + return + + print("Registered competitors:\n") + for competitor in self.competitors: + print(str(competitor.id) + "-" + competitor.name) + + def create_new_user(self, id: int): + name: str = input(">>> Input new competitor name: ").lower().capitalize() + if name == "": + print(self.error_manager.empty_name) + return + if self.check_if_exists(name): + return + + new_competitor = Competitor(id, name) + self.add(new_competitor) + print(f"\n {name} has been added") + + def remove_competitor(self): + if self.are_competitors_empty(): + return + + print(f">>> Input id or name competitor that you want to remove:\n") + self.print_competitors() + competitorToRemove: str = input("\n>>> ") + self.remove(competitorToRemove) + + def play(self): + if self.are_competitors_empty(): + return + winner = random.choice(self.competitors) + print(f"The winner of {self.currentLottery} is {winner.name}") + self.currentLottery += 1 + + def exit(self): + print("\n Thanks for using and See you soon \n") + exit(-1) + + # endregion menu actions + + # region main loop + def start(self): + self.clear() + print(APP_NAME) + self.print_commands() + while (True): + userInput: str = input("\n>>> Select one option ") + + if userInput == "0" or userInput == "commands": + self.clear() + self.print_commands() + + elif userInput == "1" or userInput == "add": + self.clear() + self.lastId += 1 + self.create_new_user(self.lastId) + + elif userInput == "2" or userInput == "remove": + self.clear() + self.remove_competitor() + + elif userInput == "3" or userInput == "list": + self.clear() + self.print_competitors() + + elif userInput == "4" or userInput == "play": + self.clear() + self.play() + + elif userInput == "5" or userInput == "exit": + self.clear() + self.exit() + + else: + self.clear() + print("not a valid input") + + print("\n-Remmember 0 to print commands-") + # endregion main loop + + +def seeder(): + return Lottery( + [ + Competitor( + 1, + "Juan" + ), + Competitor( + 2, + "Maria" + ), + Competitor( + 3, + "Alicia" + ), + Competitor( + 4, + "Toni" + ), + Competitor( + 5, + "Euge" + ) + ], + 5 + ) + + +if __name__ == "__main__": + # If you want to use mock uncomment this and comment next app = Lottery() + # app = seeder() + app = Lottery() + app.start() From c33f9408f99eaa82ca9013123380e3ab5fac0724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nil=20Casa=C3=B1=C3=A9?= <146170925+nilcasane@users.noreply.github.com> Date: Sat, 25 Nov 2023 16:14:14 +0100 Subject: [PATCH 0855/2103] Reto #45 - Java --- .../java/nilcasane.java" | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/java/nilcasane.java" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/java/nilcasane.java" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/java/nilcasane.java" new file mode 100644 index 0000000000..64fe89ca93 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/java/nilcasane.java" @@ -0,0 +1,96 @@ +package challenge_45; + +import java.util.Random; +import java.util.Scanner; + +public class Challenge_45 { + + public static void main (String[]args) { + + Scanner read = new Scanner(System.in); + Random alea = new Random(); + + int id; + String participantes[]; + String accion, nombre; + boolean cerrar = false; + + participantes = new String [0]; + + while (!cerrar) { + System.out.print("Indica la acción que deseas realizar: "); + accion = read.nextLine(); + System.out.println(); + switch (accion) { + case "añadir": + System.out.print("\tIntroduce el nombre del participante que deseas añadir: "); + nombre = read.nextLine(); + System.out.println(); + id = buscarParticipante(participantes,nombre); + if(id<0) { + participantes = añadirParticipante(participantes, nombre); + System.out.println("\t\tParticipante añadido"); + } else { + System.out.println("\t\tEl participante ya existe!"); + } + break; + case "borrar": + System.out.print("\tIntroduce el nombre del participante que deseas borrar: "); + nombre = read.nextLine(); + System.out.println(); + id = buscarParticipante(participantes,nombre); + if(id<0) { + System.out.println("\t\tEl participante no existe!"); + } else { + participantes = borrarParticipante(participantes,id); + System.out.println("\t\tParticipante borrado"); + } + break; + case "mostrar": + System.out.println("\tEste es el listado de participantes: \n"); + for(id = 0; id Date: Sat, 25 Nov 2023 16:38:57 +0100 Subject: [PATCH 0856/2103] Reto 44: Javascript. --- .../javascript/klyone.js" | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/klyone.js" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/klyone.js" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/klyone.js" new file mode 100644 index 0000000000..0ba901dd1a --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/klyone.js" @@ -0,0 +1,92 @@ + +const readline = require('node:readline/promises'); + +const SUM = 0; +const SUB = 1; +const MUL = 2; +const DIV = 3; +const TIMEOUTMS = 3000; + +function getOperation() { + return Math.floor(Math.random() * 4); +} + +function getRandom(digits) { + return Math.floor(Math.random() * (10**digits)); +} + +async function playGame() { + let aDigits = 1; + let bDigits = 1; + let endGame = false; + let answeredQuestions = 0; + let aToBeUpdated = true; + + const prompt = readline.createInterface({ input: process.stdin, output: process.stdout }) + + while (!endGame) { + let a = getRandom(aDigits); + let b = getRandom(bDigits); + let op = getOperation(); + let opStr = ""; + let res = 0; + + switch (op) { + case SUM: + res = parseInt(Math.floor(a + b)); + opStr = "+"; + break; + case SUB: + res = parseInt(Math.floor(a - b)); + opStr = "-"; + break; + case MUL: + res = parseInt(Math.floor(a * b)); + opStr = "*"; + break; + case DIV: + if (b == 0) { + b++; + } + res = parseInt(Math.floor(a / b)); + opStr = "/"; + break; + default: + throw new Error("Unexpected operation"); + break; + } + + console.log(`${a} ${opStr} ${b} = ?`); + + try { + const answer = parseInt(await prompt.question("Result: ", { signal: AbortSignal.timeout(TIMEOUTMS)})); + + if (res !== answer) { + console.log(`Wrong answer, correct is ${res}`); + endGame = true; + } + else { + answeredQuestions++; + + if (answeredQuestions % 5 == 0) { + if (aToBeUpdated) { + aDigits++; + aToBeUpdated = false; + } else { + bDigits++; + aToBeUpdated = true; + } + } + } + } catch(error) { + endGame = true; + } + + } + + prompt.close(); + + console.log(`You have answered ${answeredQuestions}`); +} + +playGame(); From c8fb49b6bbc8f4b14f7ec6b6ce59b819dc401475 Mon Sep 17 00:00:00 2001 From: Billy Torres Date: Sat, 25 Nov 2023 09:46:31 -0600 Subject: [PATCH 0857/2103] Reto #2 - JavaScript --- .../javascript/BRivasTorres.js | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/BRivasTorres.js diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/BRivasTorres.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/BRivasTorres.js new file mode 100644 index 0000000000..6f2494c8a8 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/BRivasTorres.js @@ -0,0 +1,51 @@ +const points = { + 0: "Love", + 1: 15, + 2: 30, + 3: 40, +}; + +const showGame = (arr) => { + let results = ""; + let [currPointsP1, currPointsP2] = [0, 0]; + + for (let i = 0; i < arr.length; i++) { + let currPoint = arr[i]; + + switch (currPoint) { + case "P1": + currPointsP1++; + break; + case "P2": + currPointsP2++; + break; + default: + break; + } + + if (currPointsP1 >= 4 && currPointsP1 - currPointsP2 >= 2) { + results += "Ha ganado P1\n"; + break; + } else if (currPointsP2 >= 4 && currPointsP2 - currPointsP1 >= 2) { + results += "Ha ganado P2\n"; + break; + } + + if (currPointsP1 >= 3 && currPointsP2 >= 3) { + if (currPointsP1 === currPointsP2) { + results += "Deuce\n"; + } else if (currPointsP1 - currPointsP2 === 1) { + results += "Ventaja P1\n"; + } else if (currPointsP2 - currPointsP1 === 1) { + results += "Ventaja P2\n"; + } + } else { + results += `${points[currPointsP1] || currPointsP1} - ${ + points[currPointsP2] || currPointsP2 + }\n`; + } + } + return results; +}; + +console.log(showGame(["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"])); From 96a84fe0e7b7a489b94f97b481b32eb86ff36240 Mon Sep 17 00:00:00 2001 From: Rodrigo Sambade Date: Sat, 25 Nov 2023 18:31:25 +0100 Subject: [PATCH 0858/2103] Ajustes necesarios --- .../javascript/rodrigosambadesaa.js" | 0 .../javascript/rodrigosambadesaa.js" | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rodrigo-sambade-saa.js" => "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rodrigosambadesaa.js" (100%) rename "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigo-sambade-saa.js" => "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigosambadesaa.js" (100%) diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rodrigo-sambade-saa.js" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rodrigosambadesaa.js" similarity index 100% rename from "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rodrigo-sambade-saa.js" rename to "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/rodrigosambadesaa.js" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigo-sambade-saa.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigosambadesaa.js" similarity index 100% rename from "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigo-sambade-saa.js" rename to "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/rodrigosambadesaa.js" From f9aaca3be46d2622a0a74b080cfefec888728c71 Mon Sep 17 00:00:00 2001 From: jamerrq Date: Sat, 25 Nov 2023 12:51:38 -0500 Subject: [PATCH 0859/2103] =?UTF-8?q?=F0=9F=8E=84=20Soluci=C3=B3n=20Reto?= =?UTF-8?q?=2045,=20Python=20by=20@jamerrq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/jamerrq.py" | 91 +++++++++++++------ 1 file changed, 65 insertions(+), 26 deletions(-) diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/jamerrq.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/jamerrq.py" index 5297b98b6f..bccffc4e86 100644 --- "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/jamerrq.py" +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/jamerrq.py" @@ -1,18 +1,34 @@ import random as rd import sys - +from time import sleep def clear(): sys.stdout.write("\033c") +""" +stackoverflow.com/questions/287871/how-do-i-print-colored-text-to-the-terminal +""" +class bcolors: + HEADER = '\033[95m' + OKBLUE = '\033[94m' + OKCYAN = '\033[96m' + OKGREEN = '\033[92m' + WARNING = '\033[93m' + FAIL = '\033[91m' + ENDC = '\033[0m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' class Participation: def __init__(self): self.participants = set([]) - self.cursor = '→' - self.prompt = f'Inserta el nombre del participante\n{self.cursor} ' + self.cursor = f'{bcolors.BOLD}{bcolors.HEADER}→' + self.prompt = f'{bcolors.OKBLUE}Inserta el nombre' + \ + f' del participante\n{self.cursor} ' + self.index = 0 + self.heading = f"{bcolors.OKGREEN}🎄 CALENDARIO DE ADEVIENTO 🎁" def ask_prompt(self): @@ -25,12 +41,15 @@ def add_participant(self): if name in self.participants: - print('Error: este personaje ya existe') + print(f'{bcolors.FAIL}🛑 Error: este participante ya se encuentra' + \ + ' registrado!\n') + # sleep(1) else: self.participants.add(name) - print('El participante ha sido agregado correctamente!') + print(f'{bcolors.OKCYAN}El participante ha sido agregado' + \ + ' correctamente!\n') def delete_participant(self): @@ -39,43 +58,50 @@ def delete_participant(self): if name in self.participants: self.participants.remove(name) - print('El participante ha sido borrado exitosamente!') + print(f'{bcolors.OKCYAN}El participante ha sido borrado exitosamente!\n') else: - print(f'Error: no ha sido encontrado un particante con nombre: {name}') + print(f'{bcolors.FAIL}🛑 Error: no ha sido encontrado un participante' +\ + f' con nombre ⚠️ {name} ⚠️\n') def show_participants(self): - print('***** Lista de participantes *****') + print(f'{bcolors.OKGREEN}********** Lista de participantes **********') for (index, participant) in enumerate(self.participants): - print(index + 1, participant) + color = bcolors.FAIL if index % 2 == 0 else bcolors.OKGREEN + print(f'{color}{index + 1} {participant}') - print(f'Hay un total de {len(self.participants)} {"participantes" if len(self.participants) != 1 else "participante"} registrado{"s" if len(self.participants) != 1 else ""}!\n') + plural = 's' if len(self.participants) != 1 else '' + color = bcolors.FAIL if len(self.participants) % 2 == 0 else bcolors.OKGREEN + print(f'{color}' + \ + f'Hay un total de {len(self.participants)} ' + \ + f'participante{plural} registrado{plural}!\n') def giveaway(self): if not len(self.participants): - print('Error: no hay participantes registrados todavía!') + print(f'{bcolors.FAIL}Error: no hay participantes registrados todavía!\n') else: winner = rd.choice(list(self.participants)) - print(f'The winner is: {winner}') + print(f'{bcolors.OKCYAN}Resultado: El ganador es 🎉 {winner} 🥳\n') self.participants.remove(winner) def show_menu(self): - print('1. Añadir participante.') - print('2. Remover participante.') - print('3. Listar participantes.') - print('4. Realizar sorteo') - print('5. Salir') + print(self.heading) + print(f'{bcolors.FAIL}1. Añadir participante.') + print(f'{bcolors.OKGREEN}2. Remover participante.') + print(f'{bcolors.FAIL}3. Listar participantes.') + print(f'{bcolors.OKGREEN}4. Realizar sorteo') + print(f'{bcolors.FAIL}5. Salir') while True: @@ -85,24 +111,35 @@ def show_menu(self): option = int(option) - if 0 <= option or option > 5: - print('Error. Opción fuera de rango') - print(option) + if 0 >= option or option > 5: + print(f'{bcolors.FAIL}Error. Opción fuera de rango') + print(option, type(option), 0 <= option or option > 5) + continue except ValueError: - print('Error: Opción inválida') - print(option) + print(f'{bcolors.FAIL}Error: Opción inválida') continue return option + def welcome_message(self): + + clear() + print(f'{bcolors.OKGREEN}Bienvenido al calendario de aDEViento') + print(f'{bcolors.FAIL}24 días, 24 regalos sorpresa relacionados' + \ + ' con desarrollo de software') + print(f'{bcolors.OKGREEN}Desde el 1 al 24 de diciembre.') + print(f'{bcolors.FAIL}¿Estás listo para participar?') + + print(f'{bcolors.OKCYAN}\nPresiona enter para continuar') + + input(f'{self.cursor} ') + clear() def start(self): - print('Bienvenido al calendario de aDEViento') - print('24 días, 24 regalos sorpresa relacionados con desarrollo de software') - print('Desde el 1 al 24 de diciembre.') + self.welcome_message() while True: @@ -123,7 +160,9 @@ def start(self): self.giveaway() if option == 5: - print('Saliendo...') + print(f'{bcolors.OKCYAN}Saliendo 🕺...') + sleep(1) + clear() break From 2ab2d1a834eca551b4aa5e318a7e9d43c54e1304 Mon Sep 17 00:00:00 2001 From: Alan Marcos Date: Sat, 25 Nov 2023 20:54:06 +0100 Subject: [PATCH 0860/2103] Reto #45 kotlin --- .../kotlin/alanmarcos.kt" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/alanmarcos.kt" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/alanmarcos.kt" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/alanmarcos.kt" new file mode 100644 index 0000000000..d46df14868 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/alanmarcos.kt" @@ -0,0 +1,69 @@ +package retos2023 + +import java.util.Scanner + +/* + * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participación: + * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. + * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. + * (Y no lo duplicarás) + * - Si seleccionas mostrar los participantes, se listarán todos. + * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - Si seleccionas realizar el sorteo, elegirás una persona al azar + * y se eliminará del listado. + * - Si seleccionas salir, el programa finalizará. + */ + +fun main(){ + + val competitors = mutableListOf() + val scanner = Scanner(System.`in`) + boardOptions() + var userInput = scanner.nextLine() + while (userInput != "5"){ + when(userInput){ + "1" -> { + val competitorName = competitorNameInput(scanner) + if (!competitors.contains(competitorName)) competitors.add(competitorName) + else println("El participante ya existe.") + } + "2" -> { + val competitorName = competitorNameInput(scanner) + if (competitors.contains(competitorName)) competitors.remove(competitorName) + else println("El participante no existe.") + } + "3" -> showAllCompetitors(competitors) + "4" -> launchLottery(competitors) + else -> println("Opción incorrecta. Ingrésela otra vez.") + } + boardOptions() + userInput = scanner.nextLine() + } + println("Hasta pronto!") + +} + +private fun launchLottery(competitors: MutableList) = println("Ha salido sorteado ${competitors.random()}") + +private fun showAllCompetitors(competitors: MutableList) = competitors.forEach { println(it) } + +private fun competitorNameInput(scanner: Scanner): String { + println("Ingrese nombre: ") + return scanner.nextLine() +} + +private fun boardOptions() { + println("Seleccione una opción:\n" + + "1-Agregar participante\n" + + "2-Borrar participante\n" + + "3-Mostrar todos los participantes\n" + + "4-Lanzar sorteo\n" + + "5-Salir\n") +} From 6e23abdea9a25b0f59b2b149a0c6918e628d54b7 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez Lopez Date: Sat, 25 Nov 2023 23:28:40 +0100 Subject: [PATCH 0861/2103] Reto 45: Javascript. --- .../javascript/klyone.js" | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/klyone.js" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/klyone.js" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/klyone.js" new file mode 100644 index 0000000000..75f33fa16f --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/klyone.js" @@ -0,0 +1,102 @@ +const readline = require('node:readline/promises'); + +const options = { + add : { name : "add", func : addFunc }, + remove : { name : "remove", func : removeFunc }, + show : { name : "show", func : showFunc }, + raffle : { name : "raffle", func : raffleFunc }, + quit : { name: "quit", func: quitFunc }, +}; + +let people = []; + +function getRandomPerson() { + obj = {}; + + obj.index = Math.floor(Math.random() * people.length); + obj.person = people[obj.index]; + + return obj; +} + +async function addFunc(prompt) { + let name = await prompt.question("Name: "); + + if (people.includes(name)) { + console.log("The person already exists"); + } else { + people.push(name); + } + + return false; +} + +async function removeFunc(prompt) { + let name = await prompt.question("Name: "); + + if (people.includes(name)) { + const index = people.indexOf(name); + people.splice(index, 1); + } else { + console.log("The person does not exist"); + } + + return false; +} + +function showFunc() { + console.log(people); + return false; +} + +function raffleFunc() { + const {index, person} = getRandomPerson(); + console.log(`Selected: ${person}`); + people.splice(index, 1); + + return false; +} + +function quitFunc() { + return true; +} + +function handleFunction(func, prompt) { + let exit = false; + let name = ""; + + for (const o in options) { + if ( options[o].name === func ) { + exit = options[o].func(prompt); + break; + } + } + + return exit; +} + +async function runAdeviento() { + let exitProgram = false; + const prompt = readline.createInterface({ input: process.stdin, output: process.stdout }) + + while (!exitProgram) { + console.log(""); + console.log("============================="); + console.log("ADEViento options: "); + console.log(""); + console.log("add: Add new person"); + console.log("remove: Remove a person"); + console.log("show: Show people"); + console.log("raffle: Perform a raffle with the existing people"); + console.log("quit: Exit the program"); + console.log(""); + console.log("============================="); + console.log(""); + const answer = await prompt.question("Operation: "); + exitProgram = await handleFunction(answer, prompt); + } + + prompt.close(); +} + +runAdeviento(); From 814a37b7cc20e1786427b30e83a861b828e7f81f Mon Sep 17 00:00:00 2001 From: hornico <56612484+hornico@users.noreply.github.com> Date: Sat, 25 Nov 2023 21:55:34 -0300 Subject: [PATCH 0862/2103] Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 --- .../python/hornico.py" | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/hornico.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/hornico.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/hornico.py" new file mode 100644 index 0000000000..acc505f819 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/hornico.py" @@ -0,0 +1,51 @@ +import random +participante:list = [] + +nombre:str +apellido:str + +while True: + print("Presione las siguientes teclas según corresponda: ") + print("A - para agregar participante") + print("E - para eliminar participante") + print("L - para listar todos los participantes") + print("C - comenzar sorteo") + print("S - para salir") + print() + opcion = input("A - E - L - C - S").upper() + if opcion == "S": + break + if opcion == "A": + nombre = input("Cual es tu nombre? ").upper() + apellido = input("Cual es tu apellido? ").upper() + if [nombre,apellido] in participante: + print() + print("Ya estas participando!!!") + print() + else: + participante.append([nombre,apellido]) + print() + print(nombre,apellido,"has sido incorporado satisfactoriamente, Muchas suerte!!!") + print() + if opcion == "E": + nombre = input("Cual es tu nombre? ").upper() + apellido = input("Cual es tu apellido? ").upper() + if [nombre,apellido] in participante: + participante.remove([nombre,apellido]) + print() + print(nombre,apellido," ha sido eliminado de la lista") + print() + + else: + print() + print(nombre,apellido," no esta en la lista") + print() + + if opcion == "C": + ganador =random.choice(participante) + participante.remove([ganador[0], ganador[1]]) + print("El ganador es ",ganador[0], ganador[1]) + if opcion == "L": + print() + print(participante) + print() From bcd1e54b73aea1c26991e3f08d6aa19a7fd1ffee Mon Sep 17 00:00:00 2001 From: Chema Alfonso Date: Sun, 26 Nov 2023 02:21:18 +0100 Subject: [PATCH 0863/2103] chemaalfonso solution --- .../typescript/chemaalfonso.ts" | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/chemaalfonso.ts" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/chemaalfonso.ts" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/chemaalfonso.ts" new file mode 100644 index 0000000000..4992aa7a93 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/chemaalfonso.ts" @@ -0,0 +1,168 @@ +import { createInterface } from 'node:readline' +import { stdin as input, stdout as output } from 'node:process' + +type UserCommunicator = { + makeQuestion: (questionToMake: string) => Promise + tellSomething: (somethingToTell: string) => void + forgetTold: () => void + endCommunication: () => void +} + +export class AdevientoCalendar { + private participants: string[] = [] + private running = true + private output = '' + private outputColor = '' + private colors = { + ok: '\x1b[92m', + ko: '\x1b[91m' + } + + constructor(private readonly userCommunicator: UserCommunicator) {} + + async run() { + const menu = Object.values(this.getMenuOptions()) + .map((option, idx) => `${idx + 1}. ${option.optionName}`) + .join('\n') + + while (this.running) { + // Select action + this.userCommunicator.forgetTold() + this.userCommunicator.tellSomething(this.title()) + this.userCommunicator.tellSomething(menu) + + if (this.output) this.userCommunicator.tellSomething(`\n${this.outputColor}${this.output}\x1b[00m`) + + const selectedOption = await this.userCommunicator.makeQuestion('\n\x1b[93m¿Qué quieres hacer?\x1b[00m') + + // Handle selected action + this.userCommunicator.forgetTold() + this.outputColor = this.colors.ok + this.userCommunicator.tellSomething(this.title()) + + const handler = this.getMenuOptions()[+selectedOption - 1]?.handler + if (!handler) { + this.outputColor = this.colors.ko + this.output = 'Selecciona una opción válida...' + continue + } + + await handler() + } + } + + private async addParticipant() { + const name = await this.userCommunicator.makeQuestion('Dime el nombre del participante:') + + if (this.participantAlreadyExists(name)) { + this.outputColor = this.colors.ko + this.output = 'El participante ya existe' + return + } + + this.participants.push(name) + this.output = `Se ha añadido a '${name}' a los participantes` + } + + private async removeParticipant() { + const removingName = await this.userCommunicator.makeQuestion('Dime el nombre del participante:') + + if (!this.participantAlreadyExists(removingName)) { + this.outputColor = this.colors.ko + this.output = 'El participante no existe' + return + } + + this.participants = this.participants.filter(name => name !== removingName) + this.output = `Se ha eliminado a '${removingName}' de los participantes` + } + + private listParticipants() { + if (!this.participants.length) { + this.outputColor = this.colors.ko + this.output = 'No hay ningún participante' + return + } + + const participantsList = this.participants.map(option => `- ${option}`).join('\n') + const total = `${this.participants.length} participantes en total.` + this.output = `${participantsList}\n\n${total}` + } + + private sortout() { + if (!this.participants.length) { + this.outputColor = this.colors.ko + this.output = 'No hay ningún participante' + return + } + + const winnerIdx = Math.floor(Math.random() * this.participants.length) + const winner = this.participants[winnerIdx] + this.output = `El ganador es '${winner}'! 🥳 🎊 🎉` + + this.participants.splice(winnerIdx, 1) + } + + private exit() { + this.userCommunicator.tellSomething('Hasta otra 👋!') + this.userCommunicator.endCommunication() + this.running = false + } + + private participantAlreadyExists(name: string) { + return this.participants.includes(name) + } + + private title() { + return `\x1b[95m + ███████ ██████ ███████ ██ ██ ██ ███████ ███ ██ ████████ ██████ + ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ + ███████ ██ ██ █████ ██ ██ ██ █████ ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ + ██ ██ ██████ ███████ ████ ██ ███████ ██ ████ ██ ██████ Calendar. + \x1b[00m` + } + + private getMenuOptions() { + return [ + { + optionName: 'Añadir participante', + handler: this.addParticipant.bind(this) + }, + { + optionName: 'Eliminar participante', + handler: this.removeParticipant.bind(this) + }, + { + optionName: 'Listar participantes', + handler: this.listParticipants.bind(this) + }, + { + optionName: 'Sortear', + handler: this.sortout.bind(this) + }, + { + optionName: 'Salir', + handler: this.exit.bind(this) + } + ] + } +} + +// Create communicator +const inputInterface = createInterface({ input, output }) +const communicator: UserCommunicator = { + makeQuestion: (questionToMake: string): Promise => { + return new Promise(resolve => { + inputInterface.question(`${questionToMake}\n`, (answer: string) => { + resolve(answer) + }) + }) + }, + tellSomething: somethingToTell => console.log(somethingToTell), + forgetTold: () => console.clear(), + endCommunication: inputInterface.close.bind(inputInterface) +} + +// Start +new AdevientoCalendar(communicator).run() From 30b111c941d346e4c02c57b37a76e0c1f06bc2e5 Mon Sep 17 00:00:00 2001 From: Chema Alfonso Date: Sun, 26 Nov 2023 02:34:52 +0100 Subject: [PATCH 0864/2103] removed wrong capitalization name file --- .../typescript/chemaalfonso.ts" | 168 ------------------ 1 file changed, 168 deletions(-) delete mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/chemaalfonso.ts" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/chemaalfonso.ts" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/chemaalfonso.ts" deleted file mode 100644 index 4992aa7a93..0000000000 --- "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/chemaalfonso.ts" +++ /dev/null @@ -1,168 +0,0 @@ -import { createInterface } from 'node:readline' -import { stdin as input, stdout as output } from 'node:process' - -type UserCommunicator = { - makeQuestion: (questionToMake: string) => Promise - tellSomething: (somethingToTell: string) => void - forgetTold: () => void - endCommunication: () => void -} - -export class AdevientoCalendar { - private participants: string[] = [] - private running = true - private output = '' - private outputColor = '' - private colors = { - ok: '\x1b[92m', - ko: '\x1b[91m' - } - - constructor(private readonly userCommunicator: UserCommunicator) {} - - async run() { - const menu = Object.values(this.getMenuOptions()) - .map((option, idx) => `${idx + 1}. ${option.optionName}`) - .join('\n') - - while (this.running) { - // Select action - this.userCommunicator.forgetTold() - this.userCommunicator.tellSomething(this.title()) - this.userCommunicator.tellSomething(menu) - - if (this.output) this.userCommunicator.tellSomething(`\n${this.outputColor}${this.output}\x1b[00m`) - - const selectedOption = await this.userCommunicator.makeQuestion('\n\x1b[93m¿Qué quieres hacer?\x1b[00m') - - // Handle selected action - this.userCommunicator.forgetTold() - this.outputColor = this.colors.ok - this.userCommunicator.tellSomething(this.title()) - - const handler = this.getMenuOptions()[+selectedOption - 1]?.handler - if (!handler) { - this.outputColor = this.colors.ko - this.output = 'Selecciona una opción válida...' - continue - } - - await handler() - } - } - - private async addParticipant() { - const name = await this.userCommunicator.makeQuestion('Dime el nombre del participante:') - - if (this.participantAlreadyExists(name)) { - this.outputColor = this.colors.ko - this.output = 'El participante ya existe' - return - } - - this.participants.push(name) - this.output = `Se ha añadido a '${name}' a los participantes` - } - - private async removeParticipant() { - const removingName = await this.userCommunicator.makeQuestion('Dime el nombre del participante:') - - if (!this.participantAlreadyExists(removingName)) { - this.outputColor = this.colors.ko - this.output = 'El participante no existe' - return - } - - this.participants = this.participants.filter(name => name !== removingName) - this.output = `Se ha eliminado a '${removingName}' de los participantes` - } - - private listParticipants() { - if (!this.participants.length) { - this.outputColor = this.colors.ko - this.output = 'No hay ningún participante' - return - } - - const participantsList = this.participants.map(option => `- ${option}`).join('\n') - const total = `${this.participants.length} participantes en total.` - this.output = `${participantsList}\n\n${total}` - } - - private sortout() { - if (!this.participants.length) { - this.outputColor = this.colors.ko - this.output = 'No hay ningún participante' - return - } - - const winnerIdx = Math.floor(Math.random() * this.participants.length) - const winner = this.participants[winnerIdx] - this.output = `El ganador es '${winner}'! 🥳 🎊 🎉` - - this.participants.splice(winnerIdx, 1) - } - - private exit() { - this.userCommunicator.tellSomething('Hasta otra 👋!') - this.userCommunicator.endCommunication() - this.running = false - } - - private participantAlreadyExists(name: string) { - return this.participants.includes(name) - } - - private title() { - return `\x1b[95m - ███████ ██████ ███████ ██ ██ ██ ███████ ███ ██ ████████ ██████ - ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ - ███████ ██ ██ █████ ██ ██ ██ █████ ██ ██ ██ ██ ██ ██ - ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ - ██ ██ ██████ ███████ ████ ██ ███████ ██ ████ ██ ██████ Calendar. - \x1b[00m` - } - - private getMenuOptions() { - return [ - { - optionName: 'Añadir participante', - handler: this.addParticipant.bind(this) - }, - { - optionName: 'Eliminar participante', - handler: this.removeParticipant.bind(this) - }, - { - optionName: 'Listar participantes', - handler: this.listParticipants.bind(this) - }, - { - optionName: 'Sortear', - handler: this.sortout.bind(this) - }, - { - optionName: 'Salir', - handler: this.exit.bind(this) - } - ] - } -} - -// Create communicator -const inputInterface = createInterface({ input, output }) -const communicator: UserCommunicator = { - makeQuestion: (questionToMake: string): Promise => { - return new Promise(resolve => { - inputInterface.question(`${questionToMake}\n`, (answer: string) => { - resolve(answer) - }) - }) - }, - tellSomething: somethingToTell => console.log(somethingToTell), - forgetTold: () => console.clear(), - endCommunication: inputInterface.close.bind(inputInterface) -} - -// Start -new AdevientoCalendar(communicator).run() From 6f172d707f9f5c2354706552d0fdf617e82dbf57 Mon Sep 17 00:00:00 2001 From: Chema Alfonso Date: Sun, 26 Nov 2023 02:35:07 +0100 Subject: [PATCH 0865/2103] chemaalfonso solution --- .../typescript/ChemaAlfonso.ts" | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/ChemaAlfonso.ts" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/ChemaAlfonso.ts" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/ChemaAlfonso.ts" new file mode 100644 index 0000000000..4992aa7a93 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/typescript/ChemaAlfonso.ts" @@ -0,0 +1,168 @@ +import { createInterface } from 'node:readline' +import { stdin as input, stdout as output } from 'node:process' + +type UserCommunicator = { + makeQuestion: (questionToMake: string) => Promise + tellSomething: (somethingToTell: string) => void + forgetTold: () => void + endCommunication: () => void +} + +export class AdevientoCalendar { + private participants: string[] = [] + private running = true + private output = '' + private outputColor = '' + private colors = { + ok: '\x1b[92m', + ko: '\x1b[91m' + } + + constructor(private readonly userCommunicator: UserCommunicator) {} + + async run() { + const menu = Object.values(this.getMenuOptions()) + .map((option, idx) => `${idx + 1}. ${option.optionName}`) + .join('\n') + + while (this.running) { + // Select action + this.userCommunicator.forgetTold() + this.userCommunicator.tellSomething(this.title()) + this.userCommunicator.tellSomething(menu) + + if (this.output) this.userCommunicator.tellSomething(`\n${this.outputColor}${this.output}\x1b[00m`) + + const selectedOption = await this.userCommunicator.makeQuestion('\n\x1b[93m¿Qué quieres hacer?\x1b[00m') + + // Handle selected action + this.userCommunicator.forgetTold() + this.outputColor = this.colors.ok + this.userCommunicator.tellSomething(this.title()) + + const handler = this.getMenuOptions()[+selectedOption - 1]?.handler + if (!handler) { + this.outputColor = this.colors.ko + this.output = 'Selecciona una opción válida...' + continue + } + + await handler() + } + } + + private async addParticipant() { + const name = await this.userCommunicator.makeQuestion('Dime el nombre del participante:') + + if (this.participantAlreadyExists(name)) { + this.outputColor = this.colors.ko + this.output = 'El participante ya existe' + return + } + + this.participants.push(name) + this.output = `Se ha añadido a '${name}' a los participantes` + } + + private async removeParticipant() { + const removingName = await this.userCommunicator.makeQuestion('Dime el nombre del participante:') + + if (!this.participantAlreadyExists(removingName)) { + this.outputColor = this.colors.ko + this.output = 'El participante no existe' + return + } + + this.participants = this.participants.filter(name => name !== removingName) + this.output = `Se ha eliminado a '${removingName}' de los participantes` + } + + private listParticipants() { + if (!this.participants.length) { + this.outputColor = this.colors.ko + this.output = 'No hay ningún participante' + return + } + + const participantsList = this.participants.map(option => `- ${option}`).join('\n') + const total = `${this.participants.length} participantes en total.` + this.output = `${participantsList}\n\n${total}` + } + + private sortout() { + if (!this.participants.length) { + this.outputColor = this.colors.ko + this.output = 'No hay ningún participante' + return + } + + const winnerIdx = Math.floor(Math.random() * this.participants.length) + const winner = this.participants[winnerIdx] + this.output = `El ganador es '${winner}'! 🥳 🎊 🎉` + + this.participants.splice(winnerIdx, 1) + } + + private exit() { + this.userCommunicator.tellSomething('Hasta otra 👋!') + this.userCommunicator.endCommunication() + this.running = false + } + + private participantAlreadyExists(name: string) { + return this.participants.includes(name) + } + + private title() { + return `\x1b[95m + ███████ ██████ ███████ ██ ██ ██ ███████ ███ ██ ████████ ██████ + ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ + ███████ ██ ██ █████ ██ ██ ██ █████ ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ + ██ ██ ██████ ███████ ████ ██ ███████ ██ ████ ██ ██████ Calendar. + \x1b[00m` + } + + private getMenuOptions() { + return [ + { + optionName: 'Añadir participante', + handler: this.addParticipant.bind(this) + }, + { + optionName: 'Eliminar participante', + handler: this.removeParticipant.bind(this) + }, + { + optionName: 'Listar participantes', + handler: this.listParticipants.bind(this) + }, + { + optionName: 'Sortear', + handler: this.sortout.bind(this) + }, + { + optionName: 'Salir', + handler: this.exit.bind(this) + } + ] + } +} + +// Create communicator +const inputInterface = createInterface({ input, output }) +const communicator: UserCommunicator = { + makeQuestion: (questionToMake: string): Promise => { + return new Promise(resolve => { + inputInterface.question(`${questionToMake}\n`, (answer: string) => { + resolve(answer) + }) + }) + }, + tellSomething: somethingToTell => console.log(somethingToTell), + forgetTold: () => console.clear(), + endCommunication: inputInterface.close.bind(inputInterface) +} + +// Start +new AdevientoCalendar(communicator).run() From ce879aa10e32039a7581532d0f29c1319ac052f3 Mon Sep 17 00:00:00 2001 From: Hool45 <152042752+Hool45@users.noreply.github.com> Date: Sat, 25 Nov 2023 23:08:09 -0300 Subject: [PATCH 0866/2103] Add files via upload --- .../python/Hool45.py" | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Hool45.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Hool45.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Hool45.py" new file mode 100644 index 0000000000..3a2a8458eb --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Hool45.py" @@ -0,0 +1,98 @@ +""" +¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participación: + * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. + * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. + * (Y no lo duplicarás) + * - Si seleccionas mostrar los participantes, se listarán todos. + * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - Si seleccionas realizar el sorteo, elegirás una persona al azar + * y se eliminará del listado. + * - Si seleccionas salir, el programa finalizará. + */ +""" + + + + + + + +import random +listaparticipantes = list() + +def adeviento(): + + what_you_wanna_do = input("que quieres hacer ") + + if what_you_wanna_do == "add": + Añadido = input("nombre del añadido: ") + if len(listaparticipantes) == 0: + listaparticipantes.append(Añadido) + print(listaparticipantes) + else: + for i in range(0, len(listaparticipantes)): + print(i) + print(len(listaparticipantes)) + name = listaparticipantes[i] + if Añadido == name: + print("ese nombre ya esta añadido") + adeviento() + + + listaparticipantes.append(Añadido) + print(listaparticipantes) + + adeviento() + + elif what_you_wanna_do == "eliminate": + elim = input("nombre del eliminado: ") + if len(listaparticipantes) == 0: + print("no hay nadie participando") + else: + for i in range(0, len(listaparticipantes)): + print(i) + name = listaparticipantes[i] + print(name) + if elim == name: + listaparticipantes.remove(listaparticipantes[i]) + adeviento() + + print("ese nombre no existe") + + adeviento() + + elif what_you_wanna_do == "sort": + if len(listaparticipantes) == 1: + print("no hay suficientes participantes, añadelos") + else: + sorteo = random.randint(0,len(listaparticipantes) - 1) + print(sorteo) + ganador = listaparticipantes[sorteo] + print(f"EL GANADOR DEL SORTEO {ganador}") + listaparticipantes.remove(listaparticipantes[sorteo]) + + adeviento() + elif what_you_wanna_do == "close": + print("OK closing up") + iniciador() + else: + print("ese no es un comando") + adeviento() + +def iniciador(): + Abrir = input("quieres abrir el programa' Y/N ") + if Abrir == "Y": + adeviento() + elif Abrir == "N": + print( ":(") + + + +iniciador() \ No newline at end of file From 4550a079b5ecf48e787d38e44f1035fff5e39621 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sat, 25 Nov 2023 21:24:53 -0600 Subject: [PATCH 0867/2103] add marvnramos.js --- Retos/Reto #10 - LA API [Media]/javascript/marvnramos.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Retos/Reto #10 - LA API [Media]/javascript/marvnramos.js diff --git a/Retos/Reto #10 - LA API [Media]/javascript/marvnramos.js b/Retos/Reto #10 - LA API [Media]/javascript/marvnramos.js new file mode 100644 index 0000000000..e69de29bb2 From b40efe572a4fe9045b86b870da37cfe865f255d7 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sat, 25 Nov 2023 21:28:20 -0600 Subject: [PATCH 0868/2103] add getPokemon feature --- .../javascript/marvnramos.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Retos/Reto #10 - LA API [Media]/javascript/marvnramos.js b/Retos/Reto #10 - LA API [Media]/javascript/marvnramos.js index e69de29bb2..e37d40eb78 100644 --- a/Retos/Reto #10 - LA API [Media]/javascript/marvnramos.js +++ b/Retos/Reto #10 - LA API [Media]/javascript/marvnramos.js @@ -0,0 +1,16 @@ +const URL_BASE = "https://pokeapi.co/api/v2/pokemon/"; + +async function getPokemon(pokemon) { + await fetch(URL_BASE + pokemon) + .then(res => res.json()) + .then(pokeRes => { + console.log({ + id: pokeRes.id, + name: pokeRes.name, + height: pokeRes.height, + weight: pokeRes.weight + }); + }); +} + +getPokemon("pikachu"); // by Name output: { id: 25, name: 'pikachu', height: 4, weight: 60 } \ No newline at end of file From f5d457659af52c757e09bad56577d942bb62e5f9 Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Sat, 25 Nov 2023 22:20:24 -0700 Subject: [PATCH 0869/2103] reto #45 - python --- .../python/KevinED11.py" | 127 ++++++++++++++++++ .../python/KevinED11.py" | 116 ++++++++++++++++ 2 files changed, 243 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/KevinED11.py" create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/KevinED11.py" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/KevinED11.py" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/KevinED11.py" new file mode 100644 index 0000000000..3119e00e9a --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/python/KevinED11.py" @@ -0,0 +1,127 @@ +from typing import Protocol, Iterable +import time +import functools +import random +import dataclasses + + +type Number = float | int + + +def pause_game(seconds: Number = 3) -> None: + time.sleep(seconds) + + +pause_game_by_3_seconds = functools.partial(pause_game, seconds=3) + + +class MathOperationFn(Protocol[Number]): + def __call__[T: Number](self, a: T, b: T) -> T: + ... + + +def add[T: Number](a: T, b: T) -> T: + return a + b + + +def subtract[T: Number](a: T, b: T) -> T: + return a - b + + +def multiply[T: Number](a: T, b: T) -> T: + return a * b + + +def divide[T: Number](a: T, b: T) -> T: + try: + return a / b + except ZeroDivisionError as err: + print(f"No se puede dividir por cero: {err}") + + +@functools.lru_cache +def math_operations() -> list[MathOperationFn]: + return [add, subtract, multiply, divide] + + +class MathOPerationSelectorStrategyFn(Protocol): + def __call__(self, operations: Iterable[MathOperationFn]) -> MathOperationFn: + ... + + +def math_operation_random_selector( + operations: Iterable[MathOperationFn], +) -> MathOperationFn: + return random.choice(operations) + + +class IGame(Protocol): + def play(self) -> None: + ... + + +class GameNotRunningExeption(Exception): + pass + + +class GameAlreadyRunningExeption(Exception): + pass + + +class MathRiddleGame: + def __init__(self, selector_strategy: MathOPerationSelectorStrategyFn) -> None: + self.selector_strategy = selector_strategy + self.__runnning = False + self.__score = 0 + + def __request_answer(self) -> str: + user_input = input("Ingrese la respuesta: ") + + def __pause_game(self) -> str | None: + while True: + user_input = input("Presione enter para continuar") + if user_input == "": + break + + def __choice_operation(self) -> MathOperationFn: + return self.selector_strategy() + + def __stop_game(self) -> None: + if not self.__runnning: + raise GameNotRunningExeption("El juego no está corriendo") + + self.__runnning = False + print("El juego ha finalizado") + + def __show_score(self) -> None: + print(f"Tu puntuación es: {self.__score} aciertos") + + def __prepare_game(self) -> None: + while True: + operation = self.__choice_operation() + user_input = self.__request_question() + self.__stop_game() + self.__show_score() + + self.__show_score() + self.__stop_game() + + def play(self) -> None: + if self.__runnning: + raise GameAlreadyRunningError("El juego ya está corriendo") + + self.__runnning = True + self.__prepare_game() + + +def main(game: IGame) -> None: + try: + game.play() + except (GameAlreadyRunningError, GameNotRunningExeption) as err: + print(err) + + +if __name__ == "__main__": + selector_strategy = math_operation_random_selector + game = MathRiddleGame(selector_strategy=selector_strategy) + main(game=game) diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/KevinED11.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/KevinED11.py" new file mode 100644 index 0000000000..a64267c1a0 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/KevinED11.py" @@ -0,0 +1,116 @@ +from dataclasses import dataclass, field +from typing import Protocol +from random import randint +import time + + +class ParticipationMecanism(Protocol): + participants: list[str] = [] + running: bool = False + + def add(self, participant: str) -> None: + ... + + def delete(self, participant: str) -> None: + ... + + def show(self) -> None: + ... + + def run_giveaway(self) -> str: + ... + + def run(self) -> None: + ... + + +def user_input(prompt: str) -> str: + return input(prompt).lower() + + +@dataclass +class AdevientoParticipationMecanism: + participants: list[str] = field(default_factory=list) + running: bool = field(default=False) + + def add(self, participant: str) -> None: + if participant in self.participants: + print(f"El participante '{participant}' ya existe en la lista.") + return + + self.participants += [participant] + print(f"El participante '{participant}' ha sido añadido con éxito.") + + def delete(self, participant: str) -> None: + if participant not in self.participants: + print(f"El participante '{participant}' no existe en la lista.") + return + + print(f"El participante '{participant}' ha sido eliminado con éxito.") + self.participants.remove(participant) + + def show(self) -> None: + for participant in self.participants: + print(participant) + + def run_giveaway(self) -> str: + time.sleep(3) + giveaway_winner = self.participants[randint(0, len(self.participants) - 1)] + + self.participants.remove(giveaway_winner) + print(f"El ganador del sorteo es: {giveaway_winner}") + return giveaway_winner + + def get_options(self) -> dict[str, callable]: + add_option = lambda: self.add( + user_input("Introduce el nombre del participante a añadir: ") + ) + delete_option = lambda: self.delete( + user_input("Introduce el nombre del participante a eliminar: ") + ) + return { + "1": add_option, + "2": delete_option, + "3": self.show, + "4": self.run_giveaway, + "5": self.exit, + } + + def run(self) -> None: + self.running = True + options = self.get_options() + while True: + print( + "1. Añadir participante, 2. Eliminar participante, 3. Mostrar participantes, 4. Realizar sorteo, 5. Salir" + ) + option = user_input("Opcion: ") + if option not in options: + print("Opcion no valida") + continue + + result = options[option]() + if isinstance(result, bool) and result: + break + + def exit(self) -> bool: + self.running = False + print("¡Que tengas un buen dia, hasta luego!") + return True + + +@dataclass +class Program: + participation_mechanism: ParticipationMecanism + + def run(self) -> None: + self.participation_mechanism.run() + + +def main(participation_mechanism: ParticipationMecanism) -> None: + program = Program(participation_mechanism=participation_mechanism) + program.run() + + +if __name__ == "__main__": + participation_mechanism = AdevientoParticipationMecanism() + main(participation_mechanism=participation_mechanism) From 732b471553f7651cb80077c28af8ed98758303e7 Mon Sep 17 00:00:00 2001 From: marco cruz Date: Sun, 26 Nov 2023 01:39:09 -0600 Subject: [PATCH 0870/2103] Reto #44 - Javascript --- .../javascript/marcode24.js" | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 "Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/marcode24.js" diff --git "a/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/marcode24.js" "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/marcode24.js" new file mode 100644 index 0000000000..09d32b16b8 --- /dev/null +++ "b/Retos/Reto #44 - ADIVINANZAS MATEM\303\201TICAS [Media]/javascript/marcode24.js" @@ -0,0 +1,95 @@ +/* + * Crea un juego interactivo por terminal en el que tendrás que adivinar + * el resultado de diferentes operaciones matemáticas aleatorias + * (suma, resta, multiplicación o división de dos números enteros). + * - Tendrás 3 segundos para responder correctamente. + * - El juego finaliza si no se logra responder en ese tiempo. + * - Al finalizar el juego debes mostrar cuántos cálculos has acertado. + * - Cada 5 aciertos debes aumentar en uno el posible número de cifras + * de la operación (cada vez en un operando): + * - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9) + * - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9) + * - Preguntas 11 a 15: XX operación YY + * - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY + * ... + */ + +const readline = require('readline'); + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let score = 0; +let digitCount = 1; +const MAX_SECONDS = 3000; + +function getRandomNumber(max) { + return Math.floor(Math.random() * (max + 1)); +} + +function generateRandomOperation() { + const operators = ['+', '-', '*', '/']; + const operator = operators[getRandomNumber(operators.length - 1)]; + let operand1; + let operand2; + + switch (digitCount) { + case 1: + operand1 = getRandomNumber(9); + operand2 = getRandomNumber(9); + break; + case 2: + operand1 = getRandomNumber(99); + operand2 = getRandomNumber(9); + break; + case 3: + operand1 = getRandomNumber(99); + operand2 = getRandomNumber(99); + break; + default: + operand1 = getRandomNumber(999); + operand2 = getRandomNumber(99); + } + + return `${operand1} ${operator} ${operand2}`; +} + +function playRound() { + const operation = generateRandomOperation(); + console.log(`\nPregunta ${score + 1}: ${operation}`); + + const startTime = Date.now(); + rl.question('Tu respuesta: ', (answer) => { + const endTime = Date.now(); + const elapsedTime = endTime - startTime; + + // eslint-disable-next-line no-eval + if (parseInt(answer, 10) === eval(operation) && elapsedTime < MAX_SECONDS) { + console.log('\n¡Correcto!'); + score++; + } else { + console.log('\nRespuesta incorrecta o fuera de tiempo. Fin del juego.'); + console.log(`Preguntas acertadas: ${score}`); + rl.close(); + return; + } + + if (score % 5 === 0) { + digitCount++; + } + + playRound(); + }); +} + +function startGame() { + console.log('¡Bienvenido al juego matemático!'); + console.log('Tienes 3 segundos para responder cada pregunta.'); + playRound(); +} + +startGame(); + +// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges From 5e895246ddc15078e8cbfe860a264170f04bce90 Mon Sep 17 00:00:00 2001 From: marco cruz Date: Sun, 26 Nov 2023 01:42:32 -0600 Subject: [PATCH 0871/2103] Reto #45 - Javascript --- .../javascript/marcode24.js" | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/marcode24.js" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/marcode24.js" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/marcode24.js" new file mode 100644 index 0000000000..f41eb74626 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/marcode24.js" @@ -0,0 +1,103 @@ +/* + * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participación: + * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. + * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. + * (Y no lo duplicarás) + * - Si seleccionas mostrar los participantes, se listarán todos. + * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - Si seleccionas realizar el sorteo, elegirás una persona al azar + * y se eliminará del listado. + * - Si seleccionas salir, el programa finalizará. + */ + +const readline = require('readline'); + +const participants = []; + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +const showMenu = () => { + console.log('\nSelecciona una opción:'); + console.log('1. Añadir participante'); + console.log('2. Mostrar participantes'); + console.log('3. Eliminar participante'); + console.log('4. Realizar sorteo'); + console.log('5. Salir'); + + // eslint-disable-next-line no-use-before-define + askOption(); +}; + +const addParticipant = () => { + rl.question('\nIntroduce el nombre del participante: ', (name) => { + if (participants.includes(name)) { + console.log('Este participante ya existe.'); + } else { + participants.push(name); + console.log('Participante añadido con éxito.'); + } + showMenu(); + }); +}; + +const showParticipants = () => { + console.log('\nLista de participantes:'); + participants.forEach((participant, index) => { + console.log(`${index + 1}. ${participant}`); + }); + showMenu(); +}; + +const removeParticipant = () => { + rl.question('\nIntroduce el nombre del participante a eliminar: ', (name) => { + const index = participants.indexOf(name); + if (index !== -1) { + participants.splice(index, 1); + console.log('Participante eliminado con éxito.'); + } else { + console.log('Este participante no existe.'); + } + showMenu(); + }); +}; + +const drawWinner = () => { + if (participants.length === 0) { + console.log('\nNo hay participantes para realizar el sorteo.'); + } else { + const winnerIndex = Math.floor(Math.random() * participants.length); + const winner = participants[winnerIndex]; + console.log(`\n¡El ganador es: ${winner}!`); + participants.splice(winnerIndex, 1); + } + showMenu(); +}; + +const askOption = () => { + const menuOptions = { + 1: addParticipant, + 2: showParticipants, + 3: removeParticipant, + 4: drawWinner, + 5: () => rl.close(), + }; + + rl.question('Opción: ', (option) => (menuOptions[option] || (() => { + console.log('\nOpción no válida. Inténtalo de nuevo.'); + showMenu(); + }))()); +}; + +showMenu(); + +// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges From 50693ed70720dec0834997e7b7401f7d61e63095 Mon Sep 17 00:00:00 2001 From: patotal Date: Sun, 26 Nov 2023 10:54:24 -0300 Subject: [PATCH 0872/2103] reto#3 - python --- .../python/patotal.py" | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/patotal.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/patotal.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/patotal.py" new file mode 100644 index 0000000000..a941582fb6 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/patotal.py" @@ -0,0 +1,32 @@ +import random, string + +base = list(string.ascii_lowercase) + +while True: + longitud = int(input("Indique longitud de contraseña a generar entre 8 y 16 caracteres: ")) + if longitud < 8 or longitud > 16: + print ("Número fuera de rango, vuelva a intentarlo") + else: + break + +pregunta_mayusculas = input("¿Puede contener mayúsculas? y/n: ") +pregunta_nro = input("¿Puede contener números? y/n: ") +pregunta_especiales = input("¿Puede contener caracteres especiales? y/n: ") + +if pregunta_mayusculas == "y": + for i in string.ascii_uppercase: + base.append(i) + +if pregunta_nro == "y": + for i in string.digits: + base.append(i) + +if pregunta_especiales == "y": + for i in string.punctuation: + base.append(i) + +passw = "" +for i in range(longitud): + passw += random.choice(base) + +print (f"Su contraseña es: {passw}") \ No newline at end of file From 0f94cb81833d1306c481c0c0af87081cdf8e8733 Mon Sep 17 00:00:00 2001 From: Ilan Fritzler Date: Sun, 26 Nov 2023 11:56:09 -0300 Subject: [PATCH 0873/2103] solution reto-0 --- .../javascript/ifritzler.js" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/ifritzler.js" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/ifritzler.js" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/ifritzler.js" new file mode 100644 index 0000000000..b40e1b177a --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/ifritzler.js" @@ -0,0 +1,16 @@ +const MIN = 1 +const MAX = 100 + +function isMultiplo(number, targets = []) { + if(number == null) return false + if(!Array.isArray(targets)) targets = [targets] + + return targets.every(target => number % target === 0) +} + +for(let i = MIN; i <= MAX; i++) { + if(isMultiplo(i, [3, 5])) console.log('fizzbuzz') + else if(isMultiplo(i, 3)) console.log('fizz') + else if(isMultiplo(i, 5)) console.log('buzz') + else console.log(i) +} \ No newline at end of file From 06ed111aea1d6ff002bfaa494fb9a3ef7f504208 Mon Sep 17 00:00:00 2001 From: Rusian69 <133795514+Rusian69@users.noreply.github.com> Date: Sun, 26 Nov 2023 11:27:28 -0400 Subject: [PATCH 0874/2103] Reto programacion #45 Calendarioo aDEVineto Reto programacion #45 Calendarioo aDEVineto by Rusian69 --- .../python/Rusian69.py" | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Rusian69.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Rusian69.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Rusian69.py" new file mode 100644 index 0000000000..f4b1ad08f5 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Rusian69.py" @@ -0,0 +1,88 @@ +""" + * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? + * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. + * Desde el 1 al 24 de diciembre. + * + * Crea un programa que simule el mecanismo de participación: + * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar + * participantes, mostrarlos, lanzar el sorteo o salir. + * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. + * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. + * (Y no lo duplicarás) + * - Si seleccionas mostrar los participantes, se listarán todos. + * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. + * (Avisando de si lo has eliminado o el nombre no existe) + * - Si seleccionas realizar el sorteo, elegirás una persona al azar + * y se eliminará del listado. + * - Si seleccionas salir, el programa finalizará. +""" +import random +def aDEVinteo(): + name_list = [] + name = "" + print("Bienvenidos a sistema de participacion aDEViemto\naqui tenemos las opciones de ingresar [y/o] eliminar participantes-[1], ver la lista de los mismos-[2] o lazar el sorteo-[3]\ncualquier otra opcion cerrara el programa.") + orden = (input("ingrese su opcion basado en los numero: ")) + + if orden == "1": + participants_text = open("participants.text", "r+") + work_line = participants_text.readlines() + print(f"estos son los participantes actuales: {work_line}") + + print("vas a ingresar un nuevo participante[I] o vas a eliminar[D] un participante.") + respont = input(":") + + if respont == "i": + print("ingrese los nombre a ingresar en la lista separados una coma [,]: ") + insertion = input(":") + for index in insertion: + if index != ",": + name += index + else: + name_list.append(name) + name = "" + name_list.append(name) + name = "" + + elif respont == "d": + name_list = work_line + print("escriba el nombres a retirar separados por un espacio: ") + insertion = input() + for index in insertion: + if index != " ": + name += index + else: + name_list.remove(name+"\n") + name = "" + name_list.remove(name+"\n") + name = "" + else: + print("Obcion no valida, el programa se reiniciara para eviar errores") + aDEVinteo() + complete_list = work_line.extend(index for index in name_list if index not in work_line) + print(f"la lista de participante actual es: {complete_list}") + + participants_text = open("participants.text", "w") + for name in complete_list: + participants_text.write(name + "\n") + participants_text.close() + + elif orden == "2": + participants_text = open("participants.text") + print(f"la lista de participante es: {participants_text.readlines()}") + participants_text.close() + + elif orden == "3": + participants_text = open("participants.text", "r+") + work_line = participants_text.readlines() + result = random.choice(work_line) + print(f"estos son los participantes actuales: {work_line}") + print(f"EL GANADOR EN EL SORTEO aDEViento es: {result}\nEste se eliminara del listado para las siguientes rifas") + work_line.remove(result) + participants_text = open("participants.text", "w") + + for index in work_line: + participants_text.write(index) + participants_text.close() + else: + exit() +aDEVinteo() From d03ba38a90d63c8251b507895692203843a88759 Mon Sep 17 00:00:00 2001 From: Rusian69 <133795514+Rusian69@users.noreply.github.com> Date: Sun, 26 Nov 2023 11:43:35 -0400 Subject: [PATCH 0875/2103] Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 by Rusian69 --- .../python/Rusian69.py" | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Rusian69.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Rusian69.py" index f4b1ad08f5..deff53fbee 100644 --- "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Rusian69.py" +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Rusian69.py" @@ -68,14 +68,17 @@ def aDEVinteo(): elif orden == "2": participants_text = open("participants.text") - print(f"la lista de participante es: {participants_text.readlines()}") + name_list = participants_text.readlines() + name_list_temp=[] + for index in name_list: + name_list_temp.append(index.replace("\n", "")) + print(f"la lista de participante es: {name_list_temp}") participants_text.close() elif orden == "3": participants_text = open("participants.text", "r+") work_line = participants_text.readlines() - result = random.choice(work_line) - print(f"estos son los participantes actuales: {work_line}") + result = random.choice(work_line) print(f"EL GANADOR EN EL SORTEO aDEViento es: {result}\nEste se eliminara del listado para las siguientes rifas") work_line.remove(result) participants_text = open("participants.text", "w") From 271ca000fc160bc5511689fa049d191dc9bebc9d Mon Sep 17 00:00:00 2001 From: Miguel Angel Madrid Date: Sun, 26 Nov 2023 16:44:36 +0100 Subject: [PATCH 0876/2103] Reto#45 - Python --- .../python/Miguelmdv.py" | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Miguelmdv.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Miguelmdv.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Miguelmdv.py" new file mode 100644 index 0000000000..18d9025658 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Miguelmdv.py" @@ -0,0 +1,67 @@ + +# * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? 24 días, 24 regalos sorpresa relacionados con desarrollo de software. Desde el 1 al 24 de diciembre. + +# * Crea un programa que simule el mecanismo de participación: +# * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar participantes, mostrarlos, lanzar el sorteo o salir. +# * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. +# * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. (Y no lo duplicarás) +# * - Si seleccionas mostrar los participantes, se listarán todos. +# * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. (Avisando de si lo has eliminado o el nombre no existe) +# * - Si seleccionas realizar el sorteo, elegirás una persona al azar y se eliminará del listado. +# * - Si seleccionas salir, el programa finalizará. + +import random as rd + + +def calendario(df: set, eliminados: set): + salir = True + while salir: + respuesta = input( + "1 -> Añadir participante, 2 -> mostrar participantes, 3 -> Eliminar participante, 4 -> Realizar sorteo, 5 -> Salir\ + \n> " + ) + + match respuesta: + case "1": + dato = input("Nombre participante: ") + if dato not in df: + df.add(dato) + else: + print("Este participante ya existe") + + case "2": + if len(df): + for i, name in enumerate(df): + print(f"{i+1}.{name}") + else: + print("No hay participantes") + + case "3": + dato = input("Nombre participante: ") + if dato in df: + df.remove(dato) + eliminados.add(dato) + print(dato, "se ha eliminado correctamente") + elif dato in eliminados: + print("Este participante ya ha sido eliminado") + else: + print("Este participante no existe") + + case "4": + eliminado = rd.choice(list(df)) + eliminados.add(eliminado) + df.remove(eliminado) + print(eliminado, "ha ganado! Y por lo tanto ha sido eliminado") + + case "5": + salir = False + print("Adios") + + case _: + print("Dato no valido") + + +df = set() +eliminados = set() + +calendario(df, eliminados) From 443a0f0246d3b012b8324a4d3233562cb165cc91 Mon Sep 17 00:00:00 2001 From: Alan Marcos Date: Sun, 26 Nov 2023 17:22:15 +0100 Subject: [PATCH 0877/2103] Reto #45 kotlin --- .../kotlin/alanmarcos.kt" | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/alanmarcos.kt" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/alanmarcos.kt" index d46df14868..d7e636667c 100644 --- "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/alanmarcos.kt" +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/alanmarcos.kt" @@ -1,6 +1,6 @@ package retos2023 -import java.util.Scanner +import java.util.* /* * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? @@ -26,33 +26,39 @@ fun main(){ val competitors = mutableListOf() val scanner = Scanner(System.`in`) boardOptions() - var userInput = scanner.nextLine() - while (userInput != "5"){ + var userInput = scanner.nextLine().lowercase() + while ((userInput != "5") && (userInput != "Salir".lowercase())){ when(userInput){ - "1" -> { + "1", "Agregar participante".lowercase() -> { val competitorName = competitorNameInput(scanner) if (!competitors.contains(competitorName)) competitors.add(competitorName) else println("El participante ya existe.") } - "2" -> { + "2", "Borrar participante".lowercase() -> { val competitorName = competitorNameInput(scanner) if (competitors.contains(competitorName)) competitors.remove(competitorName) else println("El participante no existe.") } - "3" -> showAllCompetitors(competitors) - "4" -> launchLottery(competitors) + "3", "Mostrar todos los participantes".lowercase() -> showAllCompetitors(competitors) + "4", "Lanzar sorteo".lowercase() -> { + if (competitors.isNotEmpty()) { + val randomlySelectCompetitor = launchLottery(competitors) + println("Ha salido sorteado $randomlySelectCompetitor") + competitors.remove(randomlySelectCompetitor) + } else println("La lista de participantes está vacía") + } else -> println("Opción incorrecta. Ingrésela otra vez.") } boardOptions() - userInput = scanner.nextLine() + userInput = scanner.nextLine().lowercase() } println("Hasta pronto!") } -private fun launchLottery(competitors: MutableList) = println("Ha salido sorteado ${competitors.random()}") +private fun launchLottery(competitors: List) = competitors.random() -private fun showAllCompetitors(competitors: MutableList) = competitors.forEach { println(it) } +private fun showAllCompetitors(competitors: List) = competitors.forEach { println(it) } private fun competitorNameInput(scanner: Scanner): String { println("Ingrese nombre: ") From b6b7343280b6129a7de18e40f7763be8831c9917 Mon Sep 17 00:00:00 2001 From: David Date: Sun, 26 Nov 2023 17:56:10 +0100 Subject: [PATCH 0878/2103] Add files via upload --- .../c#/DrDavidRenes.cs" | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/DrDavidRenes.cs" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/DrDavidRenes.cs" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/DrDavidRenes.cs" new file mode 100644 index 0000000000..209f4b40b1 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/DrDavidRenes.cs" @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DrDavidRenes +{ + class Program + { + static List participantes = new List(); + static Random random = new Random(); + + static void Main(string[] args) + { + + while (true) + { + MostrarMenu(); + string opcion = Console.ReadLine().ToLower(); + + switch (opcion) + { + case "1": + AñadirParticipante(); + break; + case "2": + MostrarParticipantes(); + break; + case "3": + EliminarParticipante(); + break; + case "4": + RealizarSorteo(); + break; + case "5": + Console.WriteLine("¡Hasta luego!"); + return; + default: + Console.WriteLine("Opción no válida. Por favor, selecciona una opción válida."); + break; + } + } + } + + static void MostrarMenu() + { + Console.WriteLine("===== Menú ====="); + Console.WriteLine("1. Añadir participante"); + Console.WriteLine("2. Mostrar participantes"); + Console.WriteLine("3. Eliminar participante"); + Console.WriteLine("4. Realizar sorteo"); + Console.WriteLine("5. Salir"); + Console.Write("Selecciona una opción: "); + } + + static void AñadirParticipante() + { + Console.Write("Introduce el nombre del participante: "); + string nombre = Console.ReadLine(); + + if (participantes.Contains(nombre)) + { + Console.WriteLine("¡Error! Este participante ya existe."); + } + else + { + participantes.Add(nombre); + Console.WriteLine($"¡{nombre} ha sido añadido correctamente!"); + } + } + + static void MostrarParticipantes() + { + Console.WriteLine("===== Participantes ====="); + if (participantes.Count == 0) + { + Console.WriteLine("No hay participantes registrados."); + } + else + { + foreach (var participante in participantes) + { + Console.WriteLine(participante); + } + } + } + + static void EliminarParticipante() + { + Console.Write("Introduce el nombre del participante a eliminar: "); + string nombre = Console.ReadLine(); + + if (participantes.Contains(nombre)) + { + participantes.Remove(nombre); + Console.WriteLine($"¡{nombre} ha sido eliminado correctamente!"); + } + else + { + Console.WriteLine("¡Error! Este participante no existe."); + } + } + + static void RealizarSorteo() + { + if (participantes.Count == 0) + { + Console.WriteLine("¡Error! No hay participantes para realizar el sorteo."); + } + else + { + int indiceGanador = random.Next(participantes.Count); + string ganador = participantes[indiceGanador]; + + Console.WriteLine($"¡El ganador del sorteo es: {ganador}!"); + participantes.RemoveAt(indiceGanador); + } + } + } +} + + From 2cde57f8e5001e0faaa7135dcb2d346a20b85f0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Pe=C3=B1a=20Polonia?= <65502311+Mariopolonia0@users.noreply.github.com> Date: Sun, 26 Nov 2023 12:02:21 -0500 Subject: [PATCH 0879/2103] reto #45 --- .../kotlin/Mariopolonia0.kt" | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/Mariopolonia0.kt" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/Mariopolonia0.kt" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/Mariopolonia0.kt" new file mode 100644 index 0000000000..eb9a119341 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/Mariopolonia0.kt" @@ -0,0 +1,108 @@ +package EjercicioKotlin.Mouredev + +class Reto45_ElCalendarioDeAdeviento { + + var listaParticipantes: MutableList = mutableListOf("mario", "eskerni", "jaziel", "polonia") + + init { + var stop = false + + while (stop == false) { + when (menu()) { + 1 -> { + agregarParticipante() + } + + 2 -> { + borrarParticipante() + } + + 3 -> { + listarParticipante() + } + + 4 -> { + realizarSorteo() + } + + 5 -> { + stop = true + } + + else -> { + println("Opcion no existe") + } + + } + } + } + + private fun agregarParticipante() { + println("\n\n") + println("---------Agrega Participante---------") + print("Digite el nombre:") + + val nombre = readln() + + //el contains busca si hay un nombre igual en la lista + if (listaParticipantes.contains(nombre)) { + println("Participante ya esta en la lista") + } else { + listaParticipantes.add(nombre) + println("Participante agregado") + } + } + + private fun realizarSorteo() { + println("\n\nEl ganador es :${listaParticipantes.random()}") + listaParticipantes = mutableListOf() + println("\n\nSe limpio la lista") + } + + private fun borrarParticipante() { + println("\n\n") + println("---------Borrar Participante---------") + print("Digite el nombre:") + + val nombre = readln() + + //el contains busca si hay un nombre igual en la lista + if (listaParticipantes.contains(nombre)) { + listaParticipantes.remove(nombre) + println("Participante borrado de la lista") + } else { + println("Participante no esta en la lista") + } + } + + private fun listarParticipante() { + var item = 1 + + println("\n\n----Lista de participante----") + + listaParticipantes.map { + println("${item}.${it}") + item++ + } + } + + private fun menu(): Int { + var select = 0 + + println("\n\n") + println("---------Menu---------") + println("1.Agregar participante") + println("2.Borrar participante") + println("3.Mostrar") + println("4.Realizar Sorteo") + println("5.Salir") + print("Seleccione una opcion:") + select = readLine()!!.toInt() + + return select + } +} + +fun main() { + Reto45_ElCalendarioDeAdeviento() +} From c187a6d72e6ddc3928713711c3223a4b7352a661 Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Sun, 26 Nov 2023 10:17:48 -0700 Subject: [PATCH 0880/2103] reto #45 - python --- .../python/KevinED11.py" | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/KevinED11.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/KevinED11.py" index a64267c1a0..2d00826e83 100644 --- "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/KevinED11.py" +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/KevinED11.py" @@ -50,6 +50,11 @@ def delete(self, participant: str) -> None: self.participants.remove(participant) def show(self) -> None: + print("Lista de participantes:") + if not self.participants: + print("No hay participantes registrados.") + return + for participant in self.participants: print(participant) @@ -57,7 +62,7 @@ def run_giveaway(self) -> str: time.sleep(3) giveaway_winner = self.participants[randint(0, len(self.participants) - 1)] - self.participants.remove(giveaway_winner) + self.delete(giveaway_winner) print(f"El ganador del sorteo es: {giveaway_winner}") return giveaway_winner @@ -79,7 +84,7 @@ def get_options(self) -> dict[str, callable]: def run(self) -> None: self.running = True options = self.get_options() - while True: + while self.running: print( "1. Añadir participante, 2. Eliminar participante, 3. Mostrar participantes, 4. Realizar sorteo, 5. Salir" ) @@ -90,6 +95,7 @@ def run(self) -> None: result = options[option]() if isinstance(result, bool) and result: + self.running = False break def exit(self) -> bool: From f8d1c21903ac969393fd1be02fc6717882895596 Mon Sep 17 00:00:00 2001 From: wapastorv Date: Sun, 26 Nov 2023 13:33:21 -0500 Subject: [PATCH 0881/2103] Reto # 5 - JavaScript --- .../javascript/wapastorv.js | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/wapastorv.js diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/wapastorv.js b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/wapastorv.js new file mode 100644 index 0000000000..33f3118e12 --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/wapastorv.js @@ -0,0 +1,53 @@ +const opcionesJuego = ['🪨', '📄', '✂️', '🦎', '🖖']; + +function calcularGanador(jugador1, jugador2){ + + const indexPlayer1 = opcionesJuego.indexOf(jugador1) + const indexPlayer2 = opcionesJuego.indexOf(jugador2) + + + const opcionesGanar = [ + [2, 1], // ✂️ corta 📄 + [1, 0], // 📄 cubre 🪨 + [0, 3], // 🪨 aplasta 🦎 + [3, 4], // 🦎 envenena 🖖 + [4, 2], // 🖖 rompe ✂️ + [2, 3], // ✂️ decapita 🦎 + [3, 1], // 🦎 come 📄 + [1, 4], // 📄 desautoriza 🖖 + [4, 0], // 🖖 vaporiza 🪨 + [0, 2], // 🪨 aplasta ✂️ + ] + + if (indexPlayer1 === indexPlayer2){ + return 'Empate' + } + + if(opcionesGanar.some(par => par[0] === indexPlayer1 && par[1] === indexPlayer2)){ + return 'Jugador 1 gana' + }else { + return 'Jugador 2 Gana' + } +} + +function jugarPartidas(jugadas){ + + for( const jugada of jugadas){ + + const resultado = calcularGanador(jugada[0],jugada[1]) + + console.log(`Resultado de la partia: ${resultado}`) + } + +} + +const jugadas=[ + ['🪨','✂️'], + ['✂️','🪨'], + ['📄','✂️'], + ['🪨', '✂️'], + ['🦎', '🖖'], + ['📄', '🦎'], + ['✂️', '🪨'] + ] +jugarPartidas(jugadas) From fc94c9bcb0c36acee745c512c127d5d1f16dedc3 Mon Sep 17 00:00:00 2001 From: wapastorv Date: Sun, 26 Nov 2023 14:09:00 -0500 Subject: [PATCH 0882/2103] Reto # & JavaScritp --- .../javascript/wapastorv.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/wapastorv.js b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/wapastorv.js index 33f3118e12..296a2bb92c 100644 --- a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/wapastorv.js +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/wapastorv.js @@ -20,7 +20,7 @@ function calcularGanador(jugador1, jugador2){ ] if (indexPlayer1 === indexPlayer2){ - return 'Empate' + return 'Tie' } if(opcionesGanar.some(par => par[0] === indexPlayer1 && par[1] === indexPlayer2)){ From 6cf2e19fbc1c9b0e53f773c588f1edc29162bf05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Sun, 26 Nov 2023 20:35:01 +0100 Subject: [PATCH 0883/2103] Reto 45 didacdev --- .../swift/didacdev.swift" | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/swift/didacdev.swift" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/swift/didacdev.swift" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/swift/didacdev.swift" new file mode 100644 index 0000000000..d3c078e29d --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/swift/didacdev.swift" @@ -0,0 +1,117 @@ +import Foundation + +class DataBase { + var participants: [String] = [] + + func addParticipant(name: String) { + if !exists(name: name) { + participants.append(name) + print("Participante añadido!") + } else { + print("El participante ya existe") + } + } + + func exists(name: String) -> Bool { + for participant in participants { + if participant == name { + return true + } + } + + return false + } + + func getParticipants() -> [String]{ + return participants + } + + func deleteParticipant(name: String) { + if let index = participants.firstIndex(of: name) { + participants.remove(at: index) + print("Participante eliminado") + } else { + print("El participante no existe") + } + } + + func getRandomParticipant() -> String { + let randomNumber = Int.random(in: 0.. Bool { + return exit + } +} + +var app = App() + +while !app.getExit() { + app.chooseOption() +} + + From 96084e851c2aeaf4483ecab63b57ae39bc629006 Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Sun, 26 Nov 2023 13:37:15 -0700 Subject: [PATCH 0884/2103] reto #45 - python --- .../python/KevinED11.py" | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/KevinED11.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/KevinED11.py" index 2d00826e83..deccf3d807 100644 --- "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/KevinED11.py" +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/KevinED11.py" @@ -2,24 +2,30 @@ from typing import Protocol from random import randint import time +from abc import abstractmethod, abstractproperty class ParticipationMecanism(Protocol): participants: list[str] = [] running: bool = False + @abstractmethod def add(self, participant: str) -> None: ... + @abstractmethod def delete(self, participant: str) -> None: ... + @abstractmethod def show(self) -> None: ... + @abstractmethod def run_giveaway(self) -> str: ... + @abstractmethod def run(self) -> None: ... @@ -29,7 +35,7 @@ def user_input(prompt: str) -> str: @dataclass -class AdevientoParticipationMecanism: +class AdevientoParticipationMecanism(ParticipationMecanism): participants: list[str] = field(default_factory=list) running: bool = field(default=False) @@ -50,15 +56,19 @@ def delete(self, participant: str) -> None: self.participants.remove(participant) def show(self) -> None: - print("Lista de participantes:") if not self.participants: print("No hay participantes registrados.") return + print("Lista de participantes:") for participant in self.participants: print(participant) def run_giveaway(self) -> str: + if not self.participants: + print("No hay participantes para realizar el sorteo.") + return + time.sleep(3) giveaway_winner = self.participants[randint(0, len(self.participants) - 1)] From acec6ebf606acb5ae445766305d8ced190d59f20 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sun, 26 Nov 2023 20:44:46 -0600 Subject: [PATCH 0885/2103] add marvnramos.js --- .../javascript/marvnramos.js" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" diff --git "a/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" new file mode 100644 index 0000000000..e69de29bb2 From 1cb8d97db03e051b69bb202f86a613a61b611d7d Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sun, 26 Nov 2023 21:02:30 -0600 Subject: [PATCH 0886/2103] initiating logic --- .../javascript/marvnramos.js" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git "a/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" index e69de29bb2..00c59547e1 100644 --- "a/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" +++ "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" @@ -0,0 +1,21 @@ +const url = 'https://retosdeprogramacion.com?year=2023&challenge=0'; + +const getParameters = (url) => { + let index = url.indexOf('?'); + let values = []; + for(let i = index + 1; i < url.length; i++) { + if(url[i] === '&'){ + values.push(url.slice(index + 1, i)); + index = i; + } + } + console.log(values); +} + +getParameters(url); + +// let example = 'hola mundo' +// for(let i = 5; i <= example.lastIndexOf('o'); i++) { +// console.log(example[i]) +// } + From 78c62428f055dae6fa35db794057e4fd8e730776 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sun, 26 Nov 2023 21:48:54 -0600 Subject: [PATCH 0887/2103] add getParamerts feature --- .../javascript/marvnramos.js" | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git "a/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" index 00c59547e1..daea27adf8 100644 --- "a/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" +++ "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" @@ -1,21 +1,29 @@ const url = 'https://retosdeprogramacion.com?year=2023&challenge=0'; + const getParameters = (url) => { let index = url.indexOf('?'); let values = []; + for(let i = index + 1; i < url.length; i++) { - if(url[i] === '&'){ - values.push(url.slice(index + 1, i)); - index = i; + let endIndex = url.indexOf('&', i); + + if(endIndex === -1) { + endIndex = url.length; } + + let startIndex = url.lastIndexOf('=', endIndex); + if(startIndex === -1) { + startIndex = i; + } + + values.push(url.slice(startIndex + 1, endIndex)); + + // Update the index to skip the current parameter value + i = endIndex; } console.log(values); } getParameters(url); -// let example = 'hola mundo' -// for(let i = 5; i <= example.lastIndexOf('o'); i++) { -// console.log(example[i]) -// } - From 5aaa5ebc7a7e0b533e693fa8e8a06172b28161b1 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Sun, 26 Nov 2023 21:50:06 -0600 Subject: [PATCH 0888/2103] add comments --- .../javascript/marvnramos.js" | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git "a/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" index daea27adf8..f4277cd3aa 100644 --- "a/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" +++ "b/Retos/Reto #11 - URL PARAMS [F\303\241cil]/javascript/marvnramos.js" @@ -1,6 +1,9 @@ const url = 'https://retosdeprogramacion.com?year=2023&challenge=0'; - +/** + * Get the parameters from a url and print them in the console + * @param {*} url - The url to get the parameters from + */ const getParameters = (url) => { let index = url.indexOf('?'); let values = []; @@ -25,5 +28,4 @@ const getParameters = (url) => { console.log(values); } -getParameters(url); - +getParameters(url); \ No newline at end of file From bdc8b87b945356f71774e6d7d7824f7ab4804a1f Mon Sep 17 00:00:00 2001 From: patotal Date: Mon, 27 Nov 2023 07:06:42 -0300 Subject: [PATCH 0889/2103] Reto #4 - python --- .../python/patoal.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/patoal.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/patoal.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/patoal.py new file mode 100644 index 0000000000..a6df45ec9f --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/patoal.py @@ -0,0 +1,41 @@ + +def primo(n1): + contador = 0 + for i in range(1, n1 + 1): + if n1 % i == 0: + contador += 1 + if contador == 2: + return "es primo" + else: + return "no es primo" + +def fibonacci(n3): + fibo = [0] + n1 = 0 + n2 = 1 + for i in range(n3): + agrega = n1 + n2 + fibo.append(agrega) + n1 = n2 + n2 = agrega + if n2 > n3: + break + if n3 in fibo: + return "es fibonacci" + else: + return "no es fibonacci" + +def impar(n4): + if n4 % 2 == 0: + return "es par" + else: + return "no es par" + +while True: + try: + ingreso = int(input("Ingrese el Número: ")) + break + except ValueError: + print("\n Sólo se admite un valor numérico, vuelva a intentarlo.\n") + +print (f"{ingreso} {primo(ingreso)}, {fibonacci(ingreso)} y {impar(ingreso)}") \ No newline at end of file From 9324632fd34ee6ee56c49323a09ece47c0cdec45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Velasco=20Ca=C3=B1adas?= Date: Mon, 27 Nov 2023 11:07:19 +0100 Subject: [PATCH 0890/2103] =?UTF-8?q?Soluci=C3=B3n=20Reto=20#0=20-=20Pytho?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/mariovelascodev.py" | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/mariovelascodev.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/mariovelascodev.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/mariovelascodev.py" new file mode 100644 index 0000000000..89c2520e64 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/mariovelascodev.py" @@ -0,0 +1,12 @@ +def fizz_buzz(): + for number in range(1,101): + if number % 3 == 0 and number % 5 == 0: + print("fizzbuzz") + elif number % 3 == 0: + print("fizz") + elif number % 5 == 0: + print("buzz") + else: + print(number) + +fizz_buzz() \ No newline at end of file From e627f4d6a1aaaf3e380b5e9550f819215735b648 Mon Sep 17 00:00:00 2001 From: Biel Serrano Sanchez Date: Mon, 27 Nov 2023 11:56:09 +0100 Subject: [PATCH 0891/2103] Reto #45 - C# --- .../c#/bielsesa.cs" | 161 ++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/bielsesa.cs" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/bielsesa.cs" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/bielsesa.cs" new file mode 100644 index 0000000000..86592d494f --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/c#/bielsesa.cs" @@ -0,0 +1,161 @@ +namespace RetosProgramacion +{ + internal class Program + { + public static void Main(string[] args) + { + new Adeviento().GestionaSorteo(); + } + } + + internal class Adeviento + { + private List participantes = new(); + + public void GestionaSorteo() + { + Console.WriteLine("#¡Buenas! Bienvenide al programa de selección de ganadores para el calendario de aDEViento 2023.#"); + string? seleccion; + do + { + Console.WriteLine(""" + =============================================================================================== + Selecciona una opción: + 1 - Mostrar participantes + 2 - Añadir participante + 3 - Eliminar participante + 4 - Realizar sorteo + 0 - Salir + =============================================================================================== + """); + seleccion = Console.ReadLine(); + + switch (seleccion) + { + case "1": + MostrarParticipantes(true); + break; + case "2": + AñadirParticipante(); + break; + case "3": + EliminarParticipante(); + break; + case "4": + RealizarSorteo(); + break; + default: + continue; + } + + } + while (seleccion != null && !seleccion.Equals("0")); + + Console.WriteLine("#¡Que tengas un buen día!#"); + Console.WriteLine("Presiona ENTER para salir ..."); + Console.ReadLine(); + } + + private void MostrarParticipantes(bool clearConsoleOnEnter) + { + if (clearConsoleOnEnter) Console.Clear(); + if (!participantes.Any()) + { + Console.WriteLine("No hay participantes actualmente."); + } + else + { + Console.WriteLine("Participantes:"); + participantes.ForEach(Console.WriteLine); + } + ContinueAndClearConsole(); + } + + private void AñadirParticipante() + { + Console.Clear(); + Console.WriteLine("Escribe el nombre del participante a añadir."); + string? participante; + + do + { + participante = Console.ReadLine(); + } + while (string.IsNullOrWhiteSpace(participante)); + + if (participantes.Contains(participante)) + { + Console.WriteLine("Este participante ya existe."); + ContinueAndClearConsole(); + return; + } + + participantes.Add(participante); + Console.WriteLine($"Se ha añadido correctamente a {participante}."); + MostrarParticipantes(false); + } + + private void EliminarParticipante() + { + Console.Clear(); + + if (!participantes.Any()) + { + Console.WriteLine("No hay ningún participante, así que no se puede eliminar ninguno."); + ContinueAndClearConsole(); + } + else + { + Console.WriteLine("¿Qué participante quieres eliminar?"); + Console.WriteLine("(Si quieres ver la lista de participantes antes, escribe 0 a continuación)"); + var participante = Console.ReadLine(); + + if (participante.Equals("0")) + { + participantes.ForEach(Console.WriteLine); + Console.WriteLine(""" + ------------------------------------ + Escribe el participante a eliminar:" + ------------------------------------ + """); + participante = Console.ReadLine(); + } + + if (string.IsNullOrWhiteSpace(participante) || !participantes.Contains(participante)) + { + Console.WriteLine("Este participante no se encuentra en la lista."); + ContinueAndClearConsole(); + return; + } + + participantes.Remove(participante); + Console.WriteLine($"Se ha eliminado correctamente a {participante}"); + + MostrarParticipantes(false); + } + } + + private void RealizarSorteo() + { + Console.Clear(); + if (!participantes.Any() || participantes.Count == 1) + { + Console.WriteLine($"No se puede realizar el sorteo con {participantes.Count} participante{(participantes.Count == 1 ? string.Empty : "s")}."); + } + else + { + var ganador = participantes[new Random().Next(0, participantes.Count)]; + Console.WriteLine($"The winner is {ganador}!"); + participantes.Remove(ganador); + } + ContinueAndClearConsole(); + } + + private static void ContinueAndClearConsole() + { + Console.WriteLine("Presiona ENTER para continuar."); + Console.ReadLine(); + Console.Clear(); + } + } +} From 328d719b899af5110bd86587160be6a6026e7b37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Velasco=20Ca=C3=B1adas?= Date: Mon, 27 Nov 2023 12:56:01 +0100 Subject: [PATCH 0892/2103] Reto #1 - Python --- .../python/mariovelascodev.py" | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/mariovelascodev.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/mariovelascodev.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/mariovelascodev.py" new file mode 100644 index 0000000000..b4fe6c0eaf --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/mariovelascodev.py" @@ -0,0 +1,26 @@ +def leet (text): + #Convertir el texto en una lista y en minúsculas + text_list = list(text.lower()) + + """ + Creamos una variable donde almacenar la conversion a lenguaje hacker + y un diccionario con el lenguaje hacker + """ + leet="" + my_dictionary_leet = {"a":"4", "b": "I3", "c":"[", "d":")", "e": "3", "f":"|=", + "g":"&", "h":"#", "i":"1", "j":",_|", "k": ">|", "l":"1", + "m":"/\\/\\","n":"^/", "o":"0", "p":"|*", "q":"(_,)", "r":"I2", + "s":"5", "t":"7", "u":"(_)", "v":"\/", "w":"\/\/", "x":"><", + "y":"j", "z":"2", "1":"L", "2":"R", "3":"E", "4": "A", "5": "S", + "6":"b", "7":"T", "8": "B", "9": "g", "0": "o", " ":" "} + + #Comprobar cada valor de la lista y convertirlo a lenguaje hacker + for character in text_list: + for value_dictionary in my_dictionary_leet: + if character == value_dictionary: + leet +=my_dictionary_leet[value_dictionary] + + return leet + +print(leet("Leet")) +print(leet("El Lenguaje hacker")) \ No newline at end of file From f114527aee48767e1b00082e543159a919fc9648 Mon Sep 17 00:00:00 2001 From: DHiebl <108873454+sirnas1983@users.noreply.github.com> Date: Mon, 27 Nov 2023 09:41:08 -0300 Subject: [PATCH 0893/2103] Reto #45 - python --- .../python/sirnas1983.py" | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/sirnas1983.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/sirnas1983.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/sirnas1983.py" new file mode 100644 index 0000000000..8ecc94670b --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/sirnas1983.py" @@ -0,0 +1,48 @@ +import random + +lista_participantes =[] +cont = True +print("-"*21) +print("Bienvenido a ADVIENTO") +while cont: + print("-"*21) + print("1. Añadir participante") + print("2. Remover participante") + print("3. Mostrar participantes") + print("4. Lanzar Sorteo") + print("0. Salir") + print("-"*21) + opcion = input("Seleccione una opcion: ") + if opcion == "0": + cont = False + break + if opcion == "1": + nombre = input("Ingrese nombre: ") + if nombre in lista_participantes: + print("Nombre ya esta registrado") + else: + lista_participantes.append(nombre) + print(f'{nombre} agregado correctamente') + if opcion == "2": + if len(lista_participantes) != 0: + nombre = input("Ingrese nombre: ") + if not nombre in lista_participantes: + print("Nombre no esta registrado") + else: + lista_participantes.remove(nombre) + print(f'{nombre} removido correctamente') + else: + print("No hay participantes cargados") + if opcion == "3": + if len(lista_participantes) != 0: + for participante in lista_participantes: + print(participante) + else: + print("Lista de participantes vacia") + if opcion == "4": + if len(lista_participantes) != 0: + ganador = lista_participantes[random.randint(0, len(lista_participantes)-1)] + print(f"¡¡El ganador es {ganador}!!\n¡¡Felicitaciones!!") + lista_participantes.remove(ganador) + else: + print("No hay participantes") From 85596f68d8357940dd2cff023a344f9d2179d8fc Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Mon, 27 Nov 2023 10:09:44 -0300 Subject: [PATCH 0894/2103] Reto #32 - Python --- .../python/rokmanhaman.py | 2 +- .../python/rokmanhaman.py | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/python/rokmanhaman.py diff --git a/Retos/Reto #30 - EL TECLADO T9 [Media]/python/rokmanhaman.py b/Retos/Reto #30 - EL TECLADO T9 [Media]/python/rokmanhaman.py index 2b94ceb994..15524febba 100644 --- a/Retos/Reto #30 - EL TECLADO T9 [Media]/python/rokmanhaman.py +++ b/Retos/Reto #30 - EL TECLADO T9 [Media]/python/rokmanhaman.py @@ -57,6 +57,6 @@ def t9_code(number): -num = "6-666-88-777-33-3-33-888" +num = "2-6-666-88-777-33-3-33-888" output = t9_code(num) print(output) \ No newline at end of file diff --git a/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/python/rokmanhaman.py b/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/python/rokmanhaman.py new file mode 100644 index 0000000000..8931d91d0d --- /dev/null +++ b/Retos/Reto #32 - LA COLUMNA DE EXCEL [Media]/python/rokmanhaman.py @@ -0,0 +1,26 @@ +""" +Reto #32: LA COLUMNA DE EXCEL +MEDIA | Publicación: 07/08/23 | Resolución: 14/08/23 +/* + * Crea una función que calcule el número de la columna de una hoja de Excel + * teniendo en cuenta su nombre. + * - Las columnas se designan por letras de la "A" a la "Z" de forma infinita. + * - Ejemplos: A = 1, Z = 26, AA = 27, CA = 79. + */ +""" + +def ExcelColumn(column): + letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] + for i,j in enumerate(letters[:26]): + for x, y in enumerate(letters[:26]): + letters.append(j + y) + + return letters.index(column) +1 + + + +col = 'CA' +out = ExcelColumn(col) +print(f"\n\nEl número de la columna {col} es el: {out}\n\n") + From 76e1e5fe230c840fa97040d955238d24035040e2 Mon Sep 17 00:00:00 2001 From: Billy Torres Date: Mon, 27 Nov 2023 07:37:32 -0600 Subject: [PATCH 0895/2103] Reto #3 - JavaScript --- .../javascript/BRivasTorres.js" | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/BRivasTorres.js" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/BRivasTorres.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/BRivasTorres.js" new file mode 100644 index 0000000000..c2bf0ddc0d --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/BRivasTorres.js" @@ -0,0 +1,37 @@ +//*Se crea un array que contiene los números, letras minusculas y mayusculas, y simbolos. +const mixedArray = [ + ...Array(10).keys(), + ...Array(26) + .fill() + .map((_, i) => String.fromCharCode(97 + i)), + ...Array(26) + .fill() + .map((_, i) => String.fromCharCode(65 + i)), + ...["!", "@", "#", "$", "%", "^", "&", "*"], +]; + +const generatePassword = () => { + let res = ""; + + //*Se crean las variables para crear un valor aletorio, + //* lengthOfPassword === la longitud aleatoria de cada contraseña + //* arrLength === longitud del array previamente creado. + //*Por medio de un bucle for recoremos hasta que se llegue a longitud actual, en cada iteración j crea un numero aleatorio + //* >= 0 y <= arrLength(que seria 70), luego solamente se le asigna ese valor al Caracter actual. + + let lengthOfPassword = Math.floor(Math.random() * (16 - 8) + 8); + let arrLength = mixedArray.length; + let j = 0; + + for (let i = 0; i <= lengthOfPassword; i++) { + j = Math.floor(Math.random() * arrLength); + res += `${mixedArray[j]}`; + } + + return res; +}; + +console.log(generatePassword()); +console.log(generatePassword()); +console.log(generatePassword()); +console.log(generatePassword()); From bfa89b119d459770dc8bef5eced8dc6299cf53e4 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Mon, 27 Nov 2023 11:24:18 -0300 Subject: [PATCH 0896/2103] Reto #36 - Python --- .../python/rokmanhaman.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Retos/Reto #36 - PERMUTACIONES [Media]/python/rokmanhaman.py diff --git a/Retos/Reto #36 - PERMUTACIONES [Media]/python/rokmanhaman.py b/Retos/Reto #36 - PERMUTACIONES [Media]/python/rokmanhaman.py new file mode 100644 index 0000000000..f59c201223 --- /dev/null +++ b/Retos/Reto #36 - PERMUTACIONES [Media]/python/rokmanhaman.py @@ -0,0 +1,25 @@ +""" +Reto #36: PERMUTACIONES +MEDIA | Publicación: 04/09/23 | Resolución: 18/09/23 +/* + * Crea un programa que sea capaz de generar e imprimir todas las + * permutaciones disponibles formadas por las letras de una palabra. + * - Las palabras generadas no tienen por qué existir. + * - Deben usarse todas las letras en cada permutación. + * - Ejemplo: sol, slo, ols, osl, los, lso + */ + """ +from itertools import permutations + +def generar_permutaciones(word): + + todas_permutaciones = permutations(word) + + + for permutacion in todas_permutaciones: + print(''.join(permutacion)) + + +w = 'hola' +generar_permutaciones(w) + From 686418b3283a5328685bb6001e00aa16434484b9 Mon Sep 17 00:00:00 2001 From: ANTONIOJLO Date: Mon, 27 Nov 2023 17:33:34 +0100 Subject: [PATCH 0897/2103] add reto 2 --- .../python/ajloinformatico.py | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/ajloinformatico.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/ajloinformatico.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/ajloinformatico.py new file mode 100644 index 0000000000..bbe8a6077c --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/ajloinformatico.py @@ -0,0 +1,136 @@ +from random import randint +from os import system + +""" +Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. +El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien +gane cada punto del juego. + +- Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. +- Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: +15 - Love +30 - Love +30 - 15 +30 - 30 +40 - 30 +Deuce +Ventaja P1 +Ha ganado el P1 +Si quieres, puedes controlar errores en la entrada de datos. +Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. +""" + +APP_NAME = """ +####################################### + TENNIS MATCH + + by infolojo + https:://infolojo.es + Antonio José Lojo Ojeda +####################################### +""" +DEUCE = "DEUCE" +ADVENTAGE = "ADVENTAGE" + +class Match: + def __init__(self, playerOne: str = "", playerTwo: str = ""): + self.playerOne: str = playerOne + self.playerTwo: str = playerTwo + self.service: int = 0 + self.playerOnePoint: int = 0 + self.playerTwoPoint: int = 0 + self.pointsList = ["Love", "15", "30", "40", "GAME"] + + def add_players(self): + if self.playerOne == "": + self.playerOne = input("Please enter P1 name:\n>> ") + if self.playerTwo == "": + self.playerTwo = input("Please enter P2 name:\n>> ") + + return f"\nPlayers {self.playerOne} and {self.playerTwo} are ready" + + def launch_round(self, mockk: bool = False): + if mockk == True: + self.playerOnePoint += 1 + self.playerTwoPoint += 1 + + else: + playerWinner: str = [self.playerOne, self.playerTwo][randint(0, 1)] + if playerWinner == self.playerOne: + self.playerOnePoint += 1 + elif playerWinner == self.playerTwo: + self.playerTwoPoint += 1 + + + actualPoints: str + if self.playerOnePoint >= 3 and self.playerTwoPoint >= 3: + # deuce + if self.playerOnePoint == self.playerTwoPoint: + actualPoints = f"\n{self.playerOne} - {DEUCE} | {self.playerTwo} - {DEUCE}" + + # player one wins + elif self.playerOnePoint - self.playerTwoPoint == 2: + actualPoints = f"\n{self.playerOne} - GAME | {self.playerTwo} - 40" + + # player one wins + elif self.playerTwoPoint - self.playerOnePoint == 2: + actualPoints = f"\n{self.playerOne} - 40 | {self.playerTwo} - GAME" + + # player one ADVENTAGE + elif self.playerOnePoint > self.playerTwoPoint: + actualPoints = f"\n{self.playerOne} - {ADVENTAGE} | {self.playerTwo} - 40" + + elif self.playerTwoPoint > self.playerOnePoint: + actualPoints = f"\n{self.playerOne} - 40 | {self.playerTwo} - {ADVENTAGE}" + + else: + actualPoints = f"\n{self.playerOne} - {self.pointsList[self.playerOnePoint]} | {self.playerTwo} - {self.pointsList[self.playerTwoPoint]}" + + print(actualPoints) + + def clear_screen(self): + # uncomment by checking your or + # clear windows screen + # system('CLS') + # clear linux screen + system('clear') + + def check_winner(self): + winner: str = "" + if self.playerOnePoint >= 3 and self.playerTwoPoint >= 3: + if self.playerOnePoint > 3 and (self.playerOnePoint - self.playerTwoPoint == 2): + winner = f"\nCongratulations {self.playerOne.upper()} YOU WINS\n" + elif self.playerTwoPoint > 3 and (self.playerTwoPoint - self.playerOnePoint == 2): + winner = f"\nCongratulations {self.playerTwo.upper()} YOU WINS\n" + + elif self.playerOnePoint == 4: + winner = f"\nCongratulations {self.playerOne.upper()} YOU WINS\n" + elif self.playerTwoPoint == 4: + winner = f"\nCongratulations {self.playerTwo.upper()} YOU WINS\n" + + if winner != "": + print(winner) + return True + return False + + def run(self): + self.clear_screen() + print(APP_NAME) + print(self.add_players()) + + while(True): + # check to finish game + if self.check_winner(): + return + + # upgrade service number + self.service += 1 + print(f"\nService number {self.service}:") + + + # launch rounf game + self.launch_round() + +if __name__ == "__main__": + Match().run() + \ No newline at end of file From c8782e6da77b928f79bc10ba6bf861d38e9b30b7 Mon Sep 17 00:00:00 2001 From: ANTONIOJLO Date: Mon, 27 Nov 2023 17:40:07 +0100 Subject: [PATCH 0898/2103] remove unnecessary extra empty line --- .../python/ajloinformatico.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/ajloinformatico.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/ajloinformatico.py index bbe8a6077c..2102911405 100644 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/ajloinformatico.py +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/ajloinformatico.py @@ -132,5 +132,4 @@ def run(self): self.launch_round() if __name__ == "__main__": - Match().run() - \ No newline at end of file + Match().run() \ No newline at end of file From a836cd7b433fba7c728bb3880774ab682cef24b4 Mon Sep 17 00:00:00 2001 From: rokmanhaman Date: Mon, 27 Nov 2023 15:13:14 -0300 Subject: [PATCH 0899/2103] Reto #37 - Python --- .../python/rokmanhaman.py" | 10 +-- .../python/rokmanhaman.py | 71 +++++++++++++++++++ 2 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/rokmanhaman.py diff --git "a/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/rokmanhaman.py" "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/rokmanhaman.py" index 6230c92323..086165784c 100644 --- "a/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/rokmanhaman.py" +++ "b/Retos/Reto #14 - OCTAL Y HEXADECIMAL [F\303\241cil]/python/rokmanhaman.py" @@ -43,18 +43,18 @@ def dec_to_hex(self): i = i + 1 - largo = len(resto_list) last_cociente = cociente_list[i] - invert_resto = [resto_list[x] for x in range(largo-1,-1,-1)] + invert_resto = resto_list[::-1] hex_values = "0123456789ABCDEF" - invert_resto_hex =[hex_values[y] for y in invert_resto] + last_cociente_hex = hex_values[last_cociente] + invert_resto_hex = [hex_values[y] for y in invert_resto] - resultado_text = str(last_cociente)+ "".join(map(str, invert_resto_hex)) + resultado_text = str(last_cociente_hex)+ "".join(map(str, invert_resto_hex)) return print(f" el num decimal: {self.number} se corresponde con el num hexa: {resultado_text}") -num_dec = Number(460) +num_dec = Number(255) num_dec.dec_to_oct() num_dec.dec_to_hex() diff --git a/Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/rokmanhaman.py b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/rokmanhaman.py new file mode 100644 index 0000000000..0d2599c36b --- /dev/null +++ b/Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/rokmanhaman.py @@ -0,0 +1,71 @@ +""" +Reto #37: COLORES HEX Y RGB +MEDIA | Publicación: 18/09/23 | Resolución: 25/09/23 +/* + * Crea las funciones capaces de transformar colores HEX + * a RGB y viceversa. + * Ejemplos: + * RGB a HEX: r: 0, g: 0, b: 0 -> #000000 + * HEX a RGB: hex: #000000 -> (r: 0, g: 0, b: 0) + */ +""" + +def dec_to_hex(number): + cociente_list = [number // 16] + resto_list = [number % 16] + i = 0 + while cociente_list[i] >= 16: + cociente_list.append(cociente_list[i] // 16) + resto_list.append(cociente_list[i] % 16) + i = i + 1 + + last_cociente = cociente_list[i] + invert_resto = resto_list[::-1] + hex_values = "0123456789ABCDEF" + last_cociente_hex = hex_values[last_cociente] + invert_resto_hex = [hex_values[y] for y in invert_resto] + + resultado_text = str(last_cociente_hex)+ "".join(map(str, invert_resto_hex)) + + return resultado_text + +def hex_to_dec(number): + acc = 0 + hex_values = "0123456789ABCDEF" + + for i, j in enumerate(number[::-1]): + + acc += hex_values.index(j) * 16**i + + return acc + + +def hex_to_rgb(hex): + + r = hex_to_dec(hex[0:2]) + g = hex_to_dec(hex[2:4]) + b = hex_to_dec(hex[4:6]) + + return print(f"\n\nEl color HEX {hex} corresponde al color RGB: ({r},{g},{b})\n\n") + + + +def rgb_to_hex(r,g,b): + + if r >= 0 and r <=255 and g >= 0 and g<=255 and b >= 0 and b <=255: + rhex = dec_to_hex(r) + ghex = dec_to_hex(g) + bhex = dec_to_hex(b) + else: + print( "ingrese valores entre 0 y 255") + + return print(f"\n\nEl color RGB {r}-{g}-{b} corresponde al color hex: #{rhex}{ghex}{bhex}\n\n") + + +rgb_to_hex(255,210,194) + + +hex_to_rgb('FFD2C2') + + + From a85fc82dffff8f934bfe66bf648bc9ba35b833c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ignacio=20Furi=C3=B3=20Jos=C3=A9?= Date: Mon, 27 Nov 2023 19:48:18 +0100 Subject: [PATCH 0900/2103] Reto #45 - javascript --- .../javascript/IgnacioFurio.js" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/IgnacioFurio.js" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/IgnacioFurio.js" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/IgnacioFurio.js" new file mode 100644 index 0000000000..2eebd082cc --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/javascript/IgnacioFurio.js" @@ -0,0 +1,65 @@ +const giveaway = (competitors) => { + let competitorsUpdated = []; + competitorsUpdated = competitors; + + let action = parseInt(prompt("Selecciona que acción vas a realizar de entre la lista: \n 1. Añadir participante. \n 2. Borrar participante. \n 3. Mostrar participante. \n 4. Realizar sorteo. \n 5. Salir." )); + + if(action === 1){ + let newName = prompt("Inscríbete con tu nombre completo"); + + if(competitorsUpdated.length === 0){ + competitorsUpdated.push(newName); + } else { + for(let i = 0 ; i < competitorsUpdated.length ; i++){ + if(competitorsUpdated[i] === newName){ + alert("Nombre ya registrado"); + return giveaway(competitorsUpdated); + }; + }; + competitorsUpdated.push(newName); + }; + + alert(newName + " ha sido inscrito correctamente."); + + return giveaway(competitorsUpdated); + } else if (action === 2) { + + if (competitorsUpdated.length === 0){ + alert("Todavía no existen participantes que eliminar."); + } else if (competitorsUpdated.length > 0) { + let deleteName = prompt("Escribe el nombre completo que quieras eliminar de entre quienes participan."); + + for(let i = 0 ; i < competitorsUpdated.length ; i++){ + if(competitorsUpdated[i] === deleteName){ + competitorsUpdated.splice(i, 1); + alert(deleteName + " ya no esta participando en el sorteo."); + } else { + alert("Ups, participante no encontrado"); + }; + }; + }; + return giveaway(competitorsUpdated) + + } else if (action === 3) { + if(competitorsUpdated.length === 0){ + alert("Todavía no hay participantes"); + } else { + alert("Participantes en el sorteo. \n" + competitorsUpdated); + }; + + return giveaway(competitorsUpdated); + } else if (action === 4) { + let random = Math.floor((Math.random() * (competitorsUpdated.length))); + let winner = competitorsUpdated[random]; + + competitorsUpdated.splice(random, 1); + + alert(winner + " won the price."); + giveaway(competitorsUpdated); + }; + }; + + let competitors = ["w","a","s","d"]; + // let competitors = []; + + giveaway(competitors); \ No newline at end of file From c401d5c8ee125b97604521d2691cce22121c6b62 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Mon, 27 Nov 2023 14:59:53 -0500 Subject: [PATCH 0901/2103] Reto #45 - Python --- .../python/Engleonardorm7.py" | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Engleonardorm7.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Engleonardorm7.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Engleonardorm7.py" new file mode 100644 index 0000000000..b3dc33ffff --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/Engleonardorm7.py" @@ -0,0 +1,56 @@ +# /* +# * ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? +# * 24 días, 24 regalos sorpresa relacionados con desarrollo de software. +# * Desde el 1 al 24 de diciembre. +# * +# * Crea un programa que simule el mecanismo de participación: +# * - Mediante la terminal, el programa te preguntará si quieres añadir y borrar +# * participantes, mostrarlos, lanzar el sorteo o salir. +# * - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. +# * - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. +# * (Y no lo duplicarás) +# * - Si seleccionas mostrar los participantes, se listarán todos. +# * - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. +# * (Avisando de si lo has eliminado o el nombre no existe) +# * - Si seleccionas realizar el sorteo, elegirás una persona al azar +# * y se eliminará del listado. +# * - Si seleccionas salir, el programa finalizará. +# */ +import random +option=0 +participantes=[] +while option!="5": + option=input(""" + 1. Añadir + 2. Mostrar + 3. Borrar + 4. Lanzar sorteo + 5. Salir + + """) + + + if option == "1": + newparticipant=input("Escribe el nombre del participante") + if newparticipant in participantes: + print("El participante ya esta registrado") + else: + participantes.append(newparticipant) + + + elif option == "2": + print("Estos son los participantes: ") + for each in participantes: + print(each) + elif option == "3": + participant=input("Escribe el nombre del participante a eliminar") + if participant in participantes: + participantes.remove(participant) + print("Participante eliminado") + else: + print("El participante no esta registrado") + elif option=="4": + winer= random.choice(participantes) + print(f"El ganador es: {winer}") + participantes.remove(winer) + From 598575ac2cdc173d153072d08a5502c6e1447bab Mon Sep 17 00:00:00 2001 From: Giovany Osorio <30839218+giovanyosorio@users.noreply.github.com> Date: Mon, 27 Nov 2023 20:08:29 +0000 Subject: [PATCH 0902/2103] Reto #40 Javascript --- .../javascript/giovanyosorio.js" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/giovanyosorio.js" diff --git "a/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/giovanyosorio.js" "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/giovanyosorio.js" new file mode 100644 index 0000000000..e836440dd1 --- /dev/null +++ "b/Retos/Reto #40 - TABLA DE MULTIPLICAR [F\303\241cil]/javascript/giovanyosorio.js" @@ -0,0 +1,20 @@ +/* + * Crea un programa que sea capaz de solicitarte un número y se + * encargue de imprimir su tabla de multiplicar entre el 1 y el 10. + * - Debe visualizarse qué operación se realiza y su resultado. + * Ej: 1 x 1 = 1 + * 1 x 2 = 2 + * 1 x 3 = 3 + * ... + */ + +function tablaDeMultiplicar(num){ + for (let index = 1; index <= 10; index++) { + + + const element = index; + console.log(element+" * "+ num + " = " + num*element) + + } +} +tablaDeMultiplicar(12) \ No newline at end of file From fba5bf4601dc6e391ffbc6e99fa8994a720efa3a Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 27 Nov 2023 21:17:53 +0100 Subject: [PATCH 0903/2103] =?UTF-8?q?Correcci=C3=B3n=20Reto=20#45?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +- .../python/mouredev.py" | 54 +++++++++++++++++++ .../ejercicio.md | 32 +++++++++++ 3 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/mouredev.py" create mode 100644 Retos/Reto #46 - LA CARRERA DE COCHES [Media]/ejercicio.md diff --git a/README.md b/README.md index f631667d2a..d1263f2e31 100644 --- a/README.md +++ b/README.md @@ -62,9 +62,10 @@ Aquí encontrarás el listado de retos, su fecha de publicación, dificultad y e * **#42** - 23/10/23 | Difícil | [`PUNTO DE ENCUENTRO`](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/ejercicio.md) Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2342%20-%20PUNTO%20DE%20ENCUENTRO%20%5BDifícil%5D/)] * **#43** - 30/10/23 | Fácil | [`SIMULADOR DE CLIMA`](./Retos/Reto%20%2343%20-%20SIMULADOR%20DE%20CLIMA%20%5BFácil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2343%20-%20SIMULADOR%20DE%20CLIMA%20%5BFácil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2343%20-%20SIMULADOR%20DE%20CLIMA%20%5BFácil%5D/)] * **#44** - 13/11/23 | Media | [`ADIVINANZAS MATEMÁTICAS`](./Retos/Reto%20%2344%20-%20ADIVINANZAS%20MATEMÁTICAS%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2344%20-%20ADIVINANZAS%20MATEMÁTICAS%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2344%20-%20ADIVINANZAS%20MATEMÁTICAS%20%5BMedia%5D/)] -* **#45** - 20/11/23 | Fácil | [`EL CALENDARIO DE ADEVIENTO 2023`](./Retos/Reto%20%2345%20-%20EL%20CALENDARIO%20DE%20ADEVIENTO%202023%20%5BFácil%5D/ejercicio.md) | Último reto publicado +* **#45** - 20/11/23 | Fácil | [`EL CALENDARIO DE ADEVIENTO 2023`](./Retos/Reto%20%2345%20-%20EL%20CALENDARIO%20DE%20ADEVIENTO%202023%20%5BFácil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2345%20-%20EL%20CALENDARIO%20DE%20ADEVIENTO%202023%20%5BFácil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2345%20-%20EL%20CALENDARIO%20DE%20ADEVIENTO%202023%20%5BFácil%5D/)] +* **#46** - 27/11/23 | Media | [`LA CARRERA DE COCHES`](./Retos/Reto%20%2346%20-%20LA%20CARRERA%20DE%20COCHES%20%5BMedia%5D/ejercicio.md) | Último reto publicado -> **Corrección y Publicación próximo reto - 27/11/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1176113149049585764) en [Twitch](https://twitch.tv/mouredev)** +> **Corrección y Publicación próximo reto - 04/12/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/aNQNqZcB?event=1178638296092524544) en [Twitch](https://twitch.tv/mouredev)** *Puedes ejecutar el archivo [language_stats.py](./Retos/language_stats.py) para visualizar las estadísticas de uso de cada lenguaje.* diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/mouredev.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/mouredev.py" new file mode 100644 index 0000000000..ffc923471e --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/mouredev.py" @@ -0,0 +1,54 @@ +import random + +participants = [] + +print("Calendario de aDEViento 2023") + +while True: + + print("\n1. Añadir | 2. Eliminar | 3. Listar | 4. Sortear | 5. Salir") + + option = input("Selecciona una opción: ") + + if option == "1": + + name = input( + "Introduce el nombre del participante que quieres añadir: ").lower() + if name in participants: + print(f"El participante \"{name}\" ya existe.") + else: + participants.append(name) + print(f"Participante \"{name}\" añadido correctamente.") + + elif option == "2": + + name = input( + "Introduce el nombre del participante que quieres eliminar: ").lower() + if name in participants: + participants.remove(name) + print(f"Participante \"{name}\" eliminado correctamente.") + else: + print(f"El participante \"{name}\" no existe.") + + elif option == "3": + + print("Listado de participantes:") + for participant in participants: + print(participant) + + elif option == "4": + + if participants: + name = random.choice(participants) + print(f"El ganador del sorteo es \"{name}\".") + participants.remove(name) + else: + print("No hay participantes para realizar el sorteo.") + + elif option == "5": + + print("Sorteo finalizado.") + break + + else: + print("Opción no válida. Selecciona otra opción.") diff --git a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/ejercicio.md b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/ejercicio.md new file mode 100644 index 0000000000..6efb393b45 --- /dev/null +++ b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/ejercicio.md @@ -0,0 +1,32 @@ +# Reto #46: La carrera de coches +#### Dificultad: Media | Publicación: 27/11/23 | Corrección: 04/12/23 + +## Enunciado + +``` +/* + * 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. + * + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file From 6b6a5247eee2d49ebf0900f17e8605f6c83066f1 Mon Sep 17 00:00:00 2001 From: Alan Marcos Date: Mon, 27 Nov 2023 21:40:03 +0100 Subject: [PATCH 0904/2103] Reto #45 kotlin --- .../kotlin/codigo-alan.kt" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/alanmarcos.kt" => "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/codigo-alan.kt" (100%) diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/alanmarcos.kt" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/codigo-alan.kt" similarity index 100% rename from "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/alanmarcos.kt" rename to "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/kotlin/codigo-alan.kt" From 525f9930a490c4c9f79385cdf42c443ffaf3a384 Mon Sep 17 00:00:00 2001 From: AdraDev Date: Mon, 27 Nov 2023 15:05:45 -0600 Subject: [PATCH 0905/2103] Reto #1: EL "LENGUAJE HACKER" --- .../python/adra-dev.py" | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/adra-dev.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/adra-dev.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/adra-dev.py" new file mode 100644 index 0000000000..32df34bbc9 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/adra-dev.py" @@ -0,0 +1,35 @@ +""" +Escribe un programa que reciba un texto y transforme lenguaje natural a +"lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje +se caracteriza por sustituir caracteres alfanuméricos. +Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) +con el alfabeto y los números en "leet". +(Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + +""" + +def to_leet(text): + + leet = {"A": "4", "B": "I3", "C": "[", "D": ")", "E": "3", "F": "|=", + "G": "&", "H": "#", "I": "1", "J": ",_|", "K": ">|", "L": "1", + "M": "/\/\\", "N": " ^/", "O": "0", "P": " |*", "Q": "(_,)", + "R": "I2", "S": "5", "T": "7", "U": "(_)", "V": "\/", + "W": "\/\/", "X": "><", "Y": "j", "Z": "2", "1": "L", "2": "R", + "3": "E", "4": "A", "5": "S", "6": "b", "7": "T", "8": "B", + "9": "g", "0": "o", + } + + leet_text="" + + for word in text: + if word.upper() in leet.keys(): + leet_text += leet[word.upper()] + else: + leet_text += word + + return leet_text + + +print(to_leet("Leet")) +print(to_leet("Aquí está un texto de prueba para ver si funciona el reto!")) +print(to_leet(input("Texto a traducir: "))) \ No newline at end of file From 4bc26f7e94dcbb803ea97fbc808f5d655c97c94c Mon Sep 17 00:00:00 2001 From: Egidio Pulicano <140091908+Egid10p@users.noreply.github.com> Date: Mon, 27 Nov 2023 18:15:02 -0300 Subject: [PATCH 0906/2103] Reto #45 - Python --- .../python/egid10p.py" | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/egid10p.py" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/egid10p.py" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/egid10p.py" new file mode 100644 index 0000000000..3781341f6c --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/python/egid10p.py" @@ -0,0 +1,76 @@ +# Reto #45: El calendario de aDEViento 2023 +#### Dificultad: Fácil | Publicación: 20/11/23 | Corrección: 27/11/23 + +## Enunciado + +# +# ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)? +# 24 días, 24 regalos sorpresa relacionados con desarrollo de software. +# Desde el 1 al 24 de diciembre. +# +# Crea un programa que simule el mecanismo de participación: +# - Mediante la terminal, el programa te preguntará si quieres añadir y borrar +# participantes, mostrarlos, lanzar el sorteo o salir. +# - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter. +# - Si seleccionas añadir un participante, y este ya existe, avisarás de ello. +# (Y no lo duplicarás) +# - Si seleccionas mostrar los participantes, se listarán todos. +# - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter. +# (Avisando de si lo has eliminado o el nombre no existe) +# - Si seleccionas realizar el sorteo, elegirás una persona al azar +# y se eliminará del listado. +# - Si seleccionas salir, el programa finalizará. +# +import random + +participantes = ["egidio", "giorgia", "maria", "luiz", "kiki", "pame"] + +print("Hola bienvenido o bienvenida a Calendario de aDEViento 2023\n") + +print("1.Añadir participante\n2.Borrar participante\n3.Mostrar participantes\n4.Lanzar sorteo\n5.Salir") + + +while True: + opcion = input("Introduce un numero del 1 al 5: ") + if opcion == "1": + username = input("\nIntroduce el nombre de usuario del participante que quieres agregar: ") + if len(username) > 0: + username.lower() + el_nombre_de_usuario_ya_existe = False + for i in participantes: + if username == i: + print(f"Error: {username} ya estaba previamente en la lista") + el_nombre_de_usuario_ya_existe = True + break + if not el_nombre_de_usuario_ya_existe: + participantes.append(username) + print(f"El nombre de usuario {username} se a añadido sin errores") + else: + print("No introduciste un nombre de usuario, porfavor intente de nuevo") + elif opcion == "2": + username = input("\nIntroduce el nombre de usuario que deseas eliminar: ") + username.lower() + if len(username) > 0: + if username in participantes: + participantes.remove(username) + print(f"Se ha eliminado {username} de la lista.") + else: + print(f"El usuario {username} no esta en la lista") + else: + print("No introduciste un nombre de usuario, porfavor intente de nuevo") + elif opcion == "3": + print("") + for i in participantes: + print(i) + elif opcion == "4": + if participantes: + ganador = random.choice(participantes) + print(f"¡¡El ganador es {ganador}!!") + else: + print("No hay participantes en el sorteo") + elif opcion == "5": + break + else: + print("Opcion invalida") + +print("Has salido sin problemas") \ No newline at end of file From be86e7517423f338b58df611bf9ed37739fcb8fb Mon Sep 17 00:00:00 2001 From: pyRamsd Date: Mon, 27 Nov 2023 17:30:35 -0500 Subject: [PATCH 0907/2103] Retos #43 - python --- .../python/pyramsd.py" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/pyramsd.py" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/pyramsd.py" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/pyramsd.py" new file mode 100644 index 0000000000..6d49922268 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/pyramsd.py" @@ -0,0 +1,44 @@ +import random + + +def weather_simulator(temperature: int, rain: int, days: int): + + rainy_days = 0 + min_temp = temperature + max_temp = temperature + + for day in range(1, days + 1): + + print(f"Día {day}: {temperature} grados y {rain}% de probabilidad de lluvia") + + if rain == 100: + rainy_days += 1 + + if temperature < min_temp: + min_temp = temperature + + if temperature > max_temp: + max_temp = temperature + + if random.randint(1, 10) == 1: + temperature += 2 if random.randint(1, 2) == 1 else -2 + + if temperature > 25: + rain += 20 + if rain > 100: + rain = 100 + + elif temperature < 5: + rain -= 20 + if rain < 0: + rain = 0 + + if rain == 100: + temperature -= 1 + + print(f"Días lluviosos: {rainy_days}") + print(f"Temperatura mínima: {min_temp}") + print(f"Temperatura máxima: {max_temp}") + + +weather_simulator(24, 100, 365) \ No newline at end of file From 6c2586f8c93339d33cecdc5a516e2af21b2be26c Mon Sep 17 00:00:00 2001 From: Miguel Jimenez Lopez Date: Mon, 27 Nov 2023 23:40:51 +0100 Subject: [PATCH 0908/2103] Reto 46: Javascript. --- .../javascript/klyone.js | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/klyone.js diff --git a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/klyone.js b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/klyone.js new file mode 100644 index 0000000000..76659a43b4 --- /dev/null +++ b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/klyone.js @@ -0,0 +1,109 @@ +const MAX_TREES = 3; +const TREE_LIKEHOOD = 0.3; +const MAX_MOVE = 3; +const SIMULATION_STEP_MS = 1000; +const TARGET = "🏁"; +const CAR1 = "🚙"; +const CAR2 = "🚗"; +const TREE = "🌲"; +const CRASH = "💥"; +const ROAD = "_"; + +function waitNextStep() { + return new Promise(resolve => setTimeout(resolve, + SIMULATION_STEP_MS)); +} + +function showRaceStatus(header, road1, road2) { + console.log(header); + console.log(road1.join("")); + console.log(road2.join("")); +} + +function generateRoad(car, roadSize) { + let road = []; + let numTrees = 0; + + road.push(TARGET); + + for(let i = 0 ; i < roadSize ; i++) { + if (numTrees < MAX_TREES) { + let p = Math.random(); + if (p < TREE_LIKEHOOD) { + road.push(TREE); + numTrees++; + } + else { + road.push(ROAD); + } + continue; + } + + road.push(ROAD); + } + + road.push(car); + + return road; +} + +async function runSimulation(road1, road2) { + let raceFinish = false; + let car1Crash = false; + let car2Crash = false; + + while (!raceFinish) { + await waitNextStep(); + + let car1Move = Math.floor(1 + Math.random() * (MAX_MOVE - 1)); + let car2Move = Math.floor(1 + Math.random() * (MAX_MOVE - 1)); + let car1Index = road1.indexOf(CAR1); + if (car1Index == -1) + car1Index = road1.indexOf(CRASH); + let car2Index = road2.indexOf(CAR2); + if (car2Index == -1) + car2Index = road2.indexOf(CRASH); + let newCar1Index = ((car1Index - car1Move) < 0) ? 0 : (car1Index - car1Move); + let newCar2Index = ((car2Index - car2Move) < 0) ? 0 : (car2Index - car2Move); + + if (!car1Crash) { + car1Crash = (road1[newCar1Index] == TREE); + road1[car1Index] = ROAD; + road1[newCar1Index] = (car1Crash ? CRASH : CAR1); + } else { + car1Crash = false; + } + + if (!car2Crash) { + car2Crash = (road2[newCar2Index] == TREE); + road2[car2Index] = ROAD; + road2[newCar2Index] = (car2Crash ? CRASH : CAR2); + } else { + car2Crash = false; + } + + showRaceStatus("Current", road1, road2); + + if ((!car1Crash && newCar1Index == 0) || (!car2Crash && newCar2Index == 0)) + raceFinish = true; + } + + showRaceStatus("Final", road1, road2); + + if (road1[0] == CAR1 && road2[0] == CAR2) { + console.log("Race: Draw"); + } else { + if (road1[0] == CAR1) { + console.log("Race: Car1 wins"); + } else { + console.log("Race: Car2 wins"); + } + } +} + +const roadSize = 10; +let road1 = generateRoad(CAR1, roadSize); +let road2 = generateRoad(CAR2, roadSize); + +showRaceStatus("Initial state", road1, road2); +runSimulation(road1, road2); From 56c74f1d3a96964dc399361280de8bf7b31aba4d Mon Sep 17 00:00:00 2001 From: Miguel Jimenez Lopez Date: Tue, 28 Nov 2023 00:28:38 +0100 Subject: [PATCH 0909/2103] Reto 46: Arregla condicion extrema. --- .../javascript/klyone.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/klyone.js b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/klyone.js index 76659a43b4..5f71db696c 100644 --- a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/klyone.js +++ b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/klyone.js @@ -72,6 +72,7 @@ async function runSimulation(road1, road2) { road1[newCar1Index] = (car1Crash ? CRASH : CAR1); } else { car1Crash = false; + newCar1Index = car1Index; } if (!car2Crash) { @@ -80,6 +81,7 @@ async function runSimulation(road1, road2) { road2[newCar2Index] = (car2Crash ? CRASH : CAR2); } else { car2Crash = false; + newCar2Index = car2Index; } showRaceStatus("Current", road1, road2); From 45f54d49182ddf64c580d50dbea9103d079a6c92 Mon Sep 17 00:00:00 2001 From: Claudio Rodriguez Herrera Date: Tue, 28 Nov 2023 00:35:09 -0300 Subject: [PATCH 0910/2103] Reto #46 - Python --- .../python/inkhemi.py | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 Retos/Reto #46 - LA CARRERA DE COCHES [Media]/python/inkhemi.py diff --git a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/python/inkhemi.py b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/python/inkhemi.py new file mode 100644 index 0000000000..f3c1981df9 --- /dev/null +++ b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/python/inkhemi.py @@ -0,0 +1,132 @@ +import random + +floor = ["_", "🌲", "🏁", "💥"] +cars = ["🚗", "🚙"] + + +def race(large: int): + + # Se crea una pista aleatoria para cada auto + def create_path(large: int, player: int) -> list: + + # Se le añade la meta como primer elemento + path = [floor[2]] + trees = 0 + + for i in range(1, large-1): + if trees < 3: + if random.randint(1, 8) == 2: + path.append(floor[1]) + trees += 1 + continue + path.append(floor[0]) + + if trees == 0: + path[random.randint(1, large-1)] = floor[1] + + # Agregar un auto (player 0: auto rojo, player 1: auto verde) + path.append(cars[player]) + + return path + + # Obtener una lista de la carrera + path1 = create_path(large, 0) + path2 = create_path(large, 1) + + # Variables útiles + position1 = large - 1 + position2 = large - 1 + last_piece1 = floor[0] + last_piece2 = floor[0] + count1 = 0 + count2 = 0 + turn1 = True + turn2 = True + + # Convertir la lista en un string para mostrar en pantalla + show_path1 = "".join(x for x in path1) + show_path2 = "".join(x for x in path2) + + # Mostrar el inicio de la carrera + print(show_path1) + print(show_path2) + + # Iniciar la carrera + while path1[0] != cars[0] and path2[0] != cars[1]: + # Si ningún auto esta en la meta se mantiene el ciclo + + # Movimiento + if count1 != 0: + count1 -= 1 + move1 = 0 + path1[position1] = floor[1] + turn1 = False + else: + move1 = random.randint(1, 3) + + if count2 != 0: + count2 -= 1 + move2 = 0 + path2[position2] = floor[1] + turn2 = False + else: + move2 = random.randint(1, 3) + + # Reemplazar la pieza anterior + path1[position1] = last_piece1 + path2[position2] = last_piece2 + + # Reemplazar la pieza actual + position1 -= move1 + position2 -= move2 + if position1 < 0: + position1 = 0 + if position2 < 0: + position2 = 0 + + last_piece1 = path1[position1] + last_piece2 = path2[position2] + + # Revisar si ocurrió algún choque + if last_piece1 == floor[1] and last_piece2 == floor[1] and turn1 == True and turn2 == True: + path1[position1] = floor[3] + path2[position2] = floor[3] + count1 = 1 + count2 = 1 + turn1 = True + turn2 = True + + elif last_piece1 == floor[1] and turn1 == True: + path1[position1] = floor[3] + path2[position2] = cars[1] + count1 = 1 + turn1 = True + + elif last_piece2 == floor[1] and turn2 == True: + path1[position1] = cars[0] + path2[position2] = floor[3] + count2 = 1 + turn2 = True + + else: + path1[position1] = cars[0] + path2[position2] = cars[1] + turn1 = True + turn2 = True + + # Actualizar la carrera + show_path1 = "".join(x for x in path1) + show_path2 = "".join(x for x in path2) + + print(show_path1) + print(show_path2) + + if path1[0] == cars[0] and path2[0] == cars[1]: + print("Empate") + elif path1[0] == cars[0]: + print("Gana el auto 1") + else: + print("Gana el auto 2") + + +race(30) From 50e32db22788deb53a1c6040ee73f1218dd59bad Mon Sep 17 00:00:00 2001 From: LCozatl Date: Mon, 27 Nov 2023 19:06:23 -0600 Subject: [PATCH 0911/2103] Reto #46 - java --- .../java/lcozatl.java | 158 ++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 Retos/Reto #46 - LA CARRERA DE COCHES [Media]/java/lcozatl.java diff --git a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/java/lcozatl.java b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/java/lcozatl.java new file mode 100644 index 0000000000..aba9dac816 --- /dev/null +++ b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/java/lcozatl.java @@ -0,0 +1,158 @@ +package lcozatl; + +import java.util.HashMap; +import java.util.List; +import java.util.ArrayList; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +public class lcozatl { + + private static final char OBSTACLE_SYMBOL = '|'; + private static final char AUTO_SYMBOL = '<'; + private static final char CRASH_SYMBOL = '*'; + private static final char WIN_SYMBOL = '$'; + + private static final int SHIFT_DELAY_SECONDS = 1; + private static final int MIN_MOVE = 1; + private static final int MAX_MOVE = 3; + private static final int NUMBER_OF_CARS = 2; + private static final int POSITIONS = 10; + private static final int MIN_GAP_BETWEEN_TREES = 3; + + public static void main(String[] args) { + race(); + } + + public static void race(){ + HashMap circuits = new HashMap<>(); + if (NUMBER_OF_CARS <= 0) { + System.out.println("Imposible ejecutar sin autos"); + } + + lcozatl mainClass = new lcozatl(); + + System.out.println("/* /* /* /* Circuito inicial"); + for (int i = 0; i < NUMBER_OF_CARS; i++) { + circuits.put(i, mainClass.new Track()); + System.out.println(circuits.get(i).getTrack() + " - > Auto " + (i+1)); + } + + boolean noCarWon = true; + int shift = 0; + List winners = new ArrayList(); + while(noCarWon){ + try { + TimeUnit.SECONDS.sleep(SHIFT_DELAY_SECONDS); + } catch (InterruptedException e) { + } + shift++; + System.out.println("/* /* /* /* Turno: " + shift); + for (int car : circuits.keySet()) { + Track currentTrack = circuits.get(car); + int positions = howManyAdvance(); + String advance = ""; + if (!currentTrack.moveCar(positions)) { + advance = " No avanzó debido al choque con un obstaculo"; + }else{ + advance = " avanzo: " + positions + " posiciones"; + } + System.out.println(currentTrack.getTrack() + " - > El auto " + (car+1) + advance); + if (currentTrack.carWon) { + winners.add(car+1); + noCarWon = false; + } + } + } + if (winners.size()>1) { + System.out.println("Carrera terminada, empate de los autos: " + winners.toString()); + }else{ + System.out.println("Carrera terminada, gana el auto: " + winners.get(0)); + } + } + + public static int howManyAdvance() { + Random random = new Random(); + + int randomNumber = random.nextInt(MAX_MOVE) + MIN_MOVE; + + return randomNumber; + } + + public class Track{ + private int positions = POSITIONS; + private int carPosition = POSITIONS + 1; + private boolean carLocked; + private StringBuilder track = new StringBuilder(); + private boolean carWon = false; + + public Track(){ + generateTrack(); + addRandomTrees(); + } + + private void generateTrack(){ + + this.track.append("#"); + for (int i = 0; i <= positions; i++) { + this.track.append("_"); + } + + } + + private void addRandomTrees() { + Random random = new Random(); + + int maxTrees = POSITIONS / 2; + int numbOfTrees = random.nextInt(maxTrees) + 1; + + if (numbOfTrees <= 0) { + return; + } + + int length = this.track.length() -1; + + for (int i = 1; i < POSITIONS && numbOfTrees > 0; i++) { + boolean placeTree = false; + placeTree = (random.nextInt(length)+1) % 2 != 0; + if (placeTree) { + this.track.setCharAt(i, OBSTACLE_SYMBOL); + i += MIN_GAP_BETWEEN_TREES; + } + + } + + } + + public boolean moveCar(int positions){ + if (carLocked) { + return carLocked = false; + } + + this.carPosition = this.carPosition - positions; + + if (carPosition >= 0 && this.track.charAt(carPosition) == OBSTACLE_SYMBOL) { + carLocked = true; + } + + return true; + } + + public String getTrack(){ + StringBuilder tempTrack = new StringBuilder(this.track); + char carSymbol = AUTO_SYMBOL; + if (carLocked) { + carSymbol = CRASH_SYMBOL; + } + if (this.carPosition <= 0) { + carSymbol = WIN_SYMBOL; + carWon = true; + this.carPosition = 0; + } + tempTrack.setCharAt(this.carPosition, carSymbol); + return tempTrack.toString(); + } + + } + +} \ No newline at end of file From 974b7292092e2908826a5076dd8c6a114dda12a7 Mon Sep 17 00:00:00 2001 From: Marvin Ramos Date: Mon, 27 Nov 2023 22:50:38 -0600 Subject: [PATCH 0912/2103] add marvnramos.js --- .../javascript/marvnramos.js" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "Retos/Reto #12 - VIERNES 13 [F\303\241cil]/javascript/marvnramos.js" diff --git "a/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/javascript/marvnramos.js" "b/Retos/Reto #12 - VIERNES 13 [F\303\241cil]/javascript/marvnramos.js" new file mode 100644 index 0000000000..e69de29bb2 From dc135dec593c1ac719338a2bac3c5e9561ca46ff Mon Sep 17 00:00:00 2001 From: Daniel Amaya Date: Mon, 27 Nov 2023 23:16:03 -0600 Subject: [PATCH 0913/2103] Reto #3 - JavaScript --- .../javascript/daldev14.js" | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/daldev14.js" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/daldev14.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/daldev14.js" new file mode 100644 index 0000000000..8c89785183 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/daldev14.js" @@ -0,0 +1,60 @@ +/* + * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + * Podrás configurar generar contraseñas con los siguientes parámetros: + * - Longitud: Entre 8 y 16. + * - Con o sin letras mayúsculas. + * - Con o sin números. + * - Con o sin símbolos. + * (Pudiendo combinar todos estos parámetros entre ellos) + */ + +function generatePassword({ + hasUppercase, + hasNumbers, + hasSymbols, + length = 8, +} = {}) { + // Lowercase letters (a-z) + let characters = Array.from({ length: 26 }, (_, i) => + String.fromCodePoint(97 + i) + ); + + if (hasUppercase) { + // Uppercase letters (A-Z) + const uppercaseLetters = Array.from({ length: 26 }, (_, i) => + String.fromCodePoint(65 + i) + ); + + characters.push(...uppercaseLetters); + } + + if (hasNumbers) { + // Numbers (0-9) + const numbers = Array.from({ length: 10 }, (_, i) => + String.fromCodePoint(48 + i) + ); + + characters.push(...numbers); + } + + if (hasSymbols) { + // Symbols + const symbols = Array.from("!@#$%^&*()-_=+[]{}|;:'\",.<>?/"); + characters.push(...symbols); + } + + let password = ""; + + for (let i = 0; i < length; i++) { + password += characters[Math.floor(Math.random() * characters.length)]; + } + + return password; +} + +generatePassword({ + hasUppercase: true, + hasNumbers: true, + hasSymbols: true, + length: 10, +}); From e392ad40676ba2ad94aa024b0298e2485b4449ee Mon Sep 17 00:00:00 2001 From: Othamae Date: Tue, 28 Nov 2023 11:33:58 +0100 Subject: [PATCH 0914/2103] Reto #46 - javascript --- .../javascript/othamae.js | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/othamae.js diff --git a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/othamae.js b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/othamae.js new file mode 100644 index 0000000000..b8f3f2c90a --- /dev/null +++ b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/othamae.js @@ -0,0 +1,110 @@ +/* + * 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. + * + */ + +const car1 = "🚙" +const car2 = "🚗" +const meta = "🏁" +const tree = "🌲" +const crash = "💥" +function raceCart(trace){ + let [trace1, trace2] =createRacetrace(trace) + console.log(trace1) + console.log(trace2) + let carToMove = car1 + const interval = setInterval(() => { + if (carToMove === car1) { + trace1 = move(trace1, carToMove); + carToMove = car2 + } else { + trace2= move(trace2, carToMove); + carToMove = car1 + } + console.log('##################') + console.log(trace1) + console.log(trace2) + anyWinner(trace1, trace2) && clearInterval(interval) + + }, 1000); +} + + +// Helper functions + +function createRacetrace(trace){ + let trace1 = meta+ "_".repeat(trace)+ car1 + let trace2 = meta+"_".repeat(trace)+ car2 + trace1 = addTrees(trace1) + trace2 = addTrees(trace2) + return [trace1, trace2] +} + +function addTrees(trace){ + const traceArray = [...trace] + const trees = Math.floor(Math.random()*3) +1 + for (let i=1; i<=trees; i++){ + let treePosition + do { + treePosition = Math.floor(Math.random()*(traceArray.length -4))+2 + + } while (traceArray[treePosition] === tree) + traceArray[treePosition] = tree + } + return traceArray.join("") +} + +function move(trace, car){ + const steps= Math.floor(Math.random()*3) +1 + const traceArray = [...trace] + const crashPosition = traceArray.indexOf(crash) + if (crashPosition !== -1) { + traceArray[crashPosition] = car + return traceArray.join("") + } + const carPosition = traceArray.indexOf(car) + const newCarPosition = carPosition - steps + if (newCarPosition < 0){ + traceArray[0] = car + } else if (traceArray[newCarPosition] === tree){ + traceArray[newCarPosition] = crash + } else { + traceArray[newCarPosition] = car + } + traceArray[carPosition] = '_' + return traceArray.join("") +} + +function hasWin(currentTrace){ + return (!currentTrace.includes(meta) && !currentTrace.includes(crash)) +} + +function anyWinner(trace1, trace2){ + if (hasWin(trace1)){ + console.log(`🎉 Winner: Car ${car1} 🎉`) + return true + } + if (hasWin(trace2)){ + console.log(`🎉 Winner: Car ${car2} 🎉`) + return true + } + return false +} + +raceCart(12) \ No newline at end of file From a0e0d925337ca0ed48de363f120ea5754e0e9821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Velasco=20Ca=C3=B1adas?= Date: Tue, 28 Nov 2023 12:40:20 +0100 Subject: [PATCH 0915/2103] =?UTF-8?q?Soluci=C3=B3n=20Reto=20#2=20-=20Pytho?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/mariovelascodev.py | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/mariovelascodev.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/mariovelascodev.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/mariovelascodev.py new file mode 100644 index 0000000000..731a399d5a --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/mariovelascodev.py @@ -0,0 +1,47 @@ +def match_tennis(points: list): + #Declaración de variables + result = "" + player1 = 0 + player2 = 0 + game_sequence = {0:"Love", 1:"15", 2:"30", 3:"40", 4:"Ventaja", 5:"Ganador"} + + + #Controlamos que se introduce un valor iterable + try: + #Recorremos la lista introducida por parámetros y convertimos los valores en mayúsculas + for game in points: + if game.upper() == "P1": + player1 += 1 + elif game.upper() == "P2": + player2 += 1 + else: + print("La lista solo puede contener valores P1 y P2") + break + + #Si ambos jugadores empatan a 40 se muestra Deuce + if game_sequence[player1] == "40" and game_sequence[player2] == "40": + result += "Deuce\n" + #Si ambos jugadores llegan a Ventaja se muestra Deuce y + #se les reduce un punto a cada jugador + elif game_sequence[player1] == "Ventaja" and game_sequence[player2] == "Ventaja": + result += "Deuce\n" + player1 -= 1 + player2 -= 1 + #Si un jugador tiene ventaja se muestra el jugador que tiene ventaja + elif game_sequence[player1] == "Ventaja" or game_sequence[player2] == "Ventaja": + result += "Ventaja {player}\n".format(player = game) + #Se muestra el jugador que ha ganado el partido + elif game_sequence[player1] == "Ganador" or game_sequence[player2] == "Ganador": + result += "Ha ganador el {player}\n".format(player = game) + break + #Muestra el resto del marcador del partido + else: + result += game_sequence[player1] +" - "+ game_sequence[player2] +"\n" + + return result + except TypeError: + print("Introduce una lista") + + +print(match_tennis(["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"])) +print(match_tennis(["p1", "p1", "p2", "p2", "p1", "p2", "p2", "p1","p2","p2"])) \ No newline at end of file From 1a3c035635d629a822158b66be88368c94032d3c Mon Sep 17 00:00:00 2001 From: Ramon Estol <131182895+REstolSurf@users.noreply.github.com> Date: Tue, 28 Nov 2023 12:28:30 +0000 Subject: [PATCH 0916/2103] Reto #46 - javascript --- .../javascript/REstolSurf.js | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/REstolSurf.js diff --git a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/REstolSurf.js b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/REstolSurf.js new file mode 100644 index 0000000000..ee70a3d318 --- /dev/null +++ b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/javascript/REstolSurf.js @@ -0,0 +1,132 @@ + +const prompt = require("prompt-sync")(); + +const emojis = { car1: "🚙", car2: "🚗", tree: "🌲", end: "🏁", crash: "💥" }; +let raceDistance = 5; +let userBet = "azul"; +let track1 = [emojis.end], + track2 = [emojis.end]; + +//preguntar la distancia de la carrera +function userSelection() { + raceDistance = prompt( + "Que distancia quieres que tenga la pista (min.5 - max.30)? : " + ); + + while (raceDistance > 30 || raceDistance < 5 || isNaN(raceDistance)) { + raceDistance = prompt( + "La distancia tiene que ser entre min. 5 - max.30)? : " + ); + } + + //preguntar por que coche quiere apostar + userBet = prompt("A que coche quieres apostar el 'azul' o el 'rojo'? : "); + userBet = userBet.toLowerCase(); + + while (userBet !== "azul" && userBet !== "rojo") { + userBet = prompt("Sólo puedes seleccionar coche 'azul' o coche 'rojo'? : "); + userBet = userBet.toLowerCase(); + } + generateTrack(); +} +//generar pistas con de 1 a 3 arboles aleatorios +function generateTrack() { + const numberOfTrees = getRandomInt(4, 1); + + for (let i = 0; i < raceDistance; i++) { + track1.push("_"); + track2.push("_"); + } + + for (i = 0; i < numberOfTrees; i++) { + let randomPos1 = getRandomInt(raceDistance, 1); + let randomPos2 = getRandomInt(raceDistance, 1); + + while (track1[randomPos1] === emojis.tree) + randomPos1 = getRandomInt(raceDistance, 1); + while (track2[randomPos2] === emojis.tree) + randomPos2 = getRandomInt(raceDistance, 1); + + track1[randomPos1] = emojis.tree; + track2[randomPos2] = emojis.tree; + } + + track1.push(emojis.car1); + track2.push(emojis.car2); + showRace(); + countdown(); +} +//mostrar arranque de la carrera +function countdown() { + let c = 3; + let countdownIdInterval = setInterval(() => { + if (c == 0) { + console.log("START"); + clearInterval(countdownIdInterval); + raceStart(); + } else console.log(c); + c--; + }, 1000); +} + +//generar turnos y movimientos aleatorio +function raceStart() { + let randomMov1 = 1; + let randomMov2 = 1; + let ind1 = 0; + let ind2 = 0; + showRace(); + raceIdInt = setInterval(() => { + randomMov1 = getRandomInt(4, 1); + randomMov2 = getRandomInt(4, 1); + + if (randomMov1 > track1.length) randomMov1 = track1.length; + + ind1 = track1.length - (randomMov1 + 1); + + if ( randomMov2 > track2.length) randomMov2 = track2.length; + + ind2 = track2.length - (randomMov2 + 1); + + + (track1[ind1] === emojis.tree) + ? track1.splice(ind1, randomMov1, emojis.crash) + : track1.splice(ind1, randomMov1); + + + (track2[ind2] === emojis.tree) + ? track2.splice(ind2, randomMov2, emojis.crash) + : track2.splice(ind2, randomMov2); + + showRace(); + + if (track1.length <= 1 || track2.length <= 1) { + showResult(); + clearInterval(raceIdInt); + } + }, 1000); +} + +//gestionar choque + +//mostrar ganador y resultado de la apuesta +function showResult() { + //gestionar empate + const winner = + track1.length === 1 ? (track2.length === 1 ? "both" : "azul") : "rojo"; + const betResult = winner === userBet || winner === "both" ? "win" : "lost"; + console.log(`FINISH! ${winner.toUpperCase()} WINS!! `); + console.log(`You ${betResult} your bet`); +} + +function showRace() { + console.clear(); + console.log(track1.join("")); + console.log(track2.join("")); +} + +function getRandomInt(max, min) { + return Math.floor(Math.random() * (max - min) + min); // The maximum is exclusive and the minimum is inclusive +} + +userSelection(); From b41609ad79661b3e0e410a0f38e65c0f6de5ac3a Mon Sep 17 00:00:00 2001 From: DHiebl <108873454+sirnas1983@users.noreply.github.com> Date: Tue, 28 Nov 2023 10:52:00 -0300 Subject: [PATCH 0917/2103] Reto #46 - python --- .../python/sirnas1983.py | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Retos/Reto #46 - LA CARRERA DE COCHES [Media]/python/sirnas1983.py diff --git a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/python/sirnas1983.py b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/python/sirnas1983.py new file mode 100644 index 0000000000..cb01839ac4 --- /dev/null +++ b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/python/sirnas1983.py @@ -0,0 +1,100 @@ +# 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. + + +import random +import time + + +def pista_base(long): + pista = ["_" for i in range(0,long)] + return pista + +def pista_con_arbol_aleatorio(pista): + cantidad = random.randint(1,3) + for i in range(1, cantidad + 1): + pos = random.randint(0, len(pista)-1) + pista[pos] = "🌲" + return pista + +class auto: + + def __init__(self, icono, pista : list): + self.icono = icono + self.puede_mover = True + self.ganador = False + self.pista = pista + self.pista.insert(0,'🏁') + self.pista.append(icono) + self.mostrar_pista() + + def mostrar_pista(self): + print(''.join(self.pista)) + + def mover(self): + cas = random.randint(2,4) + indice = - cas + try: + if self.puede_mover and self.pista[indice] == "🌲": + self.puede_mover = False + self.pista[indice] = '💥' + self.pista = self.pista[:indice + 1] + elif self.puede_mover: + if self.pista[indice] == '🏁': + self.pista[indice] = self.icono + self.pista = self.pista[:indice + 1] + self.ganador = True + else: + self.pista[indice] = self.icono + self.pista = self.pista[:indice + 1] + else: + self.puede_mover = True + self.mostrar_pista() + except: + self.ganador = True + self.pista = [self.icono] + self.mostrar_pista() + + + + +def jugar(): + try: + longitud_pista = int(input("Ingrese la longitud de pista deseada: ")) + print("¡En sus marcas!") + time.sleep(1) + print("¿¿¿¡Listos!???") + auto1 = auto('🚙',pista_con_arbol_aleatorio(pista_base(longitud_pista))) + auto2 = auto('🚗',pista_con_arbol_aleatorio(pista_base(longitud_pista))) + time.sleep(1) + print("¡¡¡YAAAAAAA!!!") + while not auto1.ganador and not auto2.ganador: + auto1.mover() + auto2.mover() + time.sleep(1) + + if auto1.ganador == auto2.ganador: + print("Empate") + elif auto1.ganador: + print("¡¡VERDE GANADOR!!") + else: + print("¡¡ROJO GANADOR!!") + except: + print("Debe ingresar un entero") +jugar() + From fac356561522f27a0b26740c8f8741f85963cf7d Mon Sep 17 00:00:00 2001 From: jcdm60 Date: Tue, 28 Nov 2023 10:08:55 -0400 Subject: [PATCH 0918/2103] Reto #46 - Python --- .../python/jcdm60.py | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 Retos/Reto #46 - LA CARRERA DE COCHES [Media]/python/jcdm60.py diff --git a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/python/jcdm60.py b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/python/jcdm60.py new file mode 100644 index 0000000000..fd1ae14dd6 --- /dev/null +++ b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/python/jcdm60.py @@ -0,0 +1,123 @@ +# Reto #46: La carrera de coches +#### Dificultad: Media | Publicación: 27/11/23 | Corrección: 04/12/23 + +## Enunciado + +# +# 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. +# + +import random +import time + +class CarRace: + EMOJI_TREE = '🌲' + EMOJI_EXPLOSION = '💥' + EMOJI_CAR1 = '🚙' + EMOJI_CAR2 = '🚗' + EMOJI_FINISH = '🏁' + MAX_ADVANCEMENT = 3 + + def __init__(self, track_length=20): + self.track_length = track_length + self.finish_line = 0 + self.track_trees1 = self.generate_trees() + self.track_trees2 = self.generate_trees() + self.car1_position = self.track_length - 1 + self.car2_position = self.track_length - 1 + self.race_finished = False + + def generate_trees(self): + return random.sample(range(1, self.track_length - 1), random.randint(1, min(3, self.track_length - 2))) + + def display_track(self): + track1 = [self.EMOJI_TREE if i in self.track_trees1 else '_' for i in range(self.track_length)] + track2 = [self.EMOJI_TREE if i in self.track_trees2 else '_' for i in range(self.track_length)] + + # Modificar el icono en la posición de la meta según el coche que llegue primero + if self.finish_line == self.car1_position: + track1[self.finish_line] = self.EMOJI_CAR1 + track2[self.finish_line] = self.EMOJI_FINISH + elif self.finish_line == self.car2_position: + track2[self.finish_line] = self.EMOJI_CAR2 + track1[self.finish_line] = self.EMOJI_FINISH + else: + track1[self.finish_line] = self.EMOJI_FINISH + track2[self.finish_line] = self.EMOJI_FINISH + + # Mostrar los árboles y las posiciones de los coches + track1[self.car1_position] = self.EMOJI_EXPLOSION if self.car1_position in self.track_trees1 else self.EMOJI_CAR1 + track2[self.car2_position] = self.EMOJI_EXPLOSION if self.car2_position in self.track_trees2 else self.EMOJI_CAR2 + + print(''.join(track1)) + print(''.join(track2)) + print() + + + def cars_turn(self): + car1_advance = random.randint(1, self.MAX_ADVANCEMENT) + car2_advance = random.randint(1, self.MAX_ADVANCEMENT) + + new_car1_position = max(self.car1_position - car1_advance, 0) + if new_car1_position in self.track_trees1: + car1_advance = 0 + + new_car2_position = max(self.car2_position - car2_advance, 0) + if new_car2_position in self.track_trees2: + car2_advance = 0 + + self.car1_position = new_car1_position + self.car2_position = new_car2_position + + self.display_track() + time.sleep(1) + + if self.car1_position <= self.finish_line or self.car2_position <= self.finish_line: + self.race_finished = True + + return self.race_finished + + def start_race(self): + print(f"Posición inicial de los coches (Longitud de la Pista: {self.track_length}):") + self.display_track() + + while not self.race_finished: + self.race_finished = self.cars_turn() + + if self.car1_position <= self.finish_line and self.car2_position <= self.finish_line: + print("Es un empate!") + self.finish_line = min(self.car1_position, self.car2_position) + elif self.car1_position <= self.finish_line: + self.finish_line = self.car1_position + else: + self.finish_line = self.car2_position + + self.display_track() + if self.finish_line == self.car1_position and self.finish_line == self.car2_position: + print("Es un empate!") + elif self.finish_line == self.car1_position: + print("El Coche 🚙 ha ganado la carrera!") + else: + print("El Coche 🚗 ha ganado la carrera!") + +if __name__ == "__main__": + track_length = int(input("Ingrese la longitud de la pista: ")) + + race = CarRace(track_length) + race.start_race() From 92dfcce13f2f7e0baa6e74ab0bd0551ee23365c0 Mon Sep 17 00:00:00 2001 From: Jordi Ayala Date: Tue, 28 Nov 2023 09:30:59 -0600 Subject: [PATCH 0919/2103] Reto #45 - Java --- .../java/asjordi.java" | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 "Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/java/asjordi.java" diff --git "a/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/java/asjordi.java" "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/java/asjordi.java" new file mode 100644 index 0000000000..754b207d00 --- /dev/null +++ "b/Retos/Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [F\303\241cil]/java/asjordi.java" @@ -0,0 +1,113 @@ +import net.datafaker.Faker; +import java.util.*; + +public class AdevientoCalendar { + + public static void main(String[] args) { + AdevientoCalendar dev = new AdevientoCalendar(); + dev.play(); + } + + private List users; + private final Random r; + private Scanner sc; + public AdevientoCalendar() { + this.users = new LinkedList<>(); + this.r = new Random(); + this.sc = new Scanner(System.in); + loadRandomUsers(10); + } + + public void addUser(String user){ + if (this.users.contains(user)) System.out.println("User already exists"); + else this.users.add(user); + } + + public void showUsers(){ + for (String user : this.users) System.out.println(user); + } + + public void deleteUser(String user){ + if (this.users.contains(user)) { + this.users.remove(user); + System.out.println("User deleted"); + } else { + System.out.println("User doesn't exist"); + } + } + + public void play(){ + displayMenu(); + processUserInput(); + } + + private void startGiveaway(){ + if (this.users.isEmpty()) { + System.out.println("No users!"); + return; + } + + int index = this.r.nextInt(this.users.size()); + String winner = this.users.get(index); + System.out.println("The winner is " + winner + " Congratulations!"); + deleteUser(winner); + } + + public void exit(){ + System.out.println("Exit..."); + System.exit(0); + } + + private void displayMenu(){ + System.out.println("aDEViento Calendar"); + System.out.println("Options:\n1- Add user\n2- Delete user\n3- Show users\n4- Start giveaway\n5- Get number of users\n6- Exit"); + System.out.println("Please select one by entering the number"); + } + + private void processUserInput(){ + String input = ""; + + while (!input.equals("6")) { + input = sc.nextLine(); + switch (input) { + case "1": { + System.out.println("Enter the user: "); + String user = sc.nextLine(); + addUser(user); + break; + } + case "2": { + System.out.println("Enter the user to delete: "); + String user = sc.nextLine(); + deleteUser(user); + break; + } + case "3": { + showUsers(); + break; + } + case "4": { + startGiveaway(); + break; + } + case "5": { + getNumberOfUsers(); + break; + } + case "6": { + exit(); + } + default: System.out.println("Invalid input. Please enter a valid number."); + } + } + } + + public void getNumberOfUsers(){ + System.out.println("Number of users: " + this.users.size()); + } + + private void loadRandomUsers(int n){ + Faker faker = new Faker(); + for (int i = 0; i < n; i++) addUser(faker.name().firstName()); + } +} From 291729df031886959ba23ea628c9dd866d4e18f7 Mon Sep 17 00:00:00 2001 From: Giovany Osorio <30839218+giovanyosorio@users.noreply.github.com> Date: Tue, 28 Nov 2023 16:39:14 +0000 Subject: [PATCH 0920/2103] reto #20 Javascript --- .../javascript/giovanyosorio.js | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Retos/Reto #20 - LA TRIFUERZA [Media]/javascript/giovanyosorio.js diff --git a/Retos/Reto #20 - LA TRIFUERZA [Media]/javascript/giovanyosorio.js b/Retos/Reto #20 - LA TRIFUERZA [Media]/javascript/giovanyosorio.js new file mode 100644 index 0000000000..0ff564b4ab --- /dev/null +++ b/Retos/Reto #20 - LA TRIFUERZA [Media]/javascript/giovanyosorio.js @@ -0,0 +1,37 @@ + +/* + * ¡El nuevo "The Legend of Zelda: Tears of the Kingdom" ya está disponible! + * + * Crea un programa que dibuje una Trifuerza de "Zelda" + * formada por asteriscos. + * - Debes indicarle el número de filas de los triángulos con un entero positivo (n). + * - Cada triángulo calculará su fila mayor utilizando la fórmula 2n-1. + * + * Ejemplo: Trifuerza 2 + * + * * + * *** + * * * + * *** *** + * + */ + + function dibujarTrifuerza(n){ + let base =2*n-1 + + for(let i=1;i<=n;i++){ + let espacios=' '.repeat(n-i) + let asteriscos="*".repeat(2*i-1) + console.log(espacios+asteriscos) + + } + for(let i=1;i<=n;i++){ + let espacios=' '.repeat(n-i) + let asteriscos="*".repeat(2*i-1) + let espaciomedio=" ".repeat(2*(n-i)) + console.log(espacios+asteriscos+espaciomedio+asteriscos) + + } +} + +dibujarTrifuerza(3) \ No newline at end of file From 97a6e17f5b18b661f688f46288861b0cf52f3aaf Mon Sep 17 00:00:00 2001 From: ANTONIOJLO Date: Tue, 28 Nov 2023 20:52:04 +0100 Subject: [PATCH 0921/2103] Add reto 3 passwords generator --- .../python/ajlinformatico.py" | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/ajlinformatico.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/ajlinformatico.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/ajlinformatico.py" new file mode 100644 index 0000000000..6ae08895b3 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/ajlinformatico.py" @@ -0,0 +1,148 @@ + +from os import system +from random import choices +from string import digits, ascii_lowercase, ascii_uppercase + +""" + * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + * Podrás configurar generar contraseñas con los siguientes parámetros: + * - Longitud: Entre 8 y 16. + * - Con o sin letras mayúsculas. + * - Con o sin números. + * - Con o sin símbolos. + * (Pudiendo combinar todos estos parámetros entre ellos) + */ +""" + +SPECIAL_CHARACTERS = "SPECIAL_CHARACTERS" +NUMBERS = "NUMBERS" +UPPER_CASSES = "UPPER_CASSES" +APP_NAME = """ +####################################### + PASSWORD-GENERATOR + + by infolojo + https:://infolojo.es + Antonio José Lojo Ojeda +####################################### +""" + + +class ErrorMessages: + def __init__(self): + self.password_length = "Error: Password length must be in a range between 8 and 16" + self.number_expected = "Error: Its not a number" + self.true_or_false_expected = "Error: We need y (yes) or n (not) as argument" + + def throw_password_length_error(self): + print(self.password_length) + + def throw_number_expected_error(self): + print(self.number_expected) + + def throw_true_or_false_expected_error(self): + print(self.true_or_false_expected) + + +class PasswordGenerator: + def __init__(self): + # TODO update name to password_length + self.leng: int + self.special_symbols: bool + self.numbers: bool + self.upper_casses: bool + self.errors = ErrorMessages() + self.punctuation = "!#$%&()*+-/<=>?@[\]{|}" + + def create_password(self): + # get + password_content = ascii_lowercase + + # Add user suggests + if self.special_symbols: + password_content += self.punctuation + + if self.numbers: + password_content += digits + + if self.upper_casses: + password_content += ascii_uppercase + + # get random element for list and return a new list with k leng to convert into string with "".join + print("\n" + "".join(choices(list(password_content), k=self.leng))) + + def clear(self): + # uncomment by checking your or + # clear windows screen + # system('CLS') + # clear linux screen + system('clear') + + def run(self): + self.clear() + print(APP_NAME) + self.get_parameters() + self.create_password() + + def update_bool_value(self, type: str, value: bool): + if type == SPECIAL_CHARACTERS: + self.special_symbols = value + elif type == NUMBERS: + self.numbers = value + elif type == UPPER_CASSES: + self.upper_casses = value + + def check_bool_input(self, type: str, inputText: str): + """Check an user bool input + + Keyword arguments: + argument -- description + Return: return_description + """ + bool_input_ready: bool = False + while (bool_input_ready != True): + bool_input = input(f"\n{inputText}? [y/n]\n>> ").lower() + if bool_input == "y" or bool_input == "n": + self.update_bool_value(type = type, value = bool_input == "y") + bool_input_ready = True + else: + self.errors.throw_true_or_false_expected_error() + + + def check_len_input(self): + """Check password legnth input + + Keyword arguments: + argument -- description + Return: return_description + """ + + len_ready: bool = False + while(len_ready == False): + try: + len_input: int = int(input("\nWhat length of password do you want (It must be in a range from 8 to 16)\n>> ")) + if len_input < 8 or len_input > 16: + self.errors.throw_password_length_error() + else: + self.leng = len_input + len_ready = True + except: + self.errors.throw_number_expected_error() + + + def get_parameters(self): + # check length # TODO CHECK DEFAULT ON CLASS INIT + self.check_len_input() + + # check upper case + self.check_bool_input(type=UPPER_CASSES, inputText="Do you want to use upper casses") + + # check numbers + self.check_bool_input(type=NUMBERS, inputText="Do you want to use numbers") + + # check special characters + self.check_bool_input(type=SPECIAL_CHARACTERS, inputText="Do you want to use special characters") + + +if __name__ == "__main__": + PasswordGenerator().run() From d0f8f1401d98dfc87743dc71136e9472947e3a5e Mon Sep 17 00:00:00 2001 From: Edwin Date: Tue, 28 Nov 2023 15:53:14 -0400 Subject: [PATCH 0922/2103] Reto #6 - JavaScript --- .../javascript/EdGonzz.js | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/EdGonzz.js diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/EdGonzz.js b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/EdGonzz.js new file mode 100644 index 0000000000..f7f5cfa88e --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/EdGonzz.js @@ -0,0 +1,41 @@ +// * Crea un programa que calcule quien gana más partidas al piedra, +// * papel, tijera, lagarto, spock. +// * - El resultado puede ser: "Player 1", "Player 2", "Tie" (empate) +// * - La función recibe un listado que contiene pares, representando cada jugada. +// * - El par puede contener combinaciones de "🗿" (piedra), "📄" (papel), +// * "✂️" (tijera), "🦎" (lagarto) o "🖖" (spock). +// * - Ejemplo. Entrada: [("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")]. Resultado: "Player 2". +// * - Debes buscar información sobre cómo se juega con estas 5 posibilidades. + +const rules = { + "🦎": ["🖖", "📄"], + "🗿": ["🦎", "✂️"], + "✂️": ["📄", "🦎"], + "🖖": ["✂️", "🗿"], + "📄": ["🗿", "🖖"] +} + +const rockPaperScissorsLizardSpock = (games) => { + + let player1 = 0 + let player2 = 0 + + for (const game of games) { + let player1_game = game[0] + let player2_game = game[1] + + if (player1_game !== player2_game) { + if (rules[player1_game].includes(player2_game)) { + player1++ + } else if (rules[player2_game].includes(player1_game)) { + player2++ + } + } + } + return (player1 === player2) ? 'Tie' : (player1 > player2) ? 'Player 1 Win' : 'Player 2 Win' +} + +console.log(rockPaperScissorsLizardSpock([["🦎", "📄"], ["📄", "🖖"], ["📄", "✂️"]])) +console.log(rockPaperScissorsLizardSpock([["✂️", "🖖"], ["🖖", "✂️"], ["✂️", "🦎"]])) +console.log(rockPaperScissorsLizardSpock([["📄", "✂️"], ["📄", "📄"], ["🖖", "✂️"]])) +console.log(rockPaperScissorsLizardSpock([["🖖", "🦎"], ["🗿", "✂️"], ["🦎", "✂️"]])) From dde12e8d88dfdffded799bca49b08f401be44f23 Mon Sep 17 00:00:00 2001 From: blackriper Date: Tue, 28 Nov 2023 17:42:33 -0600 Subject: [PATCH 0923/2103] Reto#46-go --- .../go/blackriper.go | 171 ++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 Retos/Reto #46 - LA CARRERA DE COCHES [Media]/go/blackriper.go diff --git a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/go/blackriper.go b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/go/blackriper.go new file mode 100644 index 0000000000..53e476433c --- /dev/null +++ b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/go/blackriper.go @@ -0,0 +1,171 @@ +package main + +import ( + "fmt" + "math/rand" + "strings" + "time" +) + +// elementos para pintar la pista durante el juego +const ( + GOAL = " 🏁 " + TREE = "🌲" + PLAYER1 = " 🚙 " + PLAYER2 = " 🚗 " + SHOCK = " 💥 " +) + +/*definir metodos para el juego*/ +type CarRace interface { + ConfigParams() + StartRace() bool +} + +type Race struct { + NumTracks int + PosTree1 []int + PosTree2 []int +} + +// configurar el largo de la pista y generar los obstaculos +func (r *Race) ConfigParams() { + fmt.Println("How long should the race track be?") + fmt.Scanf("%d", &r.NumTracks) + r.PosTree1 = FactoryTree(r.NumTracks) + r.PosTree2 = FactoryTree(r.NumTracks) +} + +// empezar la carrera +func (r *Race) StartRace() bool { + var ( + posP1 int = r.NumTracks - 1 + posP2 int = r.NumTracks - 1 + numRace int = 1 + numShock int + endGame bool + ) + + fmt.Println("Inicial Race") + fmt.Println(PaintingCar(r.NumTracks, posP1, PLAYER1, r.PosTree1, false)) + fmt.Println(PaintingCar(r.NumTracks, posP2, PLAYER2, r.PosTree2, false)) + + for { + shock1 := MoveCar(&posP1, &numShock, r.PosTree1) + shock2 := MoveCar(&posP2, &numShock, r.PosTree2) + + time.Sleep(5 * time.Second) + + fmt.Printf("Race number %v \n", numRace) + fmt.Println(PaintingCar(r.NumTracks, posP1, PLAYER1, r.PosTree1, shock1)) + fmt.Println(PaintingCar(r.NumTracks, posP2, PLAYER2, r.PosTree2, shock2)) + numRace++ + + if posP1 == 0 { + fmt.Printf("The winner is %v \n", PLAYER1) + endGame = true + break + } + + if posP2 == 0 { + fmt.Printf("The winner is %v \n", PLAYER2) + endGame = true + break + } + + if posP1 == 0 && posP2 == 0 { + fmt.Println("Not winner race end tie!!") + endGame = true + break + } + + } + return endGame +} + +/* funciones auxilares*/ + +// pintar jugadores en la pista +func PaintingCar(numTracks, positionCar int, emojiCar string, positionTree []int, shock bool) string { + var car string + + for t := 0; t < numTracks; t++ { + + switch { + case t == 0: + car += GOAL + case t == positionCar: + if shock { + car += SHOCK + } else { + car += emojiCar + } + default: + if tree := IsTree(t, positionTree); tree == true { + car += TREE + } else { + car += "_" + } + + } + + } + return car +} + +// saber si hay que pintar un arbol en la posicion actual +func IsTree(numTrack int, positionTree []int) (tree bool) { + for _, pos := range positionTree { + if pos == numTrack { + tree = true + } + } + return tree +} + +// generar el numero de arboles y la posicion del mismo +func FactoryTree(numTracks int) []int { + var posTree []int + numTrees := rand.Intn(4-1) + 1 + max := numTracks - 1 + + for t := 0; t < numTrees; t++ { + posTree = append(posTree, rand.Intn(max-1)+1) + } + return posTree +} + +// mover el auto del jugador y comprobar si ha chocado con algun obstaculo +func MoveCar(positionCar, numShock *int, positionTree []int) (colision bool) { + + if shock := IsTree(*positionCar, positionTree); shock == true && *numShock == 0 { + colision = true + *numShock++ + } else { + if *positionCar < 0 { + *positionCar = 0 + } else { + *positionCar -= rand.Intn(4-1) + 1 + } + } + return colision +} + +// controlar el modo de juego +func RaceGame() { + var option string = "y" + var f1 CarRace = &Race{} + for option != "n" { + f1.ConfigParams() + endGame := f1.StartRace() + if endGame { + fmt.Println("You can play a new race Y/N") + fmt.Scanf("%s", &option) + option = strings.ToLower(option) + } + } +} + +func main() { + RaceGame() +} From 8df487989bd9a9bda32d5dc9a0adb84ef4102ce5 Mon Sep 17 00:00:00 2001 From: Miquel Date: Tue, 28 Nov 2023 23:57:03 +0000 Subject: [PATCH 0924/2103] Reto #46 LA CARRERA DE COCHES c# --- .../c#/miquelcie.cs | 194 ++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 Retos/Reto #46 - LA CARRERA DE COCHES [Media]/c#/miquelcie.cs diff --git a/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/c#/miquelcie.cs b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/c#/miquelcie.cs new file mode 100644 index 0000000000..a341b3245a --- /dev/null +++ b/Retos/Reto #46 - LA CARRERA DE COCHES [Media]/c#/miquelcie.cs @@ -0,0 +1,194 @@ + +/* + * 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. + * + */ + +using System.Timers; +using Timer = System.Timers.Timer; + +public class Program +{ + public static void Main(string[] args) + { + + Carrera carrera = new Carrera(); + + carrera.Initialize(); + } +} +public class Carrera +{ + private List pista1; + private List pista2; + private int carOnePosition; + private int carTwoPosition; + private bool turnoCarOne = true; + private bool turnoCarTwo = true; + + private int positionTreeTemp1; + private int positionTreeTemp2; + + + internal void Initialize() + { + Console.Write("Introduzca longitud de la pista: "); + + string longitud = Console.ReadLine(); + + int lognitudPista = 0; + + if (!int.TryParse(longitud, out lognitudPista) || lognitudPista<10) + { + throw new ArgumentOutOfRangeException("La longitud no es un número mayor de 10"); + } + + Console.Write("Introduzca número de árboles en la pista: "); + + string numTree = Console.ReadLine(); + + int countTrees = 0; + + if (!int.TryParse(numTree, out countTrees) || countTrees < 1) + { + throw new ArgumentOutOfRangeException("El nº máximo de árboles debe se un numero mayor de 1"); + } + + carOnePosition = lognitudPista - 1; + carTwoPosition = lognitudPista - 1; + + pista1 = CreatePistaRamdon(lognitudPista, countTrees); + pista2 = CreatePistaRamdon(lognitudPista, countTrees); + + while (true) + { + DrawRace(); + + if (IsRaceFinish()) { + string ganador = GetWinner(); + Console.WriteLine($"El ganador es: {ganador}"); + break; + } + MoveCarOne(); + MoveCarTwo(); + + Thread.Sleep(1000); + } + Console.Write("Presione enter para salir"); + Console.ReadLine(); + + } + + private void MoveCarOne() + { + if (!turnoCarOne) + { + turnoCarOne=true; + return; + + } + int movesCarOne = new Random().Next(1, 4); + pista1[carOnePosition] = carOnePosition == positionTreeTemp1 ? "T" : "_"; + carOnePosition -= movesCarOne; + carOnePosition = carOnePosition < 0 ? 0 : carOnePosition; + if (pista1[carOnePosition] == "T") + { + positionTreeTemp1 = carOnePosition; + pista1[carOnePosition] = pista1[carOnePosition] == "T"?"X":"C"; + turnoCarOne = false; + } + else + { + pista1[carOnePosition] = "C"; + } + } + private void MoveCarTwo() + { + if (!turnoCarTwo) + { + turnoCarTwo = true; + return; + + } + int movesCarTwo = new Random().Next(1, 4); + pista2[carTwoPosition] = carTwoPosition == positionTreeTemp2? "T" : "_"; + carTwoPosition -= movesCarTwo; + carTwoPosition = carTwoPosition < 0 ? 0 : carTwoPosition; + + if (pista2[carTwoPosition] == "T") + { + positionTreeTemp2 = carTwoPosition; + pista2[carTwoPosition] = pista2[carTwoPosition] == "T" ? "X" : "C"; + turnoCarTwo = false; + } + else + { + pista2[carTwoPosition] = "C"; + } + + } + + private void DrawRace() + { + string pista1String = string.Join("", pista1); + string pista2String = string.Join("", pista2); + Console.WriteLine($"{pista1String}\n{pista2String}"); + } + + private string GetWinner() + { + if (pista1[0] == "C" && pista2[0] == "C") + return "Empate"; + + if (pista1[0] == "C") + return "Coche 1"; + + if (pista2[0] == "C") + return "Coche 2"; + return string.Empty; + } + + private bool IsRaceFinish() + { + return pista1[0]=="C" || pista2[0]=="C"; + } + + private List CreatePistaRamdon(int longotidPista, int maxTrees) { + + List pista = new List() { "M" }; + string[] rango = Enumerable.Repeat("_", longotidPista-2).ToArray(); + + int countTrees = new Random().Next(1, maxTrees+1); + int countCurrentTrees = 0; + while (countCurrentTrees < countTrees) + { + int positionTree = new Random().Next(1, longotidPista - 2); + if (rango[positionTree] != "T") + { + rango[positionTree] = "T"; + countCurrentTrees++; + } + + } + + pista.AddRange(rango); + pista.Add("C"); + return pista; + } +} \ No newline at end of file From d00a8655179c87a16656199a186e590f8869baca Mon Sep 17 00:00:00 2001 From: Miquel Date: Tue, 28 Nov 2023 23:57:26 +0000 Subject: [PATCH 0925/2103] Retor #46 LA CARRERA DE COCHES --- .vs/VSWorkspaceState.json | 9 +++++++++ ...029687a2-39b9-48bf-a70e-00c8c086a0e6.vsidx | Bin 0 -> 2235040 bytes ...4837fa38-497d-4add-adf1-e269f1887611.vsidx | Bin 0 -> 1954379 bytes ...53e43a39-dd9f-46ff-bb78-c7791f6103f8.vsidx | Bin 0 -> 1202450 bytes ...69476c95-e08b-4cb8-87f3-06422adbea99.vsidx | Bin 0 -> 2282259 bytes ...93958ab2-eed3-4901-a8d1-4ac5b7280cfe.vsidx | Bin 0 -> 1161704 bytes .vs/retos-programacion-2023/v17/.wsuo | Bin 0 -> 32256 bytes .../v17/TestStore/0/000.testlog | Bin 0 -> 20 bytes .../v17/TestStore/0/testlog.manifest | Bin 0 -> 24 bytes .../v17/workspaceFileList.bin | Bin 0 -> 1012911 bytes .vs/slnx.sqlite | Bin 0 -> 1019904 bytes 11 files changed, 9 insertions(+) create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/retos-programacion-2023/FileContentIndex/029687a2-39b9-48bf-a70e-00c8c086a0e6.vsidx create mode 100644 .vs/retos-programacion-2023/FileContentIndex/4837fa38-497d-4add-adf1-e269f1887611.vsidx create mode 100644 .vs/retos-programacion-2023/FileContentIndex/53e43a39-dd9f-46ff-bb78-c7791f6103f8.vsidx create mode 100644 .vs/retos-programacion-2023/FileContentIndex/69476c95-e08b-4cb8-87f3-06422adbea99.vsidx create mode 100644 .vs/retos-programacion-2023/FileContentIndex/93958ab2-eed3-4901-a8d1-4ac5b7280cfe.vsidx create mode 100644 .vs/retos-programacion-2023/v17/.wsuo create mode 100644 .vs/retos-programacion-2023/v17/TestStore/0/000.testlog create mode 100644 .vs/retos-programacion-2023/v17/TestStore/0/testlog.manifest create mode 100644 .vs/retos-programacion-2023/v17/workspaceFileList.bin create mode 100644 .vs/slnx.sqlite diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000000..57f0d5af25 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,9 @@ +{ + "ExpandedNodes": [ + "", + "\\Retos", + "\\Retos\\Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [Fácil]", + "\\Retos\\Reto #45 - EL CALENDARIO DE ADEVIENTO 2023 [Fácil]\\c#" + ], + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/retos-programacion-2023/FileContentIndex/029687a2-39b9-48bf-a70e-00c8c086a0e6.vsidx b/.vs/retos-programacion-2023/FileContentIndex/029687a2-39b9-48bf-a70e-00c8c086a0e6.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..40e0da3713d2dd181f66ee482f18431545a9f70b GIT binary patch literal 2235040 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
4@ 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�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 hPDZsC$Y?}kkX0nbeWtc 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 @LD`fQPh&?|zcD6`H5$V1}0IuC@l< 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 z zU*ug84D%a>zLoT!B=}JTCqIrjOe|Qae-V3BLal>92Wgs4)Y9CY|IxWR?(P6F;7Evu zP6bkgb8ofgL{2*lR^8WY*lMtJr{GXJ(Y=S&O-y`}!4BRU+QpVe&NO)HG(uB>Ouk`y zE-}lOna|c5tG&3h7Z3Dgw^w|~vmk5GuGNlYoRhd9d8uFuoj#Q&J>_^1JeqIyPT6Y zILCebJx_y*1CQ|`&S|ewE>PK>R7p2QgO$BO$%E<^EcH`VG)WcARsJ(do^vW1WVdF0 zui`^0I;x6lAia}&&k}o%97F9<2U&Z8+usj#6NDhy0-4=Ien6JXHBvf2%v5*hhG18L z;_h*-lji%xlB)r-o|ZZZE5yk^eZ)AqwD=s%kw&1q@!1Lh>7uIU9{Cr$S9>k zym^3){sI$qaZ@4|SVU4lnUMa5X|dWs)d}@fj5Jyts`DuTvH{z|`5eZ|t^(2}kaWgv zOmvB1ME+u+0w@7|yULlZsFjN&!ybySZ9ylc2dHSULW_69wTjP?{yn7sC63)-j1X&u z`|0FMb?Hqy1ThLB&@%*O8c;QRw+fd+x~c7cpWC|TweWI{tTWVwN3U`4K0AHd_iju| z`jx{@Y8r^+!#*AHgZ3ulIFd7Uti2Rm8hxnf6B2~fT`su@zHYAhJit>bXB-FpT_wl3 z4)8y!oU8D*EBpd9ix~fmSB(P}r|3hn47W3s5^M1u8o_^+%u#QLHjw9mAcHbL!U2Vi z-~@v>Xcz}7K;pltnoaT{Wd|?+AIxQ~bOhVvE-wRT{+p_3vL6reI1?T&Rv>c$E+O;= zkK6)O!g&=JK;xm7&i7p+D3U*WK$hTwkL)h57=H!yPDs7}SeN1lj*}ycJ$$$@BS?bP z{m+iGW-7I=N8fw?tEdSOz!xaMN^j+?aESa$^xP#>xJ@~(Vp+n$GFMy`e8ILt=m5$c zoJ|RL0iTN}#8h=R>I!p0t&;^WXP7hb#rp+G^`AkI-`jM(+B6toQU*D~7x`e}ITYiA z!*WfI_m8$~InM;$Ox(kSMJBqzgtwaTHWQ67;VmY*-PpSg-(%uYCcMwY!%a9kaRQ7r z!8j9+H{nCZPB7s_*TEN0hIreAGfj9G@!5v%qGbH<1lO_zwOCd=&bpYF-oST_Lp-M$!u|eWGMM*#vkU2>ql!5gLn+r5Q=?Mwe z6^$uuLTL@Dswr9P^vQ81*=9u8We~)4Iz_n@p6SG>K|7+(6hsu}QJC)tsj#b4qS^uq zyHf}YVGj!Xk?l`m5rtP$bQuMZ3=N?0TC&9sbqohna2@WhV z8IDYhJ$H~DMd3dQl?UMi0D;{i=``M@1fNS5n$RC3i&N!!DtOhcQRR@*VPyS+qOC3f zAq^_lQ#kI$%b|F|n~BeBF4NN-Amr+Kju)|oQW^{UiyUIFY@$*wRQa)rpuU)@P-IM) z-&U#ePgDiA$nycWN@bB`T`4kDnvNAaUhLDt_*}LL2vgYig1u4%lC+i{#cG*2C-GUQ zZPTbFBtUj;On^c00ux6Dy$|q5NbL}~+@yc(Hcfb}?0B+(`x2wC#pnw*Y75bJNCb(1 z;n$A4SQ2Yz-EybCK&cjrr!h+uPf!9Xd99+)6#=Ek42%I7)9<&6k$bRHqVM$SNk%3a zCsur#ay}!d3Jb2}xQv4tZb?k;C|KTBwt;O4*`;U%sHfcXVxAASNp zP@Hn}D40*Onxc;qzxD<SN>b38fV7C{g zlFg*>YhvN5Iy^9e>ZiiEil+{qCICv^%-SBzYsSvC~BZO#a8tYXE9R#!xtxcpTYsha_Ml2%uUx;*Wm3&&@8Jx}-gpXrt7di&1y7M|lR zJj)x^##`9h3)^}NJ9xd@dA7Y*cCNRuqjzH`mj|`;e3-kvuOqJorlve^VHc0Odari# zHWYe2dwKo4dsBLNLB4lcPcQu$}v&h~=avz2F zQ^pvw576*?DTqmz5Wa(zIAq3A>C>baP@QLJ>SCf7DSipHCiKH+q(7$^hs-w=Zlv^o zQS>b}t)}36D*k~EZz0}Bw8MR2WjnFQ=~zfL5A%6OlJ8Z{52}2#qC+Yj zBP-N^DdML}aeWEWMTJfoSc(wra|Dd1#WvbO=v)aekb=%a=Sji&VzHk_qVwdBE}{$M z{;qO*cloG?e1LVeNOV7kU2|g5a0}@~Y4fo7QzdPRJTP5&ft(64;R`~mgjP!L)k14! z|0hD9Nw8IDi(?_7g}!)?2!#w% z2k4SwU2mZNVUYd@fbJV~&2?IaI8>_US$%AwPJT|;U~GO-r@pN1N3M3K2CjbuQEt`y zFhfGtf{1e1kq`xs9QZ4JLR>j=;E@?#?9%{0zQ(1&^PoTDsbz>ygI!2NAU@IPFxECweUZU`wx2orwFRL?Vi%r#fd zHwT|Fzb$iF7ERWe9hmd6zaRI}Lb4P0*DRtJD0sMK;eF@Ocm1XDYxYi;V{N z>|_<-*#BDP zVyf;j(O5%cOkAFb$;JJMSBkN`nxZXaw~_3C`WM|96s&dBDs+r7IFSrPCs9oks%b_j zv%sDR4UMkj8nOtn2HBj93|Q=dU_~)2LZ!ByhwtI?1Ki>Wk3#Eln$pC7v2YO#)nYI;r+1graf?VI9cQbE4Oag%jVIJgmp!Tli{Fu2`Vl=}^B7*}CPM>q0!kn2?uEMFR z6mkM=m(aAJ8Dxhlu2rK!egKMpgIu>mXs4v^m8xGP{#BxbE|tCFsMwqY@eM)ON?ly7 zOHe8DyH6?Rhrjh&-OMXM2%*ISzxJ`g-T}Qf+;B05%u+Y=0NTo!LH^@z(uO-jJw{}GdY^aA#Ag& zIQ)VO*THSg!S7t&N|m3duIZ$jK>_uFI(xlRn2vr@yj}4w$E`#OZa3Va;@z&>1;v8# zFN%t!{9%cwOXeKm`BJjhA+cG<9A`w|X?wu8c%|LUupX}MXwl7vYQH!SyC8*!mz$)O zrs^arf$DMsg>xKw@ajhN`f+X+r<}=g9xusvvUZFL7*5*6PU_%dbH*l;bDrerY365` z7V?zmT(pQ?%&E^irb%Anm|emrn%0AJ#DZz8Uej9Xd$Jd#c>U{o`#=dn0Dpp41}3H2 zxkV~LRd4ZDLI40!#CER?wNQ{!C#3AZg6PLQ`4tsoq&(_?>o%E=9?Ad%f_DkC)2qA* zI_mXY_LnGqerFYRQqO}Px>~8b)C1*8k5?1ts4DQ|pQ~V_iwCT(Coe#Pp3t9fYbB%4 zkZb_#(6J<>9TxI(@W{VP#zBdXIFAxUjH@BNhQj;>H`Ujy)HPq|%4%J8P-i9mCxtnL z<(Lw|qa|by#U0G!9nD+knr%>(gIapbjD6e~@cX-@0EY$^li2YoZpGUr{uKbGm@vp; z-5WwtxdTEA4`}=^917usfbW>Q`BaOul}M9@^b&UY$2h8Di;xqbVIS*sbT^TargliOqi2krxJU;xDCke~aTUqWV(?}!^jask8P z0}gQtIwZ89!=V5%VSy(}6yv>m`L7<#)0`yIhaPea+k}=9ipRKEMJRfHNb!89NXIdr z@`ECzM5c+&mvEZ!A_+c~c%MYT!RonXhiYpgBOMLa@{+Sh#b|y!=3|445$O7~iP|WQ z*HTC4B5oJ21)JA?ADl?g)}TY&Cf*bG7A5{6IG_o#I$&%6Qt&lnOHy6AKH^gG&)BdM z22wH!f6A*u%UqQhH8Z3rgm@k-Dh$`B>(O(yU4eKLWdW!n$Y`>X&(vI4AuiSdK+e%v z_8o1?k8{;)oYH~At%~3z!X5gcit-rWjxl=#!rgS__+gd%`w3}l;#m|tNel>L9CIh- zzpe_tgKWcKX_Ec~Hvy2P3x8*MhEf5np#@;PQ^gkZ0zm#W^ON}#(RP-zv>`xJjj>B}f% z71+xujrM%J3Tz4=Q4A<-0!QQ7 zPUT=0+uA<>iO2{khbCl~Rsz#Y z*lfY(z?t%$UJdg_d)?$o1;jf7&DY99<9umXj%#g?EfTEa&;%6!v$Q@ayo9K2LjHG; z6hEjV{E}TLxXS6@(ES%f*f0_zE`^X8kcqivM##fm3^oVXT!cw)A<-hTuaJF%f_KP% zK=H>E;tjzoT}!|gGVxylR|kUtB|H#*03!z_A}5WUXkBL#` z226DgMS%T5%A-zqfRV?bvH8<}6+?wJl7S^+w+%1$EzE$A6NZX@T^WuoY2~3}KzjSZ zMLu|Zh&GV~2=yjTKYZO%K7km|WWu-D+r(Fz{Fxk16!oj{AcRHe_;%k7Kb_tGD}s3^ zN$1?^bdqST!pCN=iLn>~A{ z$M<5u#bKZl0W)i|k8=!1%7RTVZo?wWS zXf|ieb*|N*Hoos=PC{bdn;gH-z<5JMTWnxPMggFq9}~XI-2i@_RK{Xi@DuC_P0jD+|khm&Yph`bg(Q1`( zP}wvI>n0Kg04rfSnu+s4!o?E5Dp{{c{JKQInm&>6D@TiTK^T{(KTtZAbq1~~d92)eG(;q977X?tG+@k8h19zRIXBG|vu{_sO>VsU{3VLg+VWP;Fy zsRp*DCI}p8@9@B+j;2c|b8dI@GW4;%&9n>690<|?4Bl&ahKaC=JYniRZdQUSooC?s zYz%s3kvU_rDF=`6nn`=ndA?8?oQ&3tHKqXyGS(VAP6!dohVAQnFZg>M*y{9?jj$B# z_L?8?QvT|>Ynw$3yHHDt&mzLX+ul7kaw$b+M5UxB&}kDX=V9V$#1&Li>i~k^2i0;| zE6|9S%$x!i@ULDx2nIq2Z5;#yeijS*1@f4|k#*(D8@Xl7bxOE=Ece0#GoB~nqM6J+ z9^nNT*B|9dxSL<+NeK(jjj-y}u+>U@h4eyO7k^oTs6`4&d&M19+CYWF>XHXlI9}a} z9q=KQKFRrXf+=pV%!LW@VU-4{QldDx7*RHlsSw)WnJ&|&VwOsSxMjAAo>VzcsFX@o zfjT^FJ*e&o>cZgQJiv_;`cwLdCXE8J3c!m0zVytYaY zx`@dl3nhM03SW}Smqp%|toMX!gL+m-)yER961`butLW{*+oUI40Q+S8etB%KZ2N1a zI(*n24*Z+gBQou{XslPT+aQJPbRD$^ph|0%P#f{`}k!=ekww5I+(0;|7+DCIst3j274u% z0U?!vr>52&+0Qh+#$;S#N>HIV!1=+8uQzFf5*36)T>P)P(+F^bf11?$OchdzrW={% zGLWOWCR*$?4><^gflOt*_eFxysKIHr)r)`hYW|<;jAYOm$yD=yW;Bqs0#i9Pb{jf^ zoBj)kXo8{6?v@@&SZ$rrq24^Q3C zmmcDqzT>nb{K*g8?y@rmSH>|rjeXH_e0Qj2< zk1F}qntr{@ggV%^h@8>Z7xc||2`30ml7dGiwm@PlCHB1dYlL63Pl5lY_#4IFD&FT3 z9g%!kM4%@eljx|7Iw^B8LgJf$%1R0_0ED=jHrM_Y)~_g?HFdSI7rIubU$28PHc%Ga zrgQGpG)af|>2Qk9FVgamj;3p#qr(zS^K>z8G6-TU*8v*h$~0}$dolIwh~p-<>H*vJ zun+a!yL9-uuC-HBxqjkX9qiMDW#R#SV7Ghzq?@SBuSupmw#K!f_Sm6g-Zf@f8}o6F zxv`V&!v46ox#c?J^|$(b5wN|tn4&>u)hrXOHnhrYUSs;cVk_WN-ZJ4vlk|=$QjT}E z1Cq?e|jK2|vk&GZ2PF_9*BS}URk0H5%WITCe$-9xT z;0`B{hs(xo78Me}0(U2QpoL5(x!+ztB*K6|Je&MyDO^OUD+yP0+|1<#k{9hIL|(B{ zkGx3%?jG-u>>%Dsw1wmY3O*v)MTlte38?zq8C?l=IP+2~ZTac!r*YVT{YLCJv|B%T zVDg*(Po>_SIK7+2*PzimD&_E5=2w{4bLv(Ou@?D;eLOqGYUIOe<_uMDma6=SsyRnB zou?{4rfM!!m7h?R7pa<0t9MIPk7rcRr7Hb7mA*`+uTsTpRQhU_^t?)6r}TQ2^twvl zqH66>DQ&IkF>ki~zFc^F${O`qcQJLnA+Itt5bB$D&|DFy$)tS59030f~GOC!UMSKX&v}JR+ zW?)6$q@D3Pm|jpsLzB_bWaJo7P5fNbxRc51Y^19V=`8DEO1sz|ME4H)<-BTY2QR2pY;ZZR^*Buq4Ub4($! zS_{oHi%nQ+gC{Fim^v?+Fv|=|awx^2iyW@ya7~A5IDE5{mg=Bx*jho3IDFKh1d=+` zvM#kuqg;HAanYSgJdeWp;9gQDE*lTAdYFA&Brs=f;2*ZyT0>+dp!EeKRpJuG>r~DL zb;%axf309XmdkDF)!ymiKPL6p32%sp8Ba*f1kFgT_S4a|=(W`0jXDLVN3u&vE~U6s z!=>sjUF1?tmr`A>PU8=@jC4B;lK$}d#13(BH8_WHCWu#7JlV1^H|lLhik zB`Y|5gGaCD)>|ykwm;ibj8>^5RS0x2PVzB| zZ@~Pe?c-M4B-v~<9b(% zfek@Yy54?i5d;R>3nrx(mYI~5X6_2}{c1C9mD#t>WdFs?dfpVTHNhHF`l3mE$t-=r zy!5J>gsb&tYiH{Fq20iq*=Y`76Y;R!HTw%G39`u&l2V%v2&=@a(vkng`rvBEgNXNo z1DQ!&K=N^{v;z?CpiKg-clE92kx5_{`8h=22g z51Aq9@8+P~f{(nP*mV3~SLr>iqE}U4_&PqYQJn!hRqtKu8n`AtRt-K;KYpt2{Y>S3 zp)$Wz{lBsdNpFwhZq}V%r?0Q{$hu#Z|$Ok&-OMU2&E;^u74(b^jT^~Jk z-?^ubxvnu$eS0&8*z?)aGw|gfWVi?hGXoEE?`6hcVn(esrTE6aX4<@JeAwObZQp28v+N;u zO%n=RQUGEY1i%}K?y=sR;2~njZqtcDi;I7s`On0Ula+235j_)s7FIy0i32Aaa9T6V zu&Pv{>O9W%-{D>5+^@2t=T+skicx6tjq>){gGgFPVXpWOiVGb5kLc&oQM!fu@htm} z!~HD{44*wZ*2VR$(q_>}Q?)71Z4j;Vi|FaD!rYEs-Z1;^As zMvUo}?qUt_cyB&Jxr^wE@#~j;F=-(!+G=w9+b~bM{&Yvn@M?REO)J+&jZ8`#h%eYq;NySlow zs@GMm7^-HDRXkDM0oKqYHSc~k^#Rp%s!E=vXtoLv_JIaoqC!+ZELA`;C&9QC-(3bx z#A_pf2Qzsi5?c7B{gRYKO*#~-8mMnv{}4`xFUWa zQi1IFLi!(;BEUKzu^y2Paqn5?Z-UrvCDu_L?Ln9tp!o*v->?12+FNRa^Zx7F+oIig z5V-z!{nZD0_AV`8ZtT>*ql@-aP2cF$z547|dSkf`_FLp##z9@}O1A`&VYt^WxX3D^ z45jP}gAx!(taOc$_{Q0`BXu&c{(3lbaPkbXNbPWp;nAiWgshtk|M%9~-z4enVfwVoV)hGiKH{46Wud)vRTtYz;7y8#i5pJQC045DwG=%A$t z2ABkYb_jEyV_lj7KtLGf(kT5>LNEt>yr2d7S6B!bwI?1)!6+)gHEI=(=V@N3gO$4DCw7zgFmxwl+$3|P zu1QNX`B+6=Wn`gcycaC8VY+a$-3tR+%LCXOin?SN$?W+9c^RQ02#KCy`GZ#+Cfb{D zDqzJ)?5A+*MStfN6Y@lt*jSuj8+$Y$7C9qexsrRducL}W6~rA-L5>Q#sj#aGdZ+-lvpy>9YcUZ)e-#W?A)Hb05I&q^jO^;hM+r83HtY*F40B_F7~_f^&|Rr;|i#Z}}h zMSE1ZSB0?pmn(trcu-}3r%Ddl6kZ8L$YUxzuELWlIIY4{iqELbvnuhNN<6O;FQ~+r z%6BAlqw)x#9!X4){L0cSMKXO!O_tPZQcy)wt4dj_xHaVBT2gk2WY(6r(L= zN?C@aHj^>UMJ}@`A+L=s8V+-WItz+}rKfn;O6{@Yjh1kn6yGFSH(E$VaEElcOOo!E zjEV8M-xP_aieDh!EZJBh36DzQTq&F{g^x+bLP>l=^pm2OOW|{pxKawS`g~XXuVvyP zNj@oKPROjEWXxIFdS1p{fJaCRd|6es@9PMuqDwUF4SQAZQt)zkiM@u>10ns2vo z558A>cWb`Kme+Wbbzy;yA}xiQr)h%dG~EUdy%}*N%Nz|D3(vPZCR(6rp{B8qdnpbIFqv?M$+Hcp_?bdpy9=OYn`BAxc_vp?0b-`(kY@?iT zv3I7EuAFw|oJ;535WcUNORm9w9H8R}tMlpxdGoYXlUg&54ybD=&2YL+$Jl#jhM@+A z8k(q?;pT>+314NXm7%Ncp4|rA+M1x9^^66f2|Ah}$E4?)sH+LPnUXvc^sxb9tAha$ zI?&pi0s26Bgg@B$BTO*bBGiIGC^)bOf(Lf!QhW3CmKpCk{d@@GT={ z#@iIfYrk*24~+kzg)j#@4G3?+DwXv<+yCE=jzT-)p{{}k+N&@AHo!VeANmgoe*FbJF@eAn>XJk^ui4B!Jp`2Z&FfWsWS%;G}!r?FpTcgiqs zVSDR8VsRY7JRmqMBM~VcA6Cf(b!$)64Q`NBWGfn03;KC_-ru<{ZCm4!7GOph*{ zA8}atcNZ={XnEb<491Gn2jXL19LF@@TGIn?7Xg96$_#deQX3SaXPB2+rZ>mY%KR5w z1RyW4yu`f876I70lh2jwXjYmNHMe&Oo@Ctgp5>qu(j^=XU>?e_To3uiS@koOe5xwd z(e5$Ou(kR{%W3U8j+^P+lj;n(TY`BySfi^i<-&3}sVI7sfZD(x1*=a+UA?lgP6-)A zGH$4oUbT}~bPdbO_z9|7PWVEV;^yDZc6FhSa_gEg@FKP`rPrW)!lZ=8&o-rkf*xar5LXF3ByfEz6nN} z6fiLmz0{6Z!;yT4>pJqbEo_Cx0?rBzm*>`jNpZGrV30cRy=1!@GyhmrH?@p zUm*kuze6XH@{%l2x(U*J_o>MRYI?DPQv&2SYZQ6J?vi+(;>VOMRQ!a^1)!D`W>?5c z2_LA^_f_F8mG!a8`b?D`R~~HMeZ=c7`919A&>LwRlld+i$tRqC)5UvT+;_!0XlFw? zArXv5XXNB5+sg^B5uj?4u0u$F&2;(zEx5TA*po!C8Gpv!;zmI6dtX1lU0=FOd%Jb@ z9eU|b9fOthlpfZ=ihgq5#baLB%#MxSt}!L}X0|gW9n2@8`KY5=(8c8Dn7O&8dsmaz z&Ft-A9_np$o+;^L()yWTfayNalw4<`p{BIINkcqyh#5M}gr&9=}I*T})T4P%s(X3C2%c)@>mVB!ZV67aiV|tkr zUg6rWv%lW9*#`JRzG+dVC1vbyATj!-#?Y)Xcta zf-EhaG>}|DcO8Lr)XQ3bONw=iReIZ2osQFKw~qGfv{T3@x+Sg59r%WKux8ZyZOtmo z@|a#bngV>uLmOPm>tx5+^zKIYw1+D9G6i{NKtHQo1p^IZuD{MC4K=|K`yk*cz|k7O zHZ$%&2b~5P?*aQk{I9Z3PnrD1Ci7WSX^AOYWU^M9aFr=rV`jW$8%xa#CgV+$@wV~G z3^=G|n@lniE88s8F8IKtd}!Wwoiy!)##!Y!L0c!h-x)B~84x)sh0e88oCk`WsK6O8 z%^C2J^F^`aPj^<$aBggdFdgw_6ttrG;MumOPVMQPHuTKZL`Vri5}ig{XH(_5c4#dq zp(gXKX(90u+6V*ilhop=zgv~$Z5sX-g=LiVSDUca5;Y~kZV#DRs9EqW96dQz3CF?s|TH55W3mM+DGTzuk)wq z*aN!KRLzn8{AJw;eK%k0Glz8Sp!R;#-dPPSNX~gJziST-ypAi%Rpe3|Hz;;xmP-p= zdEDhET>mkb|Lpoty8N{3EpmCW%TKvpsY}ne_-?arvXV@Vs^vFt|sViihG*dVFT`EHug4+`k0dVodMEK0G(>MsWj4PoHLjirfBN06i=`ZbNV!2eI-w z%U@-@7qB;r@6Naq>?8yf1o*3>iK~!QCmYg8CccCqQv!d@wQW0tSC<5?^mNY+`fGV5Dx(upLihgFyaxmJ5us(7Xyzb z8bf>o@pzK47Ol@WQ80l7+;YUa@30JQxs$-y=gGwP6Hg@-5f>26wTW*y^n%^we@OzW z+t(z2Bf+g>56M1jRxd>G?GQj-6#Qsw$Gx9OegSHpL5U$*-=`71}8IDabxV1jd7KH=2Q#rT;O*}^~LZj3dRzk0DS0>Ns16g zOHowA0^X&T^3Z9LrX*c)10@ZWhXJs;lBNJ>sQOKmG*)~$-t{WLNZ2Y4=josrfcgZh;?%5Lly|EoJVz^4=?ay*N~LX844wH8kr^?)|0pt_ zQI*cBF6Y$n^D6s-%8sdvt?5-NDalTd^%H zSIP>oxw=YvH(A|B9_%Z*gQef~k~Tt;$4CmMIrs+0NsF5#;SLGzmUB~Oe}T|6Nq$hy zyeH8XiN27+Ln7Gnu!dbWU+H33dsy+n!I-EsQgl#9-=40=*VoAnb-hMUa0-}`_#|Xes>)LaT$M~@&d~bWB{&rYW`FQUt5a1_p|0> zZg?Wz_;AvVPP^ebYs!_gt{-!K*8t|@S9H5nH(pKSr<$;q3F;a@%>;Ffmu`Xv#?LT* zL(2r9W+rHE0<215*#-6)rYwvV?MwmQ%el55G3aXCZl<7z$?IvjV$c|D5> z-zn`~PT$IE2d5n2GExTbg6b-QVdFAY+EnFtP$^?o{&-b-qpDM;ir-Nwn^e|&s%VEQ z*s0uIY9nYTU#KC!DL|$(fbm0Sv63KKWvWP(OXRuBWl&qG8j8u1+P$P4AL~7G)xFYl zvOI;A^c+b5T@65n*QDTQ$%OBskKUE1WBv5`{yH{L$F9>cgr1-!4%V?Dc5SgJUq2F0 zJnco?2|=d``u9KS*lqgvJN5gw>e%f%`z{^3Td$g=WB2K^_v`QR4l2-{BONQ&Cudo% zS8SeM@R;5^U;qAu4xiSs#X451?_Z+5<$4POQ`>a*c75h^Jp@w!X*c~>xA2_%yEgA6 zn<&*}2ZrjHXB!)7Xx!E&9~WB0m-?7qi!WtE< zq!P)PBi=lz@~9-tm4x|{@R*b?l)E06(fF92loXVPKPSVMOTtP?fGY;I?-k&qrMh^h z&cbu?iw-JyM-`-_Dpsm3g?H;8bfZ^|0BZEQB{L+nHH6I(IqW#mWsVow<__yTNwAmj zAkT)c!}}?58in|UJW6E<<1C~8F$#VssCHD@TK@9!+sNVBgLqqH6AB39zzZ5a#D$<< zEMxR-wSL= z&nRB1{O6RvO!;e+ze@C> zY5X4gtmVW>sc~K|{!Loc(b>&(h}2KE4#(7i+-}1AOgPcx zBcTK7yZDbh8er5L3~e>;ho*lWYN+^kG|^S#j+MES&l@h`)Ovgr&Ii0Mk#c%QEqPX* zU#4ie%KM9YX01B?qPp;!N_<^aA1X`7NX9sk0{NVEv`3!-=N4=6AJh$lbUx&3a=JTC zY={$l?QAc%V|B{64)3=rzP?h4l&Gf`nF-kC7h+<6B7XwUgTBLNYUH{cO7C z5#mP)lrwtFCIQ`NZ6`?Pa>`g`eQwt9vxf5Go*!M|`FWZ0VEcKEg4g5DpTE+`cS*nV zZ|0xfiMnL<}) zb`zD1!0%PcyT)E`RD0DuRMb`ZUDTufl|M>()6`!cRiX+tr+gUrMi^ar7&$$k8ie6Q*iQKludVd4E_&y+`jWny`s)H9H*eD4->egF(aCq| zVfX0-;A9K*=9xNeo=$m8Hw3}v309L`G}mk3@&K22y7ZAtpSt{+OP{+0XWDm`gTW_U&oRDdRD$uUnGRJ< zeswbuD)eP$MGK3)%5P1N7% zS;3@pZ*!op+1tmIUT0#%O~zpBPvap*Mw;3Xd-Kho#+p!e*K@FFhx0e`(bKp6{E6j{lmgJ9~M-U#|*R498zQH8CWvI+v_IQ)w&8BdR zp=~C3-!Lv1ADS4bUpvi=Eb~+Rtr}kK1Vfyc;5|SK@G?rl`G(`AHW&8c((Ad-&Fqio zZIgKY6kdk}D~fa?WAS`Hr9Zo^y`y<{x;% zQQM%``-Cm1nsJ(w&T!JNJmxI-bX3wgF1~=NROPVB5tU<9lB?1ytE42Al&q3cRErua zr>6A-7pJOp7{=06PP$5NpmG{oS8#fBmD5zEXQ=m@skA04r?Facxth^JrMFT^Ep2`_ zr-MpwqZ+igT&A2Xl@+Q9T~)9CYRpiz6d~dn%Aaj;;=tv_nPzA{Uz7C($kFM3Hc54qZ>}UGh zavPY6u!s?tj7xLe`2dw{w4HQ7kWpxYPNr5zQ~Id!7n>M%AJ}wkHsJ?`A2u_7((;Qf zOe?ZZyM6d}R(v)g&PXp>F_Zos5&?~mJq|-L3X>k{y zcU0A%Bbg@zITRR}(UA&!Pjs^h78=y9`3Q7CH-LPKMMfP#5(+0k0w4fIHZ$@)B3if` zZ*#moPVRknX5nS_f|pR4yVV08g!4Ob`e2S8V4lwPA!LUwexEVXL$RCsqetb=1x7-GH)3 z4|U=JoORaQWA8=djJntO6HU&;rq>*kz0hRiSGV2p4pSTf_rZVfzd)Nz7h98u60T*h zTb3FKGolpwB2n_P%U5B0n^rDtA-88qd9frT1%?jU%XAcKuZw>80ZR`?Q5S!%k)RJw zx{tRq;It&gFJ^El$lb=9Y^1;@rn|#z0KCZKHh=@@LCc;x1a#DKtgAWxTqBlV)Lt>d zye;I?mX?VJ*GC%O3&ql4i^#`zY7S!J18N7NU41>bkxrhc(^hGGRj_Mg>^_RjrASG9 zXrB4O$wn*`R4&KKnr2O;J}z2IE&2eVtzzWHDs%6PIk7f}_4wHy{PZmL@s>wSX06KJ zqBvQ?>*d{n0(g71*%pEk;I#izzliS!{wsYgQ31PDdKIuBoXK*<*G}q>PRca|>{Z@l z6fLJ|_zhRKO#w@RkwJQ{nesAi!(H$$(w$O~w&tw$X%8BShv#6O$ML2Pe z;EwGb(&2|r}Z?tGo{{WR8vGutBWhC%8H-Q6#XfS6b zS|fp1g~8Ydt{L6O|L_u^hX_Aig^R$0i=de6Pv^cbbMOj>e`Rlzy-w%vv}21@R)wvU zKT{PvqLSCCRox`O9blEnClVmejIGV@Qq9qQwPjtFLICl#B~zL0m4IF9^vx!E)R2Mq{}zB79Vq$%adJ( z23zXNsyN1Ng)6IFS>y7nF24Z}i7V?}E_3-!m)~(^i|dug*&v5pKIr1tfrIFAY)hfO z!ZC729M4Y3!0eV!U*{kAu=$Pf<67bhv;#;Sd^#8|4(6oH;CT+zs(DPouxQm z7*zO7dnB`qh)p8ztHfnhcvIYGlA6Ss@$W`z4Ngtv>KAirZElUGjJhm!I1xX7z=>@+ zH=9d3ac&nL-<33;3n^{1URmNK-E4 zNq=S^GU>|}U1;Nzm<4uPO21&WjXVDrEPFWmnj;`3_u7*%shqFf&(T4S4s-OKE#3uW zGWx+5hVn6vPH^-K(`gRQF#pQYS&kgry^F4AkCewM5(Qo~y9(cbbh+C6GUkOEDypfX zT8dH?>Mx^on6}K9>o#tMp$qZEAy~w zJwvsL2lv`NqVAuqQs=6~IjVJu%Acn?JgV~J!M&3URP85KX8gjCx=_9TgzE5=%3Q3< z7O9C(tJG^F{8k>*3w z{XUgkt|BO|5Mh!eNReU`-zQ5>6&X`iP)JRwQdC27F191XsM_-IB~o19P7VFj#S0{A zVC^wiG!o8`oVL;w8qO_Ja+^eViwh5MiEMl{UIy`JiRRm^0WFm12??H*V3CB2#a%A` za}ohb^pePS33prD6(6#z;nn*rpBzb$3#aVu#j*$zGW=NU0E1yO}0kjjmW|4l~80OeyZ<|FTWS3wM&0 zK`OS%c~eZ$zipF)8Frg2Gfl-dIVHYLE~?ljuQBpsJPVKLt8h_eF0IFvI&<_IXI13l zTU(DJvMoi9bLGVj4RQRjj{M;KSkt=fq#406=)*(-^T2X^+FVwNFI46m>+xLtAqZk1 zg|UvKmpSJZuJSq$SH!pnTSOHRJfT%>g?EGs@AyNS ze~EatB_aNhru@@Gni+pc?WzJf*)}Glz0uhw>TJ_b0_SQsGqSr4Iu#<^+9&QIA7Xz% zcaVv)OowJt)7tbHjbOfAL(sB3RWA5S;Zu&|0 z(jVPXKfC8oyT!k{eBPaL)=mH29T#)c9kW20&)M8d=BPF?*K{$aw`bn1Y)(`%=}G29 z74wO2#-&))NltYWyT}@D(^JjNT4n&^hjmSQn#l=FQXP|&ZgT3I?hQ&8JtI-&&X}t};tnne?m8MeR+HZMd`HZgzGS6j)yA1%o^Zzg>@-QDzSZfo$-_Qe!=2E`-+Qq>&*6?IM5=3!`=EF5Z!@aYatPXnj(6!;2Mm5apipK zUZDYA%>8TgW9|9eApUBO-BA|L=A_5$%Qp@A@rBA;t6qCiHHZ3y7;XcZ)K<#wkc8VM z_LP*q2|-r!f0i9}b(fZyt@Md6bc>VjNGR~vnJthYip=2+=Esd@@HG<7kuV3-u|)N? z-&kk&HByKw4#tyi>r5wqkmHSTFnS~w zTFIRdpU+YL5N04y@V^mGW?fD2gJEZf1-;`e1Q_-@3M)QnJblZFD?aWyEcm!FtW`{E zI83&|uVMj5L-F_jT=)7?zlARYW`vV&NyTV(gBg6YSvk&_JIp6{o0Sty&&lS~0`q*4 zIrFfIJz}!wnV&JQJ!Y<2Xf{1=4qy(=QG8JPS5SIdl8hq0hol16vpbHN`h);G)ixyh__oE!{UAHftyG340?QHbx-a#CNC_Z8jnHRT_mF27LT zDa!wqVqznQNMk|q#uYcJ$Gh=;3z>T}(Ah;8_F;5{fP9F5U^OFAeOyI_ZB+MmYV%NK z@!gNAXsrs?DQ}bVKT}iptF9P(;V7;r>G7NeR$5@%r%$kQC?ntixcwtG9(4)SfEOhX zgD~t>$0UZVYXhATpM{4s)<0dQipmh0RD zy6m8aSHJB^SDkZR+&!)^+}g&Y_!h%cO=%H^8bYpQzP5||VgQ%0722o%3*c~21>gOF zeFO9Ds0t6O|Au`#sgizF1o+!8DnQ8VXJq8X3x#?~2+5ZqG%0#qLZtQo%{eif_%3dP72)D_rY$aO%ArVRwcHd76Ee!w2p9 z3|6;rI+s1db4oax&6mvMZ~;g2IaV9F7-@Qe!1D({@~&MWVN@?t7bV5LBh)7!Tvo? z{&thZ5ahqZDj2~N_R5;LT7u_=*9yNV{Hn++c1?y{f8qwKX;*q%ZZDIf_k`cIM>_a6 z!OuWxYByc`4{2|@_Gjn<*rZ{Qe#9!z-s?Jbvko`fUtrNGU2u^pNi{Vw?87G4*5tzo znr+fM+K7ExcasMHXP(LIXA)5$IMmP(6Tl8S(xk#ye79*`WZs@>$jyU)J;KYtPEsr^Kjyw09a9W*o z8vW=*KReBSar9}Y+8L+iS*PVWr{#Gk>we3O$faZ`Yua7g>MNRkbKTm4;qSEy0bfNuSoGn*ti2PO&r^ z4~%33TlM}*GdkUz>NTZ=%jwcgYIhm6YeARb*t~-Fw4(D@QKhTtnbvf)9W`k~Cpu7C zd)j#oC3K_>A+^k+mf1AE3ytkWEj!bhT$-3e?YdISUbLV)9q&Ocds3xt)DnTdzLa_` zRq0RP_p@%LSRS<;LZ1zy&#$8o2h!r9v}YK#96{}d)A)RPZ6uu;O?Ai7x-k?RMUUS= z_m8IuW9j}IY06D>{$?65flk~)AKgl0Zl{ZHqjosn@1SSyqVMmdiFeam_mVr2THZ&W zPomkAspS+Zh~qC}5p^t}YhrfB0YWW3(IRwS`&jSzTwnN7--=iNZnxh7SAFN^9+U=X zWWX)u6xaV%Z9XAD+qJ2zOZI5B#L4+g(bf9TO*rbnggT)o#9J)EvqHL+aaf11YQSN@--Wi5rC>T|t>&ja4yWre(_{x3$$d+1Vz)qrHA7cf!TMgxyV2 zFO$~WczrFpKd+B*VMV^qX2)*=%59Uz-HX>@D0+68ei8EMdN6 z4i|LJ)*mg2<0QOECf*{6w~2R$B;I8;@RUiCd7orHAXYn_DaB~wo-Jj2M4q-lNc=4R zvv!6G7uoew_vHpXp;!}y>rM2g@iv-`n=Lez-nWKZL?QAW=UQ~w`PL;%vn}vE8IQ(Q z991ackfHiBjpYb>IL0WbL!WSX)HdU6?WEpculnIDy+>7#L7x%7tu*f_{y5=@c6E}5 z!~8wFI)OXA7`a09871i2RrI`Sx|^?WYpA7-tvB5jHw9&n21rd8PP9dSXW`yiVN)&O z9_O6W(G@Oz=SIG{{~{CCH;ph|USp#84B|t7?qsO5q3*`RT#2tJK6-rULrv!O_F#{| z6pDY=;UH5y-E5v~_{o2bja2%76dPGXd04_;?6^NTRL2E)!4J8hn0G<%#nlv|Zi#C6 zn3U9|f`hcMGbiEFK8+Lv@H!j>9JE$4Sq1m0rcjp3;#m02N;WA#`Lf)OzER-;fx)MBxiMmoF3rpb^T4m~t4*H?~8eJQR zdimpRzp5AMuvq(xwZGb4*y_Kp=_Bp$)&d>ukJwbTirCbzF8z_5dJxGeoTy|Lx^_GV z)D*-v096PPs+4$^D%Bbbsg~ioRz>0Tc#10HzelKAnw{|!RojXbRc5?OGOmW<`ycCK zm4~qFANKwV=G!dk$qqGf=w|1g`y5P#xmT04rt~&MgDAOx_%HOuYErM$#P=zG3vJv* zGxt&E0g4Qd@z`y^xsCZuQ?A^CmtJL!xQ}(>D|>QTKW;LB-yh1i-NF7n97Y^H5=Sh) z%ulW3v{!h+tJYrPy~z{aw!-rIjl6y*kAyt+vF#*6=PX^|YtJDS`#)nAl6ooWqol8r zev11m9%wtPd6cR=MrDjw5sK{q!+ArYHwsC{M1=hTk3!i0XXVAOqnDgl>UTVCw(!o& zkt%&;R(HE6O6w))+UPh-MwEzNV2h0NACqaTCER5{eX!Z_29Gt-Wvz6jE}D939;xe( z)pC>e{-gtZ^!MwPvvlr!U1m`4yC#2h5iEybycX z=u(sVtVvyDUR!1|R~dJ;5jY7yF!y6V!f>=*rzt1Iz7M;M`<#pdN2WQjYEQ%ZDUs`^ zum?eYvn}<*mONadRCl=&itY&sQDWFvuUe{4@6>O6Zx>tP4_NtWIi(-LKIm7?XYmDg zd9KSdU4NJBU1DanFl*b`n!*rLRSz=|LL6dH&~17d?qj&W$-Uk%Zo;FDH`4wH^XD3< z0STY8e8Juxrmva)#UegdzDp~q{3t+DJra?sHUP?ic?jTrYK#74U{#dHBw%NqUN|W zsHlkri&?4|Jbo<|12En}MeS|n8GWk5pLOvsZgkESJX19cUu2T&nu7X9H8NQZ4cu{5 z&m>^@{msQ&DIdhDk15<|EB~SxDr~qmrV!0lT{a&6RlCP|J&|iyu`AK#$!wCiYIUxh z!gDTSlgeFcu(_D0*XF9VIH?X#tH);op4J&NEp!zIhS&X^*L=Z)_i)p%x#{0HwwIfJ z!(;bz(}UdfFgN{<&wS5Kk8sl;_@bk{<`_>t!A(!vx~S_;^Y$~m=2vcemd`tC%{jjH z0>4C%fz{2Tni{pnRf8+5?a69QlG>i4PSj9MYpSLfTZj2)scJzTH6l%2p00W{P`5Tz zpEXj0o2$#4ss$NpZ4=eBv08As`n-i2+)_>q{G>IAqc4N>rUJCojdexAJ}>M$8ueHzuts4+kLw9xI6xY8~y0!{Or#C-EE=F zl*;DzO4g3}q;FcpKLRh+^r~g+(ni)b5!QwEO@`{YxMOt_zBDoUU?;>Og?nr-(19|uE2Db$JmS)0}X^R4I9!L zwjF!*cAX9i!OuFVVk~*Jo2lR5q~PDZ(^eb;eG_aXexLj;arRd=`@Y-OnmL;bI&s*A z!>$%Bg6)6Ujk$-tbZp!|-HN^nxp&kLK%OJLuf z6+SQI=v<{U60PH_QVW|kv$y^Cb@>N+@^-xy9<8nV;kYmB!fwsGblRu-qR(t$@yY%A zfdgo(w5LjNLHp!-)!e{$rMfG%TxsA&&0NWGCC}x7E;=S;ge%v(GA!OMaf2(jxN?^( zlU;ezl~UJR6uD8aOS6z9-<+ogKy(?v|yy?n2uD8YY%U$`_m4mJvas|Qv z*5*JPbMP9ozO7l`&YbUHUT<$|gl2t5^Jcc0-^Cy`jI%e^*}RZzPINV=x|svrO`~4s z!@lO`Jo9TGb9+BCqQCj;05fc$S%00~Q;)dbbi39J8)l{sG1m_^!-ktBBg}94cCKkV z+6)_Ie!t10#$t1fx6nc+>n}30#0b84FBnFec(X+|~$KUJz<}dQ!EN zsMJe!^*1@%$nvq3%ii1V0`3=-J95C5F9iR`imuNWr*CRQe|9@;9c)*Vfv07j0d*~3k^zlm^q z03m`Y1`qN8tAXPY4nU27y$5UbPMisQZBNc0zy(9OU^hog4V2GllWhhmm`)MSgr0w- zo+mjO_dA7Cozg<5bc&Pvpi@}jWK451pn3YtH*)m}?7zv9plT$l`M%O%;3t{nswS*v zVM;4z(uX?(s@)#StSR~%Wb4R^ACG0;Dvp&a2hj?ti#<$*|?2jWjsVWFbwFuy@V zBlva#@EB)PIc{i>ps|mr$K?V0jX7${gnKnIfVf&8=kZ+>!C3o-TJff;3w8}M0&T@_ zCy!>y*@{~b*2g$B;^SCBJze`Uz4vOJI9&VJ>u8i#xbT4Mf;0a^9c;JsS05nmIJ^ZH z+F{72<8L14w3Ku-mvxG7KS!IaQAXckvTre?ZZrBZQ+tQuERz`@sC~yNLkzPug>5Lr z1ksbj0Zc>T|HhR-hdqtAAl^BJ^C$k`{2i+1IN7a<2a%7|1Ed?Uq~ebW!>$Yw8}Z(B z3bTk2=|zSY30!1v5wk^F7TH*2NFhVjHxUwB-Gy${xPB9c#1#gZHG0|Z1;{Wp!9QiX zfoTI%XGJ3||A&@a6$Q~g>@PAr``~Oq0`d?Pz{yzt+U$)* z#8w9)GKu)S2Sd&oTeB6ObHWQw7;{3RkO`VMaHEig05!l~FVw)?QBe8 zNmh`Dw8BaXSChY%{1?baYXAW0Ao9IVDRH||^e*}DSbV*=l>orc{D7j5$lpbohiy+E zE5_FemJK+(JdeFZPOHRWmADn{52lUx2h#>VwBkQ}Xc*h24?i=Ec{qpHb2x&-d=5u( zIGV$e9FF5C?ir?gIJ%R=dpVrM;be}c*n3V=AxG0VD&putjviv3$=2}s2ulgmJdPGH z&9}`s=#<2Fbu*j{i#RN0Z!rhYaJZVoWgM=I+Z+DE;aZMf;OHgmUXX2E@L~M21dGv; zxMheGX@wsWT}}b+{2ej0E6TRyF3M5VO>tL+E>!BGygrKiD(*UV z3F224{vT75h)g0lSy%kDKZ28O<*U1erdu|b?eu(9WUk13RGCN!l^B9EgyluzL2Z6c z0;sjCBm!Ihd7-sJXtzhO=vA97^41IX2mGESY!UuId@Q~JoZl(IN0Pl;vObgWa|yl_ zh8Jjmd=v~DwQi)# zn_9Cgu91CUxQ(YT=_)N(qASYgE|WqXW@*2Z4s&(bT~iMo_SRk>oz}~uP~}=JeYN!0 zGEmEPTH$U_;Kw$sr^OTTdcij zG%eM#Ld$a&JSC8HR@q`=UZ?3@yDm)Lty4d-nFZX3<)F?y{f8wRe(Ym5cYq0~^rWqo z;d5?u-nNiOF*kCp!V^LCOEF=x6?sB<1Z$cI%x8>3Y1VELrdw?%$}mww6T&mo+)xV> zL1}MgqN}aGjkXv68bgTG;hl&nDYWJU$}yB{l5n@|X2osTOF(jnFeqJXq9GPU6AiX% zC#Luauj4`X;z}?ty=*?-W}0W2X|pN#7NByLx7Z)87-f{0BW{j&=H6u`eO?THuk&|T z5+2nZxXo;{1ySv_Sz+X7=ql|-(qtj;CimJ7qg_7 zP5L&Ieo%*Poh}%?N0=~&n|0-fvUy(@F7M7Qd-0T>+@}ZMn8&Go_~q;Pp#i*n5SI_; zkA~R$*!P_n=q*?xf9}R}ujPmOa;yH_ejryXkC$)8ZMuK&)5ONSk1iNvg8dYglk6i8 zn|%bhP7z_1--#n!|N7W#l?=2O4_jjjp8!k(6@L^g0q_Ihq>X33a4pR1$)y9ha3~j6 z^mSr=KLD3=&cq-7E#YnupcM5O1^xJFCx*o4;h)AYmKYl`Ge!gAoE(gh@y07;%Dn%h zyP(2akj)-$q;Q1x+*kkWK3U<8 zfHk7R7Xb?dE{zqwg-$#p{`aij$6h{r4&|QEZy)4f5%cRvU#kC4ijDsH@79SIcH`on z+#>!L*gTXsH`AEGu^OB6&-cSl-2DII?Y*O`s?z`ey`TN;y-&ggP8x)M5<(0;6zSz8 zBoLY;K%@$xgQ8$ZQ8+0;C_+F`6qSG=y+{+Op?4xh#Y$5YkfsO%%Kbh2MrZUh&dm4o zUElTlW7e8kYsS&bz31%xJn#4GMW0~@=-CPA^B>j=hP8rb9bi=8Kc4LcXX$^^>Q4t| zI@q^`pbkJ}9{TSaC>;IIS1~$s{_{{xg3cA3!mBeH(zY7CVlti%>Q__=rXA4nmZlYh z6{eplryaWS{RG5nb7|02M%#|A8>Agu z7Z1_Hi)$xb+o1+$L}hcYly=H!x1x5Uv|B;j(b}z|ojC2(&~8ob*3%!=(awX~iPug8 z?KGqxprF42D$&HW5mr}`)Ju5OD!r=CTv4Id4Am$4hKjkR?3;?NQ4}X5J30Cl-dCAi zCrVvGX^Tio#q}4j#iqU_9bE|4 z8;iF3Pa+xKh%7$<_EP$ zrv(KhR&aCBJ&3+@7(~X>U1kexb{4U}Q-YzXiQ3X#k3M0b8C{YY)0vN&rpKvfZj6+? z?V>{{z)An_JDhVGg|V)jICW%2n${Ssgi0+I5lEk&Fw+9itMRw6h_1h*A- z8&RUY2yQJ>9}>KySl>y6r-|^+BDkw4(ZhW5)h5wJSMZ6#)VI%2fC^n&3X?-8M>^kA zs*ns0n&)WASU%Y!sqd7D#@P=;k+^rr($O_ z?j~^GliYrq14Rh3xX9-5dA$5mZjq7dB_|cA@ zs=npHUjZ^5D4;mgwSRM`Su zw}adUF|FI8oY#f-ricy{?tV~ z^O3(Y%@9wAqiZ9%lbqt{lt3PVP8rjmb<3d}g-$H;ICP5E=tULU#weO&zKfWE-*>{G zb^#b#N2AC|?2m7ZGz)P~0V*oY5*3XS4w)D<(KMvOmf^mYID7@_RXF^89KIUMuSI(U zo?4F+HsbIP@YH5>w_~xr_}da0V1~T)6QwzUloTT_?oZ4N?qHYe=_GuK$ zWR{SLe#{_$la>WOnML`!Xz4y6y;u?v%FKAFYRiH;a&kSnyPaR}GdV7)+2Uq{Lf>pfI@4ba;v2aao( z(e-g8ukZp7p2hunyvOU@|0cil4)42w$5WDF2XC;S`>*qte&P4S;C3nSM}WT`%%~4l zQej^Y_;DoMpA7eAz>fFe>VEJa1pguM9|n@@`b!IcW#O+T{Efwdj>7+_80(4c)JdNu z#=a?jTP4=KZzvr1Pl%<*MfyqMKP5)|AU?QkCi!y^zpjLK1@sR^|C2a26MxG>e=hEO z3ro&LZwvl*%6Os;6z&HscN6_Iu1C3A%0^0-wB#u*_lC(2sz`r~JY8AdBg}iUl&$5` zm!zF554|O?&6oWb$^#!to5uK`O8+M&-b_V|YxGp4#PSJssHC12sr}`&KTc1mrTvYx z)mc}fKhs{iQE#1{p-bfGyh-}>R6S~%cBkvHTeRM+`w-!TGh4HSztyeMzOu-;I+JApSg{AIfS-V;4E|#!|$-OKg0BMIa%st2QNeKHb+jZW= zT&a#>rickV{UMI+%ut9X#%AE0WfZY_OSs&~oy{C}^8w_FJ;^f!)DH$L$iPWn2!ov= zz{3MPhtgn28ZR?tB#7;RQQ+1F%LSWcvJ@Zc0!|t@T_Lv{*yNUd0^G;J9Rb!;kUJ7^ zl)*R<$=rDkJQ}&Y1m0+HUk01j=yYhAW2$hp4roCx+6{(7=-+Nu193ZG+-}2XpuIrL zKtJoBj@ln#k`f7F;$EnDH$wPB#CxU0^l*`0PE0Q=Qp$*R6~wJb@o;$&lys4A{i7n`byiSfd&E4I}WOY4YqLaDbjD=m`Z z!3dG{ya@M1PNv8nFJf{9k`i~C;Io7?TR8JX!D3;rFeTa2t4yG`?m8oYCJp5^nyc&) ze4hy3FP0uOcPL_2bv|q6DrXRrN~1-ugW~9mMEJ8yw>f4IGodHi{V{p~ZXbeKBe2?2 z=sst1v+m0{KNDvXA%T>;v&=56%W9MHn7tnN#Gi0FZOZPVM~j&Igz+-RFpv_Jq>>a>yuFg9V(diA_LNqtZ)P2sEEoR6 z;rmno=bI^=Y?+=T6K2Vw??`8^bO?|h(EGMLEZ^HNuN{&nkI3mC$?)Sc|CqdSR1$C2 zE0k9$I`Xw7215E7S#VC)4Ej6&FJ(hds3w250Eg>kMTL$C9ZehSNaK^T%j!CS4t;T))`ebe?X_lX*!liR@1j?=sqy7lUjrCSi2{+ZtTIl3T z8k_5RuFgo*os+d}sk>99rHz@KQ)Ka@c6uts8#)?10yQ17QnkOceuNq>U3FSFot&;0 z_tJy9==4W)a8JFuhao2{>#KYB)A<<&*lUrkxVzpuMZ0r!&fEGjIg8)Xv~aQJX{1Lw z)vVTPZ-sVOYq`$&2Wg?kH|cbWs}*Rng+}ev?p}?%HBx2!fZ4%037XF2HaUHMWc)_J zauv)S!5pF60q&p^)DD21An6B4Q<429|CVsv)Fhog!tHHlk8Xc~1BII*+#!N+A!Isp z9~bTj;XWhK6V|(euM#n9giZN&%8gU9oj@YhkYouI6f`1Qy2aN;kK%Ln&})QV3-p?y z*Al(vf!lo|dI{(yAx}ZCEqcl5wL_-^dXyMUHFtjkiFgmAmyST?l-}s{M{fYS{m>bR z-e80w=sjk_^VTqQMxy&Pde0%y_>m?Cql{b49gXf7^gQ%(kdH$?8NCVUOfvgr?-lf> zqI(LROZenP^j*b*` z;S|l&vI2`{sx4dJOSmZOekau>XME$G+SFIrkoxkfSR-XOR+XD7Y@(o<;w_YwplnykL}j;C zkfLN8WhE=Sy^82;+C$hyMRis9uo68LPgibl1^tv9p!i_r4OQ|{C5J0HLRlk~d{SA@ zDgM0TqfGM}Ur;bsL8gkxQaW4J%u#%tf{6i0<|O5tp!h3_Pgio9dU2|!K6-XqQ65Yp8U|mR{mL|yFegLldX)mjx0=wYOTW86wqW)> zATDA|Z;{tmEF2&@_7jv1`(mJo$q+F^MC@P@GfdQfRQMkg__$awLd1*|!=4mPpAof) z$6LdQHdH2lG7a7HXbBlgmidEHoshjx%G(qj`B=V0behHnPHs0h?L|^iP-}qFDNb9R zS(KRSWtRJ7hoM-hH$ba?=JZPkU2D2|xKRX`faL#tvXQ_3k0%>VVt;?K6+PDe^_lh} z-sxhdxVgZpat4BhXu>kG@)oOFj3xP4wc_lI&5}wo9>S`HvE)!TDV$X;&Dxe>(WO{+ z1vaTH^D43Vspz)u`Df)ReOL{tI8s3GFgKyuEnC`*_pa5tsYCO z%|_N|X%Dir>TE$Hme!E9ZNkzTvjxpqa#NPvoVhL7{Fbay0!vF~om;bkNh~>qRcX%_ zw_`Lhp7aoF)PapmWocd4c%)7z|BtqhJde;&w*OzV)(@iFc_ z!TAX8J;|Ms+7hItUAb;VlauECG#t;FN@{ z;syYcR197XgR-G8Kg3M`rj&-CZRiyN`)MK+39prfyfTne5qg$~>kn}QA!rZ;4S|7!K|Km7!(ifY2pl0CJr407vV z0p#~^`8)XfBCHDJ9=BY94=%%oYjEWTthfqIe}s>(Lx-Et?Ppkc3qHLK{$Id<2j>0? ztM0?Rdoa*XKPmClZ}7@pAOs*#=~jqZv=m37EU{FHnOdX-iN?WVRtfRBPkdTZo>o$g1J zM@*FX^DVE0v3x)OGVByVJ#OiD@D=@5w%KOStGpF z!r36A*NcP?MBF+NzgC287Pv+50;7Y$-KJcyeYu;$+(8k3K-iQ*EEFlnghxqx zirIfH@T~C83-5x!?}c^I1nl8Q0pz6n*(|V!aR`>B6YLWhG!kb%g*%?Z2`^x+(U|liQL2z< zV%72JjKkM+O*7O-p{Z%6?qp5Js9A{A5`72VdFU=cn2&ss*{a(sFqF*NYp~rq^fnrI zY7SKcwj=TMNUI%s*i^{lK1S~t;tAR~7|SsK9=&hS`40PE!dVxLFpD~;)Fb%n8ir6+ z@CHWzh#@~?@!J@F3xmnich^`L7IPVXAIJIeA&`}s946#Y`V6FWl$>fwvRH-&$$`aW zYOoBZb-Yi$ThjPw+)!y%kW-@Mo;aBu7%fsOf!8$)*@XH5CszvzEv4@v8P-LfN|T$q z%KqJC*u(O0cj@+$Sv}?azH-nb(#ep){bl#TQVoZ1}z%8?`F@TX!ZWhT^K#^Kvh%Yte3X1D;KZy?&InI#$dXetWkj}_y4N2sJ57)&6J^FE*&$c* z$+FrsIbo_yoFdzflQZ(<>(k|?SEV;Y>euC{*JRn5vg<6_Xtu;RrJf_(zAaC_Bah9M zlk#O$0Mcu{YohGO7Rwn+WW+KVODp)5(pg0;DU-9p0_h!=kq6|*hvcIDa_kYAcubD} zNG2SYa8yd#&L5O*PsocD0zW0g3+2QwWZu`3e=bAL%c!%``$oDKvN|SGcP^s~%4;a6 zlcF@zA9l3PtDqB0>FCN@R@GQVr#_%_;&e=`o>X0D)X<;Q)bX`-Xf3VkYp0$bRaavj zUHn0v73h7W#_O0ydSeqE(u^=lI=-n+Z=s`F>!mF<<-XFAbej}&YMs|Uue(mq)_jT~ za+qKM70P<8HIrC-rIE1f_f5Zy4!6!G&9~@hx9P=Ob`E>F{Ryr#5;5aYcG-e}DaR5Kw$Enno7% zPfdCVViXXvsTibE+m>2Rm7q~4$e026aex3%Nu(shzi2W7cO1Z z?SC>qF(SbHB;aQ`L+|lo1I*76=w$xUSiFpxH%$H04&Zd`L9+D>gTc%_B7uwvh0;1F zxztXW&g!lEQ`mTj0Z8Ui-k7crv$ddnd(mWr-pE98tS*2+g7keR>=k`Qe^!YJbitRr z6nF2dj@5Np5(+%cMXV@jAhvvnzR%JB8Ol#_``38yq}=_9>_;3AB6!eG^_2ZTqvO z{TODjr2|;{Ko&lPEgj6#hqC-ZEPWVDe~e8S&XzvP2AyGWo&{fE6$3Tr;$?VtS?-VI zGs^R375M5(oVMnaiJc$KTg7mHWj-pFJG4-)!bAFSm1Q&sQIm{LxA_!~0ZQ=C>$ta` zCv4yzsc+A4b)FwQ%Rl_a_^e7>aIFM5L2x3gZ96|BUD1W z3w?hhKCs~Q)=U<0t;J6RM2Fr&^b^7TMel*adtQuvNi-ZSvZ%v5(Qx6cSLh@vb}bUl zCQ)p==vOGh1H;lfXM{Q@9BKsoDz5z|bSW%JZ{E`AQsJ}{{@MX&x5v{D;pKM5FS)t1 zNtbn*h1P4BLFMITIAOJMg%c;1)>{vhl;gLO!^*^5rkfUTzW)bC+<2)or)>D zqyn0F3|083!eN0(|8Rvg(0EMY6AEdj@sxs*ft>%-%6V4dRYf3uTA+u6rc{HU>4?UL zqA)vI-v|Wtmkc&c1Mg`a^o)*sPCL))X)kC#N;@xUXSA;KwpMerdQ0D5qF-OEJ1^5c zm+I!rwSR@KG>EAvuF{orK-xc00mS?p_`%R$-902NV7wUPKE_K>iIwp)jGt$m?ng^G zPlj*T8I&3S9O%O@S|z(Rk*69+BM(wMSn-mImoR@R-q^HCX;4W|JWBp^#wzw?=ITUS zgW=pEH1s!o_XUoZ%}v1}!4OiyTm(X^K!XP$BMLsK1|{mkPj%pQTd0}|sS^Mx zX+RK_od72dj`hDbs`#b<*{F*BKWkK_7B#A_|JnFTKX5Q`)Su-1V}7`S*-?_cKw0r zbP{d$X`4^0e4nuX@5W-Z`hP`aOclX-;uxuKR|r@qeE)7!PiuNw)<^xZsizhEvj~BO zyI6uD|8?iS1zY{=+MTd1bfchUI!%>@q=D;l+NxX94J_8Z2nqjTpH7=}N_dhu@1Q)p zUn0>Sj>-E+<+ehZ5?F@b|3+TSQqCkJG%Q-96D;~P!Ln$FUec6sDZ+%YW`S-R8I6r> zNHy0~lcYvD1zo1M(-1g8@je>*X&9n&{s&*~k3@a)%ldB<^|${Dm!m{|?5o6c*4}qW)#YA`m;XEe1$Bph`^@9KCOWk5Nl5`QaLkzI-|DFX` z9j#1+9IUzsAs~Gy*o;YgapWGfE@Gpbri+JnkwPO<$Q+-Pbh)b_^T}UR&nRr>HIfrs z$WnA8%aK5Q^#gM72@^jyCtj-FT#yfZYl?UT!FcVCQEPczx%AGml@q3%GRmo9(d<;+n|zH*l;`#t3>R_-$8E?3S5)_bKm;a?UH~f^xo9&P8SYqDE72QRs%G0x7ONLU1(I$0?lLT9;_4 zbK2^7`o0n6I8_hps@;dR=&cpm<@#%Pk|sT$^|pSNn0|i%{azuO--o)34G#QCR6o#G(=2#FH6sVc_;BGM(TN0inL|8ze99$Z%Mu25Q`$!m3 z7PggvUFG2`5-3-M4=cev$ILTR+LCV2e-ld#V{@$CcL|bhXY)+ z0#Q{87loq@_<|P`zEI(XnEs0uA)HdeDI?rSK~ft@`|K#;L>s4u6D!;Y1gGX#P2p4* z;nhS;RbkgAl)d2f#b}~>HWf|_lheTF!f7U=UBUnVFVRr6l^QhvgSY>UhzfLPvi`O^ z14tEiUW~{vXj6Tr1cnf!B-D%(ArfT-0(r;&wLw!CHx`v>UNj=qq8?4;tEi@#7okLDP9f3DJ8!jKEt{W4Cx zhWwsE73F}87P36ukppwQ9O~5kwNR7m$bS}UDoW?Cof==DQ?t9a{70we6YA8olriq# z*J=m`Zl}tu&eHeanl&+hG;3=7(X5ew+pM8l&2!QzYSxUE1c3cNDc20Xt;My-n$^(@0It1a;~Uoy1`vjxi{3t>nf2{UpJNgi?LVd-c!+cRIXp;-d8|3 z(?E)nU@VT(AyT`|2ar$7aPO7f4h7PHzL+a@L^^B)}QoMe?fzEBHljwNXSQj+WvZ)@|Ooz14 zqPcG5>d7s2W}=RzIuG?{Q_Oxjv9(E7M+Xj^i5+xqN9{}1tpWv~f^J&SQn;ti?XCAy z!KaTlhc_D5k+yY!rlwDFV2DJ0AKw^_<22CQc9zE3y2?A6VC;OJj$EL5AOub(>(8mi zPU)J00N`=AF(7yc^om2;E7Xxk0w+2;d@`2Vo?DNaOAt_sdmg7J`4bdu>uPE#&>iBs zfk#>5I>Mvy@cY6O_`rTF9waSFw^G-jP`cmB8iW(cFxhO}ru8oUYANFs-q(~E!AZJV7I&8L_~K~o zN6N$7K_+!ii5)r^$F+ty;x@E{;0}=09tt`^cse9>2i_B~7o>VdnM$-(huD%`r59+Q zIYUjY%=V<0DdXl!zEFD0$n&lsO~L#?`=jWn*$T2!Ag(R&hXA@jTpHwe1+N=qQIdyt z3YpS#%^eddFo`VVLk0)TiFbBW?zG}odmh)DTYWk2XI7uiI37g&BH9|Ca@vJXSmBZe%!`zX9p2)^Sm`UIq(1vmpa zG}Hp~3M1{>z*ysPu&bGu(b81G(}hJy&tW3+3E_=mK=4GYUVU^xcqpfecV$Iy8k)f1RI5|c(?29YYCF$6Ps5$(~)U&d~kXpJ|4sN6R(Zw|)3jqn!A zchJj6T!2XIUmCByYxsY_ckt9*%=;BH=vPDg zBf21m%Fr+wT1rB=Y#S+68R?dmOUlZeD7hm>BCU<6w_aHS?Tj8YcMX?vSqgCDM#?opolbV@gX0xucfH+s(&HgAgUDhQaTW@JSV!D}`88T#mbo)zpu=MEl@tABq zLgqdrGoP1<0ViY5%W`^_jPhhgrc4+wBk2h+nOt=;CQssYS>iP*=gQoGlM&vPjR@?v zQ06R_xl844YFsXte4WIj0UT?gY*+MS|1Pt{hwJ~>Yptk>Q~ZGEVL0yf+9^v#-Y)#O(S+o{9$>G0ip@m>x4 zwbhWa8H9`gUj!6*0Q&$Am|PzPji{|dgm98{kX+t-(S%6t3%LIZ_Ip4=Rq54|UPH;> zHT9ftOBqfY)gyPpin^wJem`&Xo4sk{-yU&Y7`M zAeDI=GLPW8#ME8Pokd*G6xszSBIRy{{4ECOp4wOdk#C84`;vqy(xa8xLJ2hQB7p4) zNpCBPaT>r;Yx620XbDc>Vv4j#Z!y;}BzbugJaD_4_M*2C+zXK3Sh&qZ0e$mnZF&Lu z6)aK8bbFl#O!wB!l=!aXM-0{9CW{c2TOTpAP->D=xdyg^b%BH?)B*!10?c3kE7`BF zPNeU~Ymz`H^eT^bX<*7i6PeSU5jdKUW;VrU_A!?zm*-fO(mXhdFCddC#X=tYy?PTl z)=UFnDUV*s!`E?lEf4>I%k4aRGY{Xvy@Ncdkf)yEt_IfvdhENj9tsDi8VvwVp)Q;tr5tf~N7<&*-HH z`{2AUoDW43l~%|KcSc|U5&vX3K4W9uP^?!R>z2Ujr3@loN8sqPxTg&MRt^W2$AJ~m zABFWQ;F!ur;;=o=th_hW!Ire|Ci+B2oYf7J`eN)5?D-6~n}81GDwmr2wznCby%@Cz zoo})3WmI?Y>)&uSNa}*2Mbl~11p`|;;nIsVrEEJ^9;qSM(yur{dL5-lo}*dvr6tl? zV=`6on?qw)rdR{wTfMDwS!}+78nRgnX}Njw>nTrERKLH`95o^y!v5 zsI`f=5w#}jAp&6P?hhO65=r5!(#Wg7j+tYmX5-)1{<(V4J6bF--v^kd?=RHwo`yww z)nYBkZnjJxU!k|J)z?<((`$5*=?s@^zFv>rs0%k~pdaIA6X=DVnq+5cm#)80U)ihg z9n}5&9K+m-pI950GP`{S zb^j`N+y7U&+to{u6p*_`6v^GL0>1$nKg0H0koITA8~NSH^2S9Hh=)-mDG{wj<6;bWqL~mqyt1hBzh^Sg3>(8z?61|b`t&#Y?p=j6i zpT@W0&BX9NBD%N8?JJ@O2)Dn89w?$SMD!35I#@&xH5lsXM@95wBIa@N-Uvf)2%RSm zzbkGm6k@rMD@4szV*P3nw?;g*LBxD0el8GOw+h%J&h8hF9HMJAwhl+z#>1g#mBcrS z<8LK!cm!Hyu}m5Cm&3Z{(XNF3E8_GhyjKBF$D%(DCw9YY8JI|K|4huvLwFUv>3Dx8 zdPD;zXWW~}=OABzY9Y=gf82b8Md-bU+n1QzCI72PE@1;Ye-g>1?L}uFIwu1)Mtafz zj1x(ed=K0HO1?-*TjMY5$dk1tJSbyo$SHNDS5NZBa&HUyWpimaljn%8;F{D&NTR_k zK#GKR(rPb(Zi1cUiO$mPDwlMV3m%p)7Ww8fWaobJcjeqr*>dK}(cGCZAhS&*J z^UoNu>ne}7?ZJVYU8J5Dqgz$bZ^!G~jr6U?I--d_)>L0?rrj30b#uML)w@Ul-CD0r z)DcPgQ+lPQ=-_0X+{QE@{Oxphd+l`4S02)%I_lIkeJfRe+ev43*8Z;ge!9NcO+WOo zPVc2xQ3;}pKGRcg>un+yWBckWee{$J{cJydW`N#CL(w5RDS#c$9i>yJ>&$5yNar_O z&zqyWzh&YUfJrc^&!&%qT?DH}# zw-mD?SWr2J4znsVE1FqkbFR&-I?Q^IS=AYDz^o?BYRs%=%xcQ4=FDlqtd`75GGX9| zHq2_r><-LIWmX!qIy0*iv$`^?8^a#V>cy;{%3%+ePzYbkS=F>5))l?+!iYX!5`Fnbllwalu>_&VlpWY#8z1vLv($*eDo-;mZE@;ej6ZFiAfyu`vT zv!qC#T7hFUPpHUwEVt|N$}~W3NQhvbPh;c+zBGwjoeivv596hW^SsBoHG(J5T4XFI zI2G*~-6`CAg*(%XCY$H+)35P!Z}M?-Ie(9Lri0=N?yNLkV{a38c5vLytv%e^YmP}o z5b_Rjr;yvEu{*4up zM7D=n?aal~|1dyr$mj#UN1#Jr@MVCnKllcKuOIjZf^P_n9So7f!1owr4u!f;!NdSD z*!Mj6UVsv#A(BqQW1-#{@J$9B4}RLDPXjlgJf2NjpLYTp!F*^k_jl!S-h0qw0c0$K z&LlowXe!b@mm2+X*m9V^0zO-5FhpcP9=Zlv5^axC0qX;o-%T)d3mn-7-d>2_4VgP3 z>i{_W!FL$mr?>DCus?#NLcn8S2j0K$9)|%Z41>Mz7jW%MSaSy4bH-{h{3;~=4Et{Z zg*}LOdQFNQ!QyCf@oAVK%^8#twj;dC!l^30s4db1GuwNA%fIa)LR$;F2!Wd_s-=nI zMHJje1P}#xfba&1_{T)VFp>ADu%8g{xR^guL_I0^Q^Fc8u8k4ai^9nic8-Y87T#px zP7z+dzKU!?C7 za6oWclN}XpKNc0g5FXKxt_Y8^0XGH3aOuVBl}D!>Iu((}nDD1Vys8SAS{Zp2^d7+c zIP|I^P}eCQchth^wXuMN>2*!xDYagp@zfNt#s9MOMC_U_nDa1R5A>c?Z_Mb0WBcRu zqUzHi^ah&tQ@tU7Z9hGM_%vodWjavp0|lrh&!YS14%ABs6eZ2V#ep)^`pJPZR4%?Y z=}&zqnp4d}coRL+t}VrcW$3M>L6(Wue7+o=4Mrdn484QF_i*8TEKSw}K`AVmr6p2>2NH0`kn1oVtUbqY{Bgs+gm6myB zCG{BzBb-gQ+E{7TlvnG@$U3rEJ=y9(FfyYmey7o?ZoKN%DQtM zeXEhqXrk?=+E3T07TSR5$uN?nLsPUH=+~#V*PnLKZmRCwNjqsev8$HpCg?(lBuQ=h z-li$ph?@1ibPDw)`|7+5y`Lr?o>-W>%2p!p7*L_(J9H(iHnl)8(V%NWJW*swV z=e|P6t=G8K3_4;q>t)-uwOdz7&^BXh8nV16SQ72xJ=0PtTE|l?3eGdQz#xj3h~wCc zb1G#FIDX7i0|A~+7x(ScKfv#N?t)ZJ&A~>zUCaPx} zaFU@M!93f7*WN&W+%90Jf!!J6C?P-;O_E;qGDLd*45(M28r{yOLd0|kqVV2gh*<~@ zUDnotTn|AsH`oN$MpJY6ZVS}d1|f7Eqv=5*#GL}e!KP^6XW;&U!ftr_FDUGg?+pt3 z&%v#7S0R&V*w-Qa=f424KVyFZVhbq*{tFZPUlLrjRr)g%d;Nc7V(V1#b5R5$Tlgmm zKE+6U`Yjg@SuD2;-yWfN3Ex3chAP-6g!QTD`uYFF5xd_D`+|u4&VY!0S4Hp*L)y1~ z6!?>HLygN)1r~EI$$g^HtAN3=XjjFMYFMT^z7>z3)Wk70@S|F&YGdiTSh^1S>!JTa z^w-CG4X{!}Y}OdhH^LH4utHPxx4_%Yuyu2cZHaytpG!oQfT|VxlW=Yu+?Rs>ws<-j zziWq?9dK$IwxporLs%gd?{~zN?eT@q_<0wc`!GJ#6?HnE>Vac>qQ9Hbi~QOPV;;dL zd*g%*^!LTNeekFL`0yZ<{V;O?ih($IFh&kR^_XcEyfGBVJc{yhEDX$nUmtH&B2c2 zu>5%RPc+Pj`x9{7WE?yR)fD`cgtk+$avoZ*8kZc*M0gFI*+w*zM9hfA7`+IAOfgGL zpZy1?+tZS6@eY4fE**aSJid;7F<*DH&py}HT{+Cx?^p3kXVAbZ zNXHk~5UwLbbw-%(QA)>0>Vh&lqoR(F(is(WWVFtxqT}Oqe5~oV^BOv%rp~CN;~&)V z4Rm}%9T{&jUGtl0uc_YDLVL~htR8G0*E@&m(8shlL_hR|h7sB# zFWci9hHFxOJ5L+yH@={q7Y(54_-O6DtgSIRX{3fsotdp+oDLqZ`2-!Eqx};#Oww(p z=-9~`UeP3V|pIP)hl?8q$YV0sL{V0fDO&ahX{vgC7&f5YN0FyD7fQAFn=Q&%=8tu z^D0xglC|4mI%klA%d|+8VzC72Zc$qRBD{@~Y?m65S&EunZ?-&l1xm$(nSdMYruEyi4 z^A~FH$at=5an*niCFey;KEdTGk^5TlPf~b^WUi99YQt4~uG(_dmHSeO!p2+oMsoEG z_dU(0jN)oE*DrB3mMe;CWpY8U)I~gDDKEZ+zp#v#TE$DR<`2KmOD*TVl{|k9ue6q* zqq+Bb-fts^4|#(R`0@?h-NLWa6>l@o-^#7+Jd56~+j!;<9=wN_+Qlm#;Lcud9pc3f z^7z9hgSu!Re{CmskMQe9xn0N;KH{a1@z;*?(uDpy$GI@?*_RbuKr?*3V8Iu`kn4lE z;!r9GwiPp~%Ev1}P9+GV(qar)(O^Y^Qw6LCz!wX2*L$%#KrL`;gB=fv^}%fbR%5W5 zgWVF`1h5hTiL=)l%C>>zWKb!f+JfC4o*+6R833ubm?UfJWco4oi3|)`FONG$-80eE=e**sF(CJf% zJO%D~$UFzuw-A33@DjK`0PUu|>tJ64_eaClwts<-DWy|ds3hT~h`f%X^#D;NL%7u7 zBZ$_E;=~IkWd1uxYqDrFMTn_l#WeBnI9k3r#svCrIa=?Ey7NT*0uy4)T_`5LFYrT= zyG7XBMDTXu91+70i~M6E^|(m=M8uso5*+I2CEhcEMmr2+!*RBatxB3W&6(oZwghIC zLRA_YMIzN$hLyqS^5~UAuaZ$w)3(%&MR>sUS=?&)T@8FX9)GK8@D$gp;}m*>*Ty?_ zu^hd`>*4157~BviHO8}zuv!z`-4yRO$7fq$S|Wbd5|_C6bu0X>8J=j37ZWf(3H>Qp zD;Y<(L1>HjQ}J#)wAQR+2~u0 zxl7Pph6yXM#7gYA3cb}h`+dw=hj9cGTaV)?ig3W(=CY2WuMqPOVXKd@fY7^NV)ygt zUPYp;y8&F-$3mV(=>^fw&fLzXm5`H4n&l2X^^z*cUn@!efV6AM>{@bhZJF9owy7a` z1393jbSV7OQ|1#Ux4#qvBn~tva=IK*;Q8hO0}bo>kx5(-Cy+4d;olf0UdbCW_GcM% zONRd@XZs~R`8t$Tb!-(Iree#e*eYsw4HcWDVpCOEHx=7U#r9RPkEqz*szX23V4&iI zRqW#`_8ApBTE)^8DOXu@RBXQLuvCS;r(zeY4$D-B@zC%yo$Y`V!u_fKPZbTAr!s7XVAFrgN7dO5l4cqONm-h493+{l64H>$|>SP zFV+l=12i9`-Tpdm$Uj})YPdoD!_(S&PP;GYtQUXRc{^jY_qRIlNjiFpw*D}BQvj7- zos_snN?a3CY>xioT^+VSN6yz(-_f<+(}@dp%p&bA(Os75@U_~vGJs56t`puj&XJyn zb^cN99@5cAbSU)^epNJ6b?A3706(UE866C0%p2I0ISm=bSm=i3(a_Ha7E!xtfmH^a z3XoI@xC5iwnh_QfH2ZBxc;`=%#RXt519#!?(Cm!m@ZO3)xY=s~*920FTOfX~2`kc0 z(>+dfSqM4>jXpEcMEJr;wRWC1%J0N)AnzQsz5wto!1s{w9fVPb?h?Qc0GACwKI|I6 zb+CQ{{25|y!OGiU{Q__Y+A*>JF6{k{wq(Ky)T==YONo#mF}ax7T~Y*vh|EwEQ_PGI zP|6Io21g2BR(KV~!YJ{1wBS_)HPMVew5EuyZo-NsYKVktBD(TtG8pB!^j|{A@FZ@^*@x&QwhM`yq+`5UzZ4oZKa^iy^yfY7AxAzj{cn+GVDi5h4JO8)L- zbA{*BN$H>|Lhq7PtE0KXCsCN0h#y@vQbnboHrDb10abJYZ8O0+3A7;%p0CR<))cbx z)|=X+MMtj#+B&S=qvV_8R22Fu83etjNQ+EqflndvbBH|)VQ1jS^YGne*m)JQuS3~u zpl(9HU!nhfSS>`3C1QQzixQ$f4H82|&2Uk*oX9UNa-&61Wf4Sa*7LQmPlADa`%d?ikQ*>tyb8aD2vlD=&~t0yFVenk3J!hnL0CV zt7$P!&#R z=<`q38G$JZ(xH@&qwRD;2cypb`s90SAj)Vz?Hiy8x8l%;yj?r=@fMQE6%((b?+1x< z{)N7>_IIe%@933($6aB}PdfX@i*1h=82@t2T)1yZj=sh^EJD~pH+aUyEIIJ;WRSS4VC*t|(N+f1Y1 zDiF9!5HLB2TKqc%4PY~CBGy6K8*L&x&A^>+;Ea3d5_G+vxvzP{r8ibCogw*56Lq7u zl=|4bFZfLvMhSuWieFb`hyOA1_X^Brg1*x4B2l|7wbx2}fgc6^7P8vt2ij>)dd-fS zlV*`_Nu5otSP}`Ad=u%~r9UH*Z1yna)^Pfz^wCH`oxrp4o9-Ik(LuxoqD#tdjYl*9 z^9dG4AHHNFh{apX7tDOcS!78TUz+*KFkdO=i(r}MSdhbfm6NV=F4CO16kxy7C(rIVazw2MLx=WPqN5onD2S!dx`l*v&b>5P9}54 zv-pY3H-%-s!qimeo5p;3%r}$yW-;|Ti+`IH%x1oM%(sxmFJ_U8m~Sb|SjK$InOe!z zYUW$Pd}~Z5e$nbk+U1E5d;T1OLDoeV? z@HWFc4DT`w;Be8;kiri1FW^YsH^%1$an#1oMz|Qto?vlq5ihqGf0K~8VI0HB56-bP z_m|@s$rHY$#{;nIM(M_kJ}W(ptoTozN0Zu zXvx9ln8>XJ&RcOz=9t2*B#v!3w&&Q^P#Li+w^FI>$+0K5yYZy%-0RJ;FUJ5<#_7j# z0M8o8aWKcB+@cvKSyvwA?r?5B&h7t?wf6w-qFmem_b$&qn-E|V0t6(m2>~OZ1}W0n zgaDx^p?3%!u^~1Pg-wVUFhEd1L`rCifMUZ2Na$Elu$^NAREml;X;Q!c``H|Peard3 z^ZU(j#yNAw8DJ#4`#kq`U)Sf7?A}zi(TAg2l;bq1u)g3c20dj>LO?=}bWicBj_Y1}V$0pu=*$)$>t=`@q3#8ZSiSnJBzk7OzPnqa3D{L9vF$ z#^R#V-C_1zU@VDn7SrxH%Ccp_Cf&@MKMNQ_xLDHwpb( zSpPxh$ufqVy!7v@DarpY$2J0^C;hq~dm9{8((k$YiG zAKcO#`}W1*{qS?)BwybZ-tj-}3j2h+!fN5J@cjo6!*yZ52T|6AWhdaR6S2u8d?moT zx%f+-Ny$+@!jlM7F@8EGO~XY`VRix5o{7;#h_f+k2J$mVb1``imU{tvF2vTdQk;)b zi*fVw_*OAqTY{IDVeWDqw-g(`h`+7C1*&~CZE<6-&9(R9? z9Y4Yf;{OTFKix{rKVRbWpX0Zo^C$8T-1bk@-(u!B*zyPb^E>?Ud%Su85AMg!2XVsB z82pIwKjGoS_}dYLqj=>PO#Btk{)X3n$2X4Qn&WuwBp&<&^H1PCr_mRU`Yet)gQ@3m z+j)HN0v`JluUy2)WpuA#`ZY|8n1yCJiOij|{j4ZpI!M$|({h`%L)lT}L{oGO z^)Ex0$`Y5OqVhy8`4vpCoXK;v(qysDH}ncl5VT#eislzk$=M z^W0E*D6Y-7hswj6I(%Ci7uMwlxA4MSx$w47d1%0eO}MZrb94T*6@Su#XSC+RmR#s_ zVFnkbb73Y|X~RibT-bpN+w$6uT(dJ5-pRLRbKxCa*okwxFn8y|Uc9y^kL$~RKjz+i z+W;OlkYoFEFq9V!<90*1=5U@df}N2(ZWPbFn{OMtajhOxZ!9^N9Lj|aK% zVIKMjH+Yl_$Mb{a06S>_aUK?=XWaAl|oX=IJvcQNEr*X>DT=*1^Dqxzg`d5N00P!Mk?x6@i)meR}$wt4rVU^+j`s zFF6p4@?T@rFYFxQ8b5QkFmjJ_$*(Noi^ws)ddhH(dj7!$r#T3XYVl{-y~webdGRF< zLJ<0h2uo`F6{%nfQ`-~6)b^oh^>`TtG3pgp#Z*wq6_pM*4p3Ruud0%(sgz_@=SJ11 zwgKwSy;)_Xsb06Lk8V?s2`{~#iZoC=ZdWZEt4mE)+g7Sq3-w#ND)LpF*xuTxxC|AS zrQ$lO4?C&2J5*6OmDN+79HNrK#YFNLm35bzevgWhy55N@HeV$@rP2yiWST)0ttnJl zGnM;{>KN`U_AfR~zQ*vjPWj?_lNH8#h2ngBPdV4kZ|U1rutml1F#b2SRh8YTTnU@+ zR!3!)+@mghtiF@5`92j93)~lK)?StOnY!|o`tEC$EG6>aDf?UX?f1$#pspQMXMa%F zB)IgGYI#VVJfbcfR(x7H=aqd<1!ojoRUR1ThVPo4wUc0bi8ctBpo;C(vZ0>sw6Y=7 zmWWDPw#{AbwBEMU-*yJu&OqB4V7o(XCzNiSdu`_-+nH!Pd3K7#-e0htV%uG9^NY5# z%68Y-?poV<+jic!d6VtFYdaflr^I%)+3qge`@(L1&~|>dox`?s#7H+8C+(us_SsYR zh4Xf|OZNQBcFIM&C}I~$h#s_XY$CQ!k_c6lE-I&Wd0nln{vlpx#p$F9I;*liT}c-u z=#U~w&1U-9aKnDBm7da4_wx0%*7{n8PR!Kr$iSGT6Wi*;ZS=MF`e+CJLr2}dlkVDC zzjKG)aHsB*t*>>}ySwOHyBP{l^PYNKZ#|`#?%iJtW;1=Dwg>2k`{|2)b=yID++aO5 z$G|)v8K!#=)fYzSYNPbbzqUED%DGqbgIY;azBDG^N7tC3lfs?O7hzI9b&~dFr}MXk z4qjjAL<)6sxX_Ue{@Ph4N8fd>_GOhnU%$CPe_y)Ic|rGBtk0~_Nz3$^l{)@qy?M1x z5j{cJO0OEc((iADxuo@a@!OijN4;62Km)exfgc*nblzwB`A@apqZg;^ZOZbZt(p}r zx2DygzBRA6RX4}D=DZo!%IcQ;r8Q4d`LZr)4DL9PJc7Fn{1xU}>s3Imj1-UF4G0OC zQx%;mh}AJS5xs^+;osXCQ+r}X2~|nurTDUDn#DTLM)z3^oED_p9)^@ddDd}z{(Hyu*DB%)Z$c2C$6 zplE&CPM5BqOM)uY4rpKLKwcSbEU8`@4KbRdbZU81^y7Jk36@${N7d6PNQ#E0J%=0V z_-1BXSFN3vp7%GibV_?u`@-Ff7$uU31OT%?)~>R^w%`WKnQp-{LEl)gD}?I``AV3a zIRHZe9s!sSun}N8z#f2O0A~TN0+f{@Fcd1q-4}067oKR9X$XxFTANNKzZ=5c#zXY$^Xa;E#@fd0|haxPFRZKEqOm7tQt@K41_R*7powGW^K!8^bwKY!%ohZ~-F7S2iGP@Z=|`K*Ynk z3S=$bL_sT~Zb5qmcPJ=QAX>^&iSwvlZz|ZJV25c{_I4}(Qw94}%10*0Bmjrtiu_ue z2ifqfEyQMft_|yLSYg9^Hte!NcHAOGR?yodmr*mU^|@U;B1`^VlPnb^MVS;$QUpm+ zBL%Z8VvA^E{WSiiMh-Rj5ty!Ft`@NiwiqX{WGIS6pA_M-Jht=jMOhh>SnyC{B?&gh zI4GXaoU)h`V`j-10dB-$Oe`kEV@zd}jfzP?C7#b}n2?CJNM0V=vYrF-HyL!lKqGlS zIR}Uj5gsN_ppi$&IZEDf;uFN@jaNhpsqthe&z@#iwAoOVmEaP~QPte&u41c}|0u`~ z1yzytN=4KaI{3SeS{fMnyPCR>%p&tRI}%dcqqYv#Vq{{4mt(O@WsFq9yKlfJ67Whz ze7h=UNq!sUFC@sW&UF&IcP`R^|Jku zb@>wDL*Q-}e<{-sYUn{_pRtdY*Qrg6w3xF}$5|HCQ@&uP%IdZ9*OaE$&emp4yh?(5 z$}55u^B|@`{x%5qQ*fSqG1dI6o;<9o98#hl<2daeQUzbwx4otLLmepMx>WEGdEbS6 z{vXLZNdC_xrJwRt;}OE&34bH!82Lv{u}g5A;H0s?2B*k9P4EZ7Ir4s#T&MC5%eGFx zI#LVh%)MKK7(XUzH&??m8s=#pi0Q*IZY27nF>b6u@3wsmgU8XGfMuV+wv!~HOC|Dq zj>I(i-9W^JaC{|2SJOU?!I zFOqwSTv;VwB{yPz{}M3JS2x-aU*qNEy^UiV@MSS{iIpqEjAoygI<-1;el}m}#IfD@ zTz8(;%MjNqiStTqSJRmbdDjdsGn12x44oBbGt6O_$L<2g7fg-@R&mu#fhp-va0!@%3Nu{IP#h0Z&dM5D$CcNTmrXf{#XZ-ESWU_gW*$-y^73Lj4j!z z#!eD*ZT3=`uNn?d5~*l35!z&}{3zwc80V@lNf`;q6sX)eibvuW$(JP?m%bPl{m>GR zgD_(-_Q}DzLos?7Mh(GjBe3I0%o&4~?!jg9GkpY|ClDs1KM8LVufledJ@gJ@MW8^| zH$n`~AZSBJGU>-GO6W+px1}2GX;puEdIaHk8aIKSd7LIcL3MK(-r)J-9F9{cHLMNI z8N|1$psC{0N`(yb%E-f3{&%}r?5Qc{h9DagZ-7o1s(GQ_EQH488kgymQfts^eW}zP z^tO)Pq~F=7y$#ymtfR#yv_rdFL#NOlUG%Zxt+|OPv3g&Ul{qLZ6iH2{l(I1ejCm_N zzKJyYQn_`4Bi{x!$g;g-C&FmgQBozRI(_6_)e6)kNAl zu2_*M)7T!l5h6E%Cs&ll0JqEY8CHZ#N}?V3(#V!;>dp&hf!Upj6Goy6q3p?WP6=i$ z9$leAN%wk1gl5<+11q(`WLaZ%#DvZm^uR5B%!e2Hns#-6JZ1(MG58Z=ox>(f2UzT};@F!3XH=K-iAX9-O+@B=3SR3;`zX3|>8tag}LGbDEe<&J^OM z)M+L8f=YXnK6#H~MV7fl_GMAVIM!hn`{JEk(wpbJ!Wcpq-M84;$o_WD|4_W~3R2bQ z4HSK-^7g4yAE{Jh&fdzL+S) zJ0Zr2y(TIv2J$UO6%4Umu_XufQkK6u9(|p(ClwEw@V43A7#X@F|*wU2hMQOQC=y>hK8IG<~$xKh_ zRkT-KyGhzh)K0SYYH2rBSFEj_dfK~Ld-b*3NGCSdu3WHN=*;$dXJ@U3>UlCs55UMk zygCFgkHp8vV3)h__IvQ+XpD@-6OUllLpbPhTrvSSJb{fT`gFod&2HVstjb@ zK<;GI7$4wZA~z`tpTH%YwUmSH z?Cs;u;!HTpAm#)yLSJC_8cWr$Pb!K9yr=SPb+U}wD?3iDFj@sQRcx|y8><6DRn8dY z<|}uqk{WS$nhFXO&r&S8m3b;hk||QOw_W*Ll(W@nfX)x;)jL=kx|d%P2T&d4SA88m>QH)WORWAu z$Qci*W1&hu*wajyad&~qGnPz&NFmIg1=-I)>};4VL&RK&DuTiD;Me(Z_&Jy&NYw=p zy9m@m$Pu>c63AT&amyffF|;j)jFmvEAVKb6@0iSEi`{T$FO(cI`4O>X$o+_I%#+Md z6zsiEq$kEqb|bqXEEv-OrL9Ps0Sr=xCHHG=)H(a-m;f4cQvN0!Qz#e{xYVm z#agRSzlyU%^&|6jjD8JM#J=^mA%tv~&#znvg-RhWqrfO6xxXL%zw-D}dvPA8$j0q5 z#zwHG3ZA12ACNEM_Z^fY z$#)^JeM;Wvl=)A}xI(!Rii_rq8is)rWO807(;C*X7ki_*^<$hD33QVbx#Y*iR`j^32I!ctK*Hma92fTQdR6?P+9A=cZ&c-P zRn{SuBnXjn%89c5J8id%?RB-?zBasJ+$Mm!zNMAY84}GF0XabzOD?;W@d8Cc3y{;! zSkq6n*C)h+)kCKU)V-g1r2V1#{5UOnsOgI}uF?025lG1MTXbK6S&1EJkLGmkEQdf4 zRe~g%Lgx}t@I*#eOlPrB%A4zbs@x+g^9$R%Wam7peQDJxwNI3KC$1YO@=jR%yA>_o ziPIMRWuLfe{U`5)xF*ChA;yVl@SW?%iNE|3p;^MeZkC9x4o>Kl5LUTU3&gB$`Y21C z5{)72FKfjA=!*zV5$d`r!lbwUn<)ZC0~rC)rM`&2n*o9=@XeTKJ3NYTMvV_X6NqC!Vb@)09Wx<^j^VW72<0s z2S-k!IW?p**qKMZv;)tlUuc7(*9X@HxX*?4RP` zB)fkY&z@lPf@qb~L-_(D>ZRP#itkrWp6U`PLDP7Js(6WVmnm1kK{fS^W`+yo%Qv&F zp{R*Imeb3?|0_y{uFyzH&I;`=(@jxtZt=NH9*X>r12n#kLrmu<` zWB!!lTop`HIU_VnV1WQz0yHxQ6{$CJ`hY*uSW5h70OtTcD~c&P@|WWo2SwbS=ubxo zOU6<3@Wm)$WalNsm(gE~!8&vg8Yg+oDfCYpWhSLJd6VhxX9%AsXE!N<88%?t$Qh!^ ze5~etVY}z-7Ju3?wKa$&B2WG>Evtn7eYE?j-VN4=%dEHqR=0ze_oL*6 zJc&!RG?h=jG$*!(nLeatfRbnO4#0MRcbd=yh)X96xHC9y!S4de-JooDz^;&xZQMIv zU!ysDJz={Tcm_aJn54K-B%1Nnjj3OzijlBWn; zqWX*l_hE<`XWAR(ggW#DxOw1Bhk~b}&J-vvgrr#zKht#n8l%n%a94u69{l$qYAbl# zVdcjV^)vWCn*MRgxr=|swb6AjsT^Vy_9=tw%j08lsA5f{Yr`s7P}QtC3TxobT9}oD z8PWw%&sbt!Yk)x`+}aQ!1LHbjOh+teiwSq4myK~-H+-KjF~D`B3R`q#F^;LKwqAXH!*#asZ|2OkZwcwBMkN$+-ODdg?^1wzr|#+ za2&)YV$D5|RsTfkyo0Ma4C$Q6jAF}-p^`Y77E5jdI zI+W0eoQ5>1DQ#^*b2|~WBR{k{6b++^>7IJ(sXD#8_73_!{x`z1`R%`jLbqudFzQyV9Fl}Pk z$Ynp^*zIiZY-z{^M@UM+Ri>>2dC_^m+Y8`eHOIzZ9K!;j?%tNZ31KQw4bQsYwCnl?cA(yZKUTl z)^RQLu}tl?(OHsBYp-W@)oESyrCvI>hYot{f}T3IyB^)owAFMSpr?)0=_7P;7{1FJ zYF4x&?aF>O?qMDMm`<6fqsHpoTatZ&+peQ_nVQ;Qx9%^3WKGL!XrVyfT3X2iEtVd`@fPG+oNu{>RxrbYxmHkY!3ryQ z#}G(xyG1)JZ>QyaXu)Te|GC9qSl&L1zqI&k3%|1P8w-B03JzFw&?@=S5__lkw-d^M z6AL-A6sQ7eiI7qWI2oo0d!!a5+y+i#$h{qcCJ;1*pn1rz?hMl3X9y%c!0l@YZ0;n0 z$q*}LE^?>|k@962{x-l4@GZ=j5Ch>V`D`*yiblUYK2QdaRK9E$l=oGT08HN&_euLY@0la6kDEQrbA;M<~09yyqx4{KP%KjA$iQ zd6{xwG2gVVJ87%zv!r0^#Zt3}(@~MI@PPmeJ9#F~7kDlHPrv{f(Tu-2euioeUpy z`abp!GXBKw3G=O37GYG1%c!^*m03l(l8sC>vug3p%CBcwj@Ve$X{}P*s*DaQxKjl} zf67*yyQ#;zs|MkB<9si5slOWBS3NB|vYskIGDHK_Cxg{DIqJJ1>cgQbW~BOZxEe4@ zbs4RWk5RYWqwc&Irg)NC5~$00YE-VeBVU!9s%lJA zHKl|8X*H`*^?y>mGfTCescILgM`x>o=Ty~sYVsUaX}+4dP^lMGuSII$67_Ad8uOBh zU!@9ORzI&%$5*REYt_Yd>gamaQ6}rHs?KiJRVa4fm@i4;VKw8B`sI{Omuyc2pBP=P zwssq8Cv=8f5umP23ceBRSaKN>8j@|xP(3SOdkc)GqG*wMsfB!-wOH$Ay7(pS$Q%8N zuJ@YGeOt%AuZId5a=RY>kNMA`R~p}9V-V%Di(lX9aiOtx6w-})Bzw(v^} zd!RJ7!~5tSmHtGExs`osXU^v!!t!JCIw-G)a(gSkm*O1d4L4ur;C=;x;-?kPR{k0l zT(W}^8Z4`3Rm;n>R;{oq9=GJ-6>Zk{0NR1y3GiO1)VlycI<# zkXuSMoSuko4WrUmy2%Jc*a&wv!Js8pZ)b4pD2t)MXx;wP=4}d=hixhQ5e{PN89aL) zor{9;p~CR3kBA~nPR=Vt z>!|2;O5Z^sE4H5qj!?#V!a7{5^c}g4gQg5km|L?miuqn%6VMX&Q;mdRBD02U=}~C@Hul- z!CIC2im`7!Eha9pY<;BEH_AI;9-*0sRd7hT;Q=HBk0&qL%GQ32t{7#CKTwK4YHKmD z#z^r;W7ASJwuSB>3UC`88~Q5*^CjtqOOgQ>QAJS319b8*EkWUah9nb2Fox~xVQ3p8LFy( zzw!g)D_~&}uMuC0bP|~kVzVE&ELRv@w_BWHDOmyEXYp8zKQcjVko$jl&(HtEialdF ze_Da;Rs=tlWLmMPju|k$Cg$Gm-wCzleqMSxe*pT3Rx{Q3;aMn%Q=s-tLz+sS3p1ZL z(2sqKA$gU7EkE!Y_-{k-Bcu_Q*eENQtTGrU19dg?_{G)2yKcg3w;Wt74IlL$PJ<*qqj0n_$5iqj~FnuPPp=lxJF2<@$Fl8B{_(@*G zwDst`k0jK@Ex7Cx94%V_kxk@oEXmvxCck!B)DnxfAr(2qQ51=xA#xwCMmg1KQyt1` zM4Ortw;;D2!BBEW8yD`j=@dVWMm%kn2=+{>D$n_B!dX4 zcuOz0P1tS8Dw9Xv$rU?slAITEeU-cG81DHX2je*VF+TGw2Xi?H<#bqR>M4U)3`-E! za_|PHzQw+@ux&JV(cE2J@S!;}+|N1dEN=?Wg{WK1i6FGz_#rAqu7xts-lx3Bq@&F& zG!GUkPuM&26f9KIw+QPLg#pq`iNbxWf}hn*hm~_kwiB4;#Bh8HtGrX0K@imL{ zBvXrHAt_78w$YLHx@rd<-&UjSO0q*vLQh?xw=V3iGs1|LD3Ec3wJj6tP@O+Y2M_DC zKAQ8j31=4^yVc+{F_B)8b z@5jg~{6WHTQmjTaNmC@67L}*S4Rj!dCW{+fI`W#+T`lPBL3Q%D{q7(3tEcUg=j@~B z?Gu06YcJbRD80efkFp*fts_zTa-64?-3{u9?8 z#3TFh!YRCV0`va%hrUyu-U%rIm&`WXpYGu73Nni7H|L_lu+^FZ2{-FW@gHQ(NmP0`t8%A+e z=v0oo8-Vd4f+_XtqxHhPhCU-E4>`!6yvT*?NfKEN>I@KsALmRY^VL^!qwP7!!)y zswX>`OOZd+cwiDAR9TOza^qFG3F_I$j1ZJ6s^(PXO;b$^RJSKp+nH+iETca8MJjK$ zsyjz5lRndhD(VHbagp+tsF`9Ueo5^TU45-uwN7uL99b4|kfriMVywNzQn-)>%BnWVD1YV2a-)xl7G z>Mj$Y4#bC(uZtF#v&>wOWEZf-MDqlZ?Fu)twz>RpODppZ3%XeNm^pErV-}tlm?U@v zSO(l!fQkS&fRkV}rJx!(iJ(GFNfKdVQgTxOYML>`6%4Pms!1B_adSA{C{OQt;2%Xk z#T=2+G$urepoT#?WJxEbVoW_u3g?JiflJ8Q(H5_DLMI2^5$H@sT4;=>MRGvw$JdWw z?epkfK=>1#%ZOJ|mYXr{2nUfnfLu{IMBkWB!3?p=5Ehw5C#|4hv&m7GUg-;(aB2&7 zGC83WyICC7nVk-td67}*U<6waU%08ry9agWMvNL5J)lA2< z(3q+Hwi?=K>2Lirl)L>AdhNp+p3u7%=#uA6JE5~ogZ#W!YiF&-&$KT$RrzPTAySH( zogpe;8*pC+U-lrf=}5z%HF|BaSZ=U05oX9X#LP{?sgTVtKT9k}-V5Z)0k?oMwBWN zV;PHrC_*`Qhg0fH(s9FBiAyT8-O=2Z-53=ls@k$p5Ow#6;=@X;fZWC`zo4y7Tchpp zPSrvF>ps%nr@BW|a%7&mWV%Y-y~=B`envQ?w*@~7f=uw+o1wt(0Dcb$ zdcwaenaUXk-Uuid4*qBeMuLAA_+xR zvQ1Dp!p6_VTNs5UWida-yzgEabjzECofn4Hqk@#KS8?oli^0cQzf?lFv=h}9-xc`?Qp7-i#@nOOPn-uOl6tS}zM;csEq zn;88Lx>7{79@F2(S{u*{6M{*bQGI|Z+cAF&w%>+PTQO~yq1MEOtsEJjqAlCQ&oE;j z($|>%IVOIIF<)T(H~7H!$j1$%Cik@A&ZS&L2dD^%%TTc(Yf=fsXZ8w^l1NHQhzZf!;(%Y{&yf5GMI@m}G}g>X6he}l_C8p7qe zT!+iq8EmKXzk|z7{m*bYJA})99-0{cg3GlI;c|=rkKl4bmJ`0*b-3L8v0Mt5%f1em z%e)SkvmfR$|Bv8uC?^N3LZmARBs`tZgsmPD&v!B)ApH$?KiX2v#&nlc^q8z7>+Z9gQnWyaL zr|scq?W^bQSTSB+wqq|DV^Zcd`&h)zMExk~?UvpZR>t3I>s4Bhbo5tc^yVm?5vwC* z^_Q+bQ(i~M>*P3HP(eRdS$maqW`cgRihlkE9aPublXQU$CW$&ZSr??}j9NM~Rqw2; z57f~wNtbs$J?&;)AdTK>`pX9TiTXOTk>1`|XWp(GG|{g$H{+XN?iRK(ezv6cdT9q8 z)mdj}>r@Gh^w7})Y7k08siskyACUyX0A27mmR-Z^EW37prJqDsmjKkb|H`uKHu3+4 zWoQ3SEIWINetDTL_m)msZyKra6CESS9f9pwmM2aR`9jK-sWcgpVW<>dTf=GbBoiSd zicqDIG=wkzMY8-A+=M{XmxT=!yLE~DZt`1^CCb~URV}V-W%je&)rOXkCR)ugEB1ut z{$b^ww0fPhobv{ifEPn8<&qV1+48R$Y+dQn-?sqd&_{@ghG{V%Us$;Y%UYvEYyb*! z%YjqY+={V01TH``Zs`A6`%@WHLxpzp9oG3V+O!vSdn5b29C%zNigh2 z@M;6z1VO5C2=uB0a5K1dLyPRKfVY5m8*qI{DD{~20L%gB9`GIo_c3#|#wP$K0Sm5V zGI*lhKMqMD^gwL139|rZL)ankm~;Zn8|727YU^qZ)wi?t@%B`WVQ9jz; zxPA}r)|2!5a(;iddvjzUw-9vLy}WfaNABV0$8ya5tj6&t4|2{Uob)h%Jb_~;vOk&i zbQl5W^14WLn7d8T;~u{DR>dcJ_1ZL8I(BhZ&Bs zo2cMs<G!QI#{dyH?;SfPTpV~+G>Y}o!bA%ycf$p(UtaS{jo0iObflAg|0st z@?L_NFTni<_*;6)2@?~(Yf*|41lGg%d ztP>%khr$>e*+CXFNt9vBOQo+LZ46q&%Ok{Ld@MQ@OwEd<4l^qvCm4NO-C(MPM6YnF z8*r8+kG6-X`SYn**cNFNX3Kp{KoH~cz7XCU9onnh4=`OG#jVJnVYCFz4&%*7(N}b@ zT!G~AOEN0A+t=9aKb8y3aw;S8^;;CRf!cge%_YFzg&kQ0zsmkP_FrdzJ@ea~`>t`T z%8n*~Cl~EvfpQld;f_Z+{xH9KjQ5=2wD7zOSUgVVKJ!*t3J z4U${wW9Xo=ut3Xd6>l_Q%&>x7i>HJ?xC54Z(89yku0xi8#7aAAIlmeXjC|sp6P9z_ zN;+vdXRRMESdM((E?Lf1Yf!{;WPD-6fe{mym|lvbz;R3rPCjKa-9KFcoOp2Jz^M!g z;g}y(1xLpGO5i0zEm5dEaK$}R6UHY&d@XS5Liu{&rGaw`IQ3z1V+dNn;nu)S!S}(* z09ShP+Jch>ZYDVGO-G*70UX&y_B7NNryqE|fy353>A!Y!z#jt6FyP@(N9;GF!5sna zU8b5axCdO>l}MG(SV$cQ{zKs^b39~C1bKiR5g7t-L?wF~YR)zOkb)PXf-E;>LOBC) z&Lkfrgg&FI&4~OA1<0kWT47)oV{3`jYq8@Y0`F{JZ%@hL^`kWPj-&ls53)uhT_&WB3QAcSU(w00sYLQ$k}^I+BxEh*>=0og!6K;;;=ff0tql8v>PWVz zhUpI~1zB7utq=-X7PD^Rf7D^GF1NXv`4&EPtLZyPXw1W!bM+R?J_qR>)rO%xck0Ub zw`C~{yU>NN-pP|>LC~GKFZCKWW=A>m zFh6~a?>)hPNV$MG@niulV#_ryZ>edd#3YrYRJJV8%BWRQN?g-UjG9(au~d>Js)FjO z-R+7)eRWPdXeA%K1d$hbD6o^Re0RO0}F3aP}$uQYC+3YV2aZRY^an zw1cYJPl^wzD@WAG-webOgpF`UdH;oq@D~gr({?)AAS8tUjzJh{{|5u%|B!z0aw+{l z&<6rQ5NhQqyXd?93krpLq1NoA-(@Qc8`M;L0<3zaY zpo==1F4v)*&DGSsQ_GiJvOMp1GeBwCR?C*8!XU%C^apEqi1tUCt>Qy>>p*VTAtu`G zqm$)covYzV?FsXFq5eivnJabT3JuG&_p)|h)wou>>vZsz**Us$Vg5k3mDEp(4z`-h zv%g0#lhZt1uePkT8!S7)Y8VGBm&06;W|^3oQ067bdldr4-)-}ud$b0g@z6~--?2=| z_-7ireoT9WER5-Zsv|m`O`~XTCk!NDl5JMZG2O76RC|Z{R_tX`Cqw(7*BhxXru4(L z{qcR-CgkG51qja>Ye(w4=#_++yXBO;n$q7O{{w>W3B>b1gM(RI<~3u%;*FfNleg^R z-KW^O!nxwlY^)}BS2y%gIRjPJ-6}@vs~%DV9#hdzsJL8}|FlY)r)n=yRf<*GG9$v% z%PM}gN?oVszo(*hDf=UH3d{Ogu4`W1OChHyn+?5{9 zKU;Xjij&j%za7mWNAus#W#_+~%W^0acz>PC*AL~G8=zhS{KtuW{Wv}(!n>Tse;vef z3d_hKr?4Es>Hoi{a5kjMLHzGeVdsB5g~x*Pwi3*^dI10T2vgZAjlO;4N*-7!|c(W2B1M@jABA}o0x zn@DTzO7y}KAO8*PupR?B-8NwAMlAXO-JR&|MnRoBpCa!?=QESwTl!B#X>d3y4hqAh z0y&bZQC1T9;ta1(xvi;_Pi_XeZK!!B_3l7kNAj|$NqZxd$@+N3opiDbd0oltCJn;m z_NLKt0QDz#7{!btXFTnAlA^^mv4;G0l<_{L@1i~*lV66n)HRl&xJ=F)$_++wFq((l z%kBhrayjiuM(L5+%bky~f0&bxnZ%07>~xh=uJDvFv?3m$bW*ORvZGazHc8kRxtY~d zPo^n9Lpj|Qj8MbxGM#Rb2`XWt>XWacr>Qvws&1hvV1>D=+X7X6vC3VmcD$;bb?WxF zjh&D8s30`zOA_BcWjfk2&M3H~AjxLI@{2kDoQ+~XD68isXiCw1i;hpz^P1?1O?5^y z-92nfYtu@nx71yI-KMqvs+~Tbp&MrEC$jWyZFQSA`i}N`YX{w}qpsFjFX^PcJM@q{ zbx~J+EnDyFqF?H!-|V3`_0&sy>kj?(1Sw7Hu9x-GYX<10VTR?xAl-Ga?vkT_8=~`v z>6eD;2m9z1Gxfc*4dGL!`(&B!R~TP+@_Lhh?72b5muT2(pa;pHnh3y-L}QQf<$65P zf}gFJKddML%a?()8=&|`h)ac2b>N0H$Z8k@F(k<-5R5XYlJFe?U)+kFg?AzMrH$xq zMfeawCW|jcsU~PaZ+0LdR48Fntf8dCA$_6>>v}w_4ressCe64+nAJo1>Uh3ExD)F+ zNdm||hB)U#UnyLIZCm7f3+@d4flC|`iF z5aa<&1$PR#Pk~zi?$hAOzW6zCo(Jy*a0P9;6ue^KRp5LL&Jl3Wnt?6=0l*?e86?OT zGN#r1uUL3Tu<(*S6!+0B=%u0G@V_zPJ0kQ!f1qh#NtV$11Y`LFaed?=PeIN{eiC`A z3FPuj^or1t7yKFIx#-M6=LK{ZBFr~k)vy?$7(LlRFGW~`uoB^AgjEQyAgn_PAmAIu zM@>?!DM!qf>-n00V9xirVn2GvvD;}Zcg`S=r^}TUh{@#O#)@4em6kqA-gt5*nDQ*= zaZ{e?3>7a%0z5pW>VZNN)jK`I#O?%Zmj=6ux>RCSxLLd`Iz`C@(+;n3-OVV z$QmKn;oL+9Nle%0@y*yT%}o#FS|OwLHVIJY@?&y6TWI8h^eY^o0&)G7RnL`E|0u5_ zu8PE}U*gn-3Mx`by%VpNS5zkx)a5EFuCj_$Rkz=uPE=DDY8#G?*I4Zwq1-&R_D)}?@=U3{E?^VG;6IdJglgc}*yz?rEC|>|mO2^7;9;->>lVO=rmF7C3 zg|5;{S8b`&eVrg38JRjk5*Ar{xP&a)>xLclkTyE0lg{aEvT5P~N$8@}dg{)-b=B@V zW`OS8PnYehV+QL45#omFazpj}k-9=3-Q*4JZqVZHNU*Fx^tYcZK4OV5DUx4!s z;6EYfOUU^a?C*fS2mBhk`~bKgat=c6AK|7$;QRvi5x8;;-Z>6&r=i|Su>XMN=S*-C zPeI-DQ124h7vROqz*k|8h))(y4V#8as-Q2KFAoDbS(;;3238YlWhUC~a9DfH$wCrj zWkG%vFFT zMVR^=elJG5RhYH`U)(Af3Us7g;2YB%B&8d^xK=t+@odU0B3@*M4jDbV?IZq_e)xh; zd`@3|P52L*EK14E>^0(Rt=JpHHxA`r?lWCuIs0T?qT&-(T)K+*irWY-Lr^5j?POZF zBH79lb@W>W2i5cERMB~rQcFT{=1cBJ>m$vK0U)!D#vZ!&K<#xml7c%ze=h-{O`l{{ zdeRy^)pCW(`?U3D=&Z(>7SFP{$l^H`&$aM5%Uxvo^DSO#@k+~GWjQZdyxQ^>TD{g- zyw-Y7DymTP|-?Z+lZUt{yb>Fr4ee+%YuEcV-TFz$cwQa_p&AY7V&ny;) zws^C}q5V(e(B`i!{?_8}!;+LAEIeR3uj!yk<@kpzIBI#nTE)Lv-Z9HNVR^?bK52Ou zEbpS_U9!BZmKU*-K_~|xPp+qpupBtxM}eFe#bv>-0A4(Jao~xPoB&uAylRkE$jWF*85NT0L!LF-|`JuXK|4m&iIR?e2!6_9O zMO_q)@jS#_fS6EYEXIFnjP^AX0v#jKbLq>qae;&TH6D#dFABdZix*>Xbs1bx-n3XY zio*r*_+4dOP!TsI;Fzkoz%{qcMu~Vw4P4;i9X0XA6vSj~kYsQ=cq3wMj7`Ofb+E=w zm>?mbTd?3ZteS?A2H2$`E^dt21ix*HQ=4O4NW_&&=*t2Fm(mltwf4ZM0eEc?R=>Ve zu09m255ww1u=;SUJ_=jjg+uSgHKTFjeJ08s`v|sp5UW3mgC}5(iP&Ni*0_F3cFxCI zf1Q#~nf@|!P(Fh(rKjZcSX+)riI_>A=q;SS9;?5H@$X`fu+(y$e26~4vzsxm1P^S% z=eFX89T>k8i+5qY5ApVG=d@`Hav;m3G~n5L*g`+MZllv zUBqHBgj_-va}E$9c}$+Bz!ql+m8~EE2g8Y#W&x)nd6mekLVg0dl?gp!QErpTsYPCG z@^2(aCGTeP>KYQPcN4j{{%fhdsv-S<)V=$IPi6b}y^iBNj&-gXgEixWA+%;1nk0rK zvRg9-V-rIp`>~BmNlGPIGbY9+Mm9;skX^_wNw#BC_7q81B@|tiN_$Csp5t6|>Gr+v z>$;!kxu5SZ&p*)SGi$B$IN!(n{d)V2mDfzU%?}7Z?USGAmpTYsk>8}@Yf=4MX+avL)~3^SD5V~Gb%|~#uK~q3 zq{WSieYevWRoXWsCFiY zmD-t{dnv6eP3mT*+}CqxcV8;kpS%I|Q$KPBk{5;`)<0-&Ixv)mK0tZHC>T!eW8{sX zmLusOPf)=q@*byJPmCz?scbRz*h!^#P`mf&%XjI!{nTy`<;%YN5aB_>BSi0$eTkRKcvi$Y1T=a z_yr}LB|JmLUlE?C20v1r3v}*hTKzk1|J8J^^|?%SL^r!aGo*MTO7>Oqkvm!3MR7WD z!x+xgTqBOV#U+Qq%+fBryWh1`QjJq}Aw#^ySd6CbN z797do*es5;<=*W$(t-cFn-_KDz2Zsh%soUT>BN1zaOG}X`ChKvl^1m9*dAQD50CB3 zm3y-|(}wip#sj!=f37!}=MLhF1Nrs)IduqE9?GX4;G~E62DwN+%&Eh<-XmOj1V8a8 z?;XiwNAZxyx$+YneUgVf#r|lMDRam2!d#vZaQ!@)3i&e*^=ZDe?xaf`XkF5kxfcIIOKb2sPh;A-!3 zmt8DnSM(ll*<)7!l1VSOpDVo2If53Ejm&3kpXSUjxcf=Y|5cDXjK6T6h>gE9$y9tz zZ_Fs6uwJh>{KHNA-Ko3ZrN@V?Jk?C+ z`MOVYJw8*bR@xU}S_{+2V7JkygcOl&?446P88W0OjT^h_&fRpLzO1*rq8q%b2hP`}U(>bc>8p$Mm4*6hkzTq$r!Ceemgp`^^_8 zS*1UF(?l&wt<#UM))Ut2=oY&a%q(3{Xs~ylU9MMO@ z6>m)MvrN({TAjA=gOL|llD7m>}@pRps%JJb6w(eQ7|}XfZi#i zxMksJ3-?&~jRn70Ll~e+IM=lg%Uk;a2xLaauza{t7G4t#XXESfkT?PCNv1{zAu6t7Ln1#rWm^wZIabW62IHM&*}Mw}+W)kqv_cl@PD$UANDQk$qM*)&9DD z7T>HQ*Y;UriT@w_EP+Gbq1rc48)U0>m#TaHR!amWLGgs((?C!>BUKPi6b8s66UAiJ zyg-q}Ri>+4Ve-sSYL*&1N8MJWHom6L3zkPl4#D!sZc7G_H@nc?`;II3 zV-@$A8up3GIHT&FR>3)yC6vzds>!!%&Nm8W#`wj=8{v{l6pX56P9#JsiZh@;C{00{&i}%SV{BVGR39>NsEzC$HvbM1?B!< z>>~mZ0%P*etEkr|>IyZC)|%HStVR+Iu&FjV#|#}b*I%^Mex{-P1tPrMtx-Tjq76#n zPS}p*57bUSqZ7Ih>jFU!-KUp7tKEFPeU^3?>px^|wB9H%_CD=`m2O$1ML%p}{V>Q{ zmuGoW1vSocimb$C)|f>G(+{Mibw8mn`Guyr-;bl~@@ppqcICio$&FRKycq(f?3 zusc9@OQ8E8uLq@Y|T{YVX^2Xh?21c;dg&J+ly!3fcOW&jpKbSf0iHto_l zAAVU1APBWL;0wW~t$`V@L%y&pLwH)@Mp!4Ea0X_z2m!6FP5QuKTH6@ztKS~uI$(MTca=s^;-|f{u;?YsdD|$-?gmWSjlm9dSu{Nl~TT^qSAkHyNa);a)p`P+@#yK z4pJiols!aUd|25}sF^|pTA;kw)WtW9Vwtf^?ejVB-6_EAmh%i6vQMo&4 z`<;}~h`NSR=zoSK&Y$=+wmA)GLT57QuXKt^I})`s_Zs+LK21rmJGp>OQupiYLNb!Sd^n+A1jJ6G>n9#Tt z9ZsJ;LcK@O+Q%sGQ7U?z9vMYjo}@)j(dE$;9Yd?0rI`V3e}-an4gcYfeCjrywmwH! zCepbAx-gk)O`?%g=rCa4DU6ozzNNw2p%HCRJ2*r^#p+ z?=it534{FjJ~>CJ__#rhIUkywk$Z-MFDdadIl#_U5*0Ti+}ac|zg>#U$8k|SrTb^Kau$ck=cI9KDO* zZ^|cI@zAcEDW9oP{J4o%;bH|U^ zfI3g|A764+LEy^wr>gBNF}sFZ-`Nu{n%I#9j$-9Qbj1dVt&vWM)2qrDvKf}vl&Bx9 zp^w+sN76Jk)CrBWe=Q+6yP3Y)R6D+Ywz-aqN}OqgVpl#>t#zd~x?x)r65MpRrVhHk zL{3T-abz^U#OQZ*6**-OIGXrRr<0lL^kN2YxIh@b?PR)YqRdMUB~R! z-wDq2kp4AYUr?53S;IfIywgUDyYDN@mWHhJ)>A)PJ1*Q5yCqPClP@F)O zVO?pcEZEj^u(=Yv;6a&W^XYrAI(%3YhSY*K4dIJBA<_uirbBEiqpkUEp-hOxq0SI< zANXC3q~`Yr_kLI-EGD6%jf7W6!=f=TOZ2gEVL*5)#LNcV3(@0H_=jx5QO@3$jJs@1 zcTmz=VwsDLLoSW=OJRChd^iEq<8ej=(<|Z!TKdtQmdxW9Bi;k?P6Q==^|>|AuEp-;Pu9@hYo| zvGF)fjdXTWj;u5uWxhh_*ve&BSZ!2%3O4y{9ZB@yK)%Js`@&{_i zF;#F>Wgb^YK2$wEQf)t0ZU3QuIia4A>7_p9Hm2e%%4ttQPpaOZ{3obN=p4A|WvcNC zty@5aLUehJG8a;PF%rB*xmyU|rTEaq?tVh}85Mp_UC)^*!u^##|D8_TrjHfkIjKB% zsl@SBd1x}1sm_yA_={A|uEB5J#Fua8;5PPabF(|l;&r2N0`Fpp5Kd~t(3Ru*voB@n z<2gZU(5G?CYQFgZAK%Yc4{`QBhP@md<%S>dXGi$ee{i{zoOGINoZ|*thV;2mGUBs@3ftvDEO8|TP>OjBP19uE00$(Q%Iq@6+Iva;`(X7+HSUyp_;WSov}$oi)%Z&7 z`c4i0R@oO!p1Rdx53BHvicgvf+}jAHOO&G(nJB|&zRq?KD4t44ksT`W<@UOK(M zE|e3Z;NT}1%$2Q*n$pPH8U5#}~lDNWR8L&$%eoC{R&GcA6Bomic-!O(OgKU?lp z*u4@WYawkNI9p-DHdrX_+lL|defY;ws6K2hBl{s=f- zoGt$X^nERWz86$5Lp7YOa%QP9FRJM;shl~g)qIsRR}Cpr<;5r>M3LtyU+5ppjXz5A zq3OqLkW8p_Lp0Eikk92C+eXLr(9wHzdUu`tvi4umuvn)ZG(O%52Q+3Nw!oxT2(1xY zqMwD*-QcuCuf2)hi&sZnI`KUW9#-CBS1c~gRf?|;WT+J_)P+nH(?-o}tzK=XVp^%8 z9aQ6vs#+(NaF2@btYW&TllLmE0%i;cr74k3vq40?+#Mo=RXX=3`3Z4*Ff>RAV`7KD&`hBDGQ|{eDFlHKf(py z;=+dNvHq&mdrA;1lu0i=No{75znA zTSBt|0ciY50^BgE*n9MI_i4wnTrvO4f7@v*Dk~TXu`1)$&y)D76wTKQ1F8)H1nMiC zoK_&fgu)V&YFBXY1L_9uBj7*wuRcLrA_-+oAwtSc#{cQm!j!rg(+Z2bVElcU(F2pF z8ipjCLih?-i%RedibSyaF6B2e>a=LoN>Cds6~3X|wWeRyO{LsAl-800X{?w=SVYcZ z1E+GA5`Q98MU*SpjFv=YkcSCE$yb{P7<)lr_~M68(MLKSt20@^_sX+)8yEVOMLZk4kmGiyzSS-{n1;zJ3OlKH32u3~x%SJ-MI4GV9 zD2tnU;BEtV2PDX_9gkz=ppk>)K3w?-@(A3Vi|%t6OhTHB{seR;qBjkp5M!re%=4HK zQk{cqJZJHM$pt@sH%8vYqW#$87`FHvr+- zRH@Y}OT6SaQA|~eZBHziok3JAW8p(Id<1>-81)}TwV$NJPtm=j>F6`0a%uZwnlEXl zx2fZ1a<#gzXK;*TlvE469BCvv&vWbXPLx1P=AH?V$(^+7&;n4_O_;wPMYlE?7cc&-qXptV3WSETNg}G-UNIqRUp7u2~*#xlxNJB(WB%8>OE_0TI*?&}0wf_FktJooyVcw)9f4NK?(!+{7Jwu`g)2n@YmJ~M|Fo*O*2CEL z=ypY?C*u9MYy;vp^ml|>(1(JVGVZJ(%N#l+U)tvlrZ||UeEGo6RKBnUgg+S`F@aEv z=POTg&GQs3Q$a=Y6A5ZkS}kMBRkg_#7j8PaV!@TIM~UIKKP3+!U$W1`&6{Y}6Jn{I zYbxML7;b+F{+vCBJeC%`*4J#~H$owrBNJFJ6rEpaER zXn4Q=8<4*Oa5Xq*`E^G8{Qx}ydULeolUxHS~052ZVTA`sGB^WymgZU;j zl(Y`LcQDwD_BJfqVZH+ivSE}f@Ht%eJ7&eI+?p!3zG@*5iB{?bDS>)W#Yhv-FqQPU zQd142Ywux|b=0)~xE~s6%ekWbt5QlqRGPl7LgTB^bor1rCgZFYFrYZ1^J&}jOwrQKB5R!X5pUo{P$Rzp*WcB}Qnj#Czb@F@y;>dAwv>Mz(bHwZIb;+bSJdN*;f{U-c(O8- zMD}TbpFz?$62@^Q;1Dq{uU`QZ%41She8I<@45YT`cE*DKM!ZdY9Lqh4g->JB7~|B! zWytFdveK9LaSP%;^!8xUK?ANNDG-sr;BS~9Xv!NER8-DQYM{_}Z#7k$3E?N*@2#AN zRi3C58qzG-{g2o?!M?oLXE^xHcK@)wOLmrU zIpQ>zG3SC)QG1?FPS);CI;*;N>u3yjK@>(VkGGdK=_m)-uhj zwYN=shs0^DgC`M3VNreMbW$K+!u5!6g|CUwLARi@4PgiRyAgMp51?q^vbN42p|C4y zfso5*8La0ltBcrX#E&71fHxrZG~}Fz#Xo`nGt~SMI$ebKufWPO27KMb!%`j56?5a$ z=#N4W=Rk?%{to&Z(cg@cqN076xD#`Bp&Lq7o)`lTV<7T-=x9njhWPI?BkmXfB{Q<{ zT4v;5^80TH*Q@R&fsyMa_Y%Fml=A*17z0-dVjCl1`%=Nmu$X|z*I;IjMB%cUO z5OW=28FI@LR-(ikh^i1J5!N7?zOX&f1aeoH3JGsDd27krU{YY|8_9c{{LNG-JDqna zW)JyaneRrStaooPfiKzHI(0auksvIX2C*;eoBbyC<$T12CprEc)3q)G_eVRBE`vY* zU7dm8$Rhux&cLtqZ|V%(8rSL!q%bjTG?1%-D+DtsHITrsz(af!J)kyvM`xW^67}t6 z^kL|)gO`nQT^iWMH%mo2SZEyYxJ2V}E!jX^Z{mUUmUcI3ly1ST8j3aU)VN#Y9^IzEB2<*aO@1F$+-R_QM-Po|w)L5&5R z2Cf|UQkn5OIN>>hYXH{*t}`eY?;XG`24N)ACcO)|3-ACW?S;HOfQP_+AMgXfqX3@* zNN>VdVfn~KkOZwmcvNy*j^Rk8l`;D%w=znQ&0Au?h4m86CJ%~ACRTXCMW9F^Irw~UYiK06elb=PD&)@{KXJGcLm@3Ab zBDCe?U1M;*k@ZM#8D5#Q(Tpn~@6KW4KhHXX&T%9ebbr8~N#&GQg4A?96*N$to2lhZ zRsTN9AEM|%I0QA(w2 zJxA3D!m6X>RLU2uZfnA}^iPSzX4B~o)S)ZkBgTCpUW=Fl+Ax9qc?JdWKc4xwC|Mr+ zcgVT+*t_o%%9Fo`GAB>AE`EH|>GvPRORMDs0eE3(PW#?K(^zL>hK z?%<$~S+)4WjcLS1O;{i)ek;b-jO`fP8waB^h-p8s5BDbi5&r!c2OlsU=ai33gPv3p z2+FVDIa848eQgKd+jPN(pNwom;!*$Ira$cHW%EL*OE$>CYHN(qg3j|rw=AcF1dS0L zloz^?X$fIDa4Tu7rXfjVvc{@9sIDPZNJl!amd4vO);2{UAUfwAI;nx4cBc*+>fo+_ z#Wsb6=C{<}w9&_9|I%3pCEs(oe#+z~uUMGSbf47rbn}tlyioh|OjVh?LJwZ2)1|?4 zwN`7)XFno-%dmQ>1W4{2*5l=!Iuyz*gDgAAY)sBfFeLV}VRX@X8JfHTvLcL6r)s0A zNGU@99tM;d5-18T25&*D)?nBucGBtvYZN*Q{DnkGAx#pY&mr-r>^DPVL1&f=Pt`> zWOhbQW6No3dCe@Rx#eV9k{WhfTTWZcZErc*mea{{I$KUh%jse{-7M;EIXx|>hvoON zoPL&*V+8{(cZlT;vT&%ebUF`N?xU7F(sD*w&NG%X+H%KRp2U!+Sn#}vPL?yxatbYH zrsd4C=tawW)e7btGpDn_au!?OGRs|RIm<17h2^ZYXq824Eawf&S!cPcEqc>(s#&n! z@;6$}CZl3G#g@C%a<^OFF3a6#IeV<^BbIa2az3z}4=v|o%lXK1j$6(rmh+kAd}@$N z^tnX|CNhvZ6p|(X@(|FokT@H>x$x~P<_hC2g`yJT&Cjs-clq%I){Yd5o{Y|pLEQM| z4BUnzCfe-Cb*U11mCa4ZzY%>8C-|7w5&dk;8;aiJ2v3^R8Ah3kH<*B)d}o$mung~5 zY2uv0I|y&1CzVw)iEYGUnZ&}&k+TmYd(8ZgvN4yb>e{cR&(zk*b+jYGX+3?j+{7E`j5~C_COX#F*jndEWvT@6x@)Je z305cd(}om1QhVb}$W8+C?i!8T%z5V@*7fD2lli$Aqya&oWF{MOBSJ0A=#MN@*-i{3 zU>;H^v9y9rg>6;AR3+%Wpp2=UE3QFlW!bOFnZCg-lFVtMPl|~5ib?0m$>`@9Z+2YTz@OL1Q`YWI(Z6*!PqvEbK z4c)LB(XJN5!3y2hYZZ;$-hWYm+={~W!ZF4^LNy- zV<^W-!m%XY*k99^mjA8gN_brMBbfl%fZa_5%>EJ5mE0{Qq>q7(zJocE1rsVoX{1u< zC*Uw4^M`PN?271@M_86K!jZv6B z(UiGV5yMINr<4tB@EIn5kMWnVz*9~wk>gZKeU;Zixeu6ztlWtzZkkFgQpF3@-q%!A z!1#-m3fcINtW?1=^^DL9*C<@49$Tx%zNOyXpa#FKuDq$#dNowK;r5z@NULvDTvamM zV0qVkaypnEJ-nZSQHHeUidk{L!N|*aDc-{LU&&ECt}GXY73y9xC)F@G-1u3>^H#Kj z-97Ay$6&wFiYp&s5E`2#I|kbDyGgBssrAPMS=H;vYzAr3+;%*WRq>po0#C zmL^hF7tJMuVi-*g`d{l{T^7RS*6UoE33r)0ChpUT2emI3mc!cn%l6ZCuuD=5>yn6LQXDi$?FqS)^aLZSi!e^pSoo+#BP|?d;WNfbMbBE!c*~h+;S|dk`ubE0r&(BN;YS@5Fe zylQ!KEL>pWV#`@((NYVSTkZ-AS6Z;jf;AStVc|N9R$K6Vb^%#sQdhtp zhRlH70DA%U1?&Tq18zUS0RRI52LlcP>7AjWfDeEthvP7ChC@bJ+aaA$^d#WZA)Q7D z^KuK2Tv;wi96+$UvhGZ0lT(p(=RGl4D%^F7$1FWubS?=Oo$2K7nJNb zGmOxb(+d687_>w;6Em{VZ(~ry5>*y&hV*d=XSiigOz(x+eK58+J{_{%V*BHTaN3U@ zh_UzMl|h&^6l;Yzk!Z+viwfIq1jam$FNb)y=wlc=3NJr}lb^=NMq@sZ7JtZ^g(%7(2L5SUm3uPRyA!^ zx0JD^Iq@opsGz*U3JNPJN>q@fFj+x$g*6o2tlZm7>6@76?V1X2QBcR^Ufl*NsIRD@ zDrl^*nF3kbHc_}h6)sYxmnd4SXrcOkrLvbRcZFKBO3@nC^G#K5qe^*4k?<3?s*GX< z+f~|b1A=q*D79aW6KzM_@8VDoM~lI?l9NVQo3IXHJ>wkn1)<-Nu(A0JViUrqgw5p) zAk2`bfiROOi?EF>!p+Sk5Ry*^dNrF+K9%(TH@NUTk9hf?@)0tb{!`O)p87FKwLSbNvZr{g9_ZYH6%MD=c zZwR8o4#lAyJj9cRu{)gc5ylaWkFqn8QQAEoXMBR4C)pXzK`sXYQ=X8@81k7WFcq*f zk)6qmVqlxjD4WfhtY@1+3+6Dq#PqV!eg!s83piNBxQuZLJFhdYU|i0)(zKb2dDR!= zv_Kog$tIoMM@*F7IcLZWC}+(teE2seaZO)g2W%>9yV9>y&c;e22is8H_G{UgX=Anx z-E8b>V_zG4+t|ydel`xaahQ!GZ5(am%QhC-wA_Xzwp2~f3Y%8ixK>^+=9c52*Jt@PG8Qd27LQ4Zt zx5Fugr1SA^6Iy&r?ruGFc^OeeYwe@`932eM3H`Jje=`5%FVquOYLNR{Z8_0^212Hk zXPt$_7HEt6t1G5S!)Aa5d6+p4GxIU?Im{f7@e{HAR7@_!f)_Az78cCJf;pJE7*SNU zgP0~Yva-Agcjf*hCFE68V=9+@Y2JK6;cP{76wXyBtBO|@6e$dIrnFU2v7$YSBw>11 z#R!ljl_rZ$^%e=0NSd?cR-W}UW&A?xex<@olz*8r1V)t3)dm~xcW{j5PF?Rfd*9nd zGMGu3=@`>{Li4n{K;u$_hw|Pq%8$2Ed+(X)H`s4HGje=qK5N;l4M!;W)*`X|iAg|q zqZ#10245Cc()83jOot5xkme@&+K&f+vYG3Gt&nlR0Hge`z&Q^)euBgwq4;;mya@8; z@`WfVuX~xWy;N2PbqqcJjoXpxqtgPXw+}l^vyD)LA)GVqVH6&9MlODRU74x4>AX$2 zN4~vVFnc%ViEm*q@OX(uzys3iCCY720zv)H&R;lk5eWUyzu2tSwrL;S! zr~yGI$`Z3m2NRZ|-bTv4Pb{*->4g!70MI0ts{J>XsD4acz99VCe3$5-<~jyHk`gN8 zUldrpj7$@5lAw;{TU3J|m7>)=4rXz@FaabqEGc8nkfp}|)W=FXzNC`1td1+K{cB3*`3mNy*81Nmng70+HBI|M=kRrYYyDox zE#xjb=%wAh+Lx+Ud2~fidDA$)Kx$j}Xg_pxBpy<8`tX3EJY^WK8Nn5v;QFI^%2@W6 zaOr)V(#-5+v73gj#t$QRc^Rd$Gw@Ux0Y23VueQchEpdAmM%&l_(*sBvj;{c2waQPezQN2Aj4W6D|rM7Bgo=R z#1>`U@VC-pT@zdWdzBWESww94KUP}A_xpbZyB(ki9gUIgtrXw z+c_YMY;ul}dyKq~$U9*y=pcvwS#r*pjzZGx+{u1_j+w>1Wb-Sc(S2Cd4Rg9Nz}D??YFE6g zC*CDvk7c^O*aO)Yhyte;ATXW21*g>vd;?N)u$sfv`v{7SJm zn;}HH(VsrTr4N|d1CH_ev)oxoK0g^SQ~dv{M%efHYmB$Ue%5uEIu_<2AvxC?Z|D=5{QitHkH!*104xbSQmcfn>(R z`=DX>{cJ6-2~HiL9)LZ~G(wWU&WEngftv@p<3UY?v~lp`Bv?KHP8WbZ8G22Dh0lYU z2K}bP%o)ba^U^G6I2$It2xVS^?78sME71RCxNAO4SOBpLA^SBbTm(&vVD4gwT>>YT z!rW!>{_6mnpy=4Oh09Nn`XhKHJC{(m$&EE@7qJfJl*22PF);-%Cn2U{jNH-cq1ynX z4N*L4)B@|Z!g{Uok(Qy0UM_2G@Q-%JNMAY|_uPY{Iw5w%t6lKruJ~Fv6CJ{y*uNLz zgDC1#*(Xe`ypxA27jwp;k|fb&v?pQCczjWIF%vOnI^J7|dtX5PGSW+7kIbu>^CBiL zG{K_uB^b99a|OG-81?I>qPJ)nc3h1SL72+wa~R^1q=I%8FGu7W)EYrY!$oGLp( z-B_TU5L@RgRPIW3VTHQyEj3}ix@Dv4vq`~b(;SKimHUZ;Pn8sHj}FP(>6euIhsyd> zxtEoDMY&NGSVlzj#U&9-K`Dxqrl2Ohb{jdj64a)GIwl|tttq)9Jtq@OXM%2&)t3@P z@e>tMaB~mQF|m$3L4mO5o+63pCKQrA!@#9~ocSN&(kScr0~EYZ^fBdyidKxQ<9{Yc zW)g|YS}f{TYz!;$T142Z#&9zygeq|$4!2soLpJgqc#NP^v(2T6!b=l$Vd}&EhZ+dj zrV(7@37$EczaGm|=JACkTvf0q+jz%8{$)RZeu!faaC9F_&CSdY_|_vFJyvGDwhlF0xQ157@&)sGG zJZVkzh-SKOQ{Bwh!<*|TGITUkM_cMTt#sEGI+~^TwATG)11t3nZS}DBT6faX4jM#l zyIXJXsIPX`7rW?bp#gqfPrXXK0r%+pdg(C&KI)-g?XGX^qtEx%V{&wEKmE}FU8TQX zCj^y28t&84d|mow4fAy$+2k(LQ5l3*>eRJ5^DR9}Sa8Mq^PT$hJ$kDk;6$cN*TZE_ z-hw;EsF`EcWiiS&){+~gY@I82ffo39d;GR5uIPy?nv>We`t9d>Z1uLRXDe9en_JuZ zS-(lo>bSFhec^c_5|sk|kWd7;v5`1#pzGtOSOQ^W|z=3b&WR z%(D1+JQlmSy&{%R#4**dWmUX-BSt+unSmhFmpGSX(2{9NCa3`Oa%s0zeOHcd&7HqKI2<|t=@ zf;DR6T9vawMK>wjrtD%RjUl*O!A`a2U4?tpDk(YLr}7V|%)`n%XBtk^q$u#B`sNSy z`6c!7U#j@3IMoMc;6Pp?1*^rKu+nExFko`F2ji%X!bni6! zZ3ZowP7lnYw)1JmBGUu)qU_VZHRWhB(y#f8ga$TVT>V0<4GM?j`zvA-WvHKgVx;Brqy;p1! z_S7%-Y;h?F7pSZ*ET^B5Fq+(~o9V=++Vyo#hFO3@TkXmvT6*`o>on2%2WUIII46$K zaryenE83f<+pf`hyY<(H^vrZ!Ec!555oIM^ClU7$iTHojhi|erh(sJxWlZm0iA4Nw z_2HJ*ZJCyxVLjLSKT5>y{y#{>v7toV=D$%Q-fH20R*7%^&nj{1Y0DOs_^eg*m6iHW zD{{`L#F1~U$ayRBy(JyxkqefX)tCQjI?5xLtOkEtk*ikR6)O_8A^;I_4ahjAArb>K zmGCkl-GNkwNNGqF6J|MxL?Ds?5n+|z0FgvUuMCkY5UBv!)gaY_)MO}1g4F5|xe5GR zfNnK}nJ%{(4LMR9B6Y!)j?wx+4d9Y|7McJwhuEfa$%jY=q_%)aONeAaY9>TlL!=!< z+CZd>0Srd6A<_e~yFr}HGrb_v7b1NiH3y3NL1X~L4unX52nIuB2&4{zWkVryzk$!B zKLn}6Ap2p+8xGY*K+&UyJd^qu40#eFkAw3xz-Wj(Wy(w=&p?F$y5@tO3$gOC8gD92 z3c`w$tVytUGJH4%rcZy8sdvLVOWqyavHyP|Ki-6mN;4eFe~Jpp~#}4bWPkb--_d{|?Y5XtD*o zZBTb7`0oPkGETft4*<%g<`8)Ao2v~Ug&rrsISzTBfcq%~p8=c%It?}cfC-^UE}T>m z$&WiYKmtLrSQLllOJl84c%>{JEQiqq+!K$JBG|7Y{;ihpbIr(IBAAc%@XSqECIy{j zbdu1kj&V0*Tn(gD{P|X_TpNYnmQnv2y{#dphEX6XO!3oAz`<^fSuISOz-xoU+F^Qo zL&w^jZ88P%olWhvw5Z6yhJ7$;06P89m$7XuHVW``9_n#;b3W?laOrrwG8xrGobWu> zor)U^vEy{?_yV?`fibgi>P##%2Pa6#NSJSP4dyZaCB%8Cij4C)e<6Ac5SAb>LXcT* zIi{?@1&gu8>sWUs)>($FS7H1cn7$fYt;N_iSmRA>vL4U8g;RwK_cjiA2N!R^ksC2* z6JFYiFA)SN!vFH#kIE)jH z;M@=J)(`RQQ5^LV79Yba|5f3~5`|yn{jV@TRQLz~FA6`3!v7oIeVwq6*M$8X5%#aC z`i`yK>s0;Y*Q@%TiX^G`t_k}RHve1L$C}FipM?DqRlm7OVt3*$az zI;3L5ez$aSVoy<>pI0eURo-;vPE!L5RrU)idxmjkOXFM7Eakndf)~}rmy|z8`BEqP zit@#tJx>+As?x&MDlJmp5+%KgsVkMY+}!2kRw!7dlGmuXH`S<(3f@tk=%SkyY*VpY zRjNp%+f~voRpvcaSVG}DsLmf!pC49lf1uXCuf`rzUmjJzeW>ajS64n#V?S1R{zJ7n zp&Fesf%k;VDnSHQCMSWsnzT?n;b|1qqSm#kunrZ}Gq`4`MLh3S;ng1k(M$)dbA6ttwGw&aD1A7-0U;Np%X80Y+ZDG=LLcLQ_AUX&uH*8br> zy&ri4DHv>4zy%Ky4l%w9?_q-B7 z?cbxkcd5#La`sRlosx$rI7+qzT4iECXH>*1Vvzok+FqO6bN`}Ziw7(I4mpQ8*5UYA z{xgPe(#GlWNEr@Xz9W(EtIUxb%}DQy>*E&IwK=OUce?3^2h59K>G9 z-sC~1hZz6e>cshbbrM2TgE9Qgbqkag*A^%R|8;>9%w!A~C@h8PB|DV44FB6TN}jAy zL}FcQP}uHUTvW`yZ0+~*_JbVV&(TACF}$R-KFr$%6!1PrkMOAvc#y1Gj&sas#{A}; zX7AdC<@J+BkCjTAXb7tjYEAMbvwZQucFWp+39ly6C?QUD8*153JsUD@=igCl62&KQ zJtcdxo$~(@l$}w+t~qBr!pi=yt~~L$PL&?RU+fLy%DZeA|830EI!-p$V$UnBSC`eF z{B6$*y?Mr%C%3I?I#;}TDH==cdE(8hew{rp^yV$S!+3kXX{h&!y`hnghGFE3O?0%G ze!Hn|?(1lCJt9M2Zl$k;_pe3j=SG9&eNmD zO5}|+?F`W;O(70V)6R75&oPu6?-d=Ludzs9n5UgZS}KF%78oGI*d;n^xk0%)LhxR% zV>fAMv-Y=Y+G3PCXNT^-(`2=r{d)aDV-AcQ)&=|Yf&xic;W++?;z zNjqWP2{`x_O!yIMT!da%VUmr1#bQ((L1i(mG!~V@;&^OQ8PjgVi)lFMPW-STR&HX_ z$}2nLq)ynq8*c25zvkfbe)#DV`2AeG@(NyBfXCm!rpqvS4Yps0e}+4wNU=#SG~0zs z4`Q}#>QCVLa4%ox9B%#!mwbcC-{IKvc<2YrmYRc$7^{>RallsnB;Z_1%@Dg+oa$Rn z1vjWw6;-yU=q5GyR&}b5I#gFpY^b6Q)W-T|nI6+#z0lj7n<;};`hzNKn2LEy9Th84 zf$}D*S0}4oQ&g$vRrXY6Pg9>xS2YXO_7@b)P-kW;nr${vAH1l>%~9iCQh9ULm-AKL zJk?qB?ILyTHI@8^Dq5}5HY)$98Z0BeOF;q!BJ7l*f0n19l5w`f4FuI_Z4w1Fh*FK_ zQ@S2aYD{iN`YD^Hy+CbVqRdxl%QDJdN;{WR$_h%8V`3Gl)uh%^bPYKxY0Wx1v!477 zWWPny4yN8Fdn@V9bYTlc-=lxZk+FyD> zzp4DPx{a#eWo1ecR%9opR#+JPkqS;zThfnxcpfjbCQ>SXWQS~ z$rtPbsRRDe&iLJa_7A(-pLW4zyYVHv;EHWW?L(H{sdPlBFSh9;j>hZqrS*dmotdEH z%jwMWx@!epkf>8C>WoS{zM3w$K|h|P<2@Z;Rc9va_!K?nCjCHlU65+Bhncl>{B8R7 zFcI)=JzZ8>j2q~JH2vG1I`c-oyp{PLuJ!f#dv)KQ+UcR69;S2d(|^v_`&Q}4(*>Dj zD2}y~jE<4jiH6nUoP8WA@gb8b1rT@251lD?mBHZqV0|Z+{_m}bd;u1KT@1lqz~4bE zmSVgQDx1C@YKD%WpG1sZfwUI=HAX?b=Nv}A!6(1Ps~0d%`k`d*m8_6!{3`AZ%8{}5 zMzucKyiJ&*+!|`_t!koR1RAK;l9qi~sS`%V^c$E7igJj=iTbMXrQ=5gUkPKGp#kUb z<6L2F9pUAY+&RIgf3&rvuKu*M;&h~pIdpERtf8VNPp2oFB3(IIC{@SS&?&WbdL11| zW;RXFY^bj^(hoM(kNbLghVI?cSgfUyXODEK-K~#z*30iTZpr1nb=N++YmOFX*RFoL zYms(Npsd;@*Dsbxp{059n?%s5ia8#-XVDe1rTj1aN)v_1A(4&A)@$>vZd43aWh$4S%VpQkN75ncz49V9#45}vw^2^6C&V^jr8C`Qh3q36G&>MgW!!hF-%o>YzWtA`P zsRQU7G8j@{+{;JB)}{Pk2}KZIC$L20+fO=XyQi$IvsThqR@OhQlyj!7HRW3?<-C>h zy_NrimGYe>O$sT$8nSN6B`f7mE9Hun617qQQbHvpB?eM7q$ntKAd4ZTG-Q>7ln7K$ zfRuO$%A2w_anPkCLPljssRAh#ps*Tbd61P1NlB1(6FAi&r4|&XL9N=5QWvnEQ9m*o zg4YOAn;1`Bf)6R_kdgseEg+>Oq+~%>CZx26ly;EP22wg0XI)lTNXdqj9#AM6NH0j~ z3$^+{Rt_ZfgOmY~Fc4A(L&^}y8U$HGA>{$ccnGqFLE&&n839R;f-@4b9)qkWA?0zP zry&>(DWUF>@(iQ|kdg}tlOcEoJlVU+Zcz~HHh2C9OMMbGgq=-Ij9uWp(vIZ40PakH zLI4l_Nf-#|<0Vr7?Am;`K0I0AePBI|%|AJSM}LDaI+CAb>j=Jmvrh zOX@{H5p7;I_UY(+gO(DqJuU=Sw3>O4USx7cK{4Pqz%O9UX_#=vK*e(fEiR5Qjb0g3 zOa|r9k2hOO=N4>uE3%}A+Tr_c@s@1#??uc-Z?e&)Z+srzsRmj9L?QZN)E#DF@CpV+ z7%V_%iP4{f<>)QNUZn_wfQzWYf#EiMTKyF!Qgi+x`a7@p??|E zuVA#I%JIwvJnl6$bE$&0s;jt48dG6g@`c4J4M9`Ln{JY=^pYVFxl!^h7O*JVeBNQF zlv%HMaU3KtRpq-Rm?Js07QE;YE);{uKUmp1D5t+HiN<7UXkoZLLj|Ysnl4_Vd7e&L zsPh*akI?RA2CdNG4ehMZ_@<^+#wwq*QM+4olg%c{671Gl@9F;gwK`<-j0LBy9DtxK zc;&!NfcQ#aitKBH+XS#FICp{D5}*q}PjJOkDq{X?Dk5&`RSMRr)U}G=R*u+de4~(8 zznk2F8%(#eZ;@iFQMgPUP!8}i$_S>R=Y+Zx<<;I;v`3wVOC$Og9u z_#x%n?F()n@NyvN2kroH27)`pSh>8xrd!Q@0N^3;hJioa*t!CF0Y`%OB)Fr&eFogI z;0EC4f;r!pn8({)jLz#O9V`dE-`TXEd%32NB9LD|49v+8tq#!|P$)uib4Y6iUKTi= zz>$~ze!xM1kANp1u~FvV6666+fUgsZiVOch z!k_W}fyITYsaUpNQ^8`DxK!aX)n=6{TBm5Og11%bdKLGMTAo2pV@mVM51%NzGkHD9 z6T|0JNp*@dL%4+>Koi*@D_9s9b$Oa(j4qAl2| zgM(olGJKX2kLdW4CqW(qc^IyH68!(?Pl7xK@-Y1W;z^LlKpuvC@Jk+s3DBYxd(T2J zoBsUTa^z5uXR?EVVx@Egkp8|w08a@a&=5k*mhCm=uTsuBg=iP()Bvz=92#gn$7B0*2l~6Ql?t7JBHt zD~O7K2#A1yG?9|uz7P78-}AidUF%)%_b=BMI5|0I=AK=y>vO5V8U-T#eTU-Z?2=Qf zHmf=usLNX(De##hP`fl_Ji1NfzHSN?yTa7> zA^klVBb$rRV=itsh(y#OBw=_2P~7YkhI0#s@-zz=bOuNMXN+b_2R`Y~I zHBL>Kpxp6FWh?h%<;fasvhpV>nxUL23Z^OHg!t2yKS%lUZO&GXXg+r++@&(>Qkxc( z`;0+?^LG?~nB@7IP?O!JoGN)qVF9Y8M<(m=^H%C@E20v()gh`H1SF_e(oB8;U#!ZZ zRgV8N&?&&v;GYE#QG75ipd-pI3Dq5eUY7Y5f*)XFmI@mudvrr^#e>Q@ps1PNF4A1f za;jR8WM%r6pKgVZu)@z;V{eP;24dubdBiLd2&ce`yO~T(CmTwKSeg%orTHo3uY?=_ zgQfZ1{{U%Tcm&ei3t__2d=$v?1K^Ja1uRi4;U@vlfGd^Kc}Tbf&Q;T`;H^;h${olE zMXop&%KzjmjSVxN#{|&@1x?68el5)PFue_a)e61lSYIOKLXkk;e?$Uh;TBQy%rqOH zs5uxm-}oHWmzcZ;X+6elLcI|=592mtwQY!dQ0+y3A36sy^%zDAi{J#hlJ6sfnoy?C znc^y|mWoSOf!0Rf>#tSLdK1}$8x-a#++;TRQ@1OBr^3BPKa(L;%=0QuFqneC725(E ztAdH_X>7a+X&%YBl;4iLXQ)ztnjm7B*C_i@c26d$T!W>JzDmE`64(@F+^1TFc}#uw z+wc<-#}m@oZvL3@OLlgdp{@zykrW=GFCGmfDdSU)k?daG__1 z(Aig3>SslZ_%Ay9)vy0w(Al-O|0gkjqN4ETv8^&o$~Bn}#?gUl!TqJhp}6 zdy>yM0&Vle=0dA%xI>#Tcy>&XaD5RBwxy69XLhJy54*^Gj&IWffgbUAh0W6#i z;Ub*-7Mx=caT>f|Orzob4&HT0{1cp85P1Wl#Q%63((gj#-w=5R+W?<6sO#>q!`?{R)`g8Q9hI?ZE$3#8l#xM4a_SjQIEG2*-sJ!DHG zu@((vSV*uGA!dpfbneT#`a3$Yo3=;jl#x1fl#a>LVWV}@IIU*tO*6DNU*kL-x4`)2 z?Irr}P*62(&|k0r$0l!Y*W#3yVYnC*vJZ;$7yK{94v)|pqt2nXNr_KK;5j5lkKZg; z@{aFWf>GZR4HAzSSq1`G<}XK&GSPvfkKx6IYVO#P-0IEF$r$Q=^}hrRJv6%a|Hv3BhTsYXLH%dOP+CDqEb?#0P;r1#rnMLUV0uZ2 zDGl*uz;hw7EO@a1F{Y$64pYV0I1hPo;)-+fV~MGZZu;A zz1hS`NACc8H@I6NxCid+12JpcyWoYLki7-G{g8J62FdgE5EMNMMGr&vk^e1J{WQQC z@Z==C0FmcI(dt(r{LfJA(T)Eet^N?wEUB1``42RTb$VR{ieK_}Bt{iC7WF4$5UU_m zHVKA-1bnhCLQ~wIWa3=+wL+9UzBcHzMeixRnu>miRcLp|pG9i>JVHN&0SGT4y^P=+ za}&s{Bh$=<+)-$cMDN2;t?~gnA0drKcO1q{Kxb@d`Y|2d8CY+kQR2Cx+>mghDduK(MpNj zJjQq!y(%UZn(8V6UmKlma|PX1=Cg`=s>tVzodA3GzyjQ<|I@vMZ7oAJXO4G6qR(M#GaSsWlZ5QEoQ^8SwTpsXEY~ z@RblqrmN-|{<$Yfr$_pNkN zYooxAZD%l~LcXQv42(sBm2FYX%6@jBhL?43S)EcOm2ZJ_3>@HY(0HO~= z-Vx|<0b_5Ni~rXMwIWK*ic#skmFlbF)086=c=6SmXGo@2o>fmCS zC~#VNsoflu@tyEeZdt*5R{jI)Sqn&nrU5WN}hZGpt?5W5wY?0_+QAbBrD?t-kH@Wg&7dH|Ljgw#V2dl>2qyGbNP zB!X*P6OdIo4!1Es4D$=(&k@)wBxZ|=kL zWf@#i7Uz}22QDs?kk(|h+hK&i#J(n;R7Jg2 z<}&qgse1T@%Kt{)S*>3ELD?q_7@tllJgvlH3BtzzO+}wqbU``4tL!T(@Q1?Nrn{#b z$|*sCij-c3IwVj|Rq9ZKR@bDQ+LTj`s1{AELpcp8zcKyt1m!fLNlhu|amw*1Cy8DW@Ifbfifg$nQeOJ5z_Q)UliKIA7^aInR^b zho0(175Y+6KkD!T-Fk^S^rxu$3!jdF%i=Id1DP3kbzq*u>- zi|)Nmt>2~AAs&8CCRH9ul|Q7M52(@@%K3=C9ZNamsP+HwA@-h5{tWULktfkwpOW`q zEm23P^uMmC_CnSEp47MW_(@vuuRUtYZ&c+xjk!o+zf4!w@*X)}v5YVV zBEO*d1JPX-~h#ZKdt5+V8BL7c{-B@nh{w*M+7U#l;|*_s-Hy=jiV(?9dnX=!d)YqW${*K@($|D$`w=T}Xvl4OZ5N+@>&B<~GA&_ymAOFtrp0%itUr zYs|*}D8v?q8Dvz2v3&*T^>HH4h3sMOl{a#A7UH9$j4!8Lr8B6+f$&YK7sY(JsY_s>G;S)3UzEXPzsO z0?)L;B+1w4j$dY>`wb?1gp5)kbtbS#|mq}}nq9A%% zhl^`$kml*yovNqI&~J#4UcwF*>Q1xurg{3#r~2+UUK^Pz?EWSMT^RBQG;>%l^c7F+IetMeMm*iOSAUS zN|oWQ1?dE?P~4;pltFHUS&R5#QV*I%iR?$HfYed|k>JQ)DH%g3wCSp zpEBzSUzR4_phFk1JA>aHqNPvi2?9TX(B8!E1=JgC*BW&&}2;`H*7a0!05INXrvR_=PYbWJqIUqQ=w$c(pM88iwgbaA727M`3CSJX8uJi(zhY zOf8B1i(_ZeIQ%FUAs%BYVP*wf8iUDI@Ou|umw*gGd)2@=F)dcb ziZ#)$h1=_3g5;Xj#k6|(Vgp=IA1gFM8O}sKh7+1#>f@N^;m}0nrsyVNR5L8!(s&!G z9Y(gna;>qI@T;FhI~DUf;P#G&W*|Y*P8Xz3$enRaSB&U}PIp}PG{*J77Cn)kMdvv) z7q!#S?}NR1p*;ZYfhaRlZwPLG6Gy*}9p5n#>LRUI@0-?aO9uKQFe%eODd9u3W!g3h zb3Z^Hi<8FTo@|7V(Vd9VlMr%@oL)F`SyOP!h@VE8& z)i(TQ2gYwVgQm=_SY@{fdWhSCun#-!!Ti0LB)LTg&_9f)kKu|V81*fBvWAm}?j+hj zVXxD;=VvVNi$OY%yn-t)p>q}e>-g>;IPs=Qm)LY0JKe!0cd^-hbpFPq2e=2+m#jvj z+GQ(WD+(wtLhUJ}prBe**d)Wg8>uFjQ1wbFC#a~TvP-Kzt`Q4ydG)Y{DiN<*S5fz? zsueZW8?_bGQFdLG(?~68Y;^Bgi6$dyn5WW`mD5s%wNcbghCj+pRgbk-68y@~s0Gie zJv~ed`FSr@qPOy&H=_5~Ur-sMc<-+!r73%W+WeC0`=aVMQ1yL9z4o&D=vB3IklHd> zO?pj@8KQ!3sM>F;1#c_w9c7ZJMwldsR-@Il@hWnhN}QZU2fre0wbA3^a2sB$<_BvBFKXo@Oq`doI%FJ_3lRNVBuPLQaiq3NOT=v| z*=-5hP@#5Ir6VPGpwV5ZcV}{+CcisTH^b0#B!#L6r9Ve*n#o~@=gF1UJ46}EeTn=5 z6!kJq?oUGp(vyOx9z^^q#SNkPuaSP8?7_77P0D|Z9=u_s`*Yu=D(_RqaH{B&_Z~Uv z)GLFIjG*jMM49A_H1r`qi{d||9KTDQ+6k zRO0EBK7+Dm(#lz6&o)wjZw@6ap!m6j3+c>!ikwG*#nfyO;U|=_guG9w;!aHdDhF}BHdfF$s2^*%@^=yJAlPnF z`2xGC!hUl0QR)H8-AOSA&8Q*uJEO!){DJ%*%`#mwbAvxo<-?TwJ@x#S{F4MfQ_?9) zJ5Ba4sWme~t%w#}zCdtsbbm=g7{n(LO~ zp%r**EXTz0su-SLj@@|PSC*TW=N6T?L}lJrg>!50@6~y9ZH}(V)gaZ_tDX7e(>$XmFX_(1p5-pj@!!udr12ZQ z_?h0ku@Cp`$4|Y$i=XEg`t!*FJmV$)ejxw;GPihz`wimWukyREal#PZH<*vV&JTz3 z`)~5~H+bV){N39e`wqMBnb6)^!+7Yse114jO6NH~FPC_TOx`?-fBt}1kLEYWaM3LO z>O+2gEI0Uwr;p^w@w{Bpd$W1g1b*-_e?5h7=J49dyh)m}sXTNV7oN^1W||n^i?jIb zY%Vy5ujjHqkG=UkbOA>$VtXOaSj=@k;rBn~drSG`5`MUhD}2tdf;WB1eb;cxS_7YP z_VJayJZcx$+s&8vbMhgcD3Kh8`PrlV#U391EeDSn{L}>rGLx~=asJ~3_dI11&GOH3 z+8Hxn8ulx<{Dr%mOQ)R(A~CBkx|I z_T2zJ2*f-LRLKuiP`V1}T9z&;Sa_`!>t@nY*t%=D_6ukf^=YJDTv%Tzq_2hPSVvbW zqB}+zC8}3ayCwAEQhKq>;^Xv}vDz=A)647Dm38GxIx$|K60T_#{b@xFRduIo+N-Xs z)YMK5t!wLiQLEO`i$hx9>J4?1MkbhJNjWX8u^_N8B>JuBXdPzlVeYqEuHe7cHh-BTrVD^g)Hi& zYd1q?Vmf1#mf@Q-M!O$s9IG)~I}^=XEjC9x6SO@=+mkg+*SS-5_B8F!(#K{Pt@4la z_57LoyuI0q!%KDKGF|_3 zU2Bz|xKgkBS`YY2&-zmDUTsiUJ=W;0YxN)N_23P9>N>q5PtV+}S8vsIH|b}#>q1-f z%x!w{PTgsTZm>(Q-=iDv)ARQ0PLi@DlfAuq>OoyDQ6~wbqb#ILD28mKcEPna=(iT5 zy0N6WYz7pan(IUvL|n5fWi4b2yU z!*y<^_Q&YWCwRaa2tUE$5_lA%O3F&exn{aB`>I8^j1-LkfIvb`B#=b}d!7RrQlz-i z;7KS_Rns?#l1D_XZVT|*0ZEr6p-AmRqOvqV+0i@?^eT9=g?Sy|9l&=D8`+m0Cke3| zc94*og^Cs{4ypT`ua&b}1=lEnPSo~{9P1wymH>7Z=;S=@ZPDIAUE;JACNCm#ATdB4 z4XnCkC0wz>+QFpekRj8F6nLvOEb9mnUEn}x_^}%lOM_wq;C<=EUW9uuLGyty{tejh zI*j%qN}8!q8|6-d&!)h|8D_}YemBJIgs@$ZQrNKKV;#iO7_4VvjFc=pMq{KbHO8Tv zjbWkPYjO@gT!3kd&|8c}K1KU8gzdn$szD4n?h}%wv@K69sQl`zYRAm*ea6 z?Z-IbBMy_wcrOw@*EPH7?j3bXnr`1yj~=D7#+Xs|mI<1tYLOzh zlGb&;a*?SyP(Kjyn{Z{5YqN<|mZ9iz%=;eC{(y7>{gYV#N38o3)<1;_KVu=e8h=Im z48kus=p5cXkH1{NVZULEi&*P-YOZJGH=- zc=|7_br+jRZT}GMdx-fWcTtD_#zGIIk5?U0)grZ0DO;<&fEr;d3R4uW+ybh!*Z~R| zXxrq%%5#)o#8m#9Bh~xSszy<@x|n*igz6tuB}*x{q@v<#VOfQ)N-wRF%83p}-HuhI z%d0`+9jKtzS5$o~sfF?CT6I;ss_IrFMD(qqR#sN!YO21q)RfxFsiOo6_fmaTt)9Zi zl;1!_H&ob2y)V3;i35qN-Fwmn%>s#qZssI+J0XrO9uJ~jU)Ao zqcnVAPPQteHGZTqbhvGn9rpy?db}AxYzXKiAUg!oFy``6L zVG*NI7onOVxV|p)K*X|0Es&CtTB0Z0z&03YjY;h=D62pLF+GK`T?{VO?S^?zqu(8! z9tOGNKU(?8BJYHZV2EU6RZ!Lt7@UL&IhZgNMfS-{mG`xZ{zjspNTM#BEbwLm%mG>i zZZmZMW0fg;Oi^3O22<9Tvb&Uf{6E&0lhFB(^`$H>g+X+d{0Ooff59?o^FVvO|OwJmfJtczfE~J$hm81W0|E)4w2u8oo<}* zj7dz09md&X_+FMts}TzHsl5yb&8{u?4AU=6*8?^F3cL+^O+dFTq9aP_s4`}cCT^Ec zYv`1EdhKI6t+75KcAlmtPTByhQuSrg8i`ms#QSoW==9I@?9UB1%n>NMY`Au6Z?_R( zq-6;w*h;i4Egy@7Bo>2bW`idJvsGXR3c}x zArg9LxslWRE6`nu?kaThOscZEgqkW!R97X9(Np;?)q_qdzlX}-poVW!8+WSo-6~!7 zJ2#ZcJC?k~W>iLcG)Y|?PvuvI(tf`n++xyxP1NrpvcC(3{QgSLS+dX3h4WPC3f+_3 zsC*KEyvUC(QT1#`p?puDY=%ZGMW6rgGhm+@urdb>%=e{<;ef>ddu! z@TsSHOiv#343~V4C!}#?AKucNTlZuC1&-^_5igkvzwWC%^>t1k%1Li=%G=!G9lrY> z|NK73593K0{Ibud)A_+DZkWaXhaC11?;6k5M)Lk_gMKYEkqb@cGBY`T7MGaAqjUMa zc^p2U-(JK!7joue&RW91F69U*%Xe|aUV{^-pLk@b%;5iDFl+My@c)6dcKe^;%c-Hn zVUg@goSbZaO}Mb^ePrh=6>NL$KdsA4$@;8zdudOkME^An)3UIt<;vuC7>M-L-D2jG z70*Ce7$!BxtF4TNL2_*I7&@Y)`dqmO)TFy=K{*N>BK(%TGZcJiTovMT-(G;9h-PTS zB>MKwJW?d?{dm?uvlEZW32noF;M^PB{>gybKHzo^_?rVZYvD%;IV!V}&TFF6AJbPDy*jwkV*4`$aDix+>Maa}W9H46 zgW#gy5K|_iExD^l(Uq&cuCfL1;3-T}kH8Mt^8W$s(8I({CT}rH2D=8iLQa;5haKcz zApeG;az)=W(rdRG3qaVFG?qgqS+(D5!qzkPLu{Y8DleV9(B~;>T$I4h6YML(n4^F)00$i zhDw;CBvm#zRee5P)t{*n=BT{c>aAI-bgo*tRYhj-#0<72gh;YGo1-s;C{a%h1(H$o zd@~cHdKA7)xR8WWIE68V6wbjN?251O2oJvzAQ24~w4gcWu0|1Wz;c$MsJ%>0{(+rE z;IH76!q9FRC60ltk053|M6ZRg^H$y+EASpf{G`HaQe0OObL+(2ymthqjYM%C?b^lR zHv%#R^%v@}MhX_Hg^Sg@N6qyUSzkwes>P&`yHG{!Rqj>#PJ+zp1pE^L6uQ@Zm9>Xw z&5`{GW(P1S0>ca8sKTfUV6!qf&c(o13>zm{W|I{gCO5)GOUy3kdcn@-2(wY71(~92 z{ev!-<`Ivs+Zz_0M)xLdUBUTlIP98W`IV|iFioeOwPFgu>dG+hHOR{_R;&oQgHEG2 zNyRNzx4TloOH}MC$wJm$qyO5kg9X^RXZ=_Pr@L77Q{8%*N@-_d3wW|W9C;PmZIeq3 zs}{%IL7Z6%>z2Up%i@sF)Y9dueSfN$LD9d_`xmJ6@05R$@~=?7pde53N9Q>qPv>vZ z`HNNfIm^Fkd659+!Knq*1iZoGa6w44I?2OGY$neG4m9|kcyXte#*#63JRbdec(*Yg zd;-ff!52L2nPi?sB88HY09IqfCd}K2!Oa-lflyjyS5VIox>7;JD^Ge-&gN{hB{3e#2Xkkms zf5oC7EdM>gv9NDBc!xo1u5`Jo0}>2{*#$5?60w-c<+L62Dx*`)qyTRlfwoAqB!+bk zlAz#UQ|?E~XrIJ+5k*ch3N|KJY-Nkh@8wDvW;2xGfXiMiQw0ty#~8zDWjU-ow~6Nw zl{m2q`&A9lBdv!yD`a%w_SWuv12=GY8b$#nSP**8(9*nNNi%_M0F1V4K>cASkj^5^ zRdZ#myllInHV#bX0HdsvurP8_j8t3F_>Tt8VgzTz*}et zvEEME7@}JMz2b;LlZtMa#q=`hirt_MuIYfTe8nFiPDGr8ky3uI!mv%~JyOzERbCk3 zK$Enax0m1wsgjJP8RFQj$aW1bTa*0;EZH=k#GZE7esf$kSLLl%_7E}IfqmF)z3pP? z2<$Wlw?kZW&H+IX#9G;yAJ#CzR(Sm6$4X zlPXMAIlTraRO7cA81XY*3uMS{dZ!MT6sdS)8yP0vsBt8w68T*c#9Fmer&yMoXo_uI z4fGXwYr)&sV}_74cNONle~T8H)(MI^hWB6TTJoNxx7t@D$~V6nwH# zgWCaqwG0oA=LZ$JseJyG_*7-iug=d^<2<3^2|vU$N;9{UNpch~p@is3rI9LO%Ioyf zZAR-QkL;hGH3=hB60i)6s1L2AcM}iY80hp7R1$?%Hk_OU(UakgDWIkS%rN0TQj>UR zKwSj)mT^+hHSq3(R{${@p$cYI!_2B^*Fmm};i;J3!5mhZ1JECW_D~~qmqx}8(X^&Y zLzIgorSbv}RBjt(w@`j>#RHV@D`&VNABvA#v?#gb zjZH>^bOk^GlN3mDu2c)3s}d_zvn?v|kox3+3O}OkW6D3FTuB-_qoPhL|B?#+rku;l z|6SQaK^KYCePvscrfNiwa$C8fpgIZ#)sb|LMNK-A%tP$bWS66?7_;Jui6^Q?b_1^P0>2WTq2#laf8Fd9;0D2MqC4a~FpqoB;uysRWLp*5 zEMx@uY5_iE8>mrI$U^Ien{2z86}V`5{yLVO8oZ>M*$ABKz+Nwg7ugxeb|yQc*#3Z> z(d=h&`go>sCUb!%v->665~;k6z0Dzx#BMXVe(mpoYiXyjjxMgVgPJ7RQKq#WOct;V zU{U6%t97~r?!-v+jg?o@WRT%y31Sn&tcg(fM5ZpT=YU&4wEiw(uZW1VQ&TBIL2pBvQS`Qd>}`r79!@9v+*Oc*Qn$~cH1$`)&iZ5`AnmP zYOU6V@^tzZoh~$+-TJf$BX3xFW#PkAaQm91n3PfAeGDnn03})Ye>jg&oJXO${gL@d zs?Gn)e1!kqe1wINN@0vlIhvu}0_~RQG&gy~b}RJ6GSC*?j%c?>JCrXV;%CX2mI5H< z8}zoIyU*mS$`(84GP+l=^)>Wvp??=UfU4lC%=#)WOZ6I~3XE0-1l}@E6&r65E`2Ae zcV)esqZ&?D#U>fJS)1vqz)S_RRk2xWd#?I$zM8gFx$Bi!75Z#d$$Jz?uaQV@2m1LP zlQHe5hce&KlXsEwE}K|~@>glWC2Dq^HvLH#Z_$>U^toh<+@?ZzX!Bn*^)CJKH@zhe zj{CIkp>PeDB#N;h+lAP6*o$Jj6nmxFuFF{oj5RsA8n>*^^`0;hrO8Q5ojI?!QSBz~ z=23gtJHQL}v*4%RlYkG2ia5s!=XvHW_HMJf%TCn*3PSv7VBWPrRuLWESZ9dQBUL9p zrTwnj?W{>0AJa96#qUe={fe=g3Spr#a&}Q6=~G15QwBf+Kttt9zt!N04pyENgdQ8P z&#rRlN*Q)eoV&`MtJFf}e5%qHDQAs}T}u9PqLt))PQfq8*-a#NU3o?yB43_FHTYz8 zb|mq94@(wgQg7`^wY*e&%QRY6lDI0qwcKMCiZJO%YfnJ~heRK?r5l$wEQei7L9Kzb zO;C9QjLw6!jd1#3)O=IcEY{;i%BBK>`JRiN|& ziT#&L|L|Wf{f7dK4Uhz_8#;X$Z4zwkzl{2UZoVG-5~K>Yxo4pHmnL@KB! z$SNU0r`Ok)8tH9~b>8DTn526N&|ds3&2@UR&ImQ&CEJ=FyltvZla^3G_rimH)@+W% zJUdmsi&r&d8tb&1tAq2kJzIahP&=!%w^AS7rtk09?;X(jqP3oo>~g~G8A9RpMzeu#rE72tR!NRY0o3f!m$d*vRf z4m}cJOAY8=6Jlz?cLG+e4F~FgBUxSbplSoS-2`+)n9v9oHU)Sb!aWF21WW>IW&*q} zB!f4wFlh+3U&k~GvQR|*BOp?hy1RP)D7csLk3zY3=Y z!J9*1K4$hf}JRf7{;)X@o{u9I{cz6NYOARxjiVQOs zW8Kd%eK|H-fsxB_!RP3Q(uD7<#-?B5sjqR-S6FKe&i)4Pt;H*=@V9k%bpxiZ$6Fh5 z(mI}9Ad;YV=AQH(f&o}kYzVek)hZ{RC;Fi(oc+vwgyzkq69P+?&e7i|#tZUdDr zr<|y#o>F)Fm`W1fQ|`M4Xy$*Yd?_G9<{D4R$hqq30yXComA}xK{qsLncNeMWmnmGL z{$8qPELIOcQ@C7pUZL)+GJ%OjB{oqs`CqH!->74&RkJm!>sqA_Dqpnscf z5fN1=)%-#W}tV7j!vEn(^{HuPP_i;MnRMAp(^KY(K%2$hF$>$DK^L*v5WbyDzux&%<8g zycgMi)u=%(W^nOQoI9R_llVPhgU{hR3r*(NFu_so;(G!~ILH}?IrS7j4B2)>R&nt+ zRu_$bC*vk3{K@t$c5a*SuXgnUVHtrGneHA8z@Y%t(&?g3Z=?k>pV~ynCu?!9izO3< zvY4vlC1tXscHYoVrjDIqPX4-c^tst)n{Ut4(%$AS)bxp_#ro6|ow-yee5U7!^=6gM zU#(wSrUNVWim&ubYxKjl`s#X}zfs@YpnqPc^Yb)q(zmzkt6MZ})33?~f2Y2>OP|`U ze-Jvye%_?40}zGAZUL+Hn{8^cdl;?q^QkZ7=FUU9{u=Ya;A<+Zp7 zWvZ6O7#WUI+r~#?L~%?GVzPtjk}Y1sEYu=hjO&K}CiDd#aTZC|+{=|M3-0xbHk!CD z8E6QUFD*z3E~yHXSDnNmqLOJ^7A4LkJC|&kw0uUmi|i{T(k5R#StU78p5rT;KzWcJ z{BbTZgxl`n*bw;>&#~J_CoIs{Be6(5+*SuW*Tp4`G57?Ab;f-OYV>jyENdoC5pjH{ zq8ZeTsm%4O@Iz^wC!)wH6JJwaJbx(Kr@}g8oH=99$mu6bx5u@gWWFq!tNYJt8UY!y zJ`3&2o$qMwUiMBIpQ(G!yi5H+0R2>O)e=3}~pn z@oYMCHqnr-3<TO>G2Qhbou)$%$&zG3zBlURpoC{ zv|WwfqoyYlHr0W(+IbsjxFKkPe2ii#JpeM)a+~AS?il&Bc}9S|=3XUDD-_*y_I{OooUc1%E&8qo$8X`wo4sD)Jy=G8_ zSp;*a9 zCuj+Qe4F_cy-7t(rhE}>2wz>~p}$JnyB1f=S3A{`@w9mYP2Hq?u$%@~$`xy*R8|Po z0^Ag^+dzB=$Q2e)s?poivw*z-UIJH$K!d>+D3B0=gg%rG<3bW^NsEy6ahwcnJ7ebxYg0F~8emXH>5^>CqG35#`?&N`sspq5`&+o(ZI-Oasb??F-hKu{Ap92)<;heK$cvDv*EBbq+3+>4)yU)mAgl+lSqik z6v(BpITU%G=n4S~99T=pyKu=;M=QB8jb^7Y`KF2Dl32iv%P}N0QE5a zV=OE>ZJ*`U{4aIFDSYMvPK!|wq=VZfbppC6m^%)=v1T+^C_&}P*|G$&lmnrrV6=}(K7xoS@$RhH3pqCuZcLV-|K*2&fUG#FXMk80Og7$0Z zUZRDoZC2QVWw6sUWy?MSy*`rsMeZePAg^;+bb$Z70{r_5UaW@DD?sQK+}hfg!F4=4 z^7lKM|3)cn;#tH$jz|I|?mQdaN$A$ctang;ge}(QRON3`{%$3^Gds%YNbNq#+pL{) zCMQv%vZRdMDd+!5@;Y%?SB~q#tnd*hL+Cv!Ccz+0^82Wy9U_t;dx40sNxo~T0i5bg^@TYpQXh7E zGaX|40RMP7Ft;y29}$+A58RxP;tsRnv}{Srgou=v2?R=c7AK~fb6CtZAZ33oRqrH! ze?d~5RFw#HTjJaw(EACUQwV2}&f}&F`0$FcQntN`cmvf#1W>N6oREeG$|^rbO^Y`Q ze5$AX$K*4S`i)3FqMmFY;`9TYC*R2BfV7s`btpq>EwKt-AiQYKpJlamgh1FNB;wHp z^MvyAWM)Ekcg}Tn_-6f{pw&)tr@K~yj13oPfg~HXnEWF0#C%ibRg&Tp+`on2Zcb)r zEr_)|<(82l1w~dQnxd*osw_LwuvY9ATE6S;-E{aj`hJA~q?3#+oCfH4=*m$e4-0uN z$Xq>EQF(=EM#Rox_WlldmCc3cmeU|iX8EIi(y^K!By$z_Ade7DrVvNvZEqKml7^u6 zV>MOKR8#xn@U=_`qbCO5`r4C3mAN`DSF0PA-4I<_yT1a$%&{*K$VvFb#d z*tnMMv7m%xO*8jk)+!bKy^5(tk?$C-&b)6Z`fE~2objQ7IPE&gDFRLHs8h%5gb7Ak z8UK}rdDeHLNW3T~4V#lnb8Zr=4>|rMuRF)7V?@FN@v|XW4(Codw;Ns>js7_Nb}W9n z19$Dgs5Yv;q@sVNh7O^$v2^k{z5hKuI87IjeQD$l^MYesUQ+2N=%{Q6Nb@B{20Eh}tIfw0-4()*D>O-$|$Ml#+k!sR0TaMURSQE53SW*5W*!^`)Qce8Iqrazn_Je{t)&G zjGGR5vmxOEZ9K$ja)`ZerA1?pX@+a$E>|Daq6*KNpT+3TxxigJp)Lw775)9f7ytZawCB92r>cH0Eb_D7IZW?&c zfGy6-{-)H#S4=7B4FU;~$EhHf8O#J{HqaJuwt=?`T%nNN1p6;B2O1e36hlvxc%{*+ zgI-S*sVNHIDjFg@i*8Y(pu zSCvXCk(ioCfIM8PD7U7`OvkpyK}Kzq^OW*ZmEA@8U6uc$SueT+6}+PSA!fPe4Oft1 zj9~KZcpod8WTH=;>B?QEe9^zIQuYc3Ul~j#hMEg^hq6PCE&Nu27_u%)b)n#ri7~}L zlzm-ET%=8eG6E|_ZaL$ba?2QBlHZH`mq=F0?qI?<$dNBMWHJJ|ccv4}B5$U#2;p3k zCc&f3j_#@FV@=lQdlR+0sN#k53=XY{0lY5K28)jeT{zVjECz7cM zJH^ymmfSCIXpKT?b{ZI|ndT-6x9^eUJ0F6TKlfHi)pvKrYh!1Elrd2lv&yemP%X+kfmv~nM>10+8(3* z3EEq${dEQ=DFhDzOu1K49?cS@Wk)Fc8x`}J02q~*FM`a#64C$6Q$dSG7a`Nj_;~;u z1)YKRIHa*Ajn0v|v~<}r2Ha@mi1CNeKWHSrQaKNji9;1tEX(X$LH5hfuqQjgpIMz` zRa`s8^sYp7r2e06QWBuE!pbaJ7-yQuTaq3VBLxCBMtQYKK5eHmdl}$7#n@dSrMzSr z(|&eDpw(3SvWStG3Hd3L*&l(vY=@VOyZ<^i_MVy5r(91+mjHU7q<)7cc7^z+gn5cT{Ex28sc2LVU+3BFtx~Ww8 zCt@(^WW;#3SaWxvD<6(r7*ZIQXRN~hU?pl35u(Tp7L(DDPF%baO9aD6_RoazOjUSC zbpiQmPeu@_+Dp@Ao|h*J`f)1il;xbUymOW-lLv8;Kd}5r@QWMtv@v~$xYKr7pxBTW zC`M>K$9b0j^9iIAl!@N~!b3!- z3_{ix+2<%Gq2)BvGSiUXE31Q^C?8Q5-C1%Td+Kn}$;>mmDtn_`t0vfGrL6D?mfQk%sy$laeOwD##c_7N8;3xAW)|I3~eHp()T)8akM-K(NU|(eWB; zN2<^x*hHi?f^9Er%1FsO&isx+1jC&)$t^GzNs<{Sp#NX*g4%2!<-9YDzp$)_WV0_9 ze75ip%WC&jfqAxp7c%BE``QqAPE5dT8tujpqL;i^A(R9jLSwau3#2(Q?0> zG2u%=;)fV165|o%3Q=LT1#j`R zJ(mW4q(h(DvHtXLB+S&rOE>y___mTQCWN#jSa1v@PhsXs%iCm$(2^jA!w^@>R+~CIuLgE`#LfF!wO?0kV8P&;NNIzU?r2zNv7nHTri1+ zA1;SsPG{roP<{${%Yo&tjI}=LLW|7<4rf-8^(VTR^B6GVOu-V zK=#DZLTC)aUXb6Bt2`Pj#M*7>3MjFkaJhCm8f<`ap}1=-fNAloFfW(e80=uUz41F5 zud`VtG=}i{fyt5tEhnv7zd~(XtGr&oy{%26c(daJm^Ti+F_`)|4xNl42?Cgc-Q>KI zu}C!evE-DaC22SaKGSH_3`(EG@D}?ba`~MdImiB# z3=|y_=9rv9B67^ufz&y2T1u%SW6-6VpVMB!Kg5hTwELEJMTEFVJ9{-B)b0W8?za$x zyq2?4z{{$TQ@WBVDq{*eo20u;R6IJ35mQklx^jGBCGE+HEe)C+&MnaUoSk?r9-i38 z9D3cj--aEbzftZFHmxA|QNc~+-co*f>#*m0;MW39wpPj9*@A51tITOwC}NEajB1S_ zV<|y+gt5>Sv4{9kIZJy8IwjI#>9w{udlE)Qfp`kR6f zpuiL*A#fom1wq)N+%E@yB48SDJMdcpw1%K9_+8{|37cm00qki_Gu$lj1_2I%V5If> zhOrQculQr~4^fyHcl02F>k76BawZ7kbijCpVPofN=vB3tsx-NhR^Ttzi>jI2-lp;j z2wH%JVp6rUL!eQBhA1l}wi@vb(V^%FAu!L-&V0SR%8li(KDY zYX)*T3c^#vcJAQWzk>&jzd~I5&=X(nx@e^5FsGx>sNuxNa1F1Le zSPzMCqbx!#%HBc2E^UR4&w=bI?=Bl+;tyx{2J6`x?nPIOJr@Y+!C=1HxKueSmEfNs zgVg81y#fAaWJy9POa5IXkLpUnS%-p}Hii@)1v@stuL0n4zGCI&PZI z5A?xk6Uctt4JcE912{`~DN+iqBQXSs+av&s{^|+Mq$0+sV6%c6$Ttz*Cb*YzyU?F3 zd9QT}Qg6f%`Hx%EX(=aO5dg=bAVfG$gk9PZL2j%nA$iI&H#rM3ADOeo%E4mJVAf5H z77ok_!aBTXFzegr!*?*l%a4bouXFuCJ_$fOJkr4db;V$n%v@ zoG4hA8&4eXWfUTlop0rsvSpiplHB6#l?1O)_B#fHFdnSyg*-40W}yM|L@F4f-H{r9 z((ozL_n3DTyx~3yT77eYi@Om*e)Ob_47z+aE$=3z_@{K~46AV$@Z) z>7lW^er2exJzVoBJ3@5=-DZ;(aGsZ$hPOgRU!pALLdR?@X1={7-x{osy1e9c_WmV4 zZ4iwu#zk0ig075Nk|`z}Cz(f!$oD=DTH6XU=)ySE$k+7m@Rv|k6-Uro9NfbR-7G^m zIHEte6mm&LC#d)a%I~K-J))AvsF+7p+-4QKMHTE*N$;!m8YF`$h{wdfxcEW5rw|KU|j$PmnXl>Ga1mkJoy-PJKz^2F;sv*^S0p+B#UKIBRj$kW8x$mXz)ZNh1Q! zy@fqL#Y&$ceu4O`1bEu^e4JEkrf^M3kyMZ3|$cdSOn#iCcmm6@C0=!rXd|{ zO7VlqA4DOUf)UF(=C$Pt!uvX+$6pFLS3?oMg<4(-Icx-}ig!$IlqnHw#68k$WoF$9 ziCopOj9@Ya9k|3M_BXS8nY|{ao5*uAP0>&jEH^G= zhRna@91}>eG8Xhje+Whmx9oA=gTdE=VOUqvU;^NTB}m}qxUU% z=YcPR`#tyJ0|HyMMG77NIIzJR^BNnsiIEFV z-gEW<8*@uYVFoT(nl;re}UoUGU+pp!17Y44=^m!LP>wv zsBoK{Fn~h=TA*K@1aCnpy{>ZNLXH0>KI}BPJK0ax1E*2zX*63@x}q@pFeG@akX_44 zvvUNBu0X~ga4QpA^+KF0jRx(lLd!m+ybmb-H1+uR_RrUTvy+qA)HADUu}#=egi zp1Z$_zpfb|>!cL^egt1XhRb3|!j*1Up%pc$s1fZONn@U&w!=9+hu4Rp=C6Ndl+G^v z4lk9L;h+h1HlaQiCVIWQ`Ms|J>F?w{$opweAB?2h7rFOUc77Edw5}^Js=khlGr8qW ztPmrmrk!uHqzx>CjZ5R|UYIooe?E>YW9V`~FKnZ_7b#~fN9ORbUpc3~zW9kQ{<)6q zZf4Cf3m2Gb`^?lb*rzn^JYuzq2alnj&37;75<;tc7Lt}gjLn#v&N6vMlgIiI{)63Ml@ zO8c`BR_o9WEvjDUmeBIaTgu)Qc5ZU(dJy~sTpXj4(b;b~X-;c$Hc@b1pgHTvDn_Yd zi{#3tJ8iXlfoKd(lF(RTDY9V{2Tz#h))A}`OvGRd0NhjIL2*;cbMF* zhPE4f{EGkEKEaEONbnx00gwdlZt&g&+=tOcGSMb{gB^pmgeD# zV|jCYSG>yq@h2A&^_YL`xG#zub{me7{DPX=6{F^r|F|?u$+W|i5nE3(H4U+rw&YD~UMeAUp;JqOX7{4oq6Ds3X&&FQ{ zX;wiX+#$a==JmmXKu$$GmxDYVITv{b@=WU|APAUn1{{&TK5s!_XOXo)=R1k^OR@F~ zR&)skC~@||N`y@aYi%SPtVh^_uuW)4h_6^3lm8Y9lJLZ8O4vhioH~6;kYXk3fk;!| z;&|B+w>Vo6>Bw-tc70v6P3OI;|2V8eM=hU!;QLz0R7vM`)j1)HS~oT64;c2X%)ez9 z6AU(k2bmYg8EI5g7Z~?F#Z3zXRWd$+sZ*TlN#mk0Lgbz7+nqEu&BB@J#8^ zL+Cp~A3#46-3UyG!j$5+#ye3GH^%n3RVlL$xwXlyMMX(6IG`pq>9PO;_t5=ysrUVq)tKVyQ_zs|#1f$$S?)?d z3i?wwkpu9J%@}=;Ay(}f*%yG*^Pvrg%x z^SbIjJ@m-#dTUR;sEu(JbG7@Fj-IF2&(IN1>#g%O=Igu#dh9}daEU&(NY`DgH$AJfm+FM)b;dG1 z`vo1pLZ4fuQ&#IL>$JO8=d9NW8}uI=Ensz8W?lk<9k;@KA&~e-v_7F1pVDbZbtkFV zCI9y$?SGVf(L;B|s$_URG6pyt!1{<2z0u7~FtF(=RHV9EU3=naD z1JX10G~%Eo>FvE=Fr8MIPRotNVg_P9CYR1C^YU8LXPtR$gGt|H7OXev8_l2{rt}sw zXR8UsaBQ=ww$s$!Wfs3?TJJVbykYKp%VfQ6?tat6?lXVvHR*>;=z#g~9kcR?Njz$L zoiwvRCO(R#iN2EpGgP^O;&}=s|K){$@?Y+RznoEmh`zQ9MZ0a2t@ivAYb88bNweBV zd_v|UA@FT%vD?dr61ry!~ z;3UDTj6ha4j?i&zBB4y9#C6$;1t$ia@*ucPP|gnEoH7=1ay@Vpz>g14-)e)G9L5Ig zLm*=~U#!5uO_Q)ZJL`AT!D(fgpH6F#(UsfHl0O}p2=oB%3r=`|C5W*<5F8m`i9B$a zB?E}bm;_TgBO!Rm2Ap|gz!?_~u@zrs8EH)cN4U68fD>3oF3$#MJK!PUGKf-Hl@_^B zxVRF3p3W?)D4D19KCWZl)9)SCosZbzvVT&4+9)Im(eskcyfouWsV^0NQ**hMdAhGD z8f31CaOut$0SeXNrGgmyhK2Mfh-favo<%6ha{V3YWwM4U9Hn@+^3Etet2`;U;sL9J zC$u!l%BhI;s-o}VaNi0NSpwi@Vah(tIF8;|n0gkSYt{}x@pnIeA~*dK$!;}?qH|zseLTN zwse2Fhf>L~ zE3YWr9mrv2Z8ZK4MTyPAS|br%d;x+R5cRt-F%dtZ&~!L5ANI+_Z5iAv6GnjrJ_7f1 zpdW1~l5!Oa|Ar)mNh8n?kaMu^bo6r3n_+`;0M-2WVJAC)nVcZ6! z-RPY_^a)y#+tr%%Cf8z2vlvk&NqmqHhw)r8+uFdM+rjm^=<+>vRzICFN=J>>F^}oK zlXc{iIwo7^&eidYb+zYp*#ey`-P1Zv8+7bOos<{i4?|vY<0l&-@jCJ;^fi7jlPa%z zt?{MUZf(;s{GAvG{&^B5<=Ih61{NY5051f!!vU|QFh{0-f|QoV;4KVEH}nCrXF1^l zM2qE=>>yv5oFWTtWP&DUqa36y3^X^^ZL*F1&;>y2*3rtDC2rpBZ#==SU$7d$K;#}P z4X?8~!oe0JVnET2I=hYkx`DThQy8XnzGI~veAM8(CV01R+Ylibc@?u15XUfl5M^c z2%bF38m7TagjtBIZRU|YZTf!9--jq$`!psC59AC67x9;$L=uaKic!j46j_Zn)u-%+ z^k@TW)0&`zmFIIWg8t<7rC z_SVGgT1OM=Zqnrv?`8afCKzHQJP{^|p`4BWap#-S&l-1ySubj%Rbg|pohI08SDJA3 zMPTB$!=M|Yuzy7fGUI(%HrK-Rk{&`Y$uiBt!}pY-_6HZ+7HI&5v?KH1!!nibWJZUFt>^DJzV`t_YAAc~-wi0cPxhT`G1*^tcGI2RAsZpQdb9ssz2T*sAnR5Z zt*lsCt9KTvtWQ~KcTTggZoP&qm^&L^jzRg{TVN@9A^*PBp(eJcDm_3IinT&C=Isz< zo1(-RXFjzSYUNQq_%mJ9(0tt3bd#6g#I$T`$=kkfQk$C}Tbi5AOjf$Nl4kzMFrieF zE{ITTv#EuUqYSn)-?uT@9Za0O@J!RWy-DwA7Rblc&BXUG8C}hsK4w>U^HCR5(A)gh z*Ld>5^)f{ROuHf(}O_?g7MRK_|j&55V+k<Un@KF<1&gc2bf0bXxIU*gU~a@w4cTeT zSxq>(Is2*XHRHlooYI;(gQGezcI4!CEHfY}4kNoV^D2r-{I`yT08`zu8k4gzn=cgnqj60R3i`o;FY~8>E{J)=gXrg{-lI}NI|2;*|e?kwKs$YIm7fsV%w*Dm0MLBxFbX}CIr_R(5&(eSA>6^24 z(HuQ@u72$)J@RRNd!9ZsLtmP&_vY*07w8qw=rE_St z#mn`Z!s32Gk9bixU!j`|Eq|rHuu9KaqtC3Iufks9(>CgB|L*mIb)CY-)1heM%tQxQU!E0i#~**~;85&i*@h>KBD zDFPu6hqclr1{44HNwSe}2feqOdI}!0hpeQokfff8J4Wfk@7*T~JKk4|-Fun)vNMoz zkcAP%|JfVQ-Yj-@GGF0)F7x?oyzRR6>)ZP$_y3Fin|#kLsX(=;OQJ|q$fnu0j?z)$ zfuE|miw5z78mhe!+8M2jr0x|i?rgm%PuF_d(&{=tuPeQ%VWoBot%cWvatpt&f0Glh zQV6Ps!~lwKhA_@RqS3W&0NMmb+fc;ET_|kE98viZRO>P9G zq89+}j80J{( z5Ag#RDI$K)5uLU5AQA&2QTc7t=ik+Tf29x24|xquaxatpq7fe+*ltaDq`D6Fo8X`| zX_30xKWsJrZb{wN)nlq@2IVUC#ZVQRsa_D+Y4h5s06&xgWg5H0ZUe((;$ zfROxKbY(1_f;a*j=V6mD>>0fZ@ok*`CLZ65QDI*F5!oys^~r);0HQt3t- zT~4R0)>PPvvf9#+mQ<<(O>Iwc9VzHUL1)V9P7S(JRxc{-LsDr{Q z=fD#*O$3iqNya%*)5y!Fq8##P63!x6Kw0mQAoQ6r+^!6Fyo*ni<}qcNEAY$&ZeE3p zRpm+5m_>#&p8d)E;?tbGgPm6yc5%u<_D-{Rj#;#sKXR7nO)m4TtK9k*PQJ$9|HgmG z@JsxoM1=Au7yZS1Z}QDsJncU1HP9^BLKE#a*ZxB7zhe7ki7>Dp=D%sap;?sj+W7aI z&>h@Ks#e)M(k^v07IczqudP<_?(H%?j+sEIE>l(iS5@|2Rq(Cye^4OMjZpF~sc3{6 z;?o{y$2U+3UX%$=H3%BmXsTBqwFz{w(&bHu&%_&0;%>zuN`h`B*;edswuF;yCCc_q z*eme6Yy_2Yi)`=&xwWGgU7JN6r^k{ znq{XU&Pyn+Wr1|Z8~-yF5oZkAiiMjoVGBlVv!?6GFQdC1{X2c@>$bN_knZ&z#KYKf zKPK+8LTUd57D_*R8e4ye?g!|8f-ih&5tZN1WAGDRx`gppEDg#14UgQwhJRv25xU|@ zuIMeGe4=3?Dq}4Fq?-to#EM)EmEdT`l1^R8%lMDQ!t7mMpL|qcg7PMRzB0`(jqJWRpo6nsVZogx2g^1dVYJi!m-Um*Wya=s_HBwnCa72@3> z?>fP61k&G$O3~%?81{?v4<&eb9M6)~F14{F-!^9>Py*aa|4H=XJr`kmJ zW^%y{UND<;1VmcQ_yX5{nX`6sicFf`SiMi&2)oQ zot>uFwAWrYo%)Pkzg6eIt3yY0{s|rTnXdl1_RnhiR>z&w1>fki*Cn4N1UEvSGFQO_ zu6d%kfl{X2T~+`RB%10~OzUI=;fnpEe=7D<;flS@|E$>m{HJ1H+1kAMPsM)u|E*%b z{a+P(!~eUA{kuCA`wZjFG6xq}3|aCh1^O7i#uEPJhKhK}I8qR9w3}VZ!UZBW-(wcM zY5cbh7aC{3)u9X*dFgw`Jz-_z)ob`@1I88jk$;UY7YfhHW`l|FG`mUimeWK3Xruki6O^!7- z3yT>q%2X<0(RBe%J-KiNdXipXmB9_>{jJ6kE|we-9{O?-OWLe3XD)D@6eq%*xh|?A zb$_yoZLYe7d$B76)$@Vcze*k2q&kUh$Xb(oKL$t8dxyQl;=!vIuGBTZ)7}rE098)` z&sjy2>Z(<&QENlWi%_i`^=UB`9jP*-lrFBemrzhr?Q>Ohw2CgJ3Sv}BtjfGgWtLT+ zmQhzrt2q@_N_kbYoSINsWmZt>o*Eag7FSVY5>)3zl~7G>sH&2al&-FH4V6<d)S!}E(Hd0fXs%uTujb`f7 z1L^}`)o8AIr>LYf1ufL8E!Bc_buB{`Ypc>*s~N3SmsC~MMs4q)O14w|+p7(kYGNlf zsk55YQBCZknsrrAc2n^^)bQ@=onC5EPZiZiUFoYbd#jE8Ri}QcV1UZVQjZK&pAJ$9 zgH`4bwf#X=FifQkRo#ZGk4C7EN2wX3)xw9=#*wPi!|Ko@s?-=YW2|~>yowvA;vQAb zV`{<#HF1)PeO#5AtfoJqI!#pdo>a+G)QxE>Gf>~uRK`LTo3AD=QoWy5HJ7MXi&fI|s$iLl zeL;15Q6)X6Vhhyb6{=vVI<;CQtx`!V)vqt925Z&T4XVa^b$*>1yGHfis17VwNt@IM zn^n!N>d)f#P{s*>vcvikB>_2N!-_bxU2HI=zrb$(rydPCKGQzgBv zuIy2b_NmynR8paOWv@E7U!6OsW*<-mht#Zh)VU)n_Fa{EOy$L?{G%%Wgi1QBzB{fm z-cy;URNIrP-v=u5LpAdgmHxi^@U$B9shae$n*5O(_nEr?bJgWbHR%gg^p)CnMs1V< zO%V?f3dEZd8-chVz4wvDU9c40u1f<(Q15&B`#Y#bI=7IbaT0$m*u^~l{TGgUROd?x z7j{;J=~lF5{X#cGrhouq*s_mG{(po5Hgoa?PWb-=ARtMmFPg~hCg(kqDd2$AJZEfn zfDkgCL%7YIsRPNwsrc*Jr;adnxRt z+X6nLm5d*3G5@2~*mF4bDNdfx-qT#{Ef)133xO(3Fso#Ap$H-G*1oSj;d2T&KTLbl zUM$B0|V?F#!9rv|{uk^}u)^dc->o-Kv|A3v9ummTKGi88BWd$k%hhO!hsJT>eHEsWr%KbqlN^(R!F1nv@*XPQz zDvDTg$D(>!_Q==gb+MFCOj;;0H5Ah#6eGD;*F(*J4L#Y+OdDa6Mw$}CP2MOoXNAcS zI>$=$XBC|)ec9_e>SN7c>D%?KyQ%!JaUWY%W_A@DUL!(I`5l>$#H`V|P1P@zAf_3& z7^80&qPQ=5OX2Ku=xt(I(!mJiLYa?%blC?sqAydY_qCoMN<5>)q}`EAshv#3(mb;a$ottAa90c+PG` z<(5~W%8Dx}*ONv`c~ul7svtpeRpnKav5@ksE5C;F?p9b^K^^6a4|ZLJ_bI$baV?cz zPvN}^?^oDRaec*&#b{k|Qx(}nIn5M5pt!kmQxt@62W+V@T{)73+Ezhpg{>5)svT_< zc2L+(ai+pf3Og(8sIZHIt}3;M!tRQDD!-S)KFaB{9 zf#}2+D#%y(tO^#}VYdVgJIfTjXs6!%oPq-7u28UA;i|A+<|V~zmAgUVdX>LU@fsCu zRPJ(xn-p(W!B$mzyTUEXeMPxK)7_!)WsCnfuPWH7aF@c@6z*31x(ePUXiDuUQNI9P=S3I}Bw2q_vwOVvW(OI?qTQ%gI(%-3=3u?`I<$tfzE~=J4SRq*2 zPb%$_diNLA`Las8qC!_y`ZeYMs_?q55 zKw4QL*+N7`O9jlW41ou^2{0iZ4kiLt0lzAwRfCKg;3k1v6R$p$CtGjWv?oE5%aVmy`vhE=25AALW<&gRa2G)SGr;q~dmf6GgNVXJ zsU55WeuJ{XKnXp^_uaz;w!xB{x6R~pwVm$V)ijmb3tKp0q7*`8}I_TVEW04E$ zp?fci0hC)G=QKiWh+Z?ym8)5>ARh;%Vx=^ExFyzXgzKehA(-6cb0_o(D017$%Rzh=(v`6vAkXegreeV$L{>9*@yuFk>Pvd=%p+W7gvs z^BBSejDG?nL}&UWCQP$K+oT*6UO`GW3WqFf2KqCxN*>;vi?MU;Ft^8SJoGf)o{w|$ zG3P0~YXO#9h-uGY@GRyo!eFt;_N}#kuoP34W7Z2;@LV|iX$hV#z{C~ku0mdkS*tC| zQLqMa6DF?3taa#ZwEmxo>+$g|IAkjZn=wa#j+fEjjxAnA{feC+^J|#B6XA7qccJ?R zdb=&|;qOIXpbtTz1@w3agM%1%2xAVT`!1$Se{>9Ujv^gL_dN`qLOfv=$5M9o{0Q*_ z3sws%;(m&QK1covqa?@oODz61rpsXZI~)3j-y(d2eAbpyi5GDG_t^CZ%)f|HKVrL| zG4UtNzl6D$@#8D#UPZiy_^U-!;(o)(8<_Gtx_{uIKQZwZW+}=PD&ybMm6C|zE)dCL zjdDmdah|bmQ5Z>XF^Z3(QemP?Y)SGM)Q?(3wwhe7;Mg7{*b1kS! zTWZ>pe&|4%?J2(_i9<_KC)(MC5<1heuJl-Uis?p2d(z<^guUrPFIwA=3i{Bi{VAre zjh1!?Q`Ldw45C^?t!eJCQob)JaH-grWqHPoPB;DRvSSpF-!KATybkOr?9Dr2K$JPovSO6xoW>Us1 zx_1tNpzCujIkVGz>i-mBK2>{$ri(0bAz^qzjn7j0GV+%YK1V1_$`zvWCVrm$7s-Et z+?CW}4eeS@EnlMDYbkjZHP}GjItp#3qK)+KCYrvUa<)>vEfm^Dsjm=hw^2$9c2evv zs`)CJ*9do8ZLB!MCm$mJ9db_+9jAsT$oq)=FUbFrSgat=l7EhzZ^`+Nob%-VK*0qH zF4DN~i7%0VnX-N%yh41Hf@|appWzRR`O_L~W+--gip4=^=l zY{mH8E(AL+K(qLV((d-qw%~XQ$J@tXL>Hw7=r7onoQThDGUkJ)IpQl$KEuIThHp6PJBw#V z|G-1P=iG~Y`A2^10LS2D% zuGR%1-NX^+C*7`?o*_VJgpMn&(@W@iQF>lUo#5(~(K<6m$ClF3Wpr$;Ze3QFiqolg zX{VfCSX%q#wO2t8siYN0fEXKcyI=70RR!vu|q+Kx|sIK3rp`n(IrKnU} zFT7V5*43GJ>xBFCsrz+uJzXnV=QhyM^|fiJ{l>bmiOy)Gon~SPpbH+*EquKpRZmaR zH`DaobRE@FXSLGQLOZRsm!bb?qqnxzyW8ow_PT!uogxC^OxyXoT{L&np|08wD`XvM zg!|~|UOKV2o-Hvw{dDXAotkC+C;h=12WcE;dBt%LY969-xaN^sey-C`ctoaF@G*yexAY+P7n5HuWJIC}zf|{!%XKJ2h zop3~pls(sK?#GZdm2Y8@0PdM{m{s%i7(h3%85;fOcQe&Q8ll z=G~fK)6N^(c~i%|rJX$*#ZY3e#zHNI63#yBDdFtb-aFbqto`?N-Z4Goh<@^2JxXZI zr?ez_z4pE?bwY1DsgHf6qd(CRUugGB&1Y3Gk&v#=dm|J>A!}8-$VFEi2e$}&5-|RDCKs@ zEefTeaY&43jieO^A%iTGU&E2cEoNMS>?2HsYlJllC5&IvR48uZVogxW1TiMHv`M?m zB*dAda@M>kqO6IjV4O+@;!TWa5)w?RP^=S8LKTBG3?`YBswSnH391{fmN{M1U~Q9n zx4}9l^&aEYGgwztRK~m4(ESFIO@;af8koF>W?>`KrLl=C-X{Y6WiTncQr}fOjHk( z)yGWlXN@1L^fDWJo811U%K+1}uNgGZ%*rxV2OEEw@rN33gmFh2ca-r58Hu_M9x+kl z439U#M8i)QoMNoZAY15R#?Lhqp0fJBf`!I^#_%E=W9^BGc8T#98!aHubC&m5Vwt(T z-2A-4j4d#|RvTVpDz7x{UbNKHX{*eJ4Q9o9V>X%Cjb`~)(`<`bxWlx5*^Jq24sJ94 zt0rZqi4jfHF3XdQe8bEZ0?8ip?%O8vP4mG%v$fFdIAEUHYib@cGxnPuhfSMqg z9WiM~&G2_k`Uz9|J?lI?L$t#wCMp%VBeEDNi<|v)7&;$TErV0SHj%-)u+dH`{7}Iy zl|RuM_`@U!)&iUaC<3?*;Nm48v!4|2CR`&KLmweTk=s}}nY5<2O%W2dTgvM+>>cWR zj66~M%4DjT9Y`f6v6sie0#1LHXRl*F4C4piuz#N4ylUl#5_0O-*TvRpkWKfl<|BH{ z2iA_S-Y2@={E+@U1Xn|uArq5i7Yy8IK-SFtCcmZ0?PX}7ec>Q4To^UGOrcOoh0%A? zc*m?8d5~e8wwBN4wKtB8W~4_GbN-g%77JbjO2|WB=5ft9d4#o4ZgT*mg?oGo%D$^h z^#JS(PCxJlLe>n>ZSX)xEc*f$ zuDA2b;0?^!iMU5>6HrFj694+;8ru63Ra;BdR#DMr+Ov_q*hCU(_vKcqww=D-NfUR_ z)4OTHtMtd~RBbOcD59K5jw{a{B@+AGJEf7Po%OZY)TiM)%=YHp}GlZ=9{eL zX3T06vC0Gjx2`e%MpO8TIlI|x+iq>E{X$c2uSpX1!G2Tjph2Oq1WZbHnVu9)4~W9Q0Rzdg#j*> z4q^7M)8F#eWb75W!W2os$67nxb~c%ZUp3+qEaKe41OEy5aE^xqK2l7eRL>8g-6wG9 zGz|F&YJUpfd<=jV9rABN(JlD92p+f% z2Zf>wSXt~!_M+O?NjRg85MmZ1-V2nX_1f! z(^y0nzbQ4gyu$X%c~aF0)Sw*YWh;M;iVzg&l5)j5I{{KFL3SH}K^Aa`c+?6HC(pH( zhVtfdjSX^=1W6gt+W@sA(C!4pUbD6^@F&1u0KbD*1W~skRgllHJWW9ISqbPRAy&81 zx|LEeReaUbFv!4-EwFi86xSfJIP2OC#oY^}WzNQPGm&S7t?I;VYJttd3l>>>H&}{= zvLjYt_DhHoAGXd$R7gIBB<*?|(BF)>9uu}AZn0sz!OIBS(SHTAj-t)Jl#Z+l#nusd z0)YgK1_aY7YL09xYCoGI!>OGZPMb=7irfX{hzLEOf`ybLX;X{HUrdS1C}Jsvo+EDw z1<%u<734|x5zd^7D4^*p$y-C-OB5|;i6Sf8PVh3(PD}X{e*-a2lyUiUhlq|+{Am*2 zK72}e(RK=OmEc!`%1q*s*ph!r;o8GFc!X)Zm0u-2$uP}oDsdir^I1P*i&b%QgAE+K z#Z<`f4(~h6&ZmqbB@lz|Ul=Z1BgE!ngm{Z9-)1bW69svxqN$n$=vc4*L@{Bmts6GB zwG+11Fi1n5twvyB7#=^Y>0O;D{@WjG_*}<*r3ZeeBhTw(OQ8=zPKf8)q)w<}oEipd z83|LEExv`4#oWbSRXoVbG$N)Oe}>_i#>+F}VF(`mQH;nhD zskGOG4jDLN@PzSC8dqiw@@pEPcmls_(~F!v2q)1YogAT)np^sos51hgYzcsKi}8va z+Qt>?ivUfx#4{Ov;ROjJNd8BxD((|bJEelrJnHTmLcv(>H&`2o`pP|76^>Jzu7;6ZXHQ~VSWfY{Ih zPjZ6VV(fpj!oDF_t{90qme7ixYTf`<|2sG$;|7^rUjde_cN0Xx5x3CFH$b+$%oh%W zuT-q~IgICP3-vV_WbY!e+pQ5o$3t(CR8Jvc>3{~PVD&z3Cg4DUKoQe0z9m8{JG}EV ztX@Ejbi8)RVP7vX;uFq!bnkF#fNZxT7<)_x%~Ek(4X z5gn*WN2=6`V!BXtXNu@bUv($wK@q*Ec^~@o6v>>6ds_;tJDr1>Vjjg_bM2&Px4j0r zJKookO-)LM!M4^WB}eZ4t|sVb%?h}$2@NutuNr<=s7io4tVODvrp724jV*``56SC1Bxq1_zcO|g!yYRA$*3+T#x0qT0W1QA^9(3 z#CFX5#oC((wJ72h@8Y*a}5_|>Cm5fUuLqV!q)`Ia8FbTf%0-x{8Z)SDmPnYO;=en73L|PWmR3cMmce+ z-YJDAmGhzE_bvDjAFG6q6n>`SzqGn(p_}s0%DbZSud0G;D(_d7e_esNsNJyEj_`-_ zZYsE~0#WX>T)Pm6wVH4!1l)?UFurSmwU|?h6%4o%aa#%?7C6Rg_Nh8V*MNj1fSM3p z3-sMUwIR3%;9kfM!}5`Jp-p{p<_D(%6f^~H2p1cH*9@>RI6a~B!#0vqU~tJ+5GxWX z@bnbGso^qD4u@Qz0A$?kKLz|WgcgFk2;6-5WIp_`*!uOkYan|aEZqRkCcw=Qy9Ewz z1KbLQqP7d?zvE8uc0=^*Q2#A(--MJmAa}3z(UNSn_(DiNWHD_#25TeSdqWHoHzA>M7}-Z^#fuX}Ko%%hVr z>t1YD4>RjyWFws45R;l9HpAHFn3aNm`B+{m?KG_0($a}zTOekLs08!dqTe1@w!`+q zF7AZb1+g2h?v0^dnA8U!3}fA;`eCU7n3IJ#2y+G_4#b=xhz}x`w@&*HRmxKz;K3rOcN>wBahG4dxXU56`(zu=C`7W>t| zS$F-sA_PSRKnpdsL`o(~XG(S`K153lJs&}#NNOELH;YqZ2@<3i;w&l~AxLZ^3%!ah z*c(2jq!OkPXHY~NN@zs~+uJiOy*F_`>eQcN1xFn~xkD*>7)1{kyGzpJNlzeWBBf3u zoI>~np;(YTNhwopsww6W&mz%r1amC%$@%0wO-l=?a3x6=)xB$|^h;D%Jh(Q{?9Jq^ zr=A;W&?XADk}CzqHp<*(@10JxuN~dgndzj}x4t#_wC*dhjv% zpG(#Q;TiGRB>I~0ThiZ=4#SvyL2fs4FIl!8-XQ#q_&T}2TLAOWpY+aOlzLNa@d$5I zyf~SN!!xj$TnYIyJCfaEOwkOnTsjP6MwaBDI7gP?%s5Ud&5`BAc#t#8b8H2Ut;`V5 zkrg?q8fPZ)oO?L(e*U{2_o^?(=3>#w(1Z^QhgleaO*tivOZrSHTq1)*ofukkAf)Ba zysUs+<)#E4*pO% zIXS1Q_G;$*&99liuq@E{J*@Y!yPLxURw-@v^SZMkw~jm^x!kw>!+mx0@w*nnB}C)w|5ZyG@OIOqF}hBlj8T zL&_gCGsc?>Czux^^YS#Sro(_MVX1K!n`ntCLfYeVruy?{?+UYVx!JeUytCTqH%;O@ zhCViPq4r1G%a`WYuT1)P2839Goa0-=`%U(5ChZRc>bI)n5(Z6KuGiW1vt2L8<*qJw zalIZutGRrStL}BxeXbhsss~(kzpEy=Dst6>uA1cX(=Kmw(|5UQud9A>!=n~Rvf{YA z3X#gcyO}54@xQtLNjK}XTl$ClqFvo)4wrmdji+{BQpxr{I2(Rm4ISIep5DA9bP$xh&@4G>YZXpXwoI8TMUM+VCgD6ue?pR=r zEc~pjStzTQ$cE>HmPy`n315i1K*GhZ%W;_ zgrH=5M^u^62BD2IYm=ytWbTI&d@NUfBDZ}ijkidzt%502D%748vYgLdBuj=&3;u2X ziWwf)A>co$=j}cT?I@^J#v~jH+thz#6PF`y%cTnIlnlDUsuHK~cuy1Bxyf))i(h{KM5+~MDx5D3{A1wxfOfl^SIL=FaiD)4|hum}hUOZ+M-Kt&p( zulu!?g~39?SMRSMP4!ifs)7bqF@gfsYo@{$%5SbzD;2b{Lo+v2VYc#eRoF{KS6HqT z=cxc=v_2~Ar=o$1K!F&dqU-E1jjvbU2<4Abbdybjh{oB%Ro$fm0L;hR`jauSfucB@ zg6`z@pt8OeC&H-qD%&0cQ=f|8?kiTiAO-`15pfJE*yjX$9NO=AKiZUA@WDXESLYc2&_T!h z(}^xp^t57hoo6(rufW12EV2@G|22tVD%t0#Jx=g9m73r#IqLYoJHctkJL?esI+~OO z<;7v^4%Chc0H{p1BBC%wK`ew9_nRn?tE1K`yi{=qK zm{7WXlU`31byd_&sU9kV1}We2tJNUI*VxgnU!cNa3Mdj4<5$z|3Xsg;PW(lyU@1l* z9g+mEro#6mD3fr5gy`lvDm7IB&B1eRg=2v{-Boy_@-B9kwQ$;A;w)?JENkoZZ09Vy z%xQGFvnR`0*2Q@g^6y?w?LN-3zRt3KPW7*ye&0CDzIT@W>a1v}s0B#xDtgei*!+Vk z!0N0L>3XCC%6pKS;U0gB&OpVnhw}GRpC9S#gOu%dCG%2(IRSxvstd?N2!-wdm#%TuKv!Mu zs_R@XaA5$8u65N&R}FX7C^tgV&0d!dxKT%eCEtas`dJyYO8h@v7_$6geh<3+*QF6T z-J3f7nmfgY47|3^7Z)e%JPU3gY`zIW<#)U~LDN<&cwE!0c z6yJ@4Vf5sa=X6nJ(@@06ypSq+k*SI8`T8G=(}AQ#h0SC#{c_ z=D|sAJHhnzwCo&xq^!?9W1*h5R3qsUshZJeR+tg()qXDy`*L_ChqrT7$lfdt0DLRq zaIVeS1eKa!Wc9MmWLI0*-^YGabJuLxs$H62-$@^W-X^F<2g2k&F>^Z zXgRT!nj8N&Cmm0TGY;c%2ZYf*DvXUp7(Wg+;iYQQR^@vX3HkNt4dc-d1$73`K+T8VR><-<9}vVto{xM+QqHksSw+ikP7lBx=d&Np+iV*K468x_(0?BH}Su_ z>$5QdQ<0%Cpt#4$JxHC8lXtmZei`rW%A4}Id?s(gl>?yVP?z_)bka>e?Rw?zF;-N` z))JEnRe-Jv5yrdFUs&UOK=1`v;x{#O;$!k@FVi_zA)jt-CDUOWCx}U=!}bnCG7Y_S zmP1{fAlC`=0M&O?S10Q3_&uF4-wpt+G#UcweomMYlk7sQ`>hi}qg&I~OHqA=FI~N2 zr!XL0i?Zo@Ar z+)o_Kc`O059gx6#blG#rPqZ``2%LhptU9skz(IRPWv@D0H?$8EbT@u?1{Md1hjug0 zyII-7p@g@Iw@5%v>y8v=+?ySNYH_%-3acxxno28D{xo~;N4Sz-R+K<_;|b#_Jk^7r zDZZm_JV*zn(DJc|pZFPcS(faZDxduiffO8u4MH)!6eqh!{YsNBxQ%j}2D1C5K<=_pZ=l$1*P>vl~^-5jr< zAtm8ycgUFD5OA`iLUNTKq~*1>h!zgw&4H2*}q%D zdt)BJwUU3#313jbiz@C7tK&6zhU_pQJPR!y|4JwP!U1nH?==-VWWT}3V2)sQvm|$L z@O|~~=?)KLeWJw!)8SR1L|k;BV5#3LQg^N(5WW968{N;dDQ z?zJX=n7L|{iB?&;OR&jASGj~F%GS~fCd5#ZJIR`165L@6%S--rOCI6?<`<~JaSLD! zj?b!-imp=BUwa6EzLtS24^xc?i0gin(gan6@){sQ1$+SGW15|*kRlyc{FR%mFq_6J zaI2uoPKlH%RO&g)e06WxmVcr3ch*`JIPWjwN;`C znKB^Zx3yd~F4g>|PE25xVwH6xueXMJ2-1Rm%zK&fizk@8+NQ9%xp1EgISRcb#cQPV z%aX8KUO`p!vGjqa;%di(O#tUkT@|#plXDJ;apDwfZyJW29JOPwiV5qQG+d>)b0@mq zNXd9rcKz%kb{5Z#GQ`C;Q3}Tm4)m#3C%|Qd%m{y@~2XCja{KeP4-N1s%hn3~IDQo;Z?A)zC%>5L0*(7MWn!^)lu^HFv?1H***)1uppZ*D5a_k37oEn-_^mVy6T4x zTo35r{1oQaJhv?tZ5(vA%!l=}ExJDk2W71Op+%y$NO5!JZ|4wwH4Hgf zh|g-JQ77E+L#G5gh@l*fV7{Ie@c3g{-OVAQ{q9Fh2}hHdi}3pPv&C63e5(C*aE7Xt zRylLc2^Z<-__X;?hiWVDWfiPf9t;JE8fgOfSqRgK19^Lg{aLebkpfHrI;vnHrBu9` zgPMNT_SKpif3Jx~3C$P0+m?$N;Z|y>gWf-=r&MYzX9W2U-EpH?3{e#Xg~0Q8%!!Ig zEwEPtw6e6DgZ(D_-5|G7U7)Jq&u?*@S!+zN%i(=abifG?IzEDZ4>@4;g_uPgvEe4R z4?X4hv55q1FMhd$zRgF?Kz2LkYfHEGJk3W>WOgfjWufx3l%K7F&dTqi{5*w0gx}RhQu^JL-%kbo?E=>ysKOZF z+8?6)>r_ynqM^zk9ve-JR>4RWjIwA-|3(|-6WpRgWEPmb%+pf3Q1X{b#u|x#Q4DlnA4vX3 zl99~#ALu-X_&-spCUZ(M2emk}tHN>i@Bb8s%lK)@S}3JUC4Y@1zi4BQlRuEsk0igV zO2>aqW)C~x*xxF^Uw>L?p{S)2t&!kG@!yc(13TG^kkzi>?MB}L$hpDESlrx%^<#;C zbydPR#cL@5<)f)d`M?BNkYPRA-z~m8dynKMsUg3iFDJnN^AkYuf8D zsBdjbUInE60i~9!2;0dwVzhQ`d!mx{l=v;V|02JfEV;cgPwl}G`0aR%)G^tcP4J5w zwG{v@10ZGQ3qxpktD`W#s(5l@w}l6gXKf2$GOJfut>J>ZOvF|v2~nBC*mk8vohiDQ z34@eM_5p~f5n4|Q44I=gpai-~AEHVS)lxArGq|~e6?P)(U1Hf*3(T9Xv61RNx zk--sA0*mXH#CZMv=6HL7z7czQ$PuG8M6ZzlDrLTD{UE6*Q{Sfib(D%zV?CvBAoV^4 zn<&Jqy+_^_LX;JRXKC9g{DRb%6l|ybH59x`?km<;LT?bgMMd~o>u4eZP4G6>Q#M3U z?-OmJoDWESXcvOsW*bYF{0XIRrTA@>@CEsJZ`;Z2H~wkY?hvbh2}9l&*l$W9AUvBX z4287=2?Pc{jMNouvb^a~y{$ z71MwX_RYh$lD)&m$DG|mPya;s9i&c&=zMIlaqbx1eUi4Grr-=6Jx__}Xs6O4>8VCH zVtrGb8k+z!oQ}puLVRSxBW`(Yol$<={SN2FNjLn>z4El%DM(-NZucov@ zYDUF6BM_4=um5AIakhy}xJa(WYNN4~H3Tc=e~N zD`-xRlXNMbx)eaU@u_v-0?k1e2(nJdac<~FNq9tT_}lsZIfX_?Uuypi%C{};s5{Yq`)zO!=mD(Fq9on6I}|c&|s#?RjFSbl~kgI zi8T2Fn&Z=$8kSC9vlgYKkar=e}NXo^0xIo+9`nuk9!X?x9GyG-6bbM|L<(NsHHc-rP>!d_`r0z1 zrrez-U#Cl4eR;l-lx0YH1Npk4=;m^?g`BxWwziU`SQ51tH?(U$uw>)9iS8=-3&a!J zXproVW{(o8S}1XL62&J{ax%SD!&)XwYEoG}%0{d8H8uH$uKSj9{$=USJ-(w)zo(r$ zsrwH!U>C*hq3`w*@20H%wDTZ!|B=4?iMk)6?mtt*!_?>(+H#b-|7v$ksmG}F1SKA! zrN}=ta73Gd-}0ZjhmGYp#nL>miNw>rHJI=a((@ z-K})9i*;5T{R2|VFV$Xas|JU|uG;1L){c5f2R*R8KHAW(q!Ch#jWZT}XxO9AZG@ta z^sXar^`kBwcPAcmgOjfJo4XB-{2wlzap|lZmAiD_ZATI~GFwZAk}_A=2%7NAD@j6} zP@>fHrCnvY34vcpQU%XXBtc&w0M_-WA;~p`5!qQwcBe}9KvW%3X~OB!pn(Cv`sr0x@7r}x;25RtU{if*qTMEL zk7*e@q-q^?bB?+7kGpsN=1w^2CZ4t*Y~mkw)t+Hbb)ziLl>QgXsg|;_wdAysoJ-}_%VhKAvZtPC423#K%@|93 zA$E8Wr(j^K zJ_i-V;;A8Qh|29s7e!R)IPYy&35LQN7E`7IiUw179eLMM-VpK%$Qwr9aP(Z{ji8L{ z$-jXH-b89NrQJ;_W62vw-n|rmKlu-m_q|=F_-6?DbkQ3+{7kEFb@pN1_LNpaZ**?U_vwn`F_c`S_h{{I)ZJzSshl&LYh6{|p!Z0d8+#prO zi!}%l0(RR;9*V#YqOvXP*y}7oj=d}aJq864!Ku*OBf2Fh5H-|(6xiki_h&wo{0%hr z3p((IMJJ(z!@LE>XT88=rx{K+52u>;^-O@g)cPjKFg@#Xo0~LD zW$T!fz(i?A)ibKT+1|uNSeNg&qlPq$ZPQE+lrR^WYO#MGH8o)aBN?VjU6XW?DMq1- z4lUIL_$ldz>zf{pOlA|r7TbJ^#j)23ni;UlEp@-X!4xRBzB$?4oNES@iq48z3?fVs z@hgMx4f_T--f(cBZm(ko1g0qVmQtJ8tg*JuO(wcsbbobhXL?OTtoSi>wdA_IRLaJp z1Y45Wa-?`L1=myF6mrjz#cLzJWT_6{(%5ta*agpJ!fFFDr01m+yNS+{1m_6$6f1=< zG7;D&_zcrba=Ll2zR7B28a6g{8yZyUL3PKg=MZqCzc|qkRML_`GxL&NzR2Z97Ni+s zUtc5*W^zx=@JnUluQYPMxftWSNlIp^@Q_hZXd@VXHy+5GhqtlH7Dy4OfSt4#YKjTu zC`VIQO+7T_YX1riIRW?4+*eaSO_1M1Yhf(Kk(z)XV#B_{SFtPdE_My%&!)x5Cwhc< zu5A{mw)QU5(QJ+uGvGE8x0!++#_#3&eOw<6(KE_lr*Nl)g+$ZIonf)|;jCCvcFa5A zAEqCVQQmc2IMLzB4i!3TlA~rg{>&KP;~^&k;$x0Ok2vaKN0t2V5Fg(E4dTOJ>hOQ^ zJrHyGA8?QVL$b%ae_=foupVcfta#P3s>-UQGLuz8EfqmYo2l}^ujp(;C`tw^Z>Wu# zz(zhOu@Oa}k#aTilBfhAg&Kq$H$(z?)yV*%P}An22epaoP%2;uZ7JwY!T%wGU1_Q(1O2xETy z%WdsfxUG-3o8B7g8H}lwD>U-{%t<>|2Ch7 z&tUBNm-*EEH$SNdKj}OFlbICO(JdzDGZO)uAG40eeQi{QY4m54+|os{lvq_FST*~I zsxU%c2eX6ppDbaKBtB%Vi<|!!>*8yoUbjkyY8#|lCnp-}@CwVu@fO?dBp}}CFTyFL zXWJc3${`9)P?Vs#y;dW2aFb;hsJk>x)5SA%)@<#;`%|LnWgQ;YK|Kzze~dZV<44DW zOP~UE48~nvya}=4DmLCz#>1ZLL+i`1tH~mHb-ENhBbdR0TMKAyWSj)YsoaVb+<8p=eV~ zypuFlGMV^ul7dJc7jjU^qK3nIde^eQDFnfCw{o*-Z- z@a89u)IMOL(=FIM07c<7J?gOb>scZ+fgwEG8k8b@R+S8)U+!;$XRTZ_I^m+}CVb01 zQTjSzCx?f^eMae1DD6oK<`GE9QF~q1jtO#<=k2O1j5DgQp`pgR*@Q4P!$fSH#AnpR z6)O38Rj^zcXscGL#8oQkWtH@jDqXGoHLBoMrLebpQ)OaB^}5PgE;B!QV`d<4nKC>PB)R$6M)m za24%xXs<&Du>VsuQhCsXOjk5Rg|ihh?)7p-uc&aBvbBIv=+cI2^jKp8YnMCOBVKo> zs4r!VBEFN{={7ybe~22-qUujsG|jxHV`JD-YG;*%q!v=ibJT7z6)dH`F|Xe>&(px= z_9VLW1$y>H`WFVaD=An-1*@sk8|1GgwV8^x*f7>ijB&mp`qml&3Qtn=|6ZST(frR6 zC13yk?k9H!KVCKb9P&>+lp(n$93dW z?K!stH|)gaA-mb^X0h9u%X4@^g+!qn@9e?{yK`Yrp3;Xq_2xf&ah-fVe+9ce_};#} z{YsvF75D1LNR5>k&L^ z6sKIz?oE8*4gADte(**%xA4|mxp)jeejDF>Glyfj${k$gPR_ZV|Gb;qj$`*OzVRNe zdN1qyS>MNMJf}avaS!s=h^J2AV}(3nB9~9%1x0+tWUf7h%cpU9F`u8xlV|X#>Fmzr zoey#OEUv$d)4t*05U)DG*PLXAgrKsiRK>(sH8=R?n*()M~_yn7>rhS~_ro}?biL#Ps0fY0?LyFH z-7Jmou!3s1^`WMQl-j>X`ra?mc<~;ToH0U$QaDLyvcyjjHC57zq91Jx6xT7WWb9{IKv`$(bjMo)q(h(9?Do2E8<$b~4~4JV{C9sK$=UcA}e{_wI9m zL4)5a?J}jVQAtac+O0D8DX4}oi!P_}vT1^p;=^1n z?h3)7e#&uP%dxExgtD#TR5VHLo~puP>ol)AU(G=T@M@(H@##`@5ka2nqWi{kd$K)w zvEbPKIt_o5mb^+;UZXqTqSNnC+}o6ZP18DBwVozyq@nN8@0%z)mLgsH2`&7Trf#JR zw^5VrH0~=Z`<%w-=%_%4cf|ZbF+Xz7Km5p(XY0TG$Q5SfN3>sIMh2JrDU0U*w;wre z!GHLX^%CtNaqknIuv4qEC=58rwhVa?`~625?lJ&pBA88%;eaq)#SUcR(51F8VQ2tC zfjfg=wz+K4P`fF>?GWL*EtUA^tj{s4iM^IwU{Uuv4?#5eqZ9n>yoB zueDSnHeV@r#mP`#V-*|Nbo)7JO4pCY%wfmWK&3!i*uv8J(t0Y@MMZs8aFq%NDu0j) z3#_u5u(BMXg0U(Xr-CBI52*GN)v;;V-K&1ZN=>(4S)Cc`#7vd`u*!c_70yy`m8kpY zs+Z;|^_YqtSBIZaKBUDlCf>4V)Rj-ExCJU&sOVYcFH&VF7fbC}>|q!NVHI4Va^MzR zt@NwvQ-`GcoODT0|NDc1WlVy6CbBrpP|B1iWbl`Cg^IW4kn|_Z5|6w!Din z4v^YU;StI|N&C)F0i+IRDeD}a5dCary)Qw(l%$`op$h^X!CQB^eyNAnxjJr`o{i^5 zf%b3E$+v1XL6;WmI2hs{((Ww%^=u9Befzn(&*M64k$z>VRxjupFY6s^wGX%T2U=~` zMKPa+e?S);j0poAPOrh)wd~1@gq>0lWkcp%F3sWc9z3)=hgYzdAjx+!<+quVnI;Y? zLa$oK{exRfrOoEtr^b9{Nq=BrCRP_}CM{qUZzomTOMZ^T13S}Me(x$NUF4@ea${eKdfO&zV8w9q zO4&TnPUQLwmT8#Ijh66w(YMR?TcqAS_9QY>q!?1z*|K4dm?x$AJoy?KdCyAGa%rDVko{v?*CbfQ>n!$F>{a9zZxTkeMH11Cy z527*Xj9#JnYbfzNy|I;sF4R5V)M*gEKbTxC1sJMJR|Qek<3+c;uCq`v=hYy%pmg7FiQX~xl#(zScRB! zW9I4Hi{;4x$lFvZp7|G0LUqeRsRj$oHqsa9xnp(P7xh$xdf&r`0iMdWl|zFW8iOVu zw_cIG`_v3Or}7`8;9*ja#+ov;14z&-*4)lMS|bd#Fq?W+A_yv~>FY2&!~uuX3eBBX zEiaSsa`8Gq=xD=YqF9f>`L>D(hYFMr0oFH|uVS*g#dx46ja5Z$B^{KZJW1>(iHKBN zA}zt*&%!>;)NF2&hRajP5BmQ&l&Tm1?-Qx`|1ptjHW$ocew2fGG0k>toZ>&t{(SbH zVa8l#5vwKaFJ*p?{T=@=;;VXcwAt#B#&0o4KQg;NHCwis6s&OvNQUD)Gef;xkG|_d zPrpyiKB668(b+3>?m(S#zmD$HuT0SQgU?WAYkuCSd4mq#)1~ig^?{DttPOw2H(a5-hiDnM9>Dp_=Sc%0}Yg|Tr2+{d_L6{LVO?IgsUQgcXslw!n}ngKgP-5qJ&*Y-?O+h#i~H8ZI;}7PtDR8)XT@ z@Q!i)R`XVhB=#1!~$BH`8`BuNr$tZMq zlEW))%B^?6Dfq=1=|F>|y46te=%zbC_M^&1s^CFYcfRruVG}|J5-7b2aV7d9Ch+*B z9t{cT-L3@6_lA7ZKwXKKk=BKIXueYY4+-x=wict%<{$N{1#LC6SR)TJ7)N}q0@%W7+}+Aj!QFK zf1B$abEg4yk|};mS=mFb?rE#pM;FP7*JNCp>4vWc`0M3=)N>{cr&P)ud@Q=qf5B{)Q4S(P4MKc%R8WV8Rn-7DU%5kIw@? zuA-(&^-|p3x}s>JO`JsO1#N#+tjcC6HA_Wv)eDcS6;Id*fan<&F0_@EkNOz}5=v-I zkP?BSAGlQFQN1{f<0!05gaK3{Wh7yKMU|7Obq(^X6LcE>h2+;HzqZXp#wgDZ$U}96 zBD@JLXh8{?lyE8aZBON$s1Rj&Z>k!r%-2q&YYXYjB>KLH22Z9xr_jB{G-SG+-sDcB z@l)x@OsYPM_RgmH4^dP?Z_J_MhiNCuq`CCQqx9xulo%UE?RbK2dz|imnu<~9qw85? z bOsq&kYfV=Mv%6NRb6=W4P!x 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%0AoaZAA{*Y} z;%a?-O&t?_Vq#_80|Q6rcsw~A&u6Ud?^jDSPn;_gSZ<+B?eAhA(nkOUc5)rYllir? zmLuVojv?SP9;lq}J+#`ny5Tcza|l7P$Gt0==rnv+;&&x1=K!Y$@D6{d_ylJn@aI$1 zlY`!z*Mq|;I?6Cn7TR!ZW?v_7EB(}g9)9x2$=|%m4@tNfgvD=;LxG7hIHKY-LOVkU ze?~w@@nOj3k(%q0a`A(b+zOhW5c4Q!QUF$~3&r{5pGN-a6oYdC!O@#S6rYtO8I9pi zC(vOe#g|Yp+V!WvHR%w0FdE=xV#@gt-Qb=TDdAy%PO%4u33Zx&(0(+B{g>23cfp zqJY~^*A`0O$VO(I7g@vyhHmFwU0tT2&KyHjO&RWaaw)*1o%$W_F#ghnJ4|*ji-6M*VRx09Cg`XIb4$+c01twe zvAP%(@Ew{fbZMpL@j7Rs<_S8^b%LmxlUaA*c&wv|E8x)^ucHY%Wvs^c@yF|`37T6o zcVZvx@OVvkYCnggmR!=Fd8`icrr)j+G(i>a>!b1R+h*RW`A#jJS=zf8L!9@6`*b`M zHBvTSWaBr`YGF{u>b>od*urgEwg_)S+Jm9b5&3ANSrigLqCt#d+}4UnGu)Tn&Wmn1AA)+ zZg?w)W8AMTePs1jvSJyMmJPQs(#go@W^x^l#_A~famsNS`-PcwP8t;Q1qC<7>Q4Fzu!!r0U6aC{2S=*Za^kLR#F$I)*b+^nP9HPTio z))nKm;J);g0CjucNd(p-$7FOee7kYX;Bl4^tPO6Z#C0cO)rDe^mKb=@AabBp7D6m} zmduOfzv`~ldlTIuBES*jap50ewQwAwJWuoj@ks^B3C z77}zzc+H~?j*z0iv|EDnR5iy?YT*F&0jGedJ>3RK!iP4yt1A>hUL^vEaFmOBS-47J zs0;?W&O!ei8=U0~l}IlHitfB`qnuhh7-pe14DO|126cbKtqJaatsq`S;oC&-xN>UT zzOio+ts`1ZDV;e3tHD#wwgY!<&{6wC+}kI39iG#)TSucLxI+A^1O!%mqj*@ip{4vv zN?VxhPNuYriC#6(c;~)rXp^b_(8#CmDeZZj(^McbJ-m~sg5sG}ehqqN}V znyMoNyR{M7D*gu&ZU=PZR^8}R6Tf7O+G&5dM91@6`QY^=8V-utNP83ER<=a=y!&x+ zZ;A0D05)jdu26_a)5ByH}}JVkp`wZL3CQ}cA4 z1B>O|Ze8{7)xrJR$GZA}4jYNX1ZR23!KvhmS?f&h0Ln`=D*IV#U*V|uWZ#

|bD#7XvbmP1S(^`Vg(zXs}Tu&T#6*gmCY zsm^R90w-*LNxR>%joa&-`b^3k!`1`eaK<7ND%`Dw-jy4bJ=n-8o zTbDnI#26i5s(}Dtv+#C7i5~qSaGhiDOD%H886VHvC@a_57zpQD8x^=U&5yNIX`ZBc zs`jVp!s#dhx2TcwAJQSXY#`X!qtiLYYVeXS>TaX?7Q|fIGZcJ6yq!|pvQ)W1Y`mVx z6`{%2$1w+ann=t5GXfz~(j6Iss<140q1rmllHb>%zHqzv_X`q?Az80pE@hil?khI}6s8$fbzEwxlG|o^CSAUw)Uq)RIWBI~v8{jwT<7oX5vAu_x zMryv;?O9u<=@{OPM&d&q(Z}5>!6oW10VZKoueNqC1;bnbkUx1w!*3215Po^Y%W$@P z9{i=mSkJLeZYF;xv@q_$K*fnOL-l2Ezw=YOB@vlI-7SJILQIB}u@qD0T@+%WtK+n? z{zQ&n=Kx0})N*Zhd!OtRR9ppGjlLeXQ_g~YzAY!7WdEsTz2?&#J;U*H93}y)U_SFA z)R0MfCa^){|7Z|Pf(NExpZI@B&1#pM6vC5&CHFcTLf!oc1u0DJxpb-yrfGa?zn{o` z?)k)Z4trSCzv7c(ESKa_G#><3Hbpr^_?;KIjm&vM7rR@K`69_u%E66Dz87#Y%L*hL zP^-5|-XUH~3`g@@#Oo>8NWmrw-b0oJ$#xiN8NUPj9Jl2F(Ag#Izs{xmIXI9sp&w%I zsX1vpm!#{w6nFL%iTg-aUr9&XLT?HCOL&$O(!0FAqg!@Y!$+;<8y4+~nS`bI~l z#|y0gjP)R{ZcKh_augWmwAmcyYx%^KPKFTC;7^o~-Q=%z>0u`VA*6-$v^98Bu(mH{ z9J{t36)*t(`>Itf7^T-uRq$O2D@HC%FT zS>~gj_Z$;nhNaaMU_C!eFj2%9Ut2rh5c(!UpdwhQPNB?dqLmaq#q>0X(P?w1k|d6 z{1uIV2uWnV>+XrBI@fPtf{oFnR-2!8UJU}6_GsmSF990}tf-z== zV|hSg3Qo$QM1!5$*iXS!>AnnE&Cy2pQ&1!qVrc1Y3!q}1``<}ep)>5Z|M>k zOqxhsD(K^g#K5r*r#w=lDbL7BChlsai-9W*Mm8wWg6#xBY}%5pa=YU(;bakHY(;WLc$;06v6TKVq7b%zC zFA37i$CDv8?I6WgkY|`m-yp}Jo;956n2w)N=k$x=14e!}egiMO0BT!L?(zIrJVHw9 zQ56c(W=d@gH49E0w`sb9TObp7H69q9nXh##iOXG30Kbhz*+f+aiYY{A#P2x+Y~01h z5W^tr0JhWQWEftD`IEzPjTnJwol~&mQpEGLpQKBuOb3mDJWJjvF&j)e*0*jpMv}uo zK9*IPR!xm+nxa;q4#`(#sj955szr=sV^wyHDr=<58mfAsDr=$2nya#tR2i}#PgP}| zRN3jO>@-!@MU|bQ%Fa|Px~j5ns;q~~E>dNMs!WJ>sj?DPHb|8XR%HWK*$`EB zj>HRqf?!#U-lg6{>8ss=ZQ`U8`zuP-SCO*=?%qR#kh4 zS}{Sbn54?4sCrXX{xnrKU6svHW%sJG`&9k|YQ>|<&QfJ_RoN42#e7x!lqy@G#xGQ5 z(8RQ@7W_N*#@}7DhAOL3wJTNaa<$?uRl8P|tyZ<0 zRN4EgY_lr+K$U&0%05(OTUFU7s_ZjW_NglST;+eE@^`5Ccxu_q=|*&}OS0lKXg~6x z2GeK5spBP7d^v5q9+VCrgsjZ)VUO>yyw~SMDxaFdiMpIf#U=R^i48gL?$ z6ODOXLq3wlosZ>26P_3Fj$;@I^B>1?w`RNq1soxF>&aXD@Y^N4V~ATfYNm4eV*YRm zcV5bGzRK-h;lykF@iI=l&U@eF!^`>38a}dupIym`x4GRr{NrjKww4oXIPsRN5K3&| zu^V~YdwgIM@7>J9Kj6exPQ1?-ZsC;KQiZ9wu9;Kc%&%wC0y8edoZrBdW|`xgm>Zg! zv=*i{bf=xndsU`-eNU~iSu1VUDm!O`tH#SxsuX3W6)K#ku>R*m zBlm|&q!6~A#0iwZZiT$Kj(^6)mFFkhPr5nXNOY6iP|7E`Jw>Kc)pQEs>v@o{zo)-O zA(px{{vE0hoLP?Hv`klg;|?zknNH`yN%vfH9BF%SHNc#HZaqJ0%?4{6pXZ3_=sM0E z%SACG^xKCjauP>~R+!0ps;dAFAK(z==@Jfr`Mk<`uW;5f?z^1hWKK@_Hq$DuTES`S z*x$et-s6%@9B+2f+$c?u_c`w)82vOi*5iBXRV5A>k-56>6FPcU^NTuKqSF@Z^{?u5 zWM=-Zy+b+{N%z5@N@9T2oFn%>E4)a2Kuk+q_DHl!D%T3{k?{aMa?Sgv82yrAgpF)A z`!_vHGT)bGk#T)luJo|_K^6YO?_D-@} zjeXs-Rn~ry^z0w_%d_7ju!l1L^z83#>_Cq{J^RgUQ4`DAwkovQVAGPG{lP7rXTM(? z`)XU8_|KmGp{Ljb9qg)8ZBZxZ*}odr?}u&Cqc(LmHXv85V4kuSi|veOZ3#}7APrx! zB}cU%H8xslqj#)XW#wI40WxuuP1|5Wu->ps75$ zsa2GUUZiQ%<^l5VbBEl_hiUR`GIQPFr{|M-il(fj@LQsvCUp+Qo{U)x#STp!pt+9i>kS54yQiG;arx-S)Syqc`OSYHe0!n&C{HNk#as; z%#+Wt|19S`gFIORnyTFmkihs(J8JFeZ5S0?kvP&HLYOP2Fh`2)0!(tf&>W=a;) zYcnLRu6)->Y&|J$EK!zBY$#ohmGWccx~9^siDW^Z*GzJ9gtDbebIA&&yrtx~l3z{` zB;JqiDH&xV6NSNa+#@_w82Swme6u8YNaSIca00J70tsQPUc6Aub5ioWl)NA%izQwv zJzkRPS0(KgDS26{Ul(~>ZhuFXtd?rDe(x56%xs^8dqsW%&nx~xi4F-YS*T|X0~5D0 z)g4UG*+@GRZ!oLYnea2iznG#Q-Rwk%O>o2%k>{tPGTZxq6JLLqH}}6J*r)v?!M@!q zp49v!!5%S6wH`w38}3eq*yq|jJkMQhLF5ic+}o!1vJD}1JKLp}@%gsiC|fkrj)c{e zR07h1wu(Ee;0smvOEnex)r0Ef-_+BGQ~^_JDs`wsd6|^fgsQ<^Hlh+JPLFC$^Qib# zYTubE^NEpxSwJ4x=X1$iNZF&Q`g)oS+2?q&(_9Jcct{!+B!jSkjxNUGh~k(3yEv>5 zlTNV%#N?c(Z~}r)#c=y>4i{zfmJ>J(xlwy=1wngX&g{+c0LICp!@oGfgZGMi_I!9! zV8&mY97@-79!erMbLtjO!>JR(hCQdc^W$&I=5kSlJp|v)0KA zfzrsl{~Yc9BxM}kgA~vMCxZ+~ky1g0l1e4zO2#YsSs~=ME_ABRX+%Dm)5x5TYf9XM zDj+=_Ml#mnU2-?cy(BY89&nI#_y)^qVlNK!cuV@3*xb@^-r zJq7NN7($C%;Dn~so3jVFXiy%_jN1Vn>Ez@BvY7P}Zn%^?zUpq!)35PwFYyg;aLO{i z?Mz@;{o5SAwS49pE>DhmpKajMjhwlO+id3I5BRICyz_l7 z*}@2oX z^!D*Vjum2;I5^Bc;Y^M3L&sLLr_r$v-)L!u=5$vh5;oLvBP0fB%F($v94Yqr3#_l#sRWH(J`x}eKA(nWaJb?NFOc#=L!m*mn&>l= zw%^FFCWKr6Vvip3ryM@ti)C- z+^CEJOki(+$;!*lIN%_NAx%02726d0aEc%+N~*Xatxsz~lH*L5(#j3wei5Z!>_XV&Y8ndO8Nq9K zcPc1noEyslC4B{jRTVJ=u6I$>DHKno^rY40&y?8i(8>k4q@DVjB( zXn_l1b1@4`UD=uc68Wz=<}?7Hv4-L;K$eJVDcV7V`C&WpPKv&wU?2Iv5osV$OO}x!j*Mhwd=h&pfzx5YzT%$AX`@QP=NU@XvpbVjPvvRP2E%g;B-vrxCY>> zz-Gbs0qzcy02H!KxFd5n_jV)CGlB>NtU6#@h{^joiVer`9-!v{5JBf~KFh@%UBcmI zE;v`N;QTVCm>(?Xg?DlN32Y|vM|X4Tee6HTlOE>E2V7R$jB4gNy!J`XgGlcQPJ7y! zg3G`!FXrkc+-oVYI(+B8I{q?NDIy_r<9^%65qVrt^VK~Y`uL0-` z?1qP&=0xnKD(6pQfv(Lv!f3 zp$!jdc|=FaO>@m$o%fXMLh_$?(ea00(!pXauj=(!%9iU_R_cDMb?~l!Y@OzfIu&E^ zdL6->wMB#BjXuyJWb>bB*{ZocIGh$q*h?ykovttFA;Cad+E>=} zk;eTbZ-9JQBANYV)>)D{SmLtDYBPAFm{s^~*2bW58nFRlm z=yG}F3aPwO3a*wZS4mVRRo6>!tpwLe%?)z?O|oi?;Jna$tb{j9?ychAE=}){l30Rr zX;a}6__Hb{yi>v|;k%r;;_Ar~Op%hQ5=?VRfK@OU&U79_49VgB;>{9z$VprxXd358 z^pu283Oz01Lb1yHxB;QoBUx6)AgJYM05muS@W@OngW7t(MviK!YV^ zJ%~jKFg9=b{yG~6v|dxXA`c$b9VN&LO|-wN#&{})Ll zWabf>M8?X~L~CND7iGEB1u23#BJ zO~YdiH!=I0nr6qD$3hddG?HyN$C%@tO5x?!E-EKD(Rm>YJDQ?AbKFU$`6;HjgM)y+ zKh3P}YL4sT91YkUPcC%(W7xx#4{$k49R?aHfi=>g>nga!lwN59m=SPl8*SpN3}5Zy zZTULWZ;T0VGeuP-aW3m(DHV}_qGxz8CNWOQ;?%-UdDylXn51aOP7@0r36T-JB< zP3Fd}ro)HkvX4v-YLRP=>_k*x(vMchqf{@b=gILN5>w?A&pXZIzMde3_;Qb~^a!yt zS9vtrqknmHjYn5IA0n4|bTn6|+@l*k+T;0Od-R=G^@9ihK12mWkh+GTJcc*QindHP z%h+;jfAH*xR2$Z@1oL%@&8=^%>e|~I*o=nOYiu*J?4TyLpqYI<+Xgw-wy+`m*C*J5 zHkNX2k5-mXbTJ@@PqnAz+qXO0&ZpV@)9v;%Y;70&b5~n?rk!xSO^xht-R!tXYY>^I%*#$r3Mm;JQ2eV~t>+1C~gaDf#o2D!Mx+JSb(U^{n+oqM)TA8O0av9-f( zy|ZlDdG_Y>?T;5YnL*iww&O*1SE=nj!X7)ymR)LPr2Xj<%a_@rtLz~hrLVViqpQuj zWUMWkXr{qRSSJ1f(g$T%!G4x|SYS5I9WYK5Ms8MsO$tJHoT?C2s z$<(hiJ#i+z)s;pUP%vab-^7c_*~l z_tB^aXxMDZ+etOTuJ*ki`@nOWG9-dubmxJ^d^qV2!=7H&ht~|?1%r9qAijGjpE!&Y z!}*KrnI~|~!wwt>lBx`+csVMk2i}FvdI@JQ<>*bf5&N4s0`&J4m;ZpU7oDA^-^t(i|V+5|`H70)FtXpT|Ev6J&N<{{^AsaKM>gx=c-gS;EA z97s6CDd_yi^rkkF(%uF7b?YUGf%3<>5?v&7$|ZHY%n<{o2@D9hDmuaNdMDoK`#G|| ztmIf!#pxj~zzt}muhfuyyZ>~%`81mjKo5{nR~tpPu$#T0r(JxeEhw^Ey4#nEZEB%4 zK$CjgF+FSn((wA(J$jn5`wM1gDGOQvwsDUyI8n=q?c8W5|G0x? z7t3x=e8q{cIo`wa4gc^R_xP4)Ar*5kXYS*~51jaskN<_Uf9Axm{KtN7aKM49iGwUh zc=;bZO6iY&XY_GL$q1l7j6ST2X!5f(H__V~>qE!t2b$?On(FUEoygY9n`_R|<63HIrTr81q4w_RCvEk&ZFHiw zix2YibU_FG?a6xiDf)#|^&3c@L?X@Ux?g8K?+iWeG`+X0zUfRYU3B6T?SH8o{HRl) zS=uA^JE>V~5^GFiqe&pW?OpTjCx|)4ieTbqUNGMC|Lqp==fC$3?e!+3iTg({0ju(_ z-dFp*y$8H)KYO?T<}Lr-J9x-T9Q2kS_OcS*Gs)D`glETz-I?lghZ1S_a6P-fzHO0d z-^s8Elf`%Gt>z-r&kj_Pd-&$EwS zW`nUdb&4&WWvft`grnIPig&9J(qEW}>o8~VCkSmjgNr9}xYA{yX$3dR99H5J@(5uUJf=%<6&Ac~E`f`)L&Ky{%OJ})32**+vKebg# zcNv`P{nY}XCLB-M(3NyJ=?_l@8i*h~3;HRF#%W>+73ziQgB)5Ekg)Csx_D8 zd**1c&sjEj;Xh)dc&#OXPS{oeG6N0*=7aSgD?i8%to&H^JGe+~1gS@VgC0r5qo{AP zbQMtW!2jr7Ejrq}I!fo?r_-=OluJ2wgvGKQJHort2U67y!s{Ve6?so0>=9eUM-9-? zo#KNezJdK>hwx4(e5(29PH~B8ewF$8Ia360I5vw940IZ$Tg~suTzcOr6& zZEmHdrf@8cO^d#F0ns|N=%u1f$-s2NJZs$p!#~nO5$>UQ!|1>W=-Q%vFA9>Q-<6fTM z*9!)FG{jAt(fJ;a@Mx4rmwNH#o?Pk4Xiu*3{A)eG%#*PmqjYtg$K_tbJ3XH2(R45O zE-!r0<3~K1<8ie|PkZ!~r=R!eWsjD7w9KO#FMiA8cRXI}(Hf86_4s{{u+Z)BXtx*d z@v^{>&VfQz2cKz#pVJXRVILdgg2=ux{F^k};W2n$&jRa2;V zx+7?iqj=YAlv0%pmO-3|XL3Jsx6gD+R@RR9WTu1e(|39SptdtS!K{9C&Hvgf?d0(+ z6@O&hU+yuWdhriw68W|C-IvsS7nwbj{uLGN1|P&F-E?lG`xNTb?y%13)ZRMirR(+8 zsXcYc08Rb%(t$d2kj@;eQ-|n!=W2w{w82?^k`89*aHIZclTO{C8{RFwKaglU5@=2M zvl(}bEvQO@SrAX2d>tw?a3tD#}-hV=cwaiy8LCT`#N=8PIKR-_cqacb)3vT8@W1mjle|p`-1Bm2Qg(7HWvH{99m`G=$`Bq}Jnfxdfb!^50V}zgM|UD7`6F z!2Sbu$Fo$khVs62!opIY3+r%IeIA>_5m3PljvI4$w4I@un^d_K7bg{Zd4n0x(lN8S z<_(^)iA%S_TH@4t(IM9%6&~jJWF7a^eu=*GBJG3AgPMJc_Fr=ymx$L60nS*FIwH_M zo$Rob_*C(cs@K=WQ->D{UFymT6Qd>fMp<;T_?6<{Ddp2#hEllMh2P3vnX*q(f0UG8 zCHOc{6X3p%;y})O3Hzm{-xjXv{KG`Ihlknyl6Cv<|`8 z;mxM-BQtuNdqN<>Z(U?-F0_2JEq%nL_xKB~zshE6#f{X=Zt9p3YE7)-g=&SN7@|iQ zAL=lj$}7+0l1I5@wv&saX$6Q}yAqA19)c?v591aNe`wLm$a7}M5*R&9xYWo?MqV{g z8}f&y*S}5pxk)?D^V>iNWdo(UG*V$VB_kA^&Qb#Ji3H2s!WbmK)s_zpCI1P2!`vqj z8Kme7X&84mEeX%K1{Q*`?mvsiNI# zD!gyMs(8N&4eCi3t4^xbx?e%C!U2@@& zh_+6ri49$4Uh_=yGbp18C7MzK;j||tB|7;;!zdm>bO}YsqC^-4yr_3j)}0iNqcZr> zDkw81Q%>O|$Jfh5sPQC(bM!RtRjmjPV%AKmN?$63a>w0 zSMO1eEtK{?MVl%9fJ*=Egw~m#QuG-$`+`ch(E+^FJ1J0{NgQbIX!t6RzsK_ic}6pi zTdKw$Y~Go>PLAf7F(p5B_Hw# z7W>8AWhuu?c>AjyzszG_;e9W1@oRkW4UU(&f~~lQ;}u-B(q(tYtC=u2VuaoR=YrD? zp@#3x4GX4)WN1N5d`Xsu!H8S9jA<7hN4`zfgzWbxN_G3rW(2 zI=D!eV<|gdYoOv|^tiFQ<|c=G`&GK(Bs~@D+daCXT4&7FHS=`ZlX}Q&I_*t|T9<#K z2Y;^R3!S@7SMArC2XyW4y5yivU>Qsk4?2ei;%ABukQ6G<)|Dw}>1`v2+R0aKWjv<$ z&Jvy`U*@BCK!UDP)J>3wP;{n*T?DJPDUc)G#T3aMJ)~VPSzRoN-m)BNes@VUMOIIf zaH@1fc+TD8-6I(@rQ3XI1>^rhISWO%Yh?Xeq4h%RQKyAiMozcK7fVyL}yOv(#?303A;l*Yr;Mz?rXvU zX2U?kz(tYFaK5WwX?CIE3(T;KOnIrPm&~TP=~5FTp5kI7pc)ZU@h=lRZ4NCksYs=G z#stqf04G{x(qA+oL|m&~jEp-1zi+B>0{XYn+e~?_S+Udn1oMJ;l;Xu0ZtHr8j|V8K zG4El@#mL&vW9-Z4dOXY{On2vabfG81Ju3C+A}@x76|?KevF)0e)IbO?(I$HCl@5VeW%)!JK2hS zy9^nOr`dz2+g)AlTW7eep}5dCitNyCHh~Gh#73a?N7>9v?J<|wc%_&!={_$>tenTtO%VO!6i?#)=^5zPLt+lAP4u;VmwxE8z{ zc+;`_1aB}MgcisKRUEA~@BiSH!sGK2MW?z^he~ug!bS!p{XT8gdp)>kKhN*)$p9}J z=!GR->L4%rRUqEOrWOuU~& z56k3wjXA9$r)9A@mg_ckfR%SV{}8f=>9L(NEcm^+PhY+eQWFTvV~#4AlWQO&@EmTA zNzBtYV+I_KEO#^C$8xVrYecef!Gk;lhStZE#_iWQ`jB}Ghqc^bm+P$T`WvSmWbY88 zurg+yYc)02&GU8GMQ4uEStE2bQb!kS1| z)w-)IK48=zbQ8v;SSXHEPBL8R7Ri83riXAJsqH7;AfbV>et`HTa$SFciL(4G8Gp9$ z5Gflf#pg=X^Q871*>k?c7l;`qWh0%xV8jTCFBZnscbRaqs2Vo3_-aWnOExLoB>ouJ zr%*c9=?3Xmp*!TQSh!r8R=UP&?=BfRQQ|5ICW|*k8cmgY(`5W~$(S$U$1-G>3uGqP zCx3+c6%Udr&?Y^_K&DmgnK0FqrS;4-f!X@xNtL<@yZGNU(8DN|Yd)lFq4ZAz2 zwisTgVw=+2-r3hy1A^{nX@D*1Z=*prEV1c>ZNU)hpKYUaY>%OK{&3s#0vo{Jjq}Te zuCob3i?oX^L$o={23I=1qu$k)vAkSs8EeaE=L16NfZSliF*dr{X5ZqRm^{|Lf4eQd z!xoiUF1PV`+x$-3W`d=O_DV1#lPpiMcid%ps-+PV8&OLEpligWhqdav}mKyrMdAS0-Tz|h=4|DhkbMpOSKm8VXV6RI-Fhw!&n>2hi|>yg`sA@Lx3It_}Ii9y}j-K2}|r)~os0$K3A_EavRjx%D!R zY8at;{(25SX8wfv3yx|z_<;pONKbuFl`fjBn@`eprf9wkRmEDS>q3~bW@`U#T`@z) z_vqkWtk^mS<~tZI;q`{s@&V^zZ$4YgqdH}d4j<7{t@UD^`i71`pl{IC>vhFuUGTmx z_)u4`(DmyHw-qF|Nk=&liS&`Z1I35=3+J!?5|5Pl1|cM8-Y(CL6LdUCx$6KzE=uMz zlJ~acZkE*D(tMZDw=M+>$FcY)kpr^tXQ5vtJ}CYnY1Z6Ctqg*yYUa7a)K_cWmaR9N z+;wK&CPVPl|7;%H>M`(;kK9hmzSRxv?;R|{D0-h}r=4!^J;ToEVrO)=zE$(jL>|s-i?S;K;c5j>LYoF_5`}MbX_Om?(*j#P) zIz?kBnorR)Nj=XeE_b&IV#SF(2vpk9xPy5dCv`6_nd&H&h6J!QopP5hpQbZ9$ha<& zTOeP<1P2oT8!3gOVVIGTCb-?KUw~RVZwBn)KfBC5*oP}RSnQs}eg@_Ab?9r<%K4jr~e>{8}aUsKei=G2f}gx2og!YWffAroF1u zK6S#6D*i>a`&F6!s{R4h@u2GXyXpv0=wWqRLUkc}8EOkSVlk1W5{wKTE$!Fzo=<-m zI#7?6)TPVo(?~Q}r_+uG)G3p0&!FWEX#`U4o6xDpP-zwoKbATs&sJNTQ6i+vn^Pj2 zE^k4JmXv5kOWV=@_H=w(N(cZ3< zeI{)>ol?8e>k)M^rnuOGzL-D zSyXoj?HNomloBP>@jUu)7=3g$Z9IqO45!b}r;ZmIgP%AZo7i+xRMV2i-wM-y;sqD*U-h+(y?XK&k436*S z=su3`<#-nN{E7qP#MP^^9TioDME6g%54?1{4r_Jvr4DxLaF-6h*1TKucbdP^{BP{QZXv*IE?PzniGSM-YT%Wx68 z-lA)3r1Bl-^NLm{R|$xve-!>hPGje_4|kcGpG`S-Lpb}A)&mzBP-tO0MIi+W-N1w7 zp^yU1=5R-XJck_(yVwXDTc+p_+Dx^nv($Q zU0}mecBN8R6~eAgAs#LLpPEXX*!AzGk_;Bqlw@++|E{AX$y=c_nm^-|@40fH>m|=I zu5!IJSLbxn+5dC!aH|Uvk3ZMQKMB9k(M}!g()6{CcDs8=-|O%PH{;=E(b`|3&%#|p@JDM>BKUYEpUk2u*SwK zamQ89+nfwCgarm0B2u+e4MHU1t~MTG`J7}a5-vW@(LkJDq40HQv4Oqu=98R$8_I!# zV(lc^S;8eE=SlFT_&v-M*BKsT{0~q>VrZ)gVCF@+3B(v}RSNFlTk70Hs+mWFfbi6# zvGwWN3te08(CdjSD4sxI@bi(;S4BSZZD4zUfaF069wvV_$y^GmiRY6nB7WNeu)_e` z8aEM_Al4PQ%5fZr9OW|uJW1NAI+eJfr~I>+#&h=>OpkEaq(-7kHFurEbubt_&Lih? z4kQ!vcrw=czf}{6xH-DozsSv?T3^ORA8`6Nyxy-1oamf$7%c&SW$MMl3YA1{;cuS>LC>bxU|-R$tKa+B( zFYr1iq*R$$o5*vf+AQBh*3_h#xS;{|RGw$NlT1wqbJrV}` z-{W)-d)>PxTH|7wXKymaKbr8ciIHSh-=n|_8+hR{Uf9x;c3xQI;b0h?c_o9Vf^o$q24m$!aF06^t36x zY*lX?_d%wjtr%)cDsACxTl1JLdCoGdKpU(F(}bwfA|(JYuUBELYCxn&+X(?e4@l@GgpPvPQ51GUfKY^hpeP8Tcj?k4^xj0p zbB+b2SWv;E(&2gM+7XYZ+Bcch6o=L-ZLJUs^L}!l>nWCU{`}6!9-*4Upfk9!hS2@*Cl6KP;WJRRbAnZ-Lc3aM%gwcR>Cwuy#Xsfd;uu z+yey%pcAuq_CdL$F!BgE2Z4L*;m5%|3{?)n%)P*vm-9ZXAn7!eI0G|3gp%js29smI zhHYO#k;_2e!oI5z^(zdx39%t4cON&Wo)r-{1@W?le+$Rl2n-g*l41BkF|1ky zI~B)0(Ks^-Qv*1wly({xDT`BWG-I$>30zkO!%O3o3fQn54k(YCD`N3VXvL!yr!&}2 zWwfebL;^C^;g#x$59=hhoruY`(XE44eY6^JhXvgvWVk3bMQn~`T3|CKcBX3fCO2Y6 zGwr`U#y)}B9nfSmFB<_kp4|mgyJC&*n9O#7p4h1$MtEpvqc;}4ETkN*)y^M}IPrl~ zdm1*G@j$CR8$G`4ysLYlz}K$%=xoAU8}XIR*kucz-G-z24YnO`?7|6K@zEU^+=*xX z>Tb~jEVlfUqiw z{v6J!uBG<&BVuKW@KQxyThW|%F6nw*RXIbrLqyDQ;f-KCrsy$BTxC4S%K~#m4ByVi z>1;D!(84E+7E^?nD%Skh7qp1~{({C4=tY7S3tB32mxzh0#lSVPT{G$txdYlvDspBI5j7a-XqyvK zvNWk8O{qYw;)xR%xp7SNA~%-yS0buRi3x;Nh=Sx+r54rbn;P_7BHepPUoEH9q|hUD zs}_}gj6#pnj@q=c4q;uIRG+@8N7Wvu{SD}LBYL4Rbx5YaG@%tPebJQeHKeo6>ANIK zOrcOJJ=}~&wct<<-A|+2tm|q`7djBNC$|mR?PzRUTGEk{dA`(%nxvE6o$hs|TRkYy ziz+cMs0$_arkWX)+=p-grDxLq{&Z#_rS&7{Nvb!Dt`4UAPtooX^vQ6_eVRHvM?XJH zO`a!wk@~zqqh6wJBPsk9TKF=xCR-LNz`Hr z^?#jkDmBg{=Ie5ZI%6g!v#W){HM1$=9m<`vn z?kY-JLy_-M+qLAaquJ{zXA=ea6TF$mZKWC8$=yZBvFZY{_L9AiXg`%Z%x(*cWXQ$| z%05XErx@!^O;1z7SxWjF*=)Hwr$5jmKPUSOa=xU9^Mv0}oeSiCN2e~+#2;wU6{_$v zxj$*hjLVnzTl58g$_;ry$gfBigfW~=G7^x7z^_NjNyQ{zBp6p3U0g<&l$8RqWsEdS zOShCNP<=TiP?F=qIVaw0)TNuZQKmBQoivWIFU;PwSIvlVcLj zN%yZZ@VP8-0A{wURK*OnBZ*7-c3rXF6;rnPVp8n{8H_#h021%gr{c z%r>jdg!j#a?Pl>^W}B^MLV=mE(@fZBwmD?ZK5r&mFcU7B375@;A54a7l7ED-{alb+ zO2zR<`Y~nJQ(k@LHc+VyN#jKThfABNiOI@z)s&|C;uFsqu$HQTPui{ZVLQ8>PB_PR zRM1)7>ZEy+IjlN;LRWy17tI+u5+*WLaDa0EG`ldLQZ^6wo>SI~dZw5CZ{v%UaVmPe z&J=OZ+2QfUBo#MBbuXM?Ox3WF--j4)DQmVOfA#R?yDDapDxR-Cny21dtT;-yf1#?n zR3$G_@yk^93iZS)71*eUdn`dnTdk7TtBiFjj62brRrXeux=o>v#Gk%H!7c>_>WRJT ziT!HzAr&~N%)`n$s_?kVKcc*o$~~d#oKnPjrzB338t?WouJae|I_50@PY9p1CqCRP=E~F}vtf+;)(e!Sn za@(jwt+nOBY^UNos9`)=O;aiD)q;-d7Y@F1>a~-a(nEdIS#^0r1-q*k9t2&z?2u3`KYX{?;;rQ+_v|hll7m-HdRnA(!g!nR!eFdXN zA&tgjoR)bPOY?nUrw)PGhqWpNdBAu^cdO|qe4)GO$a|K(RP?m359W62ue2~zx^GB4 zsFMuV*E02@W|6tKB{;f70CP>`kQG+|8tPCY|4wFc5V4;^4y4Uhv`~94=(w`@pXsEI z9QP?>?BNi5wvn;eh&g1q7mSR{nwV_~&EPVtgBqr{-fVRV9}n(Wa3_GvXSvDXO$GNY z;24ZI2i$q!EC4SbtYxsBTfNmZGU%-&#AHnl4>60oCC+Svq4t{k&av~*Saimr_YUIQ z$n#!atZ;&2{w54;#vuQ~aD2#LB}=|wayI5Ldi*mvg~5-|4E?V9a?rq`T5$-+VhBzZc00e?u zMk5s=mxIm$>Tgr6XsT6|YDLoY7?LHZR%x1Emim{Y{;~9EC4B{(9;8}T$$pqTE)z8+ zs|Cfir*R!9HC-#e0}o0-?jWi;l)?uSy+DJciYa)FTDq~v?-;4rySN!}9jZkG$}5&mm`Nu;D=(zB%# zEm;$mRaQE@@U6mBCEaQ#ZpSo~nMwM+-7ZQ42l#&1PPuIrJ-}D; z#3Q|kI=1KS(;gdsZ_$w!RTqXwNb;3LEQ)WA;+`(wlUi%!VU zXWHIwoj1-iGUD$>)^A3c>qgNVM!#Du7c;!uhPY#d{4k8TXY>K+&0Bwh41=59Fq^NP zN{;}aivSkBUYC#&3E{<{c@gNxx6UYdx&#yiplWfL6b-4RVQU%aR~}R>Se0OMb!c4! zQtClgeaLcQD=SLdz=2fg*$N_4Aff~G>McGrC4o;_edS1`N4yZzzfVCXpz z)KEC^G>mu#dcFjYjD&j6!Aq}bH*3RDFyS@WF&aXzLgO*;QWkJgz1$+mTMRdrz~9z^ z$&k8@;GKkbPQlF6;Qke|LlC$R*Mt`0F}!G-iDMLwVR(^GF1jCq&qU&vKD=m5G``0C zqT<*qfcHz`{Sp|8!Fy%!%aRzf@sbZO3RS?3 z7~2h>?v6M3jn^A1^ufv*SUeMDKZL#*I|fs;F(L<@T--ZBOSGBa>u$lj3?1E$p>0@p ztG<72*@LV1<4m5jeT?xR;^4E`^dgq!-O~kBU*o;YnDQ-_{08YejQAe!{(u=*aPp7X z^C#SK4M$wXo`1*2KjXk(G2%De`?!F*;>-GCUt?kVrS+_2@k3K_Gewl_F1q#>(S1bY z9wI42>|u@0i=x>`G5=*T@fFc%fjG8EgcgfwOGRjjXtG+|UnTCZ5u?|MbDKrg^&+%U zgtm$so5a)H1KlC;1L5rwS;s`*&xLneOt>Y=6`=}IRI<1pc?DP(T|y7I%mm5`(y(fj zR)hLgCpS^QQ4=2_+plUybB(Arovce=)~6<1*nFIRYCu;T)5{I1L=)QDi0-=dYBH5f zqAz))-JCM{>d}Jw`L)ej&8S{0ol8{yjl)f&F${$CJDcMf>6T7z7dqCJM)#twJ?VHR zMGc_C{itYPs?ndK2I|h{3r`YvHt!6fHA5+B7=1RJ?v0=+Pf_x7H2rz1_M-OF6&5x_ zFH>j~6?=uu(PVoR$kw^X_;D1QOBW_m&Sa`EfvQZRC#F!>*QvPQ)`S_9^#-|2{+Ujl zW)i13Xf|cOL*5+nmecHIbYUr#SwXL^q4n=k>{@c)C)`FE2kF)kT7Q_#Lp1yZ6*)$K zJ5ISLDdrU2JWUzg&^$}dC%T^5!LMhEkEqe-wD>%UuPNdp<$gtPU7(ns^x`jYl?rZC z_8off9$6sE-=&%y9V{a67nPkN<=hAvvSoghOpKO+;_~YlIli=%Wn^4gxu%?a=^=Tx zh72{4`L2v@D(|-6Lr;9 zty(I#&4bZ&Up1tk>YAzg4_ENCD)+2v{*)RyLOt`2DluCX@R@n88Zk$`@UChyUxgN_ zF$+~_u?o#op#|#h5;c06n!iHbTCQfTRH0RB#9EcJQO#eYwro%rHYv4Q%~_{*zpr|1 zR`ym^al6{LQ|;WPcJELlcB|?Is?0t$|A0EXSC!eXLI>41M^)&EQpeTa6YB0UHQ|(c z_pbTO9r}(NG$oQ<8V>hS!OMX1tgA+6Jz2FbU}<3E^LjtVcYO0vME ztFjnfSX;75(5$LF_QzG^Y^Y%`G(MgI?o9CVI34Pv)t9k6I8T+kJ-OhRWOMisK` z(!_?2BG^>~YSQ#9T62w7{+;^$M%%gIe3S0prkQtXu#(s6$h>VbIbQE))5ZhWDuMCN zXU*gW%HzNoI}>NYrnlgsdC+MO*oUFpHSOiZ;y9xuW|zR=qZ-S=0w5g0ELnu57=9R| zkK&!I4j~l6j2|EVV{c1 zezTr;4Q_c7g9)CYKo%{@rkQgIcT)dPDerrl{2k#Bdi(z|$vjgh$9Vpa#dXQLb-X-W zN9Ht_%je4T3uW9AO>rD`PJZ#Z91x?z%c^YN@pV?OOj0@1l*^X7J?abLnB~tZJfUTfxYJC{Ag< zA!25UI`3%OK;C-s^ZjE8dwS+O zTKy|ixb*RuHJlnmSzL^ve)F3qo%}=pFcZ z9`xD+@f`ZS25oM_-QswIj~{##Ny8T1@aqxy!({x0hp|iX@?pGp6hp`G%i|1P6roZg zR7r%mdstr_X)8V%Dqi)(t~W$zmU#6Y@$*_yi@&*h#oe~a% zqPgYi{$RTC42{X6d)ag~mk!OP$er}=r!?q$3VlbRAE*rf(sD0V%0yF!TQX0{oZ@nE zWqChdzEw$ftRq9s<)mCWcCN19hR(^*=kh2UGh=jfFcehkVRf~ms=)D#9xAb?5*$^U zq~=UjBc`j-J5<^p#oKedF1eb~ZK33M^0Y6FwDU&zMI-65k@k%d{LTn|Zv?Lx!Jmxa zkA}Qz1aBC@TUwpLm?$pWKs#WMyYd z2zG)_=@3kVV0YNi1tNMvunz=#Ls|wT^@U(R2=s^GKnM+^3Jzh=IWnow)M!YZ5HwxM+zN<>J zo6?w86rDwZOU!$h-n(k~0=16I>C05>Rm$C{O0H4WH>oWCl<*pKtNLuWa`vf&{R$4M zc1P9b6D-k#815u~E;C*eGyf_%t?Ky$7MEYAyoKk5I}Zd_sc>fR@Iu_yLk9W?;WCC@ zp@|97o-;6ke z=1olGWaBz*kYs8Egvq1|(utGqoBBD5uBUPzSNRQ8enXYtSTRQ^zlq9EQTeGVw}nb- zsRuYbBFk^DgK+%LPwV27viP;xU8VI@Y28#>AC=!vrDdx8K`N!IiW{l7b)U>u3zF2j zBvm`v@RkA32Rxn<_pitVEP8rtz9qrS%aMR25Qn(pba zXNrp+4S5}3M;2=)<6e~6Gi1aP{nuww-2AiVkv0+R2L6e z;G|yhbF`RI*c^;!a+)swOcnMtonEuv6!vUQjAtEy{jQFvS&3w^;eu13zY^Uf;^9LH znZiAtbP2Phb6g)wc-ZUxBJJv?H`R2mnXZ30VN&G{|3|@+BmVTe%wKJza`}hg6Cv*K z2gN_1*oG03h81Q6EyIa00+B{|F#}2%RM$vLH$)dBtFw{a)d+Mm!g?5HPeXJ!?B0gi z%Mg7GnPFsR8nUmE%8l{<8YCqL8VtIhI@l0HjPNIoz*9zGs1Y&6uqqhL$Hp&=)bmD= zaZ=2Zx@d??MilEcOF>#`s8<&9V<4j>pnoGyDyJoVF%=-+0f>cCagbLDC?3qp&@cfu zr2;&w(+D@mgEtnu3E<`GDI&8Ri%fy+so>23oC%l*pS%Um+gkPO&DHsYlm!5bz|9AH zzP6sRxr6cSoK>LpKpTLasvR~%r!7$LeF$y?+6nCQiscx?KA>ZOhXD=&odDx8Y z^N{p4$P1A86~tYHq^n?ac#ZSF7ETSrW<}76L@18gHs%M=V;Fb|^eW=9O8o1Mb{yJV zEvbxl6|@u3s)m88IK2kWt&Rx~qgxxZ>!4j9?MCP%p`DCr&CzLzCHXGg8pHTZ*blA# zxOV`GK_~`dU<}52$jR#DvDhjHaU3R($0idoyD(Yphd<*BW7Y3ya#Z0WlJc?nBE*gC zXVFYr76ujZw~(|86L+B8iG4mmEWm_4n9L*71Bi!k@jeVYhIB#`S<&ay+8?6)L^Gh0 zzChxX=C_E~@yZR1zln>PCvXQN?qc9JPQHh!MHpGh6;u)DXt0~rK%}GyyO}7_TtxK~ z75a*_OcB*zOd2H^h@JI{$YA5l1G?Z4rVG9g}|D2Z^0}R0t=@Izw5U6yhQ(zn6;18j+f2NhNg2F1Ebf zQBhXl`$B@WYD=oGw>EaVq~6jVDx-$T#3yCsQxb+rbGQ^w%X6com8IdOFi*k)X)Ts_ zxQ)0*J5tTHa@0DhHps12ZlI*q$(p0*iUgIRTlc8@e zyeTMP%E54DKdsznl>L-)hpCL`RHf&Yd_mQCS>Y?n8>#Hqbjs8otL$;g9j~kj%Fa>V zL}gD=&SYi3t`{`kG-bcR+Fw>=s>Hdf(h41hl52$uXzbG2+kJfVa_JjI+0+brg%9M(ZzV zeTLazU>$y-e#E4!=-xp07KRrUB1RN-*n!2~0llEV5EOEeh+8OVt!TPI1lEgN8-=w) zI7da&N#UFoKYb*wek>mPi)eXHl>W@GHhe8QT^Dpy9K0pY-4j*ri&F-D%hwU2kf1n= zsuiJX6)Cp{_2IctGC>OEH>0QyG>qk&9DeRdKXsuiy~!R#tB2|X@U3TQt4B^Yd9Ra` zN3P$Z8a-2YQ767hZ_lQE?~pTxoVn!9qm22~W)a0KBYP=%E2#E+WF05>G~vgZ3(7vJ z!57K>hMIj(+kT?GymI}S=vRVY$i72KdI_BLN}IHvV6Cf z)&tRaeZ@FGO#|}_X35v)$k0NWwoSr*>Ftp=Ghq(PS|{XZM`Wv`vg&DhdRbHav zuXYx%J|9clC~J}SJgO6#W~PR~zOWmc-Ps}*igpYBohxG!KB{j*`=BnVD{ z;52Bn9jfwYi$7TWkz!+ohefhgx(2{w|S*KjyZ}QRlgtB-npp2x+ zM)njVFxAMPW+c5~#Lh6BJR@zU5j)EWylJGpWn{l&B+W5`^Nh52jr_NbV7?JO-$+_y zq%AO#mKsqjjI`xO_A(=XrQt0$0&|VDRYuloBk-P)zs^WoW8`lzvez2HjYjf%BWsfp z+-#)1Z=`K8ysbw5b|bLENZVy3ePE>RF@igdw7o|5ej{z4k#xY22aTj8NN)%1_=C>c z2kPwyr?@spaAMo$N4^Yt{M4r)Fval+bUJ8?V{R9;hod_T-KWud7IR1Fjimb=Mn8|v zi|D>Tf)PGpuLt<`FbgL?^Ru|i=iHV8At|dNrRIIEi(w`RD zp2*1(W5??@1PiB}HNssdO05;nCgE)qar?y8y}~;r!Vim;M>P*HC6nU%(e6Q%{WMj3 z*7t0_MDA;}FpFk>OWFRj8M;hy-_gn+X~h-#faA*7bu?l+dk#o*bQvze$5huJ0(f!y z*`zG#jFss*GHI3^JWo3F^}%)NF*);uoPJsc&d5tAWs*<*eeVnDU6AQt%ZCDLRkTX+ z={j+xG#a|p;qbku!b?Bi6JfYHisqk(p)JLWDR@L~6(^c)7qTChg+;)||PsJL>Gfw0ZSad;|ToHfyM&8mX*gmDWV1xr$9XGDUCC zEAs==Qk`z4vbmAeRxyyx?x3>MR6$3TRM0kc9$3{3?M;8Ju0e3(2W86Ui&z8g` zC9r$8mJt*zLEMQB?{+tf_NN4%73^r9_X1^YriDAmJ3u9G6H|Q>i|Gxf!;4Ekw>+xX zmpgJ~sTneBmYi}zI>%)4DOqq%hW||xQ*A$&)6zBYLGUJ#)u;_rEPv~HIoM3a`nN5< za^~@isIPK4kv>nsY7MZZ{fbWTo71n%8%ExrTl0TZ=F1p%T?5-1IKaTshM8qJf9|SZ zHY9h|FBrMs8qW6ySIcEtaG2G=0;cjhx9P@%8wV5w>tUd}+KB4b2WL2R;YRsnxX47= z>5$7q$d!<{8kVmBxfy6XblDGmxGl~-aqgIW1?D%bnq>S5&WO-$f{{g$Eacs_T?}Kw zkoaI9g_CTJ)aE1oc?Z+@FwaW&>ImEoZ;DYVn9NuE)|ky@@F7TpaLi!+UiJ8&V}h4VZNdv;JJ)K96t%zrT)-A%M5( zQh*R(3MPgCm$F@9wGzAAif@{W*fcRVQ@~3iFhRpfUe6V@KoqRh7-T*k*gJ*yfoOV6 zIHv`0`I_5~7xhS)b8baTQ7Xgb{#>tqoV*6QsJNglrT^ih@1?QHHut7yY0StI>xe#} zX$4gO82x;PR-7gHn&=X#YjpG~-TRsD|DE<8M@#MTyWl`Hx!)2;PPM-Za1HhbX1k@yH`Sh=?XHB_@G#SXu{al{gcwB#GYRxp$;zWlJ&%wg}@=s<4 zp8-m#h1^iCuU_`+$vHgpch!hg{fz(GR6pj}%*T(nVHK>RcKS)DPAZu}i#>GgpPLab z*OoK&)6D^-lxLOTL+nV^dz6A4h11mdHyEy^`^yX7Ro~1}IdfI9RlfLay@F%XQhl`eOr(jf5O>XC94Xa_WoemGL>4;7`JHOE47E%@-9go*0pnM$@ zrs2)0SbPSiy@@ufB9`MbtC3x4$maq6=h%U-??lDjjRG9bBgBI^@qi8hXC1{;9L_m| z#W}6SMfDG{?q6}>mwJxG`)K?gzyCW| zh`2Xg&{$3T@4*1H$s%>CSTIdwEfTesiC)VE@Tz)^xW8V|7X5nRTBWsHL>v%R_KN-c zM8r{1n&E;0vTd@W$tp_0l5{+h2A3j}%PA$uDy<>IFO(y@B4I40RwAfOkU(yb2ey<^ zjSf|(cC{#%3)hV)u@PNne{O4<#;uliG`cNSe1f1m&F)H_y3k)U>D~aMzLfSP%^pg( zhmbp*zI=*Cjv#tkbAazXN5AlyHk*oN5ss&2K0L>pLi7&p+(7n5%Gg2^b`fxtbSGsM zklagQ`-x@W+z%@E7YhH3?DP7PVtq^Dm$c#H=8t4vrL3PR_$%$WMecoF^hgjg5BcRI zNlMq0Z&>nRnCz!yM!0+?LM|*OyG6;2Xt}whM(-{zAw#8QEe7zGl8wqpC@Uk&%iHlX ztBS0YAn#O_IW=XdmK3$+mygOX6XoqkWZTE&&bsoEI`Y^0ve)DCdIMR!vAo?#%7*gC zCbC1a-qS^J*{7upwvt2JNMO`w4>_riEb+9=Eo=a>!+Nar#>u!TGJCqL&Byy$a{k-$ z^gQV?R${Z{)nVv}TzFdUKPeN=$dAs-mrlvBPvzv#rMN7+U6Pb-rj9k?tjS`U-+naR ztET<4Ip><`T{kmsn;h(dEZfhDtV2*}Q^mq}&uWt*JWbPloxueX6C3Yo#Lm%M=eH zlAcgzcNNZ&(Y^`?s^SCGwI|i=K`QSVKuUh zgV6j4m`7peK0W2gJ`PbQp}3y~ntlen51|}kG#`N?k!SH~6)~Bok*VmkLf|TH8oJ%_ zxPP{xvAPFAYn)Vo%omC82$k|+!jBGgZJaQ14u{ow=Cx{=K4E6j|Y{f5l`tiXDjYR ze5?r)OvQj1=>4w@}^)j||ac4@N9Qbc32 z8c>HuwC@E9n?kxxJcGP92=XXxIz9Uq;Vgogx=6Tawtks#$Rz7sN}5ZSA83aKgp0}b zGwoT6$Xcjl?aopXD+pJU{T{h%$=gKERw}-o96!pQzmxD!X?A9hz#)n}PWCCXPixUU z!@lSvvN*MPfvlg&;&xMc`8LD4<0SF{eufM?B75>eih3BEV%D~8R#^FJDR)v$jt>>K*`-@a|w_YJydu%?p> z%{K9AhG*tr3r=5vZGj`fF3MMIumfO61Cvs0#^sd(yBx2!byV1Kz=;Dd7M#lLfr7L| zupb7y4nPyIT(FbDY03?8uu~x}1?(1Jw+6c<*qy*(#bg?=hl_9VR!^||fZZFM4DkAb z-A~g~YYhZ@FgOFi83OiDfTzG22Am>Dd=|XtzxFe(gli(*~`<`luw(Re2c;{q5}3ZvK`Q5th%Fu4py zmBYC5m|GE}9L!DDh6rkp(P>!F3H$%sV-+WKvKis}QLRe;_fT&W`%dFTOJ>M*(|u;xjO zK8>-bFrOJyoF({JFFG}8>N8ZAbzr#2HH4qhzJ;?xXoEn-_!J!;W zPefC%W>rs!a6RTGs6B* z*jyC-ubRT&3A?Z?d{y8dec|8uZ$zF=ZZx??$>q~z333ZXrRB(rC6|jo-1=!i#F^wQ zy1}Q5JXYHiO(&X3^d_Sb$$5vYIbt{-r_X|tpO)iXZ^lPJZH%Qtdt)0@^CA|W@L9h-;cb~NOO8cOu<~nC&8t)cAlLhCc zxFBOVTKu&vU^y3?xxlpe8fBYQ+@#VbRW`jECZ(8^W?~mjj-oy$^)jia&x{&q(lC>l zZaT`O@g~hNDc`hKnz+=Y<)*dDv{sw+zDe6n+@&?CRPZM!*LjnLTy)tNa{XZD|J}^L zW)}I)?EZ_n=BD}5ZL{SqGyI;O$DSn>9ic*z$_Z1y6jKw5s>5Xz#H++OwX>4ipP;H# zR)I&lE8YOhMCYuYe} za56aK)Km5Et^(Z@F+GMytQjgkQ(1!)4fEqqBbA$@(xG>CJIWrIT~0*5NXa~IS`Kbg45VTb+iIS`m=5}Nl-30k z7wJDI@$R0P`;#GO8@R{yPDB*Jf>giL&3;V2`|zzN7d@uC%tLFb=6{0!BC_5?mtR5L z-Cm3Ca&&y>oy(u~4f+)na}asSn0%5!F`~{J!kwu%ecmiVbAgF_yA7~J^qOj*>qV+%8$3!%tgK7!>ARe=UzFK0ZNr%;#=M1+5N;w^7X3J689iUIy_S)wxSdSI%n6 zd?6kMfy-iOUb;2XbAbO~f39n|opj}791~6XY?-Z@is54+a>D=QKx9Q)p$73JxSxRg zryDfz%0QxL>V0=XI67g7JS!{uPkQB)Qvc8^CzaFVvIP~dJq#ig0csZQz*QK<{8CDc%0YJXEBy}&V_o! z>S81>mluojEDP8u+OR9(|CT3_6*d$8HzbLhDUK!4JBSXDd6_yhi}l(A0V3ZG?~ub4 zl5o8*_R31CB&#OKe6IT?`Z8;lA=Z#?V@a&Eo~>b7{1U!&ROX+S$qX{}U&VZui@&4= z(}j}6rvIm}V!y}tkGJvvhgb0>|7~1UMX^;OQAIUWdpP#fT;(vMp7n^G)cagFW8Oti zmEBLJ3{_P#RpuaFvg240?`^w{P;!EL{dKiqx~lVra%U^AkPrVB7Wfv$90me#JB&}^ zg}kZD249psA2yXz12UK{!Z)K#z(U^C7@hra7ir{_;#YawbKM6ZWv9uRGS zDCSUYgbX&qbKCuWaJNC?76|Tyf`4wiXB~h5H{AC@%t5e@LgF#7jsy8U_q@Hj=U#9U z>{Gx!_oy?F_aWGR$sM?`CjLP?$zfvcpJ^wNSSI>+;0gU#z>_LS$!Kx?yeVQ!q&7%= zt4c?^2ihF-$U=7NFJ z&JGbyXz&AKa-O-6qs2fKeu4b>C#DKhk_xdZOx9wu3KzYbi#IZa%bjj+b90HC+uRJ= z@_XD2+WJS2J5PAb+WHe{>tB1^^Myui72>w?g;*l24+I_+?g`Q6PgIuJ|DMXi)$Ax; zWU%-?7ER3VAO?3tQe2E?cTgE!ZOACgw;l?wK&i~`h^0W>KkyxiRrDE*9;f^yI+#o> zoGRanPNmT+?a1j&PIpS{O3@Q3o0(lKJmsU;3G&WRJ0?V3A(L0nJ_klJ2ZkBZ5fUP$ z$6eh=q{|^Ro>wy##+7bAozq~-_hRP5_`W}n`?eP!^aKmJE`3d#;a%KvHGFhTJrz}7 zWpjGm=f>>iY<7xDW?ENaLfh3lqpTK6`5?Q+oGt96R3Ssgf2@K}=w@rl?mAx1bt)cK z*qQ1)qv{GdTD%@ws$8aNaaz7GcD`LXjMe(UCu?!jimQmcPvK8M;aa3{fWW(t!T}~v zFAIm38`1V(yie>w?;yG#B37dup803e86G?HUzT%s{vb$irZ{iLNwYr^cYnm~_>Nf^ zx8rdN&r<$nkWx5B;iYpXW$~YuFJ-HMKMHXyQ!~k#ry|F~im5<`ky^%ZzA&6C1~AIL z5bV!N<#4`gK~8b-DuWw@6utvC@*)3B5-#NYj{t{J|2!w*fk_^~ezxD}-3?oqy%Jj7 z!#&fiig?(;f~H9Rb7!^FEE<0FoNh=x^g}1##ta_P&h`Q3{OD~$KC5^ipuHb0{tWSi z)~^c@PZ&7u$s_bHFt509duulw^wBpL>MvY=pauyVsF?}wFyTHe+~)=H5n_>mwPGNX z`8l(}u&FB|o|%)3=&wf1-}IP1_b_>nkXMVmnw0h^dG*L^OkP9snvmCsJeRy=ef;oJ z2vW&wNnSJZT9MO6L&6#O%9hC(mu5EQ*c-bjL%$sI-RX!1Pr{6;@aCT{{cleC5q58Pbz7!jwCU$SRB_w`3|mT)YNKkYSyr z!#9^1lDNfuRK~GQ{-jJir7P{MA_8C5Q0p6MelM*bW#A{@+Q9yTYrevOTkXI3`Uak? z-H`-*BhVg)DBt4{&sP;zIh68k4rRsa%l91~a)QK(&*WJXLdfrSy%O*zecg_l_~OlPv`%rtSlX}xVC%OmER5&0%8 zGU*S61ltz2nE%ltAJ?grk4`T7R&k)H8tFT-CN69*HsPWfb=fyf zd}|K*-uF9PGs{ORiqR1lemN{}q#kRi_v87^RBKmZQ-vw2CO1i2YdX;B7D}{Llh_;8 zK_MqtdaGGI)p>4=_En`abRH~_seMUI%hcDXc`9qM3gbHzU!WdborHgNVzD^O=z*_J z1*%}LD)4Vi5&n&dIhh$rs<0xR)CRNL>)K#=55D+lwBU?20P|7)gx)Wh6Cqdv;^iy- zhU79e4@veS9MlCI_iyr>&*bheWZviUe0_zDbdrsi-5jjtm7n8>Y2C&D>=!l+bFFst zcnDP)DVzk<8Qk8mX#iM%0q?JXMf5t@*@D3Ty?KIWX;>vwWFw!W1kO7N8G#(kk`a7j zWVOm=8RZvyy>2S*C*qY^)|-&bZ^(Jj>~+kUipfmJT7mc;dcy@gO$C)?(>mJ0=W*NO ztjv2*wa5YkW7)t3_{S@^6(&NQMf^=s|dxPZi zZvpQ*`Te|H(Prg-sjITgXmTza);9)yXVCWsT`}lK!~4n55|$eVF+l#dp8FAxzPSg^ z|ARnbKuT+5dG2RPprV=;PXVB4jbox1aLWLd11jm?fE=*mz~P>3WuO{hCj#+uzYe%f z09~MDu$lrj14;#!%u)-W)<7+RI)RlAlm^rt>@Gk(f%*XT1}g)czCir|`vVOG8VnZy ziwpr83hq;2F^+x&(6f5zXFUhjNT5-=l~1n%c|ci!uS2jsa+aH`G!9=jSCRLh<~ID^ z({r11lyrq`e!o2`U4D=KO(Hj>PAR^>q;U8-Tn{#(HrPCPe36#|=q(b?5V4os7Kc0l+l0^n~+A2m%-r|1AjHX^4XhKX~-@I4a-A* zMW8rc-y0bVb^5b8|> zXDYbw!R|E>+yoxqQ?`Ngz81S*-44MWu=^b3ehL}q!Mp&IzJm3aAm%%`c@fNSbxb9k zujJoz>K0Wvh9dBig;&FHUlDw|8WvQ=m>QV-5RP~lRdsCe2$pDzW^26B3M;h1i2itI z0QMe)+lOF-fjDj`zBw2>jz=>WQzjtgqq`7k0Y<%#6L#Q)T}V4|!ftdvz-t9qZ4Xxb z3O_!NyKmx+8`|Xi!7Y6H4z~9FalJy=$Pim^V;>Md-{X3`7=q$iAsUnT#S-bJ7{)W< zFk#jciK!y1g}`Pa*j#MvrO{F;eMNYt=*k(VfdXF@YLvj&MAcUWOctf53hQ;jJj3uj zfs2HQ53%`uHF;szMx_RC8<~` za${%$Lwz5k`*o-yI|SQMZacctft=R#Wh;Gf%HaxgM+!Yb)6%J+ljbIcy6MZp%`Wr> z1B>3$%%Y5SdQKb9u-^?NH&U}r)bv9tafSjMeYvDftYeDFaouESh>RF27d$2J50l<- z85*IbDj{CKJ|pdymyQDncoX)Okxa3RlGdr>hc#W#KL8*1h;{*R>Go|qS&o!bsn3M@#Rea?D z;)^2X5Cwb6PUECxoh2Xp_XCffT+U|j`J8!We5kIVUufQa@=Wcjb5BUd<3mZ4L+Ps< zsfK<|Cc2s0m!cB+5YkG0+EyLyt(%=ZfBLGhWEztpK+)w#(A6#nm93ah!`6$XAT#P@=(3hy`J zOe5m|x5H$uI(%AFSh!Q0$U8Ou_95pJoTFr&rsSg1@jC^~l5)!GT7eU%iO|+n356$K zKI@VR%2$r zionrq0~DAoh;wUv6`DqAVUoDE!1cOTrZq|X6xc3@S55C{y$HbTn%nH%F`Zl5F6WsF z!dOkH+-L>GmCHxalFBQspn~#Z6_i(QoX%i-LFFYVm#Yd7DX6Ku$COt`d3AMt%x$4O zK85o6lN;PT+t1V`0*@!&N0j@$q1C{{q)0Y$IG30WFdhP9!JYtiF4#OM<|^4#uz4f@ zHe}2Jd#*m4Sqs3)2U@NT_3kRL8MUzv?Db%80Na1n+dIKyuh0Ro_kqnrr^7&pz&-)q zX|T`mJ`|mvh`rJ6g>D~oGtkXMw;!L=&>e&xrwX4#_eDQf{4%M{|161egd67F0 z-FywZa2BAu3f(2>uFz9=p1`|n(OZY!26Xx0caHV+f?NT~0-6d)5zta#3&DMA#;sfJ z1$GeFQ9vgF{L9>%EKVLTl-^mG%sY8zmgj znKYijaO96zEXaPqdKkucjXA)vF{>V?P1dVY;L6^+8UVr&BwB`asqf0x=` zcb%)#y323#XviO`==Ne8&Di0Z3~@SThH|&7&cblk`h$@wzEJ5=06s&`g0(#BcnfaK zgJ*dq{V@P1-_FAi7a;S}pFDS0pnFkFOGLXBCbGAv3p!)b;mki5RdTVz1Z-LejA9-F z|1R-%X`Vh0u&l&dh`0#jmg2(2=$oGz{)wpyGdj4j|U5}rx(?4Nu zlX-lH;=xF`h$|v&HUzOLZ!etx0YV`i&b{`~qZJ;2ZRE9u=KM-QJ;_bLqQ$ zQY+~1g}kPnRDM4J!O}0?7CP&PSqaqg4|V zIoHRN)$h1KM-066wkU@ON<2aOe`WakpY&eNAHj@2QW-xO?mq`JG9IYD5^os+Cg|Qa z(h5~y_l%g35p&=09^^D)49HRtC3N@2^3xgveb+V%zcPyW!mr{`D*!R9`eN-D%fJ3P zys^Im{7ZPl{g?1Y(m&-lod3i8#_!<`PI3Hme#8Ek{6?W=>{Whm^;N(|utFW!4s=)z zR)86Ne`nj*S+ve$?EmEXYVwEY>t_sS)mNeCi?9EGNWL11{AA&<-mAAS_Ua*=k-pE1 z1zv^rt`CI$xh|CbF73MQ8@v9{brqxNLSt76N~}x&;^zu$@IU#v22pUb@8_CE?o=JM zs{Jp1E`A&EOW-iIIZoi4xp?tfXy$5PDB&vdyMF7Jhab4Ny2`-+zGmysj;%tw)*-1g z&n(qCCL{Pj!rvO-uEpjWKA5=|G5ps8xwx} zZxvc~wLi<|(;EA;8u6q{b!Kx`Gu_AUl;T4mTPe@4Tk>hmOV?eJY&PH&W*z+r+q&WZ zX4HD)fmCaeI{(0>^&7ji{#~KP1Aj)PmDdMa_qt>Q6!77BuMXX@e%iTi0;`;#QeYSh zCK}ls39F`qRs5-1{T8hHo|o6?aSaxN=oO zx326mXqQI2oEC0c714Ik>iG{=BxWFH;y3*e`y%#79E7Wfpz|c&@+px&y?}FkMC94$ zG$QhjkBIE|01;Vo3I;af>P>iQGZx!|{kGwXtr*;{8HqJ_A?(0!KERv1k(tcFJve4B zjy`}vUXC2Xj{ET55$tgo2Oh&4$8qpc%s+waPhS()oIJa6!QqB*3zs1c$BY2^g7Ri>Jv4lUJd^jac=^h)7id#U*~z9 z*S>Zl*ohz%-H9OPDB75JBGH%=L#d&S6g9O?RUd@1Ga$4GT2*ZcHN-sAQk4+YOsURo zbkM3QEvl_*-t)RW?bHAJ{=c=p@BOB=tgbFAx$S%3``-H;j^lUG$qr<ApsD^=-D6?&2L5K9zjLO-)OczO_}4Bti1AMECXqwh~enni($1f zCK|)*nWV_%NZeA#^p7d`q3VFK@mM<%?O_Ptp#LM9M4<;vYFJcj^XW`zXYvXQ+7h)f zW?R1_IUc2TA~&AgM4}{0evmMks55=v-Q*1+S4XobVK&9`U6JpN2aQA4`IEi7l*YxX zrD~N^9`7qTy{obE*s0+ux0ebUuH0eDeM7~p4T!#un9TQGUnuxm$#2x+Ys&kHD`(S5 zd2xCqb9Z?c`LJF-Ot0r8tg*VvB2E=CyjHvyY)*Wb2kRF=#e85xgwG}J8|dCfLNmRI zJ)?LWA@eMpYa#by4{FvRK{ztIz+nl;0j~WhWC6)}Bwr-CkYX2+y_h<^O4btEy_~*W zO>!04Ye)(e!bZXnmDfn|hLLX|3uSr&&nj z4$$r(?LMsCM~(H&P1jz3?Zs;*jYK^l(gq9ID~hENk+Mf@Xk92|a1BrU`#}CE2!0ZP z+toE-^Dc4|Ajep6uIN_4?Qm`fxNkxB+u#%#+EUg100#jN03HK)7yQFe{RB8Hk~s}{ z2EyJ0xD0FzXXviE88*Qg%>%rtw)o?N=q2H{9_TQ}uqWDm491qmBd|Aor3w8EzS}JC zG`g29ylOmzaV%-(%5y&wH)||<;odp0Z4CPqmtVouYv>2;;j^T4>lz+Q9R^`BRAGqp z)1~c8SRiq|^f$>(+vKACa@%QHnYmTp$oNZg>~+aqPyd<}+J>HZobsPFo`{0Y7Acs{mQ)p}Q1M-`n?Cypua2aA<{ODk(OYCRrp zV&d1w>JxDW(Kd|{$L%$>)0^9xPAa2={;H#SEV6Y=F&n3=4)3Dl_!8}=L%Zw#opnhM z?WXF)6rI*f=l9W}4;jfH@rYx9$t=!(Sm!;eBhvJ=L7H8SsYA`xRV!V)k868^A)5O0 zbje)pFVd371v~UZ@93RJbY8qpK#?g$2PKvSiA%P~3>KN?#f^&Mk`V7z6`55;W;Kyn zS@d*8W^IufB{G|e%w{69rO14M`w@}ZT1;srGTVsEwj#5gxYS-`b`Y6K0usfP1aad* zk=aGu=q55#L}seU>?tyPiOfDCv!7`9u*e)JG6#sWkBH16A~Q{_9x85(5SNCDB_l=V zXyJ|#H%5ufr^StNB6GaRoGdaYi5pYI+3DiaOp*D5=s8=on1e|`yjYo!R-ugA4u#AZVI>qjK?i`5V((m`v`bx07Jli3>@~m4Fhik zc*Bjh+#Llt2D~RhJ^?;gL1O`)0dE|56CiDp$v$RthnowYZ@Lm5D|tBv0S!D^ng_7J zu%MAOgzL;b%HIU;W^lKFyA>k0L+lQd;2PdNE#$hZoT1jZVTc^kRK@-ML8z^HRmES%lyAP2S(&g2m zvQwJu^tfy>Ty`2E?UC}KQL=2bjDA8MdP;W6kRzX#ZN|yA<4xOTPn5xvq&+zh6F)_I zQ>C3Pof*=bW%vx&o|i?;$>A`>*)n6UoX5i8d>J=iMl6tpFB+m$>`U^#S7huW8M9cz zQW^W2%z9mV1=3o7YoIu~Wcx6=Dw;uRTkN!mZk;ABZiP*4t@vFE@ z;1DZv$`J#=nNJ%WMh(hSa0N=KOu^Nt|2-65gTiZ(6G_2Q%{03C1A@z=> zubWUwQ#yAal{BM8&8Z}gPPU<1?Wv?Km2{wzc2wd~NdldVr;?6TmPj*`siZTNBvDBh zy48(JQYo?rm8DQgcRJLSus6Nm%P3?@`qI7qXu%+QCXJ@2Q^{kLK7^VLrIO)P>2WF< zO_fGa^^w$k6!m?Qjy^$R7b*N2 z#a|^33og1vL7Wu8Mr`);{z0)k>SURLP_w1_kn=2f1{)B(&8(mb91~{o?*&9nWxL9Y zRQA0psIEE@Wkfq;>nqhzc})zArI4Wku`0BwN@%X4nR?V-Ic*j41Km>z35q(Z1b(b1 ztAs8psH;lvq3oW@<)?fv)vdRpR7HIhu|@GAMSV@e1>=(JM->;f&Ja~6UD+(O8?JJP zsoEnHjZ~pyRQb`$e?qw#%6>}GSY{cDWoIkOQJAaj8H%y$ zF*B9(JjXsNXP%-LRpLTLFRA&96uzSDSCz9w*-MqZOu-68g^E@wca5TTiqDxHa!bdF}Y~dh_hFD?416-zYfsNj) z78Y2v)`C?Q7Fx8syxQrep1##VXD8^F6Lo$k z%>f+TM*ZATvrA%bXMLiJF6sJjpp)*Q8NQm;QkNhcDN#%IFH@I^#9S*sMc#=uRa%Iv?>Z#X`d;7y2Wq7d00oX&!R}X`#Ge8Szcg&fD1pw#vh~i z5z=S4?GwEHDX#nimwk@oN-^qd6ODuy(ESqM_y&KvXei$|zrz-naM|~`PZ9C-_u{)#Jq!!@_j`4iy}M7CfHIsJERe+LJEY>jfI zk|?D|a+xiCE$49VdXTh(C6<%lg~(USOQ(YLDoS!BR+6uT$vL5NWVjqvS>CQ9w^Wy2 zHQ6yjp1wz7Rf#otzsXw)3HQpZNVzRaj;bx)XbE-Xmb$WIJ=vJSP%&~#W4WfG{IHQh zye_LRKW{2K-Y1iq$;Qp4+tT3ICbW>ZACNwS%HyQpO5SWEx3rh1+sR99aw`?+vRg?m9b-w4I>?11ABe-QRh!e@=d4T0B1)J7(y`#Mf|N_Lfb56i zV5U+EMy!BX5#z#8G5f0;`hj&%9{2lP5j}{PJ7H``j7rAWlML0fMHh_W4NDJXpKMr9 zq+TXg>|%fv)U3Y&*M|>4cOa(S)tW9smzAZb4HU==l@1$Jo5*NZiY}Azh799}^%|MI zTEYfdo`s{ErP?X;cFC~qCdim$uo5o^6r_!404qq@EZ>lpHKT~;^yLH8tre*_ifBzm z9q9KqMn0O@i4qg3VrP0YiK2Q@vw;*km_qweEw;~(raT7Q^26>43Liu7Jw-_w)MYHa z`wT?|)S>RPlsJLrPNdLDlrWX#WJ;bw=u?F(`aGLt4q+~ZOrx85v@akKT|Sq}eMl~Q zRBw{~EBVaLW3^{vv%I6d#^#WHRINIpK4P`!5ku%oJN=jJ^NONxlv~b%3Kmu84ZfMI zN)}9xuwax0V+@#%MUQYgAV*{&B1;gjS(WdK58LZ0eaw0~udfc}TM%=8Uf1xNwwG%5 zy*7JQyDN140?kU}i>xPHrL$M+cB{3&MtjWPDAbV~|836l*K2R9PTQ~U9n*QI zw9QAt>SeyDw*R#g=XU-tapS)YV*d~~vg`Jr%0_ShfANB`veE4%tMDH7GZg|L3u|<_t$N^2owZr#@7B&99bT+IE7I5Y>ubk#^hup?OxHT0BTnhJ z_M7A&&ZsrWj^cpuo6qM?>9Z275MmggG7oKD$8eW{$`PuFB_AQG=$LYjsGx5YkFeNX z$e^d79ooO4*v+R}82KNcf$)_Ov;q2`;rvqL1-3ile-W%+#)IW0wvu7Lu@zLMFV?V} zACxfvuF-%GV4`MET-dz^%{{ZSD!N~JNy_6VV=1zRoc=|l*Eu|1~$xXa!+WSDfV|W?}v{=oP$%)5hK7%=#U%xX#R zb~RG-F8wGmoAOx}bwsIKmM64QI-!DoE>T~LrSpvm8V1zt%_zJDxvdG>kkKgefRenIFNwZgQLkGN%j-wQ?4e#R8@RzY}Tlo!&(m3k&@Sts44kR5RN6j zr`g$T=KY88rm9kRwKqpp;!)*gVSEbN-3bSq#0nlt+o8(klU!BBRx{q)E_|xF|EwEQ`T^DMo_`iRQfE`r$i~8k6Vu)x^UX(f_kqN`0qCq8*6eebci~3bX=V~IVipZ%cW>pvd zy<+)2BDIE?<%+yW(JNZ?sV%&^A~i-ds3#iK7nK_e)kqXJ5mB+C^gfZ=T%8V-d`_fI70a{5@+o4}G%+Vj6y}J+>B5~MlAag#3&NWtaIT;Q!k#bud;u>C=Oy7S z6!5a(dpo@<{3QZj7x;?s3xvN^&>I4liwVmFtr1Wt?9~F-3TuV%UK6lR;6{P#g|}J2 z27z0Jy-E1ngtJB9cH!?3uv5S;5%s3P-NM^rhUD~)fMVglEnvT}_leFW0uBf|D4aur z-WC2ak$Oa6gh)CmQjd$s6T)SJ_bJifJ+b_(sQiH_JR_EWC{oXh)Q?2rry}(e@jPqA zKNpq1G5lxuqJZy&&7-`_!e?#m6*1x`5yP;E8-^Fb8NM!y!~;V-)`xSU2<5Z<;0RzYggqL3-VQtk{?p)Q1O|7{ zn) zU=_RzviCsnK8St?qFD*X=&BOvd=#RXH+vY|laPE0V$K4cfrN9A^*%TsLD45bpF;R~ zNcali0u28K;1YP>LBzK}7a{L^aDD)~0zp54^CS3Iq39;ib+B(hrE3uO3&8K-{R*YG zAon(8{sDd&cz*(-Ip193E>n0>pfg1fLfE~tjnYTj=pqSX$g>WAl%2{%6?p6D<1_uYQ5?7x4G5jDx%RMNIk< zzyAiWeutO8#m_I{rth)g5BT;Kymc9O{){)T;+3Cp!;jeJ8g{#Z{jTHmo4E29{NPtC z<45psxb!xD{ReLP6W5gSmsO7a9T(nVQ-VY#n@QOOWiUz0mTN7!P|MCi^0#35dU4J)o!W9y z9XX(`oK;WmZz2~pk~HcY9v$oTg$}{$k-OL z?0)IT$=R*s-Zrvvd)c>x^x8>?mrh&xnJ1~Ebh=49paAz+YM3Gm`bg|A{eIFJEd57h z@*o+_IztwpJSJxjk&rHPhsy9YiI2mhK)&Z_DB$ zY44R(BHaUW-#*#ppo}^s-#jW89%0vmq?0oDxXeBw>6Co;j4VDY{r6;__hqy5vg1cG z`9mo`kU^hG_j8$hLHev+zbNTDX@@*ONhwO7l zhLp(>f_D5V=M+me)-Z{@lyj~mO+$mt@HI)BB7^9=5ORYltsK40j#?&`l&A0jdyVcP zCyF?^#%(~*n8F%SToWqe0)|VYmQM?DY3hTdlj&9}#r335lgR5#1Gx9yp_6aC;v?YV0n?ZpZmx!A?FB%9Vhoaih1AIgy}5N zd9pts_>TOq$^Dknzo&hdOn9in`v1#x=L#iWqui@><|nH6Gre+?nqH^sw8lSa{7=d)W6!s$E!0SZ&Xx{qr5O> z*HkY=s)I2qCrWvNxJkR2g8R(UKfZ;s*`&-4cAkCGe9jLthPO>uBNH>LzLoiYr4uDuB@S|+v6sZ@|zLrmyt@2 zQhi3Nkz-WMlPWPojeSauc}ATctGuUG!Z`Kkcs1@{>X~QNk_l@3MAbY~wV0&VPf?-I zsUcHUzOUZNR&%mc%^bBTSGAa~9-X0*XR5S3wQH6d{Jd&CTZO)$E=^Of&Q+V{sDymA zbe_7sK>734;g{8~FRFhnRC``hZ!J=F7ptDHsw1zfn@iN0rRs8lid?QbzoFKxRuL=I znUyNLP;FhK?yOav)~R3CE83{sO$v6Zh`ox6lz&{s9Z??~Q>))qQ%|UbGwRSu_3~*I z|DM8gCI{`|v+B|*wT@L@AFA*VRPHA#|8vE`E}>tkI;G0Kp!}~@;zhOUOO^Yb#S3Ws z(dv8E>U+iVezppJvN~V4=%!WshIQ>1YyK^Zezm-7mdE7q->t_Oi1(*etIS%2I#24Q zLI<X0gy;#OdVr&A1?k!q^!|!Ex4ibkHHGPjN_u5womW){ zRoBrGx>q$_R6{eDI5AQaUolZSzotG=MMu@vs=lT=I;Eb@jnUC{^{j?Et&u+8SjRTi zVNJBvLc7iNg!|0WynIWY9YB$%#OdE+4H$>P4jkPT+eY_ouOmC@wTb${4n}>EnrsAS zvv~a5RePOvZa2dkElknwLk2}2-cKj@)j@#(PW|OAvVLB*X$3LYZ zQ~UjO-y97uXjV|OyK}(ny7yB3@N0V18`>`j@bp&bqGfvXa{bdvJ#e)iw?;p@PR}dU ziEDNGHeGdtUc6BkZPI#+Zna+5-E3l%8|~B!cj?Y=>dCux^SAZ0@94t4dTOAN|Gmhd zT@nv!>wqrXubsoX-yyxSL_6>5x<~cH$F+M>|H?kKQ+mc9R$07Gx^9)dD>!Dz)mZTN ztfmN8@VMqShPI%XbgKI&S4_%fhXU$m<+UBFX`#u0?z2*_=ucKU@%BGa2nLApu-Z9m zDmVHVC{Vo7c_3cGUI6cFa4v#(8Qh-z86X}}PBYp&f?_LZeoXLw#GsgiF|QQu6pry#k-U|^jP@hsxy%C* z4o`O*nW7!%LiODSbvxr04C0Y#FPt?4;};_oV{$24H_iMZSj*)hGOU>lYHu>>>P%2m z-cfK~)nOuKklxPHAfDZA)-e?YMG1%FUxy0wPb?O2RfO{PpOwj#Ad0QH^^B7=v^V(U zAc_s1?6706b}&LkbQhz489ht7wWU2%Ixk6oiS*d#wU?~7sq-Q7t0)dNGtuqrO1NJo zbWm0&C5I{+ruMVFE7Rom!pq7lP_$aPyUk3%E>#I%nK=yaT&R=wURH5T*|m@sBMmlQ zHkWzq>&cH+iT9frxLKQ27oba%Tdyabz-&%&#HelRlw6|jEWurZF7zP_B?QSw`qV)K!apX`1s(l{? z^8>MvQnt|it&~+o`PCIi81uWcA5eBX91PqvQCEo@BSog?zYCWu~992UmZNJtY55JwN=C%RrP%}?Yxq6RF#>+ zeP0mo5jYH}x@n+bwds9)3*9>Cc}6pk!sq8ROyDbrKarmU$IpwB@@8j2ZDjsvgHy2C z8@N#7%MxFaxK!d|>1~h&d_J4egcekVcdRcFXMK9?F5%hK+vL7)CZ+rad13<{l-F6& zgn!S4?DHz`YZCw=Lp4R~$lBU&qV4;1hnCup(;ll>I~hJ0=N+^D$9}>f&Djga9|!&@ zylN&r1or}1$a6FH=`h2JPjY?(vcDqae~!1DY04{9&Kl+XU@>f&UxC3j_6p!DnJ*aP zv-Ft?{mF{6G;$;pXD}rQKTY5Zf%v4i#KJ&=lE;b{{^za>FAUCAg-%rfS;^K7>OTsd zM?!KS7m0mI4)>vd`;zXOk`@|YlFPoNB@nU<+yXPJw2K)?1^zWA0i#RUNU>K8ZEd1{ z?LgG;%@E8ehmFE8In)So8--*4s@R`pA@?8z5)fup!=M`I)WQ}uO?X5N7pVneEDn1B z&&6RxTP*8<>w9AVIf#4ARGIx>?U@W655hVTi(r^X=?{RP68Mkl%FJB<1k z;S$#V9^nU^df9LV;VQySl)qq)TS&hm{DvST{cdo_j2U#09dwd$=)_h!OWNAVIX(%M z31O1LWtYklsz_j6M}+k6ksDn}krJY$SI01rv7T9(L1PIGrQbk8ed#xqr<%!`_sch1 zNMs&z8wu^D&z(zK<8_K=xy3BgHPqx-qB+Kq+G?Hw5*nf1i<0z+ZSk z-hH1_u}4+X`>Lo^4dwyhm#W4ERrzZLbu7AKMP0S>u34RavX1^@-FMrH`rXR=&B`mY z@`T>cwo}lyrE3Q1yii@ayq*-U6T@_9C7oDB=SAq~syd;X4y~p0?$OUi>d=}xG0O0! zV(aL<7=5R%PHdz@8|%c)LU!6Bl2M;joX)aextulmFuiELae_yJPoYFz@ z+6zWbnBqu+v?XA_1I~VM--BRQt#`$pJuzsxxx$b0K;S68dmd+ej%O}mxjX0$ku*%Y zOwZ=HQJ!5tV1gBVzVl?OppVVDVvL)owAWHweRRLqbkuUqY(V1m({}A{)$UH+?}*tV z(J}33tB}UHW=+BVS~^C^B9W zaW9Kv-d?>fxJ2%^NMtM%87oC`p(tG~GFFI)wIXMo_-(z2+bH5Ti;N8-W2-3LCNegO zxLTsZc9HX@$k;97_KKg1MCpD}x=$1z5T!>%#$j>cw5W4RWV|Ob&WMb2BI84mab9G+ zFETzB8J~)bPejINBJOh$$JV*akicW8(Fp%lpN7-Xejfdq25x*;pT=-w>o0v8u1B9m zXphT~btY_O`EN3@jKj_hA~-Cd=lM4$hqbl;MCI%@`C@R;&~oAr8~fpWRB828R$XNe zRWXwk<*Cw_l*RJb4T`oX3PgjcZ7TZjXt16Cb2?bbU+G{_V%VM`2UYX|rS==Tf)hvw zOD|Oqu&4NI6Z9PYqm_2Uiu==wNBv+q&5pz6+Mr*ygvk5CHOV>At zX%p@9MLPWOwn;0vm%AR zUAS)w+AWYL=S9K}%*>qw!agGCu&_@FdQZ?fL1zSgDCoQ(E`B~1^r@gv1brqr8_|-m zvoYM;2av-`E<;gy^edqijXy-<2X*j|7(CDb57ozojq&kD7~T+{zmK~Pyz>B79f?ta zOO)4+j3uGHoLoX_Ur||41*cT*b(I`xtU&DAW}AGti!np+ld3W$TLnJ@ehwthfudI- zbQt0jhAGFg^Mr%Ql>Tm2sAp9=S(!4b5!ImSQPiO}m8(M&>k{3i(KZi|&}!>ZeKaiq zS`6M&aF&C&5(-wE`nFMZj9rYyuVL~sOxb{{5TiC@;#Lgajp4^J<#Y5np`eoVYfERA z%z9oPm@QN0NMgoszT7uge!M_lcuA(dEVGu#lmglN0X3zyYP3?V+@d<4R}~mZ6nMDQ zy=_&yV{*w4TDn4z&TOosI_cyNI{zU(fQjx~&BDF%MO^hf6UNwQp$`T`N?&fFSRq0} zG4FX9@`7~d$j4E{w#GnPq`l{9xpWc)rtrG zmZiJhqr)0#iqUJD=;W4q_eQ*_LwT5a zTsmi@{hrJ_&owy_S1bn&tk}N5?V%9_GBFQZs+obBgxaYv)&#a!DqcZ%1x!~MZ5+_7 z@xY7xKs2Kgwr_{Wa$bo}X&<2P21W|Tv&L}UaT=#+d`Tk{^+N@O3kVZXNkCPB)i}mo z$jZX1Dd1iKHH36|mu>b_tQhA_Q^iX{e=jOr7V?V7;34TIu-S(HK1gmi?nRg1;2Y>} zMfWZAOVDG(@;UTAL;Dkx#25EDX0TRvxzyXFw@1noa?vMJHljhXRHKR6AlGO{w_4CB zUc$yxt-(~5PW8spg=cBrB&xxxnCt*6egn70guyDYrt)j4sl8NAZ#dRel!EPoi5@aPI|(0#yrEMnY*_@Ww;h1c;ajY0F^x z64<~^-v;<`OMuV06GrTXF-7nP#}m8*X~mGmEDqj+9fQYDLhNby?GiZGfC(JQY>JA) z_WZ#$!7rO3HOHV97}g4(Z;wIk(22({60lY$Y|#<@WNgNHsa>(43%2cskv%Xg1!Yfc z)E_7G!>m4-^)Mb9h}H;<9E%a-(f5&^I74TmKL_W|#(P=Fu>j`=T=4FCw6^ z2+Q#s{O&S3QpShKSrw(KEr-{WPAmCMoOHTMdxWHs(jPC$m!VT7&5~&|Wzt+JSIZjf zW#T5;X_xHrmMqyXUDi>2C_^qv`v>{$_i_<400nUu^){RS;^|U1a(hsP#|@yVj5qaT z4VurLMCF*JFpn}8lC_w;*GVp=kge2j7ukEL=nyS9NpXkCK1D_6Dd!VP`-m*oUwuJw zUsA+nLR7#b-f}7;SUELSSsj%et>#6UnMO!G^=EzcSYvf>6ZKhB)vSXG>Z^JTR$oj| zzfD&xpmk=dtURNhr8&ypp=!LPB1)83Y;>^dQ#I{l<$tE`e63D@V~Pr{Y&!_;So(}I zT#lHECLwWNgs#GqpJ<&{TX$=wp_R7VnyCnb#hA*%an(Z^zTHiK-bH)8G(Dzg4$&}7 z7o_WK9vgDKF-u3WT&h5SxWI!ep)-z|q2H@~{WIu0L1Zlj?1%3DfPjag5d1-J zlTmz-ZS?+j8WOb67D5K0Fam{-u$#{6ZX~ZmI4+@=b^=C1#!6G5{^76B|EcN{SCB8>x z@6*JyH1#~~J3|kAKxH3O*(WslBO3f6m7SwIpV6Jq>Gl^ixRlDiq^JX%lGi3x$A&m`?XXpD`ri)mCj!O++nxl6t4 za13Bz-T%qw$eh*3w98Ye^uOGWQ=w!#9@&8l-ode_Z~;F}SQ`DenzxVk1{!v~+e$fn z-uQI!xnhqY=hv@*k~kUFR~22i%3Wi~zaGhDQgz`Z2^h%FQv)u0Z3n!00lEfZjfS|h zEAHxv{^QtpIu;io=M1*Eg)B;Joi5+Vlxye6;zEgE%0#Xq>k@ROQ@xGQlpX!dN4meB%X{wM%+Xenr%DRrTl3EQ-k=HdqO&K>i8y= z$mpThG%nW_xLM{l`M9Q&`Yx)G<6QqQpc+R~&Xd$<3KeJ3WNy#-^XjCzop;Y-EIWok z<}-}QAwP`#^29|TRW|Tp-kd@Wf=FXjp%{}59d?=3~er%xCFfU_|DAiqRJlu3*?T6R43N zBlBlTf2Jg!+!n}Wu1U7Z|D4@#5$$Qf2r64-0K@vM`^c`&StegGV;W(sjw> z+8(Q&2|AyXkJ#+bR>waqKVBzX5}-_skvoKknW(t`?IcT%qsQm48ClG7xn?E2iuP?* z=i$YQCL6t^Cf>Oh`?*;57RDUFvbE@aqZkBfy3vZ-;p8ArP#Qrz%)t~L@gp)b-{v+j z2n_CfD*&%fc+gr8iLGZ$$)0AaXbv%_MCqqVZ=yu@Lj}xDctVDJA%RiSVdN%|^Ec}G z8hJud1?97A^)A@iQ-AZE{UIj4%J;O-_Jmd1TLwOhLmEo_oV=+liy5$(#ha2 z(#jw@lTZepBaC9;uPrZ4@S_0dbCZf;bf?du?b2VVgP8ES)#ytxPETsBdk5|Yo!jd8 z_B!6v9Xsg0o%EGO|o4%KWt9t1CRQ*eeF7B@5 zd+Hgz^tQfwSwG#mkDfVDPkc!C?X8y&&}#?jf`IMf)}y*-n*RO~&7r`n(sle06EnIZ zULV|s9k-+0fr)(fc4MWtF>)X3Vr+B(n;%7a9G^agDd+JPD_bV3A^dgQqxUe*lqseR zDdk1dHA|NR8Vue!!i5xK6d{}F1FqDfZ#dM zjk+LAiq-@C?2yQR{ zgS2Nrp1{fdDP{~MOr!>rNKK~#u68a%*evblK-L^k&9Qw8oV@xk(CZ0|`GBU}FGH?b zio7$RN;+z-)QHXnna!w@tH<$hd$4j<-G_8gh_6ct_K?oy>JgoMKoUtcA}s-#Ye zq2)&^>FR&^`uXmZ#@)~fEMZl=eVrAh6tS%tKpnVJg*|psgm<5ehCcW;X~~JoR-P7cd@j$ z1ePd%!QKe4&8VHdJplWF zNw+*3ofnbG^WOJ_OdMq$;|1Zej`3mub$ds6q2N^o;vG;8 zaB2c`5;#2sqrk6imUISMTMwuM(0FFmnj{hEYWyIa*}*Dz?_qQY@HkPzTjlFSCGe>uaktQiM}BGikx7@zW5?8Ik?i`GJ}^{T}+sG2oG=`G4%s4ubt)ETd(bR zG+h%OJ9=&i|2N^OKr$CYFg)-Xw;K=C2^==sbO$>LFcD&s0ec!1C5LUn!^RCw{r(-Z zg+su7+*qO6Xk+M1qmBKU%{A_`0l01^IQ)sHpwG46L+JMX>zuHY@eKo8pl;-IC%Zz2 zCZP)dPl99~pOd@6ku^*@8#_iBjbid58D7D4IIjSh8Cak4>$3$6FU&9=L+r0GM_Drz z@}RFj$0SMb73K4{G6^$2<_tCAd@Z~$h5eoI`H99UX19g&hhVEX$B?;hKwKINZWpiv zk$f=NWP#a<$UzAXKW^qr`xWUfmj3G!3Z!2s-Hnp#1m`}A;5~Re6PZy-Q_@CSjL27WrgQ1IAz9uTiGd&e8czi0py99a&1j0?$o zSNaFETcp{&;?D@t`6q>ynT+z=ZW2`CEll2n z(FaXq?*D=zfz6<+I0Z?%??|TQI1R~fY?wKIb8?x%(u%zQ1;Y~3=06w~uhV~rVd+LO zUC8Z8UJA|aVZMVNI|6!<+netUl>RW`0AiiL(~nZKh*9}$L+HY_?i_MY6R<;vku1ZN z%M(Hl>4=+%`Q>Ku<#1@Zm_~#7z-n7nC8R*D_yiZQWrd~ zA;4=2en#g_&^TF#P1Om$j>y*5be;FS&db+%FY2JV{A|*>FYDYz+I>ZbuhKayHSk_( zv)){+ubJre0_dEAzaYLsZN`<6V6L6 z$+9>1Q{u56Ke#DQg|}9)Oy9RnC+yZ=9n#H?>ff3xoW@pJ4O|s4k|>V~+8OhU=};cm z{yGzP#SM7*Ug#V~=LlbZ=pI8n&HgyTW@>43mD@s{=5~7}_xMsy&@k74HTb0%%rD7)u|U_^s%ejA03!!%<*flYYF;omi~JS}+bNo+)A)JKIm=6Q z;xZ#E`el`N7-$>F|^=n)8ihcU$5}o+2&TU3EM`PCo`$3I|&^yEIO&waI=O5Rpyzd*M8;pmb7OFy= znp|1S4ik7AV9+T7FD_E%{GRLC&ZXq=ignSCEdW3Xb4N?NPF=0p-^AMsd^Cl$jrWSFc{ zr$DDLWp|H`7z|7`3~7xHx5NC43k)F0pQNql*?J^sx#-81f##Us3@f+5$i7B39m-UM zmS(iYalrm43B1$HmF$1#>~H5&@~@D6gDUeSk)-U&YTk3I`V95_Y*n~GZGT0LT&x~k zsi3xY8)`mF&V21Q70xGu@9C zy{^K!9+;0_t}N!C%$2Xa5A+5m%;kJ2jK7D+&Wt}In@5Ng;AvDu;tR66xn)7VB=*)Z zbo3DNC;$hMnObzx{xo27tXB@*yFbQf<0v|%_!;Y^v#37*J*UPqceGUCS0b1#w^dCq z3AOk-F_jWmGF(63+-~xT>`DgTL7`@t&jb&Sn8eDMe2-zK`L#^$Nq5GkaVouUSVL{O z!~GCDe2lF7hx?@8K{gy@l+shV8d)Zbwn*f>cn*l?nIsE_893j?T<4HZdBeybLf`ST zY!s!8p;gaN)>s3L_x?rfDT^LYlxYB8$hOd_#9f~|nIM}&a>&W0ccv3eqwNccJ|yp3 z;wVG7O3_anA1K3?JD*XVPb>V?M1BOb((U1 zX~_(piuBR3Jk#KKzBKI))BZn0dnan(#NOA9&d}mN4`Q#l@x)j5fNv2MH%dgM*ea}PD9B>z#)CS;LN1hoJ8;I)>HIxs7eX8@N0r|uMuncQQ$=fLgje-umij|!TAcj3&8h#X5aBFizRkW zL#|Pgh9Q+=w_9lcYH}Iu+sH6p?=fk!oFH8i53>09yO6^Vpl;;!Fcv&mNxb1=ak6uj zprWEt${T4mEY31XZVtiK5S+XKk`ou&)8S_;-(#{Sp9^@hI7(r@q=NS_h< zcj5U%v20j?oIf0=O-HK$y}hXR;3+2L2Rs`8;o<**gBgQ=hoj*Gi2KLnfB5#3Wz|VC zo7HQ4GWnFQmhL{8#svGn@%4AX^>>l=e`D(JGU~h2ZU)gW{EI@**m)Lf14!u+}5 zu!F2TQ#Zlqj`afxgQd%j5A#npfWICRw*$QcdAw5#MURhx$LTY{egQmQ-?Kh&1>h=> zh2ZjF=L_MM3i>*b?ELLtvCcpISAg)}vCen?H#41!_?&ZN6$O4IxOGgX^Z!3s;K_kx z=ex1aO8|M?w}~B{+-;%DpG7u0Iq2k~GYy^T=*>iD4*L1%&PV4ZbYDc5!MtQa4y4Ti z`6@6gveNUCGZC0R4Ktw6pUf^pmH^qj&HvS6*{97DVBRxkqn(3xu9;ri)6t!Y_8j!` zO=)4jWCjk-BK+@Xo(br8gbW+2T(ceYu=dh-IOdVxuhcNU||XXX{8m(k<2>vtjHJ#L33 z=Q86rWDgToBv>zk%`-Rl>y_7TENiC&)fblyTr=dE&(3GX<}ghMc}}ieem=6xqnQOi zSpJWe%ioT#R5w~;H$Ulf0oh$qyiqT(h!=jeyuh#YKdY|a z{rPa=hYRyMOvJ5C_T9*UaN(5+ANckN{B}&~D8ZR6iI0ReC+E<)UwT|R@=@J=9eVpd!Qt~nhhrl}kT%d9(<>V-rce1(i!CY330UZD?o7p4paQVtK zq&5FORKBe_8+pqEz>oDkfcs3qrC$QXx3YE8=MmW%g*-DX0z3&`F~Hp<&9(5&dZU#1 zJ52L!zAJ8nCpos@A4!@`14){1?*)4w{9FX^4)~m;c>p4gfP2XNLk}DW3gjBpI}HC! z(wz8rl4f1jv*~O`Wqyw))n%#9TcOu4*AH__$XZ=vi+*vlzOhNG-FofYdhI)U;9k9> zNJs3~5r_2#?lJif>o<-n?zz(6GH4E7`1UxUTkO|8N_5i`x)1lcU9ivZs9F6kRTQVr zg(&KvLXWHOj;VyBD&!MIuj;l-_2AdEenXcoHyfzQoAjsab>SA>V}}met~1}({r2kj zigejQeffa?V!tjstj`|NrxpXJ2l8U2^r(8_QYUO{>T^0HFhp*dSqb4Pv-rUE64y$5opd%z-e2<+lxN_`?2GG! zN0s7bJ@i=pWbyw*@6hf>0kQvsymycDscied*KwT3vCcIcS~CViXw4WJn;5by zV$B!~!i2Hke8+wlB1MYz9fPqa*;X1-Nh%fEs0o%@cictBsbQQy8r&)BNlzoVNq z;3dsD=`DR^lP-MMp1d;lN8Cm?xq6@UXl42Tx$moYhX5#q#zKlyr)C^}UJ!4~-y%%v>w z%$$!Y(QZmvOlN>!5Bw%Z0X7NrEC^bI-v;~~2(rO%XM{VyJ!ExDYh5CK2~k9|qb3|7+xOQ_A01o+ z+7Hq+T+>)hoUy9*(G1<*2+uW=uSqBTHk z!7T<{55WeYryyQrz3WZMY@7Z_Bha6M?ljYPZxuqFM^;E2n|- znkZ-_CU!+Fl~e^ugr8a{xtq9I%5AOOY~{9BUOQuZ6Yg}-MQ$9*>#E%D%I&SZzRE36 z-fY7Ej(AD`Bwn8T_n!0^R%OhBUIOi2B9kOssu)A5Na(_r^nDImbCAP92kGbH;C&W~ zk@quaN2QqOqc-&`TcWj1VjbCuCaFaSXjk!Jj+S3AkE6GZWTx*u!faT(@IFU5^l5-YFP=jtsu|Bo>sVr zg}p4dx8;Z{zMq9+2^M2~e+vhSCD?*|D{HWY!z~(S(Fl_$j2~&qE#AFT`mHP&V!UidKkEl9S4cP;q9g7;)9FsE>PK{}UO-q(f$zM{sfsHqg)l2Z9}fQc+e1 zL9Y=o=uYFw_r`(j&Z^uClIO)jfC32Sn(qL~u4=w%1*Jtm4}!lCvR8t;9N-afABTAP z8axY`n;>DMIbPv8$P~Q1s3lv0UIEx2|Zbsl{KnzMgnGu zySoB*EssJa1%mZbn0QI9J>wiLVeLN@z~Ag@C|Ok%oZ4A zp`UHQhLUx1IvG7DkjrK+InSk+kqca6L zKrd`|c2p!QLX2O8nG12r0<69i3*~YrC$b#Ja_3!vF>=K#Mp}o?S}b0V?gni35(Zn) z*^1saOn3vm?WT{?c@t>|1|=vv7ut!i2UqSzQ7MD>kYtzi3FaI@|5Jp|(ES{Pqv(Bs ze)OYiDsqlv_$zcJOZYox%a`*a;$?LHFbq#8f)Xv1T%iLhxP;PQDPK`B`ufpmA<4Hi zMo}5%B&r}m*^(=)93^u~sIa<{EaB$b5{_24H&7_>lcoyfgPEy3Utx}N+8E#owNpV` z1)UUiR1LbQUAfBXVVEc3{-$Bg?Wcmlit?2|NV!AJP6UUUh0CB(${%BPF2Mw~^Iio) zHJPgX`xV@${0EdTAFk=DT!F$F%AKdeMM~(%a)cplYr5LJyH_g(q{A^$|JY85v7AZ z1}g`>hz5vyKtVpu9Br6#-rbaPmoZwq_nBqAE1TSz)F^s{2~pOOwfGA1mm6Yp+@s_R zCaIWkEjf=-_!)9HQHlhOUm$pq;3a}B|VO4HhgCUKB>b#^H2RCuJAy>HBxBw z=Aua)++!luIK^b)g}pp2%oPgRo5kK-4#YYx>3Cr;FXWjs*HcXfx z$+lD3rmD7mgDs0Zr;_cY*zsvLR=25!opqy4wQZ_tV=bG~ZMw;ZdM0*Z(9Ib()VHCb zozU2(TWsf68#3*f)^jiYQFX$EgK#>R0r zjka;Djd$5J!G`e?=C|Q)8>iTCpA8S#aK8;x?UaeOJKdI?JWR7;lC9?2Sqp7?&~_iU zVXIC1ZFtv)_iQ+1)B863%ck#ak*d7!ZTiu6&)C6PLn)E@y!e96KidfsK1EHIK!S|; zPiz$OT)FOQEhYqr)ex^CPWv(1Nz`@AX*bG__N(Z?Gt;|QT~ke6Qd`fgCzXrF%rE2+ zS($;@7n_@$lyMogjt=TMI%uV1+8f6a+@akrdb|KbWN06z{h`_!sbfaz@CXf~b>?vG z->qq)#(OkO(%!wAWPf*`#;DZ+dYN4w1x7hfDAF{?7>3R0KGzg*_z!Eb-^+?$T*0!Y z&s?Kvtqwn}-3?~pB{GXA{s%GJykMq!?Di}th=t&X_m!bSu$_vF%TLL8R9XM zx*WL$$o!vx#g(v7G_LAsr(q-&BPkfEfsq^Wxtdrp9S_vTuSCVFg)45tU+dzrIvA;k zk@|RJLp+v&>u<)RlJ#qZ+neB`rZ~MBMsC5Y&GE68c%=m%xD9V;g=v`>ksVxj49Ud1 zJz9To7`@Wy#X)w6vbl?sfmQ`F@HbIjGxPoTx2j{?RNfY)UomJYkg)0{F_(c&jC?Zg*qY>LDi^G^oJM&+52kBsq_BZQb zt40wOcWZoKyYl-TYNDF*X26X`;UV!^jWi;RcPBUtOarVa+ulm>pMu4roa~46PXJE> zeGmSx;0gDda6?&i<8WsZj*^Gr2F#LQdUw;2Q8?RZ+U}!f+VNjTc*VrfVkOQgP4Uqj zNb}|Pz9JJ|NM4}g7plZXDrK?q_9$P3h2~Vyj^g@} zKh~ULNuQIH0=S=2fe3CV$q|^q&vYOnr3^en96m9eA+GgC9G}5I)MvXPJ2$i7qy#45 zwB*_?*j~oLK9gmLh(i88XS`?bTqPoJ9^lC5oPLxGF7N{vnGV}k&Kb^pp+xvIbYXLy z)k24TeN$T#Y8WlQ*4vFcI;DFQ4&PVD_cvv`g@cX5JTy+nOMFH=(wj8j!ZRdyAeWk^ zR_Spo?>lSwzpT{LR{9Ut^zW@yF~|uw@~nmDt<0Y-x?nliVB?o9`>ItKvB(mOI0!vb zBs+2e6F^)OkxKB=_0Tg}DxM8GL#_`g)ga;lq=HI;AFG331DtelYXi!Cp)RD>2UQP} zGazUHsv$sA@uNafOGxPk@uJs_hVgfT&>+*r-ZLG_29S6^JU#<%i9QK3{Hskc{~6OH zWmbw?VDgKQuoafR3hC6j^BiYh~9^K{3TVMT4Fs zd^PG>+C%PMGxqpjnnDWi47oqjCIKi#C>a^!*u9=}#EMXr)2i_Y9+%v}PAX#^Gr%~l zm|kLck9q3g5YuPu$|C8!?Fne>XFK@Kwxh>ZUYvI0^|>ad%fOQt`8Msg)iK#Rsf}(S z4!ZVwlRS9sbWsNbc4#Os_+$F$<2qEVx3AST*61qh^sJ|}vq4wisO@JBN{C)EnKF!? z7xF0xzo%yk!8=oqORJiM5e8du(poH$ghU`|Mib%Jk22?ngIfS8vmjB3pfeyc8xo74 z>pVzX2$2;Ky9&}ChO28JW-X)@gOrWNNSxtQ@IC@hdU@oc_Z4`OZuri8H{dkD8E`KG zT>|_SoU0)J4`^c`1w9o|G$lt!Eb@WO3()Kpz>QZeb~OmQTC(OY5Y9}$e_Ro0uzq%aPPZ&0OO z%VNY5l_SZRd$J?TGAp2 zgBw*DJ$6$VZ(vnRY75w{$A)4fu@~_W);BVdFD$z||7z~o&$Yx{bjU#7f=`Ua2xJ3N z(RPw;ueR;Bv!RXcO7x@1b{;Ve2vsBlg2u!yiAB?n5zQ)!2&^nQXB?EGvFc9Hh3^!gJ_i!FzF>6p=jqt zl=~sU5P8N#mI;&*7K9(`i|Ocucz`iM7$R{PRKcs!v%{0$yL1b-$CS~=EdX1QUcou9 zW0f}zgChGKOxlOx{kT%p#e*0eK<8sTaRftg%6&-<`dZNyk^6{-P#|8c7sz>$=zD@x zP7#ra9w`tg3kM@47}0$JfM^Yo(2{cW5A+9t>q-^(-W5aOi-$@~}wO z=mXFhh!nyYv1<-NHy=}mqBjx?MdFb9_0i}}#k}e0iK1JCmuF+1te6+!v;|mhA%Xa=J<^P$`0dn`LZZT^FmGYt^XNBo$&%0Nz;@ z`c-}RyNbP}VlS%>Q47`RkoV{)4aQRjc{<<4$P4KvBhCTjDKO3e;YBe#^F zcA^6DZ}+A2o|KtS!B|3ZFcwhomw&t2Lh=?<`K8o#8I>%jRgY8fG_8MzT5l%aWG2bf zZREaeZud2IQ}G_M-=^bxY2SO~?5E6+%}qb?gc-L43JT{*6eTZ?DV8&RW#Jdxkl-WT{5W+%8Ua)=Afy z>tV#x52olyb)Ax~-8#B^L#>+VwsHiEgI&(zR>p@chp)`=LbQ|bVPQX=Kg{G+gW)uB%9f)6paE_iGe3dEqkmDI&j-L1ibED%1)27@SB75%6_ zTNZQUuzVtZUIBk7j~`UV!W;0e#wJ}TFSWl2TfKo2d#k&{lXQlWg zEA2<;6Z}b{;vb^>EtdR>&W(`prLMnHJT0c_xqtqLtRm@nGey2*Ap^nW| zQr6&pEX-tjxf!YE)UOqlv>@G@B=}#@g=+Ss8Uu{m)|hO?OdF72L?P+IevFFVq_k6% zdzy+Qiy?0Cnq0OvH*3OvYkn-7JGJ3c?YK^R-q4X7ci=L&^Qt@^b&v~=@RTpu`;tq) z;unwc@y~hEQGViEPPt@{XsKJY(DAqF+R-Gwj7)d5(;0H}x?N)j?RVC@I%&774!UUQ zsbhO+H&18w)f2ku4*kuECKs`vhPP|+pZ;SGB{J`S=NxQ>19S`i^auqrF_?uY zAJ~ORixD2gU>Sn=+*V@n2o@C^xj1+V-Ho_qy;Ru&AcGR?QAT}QD&*t_gc4(HLNQG#z8UpwPNglWqTHQDoV?96 z{FalMC(~e)rJ~MjM+G@1`RKMGw*xg2)9f7-?n28t(yY$3H`f$lROv=ZT}@G4xjgFB zlS2LIq5kBAsKr1^97OJ5iqALaxI2t|@db@0>8Fr_jQOMJ*E^|XEIm4&iYAgff&9DZ zmAk3`J@nDN)NK-_P9|@PK`1*9P?c$v8<e(9n_NW6qc*= zXX@ncR_xAD!Eoun;NZB_WSfY}yhmgTHONXw64|qfhSP^h=*sUsi9FZzYrAEl{o3Wp ztwh1~!hs|&g%V^6m3xiUYUfc9j)H51TGPU`Bnw->|Cqy;o_TGVxXWN#(_}D^dzRdN zexS*}k#I5v!jmBrjzDgOFA-~1uWbEM-MTr|x~Zn68d*IWSj(GQ$68oF-e%q7Tg$Sn zyiV46`4;uG>h!nz54Bz#YwaCxt(ailH`#ioz#W2L)&uLUM_;xUmRS3DTLbr4L*KUgzhl*S*Xn%0I{l%w>995FkhSR}YxyUJ zP8s`|RYyouN38>YSP?K2l-C)0je*z#@MJ}`0fLXgKL!42K-ug8#>?)vEXLk|t39k& z-AGkb1E;3o#T)V0bd1!(NL|xttmTRy z!jltl$2}OCir#dDX_!6(a|$tK4%S?VUo60v7h~)y+$NCEmBxUv_%%Gg4QK4eV2_!L z#7v$j`PM^NKAJw3OY4|A;&@k*-#pbtNyFyRp2{1bn)FkP`>L7w>dT>OLP-5SLj5{c z+2hnt6V(F~RM|;t!9D7eVwL%k>9WlFQqeIL|CMr%EBIQC`$naIuUec@ht8{lpH#_3 zW&fs1epmhekV;TewdrJC`Y3}A)}d$XQ{{&ALIc`yGnF=?{f%iyQ>uImm2XBvZl&4H zX-X>^-Ga_!Q7@k|ZlgW&YG<0aTS{%Jw5QkGQ2UOw;C717r7@joUspQUjTUvM^?4N6 zn-coa?p}1RFWudrLOtp90Gcs~P7kH)@~Q4HnmU?_M^dFxbmUH2K8BtfPm9M<&IEdO zB7Jig72ivnCQ;eRbYTh|nMzlu(L({fd_Tp8DN;bc&7vwZ>53Qy=g<>HbaozjbLsB+ zG;0B^SV&JUrSKxkSWH!yQRYK*u$W?>pvN{4J!Lw$TR%%RHdFac^!jr&<$1HtxVnV~ z%bfEXgB^V8@s92s>B*5E9O=uEJf0@(tlk{y$B{l9>CZ<8 z@|6%D%jd`-jtt|-5FR+3BSU%k2#$>6H^*>fEJwz3L=5v2`M0|{axY(<%vYyyOEFN5UK_;7B1)pT&_PzC4Gg&gF;Z@v-?FnaPnwJbfYWSj>?n99hbd2YJ~; z99hnh6+C?HBkQ==Q+(`k4sYNh$wocR-#o*SjeKGgUwM|Z zpXaliIZ5g!w{XL)JZ>9b_bOL=jT5$W@H$s{gDbtsWp;DoE{?p#u$QIx=jKni=4br$ zF`gyq>{5=L;P1cX9lvnSIXnN7eYLFiYU(3Rb+ROnZZ({TmOaczc*J0n4$B;*I}FuV zMr!dbCyv$yV|CG8dhrAubEl5INB5ni@m}5QK7C@Ujv23K2HFYhk{LQ}mJ!}jB8Llf z!9pE=P!})PS*!K2m3qx8ohfm%Cv>GXI`%o8^Smy8QLD|mV7vBq>*9U7Bnsi_{=Pma zpMA>;1d$<9TVEh4M;241#&u<|N(NSIg>PkDTkxpp#?Fgh5BdPFQfek;Md^ zF;42#??5-t?4#YjCRZpcRB_Hfv|gn>snVWMX`579RLDwsPNlu1@D-Kvs!FRweob;~ zo6rhoP*5-0QPq$n!XsCVpcw@%P2gH8mZUN-@F~b5!43r31UVG6r=Sf5a*4Q|g3g4w zCW8}nGskq0N7$1j-sQ>gHkkZ;^5m91j8IOi(S*_-HIlsXxJLbGs`^k^{Kys*K13KmeXko?yuL-bn_ZyWLL4fy&D!)Q9&kRy$`Mike4Hu|Q7 zZ{Z!yIkqKVzK!p1!KYgBA6Xoq$zFRN)PWm!Vliim0OIfCK&JgKIisBo(Z!HRYEqvE z7wzDZ?OnFxf49AeUBlKpW3-o~-9+un0w`G*%igDw_N!?*+3%{V-Bj(@&|bQ}wWfCK zYX2tPtAX}Jf@`9^re-UYD=_)ydT9&2q@~XDbwVqHwn)g)U0Z8zr&HVO^Bv8EnJa2Z zuD+v-PVKJ!JiVc(VMoOD*XiB#zCL3| z>Y&5|gc4q8uf6{V1e5S5EB&t!l>dppB=npAZ&4^q{&x_Rcr$!F7EtVeA;Z~Z&q)eRua7rYSUA7Xh8;DtVe!* z`mG_IZ$QHI@Eg;yMs&3)CEr4|q{R7FYS5g%XlWKqM_bYU+sOB6XBK^zNk?1L)wZ-E zdXf%lPktNf+JO#APuv}p(venorYpI0x)UAgM#rS7um}0wslBv0_o1CV=~yq?+m~kc zr*{3Qn>0HQpqmF#WGD?COkO_a4k3RSJvy99M$^s_6d6gEqm`F0OU3gT8a$pFN;}&` zGc%V)E1oCbOLtACOH=6ksWkop+B1#X+)pt9y(=?w0sT@a=m}amldiS4)t^UxwDEcP zd>XodrY)rBP7go^w?V=irI$jN+AMql#|dIh$+V1LGjiYDTi+gAtuwU`p+Qz}S;1j5P5?Wsb=i2S5Dh3|<|DF?ZbN+8~ zBC|1&0qhCmMJ(Ef+3#V-ex&HiDfJ?rl;3-8)kLa%S}5-+#m^}JWtAj;@*~O#ledvx zdWQHp%6;Ad zIIG*&WS<~9PQgW4UvR3$2jxx?b?Ij{VfP+x`!1&nZu%ex2YAT^b|c(&GM6JzOGk6J zb#B*?YakfVMbElJQ=Z128hhxVuinsIZ;8%1_v>{r5GBge%;qO6UufItttnl~{J)PA7wy_C@U!uD%HJZ{gdLpx>%L zdPT?EEUx}-l3Z@BQFM|xK*G#8%(?+%Q_)LDyb=9O^o5?fUU^Td1hMqjrR27>t214f zM|*nGLm{$d7qfsmFEt94Y%qflw0}Um`{hnV!Xycc0rI6kNuF76qq{R|j1;TSOUm6P z1~P(2NS2|Jvp%~GTZ=4Nib0YR6iJ3Gi)E!=imJf&B=0Qhbb;90(EWg8f97nN8K&s0 z7j%h@{#jX1sPT1FjEp7iwfN7=%>zmO9A5}EWPb^e{7?!@2s$xL{kteGG=7KO6%;(}KSc)&b+qBnD$BoqPDD95cZuDLFWUaBX zV;E^3`g4s+;0ben0n!rmB~cY-xt&F1(g4e?3BkSKO^j}2)|+Au_{gw8Q$8_^TKoZg z*}0qt|3~o88AT#|3Ebboy)4du%!tm0HEMiuf~f!wRYd!GOqQjLY-B29 zW)+OT0pGnA_7Q>N5yZz4KSl2wJSDN>6X>4Am{S=39(SEZ+fpUAN{LbPu2V7BtKy0( zshWBsRmG$zyROQtqiWVx#f{Yyx2n_4O)*y90F{xivWF-&LM4l!G*ZQnRaHe(8gJUK zawn>k35q8vx<|E_UEUmF-59Ahc9B9!S-z*}uyQ|D-Vvqbo7{kczU0X5{xo@4Wy^2u zwQg6==+4PKxugfj_F^}WNA%^`ek}R5*n#YaSmkrcAdVT#?l2Rj<hMXy!3&k7Iix z7v0Ut_j2<6T=)QI1sqersbS8Z#YzOpd0e!J)nZOr!p>68c!=#493!&iN-liZ48~dO zxXt4%h1vE7E`FNRo-rzA@g|lKjeIb%l-nQYoUb|k1ZSMF)6Uz~ezTihvP(d(wDs5+ zJ?c7*!jLbolPl`@WF1t|1(md&remt>TD5eEka8R98-S^iN>XSGeL7ww7P+1*Amf)lv7{qPn(FMT1pFNI9cbaHn$bQO-O?;;DN_34a3) z7-N|GIl&j?eofAIH0meg{#tyAl71%w`R-95B!oB)I~*UCc{9T79x;`&l3z>z$=-P0 zuJDVE7wlRW?aV0O6+pjY3%Fj}Wwn@gmH z-);tMTmZNm-WJ(S{%SKYw-9kAdV*bAg$1k4a#{FGa#%RgGXlRtlCOkRy8I~pMJh7b zD4g=_i3<^z81tbx59Mzc$np0R4f=)Bf2U6`(c*~gpeK`ZhRSNO4TKxvpw;)xC;+v(DpuPuRUh`k1`v&kF_>!5u4Bj8$i9%o2_-4g1 z3+2%j)QtQbig4F#^D!~;z1PgU?4Lxt6g~0b|A=3nMgIc6YAM61E2r#4RbD=ubyQJv z^8=}|*t~j8J}~)ibx47{fFCOQSY>^p{Ljou3STPxT9yA!;Yo!*DEwaerzGXbY zZ%Ov~ygliH?On0uk(h1kP`o}?)(rEIt}hD0tC5axXrdOw<-`=%R(p-T^{zhpxna88 zNF(afC>=jquNtn4@6rAgjrZxy8QPhpVWtj>v@=KJTpfSym06%+v33_~d{9@FcW04y zA2I>1UN1FvuC4{qeLFjWk{0oS%L4Y z#Mldl3>~17hZF0lSq)U?EoyfQHB-KaJ;@h8r#LW${!~iz9eJlIV5T@ujW>&9H_X1+ z5kFx3j3v7&*CL3%OoH<_qIUZY5pk)X-Q{Lw)Tx(gzxAK~ji=C^7@$P7Afk zJU`vV+aqs^wD7c0jyQ66DDP_pvI)v#cQ^;r7)p7jJl^MRnO?m4VlcA&I+k}*+FBuK zgCMfD2-<>=?reK^*q%K9V)H1cs3*}N#^o#%BU;wkuq6*?_4ly*P^n2GJY(DEY(Y9F zZPO#<-u(_oEXxy(Zvn(T2!T*E-&6h}<$b8UPn6q*bKl{-Z`rXdC6R$2taBBB>VhXZ zmo<%E2KzmXI9%I?^4b0 zR`uo(34&g36JlPC=F3PPk`8}98?HPUUs>K)D4I`vA=MgXzOES;>=D1&Q$;EfCGEd* zX69;73~ZKlOj&rn<8A;6unNZ-0<*R`c#i4j9Q7mB{7$ggq44`^IO~7vj*bKrx&@CpW>a+%G z10Gy%N3!I=oLlYyoJO$WLkC;$or7C;b<*ERb)Ubg_!#YQU$yJ);l zzD0k=>m*zEv~)U{h&pWsdI9J~psnD)3iLX7C6KTunuy;ILdMA43-msC2MxP}K7>AU zWfq%~(Arpx+nDTNatuo2MpnGoW3Y-)>=KRFw{a4-tcc0wu}U%~RKhBiF}Vt6R5i1` z6kWwvM>h@KR5Y}%8tC4LZcTy2BGroqXPThf4Dl9pZ$mE=-E5RLnLt9&ZLnn*jL34c zJC;QEn^=IAW?;F(|KLkJv=9wnVhPTWT+A|qn5g?O<~@R~t{FtvV2f3_xEQZKhH>jK z{5Vcni;bQ{Z#~X^24!EiGP(nWr!jE@=59iK7TxF3+l-+Xv08L9zWW{YWH~Mx=|1%3 zzAszyFLC`>XrIQ7XRzxztnf1q`o)9_CEq$%%7s}4aVjfbB`2sLU9GL73L6-^AT?4r zK>7U?3^Z{S8mh(*QNCph`$CDT~#iMT#C({yKI186{P2xLG~;qDtDPwr^4KFR2Z$sf;&O{2OX)iL!Sq zXP0u{QqEo#zfU>)mAzBN3+gh7GF>W8q~bDET$Z>z6;~pzLYdc7W(pP8Bu=MdF+R!O zwgDA2A*VIn){%;Oke5e(Kg#HDcJ8aj5=@|A5@k)M(0%m#6sj_vK)w}4q-K-9nA`_x z*HY8dK@Slvr|gyFt)d54lk+e+Pm=ePVJFfvwD&n0^DOD-Y0L{WW;0cJi5738Pq)(S zS7^-3^y%x=dOKz9pt!f`${w1%mp*-mw5(YVQT7qaJY$+vKs1o>!OG z-psoja?q3;H{nYyO<7op=)*pDZ_V9vxO)fwtRr{t#9l5diG<|w+1^~zhja6zH@@Ml zhH}9e4#u*Y%t=#NO=F(Q?sVQLhOwEZy`sZI4B{4klw)P&c$bg9&wC`Jv5&J4apVJj z^8k-H%qU2WFE~*+uBBXfl&^lxDJS^M&z$fR2j|(j!XDV}b+#`VjdIZ-Mh#nvEu3uI z$+fAc?ew*sfwt4%cKR95o-<6yDzvQcibkO>CV_#RfdZkpE zM8&;)8P)okC}?87E<4x^ir#QTW0repW}*HyIy0xP)SDmCvFr5xYxGVDF9_peiw-vH z^sT1G)O$A3=YD1&nP?@@9PR5Xm2sBUk>p_=p`yVs^BXXTvYxyJo8(wbb{v} zw(q@QpSn(`OW;DpD?xcL(ZNK{{?*QItiKS!94u7UcK)ljz_R*C2B3`P#9QxPD{uO* z%6UDD{w^!tru zozo*$k7q1tbXxJ8g`2G&|7dg?8*Ox|^H-zO7k|m=oB!W8Ivul0r0b{DN zEA%g`^t2WF-U~{g?_a{zgwY8R_KZqide#G4H4J~Aq^n~VFyZLAS9QA zGEhiZpG!#lk zK*=x&jfBuBu*X2joe-8a!FUKw05uUx?uL@d5Sj|1>5zXvgaQbKA!7y{7Ts?lbd_D6 z*bLTz{{(nX0-Og&;V8n@(hFqcY6rj4cq#@zDuchr% zGLEW@tFJemM2#z%PNFl_FdX$KbgGV+hM0;sr=U~A2&7mO6VkC`ZM>ltCfC8u^{}WR zR?fi4&Df<8u4#hU4Cmg0vzlY#ZAh)~awbm5!uZx0$wq98`R&llL1>Q`1X*@FUKJj1 zNAz+How#vVjP3R(GB>k_G2UP9W!Slyz0vE7m;2$l0a&d+P8*1k5LO$6)dpj=e5^JE zs}0B7M&h8+`1lB%Iu?U_u*F2Ib}tT`f;UXX7Sr&C0Q~~Q8Mv#^C@m-iqXg#c)x_1TX61HtoEugmv(;*N4$<3x8sv< z;?FyDMjm3L0{T*y7m$H4hc|X<`m&F0hJBYc5@TQNj_+#Umt9=;D ze}?(ex(g~s?#^+FDw^xFFTs;mDrlixUwK)|YpuL&<+WFSJLPp$X>CxQV>Ays?0T0TrQAE`!uhxl~`~?M)ZFyH^zNf;Ut2>UW?q8`5$5i)HMc=64gsT0m zTKApWa8iALO0D~s>Ty~vIitG&s3x6LDd&}UQFXtd*8QT~U)9dv)%Z(l{AD%%iW(nL zGc4K(v{TXe7{XYZ5l2(1l3UA=w|CX0Ms+C2p!9lFTA$Jyk|!6^o2g+FN@zw;G$(FJ zUJLSCk#`$;K6zQ>Ws)Z*kZj6oM|KW*?G60d>p&fEC+`m8F4Qk-?(#YrhA?!abiq#c zpo~14+mlNAQLX+)%-=nb$_*lKFrCjQX9#)2Nc>J)MpH0?GDp(LQB-gz1>?ybL+(WK zCQzHZ>9a|6(>+vlFL{&6pF+t~$$fx^Orzp}yfC$xK?e(|bS7oZqtI+xIhVZoRJ_0d zibYLIUP`!xP<;5y$y-UutI6;g))78Q$xjhJP52Dee2xY^PlH~dK`#<+qhDX5Q(I~H zD>Ud;V+(nEJJsDm*OgG8oz(Gd`eqM}eV5|)((e6)?-Ra9c!202*@wvyAIK4E^ATl# zO3RMYoUbVO+PGx#IF+0v{|8cMNPSPK=LxQmj+m60_|3Y8%?X8*x$wpRdoc4UBbmcU|6d3twr@eoOAzf@5XdBIsA2lUj397RR<_FNc#laQ}{+ z)S3V2#Ou58zFbc4%6+==^>^^V?p(PiSMI@;^LTA`a6xKBz-(L9LJR>@I80&zPow)y*y$PSH6cM zlX=7x)4?jn5}BITg?Vx;+-VgzTFq-7<`Iu_=^AeI7<WKd$G>8@Te59C@0jJ;RkZa^+22 z<^{&hj4%CZDZ#Bw+qn8G3@aQZ2!|~?Xc}$8`xx8lbP+j?Vqz_q=))9 zJHCvjiaI}8d!A0s(9~E{b6u{5p6_cZ;46?NU~8k!g+&6oL;JaUPFJ0LEu+y*7Iu1B zKOGFwI84V3(ix-l;L*mPTz0JSCp)q%7-I@h(kGfKI&YG;?=@QJ#QRJo%7;^R(F1zm zH0_Vq7}nt#I(4Q_7lCxP9#yE*MIfE8Q|DeF`+ zZKPU@CAfu3_sy0qet;Sv7uykvMyuvy)$@0%;gbv-8H!Z=9QBA4RxVP>BJ3BdlC{cN zr`*lzl^0ZKn~F#pLKx}qDfa_a{jf?tqSk+|1dQN(uQDWKTZV!gD5EyPP2|)es7FqH z@>&|~fW4TyFQV{LdU6?c5SYMv@}8y@&zP-HaF!g4XEE=L;~6mwv8G@sxtfXdtIiBk z^qI>}SB^x(`_P>!pU;lr=|vp>5MO4bRAWp(CthU1h|Stq3G z+!{K!rp9`DP<+jyz57n`ng{`?Wthr(ali|4n1gVfIJ8LPpzXhNdxS}A<0Dm4xNkPIxhBGNU z-)A?%m8T){45U5_SD%Oao8iK9u;T@&y$RlX5mH}*$QF2DE4=s$y!a}t6U^^6`1p0G zv>kTrfXEv#_f6Qo6E5$9%sp^QD2Q*t#I#svq#)7xe5!K}b^hIwu zf+$H$TT#4PSy2@UZK;7u6L;$nl|Dk9TcpY@Q}?V??hER)c-1~v&QXP5nIGX#RM?!d zT2f&Pn%Rm9Z=*t=3bUv%lL}iK;(8>93fog*8!GHTDYsK$XDXLVg`KFd8_n!Ng?W_N zle+b%8~ahpASxV8S^1PQgbIgI;&3V)O^GAujggdcr=j)w<0)$lEgeVBL@Jy>h4)b6 zy;L}vVkS{Ag|ennR@ALpSV(a*DP|rO&Zd;PR5+g=T0n&hDeHCG`7>RyI9)Lk|A2f- z^K9u_is5>(oF30b)w!ND2en}w!nN+_r;E7OGK1@sRI+=B3qRx0M>*>Rr&YC`hBkDz zn{~0>JM3n8c5GQwM`%~nDPm2(miWG1D=}}&3ShXohMP@jp-x()bCzm%rN;Hz+oExs zR@=3}7-5%&ceJc;x=UA}uorsk7}0wxQP-OE(0<;$MfNOO%nXxHpnD1=8mr(|!|~pKk1F|syzi*CEY{`y`rQtf)#1uIl&Zrubhw_*udf9l;DI$nHo28G zq-v_6slE;x=@{ADw$t%TEL?6m#s7w2@&v*3hUL6&c_o&6jc)We+Nc9~*XTweFwpox z;EXW2^}o?ZvN^>lxu}fX*FAI-k^m1o1;=^3k-6j zETAauhlKXC2z}8o7nqEOyWT|FB{)L@=h=hKyMOU{&STvuLI?i~LdVTewWAarc_~nU zIZ;%OD|d>&P&vU!)!=U)&NwxFqN+MUtqcqU2jsFK44em*ztpg9f@`dsO)A)|@E=$k z+@%C%;|a>!~Nk;-i!Y;dA~`-mKO`@CCYeluQ6T( z@KT=r8h-*_f`*KOc4=x30*OCh77Nsc+8L;efLvM(BeG(nnV<)b4sP&3)IX z!h<+vHV9E)B(lu8I`b)$>|QIRuNkJ6ODLM~nsO!PEY;g33im49uTXB1G6w8cv`-1E z%G<7r-!yu)C;zzL{7)qRn#i`&^CD*K<{E^W(o)NgOpMu(ts%!OC{b!gbB!|%^K{Tt zLpL4B&rN33-Z~hlVXzJcX(6J}s~R%3I5%Eh0}_3eRe1h>3}k6_5#1};^KbcGw0BY9 z|JL5G3GWj2e@#98x~jHct&%=FVn=hvAr=)BhU;Q6!^jYOZN)D;{WXx$9@AQ>acxv= zNA+N?daIZsII$IvRHIv!zD1)@qnvAs#ImkA_pZgI=0E-8e3@@!zB{}21Q#c zoFt@*Nb)gBMw0T2Dkje^^C5YN`?0OW>n>s#lwVH?-WJ#Y2Um0YMia>TRJfX3)$Ax* z^Q$eYnb0-mS0F#$&y_13A`C_Od4&T6GA zWJkBma>Zz4Of|A)?$ts2x9dQX;GK0$uFkqcJ6%lKmUGQy*jM{edtpK!U8}cF8EBT# z!ZSg!7Y@<|y$o{1*a&5+A8x_7|6v48`r8O96=pAk^AUiolXgW(k`mtk$l%TdWkxb# zb|KhHLUwY-G6)*Y(C>jew++9kS4R4^BYfA~=$H%dWRlok1i4%jNNtOn&Rx3cAA zS%rZW%&;(QYQdd148??rd<2jMY{&Om~H0dwLI> zW6@a)UNMl|mBdhV65L-Q0Q77OmodHSkc5XTV2uPrX6Rbg#7I5Cbo57eBsLsjAb1jk zf&$~DlF86~7T!dE2fDkYWDun}EBM$rZ{;^A>;>7!d9sWC_ZtSFNSSdlUlwp3 z)h5BUJ)?$1VU>TpqUbf#a^<|CoD%b4kzE)aQ24R(k16LnB@i}}X!cI!)FtO8vg;cm zOMFC;X7qe>8r_PDThLOUAeve#5Iw2`VHff`)9g;<_n_RKG_*g}=tu4V3I>@(1B{}J zW2w9>$RsE|i5y9%N`x>VKTK1LXvhMpyO8Q{r{ENo`+@B5Df1Eqm&y5q0wI2gl9R;V z->KC`Obyt(nW+iCUDx#cWDjLmsJ8F&#C;~!k|e&4gPeYV&mA&m=}up;UJ@u>RZyU09fUnx zG>`L6C^y!+@=Ufn`8PUc`I55_GauvdS1^lo7RZOWI&ST_uN>>tVhyM`f`MqSd%&WP zHRi72A*Wu8ztHjLnh$Hxha&8re$@Pw@T;!i8CTPAEdwq?kYV^F69D#-EIjB5BWoPs zC49!n3r1cvTxIALBd?lpqmd292lnkJ6aHu}P1e1*{=&gd`s-rLKnATJGzXk{CoR`6fGYjfF@mP@Hpdkk*xeEwE z9)1&^7djysSd^*rxMDv0YdKucMH`rtpAx_2u2&!yX-bl;SfTF$yC6d-Azoc!M7L*4 zjLYQ~XRq`BeXQ!A7^`BSy43mX__(BCyov9!w+UyNye$rp6(re8yvtQwZyz*W51B!4 zdbzlfaR;GiImeX>xOYIg!RbAxz(Qb?+bLN#V6N5K{pulW*RX6~W+PlW*gQhh-rLbO zy5ktf@^O%j2HRTL0Ak|w-^NXhann<_@V||l7)o+XobqjfQhU!hYs>xnF(ervDG2-<@4vA&R|UOSrn2 zt0(flQm&rF`|jrIXbSNuP$N@sbG|9R)TES}`Uo(cWhTxx_q=9cMvmV#slC16de8m#AyP{E6kwG? zUZ=Em(~^BaLth}j&G6!4+vR!vJ#r5>K{ZMxReIse`rHlr%U5;LX1#2iUb$5_e?^yH zr=%IlNW)`1RFC7qvaZ2VF(0^_WitOG8zSk#4hzMbA!!HA7BqvEE;|N#$Y=rATFlWS zT(W@E7jVWh=EpetJLN+Xzm)wY&Wz8GCja6}j#qQI%AwTJ4B{gVkVy3~#}BzU07#_r zJ8{Y-UX4p#pPtgqGd;YN?%t+7CVGg|(E`ly@CO03E=r-2ENQ?v)qe$>Vm{5P!(kx@ z7f9Y<`SKyoA18W-hc2~h3Fjknx)$?Q0uLG@Zlh#OZAEvEdRaMW!hOcA~x zrAqGSG>CI%n=;I(QDgke6Z_%+jVJbu|LKW6@wnm+#RZCc5Z4^;xDyu~zIpsaa8RO> z8B7nLuE6l~1y0-SL_YKe%RV!+)D}E%qsQD26)3d?&@;%Zc1UzkqPK;Lg^+0cmV`(& zJ|H<5>lI6vol^X|#BlPyEqQxHzwZJf&Bqe%lTL_-dtJO8lGrI}dqm!s;GiUmlaWmC zyGT=f9sd&{n0h+#TG)IJ07t-iV|6@EhqvkQb_5RUaJ&xh(lkMbpvsi!=x)uEHEokV zuS@E7N!=l-yCieB6uv1F-jNpXO6Ge~{gxcwD}Q_<4G&7{0l5W|^6lmid>T-gSL%GF z3b9n0q4mGJk8|NZ{zOiO-T1JQRH%iC+7Jjr;jIn;0t9aOnD&E&UWZCARPd$!ltjPv*ceS(!&)?c|9eym*~C{6-nOJA_FA{ zScYK|T_@vil(bRekCwDCE+a2}ewkEFld`GKd{H$+s%E-q@_3%m9El#3=pl)c zGlXEiV=CVH5Q;ovt>$hPn}7>UAa_ZSJ|* zl#X?#FjH(wlAE%MsitDONuS{qM+@hf=wXxjAYx5S#bT4W)LaNV7&_=BHds7sT4uGD-o#pJ=IaesW9Y7h1oI4WS{w$buw~o)Nee>5~jM#NFM` zaYtpK^@ljovJc@1q+eqhosGh>q5OzvsUz1*Dl@7v53SDNa+W@d7s+4?Gz zG0;3%WNsQ{9>g{iJI$e{;V{G3npczC%)4(ejjuQF-Duvs$?<+qY%^OYx0zQbx0&bO zYF-;>#wB6DZEiRB-er(LT8$6kubpN_a;MoQxzOA;#auVdjGkeJPBQuTnu>ChI@9!< zWlp`{G)yiuubON8d8TG^r-@0_h)0Y!-<*Y=W`*gx&@5eKVr({-x#ed6rRKHA%(=LK~(%2V*~_{+J+t$gtS56o{8J#oqdw()lxMYuR4{e<;AMy zMAdSMs*4kTF2&27Pc5SrZ$66)+VSt_bI;Md{$9r%JN_hl$;1DK&76zFe+T9*hU!x~HsZ(CiRp06079r5B*GkD#?qCO8y80KXz~!P%26Te}>oqsj)A)mM6&k+5 z&>bdYmZAHdb6j>A`O2a5hPL&nt4Ei6QsT)}FL#;)4j2FIbv)wv*Vy<5$F=iIZS_n$ z^*&24vtU;>z!WVprOPE7b=Pu+2_0XM4w+cnvuj~p>->obNTpX?M+|Lh_y&N71{G`p zIxh?g{y!=M|6gbVPpp{XWW){IUvYv$T(Twf45kE7!cU|+Ck6#mog?f;m|RYb3+B;} zm>9sK`_G}lB6_ug%%k)ZMh8#P`Zp>6ZQB1XefJh+zDLFH)AA2!|A&{)BS&Q}F?+{*=x+M3cUx%+Co+*n?kC#b>noD>~&H>VB9qzoqU!P|NQq@gsHo zneu<4y1!E5H%c6%yrY!zJGDDbxz+U2pLCG%6Yy2qX%yw0KOq8GT$OYGwpv5TXl9A2o;9jq6R*Om9`S9a;0JM^kO`rMsvgl^u_ zKfbN|zN5Rpr}N&|jbLlKSa$s>akXR`H*}4zGmSyi*=|ORaL=v{#{GIq~h`F@Dpd0eUJ_2dDr+1-w!@S^iYw`&@A0wxy)kQM4a( zI2gg$Z^@V+`dyve8aRk}sM`n=-i!6z6B(4~;4q|mn+uWy(la1xI$LLU(%?lPl#Q0? zc$u^3#5=W*UE6UjwFHrrA&ggDg@#HQTmUd$p>)SIc!UXnP=g}?t{HS^3T8ALcC-sF zvbk4S*o5JV3X>3w3zu6a6&r;{wOL)o?No6;l_*j)Se0I@g4T)+l7=7PI42anWlnJac63A1y7^?M}d`k@;T8Dqh z;BDw_oABm5Cvt;&?WJBE#Q%_)@xRE-;wfBmF9*<=&2$laUQ%5q5AooKx%ng9d>-?B zZeGEg7I2+~-272qy@H!R#?6;=^OY>CxcTFJ$r`?7EjNFjeT=iVa&GeD4PXBUfI7ws z{ypZs9DV4*7b3VLKW1P>qeC2h&e0d_f9dw}(KpUXM~9t#ID-EC=j81ADAO?~L64Lp z9QuFocckxU9f^*tCQrjF^mK-XWf-A0L0uiy(@_H*Cv=!397fqXXr`m)IzB~nu8vOE z5ePypb*C0CpdrR;sf~`?>h|q)@p(GBK!@ie?N>*a=?kvb*~uV=4+iSRL-d`Hs}0s8 zuhH2>I(wL|H&izrp<5@lYD;d^Pmk2uqjZy-_3dMHW7M?w==c#`x=@!d(Xv#_qgqyK zsnh`ox~pBX%*gc`C|%6!pkq&cQKv%3{;CeP=!YO*KdR$jb@-bOe@Fa;4y)0-=``hx z5wVsqRj7trKNX)UQ5T82%HO)VIA&l*fbHVR(yr1a4m|giYd)snwehPfUVjaX*}3z;e`#nu$d>Pd10X!cK3olUfACY2YTUEUO2#u26^F7FTBwU$9UoG zUigp~R(MgR7cBL{%H&=FRb#yjb60Hi}!osr(XD(7asD$ zn)aDI`^P!9@LU_8XS=tzO<~4Q>a>eH+HIX|Txb#E6L+@ty4p-^TQ0R;cbnVGdY9X1 zfIa(aH#6}EIXO_(OgmtP8;p#_xdiET@(88%j78XYt8IXMa_-hq>r=s6gREPX5 za{V=IHE_GkaM)+sNAfxRWt4lA%8tW}$(+W7=@S+ojag3SyKx#9aNN=5dlq%(xD)@A z+mMRLm989J{#V3jH)aS>`*RfY;-rP7K`Hkw=5P}Cy_@ft%E2_}T16n*Ig?#t=@;eP z8ur!c&JKSL0?}r3>-)L&gY44K=J7dm84=j!nK~@fwWjJ(Q}oR+@ZO{ExL1EWT{oJk z8_m$8%JryO`qumO{`++>NAI7l+dZV$%+=uo`pS9w`v>)159?72^#1w!*dw}qg+2ma zM5QM9I8GoVc58Y=SG=z^1Ptj?lqrco(lR8irhHRRY%M8D$mF_`)=-KY$mmAW_#{c> z2xUq8Y)OPt+)Uavm!D1%&XpT_I_D-Ni?7@#0a~ZI65lVu9HDsR7Hz@vNkfv@mG{*_s7!NSGa~~K+vwXCBnVbXV?|&=RFm(SW2p_M&_O_jw0+&QG)nel|^T&2mjos55X2MSM@@{j>9`ole zv+7MFZ<~_O%qc&a)<2jTKbvm9m?nq4b;rEw-@F@OQmEzh41da)v zTe-q{4PY^dAF;PAv^$pBDXZ+PC++n0cKWln-Afj<;YOS7&TV$+2KGU)oahMlF&3KF zfs=1&x`9wTIB^Sqjod?y^O!zneMswS9HDXm%!(u4rxSI2nhC*{+-C}s)X zOuae1A5;H-AdVSt9PS$IO;9=SVt$*~zsoUFe)hV2AM8!SeH_9}`U!`JIQ*Q$FWfXc zg!Jnh4!-92Fo)l9c*I#vBjlpbS#@#ZZ)j*>oH6Sf1RPf>H zuB*d(I&7e$gbqT7#Gx!5W^2Eh4x8)f6gMYFh8q0-K}(&}LI-E+2v(^!`u4UiKrOsL z2j}asz0R)Ig2Oyr1~rsPC(FTh@*Ol_7Yg;1=f{cNl0-4*IuJ+L&BWb}^fc+0oAe&0 zZZ8w`F~JoM%Rv1d4|Zoi(|Z6GuO?@p1H%SIX22kmIoO0loLeVxt=V*q35J_sgpnIe z-t`7`OZknaVw5R@(SEcky4jSBF_~jcbc;#cYT|Jwy3O!-6W(sp?l8G`nwKY-xY*>x zCM*GQ(X=deVJ`k;*D1$SOf=O+x)e=!sV;?+j3h+`;Y`zgmdUx_bf05_*`~`}6V5Yf z511AYyT?f$G6nNZ#R3yn7+Pp@mY9#0x!4z4?izMrA2L>$pweWnG%0u~_L$VmoNmX3 zm>l-PZ=EI$g3oyfF8Rd^fAWH3E@aUE-AQQtYR~`EW40kyoXR5dKJ;v0ZK+A7nbdIk zgMMH+-3B%7@0k{Ig}gde>RCTwvm4mpBAoHntb{J^$XIqKvSsiU~xm%1vJ|uANRM^}_wh^2=k2~!UQY3*J zWa!1P8pE~wp~?Hm{PD4=-ex)oy_M7w#PA;_ZAW~S4RDtocPCqLu^SVG z6>bBSg}&xvWmi$vYm|reWzyz=e|6CY9dFTO1uB=uvnAXk=n8|D$w-L%4CB(@W(sg@ zBJm;V_Vs6YA4Ac^%eRdG=9=l}o2 zutq2SXACQ19pY@_EV{cH0W11nF|3Gw>p(dXMfuL<8h50q6a7aRYt)PW$1v7G6b+&9 z8Y;Z@Ka*HvB(dH^eMbEwjJ13W#pC`fjI}CuVXVc)E{qi%gGQ4nQAUYrE+z&m=5})_ z?E%VrnD`-@ho@p8t*Iby2|c=;(jKE|1qF{&u!e#sC_obHI%jkxV9%eX=mm)pSY>C>Yafag@RP(m7Fw zyJT{$`g~elPD}9ghFmM)E)BT45hogR_Q~uu;k1ywR-AVpcZs<8GDqG!=SrRmHSg6N zUB%Hrj*2)M%+U~z25~fuOQfklQ%6mO+Fqo&Gg?GC{D+2+8Zrl8ImPTh)kJ3)lo{w# zIL}098am6!-%NCl^L<3^O?qUad=nHH>1d)0P0+`W7R% znsA&6&>s~Wid_PlOf+2TZcM+-gi}l~&G<7+Fw+Hz>ieDcOlIS?bTeoFArs6u{sQAK zG_=SBON=Zxvebl+8ChYZ(#T4~7&ts>=vAjv>b}d2e#=B9NxSQ79)01(hdutzfzc|C zcqPAh{F@j5?uEa4akUqFPW2ksw)1M*Ak#(}mg?9jVY!}-8(3;=<19-j+bG*oj-_TU ziZ^Z!AhV^@Ew!>Ss3vV~e6~d@Hx_FDDq1T}UNrwITHABUU%IuV*r~jaE&dPb+SN|x z6c@Q=1P!ynO*R;5qnmATgN^=fLl9=5Y8!832!8Ig@hBTiw811B0XI6?2AB>_vB5ny zoMwaR)}Luh0hyU+g9j`$6|~SM9<|*cv+u66Z#?5*<14D{V;k&aTkYx4$dO6|zNxA5 zbFlhU(p*Wdl2eqlP;$MZC5m>dc$eZg6us%PN|7-n-z)h+Az(-lGgP0X0qF$Ulc-iB zs&z6oX+pX&bx67|_ctZVA!_ClNRa|YC&Wcvi3VWeMsx#3N!KKDx?dSbJf7$_ic3i_ zOPomUrqc0gRDBP1m`*f<+TTmx%_f>ddLGGKBA^c*BzlApDjGdRwH6R9q&%n}A=6z# zR6)_Bq?eIiMS|q+)dY1%qo>F|L;7jr=cxT_q<7GsEkrwscDZO#d7H}LBiT=lJ|%mA zEU-ui|BH-dzbE>Eg6|v|DfpR!BSb$r5*qzV^c&GJ(nl!-4-E}$H68wwnhKyb+z3WN zpNnhoggWq7xGt$UlPA_=L2Yvq>-vt379}`p$ixJwuWxa&;GS-!xwu18><)X*9XeI0A z{I}JtS8>(jT=fKNkP{%|e~Q!AGP2cxkq?q_0C&8=*FY7pnNv1!!>vqPIAF*4cG)T)}ZLiUJ0C0`cbc-ge zS!1V&4yWp9nghY1ov$v}dWJ5#PittT@7FY2-#ACpTrCf2dO*`Wfc`Ws(Da~==DS%| zP@%CTm1R0@l_sD9*J$&E)=wq(q|a!2K~t5Rm!1Zt!3M22I(w$xtlMwV(QDY}Y69GB zyAF5ik-N0rt!0mk4b^Yx1Y$$q){WlL@}Ab16~FH&Sn`RcgE|XxHHg+A!~RCgm)d@= z^;en>yYNu3u;_@U?=}6P_0O7)xe4u-S9C-|5a%+y(;`+VMe5g(3AIJ)Nm_l;O+Y`6Kfpf4^ES|-s-ku^duh^`XaB(zz=EfVjM30SYcC-!5Z z{X(Be^tsSy&Ma9!X_h36_`VfNPWcLd7Wqj!{33Kr?5|Sxo6zr4cwCx5YlLPz-B4X~ zq=C^*jc#sqOGAHiSEmE-w>2Hm%b#oX1?HU#4Rtd1B12tG1UOq?0|~T2BYC~c{d7?y z#U{kU6y4u_E@vd3>sDYzb4)5ayJdzRHStnIt6j*5JnJCUdWVytE`Hr;uur#|s+~sm zI0)*aZ<$+nnZa+HyWTPN-!uM4hCX)F7=N$nu;0+9rp5s?@t{fl#Qc89er+VSN9!>M)1CPG;=m$@r75~W-Oy-ei+0>@Buym@W=9b!6`kSTJ zHcqN}y>o2Uc{aPfeF(am^KE-<5jt2dv=chnZUwe^M|&Ka-p=-vi(GbC!6o+LOKndA1oaq!m`sb}h8B#L{DymfPc%w)P53t1PXwc8%5RY|3-C=p{=py0K4_m#z1z zrA@X=m5n#pc(bL~tj6Adt1aJdElgYpZV95=JG^1G_w66JSS zeh=k$Q+`k7_fmczC4F6Rx!+F}K}Z{{|Hxp!{YPj8Xnr<=>(F z+f@Lh(%mXd?oepDl6#duL;2;(zhC*YmCRM)BPyP!{DsPYRE5h`uuS=tDq5lZl}c7C zS)=?_%3rI3$CW&({Kksbsc60OpL1#EF|0HjRPeG2H>zN(^0%m9m-63G{#(l5qx|=j z|BmwCR{jUd|48{CDu1tAPL+PCB12Il^4m}hsyW)mYbZQX0Nh12A-{ab&4G~%iDN5n z!1>+yTj+#`bJ=ZNe3!e?ie@>JBkrsOjE(a-fL61Dd4WqgDNk~KK!k&sD)+z1bO$x-EEup0sorM+xlFk}BuCMQIuDj>zDJ|XoB5gGk zo)aUT-&vRT(uMtX-Vlx5gA;s~xl06cN4iH7gi?^)%+fSR^E`J`(0t9}bo_>n-_eL>_)jS*bflmCH!0~+ z9sH{0H$C}xjqoz5)*(Ev1nndmIFVEdYluMD4B_Pv0ix&sAiRWD{GZy?Lz4HkOu^ZR zOcQO=AXW8^pJpT}Sj|idR`VcOZEi}F(Qmm1q+VmTUTbC!H$1|`H<;8LO)$zZ1bCwj-)z21n#BEE4Bu+b z8RwQP@dQ&*Y~t8RiQ$O`I~SRZ3@wv8#f{x~h8wump6QgdzW}B>#~r_Q=b26q7RE^cEF{V$yKI=Mf?BFeALj#2|5QX{5)|LmFyz_ z562Se?jdA`fx!GDjeqkwtnGH7V*|dpK7W?rn;P)O#{6s}-rIzK@4z9J!kxJ5^SlFD zPOoqm6m0Ku-nTqF(DA8`OoiO@v|n|M{yHJ1wXBb1T)q@N;o8{f4dFc!eRNuQUGr12)FaoHf^GgPBZQ1gM%UsKQupm zU_1bn_8JhCXKiBe>ptjYPa9rgE0y70I~OC#iHTC7vOAp5$4|--b{jHwweIwBt4RrP{Y~`G$GB zO^C()0B8KH#)uN*qgq1fuOFn84V1Bscnir+^6@iv;+q~|6nj;-icFA{Hs;!B>U|1izsC39|ongYT;C({8#8o4@}Y=ReIY z%XCVAM53swZ&d3a)yOMo-^u)b$Tf>O2R?Tg+xLTGqYF0Zqf6xEwq{4U`FgK8ddMvJ z!FWHLTJ=10s`tP(p4nv=_m+C&qzrK5&bACv&qccW2`ZZC$lJ9aqV|>a{!=t-C4p~K z($9Ta|8W!Vp;Y`@vF)m&QLpJ&ONdueE`Ev^DSV0Is^l-CrY_Qw{hA<#wd#<8lCV)5 zll>rhTgiJdnN8VL1v$$9k8b*i3cgqV4=VUc`9G?ll>B6fHn`syaSOc92iQmFGEE1I zb>2rhIHvvDF51sOOMEcdRtj*(!Idt09^Ys1ua#c1t_x7tVUs(;`qx>1xb?4h#tOu6 z`wJ~v`^u)OqM2ITTvg_(-lwSEEmS4Kf`3r-y}JKLRq&HKP)Y$z;wveBkI>Ui-p|zs z`0cA4kon|$wJg^0M>_SG_G$~Yk)vnHpKYbdO3AC1>SP&Q{kYkc?*$#bu)qtD8Ty0Q z<0tR7AH6frw_``xaJY@HvmV5d3v5(jr!KVLFPDC+P5Gy)5c=CgrpBJ6bonV=h4=1a z4!|0^l6~}**uf5EHKzh;$w%L7-N=;Tm+jx*z=Lqq!k$zrzju%hg8Ki zmDE;#edxd)|AFhOC{)~3akkEcAK1(r#;^!(pNAY=z+bcd_`4=eeptzGdz0hGQ zrL*F$N-j~{U2zY^-4yp!+)HsEMST@R0R=Yf)rtoxE>ht&N`^b8WjsRh4N9(4e6x}< zipMIxL-FlO?o$5U%Acb69u-Yjbg$wWipv$>uXwhixypY;h4U0IRQ#y&mn&JOxKafx z6t7gYTG1NCs}!$Q^0=ZWohl|;r-Jp0pHl=6SCx_tN?um}MkQMnZ&9+#jc)iY#d{RL zr#Kma#UCjCNb!e?_qve|mHdM+>Hm{3`9I+$aYQHi6_MfCLvcGUgEzhCI0tH$sc2QtT|CB`6nu+|6Q5n|FcX&jdZ`` zBs+=bJVPju{)g&_|5+Wq?kXQ>10ZY3uW2bSY0-sBEy;GqFs9Wx4sGEl!yTaQgliI( zNhF(}$ag?}9oJLOG*qvgt(J69cV4L;8K{04q&~b;<;LpM5><4UdUKjuJVniaP+h)2 z^;x14E7bchsy#2OlXk0SAFJSmcB><&U(eyU?AOr9X4~CXGbkmIjtcbuCb+QMe@iV~ zr5F9G3p>c-84}KvjHE{Bz;jL`gsB3(Au$L`)dGN0+}!xrnv62De~#hR#$ROw&aB7H z?Q4vA(&Vf)>FW%rLHxAgBsJ)lXU)aWnY8DPdBJRY(VX{^p_fg1m7z_BUomN~nw*Ws zZb-VfwwMIsL_ao(y=K9FllO`751P^wM%rXrhjY;;o9-=zmXp0U1c7icLAlM)1fFoq zUjC0H4nlJct8B8ThF@dvu%uOXoUMY;^j_QVJ{!)kSs?b$vt?*thwF+mOnb~`3=@=E za!Bz{ihfq$O8D5O)S$37MVUnD+^P+!reo{(T>j@6l@TF_{!W|qf(uIG>L^AM8rYSQ<8&6zULMaCD6`g9Z z%o~G8bh~*CESH}QA2sGjllp^`$QGc6{ME>DN73~EG?yq(w8t2YrFc~}JxYaW!=u_> z5O^7NyzERbsOuuIbAW$o<`p#c{8PN3g#$SIxt@QT#~nPvO;_lpg6DjxS9pon^)j!Z zo0rwyo7BTAxWc2pp6=u6D?RG(>49F!)t+4C=^`jLJsITjH6C5-(NK?vd32-ajqv1p zPj2#Lv>JWn11D9{V$cs$n&9`XG7 z9#?p>5MXnUD!u%ro?h;Gt2~^HP_1@{}Wg>gPRr)|2PF z{1?5`Uh;Uohu{r?-kG6P;?H=#&c$cSN_xNp(-}UGNPd@Z$uSfem{?w~; z$Se8GXpOB~RM&Rkr&Y2l@2Z+wSOtV8p0OdNwy(v&qUfTe8(P4r#C3P^r_g ztjB%y3=`D3udvz142U{JFO786M~6#w%u-QXxQY0!g89uXvgle` zcb=|2sN-hp!87#PbB4d>Ka=S+Dj2e+2=_K*0RWA?n-ebWv(Xg zN%Eed;^)cROz}2KY@~PxdAlfap0vjQt%KHE-T(TfI`4=#4zF!7WS?I71^DUsGn4^e z^R_Gq2n8m=>{6Xms%ssV1mt1=>=9Z?n^_dy@7gZ#i^7e1-m99o!8;&nqa90-izN#l ztFz4+drkNAx$yyW&Q9Z9rgJXUi8&@~yEy}SKsf$C=JHn35st7KQu3)8Fu>+?u(lpI ztjh~8l)-P)l44u+8dq)Sw40>hh<8p;oA(;G+0Gq5=91fFbFpME5ZDlWoZCmd*KdNtrWDwdy4v?HwK-SV4B&ImHfb|#6_gKKxMB}4nW*8+`U1`1I4LTY6m-f=saI3h zUIXXs_^B3^OPG}Y1s?mp6Tm~y1_?x1gZ&KWPKCwKukYSjKjA`r{6-Arn>1k`PfJss zdBp2A)fRost&xA!kh8aNqw$jcHe~{Sf+ByBPLwHHfNRCgYQXLY(P>ULRIZle9@#B| zq8H=G$0)BR@^;}>K_AK#f)K7TYKFnVhd=8SVjLPsiaBA;!-Kcgr0g^hEP$neMLBQ~ z@pe_YRhexn*r_UasIIT89%HHJVhYaIqfRsX7MWR#-JKib9NU&W%5aWNbu~jkDu7G6 zj#|`E9ciL^gep5rE$OM2->^PW5iA!dFzU7nEP6W__%t9#zzZKzHvx zf}$BD4^s9*%BiH3)f7HSA?Op&Q~0uzpfI}Z?XF+uT@=0Ts>m>vr8cs6ow{{;6GlnO zr*l-uwkuD)n7@M1s2c}2aU3(<&0!fwGdaG`RmEkPYJSYakMc#wIQo;%$tLmhAJ;k0BqjQwf4{4vgIc$eDzs@mC3}=?yH)0wNXaA_xm)5x5+8Ouk<6bZI4b@z ziT_%K&~d5ZnF?#tYM3;9&Z%a9Z6l3L@o8qt6{hHVllgZO-)F*yjla=kZZ+AjnRvHZ zzQ>%s(~+w&$_Nga{7=lFEHB9M{1caEbI-@UiA%Gs=c6$!@%Rfb3ps5)*}DJ9hDde|xQYe8HZY-tVMkOiSF@yOe?v6X_WG=ptPwmX(P}_86zJ#Bo|Cd`6Ui_JE3O0hwYng`#EQt z#>OxPs$!Ft&Dw0yW~&zT+AXE{OsQxikd<_THkKBzLS7&5{_W z;sZhz5-${5BGGb*b_(wnf1mKDj-ljNOSUmpHB95vOcmm*(6i%L`MBA*&In5S?Pl0s z<4^VEYcBxT?uZ8*3NF5!0{444qm#`C`~m7&@Dna`f^g|+D|*@TD{T7ZcH`AHEK1&n zi*2ybLP0lmk@H{s7)fDu(p(^DVZ5ghT0Li?=S}dU363~RBcbg46$TIrYEo2>f(S(; z`S}!FNWoysE!1hQ%4+?q__ob*GNgoOaQgAi#APR>$?U_H6f)Ny4@8kr* zXbNv3e;oPaDY%WWQU{5PpbWo)quv}`$q{}*Xf5|MHPOX4xV+J5lB|12;x8pUEL<%` z+fBH~1iMTOj!l8{;2@y`GdkqlA^ak~L-oE>#S>I-h}-W{r5XpX{DaH^NM-(%E)f$g4d>!QWD)V@+|V_fCy?Qv94kkeo0aSson^L&>3Owz|l z*)fTXiE5bCVv`G5<4!kn36qaRP++?!qd@Y(!$Bv~)3(0Cb^^csYFjnPmKJa$JnGc~ zv@FJtz%pPY1!8beDQPW)E5*kI>|6@RQdq@2gcA#J`ax`Ffl$C?-a*{~m|CmiympF!v8<|LI1Rb`c%U4(~K?vGf;QIJ7FCknfhpihC+5Op9-?hUwg@-~S& zaXg=80SoLo`&~wre9hsH93WVy9z^N-sxx&21@bZ-tkWX^@p#P%&l36a(g+D|mzT#& zSR%p0E{06@CYQ@!Oa2j|?u5A?UU^|O7DvoqM1L$~v&l~p!y9|F`b68s|asR|FO_!AX; zq2ezUeWilm6&+Vlb%qIwLW)i$$)l(%`4<6pL~<2n+(G^<;%~^M^?gfm!r{SjQ&)B5 z=Pu-uLY6MP;v(L98DD)lkL$sUd-480{Kib?mCgv}FV_+LI2)2YuDTMo7JLXYx_H6NaYaQd6@;K6)IoM`DwikU$pTS z8*H|+%l($~FXhBc;_oHeujq3Xed{7!a7y#fiab=#M71dnD6T_sCWRSlg_i_y> zx_kaXa(OutJI=_>Y~A_vPiWYqIwKdi-xLB*Q!n< zRIlsR#2eMr8&u2dRHu=u$1SSeXw`0vvSZcqTa_KBdVQ=a_p9&|72+dRgpM8uteixC z1B!9+)uZTSikpz&*2|^SniI9838zz(M{*Y)JkrzX{OQ#0UW!&xh&9A>ZpRT~Ap9v! zJwQ)9(4xWQ~A6z854kd7xNpKt6#&v zU&~hy7GrccO{ZXKJ3}`G=3=@2<7Hj6Tle0jGe6RNK)2ejrMPaROv zesD`w`={PT@@JZO=!S5eo$u~qBwUwWCMzzMech$Br|bjeppO*ZEHQ50HR7)oaJLHA zN&Y55(TkZ<-93^CyUoY)BWy3nrK(!aBo|y5)HcQG#y`n)$1e4BLnBPubtda(XXk(X zHWN)Y>o9kE+`NWsdW%Cp!BYn0NOZ*bzZt)gCnrYkn70r2(LlbZu@JtfFT2B3lsjDE$s4mj~DFr7;}4+XWC{eTbFFLXVa|p#qRg* z`KdMq9dRAoqp{t1zV$A&dpp@yh4#BH_HajA+}V!nY5|dsuduxb*uo-vJ;wf6bdI*+ znEygU^X=Au%+_CFdjj#a(*FLqoqQf9PTV43ZzEsWPymaF20HIv@RqbYAg4gWdWUn+ z7sn>TvbEUyKterbR>#J}PI0hMTyVhMnoj1s3;Obg}(?fK3_VRGl#(SIZnP z2pZ!$&82*C|ilh}KN!+D%GpW~@Iglymi#J!p9_smqRPOvhow2dG*NmD_( zYgi=1?KS)cDy*mClU)t$LvWI%sHuu`RD=abGlaUTAXf#asGx-kZd5c<(I^#S8F7oE z(Te{5kF5mVs%V_znaa#j>GM=vsk%I@vR+h~FR1(~tU*=Dc0~ylZ&S2W(GEqgE5Zr$ zvGNb8;B)1F;Uc<%uT=E4JIuo)s`Lj}-G$#N`q9;R!6`&7uzsc4xUkM7I-R(cvmWpn z#I1?DQo%s-22=OpRB(+ux{F6qVl2gz2n#YSCYod3IGMsS!r&ODmaZevpdPZ=|kA4}Pv#C$iW zma$Ccd!}>id%3|(r}jtFw`o=q)cLS;BVs2a&}uGnLYH_6L*ak(Qyf0c!AmSJbBt2z z6;6MZ%inS9k`uNsIE!T;`v*AQ&qKcDtY7%xpPX9FaCL>GD-2f1I?y^o{p4xHK?gWF z)3w)7dkLM^R7*=8pQ*c?t@HDB*hTxDb$qeT>ZVJs(sZq+!J3BZV1zEXUGtreF`H4Q z3#Mq9>ehuWs(6Ou&6dyBv{<)Ur1fJO)y4Lex=y7I*XYFaI(k9NM(w|;u$5%?YR?L$^>l~!9;tdJj6n;laAb9vvDh^5FD~W!T;$tp? zs{3)bI6&-F?3-~YkZ`=$HC2sG+}dQGW-8hmxzK52z@f#iXLT>*_b~)*%#|kWYobvO zra_|(-RxxZG{%(OYGj<@BuE7Ckj$wj>j5{PgfA?5)RbZcyxC-IF#0u9ywlj-Cb7${ zX5fBG-EI=^n5=glgf@4-Dg4A>$9l?P<9}`BkSX{Lyl5||;Yn@J&+w#{7o>X_>iKm& zsqdKQQNr^ZdeXr2vpoMKPnvqDa|&8|lIzLo9-ZNVvlL+lp6Ah-9<}y@b37mNjC{}U z=miBXj!HUv(#i8L_WW@k-R9AFkM8v74v%j4vL<*Gdvupav%FxtN83Ew;nC}ket_On zzVo6VJo?^?;bOxz1T(O)uog5MzTja)CaN$&9gAVOd_Z!H#`V!OQaAoc`v)9FA^ccJ_{Trh{x`bdu#SGv^o#pa{#P;) zCiH3qpcv_I$^g&u4PRhbRMAZewIbmV&fxM!PKXZMwSNW68+>~;L!=G4f~?jA!O}Atl@F~K;GKap z4K|8wa&#kazwnQ8^DQP$wN+Qxc&sBE_rxdsxQ!1hqzXcohBvMpTHpB+SBQKmCEv*8 zEJL}5$C*2>RlxxAR}-&uGhRQHBb=_q4k<4fusqG-tISB}fh?p<2UFY;6x^%*Wjd_X zU7pe*@^LU%c~ys7bqEc^as6G21dXNOWQkfx=eEMopnJd@S@Yx3P;GnOmzQO!?lc^qQ zs>hgW$QAGyr`WKgGf-Fcw}PT*oP{={bfJx~*LdC*Z??S2hEN$TqqrqkoyLCTO5a@4 zG+hfs7h}zzc)Q;*UG|#viNJsmfq9D(eLs1A2*wJnRD^g;CWeX8xL3UO-e?o_+}N(p%79KGirtP zB|0G*=_bc7ml?gKYPR@UCeAf<&>&19gcb!Vl%_N;kNloQhbVE7ymV)j2+rkr0Wu{` zl;a+W;^roOyNT|!@p2p0RelqN#wu>6;^vBTRdkAqTBxwMimp^)Ql8-tP;#{j1}1g0 zLzF#PtMbP?4MtgGB?;B$9TmRsrVTOno--)? zfG}G~8_NZY-0Ti_D0}X?qWziO`A0Xvb{~mujl{)MtG_LPdm@J z0r(Ncji~);ly@eDttqVo#l0vVMtq$k;p3GT46EyLN?k5*=!PmWly*Hi9L5=V?_TG4 zH%ro!oB0QqH`o3MotUQmm3rtJJ?RO}EX~@;BD`XkNijk;>C)B1J0Ei;PPK{!|4z#jwQ@Fp%Fsl%s|ITV=C z-YL-%5qzpECEhEz5f&Ym@M|~8iL2$o)+RdJ#BEK}bBuq!DePq;$YQTFbzoY@>D}7| zh&;gT2uE>|NgraO!Nze#hC5q90U&QTns}svz@vDqDHv~14CLQ!5>O9LGbuAn&b?+* zxsjPBb&fF$Oc~B_^hAqIyJQ@5S*6(oqa38IFB&>vQudo1G-Y>Mdfrl%t+T<_!RY&B z4$ozJo+od`m|74(56J3G@0f|_+Xypxs5oGuTIC$IRj*RCgBau<-?5#`>u?2ZO_@CT zB=#DxKh~L2Wh>{u=CWpZH&^ZC=?56;GJK3Pf93FZj;i^rKR6~=f4+I9t^{PJzYcEF z@hB}fYu>Dbq`J)SAt8{it8XSYFafr`0Qm1RmG2pP z#{n5OA2KLEa@mGtw-{TIYA>wgEP*fv61;xr+w?-)q>KH!qvO$GFC28WVJ`;*=jApy zBKT?$2IFr*u#tX+8;BL;TY_BwS;h5NzL08imy~b(vlzp{vm#os}v7ZGFZ_d6%A25Ovz9MAsk<; z{1M8(UIiyi3j0)qk>;l=_zZRlH{9a}ZXJ__k!B;pTlT-0dlTR;s;%9-*V=3M?!*9{ z5FpH*5FrX`7(_sZP6#tdm=#3A?1(7NAap{&fD8deQBVRh2`ZwZC@KL#kU=IzL6O;6 zQBeUAbD#a^c)s&a_r3S4daG{LsZ*yoA!O*@dkxR?d;D4yq>-Oal4|!dQrGTfg8IZz zCqkt*mAprZr&+0qzk=v_@?NBb*NE0w6*N|F{yw6Q$U8!GoPwhiz`=Kxtn4fH#A3hM zv7$wkSP?=h`h^jnx?B}wi`Pblq2hL`S$ma_tiV3XyHQ0$l?+zl5amNrcE6&rDjcWiA(b`B7CEWY z73i#3|79<isH|@bFC$yLBNFApH9t2zmc)xJxHd8*DeH2Oqb=+>dC&KcV>$)}u z=zG^in>NI%(*s;45!6$ zDH;tFpF7z<%l_}IN2y@6@?V6nSBjbmw~?r;_?Y?Q1YRx-GH^K^-KMji)UrscRo2`G zoFhm|aVM>y$m?aocZ`f>0C1pK_LRf=Z!6jVxsU9>Hj()q{(BQy_@A1{;2^^h{qIa< zlmBNNWdFbHW7u$k=}I4A=dSW!ROlwWn}k+~zgdt66b;p*U$H;!cuWG1Q;2U_ntdmU$Z(j4BSY z;p&7M?vVi&)ns;pL3_t@DNL^OqX z*CB#}h7E`9?e?ily+;xsk|>gdLgA?*GwjSN4_)eEp>HMpQc95F@~d^c;_6RCbJ|qT zYOAHAmZ_Sb)cPqMJ*_>Y46M@-zRrsC6gdE-r@j z(zDz!+`mx+_Um)hg{3n`!&ydhj|m(^%s+AwRNTL_cb>7z$s3}i$hz&k1nX;~29njv z4)<^kMcssMl3<2_l3{;kSLuRVb$FYu2HDRCI(2J|r+P#KZ_Z@0S{N*{k!l1vpC!;j zdD705-fJT#0*GT*i2NeaB)R222UA>*-Pbfo$xJ1?)gnw3KepH(LdzC!B1l&7B=l$R zFC{zhhswKMd3Pwv(u>>MA8as|p*;(?NwijbP(Glon`Vy9e2jn?iXerj4)Z{KJNS2T0*?eT!b;rjA8xhUhRgwi6tj|ePW+4giYmh5 zdx(S$b%2#_M-xo~j!FGrXsSo5uu%1z2>+w@pVA@r^+4TXAsca2U}rT!A+jNCDTRr5 z_$Y^<@BzU$&1O2|y9S^jn9d;(e1PxG=HT%df^Uuun}EkNz&H5MPx}IUg%aXvM@Hu? z_5Af_1pu=P6`&T$j+4+1%R$G3HEAqFeJW?0E*PaeWWmHs_Cb}6-3s72Sne$4U>W;M z*n6INIfpMZjtl&)94I7T!bxtb;gh6ruu(-vRdB0ZHBCn!+0~o>sm|CBC%C01qQZ}Q zo2ZxJ*G&2cCi_MU3J##q#!i2bNf=@f9N@LL{uGp~;S9pD;CJUcU9f&RP>1D9VI_cc?fnyFSd#jU#6rNDOycQ z7}NlN^eUagENCt9>lD68nHb%?O{JLLyknIof0dGfcWE;vzegz_Q1Cu^+vv;=k{B6j z6@$|pYx`u*+nt7=X8|^ z_iM3Dmn)5p{c|5z8BeH;IVy7=#2eNRo3cPAmjub+K(__ zs)j!&A-K(l`^AnJtsKK3+0k0&Q$S@bpv)x%SB?jA$mJpx zG_^HlFBtb3LOfG|1x=CS6PQNgAOu*Rf2^XjFODW!+2!)5+u&n$3$gZ%GpArn#3FK< zVjQ_MRal}DadLvSo@XEIP}m2E$rI@v14Pt`F%7oqL2>3nO9M;eiro&QtQv2BFVS== zT1>$b;;odomoV5Y-<31_aK->mdf4v2GC#2O72Y3#^0TG-9EEb1Jc<99$5Z?SohOahdcR689%#f-$ieqZaUGVFe4&o)S z_NLT}W_V!ZfcG2E4)5u=k@qjMI4{fh5KA=e2}CX=y7>8aFwW;R8HZ*<9i-`krZP?EHT|W@aS5Up7$P*pEe=g}XpuuJ9NOYg zU)u%H5Tg4C#RI)fw25dZ5kz9Y5?vr*A*nJ`CKE(iZR{qIZezNK2@~%XOelnQ*jk9{ z;LBFj)N001RL~8IM%s#k?ol*e5f0=>VztCdJD;bub`nS*D>`XGB6M02fVx<-;6AM? z6bRIMbk{$|DfEbChtfi!r9x|j-WA#`^tnZb(otJo&~E}A8oAbgfjk?kqN%#3K+~m2 z;?Uq`P%}-fHEu)dV8vimY@=IfVGP!^F2-wuj`tHyf8rxuxyhx+tYLxHxU|^15@0+4 zX@-5*!jCP)9-x(;lXcQe9Xw%$lygxa0lHWhOCk_~lsuseP#(<_%?l+hJ^&M&EFE^!G8wjXa5(?|%n%?!M2a}( zDNrw?j>Ydw(`1X9WXPF-F`T1wDudl;=;B{lq&s&sko{mI_Kzpyv;P{_u9~!(_j9VKKjX{40A0}-LfIPC?VloQVqGxqfXk~<`rg%S=RwiY-fl4rZ&4Cv$fUxjcUAV;* zpiV|d@T~UH@K)xa5~HHC|2u*6YIF7|WV0$9ockbvVeNq{&AyRwy5?5JnaE?LR(q(IAt(1=~Zx;>Kbs@z)1PG!45U9Ujtyn*gBA zQV)7XuHA>Ca?l@YjEk*~5#Ro3 ziRwy#wE9CjY++#iK92IF```IlJX+LBBTxhy3Gb@){xXQDynog@sjWyP}v+I2` zcALpwW5NkGqXBA61sx`4Xlr7L$ZxH;#xVc)JEiFxA z2b0#%Z0Tdp4zxcm6lt&>B`!0Cu`e4C;Azk!y>Fsz2KLf06*?bHiPEr|Y^o$T)RN;h z<@yXcc@a@tN$#p8@70tCGUS6=l6=?+YDvny62#;IKoZe0VWaV7L`AyOY^#>^8<_A_ z({`2F{l3ZHX392N5LWb&L`TK%rX%piF*j~wrSDOH8)oYLYZjH`bOa-`Q*3g+O2NU@ z=A=Y8e(`=~I}vyhg(qfzZ7Wa*%@zWO?Sp}XFVvpQE_-c$e4OE2i5%X;ex{q(zi^H7!j+Jp4EJUwBso;O6d9IDGk=mo>{h2eVMNPY9odcrMw z#%;RKt=cB1+@XIOr7s(;uenp-G)C{dTi9Pm(?GNgK59td? zP8p{Mjn}JV;VD7B{v^_61$xj#T~?^?o2(Na(Qg;&&!*^8Q+52K`i<%O)|vXDY5I#v z`iB{MeX+iGmR|6fE}5-gdR#yBq)vW9*P5f-%++O2={8U6$@BHpdAjTweM>A(r415( z7wV;pbkSn{1@W>?$`x>b$nyN3FsIqI6ceV0csIZx;c&!@MS}km)dbU)jiWJ%q)WeLb7)XSf ziZQEsLdjgkPb+>_Nvyj8*arggV26tKSVa>Cl1SQxgh`N1(AioxXr0JOX>>s{f$2e} zK$ed1`U4X^TSurrx9K-_=z5sO?9-)CxbD)geXQ4grs+pFIVOxL2HyEEHwpVG$7s(q zzQiOXnhL&2DrW{)G07>WZK_EO3}u+?`lk4Dli9!=ZEP|!P4k8(@oM8XGjT1Tx-H-0MFj~UDp$Z>Rn z@|&x=(^UePu`^XFu1H*1-7RHW!zjAJ{8iPubzminAid6Zfi05T z=AdyP^pf$|Ue%%nl_?5{>QdAO*Bq7JM6V5};C2eeP%xfqpsJiq@D(2TZ&P$vlG;yl z%--OF-5sjb*tiV)Rxg32oQ;Y;RGtOM{Uj#fsjDzmvWW>$Btr0y@9{!y9u)BUG!{UK z+w!X&>~4#%ouv8?jBEV30ZMll$|cv#&&$H5C+h>^&vJQVNY8t(8W zyKDK9x46nWPJWv&eV41OXH&{`H}I&9>~Ch?!i(SIYd>HY6Z`Ep5%NKt8#}qlhn$4v z#V)>k4_oldem(;L*Ir(7z=9o~IcT}`+28TbAMD`(FTa1-F^&QxbVE52Bq-qJ zE$pU_>X@Ob14h(brRS>8`lt~@RQQluFjW;Jh+&2*457aPUXC+kUSo|t-ODR z|3U@voLHA0<+51 z7QRA)#`5$va#JfQ-$@qtm)wDpcD-bbk-C$uXmHjPDR{*4wfHfKX4&M0=n09REAq6^ zJfUZ#!7_=Kia<8DTJqLduQ9I^eqX9@mX2Eld3?`*Bcs2U?C&J~SIIjqNstYkmAF3z z>A;iDi`O79HD)PT_-@xFNAxAfb;>cl@u(e&MkjUQPwtf8U7RPsk%`KgsufMOIwmgD zRBdMRT9~=9P~enUC~%E7rdli%I1l#WP9_hxQY;QQ^I{foFS8?-0-P|w-2QhEFsiH? z*PE327J;7kd@S4db(+!H>8LZA5zo{Zy$MGxIcjGmcJQouFcpF#K7!>=s~nbl*o(L*pYJc= zXd>?}WS+{4CUGjJsgLk_48)4qooQd^v>9A5opmv1pyzrFeKDVXnv0*XC_E1nR_JGW*v%&0P7agvIFY^|)QngzFBe37}Hje$swaa1tqZrfZP z#+N_1t>3Zj&mvQC--qjzYBjzFNOU&D^RIVxh71 zwyOm@l#gtzeJa?i_#;JN_kCtXp1Ab+dllep`A*R{_H6NfR{j}9h|t=gz)r^ej9sV) zB`7CRbqTP14+MEenB5VgHtP#rDc)6f?Vb;UUuP>?&Ox@(aES&>ber9|2X_hIYy0Km zaW?aaCW${&yyDo&^NfV^g-e7N+QdwN%K0tv-jMJe32^wlEB@OOZAAXH%-SVM2c_a? zGH$=MGei(Kek#Ec(Z?j=ODm+ojvk68{|EW@dkId7_lpeuP0pT{@K*`Wiky=#{*cH2 zlH4-+h;*i-Q?xE~ZNS+Zo}M4Chb8FJL@gE3lIt+G+-CsXYQ-i+=~k2yHPO0}=EipF zixpMaOmnsl+G**a{q`DALF#T>l7DKaskcRr`vp48*F0GVQ*Dz4`X9z1{v;iulq$9W zz;LdPu;H2qQk)Ln)WKVt*I8Lz_@0h7#%iq{+TW?8ecF6zz0Cf0owQ%~`$Y30UG9jL zOGPL2uV3mh@m3(s6|FkjuW6;xe4QKgaDz2=$4x)D2;jhaT|q? z<=yR5I~b3S=wT;x$8v`8Z8kN#GYzb=QCAc7FwremUp;rEDS5!;jWfZMv6S{K1GP^) zczRnkv=;f~aJEwjYSv+==TV37)t+#&aDbn*_0{OpPS@X^g!2w2rfxY(guAl}l~kj& zfa0#8qy}WJBF>>1ovbf-Q!cF>Kph9tQ#a9Mq!5lEcNlr2NZmo1qixuPhgN7G`3K0# zusE_{LcVlTGV!tr*ZBiq2dF_yTE zjtqm}z3hF?`Ufuf-R8k1oaIOkg#@i7YAF!}60IZ(CCZj4OQIa1juLf}sGUTet&J|a&Jt0u!;N}L)K{WD!u@Q5 zTQI~<0>i-)43lVt@JM^&F&5vqNHE%pNMYRO`z3lnFo+8=LmO}R;8DIP4DlujJu1;7 z5=^yoISl`!8CH>A^1g*dt1pEyJo!#K{2>usc#e)&8ncv4(O4CM1udQip5+yzDM71b zU6P`Mx;m$c_O8<4CLu#XhHL*7?PIcpVEXOI#?sg9(#<~CMMt!EO!G;d|GmxS5zGqC zxVesr64AukGr>(a374DPSYE)C=0;;z0`nR={Ty>!yVyz*J$^Ui_cRlG+jD>h#&#|- z<2gEg7{UB!49zo1^G(ho(;H)})y6M1KW;QXqW7ObkSL!-cQb?5&!cxysA#4nj<3RD zbuPYzGcV4~aI<4>hQ|prw;h~|xf!0N9A)nRFVd(B{*Iz9QUz00@)V^XwJoqaL&Zay zKFeZl(gAy!tr8wnUMvUAn`7DOUMvSKn5&YXR)zDGEKuIFD*hRzN>t%$8~K-WQ0-2Z zdwgk>B#p~Sqw+Ei-> zamySg3v?$YjzdWaA1>j95=~r=q#|)L5}d6J!$z_~T3Le_ONUw{0ZE!=T*#%w4amEK zYG3rhDddX@g}8hxs%E^DFlTj_Ca^q*t3w_mS6XjN?k zVZokh(>(_N17y*| zHZNH)fcG~2`ddg{61MqBHe6tax91^kxvUcxb>%XM%=>WJ04_r_vfF`L42wTrMo**K zM}?279@Tqjks#3smWOQ?TjF+Zw~zUEzOs3&tVQ`cT@k8HNHkF>qB2AUh^h}29SBsY zWR~DrHPXm#9v9$3PqwCYyq*{)cb-5w?M(n$(RS^fjIrAOmCOb#8^YqN$^&(!);<~k zsmz(9$8FcYC7Q%%%*?e$y>D*aW?uPJ+nWAKXua3oKql6&#Lp;&l?voV?#{l$IhCrp)1Fp=Qv^b4TtWWO#$k%+)mQe`l0%RD_S0~wR$lAYI zMg-a6zp{*SEF%H~Pwy*+rV*3>5YJ&t=>&;UmR#CSCgPdQlk9wZo9y^Wa2-r(r)Txi zvRM18wY;q5RUJS^^|qFGG?!}Hpk=cT-qW%%hWp!L=l_Rs!tAnae}x3M{d)1wS}wqX z;d&L^z;^}ZWmRjniyF9+<4Uf}{ahK~${@>*lN()cuqz{C{%-iV$65rOl(^msmzTP- z-1Szv-V3h0Zeecxj_a*;rPP(TU3t&-wz&QgSB|@K(v>e=Nw@W9&b6jfj4{{)S;Kh1 zV$_|*xODz`d?6Wap7G`ze%A0}BZ~}UTeK7sDHFb8MK1y3%-%A*&Uo->T-+jUvXUfh zW`iAuciNbEkgGu+LqJA`aweu4DFY_u4idag$H+TD z-q#eSu-}+dn{akVUUdUUMHW&4>Gg_NdCnW$Yz<%Y7PkW{_#LM8mZ-C519yF&w{GJ1 z-s7fQ_{27zy@MBSXWGd}c5#P2yktMSd%1WYPyT{SkJ;Qq`H|^o&ijqm|IUA1U}2SH zRI>!NtD?%TqS9)p3-#30D^&qf3$Ia~o2yG(sf?B?qo0kh)urm4%_?uJ8u*dQfG_o1 zJA&3A^8%{lJSehT_OvR$oYbd zdD*H}pV=+ZZ!+aq$%I~|jy6s8uHO3jetL0V{ZM~hmZy6T(TO+fPIv03AJ82m-ML8f z9G$R0KfO|S+N$GlJ{;DE59*G`b#O!{9MVHi>iB)`6~LYSVNF9pyd{%&#le_v+SWAB zWSXuh-9wXrO#X=U&wR3n;n{lU7O=0 zel(pp)w;+nwdrc&R(6uZcT>UxlmP_L=vboAL@T}mZrVre_(EE~jEdkISZSHq{4()s z;#Y{*Q1B+zeVhEv#P1Prx8j^=3%NVV-%Y%aQudI$m*@bw2g&`6+|S9~PZbW4dzA7{ zP|BAy`a8-zMG3!<`y08Z$vs1p&r`w$$^?g)aZ&S9Onz{*;vh=qqH6qJZT9MLd^*Rc z@wKU(aVf{wvO@Cyf%~bnsD!?9N(O0G~FIMZ>FE%78E#@8$Q8jb$zvYEJd}Ab^DyR-)|Q@i8wZG2 zxQ}HF^Zm>Z^2D($h+4?EJ`{j?Wj1^BW0T>9T(Ug2czu=m6&uS)Yi$xb9Oyn)Mej4D zx!B?6#`dtmha6zo`;j$7B;p?Yl+zAz&S#wSId?tGIbZPHV|?Kx=X}LEU-SHL_{VQK z=X<{WJ5Kz8uRFy#zj4v;oOp&4&+@Qy+|^Nue{j(S^n5CZRgS0}SEU)1c!|0zQB_S+ ziOH&JC6!ZI)1}gP(m2;U|bd{RY zP}Og$8a7c=uT?p%Raz^R(^9n$V?htyR2;G%Zc@RGDnjDJAQcQzJWK_7Dj2DFgbFZ; zx$~JC5f*pWz{9Qh9sv-d`&rASIROZ9xWS&OD!du^vsnlX*W0pOWww>mV-qRf^AvK%>I?PDig*dWh&N;&hUyA2<3G?Dp}t&Y$7y z<;fZXISw>Tqabo{UA_7;t4i{()Z9QZG2FTJdO~dujlzH0(#zss3*$<}KR!zl(?*l1@}H36jHsV1mtyfhPB zYWxhdyRPvXn6xWQkZH~|v}3Nvn;QQb<25r;OmQvOnuRUR&#lccOo~EN(#HIfW6~kO zhUBT8fduG$2XlWXYuLvesa>}iXfD?r>27ZBX|j5ooIYl5KQnBg@djAU31VAcyV0D! z!T5vBWjC2aBTdeK*gOUgn%vmt@uP>$`c6NSY&8+JGTx=*ZQMG3mBXb;n((#{h!nqFiHL}FBtKX zV;lRjBQHAgisP+v_*LL@or2e#V67u>Ib7;^8y#=GIn){hj4dlj5sd1&qRZ^p&oM|GrUTbGxwYtcz zfl}5_phcWGMC#ol6Gut!yXEM;vU;r47%v+l8-+HmK!WL#`J(U#HeWcZr6=^%6MO0W z9+vpGp|76UM{gLQz5coZoWi&2TH|!;Y&|QPF8D{(z>RKksld&j?aCfI%JzP8e>!82g52|N?m1U3#3H22 zpk*}+&^t6W#m&s`EzF+gCh=M`8f{%`6Na|G9@yTz+R9|*n8R(&>m5yewkg-arYhgx z&SZ5lL09ulXQQq&c|FYU-Arz-8Qk6E_cZVJF{!=Hihiae$Wa5#s$N#v@)pEwfC}DV zCJZts^31(AnS`Nc#Sjw?HhE+0NW3Wa8V1Wu@(MF>hjH<8Wtna(RF>luEpRHGbhdnH z8^h{A3MA5_m>~l!(2$;ONhj~32Op)>859S++k7hikb`7M!RDBcBXP?w>ckvP5> z2aIhy;(!H4cyKBzTJeljVS~+G3a3LAAIk#vYBJa2s5WCwTlXTPK8L5FD(h@#xo02Y zXbMM|=pv>49qSvF57)I(N1_J>L|^|oi53aJDCsXt@g@o2 zxB5WR_ezb}5Vh$~lJm2q{~{ish3BQypW?=AO4UVaI%udrg5<1$p4Lc5nR-W4D?FRr zO8YJKkk)!fwhdkncIbv%_2O-M|8`xr(^?3#_vlM@>C+#@WT-L21%S_0j%z-u>6k|F z$F$R+U%Fv;H@Ly2S6p(;qHDj5`59;UIULK>Gm(1Kp{E;CpO)n2SmYq*(YCv&hj4U> z^+EXWap_i0Jix5rF4)1=Kc#fwbnICP~WjT~z1P&0>G zIccFoZ5(b7{;)&YPW9^?LMTZOhk82nu#*`%L4lKsc#%TK&v)`BI(d^FE^_1%N2WNu z*ygg)ekbi?hYvWZpF4#34@e5ZUHshw)99=dfH3)&6J2luAya71p{_0m**!du<>~b zTBo`kVm;G{bwh5I#ibqCM?=(!qw5%+J4lqxO`JH0qahp(=ID0z?qhE}XB0qz%=C<1 zd8gudU(2+KgZFsAPJZJH&OXirr|p-lPIBH?tiI*=?>PK{=_l(%d-W9audIJ#KVEf8 zQ0L33^ztgXf{p)x&UtON;N)}3yWz|G#TYy#kHR3fFYAw>n*5r>Mm#&q#Z6!WS%6AkOOOtL=3X|7B zIg%#=t?W(W50+?{$Vj1^ZSrQjF{191Fc!E8cxg02vauGKC<5&??19rHVY+mmE#XY5 z^q5tuRC~%A2I)mRf53GE7n|&|Cf2+YHY?NnOFET_0IjWc5L=5pbcxMb7+p@Q1l_HY z-gKpI+EjnnMqk!W=M2y{4AeXF^m~JK(GXp8nB9_KUa@JME*q~OeOOnUpkIje>cu)* zu8W@6$5-l2EA)w1H00drpILG8UnjMNQ`K}CP5y$PdWB|9B`uhJQL|ksh>5r*GHAAM5P>I_+AUN$qtvmxHxF%Rt|* z5e9UC8+|KrOAM_vqg?&nR5hhJI0F*xbN`s=c=--QXpluo6Y;MWAKT;k++$m_bvU&e~+T=6d=6JW3N1CSKzofZkWi0xRhy@HSR zTe~y^qxYGPJ8o+a4@R@IZh>d!#+mObnXroS&L9$-55vM^-G zvpLUnL~}aCL{P)#oAQ$kLGM~<^i-38_}a%zP+|(6xA5nTcPuhJJ*MBdbfS}$?_}+T zK7l>0@?lXQu1arH`VLhxR%Kyx`k875mt0o~`r0VQtWz=@=jv*0>3L$3Jfjj!EqsM3 zw*J|LeaZ;Kx0$E#Pv@dCbUI%{{=EVo5kxY`!OX2=eCRZ)qgCWtV^u;e*MG=?T{QTX zV4%Z$VU1CpRS=`A`3-C!ooXVdn@Um(N%&2?S+2LwE%?PFM;ftFl zXoE*u$R2dRC}|={7w#20Cmy_Di!|PAUt1%m2eQp7odhTo_Ie(q!cGXX=vX!BGv&6B z^ivY8($V)QDP6CTD~(;%#e6ctBtC4?ON<{2NL#K;w3~&3Fu?cLBkEiJ1E>jfdA4FI&+NH z9;HjZByd6B1DEU+C7vew&6@RwpQY3?s`(f7!pYN<14uX?wnpQu`8@YxOl=9bz^Sr` zX(1Ocjhr)A|H5(!&Mx-%z3YHo7e1xBJXm9lV=NOW4^kH zBU~Rl*#D4Ace5XhQ->ST$DmbIYBjaKg`(yv>TgAH0TRYPR<-u45JFZQ1+cJTNtXd% zj7W|x802oNpoog>Ya6~V!4`>*Nr<1=dC6|9H#N}VGEGaYUNi~WeArtZ)^ldK`k=jt z;cOY*}Tp}$^ZfHU*k~)|YTqrl1j6v2qM1u_tG0E2(K`t{wnO`>fF|1JDHiK2- z{`w9SGDUCk%}EkA)p^@cSIF1pc9K zm%oG$By#P_T#Q|9buOsF?Nj(fC624cwS3-Fl?!U|V>P&1P5!DjmtD$DGdQju=cV!+ zmvi}m$2a2B4f!zKoz0lxK5m0~0{b29Bp*|VDZLr#hcDd7c{lOx1G(!UPRQegA)GLj z69#j_FisfBDI+-L7OrtCSHF$(Z{|jK^OXCz>KF^A17o)QSWX$w3HcmOwGA7OVk ztEai}DR$>_Dt4U0Rt zF*5k%I8Qps%VSx4&>eZowyS03)F(C6YPhE}6lJO@^;OmwH5ww!=_;C|vKFe-OVpa@ zRsJ${*K$?%qB{JNDtSePud73AROuV4*=wrCo9fits@A(|+IF=TFxWrUhB$GPWOQYz zks{3knRuxjxkB9fQXVlnEreT3yK5ygN6NZODdI4oguGpP=1X#s9GxabGi1WQ6=Qq< z6l2eqgc37WSBe5M&s@*V{0-jIENeMFfTMhf=&<+U}OZ z1Hz!+e=fTYNpx6pj|d-^+>;XhAZ0&W5-eyN2)sy$Ws@EC^w9*JP)$#+p|fi0_PE-v z(6g?zR;*dq=zE%LYNc-&pw&$}Wsvso)?FXc357O~Z()gcmuYu}&UryMU#&AY=+Qeg z@6=Vd>Gj+7O4M>7?d;L@cj-S4=^Kye{9`)rgr0a(H#n!g#xAvXX^e|}%-}aS`?MQ( z)`j}$vI=HK6+=}Gr5mYd!c22na}%_%0S!P^gFNt9wp|3{Ertl85C=Huf*lQYFk?EI zdmwS?VlOxl4|G2h^)dcHqk5Tp`$;515xb%qbn9BRE;JV~Q7>6n+{u-+fqE#(a(8AZn?l9^%g&YfSQP5a0@Kzxw+Gvd!_M{! z3pT71-FZhI(?||);XE{z6S(n{To4nne6YbD&e@pf?6t2+Q>>W3<+RPc&$49rb_-$b&63JREl`W1jo83N8Fy0*h^}{ z96eO>Zj+2VL`KQV(e`$bd#tp$`~%YIA<-C4LS6ib_|s(1bopepT>rXtg?q8gMEP0d zg0(7ahfl$=#_C<7BS`7YKimo(;jm8ANK{NjY1dfew5OJO7)Z#2wLe^Myj@4*bhoKG zoUP??`~175Rxk16PJJUpxgYB5_vk76H0{#$Ve|P|*Zy3WJFLsT(D}!8aMXq;u0N?^ z%nwfM2#@_)m&@C=MPZ78)WNT7B-7+HGmJ29%ql~Zlw%Z(P95ylJG-k1b4_+{OZOtw zY?wOUU=jz}f~^!1yJyW+P;D(TxiNpJ)owv<_p-Tfoq2SVS+djIl;{jha{44Yy{kBT zt2#xM9S=Ox6bD>%45B-J;~f3gsra3f^QTh=a$T&o$wNnThzEVfr#|ObvefZVo$H{+ zEmHZPsVGyju9U>9B(6w(Q|{ECT)Nhre~jb_^5CO8pzDsK1e8_VO~j5DTQ_i=1E!z%zb8$_b_!lY$Gh6` znj)^n@tQkcOUJv`@me`SYsYKjcsUMyRmuMjHr3Pdx;tKP$Lr@v3=in_cXIzz*wjTB z;J<@Sjdy~{|1a^Tj@vLP{;$F@D^pn=3Q>DpjL6I)8c1=&C~dG`(VgRZSR7@$ew+#n zU4Jed!0je8&Evc0^N447)w4XJgm*09>Wes7$aSByM4gnyHp+A93LE8F@9!wjkuUJt zzoR^_Tm6qH&rzs4*6^&?xCn*ET7KXyiyrl3Ztg{;9BtsDjVzlvg6jlx^4QG8Kq9!4 zX&29mX-MEBOWnu%bABD&_Ypg$8-O$RH{SX?C!FJhe=rdDN!p@RU?R&(R$hjBr;*BU zsOZ0i8ue1iJyqCSg*VvMe>hx?{@0^*k;(yi?>`){?boUj9I$Vx%y(7%J1V|Zxm#5H zcIEC=-VPP)v0b^p--_jeL(2O?`G=KvLdi*${k7`(rSiW~KYpvO`$~l%H2$dO{;s^! zDtm)UxLlIz%Z$vw_0?BM-3Br@rm`N?SXN$b2Zr2S!e(;nT6wvJ4Ke(yr7UP8%Uj8& zP)f7y)~Teel(m=C9I4$=3OmWS?PO~g=@gS*zuf^(n5@c`ncbwIhrpm3_LMrkWO83Q z)>~8`%Up#R`;&pvsJ}!5B;$JVZB_pjo`|_LR*;}OK zR_T9-Xxt;W%hJ)(?oQ#mrRo@&c$aj&$Id4Q-7kgr%F7Q(*@O0SsW(>I0vb6^)C7Cc zOpRo5zN{~hauX%7P}WZtnk4T`5qVS!ACZhADVZwUrb*#+`EiEaiQ&UzBC|vux2VZ* zt^`kuH&48!5-hWZJ6R!Woov`_IXsp*8Jlo|qT}zk9B=3qb3T&dV$aB_+Rz{#lC8NG?oyze@f&i9av;?-bhdj($MtE3q{4tSAwVJQHtmA`ev3 zm)EqkVO(}_-+K*ol%?ak>7b|f2J2vi4nVLh(h;Nrb9D5C4Hqunp)cL8PwmtLx9PI2 z`jZdzU%PeV5A~ou`h#7%Y@c><@$J`uX-xWDC*tlqtm&XmI;77Z(HD;EhmY#j$MoqF zy2F=tMRNJ~|6c%Zn_u+*J^(i=_kR(9oAMt6aFKr7&CQ7g;L^VY;6lFm|7HL#|BnXX z{w=70At;IoDsDXQ3Ir7h#=WSiK%S0grw}Mnru|!GMOgLUDl5`WfWUStGua)1TBZM{(|w;KKcC?0dqETUpM`~)3aV#}nSAgTeO27cN_+&yS% z+vpT9XhobpTs6wp`Rz^VA*W+ij$(B_922-)=voV;(t{=bVd;bZ@g?zAS+=eBy7+4> z;TFSB|9t_PlD5FFXLB6jpYjkaxC_!{oxD$n2ld7yy6BirJBg8|#Xk74L5klR<1FK& z3j=tzqYcCiI+^QptuHL-W4wL_0%;6bJg9STFyP7fSZ)rrkX8SB;}@EOHP$Tew{(6? zqY$dvCB&Nv`)eQBWN&lFO-#G3@O9?z47Ap~gDT~i>Tq0D_(5g-qAp93t4jqMr^3BD zIAFg*5ONyB(gOGlq@=rC+U?Rlmws{ALquA~yxPoG%TEqBKaDgm-(^A=zTlk2ZgjXx zx>u>n(jSu416m!?V9 z!&+GIvzzOhq^nKwR(*DlURB8yTxL?Bi>plQ#wxX36}+!(@<-6e(6&!$9)H<*I5<^Qs*&}*{AZrts zqkwbYRoOpDga;-DU&3#khMI7Q@$R-C9A+6W&Z*@&FI?gzqLNQ=`jm5iiUGP4D>#MY z9rv)~9&y5B&cdTk`bp=#<4)0+j{e#SzID8xoS-@dRf$qaV!N0yox(Jd47u!ruIjql=%_&{D;6~mO*+>p= z9{aEH(O0?UCp_&_ZgY?~9pEKrxb%0vh`ILKE66G7e(NNfUZiB9Dh0fHoz+7IyH)%_ z)$@!xQeLQ>p#C}EK)$Lk6R(i;t0n3pK{x4BEDKgjuXiQdEaF`Y#&3hrAlEJ z$;Y<_v+XIl6uT1G&0f>U-vq-d@qo+tN=gi44SmL?bFO!dwa>$H9#oE@uHIlOFCIW` z`0FPn_*KI1-3TAQ!QlM`gBnj)61H7uIKG?8eplgx3%W=IWId+q+jJOv&9lCDGg_O% z9P?9X@`l)?63efy&C#DY$~54Cp15FIM&$U5ov_pi+fjHU`Pkphp-xXw@FexbAU&C{ ztIS-91DGF?s)meFL|@%+IiLP?8-|PTJvC-V18N3y>>x>n^;FbQ#dTHGT}fX>{S?hn z*T6fr`hT%@=HXRT+qSPc*IczKAz&p0*z}bUVg$sXh@c3S5FoS$1W`Z@t)QUTqu5j$ zAc{c54g?{H2uLF~*r6B@8w3QgJ+^>~M{Gc`N6Z_mqF&Fr=iPVzc;9#K`Qv`~D(qc* z)m&qa@f+&kiz>pi@ujMdW)0V-q*F5_yxtn=sZ;_)o1c{ln?w#u^qDPsIQX*!zX)la z2Wm8e##uVKm0pPuD7bKd+Ee?pbu?YeJRL34vQWztnx5A6x7ZyJx)1nmo%Er8 zu7UB}TP#oVAe+UL&EVwI4YLSalFl<&-qU{U;>*+y{hNiakt2;kkaMJg6QQlDm1C`X zfA{G@;HtIi!KVke-d|R||D8_{=-vP9(}PJ5R=t1q=~evy_UT1``ShN1K&Mf7`a{HP91_A3Be=Ym*A|`nB4@}u;yt8gqH5ID+EvjagvZXw?sj@jL z^>$S|-+f8jT}pfGH_5 zL;uX_*!I#|Y7NAz(S{u-c^k?ah%<@0PNgUQL7Y1^88>cT|?{N+`aEROYChOY= zISoF9@F_JI`8#dvNcet@iZR?Tg8N-M>}KEv1jzF_6fP&f9_OM}cAy1O%3*nRn~l5L z6dZgJNCe>DK9a)=EL5uSLiUQ;8_nJr_E4%gmUAv*e)$Cem7`N*xdtSk9vt;zuaLbyoCK;*e~ZqJ&bC!JGKhmAR<{Yy zWg5oO2nOO9JfGUZHKiKg7yE2!8~m?Ag#Jv0=(Rkc60ro40!{@ai0_mfQQ>dugq}le;u$jH&0zLzJp$4()4P9gm>d*4p*v=I13{x2z z`;)}0v&a<252_^tY%t+2WA(}3T&U&IVUCa}Un!XbwYO7yKe>g^ashJ6h$lPF;?o@e zQl}uYhG7p&z`Zsw%Lg1j?96CNDG4fXNuZ8bWYVZCN*YJrSPIH$>?{iAP}SX}7E&eF ze=EoXLhy0wynzZfQ`&B#x2WiSim>wAM=76Bcz_Civ=D$C;^g0f7~y>3`i6mj*pkF) z$$X7xiNT-N=eyG^#U;^%_qXJ4PWS_3UU?Gthp-l_YRwQJEnw-zZf_0?+3mw~dvcS0 z+#lZ>N{|sOEwT%RlLvFRvpGa^X9!oEV>`-g&gF0zmz-zKY)Ocnj^%J1r%bf;S2yCs ztz0>a&#mBwv$+k9vN_xU>?RCdi#e*YGi?@(rq6M-kw1Ty1N^$TgE45cSMo0Nd(0p4 zFJE%XH~h$94i9nqkDU04lYZvJQIxbR#cEoL`lXHv>Z>IU)u3i7KTwHQYD|{8sIA(T zs~P}q*+~Um)SNTb@UH6FUMjyx{Q!T$XeCqCE`apQR1HwNw^`iEsOMDS^D5;jr+1*~;lf*q)8g-DGQ>5lpsp%+3 zJ4wsaq-z)Xq_fmJU7DXEHQnT=uF~sF$?h&Sp}6_t=2@p)O@S=wEiV^JO&|HVr+nU5 zO8U#5ks9fpTAw{60XAA1r&$mL=!Nz#(FW%Dd-DcN7c_lNRU7ZzCk@e7St2 z%tYDxg|Y;F>!anIarUkUy-SUi@#7_Nk+_#glZmomg4}em=*hC{Qkg$R?zv1-CRsE= zy(^^NRWkH)`Ry9%e66@w%cWE0xa&ks6Lr1NjgobPB;6#tBAI!!94?VzrBYKSOUh-y zbZIt2YHpF53i*Ae9GfNMZx#18d1toN%#l`)+ntO5gguecQ9yZ6*28oAyO7wZyVTWn zj0NCNuBVfI{cehm(sYyh`degS8tBs!meAX}sVy2#?ie3ICs{hBK247Wq_?XMx@$Mj zlIW0msTHZ<&ds|-`;e-TH!RmK)T%{x9OdV9@>b0|^rUV2!`*u7>(;(oyh}fe9nD)h zLdn#pI^%#I`k6M^mw)Zn@)D;Uc5jY(iB)mH1iZxW<9^}6+N6pBI6A0jZu|?J*w6$C zv$XLa;Ka`ZVDnA0%s<$PIoYN`JIhYItb=7IuJ2^Ni`j{Mx{11(!(C0=GfkLpf&w!o zG+8}OSub;Wca!L0a{8Ez-ln{-@o^9hFu`C;w@ZQf?a!Sikf&G!O&D%+N1D6~tbrjK zYZ&+I@%D;cIl-h|Vxo&ouS*SIX1vS)@D}1;7F=oMYE$<*6I^fnsb=sr6WwUMn@qtJ z!zHGq%3y5Yo@IEp**wRn+s)3o#=XPzm}jYX1@q0adyQUT z%Vl_xNxt8l{(vo)!G$6xuAgvmYpyo_7USdAj3X2mXAIrY)fIdntb*q#CVd6ZB%2)umOvlP5Y@`44(gXv9JTkND@HwhN9SYGTQ##;7WD#pz*&P%Fz zIeQkCvma6MUdrA_Cm=P6GVufS+n2QAYfAf;+8rYIJ6iVVuD0!u)b3ZCqkJ&l*xng$ zY-bQ}{GF;bhaMjf_;6hwhd_D~9ZLGaUt-%WT5!UvcV}TprW*yhEJv1Lyz9hkoMnpE=_f&TxRF=B#7TAygWx3{e?I zmAfjbj+&aHMy09pR8^R+E^eSQ8mf%ODnFqrTdE{5HZxR4rYdZ$GO|_v@ha&=1+->H zTUFUcbvZ#*o}}_|r|YCH?5Oh3P#N7+<(Vp@tIFuBo?mGzCj=?T9V&UJ+Vi^7uc;5; zP~YrPZ@sNb-%&SXRsEAH{Y6#%s;Z8vs$;6EMrlV%2^(*zN)}y5mZeMNO9=Z=T?y+6 zH;@n&?aeGoE5Z#iTR2C;HsZHMv4u?SC*Dw5alW*MjB}~vUoDv>q5y}fl=3?y<95lo zQ!?(BG%(NamHdU0zgS9^$)pvM@u1Ku$yhC=>m=u4$$3O_o{*vqlKGV6JSj!bNbW|t z{Y5E#Ns3;UA`FUfgM2B~hh)LG^7~Jcam4Nm%ArpDj#!Bv<>)R-CmUVh>8!fiB@uh4s)F3O-*tOGx2|< z;O2HR$PeBVALcioZgyi|e})--rnxrXoZsE_=w%9EGwWea>S>M^8i*l@K4wZ^bEuyQ zah`)2_1G%cMdlflyp-t0gSwRM^LAWhpZ`<#8LP_Mk0qvinUBKkB1WHCS&OrH`MayWFXFVm-87 zx8ALjlUyj_n-?K3iI9T4P{$TZZblD99LNGX*fO}_;pu5S*mVXN?*b!mr#_c`>5GwM@^{={wV{=ylI4$vcx{N%Vt9e`#(t3!_;M*~tVNv0q{n;TPcGeY5P zhnAEX5VfG1Od5^dH^%G?3R{zxO(@5_zY}@AXy7P%c>?XZj0Rk5!7tUNG~))UTVg+r zidod{HflAO(kn@=pkO714^f0L{-fk=pjV!x@Covtp`=Zexs}Rar|1paKo_3E|? zm3oW1<#yZmH|8#tRi!GHs^n$rq2+4r3Y7;#-5T}LI<li3p_8yc$Z50 zZ8BkwRLvGdziV!nEq4juEqb-cBf@K>C+YzHDK~vC%??V<7g7TY+?Ueuko@$GeD%E~ z$8wEF+N%*1yCAX+a%tlvd)D0<$F!qnx~#eWu06QuI?-LvyIALA+QhYetp*2%Ua~}{ zQ@81wJ^JQX^?gv=KGe72Ao{09U-110bna*R@>ASsnaj{c|LF!_xhH(%{(uAOh}(lBW2F)ZN73abW3tuNeKbH#G5TJEhNe>% znBx0P*+MgAk!iimyt3HP{llUC3%d+}I@fWu)?V!)Prh;*sxwPPb5z5*s^4riZl0P}spt+B-Kjd?ts2f( zb?#MlVzsK_ed@(3HEWlO8jEBLonV=7a-uLy;ILxCgwRu};T-5MX#?e+ev$!weh5r; za{OFd){yaG=7bL#Cqi z*L3k_iOdv=186c^WRCFv1>i>e|HMvyFY0og^|1bIn?ClQt<`vOj*A4bca8}+8t+5R zc(38U19n*@1@q~XHMA0Bl^!hp*&E8i2rh%-ahV9|{7>9x& zA%wN9R=xDTwq>s{McV)`Bow$kbCh?Q%IvH>XeLWl{sYQ?Q2EQPgUEkKg{xJxPWiBC zKBc0kmH&(q487QVofLmr10=#nI#)_@-hK-(qn1#6J+xP-y}ml=hjtqs+^Zv;me9&R z(0~ofA(y_jg01}M%C9aRb;Dn*>wsMAH=uMAr5T7>QNofO-~{FthB6Fi8g6c)97C-Q zWt*s-;S&vau)#WHy&>P(#t`@<2ifOb7U8$1@*L+}>~wzQlB)#~5_EkA@%Z8A8*~;# z*j!^lh6&^>8-YP&JIFJLZ-6~do$YoTpL6H7uGfviHFO)&WPiz+&@gM&%Z2v45CF+h z)>dWvH+iXbm&t0DRV*vHU@gnTaV!fgnpd&ZRzr6wztD2IX^F@(Q+-TSLsvG@?GURW znL;3~RY#$V!kzw$LijOI8kD&pR|gFpZs2gH}IS^cfk|9dCvh?DYz<2NP*+`yeq&7`PROrJi1f*ji0hNKZ5b&zMQ2mRT>JS1Yboh*lG>aC zMx&>R;UImD<|6@z83{X-&qzME>Gd3s*F&gG;ld5{vH^|@u3^^yDRmV~ef|FQ6 zF3xA}!Kd`&U;1-#UoJe4=|(23ZcErJ<6yd-OS|369M3rsqOy4DJo5*sFWk&4-{SBc zTXRf%IXuR%k`)8G`L#J}6}qY`Rbr{SWtp14LIrVDt$eo)q(q-6|7R5( z2f5z9L84QULXxzzECm$av+!&QhlzKM6jjIzb1VkIuaxi};kzWfTNI*E3`bQQy$j52kCX!KgA7ib!CTcW~hR2y9lTCPy zDZb9A1twTx-d<>s;ktCGX|^iv|6OYcB{BeHJ!!gZG=tH7v)%ZuoCuw{U|D?YMBh2y z_fC{f?OIUo@#NznX+wTnq7#YQQItzz2m6qOr_u?XZIwWEACgOmrjlGwf+Y2g_L<4R z{i56g6%!Fr3F$JD_=>@E$a?^^DN2LTy~eghOl<%q{u7fP06WG=Kw~q9a&MWUk;+kf82iZ@#^x0JesWt;Dfbd7Eh;`+Io; zTn$QzQJkt!nSlsW!5K=rDIYb~!xiYhWp@SlX$=xrPzitzm6z8HVL5|i8{)8r;FE31`W0b#c}70KUzGzm}X1U z_<^C7*8YcUJ06mxJwhnu*)If--zOGM7}j8Uq|p`{qJSwy7dF!+&Gmxzx?4N#J*XQz zY!^lqpXriPxA0S!UWRrQS;nNIbYtzTb7!!>%IZI3d&YUW}&m*SpdXxI7d3=NU=2deSLd4rm{!S~_l>m8nos>DwqFVa#XBK+wf9V9Zz|Te$ zHKw2$g)J!nx-*j)SFPH6Ru1_ch}x5P15p`u{_`83yo`7q(c_fZK$ZA54Ues3fy1Q% zyEyvtd0t;Wt{;!=&w0Z+69ryKE|l=7nQZX2F5tshgRbQ8m9mx?zeg_H`DnWX<&h zujs68de1D&$_`=yq2}AzrSFlS>S_B0>Ml0^22=i;8M58T zE)(FyNOt^sPGK|KMDLAqXq!{H*9rDJ!6%mg4=7ylo5OX88`;k=rzKH_{TT5R3)_?5 z&GJrjE+Kys1&Z+k=z) z5eL6KN!tE|HzdP$-^ z()V>sX!rI?cu1h?dsrozc)^dhvjnGTChwA?gVWz>4J zexuPZnGj)iD8}2(ZIF)JqA?shU-zMO>C#kAzt7yi)C^i-Rz7B$tThduGEH7GgI+Z& zd(#8yGO?+ge4pvL)ZD+q40_CTTx;4qWjelO?tj$`y3ZspHF||9easZEHAPRE;+Kqm z)s!}If`=S_*nU$U=shhcr8iMA@i?MbB8c$%!;!U|!WGv2p3;!hTC?EM#jZ16bmsKr zHRsvm$REYwRh*2s70fehIo!y>^PE!OT1W6vBUQ?agjWdT_a1XdfN>^VEis?qE(uO7 z*oMnZ-R(@rN8dofm$Xr!J%^w+robnR_6cfhsUOYNcYlx>WK{F07$#6}yWqEGGW6O!ug zI$YS26X2FZCuwUZhrgdEgci1qTwcu>3{v0Y@&B-85SbrahAKo4I?BbrF+RtPV|ZC9 zyd(loRkR9; zsiVE)^m)zouPrnW)-*&%SLwNW{ZRKxaic#I6aNY1@jlBdYL>!kBQ4M!GC zlISLo4|PQy4);+s(?Qs z5_b6*1u+Env-5VvNGos^&S3W#Ln82zCR?FG4EB(Z&bDd~nt2(67IdD!>xw;08l**> zFn_6wt4!5Ov(rK zgo2oP4plmQmlNG>$z$HVjK?gE5h8mBT9?e}#pT z!O0daayUklMeCgO^$xFf{6`%hr`BT*KjL_3c;Ddg6AnM=Fc@V|JJB<7GI5i`&pN!> zp=u}E;&@w~HdMW0Tec=$qRs34Nbqc<7s=v2FYmh{dCTd1O2JvYmXHd|C zf?-rSlDyHxqp0Lk3T~ig5pjh*6{)uR8F!_JNUtS-9aYs9K%@QnQA&M`iZ{g7&**)A zg2E>$=UH3*ToqS8msS&PqLQto|F!)&7uC-wfPRIJNBi?mLiMx1i}H3;YHjuNha~$6 zhSYM`<|4nS&t4kCzF66aVKppDu-AZf6Hac-Q48zwljgiMuwlss$FrQuerFCs&h5!A z+%GWyOy<D!15H%shLE zs(Z0YL6bX5*e9!{Q&iDq%D-IYUa2}?q4HsDhLU!j;z*rPqK>;+O)OP~EcdM+sR0<&Z^Od_m1^1}v zUX{5-1>oc_wncJDRZ1;Y(K6L*x$@Si%hsxyn=I?Y->LfVPzyd*^iLHXP|+94|6Iw} zDm<*@TNQn$!k<;zQ9C^QEagfhO@e0PHI?KR5@v}PSm3rm3TrJv8`;|d-SN_+yLkEH z_m!82h(2HL9wzT!ASL6Z|0roQR{Zg@0F|uJd?reGvE)pW;8M#PO1)A-q(m>5s;lBI z2E2c#%9qy)s$fgtioZ$t1`8m95EPUOmx(_^R!q0`G$ACQJB9BRf1&Ua3D!s@{PRx< z{89c+YwP9rZ9FG@-6nL<*T5f&|4-4MOZgXa=zuIeD2cD+p)V!zwfKkaFptR-3Nwlu zFnmVv)Ya2bil#K}qj4r(_ep4Oq`f9OYOeFMY~!BaQq##gJXQN0HJzlx({w5lsbJ}x zuER65*F}40>M&oIg*xn^%L;T#Fa1kzt$J#&j}8j;l)gHppU&;C6GL_Xb9Fdcn=#t< z(Uj=0Om8W-xCxo5`Bu#pnr3O9t%KWiFkSOp3n9s>)S0*I!aH<;$>biJcm*}I;%?hk z<1Ns|_iBHUriGgCvmDWAiT0{AKcc;d^}G$%rz%frdD7xayp7s>R(qSQAH#oMbG4SO z+S{!C7qqvKC~KmTpH#2-?{z~_ww)E z=%^btGMQ(ZN%0~{LKDIH+z;}m3Hz8)gKRf_$q4nlTj*0b|D#_PN<{W9**<^Jy)rIzjo;uKEEjJxrGr%#abn0^#t+|I* zE5_R#g%^R#Km)Z*;wZ(oUNU?FY3!$RPJOPM&ZjnFAB-T-#hb7nm$RTB#{<$Wu)S9R zj2CR+x=*wB6z4o+qY52hquRt1aP6(;oXwoHg>QP1b6(=`W%jr6h*x-g{96BUC+F_w zvAg)z*SPuXoc1RF_7m?t4sO#?JM{Pm|QT;@7j6S+{|tHI`~1 zdYV~E4?Ix?8Il^eU98U${{$=W0@-2ON{3u|rM)ELNy)>t;uP^Z$?VRS7=}w(VOMz# zpWB)Cqr-36%M-7M{8S*Rh2r%Qucxh^JknphL81oAlSPs;K)im^@NB6!Sp0MBW_;=} z2}a835fT-{jw5w&p&lazqXZrcZ>&^|m*65vzC?lv5>AxYE|y;=%cGadEmNfYGV!jo ztl;%m$&1%Whik>VS~8}Jf1SuQksHO_Br7BF%A}}Ve4GFka^oyHX{MZWt9ZA`%Gu)0 z5kYF^Z5f=T3w(Xcc3t;~o`5FzW#$NATy+2ir2z1af!601!sTA5mi1HZk&!P_HG|ZL z!&PFLI{6VLxDY*RhHp2S-6ZX6w+dS@EUELI=y}K6Ov&fj-n6jNraxwEu`UbQ&Ly?@ zlnYedk*ec`>bWs09HnNARyAW)-C|YuBDH?Jsyk7gd9ix#5>+zEz7fv6Ox2yD3a_%9 zih2zsKoqEl)zX6t#lK8~5@}H;QSGw8(M8Z0Q*{3E+RwHp42{+Fiq6DJE6J$32L4eR zYrusM{oa!9*;~1!pH}l=%AC{l)NsKkxwD67=8)N zrjwXYVYefv6mf7VN7r&*1s7tH|C&>O;fiF%fm)QMib15zQCS_;y#rM`=C?}}U2Ltb zL8NGfcN4fmwf@_MXz9E8o8f zD<18?9JjYX34hJnap6O|_A@O=G;Bt(g2`)SS`9YILt+}_g(m#dF`gfLu242=P2&sA zcZ*E_`%LB%(`>Q1aG9C@fLVOMsi`twEjPa}HK`Apf)%D}l__6o5)YX-R-160+5M>5 z`mlNZaWnogleyNUuQ5OYU+{?8`h?lK!Cd>Kt-vmR+9W+=20m*xZ8S@sGv{nFmsFcw z&zsR(%&r$r=2r9E3+A_%&9IkD#w*5s)kNFOr8`W=o#wLFO!juuaF=<)aRNlT5OMm- zN%_{P{N71B;*@r=sG_cGXz4mSwFw8cE5dj^5$xrb`#_seg%>IBR^=_QgT&y~D%_|N zFR2abR!J*sDsD^3#CdzFWWtNSM%HhT@L5TEF@B}8&ck7vs|)k&qQQqj{b79UuKd%D zmY6A3X3|pAu=Wrh;Gow&0D~9q0(99xhxx*hgARS^&>@F@vTRA)Uvt#)jyWV0CjSAG z3^avx$xF4(HC|JzdPx&|pOt2Wgjb>^MS+#Sf~@~iz~IXD+fXpg`gma;NLfXx>nVJU z?uUioaXb2!@3DH$$C__+`GD{i!v{QmKbb31IHxW*OyW&-ct|rI*PP2+a{Yj>KZ*TZ z=H8rF$kLD759e?s4;jN!Vz&>$JxohDc$|NEjIV!^-*}p@-@wD3;h&!4nNRU48?A|J z&+}Y&6F*nY%{Ft*OFZTU{ur-@EzCQ3$WFdt7x#Ld)!RH{5BGbA6Yp~P3770=?=#N* zf&~tNuQ>S9I-mVR9DZj}lm5^AR-vjKqgrDey;hBwroOmdy|Gl~KA_}5Rk2*%^0caW zR{5wmjpe4!zo_6hm7i)$yE4-yah!0PwMD7A(x;)g$oMpp&IyqQlGNB{XDW`j@08Em z$(6Zs44d4xavQ9+C&@1-OH;UQPmzrsZLa**F0!w)v^ib2o*}=UDOW>l&6jQ6WmOM3 z)>YmJ<)dEmMP5wcDU|j-Wm<3HKJt5!{MuLie)0*H!e>d?U;Kf#JZ1UWQZ_`oW2-n^ zj-4yNjF9y6r4@FI!zAwl=`c=)j+NKPOA%zT$#Q6d{60xGO_4p9$)GFc+bg8|)iUi` zIqy0dc$193S=vQX1($5O&~#~WiyWOLa;x;dO~%d^o+IrmCG8FgZkOUaCA>?#yM^al z;7`RW30F(rTB)~AdOj@CdYS)-ls_&x*d1(;>8}VlKlOGBza}ZWq$;NURKFp4AIQ0% zNcfG#V1`MW>T0Q{Z#~YYyy1SQX1buc{_R9v)?TkX$<`P4?xe?b*THaIb%FLqYc52p4=LKoR=rZc5P2(bHs& zF$QYhXp=M9@HKJP>{gSxzzEot3(fn>O#KH;;(l|&V$=RXThWrW!bGdg*{e92YjBUz|=qJF9-RexbbIZ8cT<8pj1JR)`QmOQy?{;A)^v z2HiG9m=gwZaN*8Ms8DjFhRvl$ZbY$Luw3FFrbu7%FUo=t;s!}(x6@B z(BU@Jv@KoNjuN>vusyk*Xu@e!-kG?Ig?-Ho$;~4-pHh0z+l5rGC%FaW_9nLa$|7zHYy)NvX$$oe1U-j}?dNB9mCcXcq7GwzaIDq1w&5V4(VD501U5;~H4#E-p zrFJ5U$~lU+ete5f69@*Rc^uuvbSKk%>s)R3lx=>;>jZiZd`iXnsOjN)T_N! zaX&S-m%4VKa?euLgH-ikRXju$pQjFtP{kE0yj9f}rmO#_Qj4UO%CnEtxH9`~Scb@q?8 zacMre{f~1y_-=N6H@mT$-P+yS&dn}xvy0sN!`$okb20i|Dc<_((S+6?Z3v&e!|Uu#;yOH+y5yy zyV}iu*3Evw?frD0ae-x(Y z-eeGymog)ND@?DgEl8R5M`3#ITP8i3B!=ZMoLgzSquH(l59~tQ|YIjfyaK6JAIx^a!QBF9<;fov@ z@5ls)$2s0a$GgPwYmq)+^4Izd_uEOpKi~wvqtltfMpmZA@7?nHno$W<>xOp2QpsXk9yeBB!!~m-(I=MZ9(-zd;$j#cK?IhIT5@&3nb5J@SSg#@v4>w%tc8{g=W!^?8OzZ{ z%;Rj~vLA6Ug9V-tm_XuNVd6R4h75AM_cmYs4i~-4$+68Z`pKfbn#G>0~CHyjS`AMKAXI!pUSI=WcX#F$$$S<9uGFS8e!qGUIm=<;NjFLUKmmoIna3YVt1e3i>ry8hMH zn1?srx^G+`R4z7GIdEs;y< z1VjYSN$qZZwULKRfEjzOtsXnL!&L7w$L$dtkcZ0pt&{h?1EeRIODWjz+)Q2x5qOUf zPO(?oMWFP10q0_uG@Mhh?&+)!c2U7HHEFv_!Uxz*0K z7y;aPj42ppF#R@LYG{Yu(aEs!22k{mFYx_0)53=2qf}wqm@kg3ql;P3P z{8@UtNL6EoXTUZO5;e5|N&G1CUc%2x;dzjqntB-zAkcnxO@Njbz7hNlb~iJSO>nyY zZ`T1x2gHMx_{gnmX=yLi1_E-YwQ+`S&<5$8lhr1z!GV92k+hzY@WZS!SlcfupA_ zy()~Yzc58a)&GjFiglqR)CBCbzV5w$ajW9e-sB&wPpmRWrFT?`eAV_ZxF5)V)BXnc zD^bsv+OD)K{Y?3k|0V9 z6~4uq?y$=FfAEpkh-{SLMTy?A7jQ480T9|8;;toYp-H!&zkj^NGEZrz!%+L(tS;*3 z>C{5)_tjxP?GMoNDs=RKz7SI63-&R{0k0DDk5_dvmTPZn2152NUG=_x`~#i9KI@3C z1eek?X$j-DFezE41W1ANOz!Q5VW(MSJV=E|Jl$_A=b#yS4;gyYcrevGW4w*#9hf|; zjkm?1>KbX;UOSA3-7ECK?Ize|QZUeFP&6YZv}3_nhl9opf&t~*jsRq1w=LwXMVx;h zpS_s#tGIB9^*H4(=ls>2|A76*^H=idHT>XO&VQK8*K_%!oR2U1752Ad8=|BMetIfE zCC6hbf@f*9@Hz<|w$$rjgYXj)J|)4E5^j{#Ez zCqZ2fQW(`I@OB7#PvX)OX<$oF1f?hN)Wv=w2^gH%@C^>ZUISh2F4b(l`p=*(2x9w1 z;K12uliE1>k#LuMt{tHMAk@VjU+v+F9zSc)D4fg z({X&26VIkELE(Fh(-FRS)&{SNHd_vi1$fp`+)2^PDuTE=Oypu~NVC7Djp8NiX4our z(l70_T>Z@Vb@+ka{GRqcvURj}j|nQy>89`ulToCY7Y+W(r!ys`V_k^owYdpH|<;3UA*w1FD5Q@+Q}B)H|w>?G6Qtk7}$rrW#pe(2szFaaUa~zMpi|tM%!eh3aa3?t!uOZ5taEF$>HlO<<7+%QV^s!#$V`p3e<CsQk?Q z3-|qvNB@puF7?~5{L(QlhPM+(gHi{esd*|JwhdP`N>U%!QCm~g`}I`Ex^Qx;Bwq~z z+cr(rq^gp1wW@*QhKd`j@d-suRTWOlMyjHPdOkzFm#LCksV7>iS=nmq@yb6@Ww%uq z<*0h?)Ol@GX?sOBaK3yF;LpAB9P`PqH2nJZK zK4Powksl0S2TVx?Z!7PsLLx`DO}cl6N}=cTjMb9ipOpNbV(XF+B_p238WA z3F+4@pA#LnJvB2^nCi3NFh=n-<@Dwp1suY2dkS+$OK*_g);|;UV(y6*26JDI`ddGS zUlg}?#`T@v5K92?V}Jup>~aC;Phq}_Tg~Fc?e=0GB6IYh)g*0p;29o__&_zIxtL$J zM(A)m2RrOSJbHuuZ;^E1$`nOuYDyzTt(4bBrMFewMP&_8G+qhL0aQ^$%A2b~Y^Co~ zY4<7*wa!59Y_T6Ky{3+XpY08`d5;?MrfT)Bs{esH=_@t*OSSO}HScqk@+}%5g`<(EzQuuen|JxG0Avy1e|E^SmriH2FQ}Ol*eIX4G z3Vmgje;aAn+H*Bw2sb*cuer7MvNT9OIh}O>UiyTQddN^4NSE!p^ETb>9bNdb9`&By z{-Hj$SMNC8La=3^8w|1+_QDy~5)UiyHL$)nHKllC=Gb0Bx2rvk0dxYj17UD=jwv2t zaz>g8{C?qeFE?4YnrM#gMv>*V4<&iC2^Zt)${}8b`PNtt$%T9Wm*j$PGlb+)tGC2T z3)+YofeH1{Gh8|QglFvkYbi`GQ8-8#_wl~=Ykb3T?aBAPX_OLjD*-_JI*p!O=M5L;jpcm@vzGONO}7deW~O}C3(`Z zK+*OMwiqV8QXtoIJm zbfLa|lr9^izn-L41Qvi* z@wh6P&jF(;rm2+2dCbawoC560j2PMUC*CAlY8&*TT87DC4goOvhI9YUFsTKY{15b! zzqlo1VrU7HaWU5EjQ=lKr{@%em!kfX7-+k?GO$)VPRqqHMgto(Ffowf1=SEJ3_wAD zb*pM27$9JPbBL`w2pFJVWSGwbV|f?g2cBq70{^g++0)HTDKN!7W0pk^YrvRrwMhaz z@Gl}nJn|L1!}%Bw;(6d#3CmcPI8Yv1ommE&z*`v#9++$W~16Y!?SYdU^GXSG%p zZB=&d`}Yi$I8#+&6s(=)FvVenV>R4yO6L$5`^O)nH3`HO!7diWHsM+f%1!tc9%G5X zf!wcpgLZ;9!Vb~9%Q8%(MF@1XuG%OXfxL(siIdp&(qOhT{KGPP14DC=m+l9>9|_rpe zB;{>PWpulv8m73{uKT5 z8+eD>xs)9z1+KrFRMAWYyM7Jsm1mGQ*XD@`QfF=UZL!@WOKtFNH3!T8mU??Qj=Ul7 zwuR-*_>(_FPQ1c)1h~CSh|X)oe{k#Eg1!}@2PNF5X$uA0;Yq*}0d^tGLn4qdI0@LQb=9_NpF&VB*^9rA#W&2 z5y^1!hmnjVxsc=n@`@=KMKXqXEXjD13FM6{L?k7IIB?1q>oUTL9lg%po9rXFiV^NU6)jc#KL-ih32rXO;c{Bnc)4+;;tcEQ z!c~;=O#rkkXmUMG)ZdiA8V%tE%D^Dw6`54b7=Ymnw?MgYjA;S2^96+dtPK^ZB7wq* zhSP<7^?VK&a8eb!V5^=X(KkZBNz0eD`cx->ro#(d%#C4hK6;}r2j8y`?=9jN&*DvI z7%DQ+`3`;NMBh7Msulc^XOXTHUT(RgS$B|kFV!ruQmQ|bqxtsnlPz2kOJ|us@&Q)V zMs@0_Y9L^u77Z8JCsq1WutfeRviF-3y(`B)l(YAXTPr*Kh=O9h+p`$A{7%}(O6Z98 zYxI!KZVIlbP0i==Sa>ovGPt>SH@MCHfbnUG5ps&~+bMIR5+{1V39B81v$!YKaxZ_w z6al#FOp?23+uas`c?IT^Ep+lLG%vq{KI z%FXt08^ACDi9PY0yk!3P89ztDTv*e!M{N= z4@xEQnEFpJCgzQJqW*)8*+J83y10|x2RtU&bhC9d-4ZfOF=PLCLgqU?b&x zO=DChIGKZOl}68U(_*8!XS3OigY+x=JC$Ve8xktF{BaaqL+mmfDZwh`uK1(a4rM^} zm`a==MeRhLXbVcP)KI6`l0oSt`KO6=krcSy@+CM^s(VXbACW=AXG!j0Nd~O`JPC^> z_X1msnKedIF0xkDsgosTiaotkt`hHZNxxolZxpXWs%J?Byl1ne`a`kv@Qu3QD=odu z(ECiZ6cfH(qxW55!u2M6%0$l^4}X!ZCV17*POC8%L!?5h1-P1R$xO0W#ayV+hO1J! zsxjZ0kFGR(wGW3_Ku~~*3wpvw%zIfrXZe}^qX-YF00H4fD#}n2M}xx+>fn-Y8?w9jI`P%30i2wI1(?u*4l3*8H7mrxh<&;^CMps!BtrwefB z9ibbXs~;Gz@%Pd@biG$~i|smjr#^d|er30%^Q{L<_EW9dbf{~)QLu}FR7IGLdmF~s z3~CCHDUkig;I|*UIv1I&2Mx0A$k!KdG&P&es25DhHZvSb9exO)=cO`YJAPAZ3x~>@ z(#yh>ZtcUf`*VY{xZ_YBGKBqMOy}8d)*%r`r7UG|C$mgvnZf=oEOV^)+ndJ%Htd}- z&Tf(2KFfVfic$dj@HNxxYLP{%iA%06iZK|41l5)9P2XX)y}I&rp64AO}qIx$Qq&aoEX zlHodWfzG{9CyI6PD4iIsbI0h!c%2xhd4f(%)b1pmn5?U(=-kV6;tHL6xvsuSC$81S zSL?(zx_YWEo~BKSb|alzsuN|l<0*Hh&aKeZx9H+oI(M!vzFjBo)QP)w;x3&sU#Be4 zxeImiVx7B0=PuRm13Ix%Cmz(*t8`+uPCTR&Yjg_kKHIf_L{p6xun6j!%El(Ojg^8c zx>yAghgcaT*3cyKO=(Y4Twt%dn|mA6*W?W_Jj4{>iymq2fF?Z3q>MIuFEUjic;92Z zg;pLp=}!f|-oGjE&`dU%DX|V8J{Rlo&*P;ZOYwMF#Bxfl8lMuY@g2!YbDWxW_7KSV z%>ie^hhPh0@I*pbHNb(nmI7psFobNOr6~H`Zjp?^C&ZtVcaVa^RF%R}nyqBYYigyH z^v0I)RoRT)=8TnY(J7n}J0kMCvsb`DPaZy)bBAy=jO8lMN78?`ePp6VRww|TD$|ZPIz@A0B*&!=sXCCF(fn~0vav^Z}Doj&;W2IZDq?YRTES29{ z*$ zvNq}TY+Kn0_dW*TX6MVLBZV)PdnSvTAY(2Q{|X7Ol8UP(^?I3)oaQuHbhA|8nprLn zO&6Xkj8yePktM>*Bp*Zavr_)91P8_Y(&BdWe~{5fB=si?kp>DQ1Y=NZH(mQM(znv3 z?KIYoul=+Ive851f6%8F26xfE7c~_=@r%qzjBVQ zx=mNk)2Rz|>0%u$(eEzR!TtJ_)jAK?hYi|)PKP^m^)^e(ult(*aA1-Nnk_GyWIWq1*=Ji`G02uO zo(JSu-?sf?6zj$wbYon9-hqZDN!xXVUk$cYTkUEXt|~7tE@OHU8&XC4ReJ3$02{Hr zIt6+KAX?aHoM9C10!5|-TkP?sJ}w30jMU0C_(@)B)MX~+3bT2Vb%TUuCNbSaGYnN2 z?-s+ejGAK@W-xpskVNp0!at{Wq{k1+GtllJjrz#lUmRW?9iE0`bFk!JB<;V37hMCqAH1PG_-Q}X#dt;b;G+IqHIz$7a4G1- zpb+Dt_l=}r*H%fH3kYO6A0&|7)-QKMclg{~nq&ytR0}CCWdD5C{{nRZ5;WJS7amsf zfG)>BJi`>95pP3~MXhgAN}Qm~2^QPnRd~QrUptq5>r^+Osx(SzN?FaRYYW<&NuOp= z?;QHMGd*$|P47a*r&H5zlob-^5y2YWgSc0m!GuA2AW2_4w+H=znziK`j*b; zV`yxkbi#HJmo`_bnF<0`nWgr&QhBWvWT=u{1;axHg!Fz&1}Yh#Jm`=URaoodo@D!o zt&#g?#n?EnQJHI%S+Ax%tOmxu?(%0;-bU4UlX72B^rE6y6>V3IcdGk=j6R^MYn|Rd zshnTbJ#q3#>Pp?FV!hud$fq5ob)I|;M$l+kF-BI8m6D5O_{H+mM0sJd>_gyjl2l(I z`YK7iM$W%hrd}uihq3pLud3SKe&;B2&6N;fB?JgaSqY&^2^N}^l}&(9gn)!z0)m2~ zVneK~gdjzPfFRf~U;%>)q9~$BC<+#u1yQNeR79E-LD+Z9jh=hn`@8RZ?|@$eyJ zuRYh8&v>5i)A~_B2n4Y&+@8XyEn-{reF=sB}Q;T`z zcHX+vW`zPVkRRj(@sR(@!Ef@x@N;4&KgG|U=F+qL^?BZYjEYM5lJd@`k9_(eTsfvAx>qeMTkOs`$37l~6nMwl=Ekq*VLzDB2&YHy>)bs9Hl z*rfG(JF3Z^_icHtf1zQ!&iF>}+MykhH^s`nO@F>ySNlAve%9V$`Qr|s zbfRaR)Qe8l@}@zu$*5pPS2l}MOr(mLe~qCUR!8DmCbf>K)Y$ZHW(LPLl5z(eEwg%# zk^Lj~Fg1IdP*e*ciuWuk zt@Jq)N=##^d0cX}@0+fxZM|c#$tuIqzny5N{15FOkq9S=4B)B!7iC z2f|m4yU_4rgYTN~Ejz|b3ryT96UZcAYJ&A9_{^{z>0j7Jn4&E*y&!%o3{Rr3C`A%* zPXjFhKN}OGFK*i?Nled)2d>Yj4m(Ylwx#6lUanY5T~p`zZ8dkhwy`S1mPttyo}*R{CWh{8%6s^Q=)X2 z2%vs3x##JZGAt5V{Bm}`Kw9;Wa9XzC^^42@&-FVOD5$7TgoHan(R=*5>w?Zqu(@%Uzj4{oOgw|Ip7xoiVdk2qGWug zp|=OaQ(}T8cLar_DSXQQ8WTHm@p$GVc1jV=LH;??AzoNnmx?v0xpe5*AJ~^z+;)vy zwPXN__Qa-zLw5Zah}^18YI)PWimlqQG3vHPV2LOw;O_RZf9F;c$Ri}Tyi6mg#_*(L z|FKF{u8JV6d-;7Xj=*cy(7Wo2{5NBW>f&7!D6kagebIILG zjXUyt-PxDo^{08~5)OA*a}LT#R!$elUaXq-1;BotcAMCGi-OqiA$^JtH*05~K6hA$ ze>ix`v6N27M2&Ie6D(%}nV0ICprx5D{U#ApRaQ<}@((dAOOq~Udmm$NHS30%WSN&@ z2x44du3c{K+h}TUF?}*kLn&ZAtbIY5b%o@IY=gG@3dmRIKor@WZCFJCHvHIT^)CwPHwJKTWXYHvYk$srLFjgq~PqZ#Vokm zK5P}!O_A*EI@@DPijZW<9^PVgD)Fabp521&A8xSFc&{1w$i&OHJAx3}yP^Lk^-zU5xqk6 zCZYEv2I4xKfngE)vvA^U^yZ>J2YsmajY|_hV z_WShFe_tOqkbCt8A$Np9?9Jx&&++W9d0;Qi!)&=~I7WvPbcrBd#r^W9u5emQ!1Hv9 zh3QGv6t*@MWS9Y^f{<$OK_*%F zqOvEAnFBZWGbrbOGwA#!$|ULTvR~n=76pu16oQ{)o&<5B{DQ%+i2r&LgqemX?4c^; zw9Wte5Kxh92?MboTt@3a5c`3#-UETEg-PTlQkYEPzcvFFn?WjJ8bNKsI>a$w0bWZ` zkFWvZRY!r?37T2g7T-h|vk;(I2>#a+1U~#v34-LQul6w75`;4pT*pM~_N+!epDd0Q>{ieerd5_G5VY6V)Gf+Ci_T#j8 z7N*UEa?e4|^Kj}#82$pZdKo4!g!n~}^9mHb3T=wv`PU%+b@+Y>Y+ntayr(*%D6UI8*bZ?)%UWY|H(OXdqNlYJ*v;%9 z{Hy>eAM++66=K3u=uE@BC-K?I=uE}9Sy-tEH_t{R3*r|s|0T?uhbi*vS%l&@$b20e zF2-4}VVO7Zx;L?S3HDfq$#Q*u7oGPlf-+xXP@ma&Y~e9UdZ zO+}8W$Z?hZhl-p~k@G6@mx^3ek;^I)RS~&r$h8=uOB_T9;zV3`L1x29StzUkkz|M@ z!4ua&Bn8r|LZli*DnVQgDD*LR#xuJ0N`w6y61KVd&v}h4g5r-1Fn#l>X*q_6G zEOI3n?Lc;9i`jpjg~v7E4fe$Y`QJF}x;mr2hHJIgSfgBEo9Vo{wm?LTf6|R8Er;@& z7AM2i(@EYDP^(z29)^%FCjX)24=0ShYy8^@ZzF#+ z`Es|qhx`W!H;`~ON8T%%GZ$WB5pqRTfx6n40Y?7$i*)dsT;yYp$IrDVJIXCOak~!0 z{rH`h!l}|j`W`VkNF$HPeHo^xwW-(9`XR*};`KL+#Ms%-4#06M?9gjRTu~wRS>UsO z*oHB&3V4DjtOi&MAk{*#gh?1&2X0dk7^80xQ!(g@*)lD>WPI`1OMFb6a{E=}hN*lq@hOqnwNVpEVHHU?5 zU_)CNlL@IeLw+`7bcelNVc#tf*AtvRfWzQ`Jg#>@>79@`4){T+J{J5(VA2GT-@M7j z%N;P<6{FoSrweZGjwQWtLQkBXi;er?j{|YM~S#?%=^vbL0S9|m-E372HE{lZ> ze1)|X%DCQ0b!n(_8>=Z9>SPo3$aSjZdR5X?CEch>ZcrsHRJUd-t+^^}rAk_=J8x3I zwN_3W<+fGd2daKMRgkGl+AHXw-s`A#WhsoPzS*ivC-qDhmE2Y3c2;gT^+7hz`sghe%PH#0-QaSw<4*VyKgToZ&DSw2L0FFCSg`*XYQGAEOdlf&R@F9hd zDQO_$CzSi7a;GYsu7al(%uqN}VUfZ)7L^0S$$3fn^A#>s_?mK;C|;~kU^q(^zNz4C z183N#SY*rHa=pmRS7;#h;7SMDaF-Un~4x<$kN29SV1;lAS8; zJC*c<@_$s%>{cZ|sq=eOoKzF;Rj^+LKdXfYRQf@+`LNn>$Vxp=pH<;G<)2sn1?65; zf$Vc7GAzyMS5$aexl!fHx>(XY3i2I+8i5RS&l&&?2g(FQklvxbV zl)#!d;OsJh*!_Y|e&jf7o1U3q>pa6>|A{Ju3=ds&!m@p4Fy@U^nJw`^y1s0SVEU{Qx zTfg`Lj$eVh9U;W}@yCxw!4F?`OjnY(?(AkC87 z_|$fua){v|M^ExSC;0c%ob{I#i?TqsQ+iJs9W86=k!R!z(^zvO-C7EC{!=|UP;VQg zg8{n65RHR%zo9xmPnR2}_YK$MWHEQUj*ieg((aF7yU&$R-^M1%0yxp%;r2UJ6zB>HPhA-64Hi(nE31e|K3@`G31CyE)iLkarID zb6|i2eH|F$@IVLh92n|^gB=*;;Bdzs=I{uIM>=q;%{hj*J5cDr0SERw-XRAMN{ZeI z4?E%2X3V1w{NdzDZ27FS?wr&5yc1k-ZocT85XkTqCo}4tywP0O%oIp(W^*Gz;J@T* z+16}`m`d$TG%&q;n>cwx-D;AhG;^fgExvQNaqlti7?XUTaV7RO)^Zp?)a)0`lUHjr zUorb%HCGmyfv=fA7n=)TnQB|juUkyG%}o5;nVo5VlU3{_5TJ+Hk8jMPf>^8|h#0@4 zC8XKg{msS~U0uX0F*7XE`LF2o>$vGymYvk|71cXUlq1N#<|=5WQd%p#NpV|+ayWNU z&{^qD3U5{wZc*4<)en_dL+#qB@COAFa{N)@Pip=iwMmAJ<0|=_;tL8cs{Bg|uc)Hf zd?>;&GI$DxJK!Y%7(f@6#FEjWn1ISaW?7(epgo|9kXiwxd}WfHT9u$@8u-m2Y-2qk z&f}0Lp{>W@AJ=#md*o`lL%q2d(iA(n$8nE5QgJP2Qh?Tew_5?Hki^l}?RZu%~C zT><4j0oV?6cfho-p~erkNnzwq;O~ZTFVG%)WWjz2eg^j!2oT4MV@6?ugZmiQ#aoI_ z{W93FCVt@K6SZ(tI{sN3Kd6g`>f!aWbh`l~nV8ic!;Y8`<0mYYaE-jF2jGN(*mMYP z%ERzh42M~~aKQv@Dz}e`c&QKvO~MN^G2waq`#G#U4==og=jY>z1sHu9+r5e52S_U{ zX(3@1daKd>0>hoye-8$GF*terTPw4u(ei6i7?(Xp%3|>5&VHUqXhx1=%Dad>L4W_rb*E05(Gt1^~GY{L!w8gTs zO1E>jgWUEH9&(cR{mp+|VHwbJqC63GhIr4!_eEM-zX}|^&eeHFJ5pO;M!y@c7nIe7 z3A(hLeo!V-sb;9DYu3`Hk-pSe?`fjGOf^o~siE=~o8m?L%~}p?dycU3jaW zI9$VR`j^{vhmrdCe4Qhkz7k#fre5-nZn#|Y3N3h+8$Q=#H|sb#!M@a`LNyfC^ap)O zth4*{=so)AAss!eqsb0ea=5O;*E%VE93fM|4u=mp@T=nNk$Pwm=8_nApCTwmxwly0A^FqW7ZD&^W zG06k%PEbk&<6EC-jthfT0Up|S4{G&X5Q=O z``1jFMP}V%b5zorUm1U^nXtt~x0w?$qQYfa5k6&?+U{bIbU--EI-3> zG{H{@yAk#w>_z`)(TWj{BK(5>uL!>({El!8`8dJ}gtLg}u)9QzFIXW66!AqANkk3| zTjMCsHnP-Zc1SMTvIYXdFDD5Ei6EJ>D-l!?EUI;wKpF+L3F;8mCAS_yBNDr2D1puT z6gDAjO70DWHxaZY;pRy@q`bSu6FYG#RiAEY-Z+z5&bIXs_$=Xkg69bq5WYl(#k6jj zeg6HXtVf8(W=rTKbT9TQaYVy6PVLww&g*R=x7&kV)G%p1078iZw(%H2le1X`fqtcT9}iuE)OwnUI|Q8 z-Ygx>bJ?bHC$q1!dApm5b~iWnG>dweXde^JHU0aVF9w>Sx0v$-%#}eV+TTR;Y}Rzdp;#&2XZU*fK>*1@>3{Omu@(pyc2JZz#OHf0nYUbM}Vjwc%O z^Dw6>Zg>uzT9jN_SFfm3rAd6Nu9IY>V?Dc?(e+J1V>7ys`K_YWB;jvIf|EislbvZ(1u9gkOW6kuGEfxgFVgzk$TrvDeGR2Xc zDF>no7Fxd(gSwfOOKME2dNoa~P0DSf3VJJkSmiz;PqoUOu1aR8T)9WgRN*YONv2fr)s1|dI zrio4Te#m&lRtDr308WIoxzJ=j;Ij}v4-P*E-b>)U2v?qmgD=C;7a(pS)LjIy0EQJq z@vBhu8iY&1S!K;OP1eGqPe7<>ydH`_1>OkJ&j3FM{|h*=0q`p*+zfGI&D{jqTcKnd zOxOuov9_9wqwv`&XmJ`Aoq!f+!8-$ae?s&m{BjNwq_FQVpi2-v58>Z%ISOsBzZ8#uqB#kZW*X3O1^UhpS+;DqgOJ`)c5O)$vps zmaiXc!)c6e6TJIcgzNF{8!>tV?rx5gn_<0{*sujoZH3`YnA8@hw8jZ-FdE=r?Xfrq zC-y?V1)(Pv^uV@#(9gw;e)zSx^7>+=KRSc)mJv8&q^%@ga5sK+7nak?Ec&x8L}mJ1n=Y^Tip_21yo%vs43?rR-_|$KeGPNo#>^$y{4GpeX2Ep) z4u;DyvJxkMgrh#eU@dwZ@x4#c--P31oq$=NA$*DHUtshrJh27Sw_@6MJh=_ae}|KI zVE8pY_6;`q!Q$Kt1Q&1=)BeCwXAmx6cX2ccm;&iSJf$U&pG4;?P_&{=?d_{X&6BC5 zD$Tn_Nbj_)3SFvBmn+jt)o4f!npTs9u-Pz;-cO}V>GWeQ>ROvl)S=wE)Tc4M*oY=H zq@;RuwmwB0&?nbYG=uJKLUGs8Cx8ocP2d_Q0HtCIxBRd z+^$ryJ3V0l|Cp(#PbNQe-2!8z{P-ZvT{?lU>** zswi+gu}^$X{3Vs!K^XJrcn2x{2z~ks>E9{t7^VJ3m5-A9D|J6kMJFio2MOP`{wYd3 zO@(Jky5%$1Q6BIW&3V!YB=#{!GTA)E@K~2k9Iq|IrPbKEhPftZrgK6KPEF%{pVw7q z6t-k4zgwHf*JG^Dw#ex^_M~a|21eOyx8`RuIi(xV7Jk>ijZSa(;+#J0-on^BR_)Z6 zdk*BygBgeO=3Dvv2;MM~aTxozad12Dy_4(R!O_vYOF&+C^U|?AXB2N7!yE2l|32O( zpvVWfeXJOF^>`loAp3&ud4$hC%zGc@zb5dhCwPN+bVJrsK$g!=0neMrGh?u?4wHCx ztQhx^r`dUyMPBw_VCN;K7dc$OK`|%2%7+)S_ZmO(GAF;nUoB#1F^6xmzk(Zl$Rk#B z>MBnDfD6{J^AYd=#6tB`)-soJxSn|(yBpZuXloq9O)N>MsEE}+@%SGYcJsFHIl4=7 zb9{L(pV`M|KOg;>tNz04j`D?Hxy2Fg_#2zUoOzt9AL9`cU_8kkPVt|odCFN1&T;uO zwg{5{$a$A|0_$U>*J?e~(NR}Njoufpze&_#lHMs>-AY=(3$C<4rf9FC zPLMTsRn2Mot#m!2rmmK%_tn;~)zfWj=}L8Uw64ytuSYb{S42p^PA|Dp2TgUk8+5tr z^|#ISSTX6f(!PLgTj=7Jn%n4%*0QD0Ded*SES)YE;*Od+>BAj#*jZ1McA>7ixQkBh zrZ@G}C4F_YpUxYiy}>#Znwb=J-Kpo^ufuzF`A4+(sD^w!wLnjqs7nfUtta*D$-3!O z-E^A%ZHlh-l%}UOP1hgH)KwdUM5`4Z*=rq z?Z>3`=q^2Nr@r=kJ@^Oh?AFKk>ZcCsD|__P1NzL*`phXERCU~I9Ji5!jUCKzu!$q{ z6K6SYC&wM{;A0Mk4i-2#*@4-P|BAzJSSnQTmIF&1Tq3310PCVk%Ma;SnULB9Cwui>m4X{!gWr{Mh8B1V1t7{I{cFZdmPy7 z@NNf=Io>HJ{-QGojBLp<*-T3^4Jw#uMbopgxm?vwr@vG)pH?w^jrmQ2PN`<3Z(dC^ zAEz6xZa%GKcGof|>YL|l8?I+s)-_zme1EMeXkh$?=0GD;zOkv^#LTy1>^ zpQvfM4Z?WIZD$&1n{t7Xt+DvV=XJ3559vekyP1^kCaI_SJ;z+`Wg7IbPUC1_)3c9R zm1`OdG>vXCs|Q;_W_f?Jc7T~M)SSyRyN8)pgUnqcOn8TJ?=&9|H*mYjzc1EdG0sG! z;hGtu~yO#LT~D`v>aCJ;a5G;@EUDVc5-J!RsbHbIdI zXPXyin9^rV-W>6Dm|&K1=9wwanyNz2d(prG6D%`vZ&^ehzGLRBFtb-$fM>YMxT}r- zu_^h)3|wPYeq?T1XRfR@y*@P)OUO~(kAoPMpO8iIknkr_`+PsG~U(aLTt0( zx(egPFRHk_ax4G8Z4>G!Xrdyq^#L|h*h*nbD?p*hP_eB6wu>oI5yc`yby3_+VUEI{ z3VSH*WhE(#>iYk)6u4Ujf)%>D8n{2U9T=y)e-{L!{(me8od4s3!1t?Y62K?ol8+0?CYs{_g;kgP=S>D=XlO z&qNmP{zUL*f%gLVuYwm=RJ4_y%m`95rzVA z*pI;hYv7deOqwzh|Pcx!bKUr^YX{1()%o$N9RVj~laZ}S#P z>`9)qC-fm%!qw_W(3kW8;=zNSBnv=hll3-%^GU6?T#L14)r++(8oHyjUaLV?;6etKJFX zlaz9r+_S`glO#F3IQFC+QVM0{l6xa(cj3GqEC^7EcpJg=^|6(LX~Q}3E{hq7i@oW8MMfnTT=;$zB0-F+Bu@OjtD*N@cuBExY z&a11-H?S{0aip_U+c(!Eo9VqRHMG)R8~dh%j+#5@NuBMhjk{^+rw-sTyKd_7^AV z4m0$uS-Q+@T{K58l91HPy4+%$*9c$J;p@8Mn^wbLwelbHXVPlRD~|g_!#d3yG_Tj* z=el^ib~jraL%AQczgJ7MVa5Hr#$mnWl#_SHLGeDhrl7nD8=IiDaIH;xCtF_c^|7Fs z6v6o1X~dH$?WJ#xH<^zbC^VO68vj`n%r~LfM;4e;akg(YS{}A0N?LkF0ro$@Y2qQ2 zJB75eCg`A%b|2E=WbH1{?mlZPO_u7w0mk2CdMQ=y6(uF|fz+0X>7^B*c*~1m=nQy9 zzHa~hUHjjC(PSzWA52u1aM8>Lq!qo@C@(4+tG=FndFIP`!+%B(e?i8(M|oYM;DKi z8+&fuQ{-NKbdiOoPB&PZI`p*lm%?-kd$Xu0^0@j#*t?6vM>uZ+`;*w)&E7%wu0EW< zTbFyo3l@(P%JV6`S5iz)FTBudChIV=3#vu({1jKpRP!*+)^H3Xwzo?Rtth z6?euy_aAM?_$j2?8bu+^~O(-AkcmuJIb-R3~i|j|qRTbS2;cUP;fI=VbfS0CP zT&FMVKXH8zqR1LTk$HuL`MRzkAz!8NS{2sXI$@dc6M;_5l)bfUqeV(uv60y z7I)z7*LXx{oRx2`ecH1+nS`DukcWJ@DZ1T+k}H>V(jp53ta(3pqK3uJgmg#4S@IiL z5*K&3hV4Hjdi=FSv`orKllP)YmDq*c0&;bg(Iy;af2;FrDQSL+KkdBzvT40hfjr*w zY{xnoMN0`@hor9{tck*D>3g3&*kKwgqVF`>`^8d;dJfw)BL!0U)H=* zhacM0K%R<9Kibm(B=90y-(l@uXILJFLbJTc0!d( z4@21z4;8{cmTXb*{$ph+u>3c9!d(IQNO*Y~q&zBNIboxDc%TaQi4oE&)x;ZoY#^)urdYo{7G+_igJsZRH_Yye zqjC{?V*_a$&qKHu2j}B2lQCzuEuxj0ga5d`wR{1^_5B)#a!yLfQ9jm>@zqlFH)6fd z(O-}0n_^gx?Fe6C-gg$j68Alp?n3he7XFA?d$7e%n7SLI`)mre@DLX7$My#?6h8dV zSo<*kb_Ab0ijVz*lYYe;e#0Ao$E0KU>v4>pz(pr<&}l3bC-xcq<4+W5Vd**i=sYgD zfRFu!(MvezZ_K=c8BuwaQ1M0Fds%AU>2;(tOvOYQh9){x(WRU?a^vZ#GW11RdHhI_ zMA7m@60EC088K|sm1Npek6OM*tsY%zMD4Dnic(C_fTH#3QU?9dgvK_dD%Vlw^_1L<;v_A8BXKK&=EN=N z_m*_wCVIau4QxZBTGP?~BpxmIHp&=9$q&&tkI=M``s7nMf$o_|Z#+pWV)$a1Nmxwo zVsa&NzKr-?`h9&Y1@k4jKT^w|C}R(G-%Bs&W3++BaFaAou{6^*|-FKXZ z{6RxbP>qumcaFNpAdTZRqnPs(d1F9Zz5g@+ zL+v}ly`|^ActbqWvZ|<~vodthQ2#A-IC=3& z(dw`mJa(LJEtvwr#K{~rTW8L(tvB$N=4Cp%T-XYJ6}3T$V$c7N1We|NL1$E@z{>FV5)52nVKFe}beH@=n-$@dGEFNoSmt zb53y4@x=fCm*Yhp>GAw0#USB0Nij&4p`5|8=H6uECKP)l>Tm05L@`Kz@>i+t3^ zR1VBv?aap!^I}KiXPIbwBiP&J*(Tb_obPN7bv1u?F}HU!&dp}8IIeq|J9Es(JcbB8omd}3CvF_WdZ zc7u6F0vcZ$%rvX672g^*+b0z)oF&fxd>cc{e-2aUWBwYfb&|8Pj8kl8Ar`-gc?<0Z zKmAAAzK1I8rHu!u!G22pnPd!$`<(_HrTAkMcZz;FP4&;w@IR^bVm@=1o+E|tBTY3_ zadPHsd+fg-r+inr@yac$yz%I&MTzj6mE zcYqoz>HcBL%~RnB<&9GQNQE)R^@cl?E12thmG^*vvy}UY;>VQxsPdjr8BZ!-;_%ZI zJgs`-m`c-bMZ;szpZVd(R zsbH0IS1Vql5=xb~UU_Skzd?DQD|eIfwkh{(aHQLZo~1)uV}I(b|b{eKcvj9oQ*E=<=kf=VKk zt?&;-MapOdq7wNRqLN$%!Ws}C z1*EkE_zzzt6F_!t9pL|gSm`7A&EEe-S?LF}`$E?L0Id{^_}_q5?gf1}^pzlIY>6hg zmHAh3D}ouH0LcPf34!yWpa5VR1k)kyX{a|FB6DC-kuZ}XUUY`VP;iy=|2Bln?5M!+ z0IvXE3BiY83ID61zDy1qKst8>2?(2jw}8L>AD(}??;vsjWN{Wb1mSN&;}bs`Mq?c% z3k)80@k+eij$JN`R}%1I8H|>fsS?{HVYC7^OvZhcaY02~n}Qds;(}{1^ss#uoKOwd zR>vMSY-?@Q$9=WXOGhtFl0+EP#)s>oR|nntc>Y=}-`GM3uVmm;P4U(1F>(VI$_A|& zdM#~FU$iy;-3I-3I4l#3+M^d6QG`ypO!yT&FxuO)vZoBh;z5`<1QP~hx1pGjhY7WoLggbHFD7@}on_7Kt9QL~(6CT2{4`aDUt#>gY#Dy~96d+7Q zC`6cq@FXTr!;Go8W(LL=#d7+xFPn>L&m%mGBjzAp#WK&c6bSJ*)?a|{6kC{{`wFHl zj9ngI#raDy@in~e4O?NHB+TB}MY3oa`l7ci#|!~AzlSC7;@p+^&y~_!!TwMf?PRC`Dd}-9E#=HsXd2*lay^*@TB=xY~?geSsCe!i8UA_bs@8D<*Bj zPCM`|;VkV$=W8tb7H5Bh+rGD>GX8-4BNmHQ=_h+>l?9x5mfQn2qc{F%%sPz0Q5^mY zy1!!Z8wS7I+LyTFmS7hAfn)we|11`q!+z&6^MXY~Xa0@uWl{J@c6KgE?B8B{1Mz#f z6c_@B1W}t&jzYNtCt2f1Q8Hyzq@a?`|Ar|RE#g-r&!<;XDM%x)HU)JktV>vrf<`tD z{8$4D>XYBZ8rLUYPkaM~%_!+6ORZ0pm~cCq*~XeYgMj>)$~P1RYA*!)fLS8kJ{Dhzf6`>`^w#*ZD5WzK62^ z!@CyP^<%^jP~js~`w1IB_9sxnRpj*)%9|Fuyi6x4k8p%RH=F2La^@2~PqcuXmndJR z%vUJwb$aAY(#z<{cd5>5O8JEJ8e$pZW2-k_Pdh%PxJ{%tQ~56mw@@h9+#UZ21;I`V zf23eHwcA6_?4>vN(Gv%#*?!t|kitXc9;VV?DB}nn`<;#)BR)#uZ}jYOO8%Ab1Qq^4 z-bwP$QJ>SqXQ}lW3WXminKDVTT%_O<1(zv^Qn_`+F(ehp$R}DOaS+eF%J76_aR+jk zWMTecIa|;ZR^hL%VW`GXgXgAlScjX{#oin{b z48xgkwOc$G!F(HgxAPz=e3Z!EXofqus}w%QV%qCu7QLTYlG?JllcfJc%;Rl`SKCJ! zpI{D|3pwsdE0ye>%D(jSOy&u8Z#>IW|Ky?nlDC&%u-NVDm-yws`Q3{g#z4pO zP>)se_-I+rNwA^3c;w>rJw_ji*KNz_)(QH!r|S#u%TXfy=6HrZK*Tc>Y%lDGj$kfue}9jU`GxA0jGD5)exbK+(VI5w zGGFR5-{|u~+mMlahkj|B{^dKpZKsa@q@5pi!9Lw-zm6W%?$5gUA^pZ48@w8KSl5

8I(_Clix)ZROPs~CoyE(XW-FXttDKE%oIY!v#p|4AuRDv^JBv3u z{oZgES2$BPIbAk53${7sd!1VQonG%c&UlQM!ubcR!m*tFG$+hvDdVJarg`iy z<)A8}Vg*+$=9(|YtP)~ouy4J=6&tw5dJZaBwsOKw?zoGayv5(`vzcNQ@AKFLJOY7Y z2e}ropx=4$AJ)v)i&tDz9Y|6m64l&V>Rhr~T2B?Gs1ps;xm5LdLlvK{R;MYyvFe_o zHnmifxR$`D!IssRV>c4O2z8 zSy~hgx8%>@9>w>m_y?5tsPZF~_JkTgQRS2>0TpV7>a|RjFIVP8HDaZ5D^%w#%G<0e zx2nlN0=KJLDB)0A>{itetKdtu&7;U!bA31C?ny&eWgTK$@+m34VLXgcUi*rw)>^m z-{p;w;y)-OACitwNMa;4isb2H={s6Zl!%WY^{0iV%cy6Brb#eU%4SPcCNxiYfz3)w zS}2wCr34XatA*D{@S21%d6E0Nl*P0~UQAnL!_oFh9wYNV7m{>LN)C(nm2CN1 z!sDWjO7?eB3yk_7rSgmoUZ3!@b@fU3Rd)O)Pl*0T>+4)y>FFDdz9~^hH7%Ax>H2V{ z=El|r8F`nlw$;D%(9}~0x9jBlbX2IR2yKX7I!60rb=G(tPSAf$vP_%AIXZ-7W`!#T1{+`%VS-d;s*0wS>n=C zH(c)0VwYcVWtmGWU0UV(Yg})w>%HRA>ozh**1NpHrFCxjrt7`xQiU6Bb!oH9dtCb1 zl}}vy)TPf{`G-s2SWClrHa;0I*^Eyz&CsRRF%Q%?OBSDfzIZwVhca4d9oA^FvX+QJgwPqbKI*j;lG_48@ z0=c>lG99irciwIy`11@f>mRY;d@#m%6HM6@Bh##Ldc&25R+*{mjI1{U-!!K;nm;z! zL-0E=?FWkYnBxQSz>eC6;x47M%WN12vb-~%rW#X-Hc)v5@p_7{!MPZ zTX;=^@^4iJI3yx7UKSt1v}~R6s104pdqP`B_ZlX+(xhB%k`R!$)?~hF>H!FP+UYUH z>GO=!Y`W8>%vmtcDPQVzS>QBV?Q~h`^m*A?{EE}-Rj1dRPWcvR@n)y|dnf<2BeBxu z-{dwTw6VS&NPq=teJcz@*H2JU=@v6P07e-+)Q2fLpRAu)!D1dKh)#T;db7Dhaid(Eer~n zJGlG-mXRDh$n*&JE#&A)jwV})aj=MeM4`RL#cO#i(ipe%$Q>Ml_w_c*9-BE{^gTaT zTU}aL{Z>a!2-NH}^=pPIXrlHuRejG_U0WzLwvV+|k0E;z(${NMZal!%oQo5W;_u9cN|VFV=+vLc*dX-MfK~s|s6es_$uO9qFrI ztaEcTch#$g-jnO<#`+$a?)I3SkXdO+{-Dm3^vvlyBj#g-ItxkGbr@f+kuh-$5 zx*QDrmM&l9a_GtmmtJydwaYKNw8=%rQ|cC%zHsSRH=&m4m0}jBnyq!sjQWPt%rMNJ znwmNtjdz8KdYQ)uTK0ZYUz2m4dGIC!BMusEf?`uL!36V7*7GJ8TCG=O5|yfWM^sI< z*{j7-2lj8|oWUG_GY7YF(tXU2v)4{ZXH}M`N@Id$Z=i}ss_-F8i77&KIC8@g!LVAQ zObzM_qO4?;MMvEuT8?U@Q2FE#93D;+ADvT&QHhGUm5yQstDH}K&JZ;x@1hU@(I*GbvEk)~S3@oeamoW$i4c`=#u&a~ zEO&d()(kshi51YxKRciO=Q&)$-U_DGeCwN>|2lWyz$xoF+{PZlEVi z8zhjf+Rx!f93JF;XF2|7mftu!$3GfXo}hvxwY`?oiAowMm1@-u$v}QCQB5vai2DiP zoIFHDcPM^T1%)aowrq-x<5bR*Dw?38r&QWRl{87^ma6Qht;4@RU!8`%-b(e}iz-;9 zYQ_4C5ZM`UKmJTxT6#t+Coad;#W6FrAjg)ng5II4J(zsIiYN^#*@~;(zK#l%# z?GSlksPKJK3KN@gRzB>`mV!Cr&zEqa_%I({EtzkKdratS$@)_GxM=8e(W-nea?)}* z%fJ}La*Dwy~V8?bgS^joifk2IiwLeM+#hNGR zpj_`?s*6_W(v`Z^T3z;<#dynE7_L60o4VNkf`^zDeq12K6=7`uMl!2q-J5pyY4GF+kN+F{(9=Z!2j{!0c_w3L`PRJCQsjoCxZUuWXq zFoN@Fn+bN`%vtM3i9w*G=p5yk?xxoTUSwyq=5BF#W>tj0G;2eG-dDqR*@q zd~}vlF5usr^KWgqcLzka@o;D@OE^5k{0k#5HNBw6;8}wo$6w(SA@eurtnoV3iB*aHV+d>dPQdpB9|V^XMq7d( z$2oPE#7%=`CF3Kb;^kwav7s%{NHmc8M1Z{D&GMX;p8&6x&Kz9BE&6gWfJ^&uu$*Zz z%Ztn#IS-gK6k$IyrK;prDtra;*^&T`2Rz1Kk!X`GgMC+@*G>nc?I=74X<0Q)QH;9a zV;)^#5EvIX!D0x!#N@teeU>iUU%Q_tC)*fCaDRQA zgGpR{qSY`4PjfJp6J~HB(uLl&aV=4{LJS#oQ`AQh{7c8%h(MZWGcMy-sts#Z^ooLf zH3BIe87`lx=xY_8QQ>I?xcv_$d*ft7eLxwq5sgo#Fev303uTMMc1!~3FtxG5Bc;wSPqy4$Ma=#8g)Z}coR&5n$kLG{rZ9_SZ=DKg)CJV#5VBRZXhb7U@OTH@_qnTW>>XzWH;oIB^IZO znyB>7DtDp^OI3iKYPAYpR=h@~yra00gdK%mMK-aPg*rT->9F>pB`-1FIK!ALO*1K* z9aNqS+4b|}ZK29WY#)b<*}H`Oc1)Nuz@>07^GI%vXa6ZKn8;Z(I7AM@Tw7a)01|h> zk4|w1735eEK~bT-Wi4U@Tq;w+YL)-8J=#KuMj#^4f+aix$wQ6oO&Qu#g5mPWBQj-< z1c=!FSStS^(P#1_^4Pw!ruPBvg3(c1ojKS};<6WMf);OwF8tL^N->zcCtqRWFiM;3 zEG~7H&UKc~bG$_kFLZ+CPVkbox&qUf07qYG7c+dD17Nv#kc^;k8kOLgolTd|q{DOR za5>Q?D%(XTwv)G)o;X46PLuy56`Z89U&;NADu1VQm2`Pc9+AYI5;?U#7p3rpby+v$ zHSIXMjFT?sl6)?@m+g?~VHgc?9!l{iZK6apje{vnQ#pFZW=7;MvoJ-l%Z{{8?&TW$ zx#PQBqo%4%R3RuFmNuZK*R?@Wi6C+`R8fXXidEx2h#VJUS5$=;D8HF%n5D8>t1cMv zcT*8efP1TgzN+s4l|N8t|`NrIXIe(Ozf0po@-r>7@g7!7vR$lUJytVjYatG!BKO^~+6rO7k>5^;sRv zwq|$!9PO{w-pe}vHJymj-UcldI^3fD&D!6j3*OfLKHctJeeNCIbhmB=Rml6={6io6 zOpiLOQx56IpX&Kv=uQ5a36E|K$Cf$ zX@rG{{&b4LI3qyb%B#dXF|=ZkxWZ}hS%l1A1szq8uTHfVzk_)Ftc?Bl2P7CN=5g8l zgd7|tlM01PWH@5TFmAx^ilS&Yh_bF<*GMxHTxe>vHfB7GBWzj?09(0-MkX?fISpn= zDi3;+xvDw^Zyy7@be)l*GaBjCG+n)kF3Z#%FVJB#{YQ6Qgv8-Jx?wvL^s*E+khtp8rMy#nSz91gP{r|xi0x{ITGnD1pl#r~k3rU50Ub-b~; zO&;;G6^F{h9+IoFuY@u}NeoHzfTZh1_Q@vawk_RWWL_ z1ZAqyk73o4vWF&Y^ zmq~Dy$Y6IXW!YjaO=St>%BBRZ$G8fQi0v zh4#T#axI}Q=xxuSvYSl)^(Gu(mZHG~KC{H|3np`!DS>U{Rx@gY>Al$$R+t|*nIE^A zQ#;J&UFK(42oBe90N{zHVjjURIUFbN`06LC&fyOIBWEQK`p@N2>SZ^?4?-V zLPA~k8nU0tAncX?-TJ3N&4kijiE?M{%s%&3aVT%@FSb;fp1@ zL>QF-YOUMteS~}l8CyAz2#vP+k3of{zDOM%Atmq`4VPCuaef^G5?zx!VprS8H&Qb{EyaB({i2bW=H7LC~C}3|86L$WC zjGZ|^r1-to^$RrAV4f;Cp$b?^+Dq6?I8UUz97hZAr0w8jt_Ttjzp=Bz1#xx<_EEKB zYrVmOnO>=mrfZp|!!jMNvu_&?vCBSbe&8yOB92++r|f@j5yDq~lL; zqNg2yibKyhQJF&voM^T+jf_@1{u+nYI{bZ<>8v#sR)mu}s zR4fo#D6&la7e!W!w_c)+*18HF8vKzJCq~EYBo1!9p<}J3kdG5)>JUA}#kv%vuN>`P zs~Hz_uvRx~f2g%&0aje?HtpZ9qmi1?+u}Ooc`VWNq$WhSPta)-HBZ;M({%1Ly85%a zXr|7>^&@@#(q1OI(L{r6 zVkx*5Q7VY6#28-RMcxcc#-n9KD~Q$-ZzJAJ{8kKXsmpKr7BZZ*a+LD%1l#*pps@PYNetM3bztRWCa}UMp&(= ztWqvowu|NLCDIcz?T+$vC@yk82a7k%wzqPp?7drp`^0-t@*WWzX<95^EUGm^RO=j} z`4;@o#1LOwo7~<>y11rhaMbH+hEWMIzUOVN4I=eCw!#UQLR%9ly-+X4v6%;`!D~oZupUt(~Z*x)ZAJrKhm1el=LRu&A)00LVFe%q5QdpHV?Asr zX;(^cwHRz!!$fcl-5~+eQAbL5q@%8|tKA3w`KIve)_M4ESoxdm%C`nG`z#8&#MOnh zwU?s(TH0%(b-E5R?Bd68B&nHhh>E3+H6P~7a1k_h)zz@|_0ZlZZPQW9v^=ka^*Vab zf(Aau8Ao+tEyExT*Ea!@ku!{C3&&!SC!xFPXKDF@>o&;v_gXg$v>0KjiJmsWR72AZ zSnClw)@^p@40nM6Ya?L5RB?~lFu@SxZxkU36xE@iuH_3+Q$i?Da4AVU3ftRRfY*(p z+X=*L0uKSg{r;SDJ!X1)wpByR_DYZ2TP@}@x!gDP82Yyk2%4D6;8!{9rx(6lv+G;Kk zGzLOlsnOV82q$0z%}w<9#(L(Z7|QGDM(q#N5wLqvReIMwA1G+6Tb5l$n ztbsZk>2Jcm_Mizy8=%LaLldg&S(ckrQD$V3(EyrWHoVP*yG_Y4Cq#ne_fB}mPTmO! z^EoE~lmgBe=pVI-x>9x*OCkcu91j!%(_Rl9jIk7Df0i}&@qvz3!J!?^;cjN^ zaC;eNOfjiXn{bv%TVVnJ^;^sZZ<`EM=HLk+<$0W?;`r#?=Mk63LT1aX6)^VvXa!~L zwz-ft?pe5^CWrMbNRAjC&{{&YqR((No1-$0=CQZH`cOp+nU=7>jDr>IL$I^lx}pKI zlGPj`6t$zMP9j|-0z&c=q_Qr|sA)L`8%cH${Xk`BC?TB_I&#;EOiwZ6H9-z>B!uNm zHFR>;62Wh(f4s*U4<^T%ppHp{BIa!qoOTFYmuyPDlHw3TT{{+(5X+&SmTLorGai;O z=2GQ<07F6(isQ|3c&h_S7&?piNf6IzxyeLBO>~T+>rvcNbOYfK0f*2(4ctkkI+{K0 zRkLm$5v;Bd_uSUy)9%Is61d6;Lt@O0c=PuhoD{mkgoW%?i*dT(DS2F^aW4|=3Aoxf5n~4! zMsk;JvBCT#7-i2P|0qRYlN_^%G1p;9MtR6b(~w21famaF6otQ(lp62WYe+Sokhiu*I0V+FEev zwTiZ@Xs3$aQ^7Io!OO>$_nq=iC_!QTgTnMIY$Vb|{3|R{fn4?UI|VxudK~WoiF;7u zP;S9^_BlK6L#Ytr0XZuE*Ajjw?zc9gF8-8wK=QSHSaN{5)v@qSjSH;B4YH(RS8_*t z-KB%}+iC8krKgq=x^B$WwDmoD-u?R82X*zBscG$zy81)9=EK@6)*5IJMyQi@wJF+1 zhqBf_{$8vkmd#o~ihD=PK3jt&e4zO=?H#rO2S^eLVaw^6qMAm4^3^sW1_%9&TxWQs zp+^j=*wd4Z|FX$@%`{wRg7v0#tQ{M=$26--q1-`%ca@!VhdTsg9c)v<6}nEW4cRtaQ@QrhQ!LYPBv`mZtAjfCn18lwu2~5WE>DsAU@QcPw>OP169t(FytTT>g6kOFP5nRNYl$c~G>$pUyl=7-8 z`9&3@#)#LY_vmP~X8elvz*G%%g17~80fiq^@CuKA6XY(HvBO5IbAq+r^&ZsG=QaQ< z`B&F=#ACJBThkzby;Ov!c)1$TQYwc?<#gR{j)vz?u-)_q|8}0L1~}^_PCJW|i5LXV zz8pW0-CNniiHz@zQ-mkNGmJC3r9B^6tQ!^RtSI)dPA0>^^D`A5Qr;P)laLR&-y&Tz z_7#&6Z;(b>0VJ6|YpG$PqdIVGN@-DZCG{NDg*VLM2!H(6*>E34Re$xZQwdWY41zy* z0?;_Wbb=$+*W#Z6+21cvK|7QyJ2=ecx2vx`Zu?Xx(Y;om3L4IVllU^4d1nx(3C-+-NPa&RaXP^VeS*$yN zs(Mk3wg-LL66VEhZR%4v?PZIB(4E4iBD*C#s^v?aHHZBWf=YXX0z4*Xl;2N)F9o=p z)vbUczoG32@Bx?Nh`)nM@1|_93ue;jrR2X#ei~27VK3sSh>Hq2znJ4oxGCWGv5XU~ z0toz6`>4XJaLja0nZW{j>p6B^MOUh%UMg<9RZsYn6aw#RtyA=-qTNkrMSyu@r!BmugUjqr7=kp?UHd3(Cg=zV_B!m4=43~ksDjFkW}Dw85?V-HA6Vr1 zCmaOlV9FMx+2^RJHF-~x{}lNX3BljlF5en&(XAe797bF;no~+x#&XIeJ3C06$yu|x zWIDH-!3jW3E3DAF;u=-@lug@7d|r7=RoYsWjdu=6v$`}!Ck`+(TbeAEY?z^)mAH>J z<5I)M0Rwk{T7zv<=FKw6vyH#RD4>6DC3b$$&e80s+8 zD5EHVEUPO^o}CcI4P?gFSH|!q2q!B1NVGvEysg5!EchA0+44J~+B({y!=2dKtYit} zW=7S~jJSo($dGsr3b|}Kdj}XUbKYWAwAwmkqK)+&4HNlD%+o8(d3y~tcPO1y6G}nx z2F1sN6cky1R1oV@x^P=;&M5UG_G0mo1P0V>wo}(q)e#W!d=&u}UZrS^NlPBPU zq%wElvV1#u&Fs(7Y8KeQE>wQ3kn>ikvR72*8kO*xN`FhGKvvmX1n}c>abFaFr?`8h zbe}{Y34Z|It>mMwJ1k*WO#`)uD(--0R83{(#0w^bg$@elmJ~itQbe+t{5`5hfAJP$ zmQK=@AhfKENL__yel*2rbvtWS&t_xsNRAq0fc-)|^_Bw=MmgWlfVMu)|a;&*- zu*aax26f**?9g$CzHwj`MKN|XL-=E?Fa+uzK{Q)kl7J+`BE2C-#^>7|i89FtFB&5Q zG;Y`0!b}Q?h7b)SZz!x+h%_Kr>nsXm*a&0dD>=HB!(Mh)j#WoMPB2(}g$vhVyXKS% zPW^_XMYc8eUQvwD@Y>>@Cj@XQlrUR@{*pc3YK_wuOSD`V>wKqG&{W{+eJ2$S?4e0J zG;4J-Lb7i^J zDI4bW{cC{l`;LFo8aL4?XX=km&QH#vI@X&dt}YeDyjhZB-YjK}?DBx+Y-K}AuQFx< zZ5~xtQ%fPpew?V7d@SHUOEQbEk8W&9yp1)mnf1|}_Wytx_| zHT!2AZAo*!ERX#d=ltwnjakO9TV^TZWB;^dImGWDvsH%gER9LS(sp?kwuEh3`V1p`v}ZE2R>4 zE2)~V&^%D{-*hD+M~CZq|1NbDPz;>>vt7Tl8|1it7uWyqo2!6q42k6rZm(1BZ)e=A ze{wT_besOwXvH;;#hD*q#)xIs$voJ_+!M1~nb*z8Z6+9Iyjx8)-0)yidb^44Gv56+ zm(vBqs?02%XHNagWu^C0(_oqT4dI(lK?}y2vl*dpA;=H4sq!Iv_h}LZ3uEy^XmW-4P7@TOa>D3>vpvwDqXo%KV8Dj^;u z!(A*;BE*P=1qZp}Ar(HUWTHJ9@)xV_EhTI%@mC2?7oH^%Xs#gA1F2hXPbhzl1Up3_ z3B*yAt{LpR0a{jSxV6wvZm%ERI4~)YsXE+()i6Uq7F#^FxVP*F@pGMMn8ODx#L8!E zl(zSW!$8>Lty(isR;r1{6$3i}Zb;P(8xS}roMv^J5r)4_?HpBb2c0>+2j>msf+7x!nQ&r0%i(M;#G_ZvGLH)Z2rTE67ukD_JO8N=OI3-PgkhIg1|D*635s0d) z6s*74gkSkh%6_-r5jZh}71k;_ZNF}Jz`AAfG0jIb!t$1$ar0gCew>-t#*FD;!kbOX zFf-y7yMNA@WeVn)vL&Vw4uz|TyP|@%ia){_Wjv*zLYqMDQ+BP&GP?|<8p{~Vh4WEc zu2$YEmHUv4m@R%yV?DIH@bgzP?dRYqFW#Wq9>F}(1OU5w7#NbIRhVd#iQcj$kj8Pd zj4Iw#Pkb-6Pe^b|!m}1LgeJH80PTWf4D{wlcl-gZpqNGtfUo^Iubg?3Lgw0k(r*0s zdkrjrIBV_rf6!|H-THq;uYpDb?M79v0bF-1soGRlOyO7x-(qi=p;e$(_%l4$-57# zRqPeA-qq3j_9l80bz;?0y9 zEi-rU=6q z{LjlO_YFm-lm|CCu-uDHX*D~SL7=DL>6Sfcrre9SqO6O=$EAg)ftT0p~Qgr91qu3I?nAp(>cD z2xWh5iR$2*i;tbQ2FRP1iC2`1@x6_Rjaz28gGoi#*3D2M$B*HPv8*Sm!gAXWQZ?b) zQc+zp&y%2zV8j_-D>Oj*^he~VNq^21;rOU}ot0)EUTT-YrNGC>ONFpL7^k{}Es3rK z7sO+?8b@iI)|{(dp~CAGm@USZ9o7kuGI+)~+ zhEBODD5n}w^`%xw7{W9a9dzshCgb%FSnts4=+1Gca6NJ6zRtxJ9Dd94;%LPni_E&W&D@0uU@uNFlKI8v1Vy^sg(l;5|bS+TOr6 zzdGW2=NS3kEg)0T+-Y}lEV~5c(k{FaBN%X^W+`m2vPMx$ks&s;!oz-kwcG9**YD-F zyUY-1DzokQ3|eN4<7K-kiorhKCmhvM!Rv}ZIRjN@v_+7bl#?u^a3gkdrcby*Ej52R z7Lo!`i5XT<4CRF#z|kxf&Qx@{YcXVu;rfaW1hW;-QM}zm7h6~ckTp_eaW;kd#?JueX8WM8^Dcu#0eo#p*3<3(ZbfYX|3dGv0QSjf((myf-sOCo?#}f$6|ia*PSo8URYhg5=@|WdTRBDZ;&2Rd~K!m@#sK%w<++r9tvMQ?x7#fBV$-UbuDAx4G+2DidtYASc`)&$|+7_{@G zP&rJa_~*&h0QeZ@T0tDQs>#Wq?$=>}zfnVua_#ONjpDdxEtrp458fW$SVCRpw^9Ud zEl!_t3Y8dttg=2;37@Hy&sD+^nFb| z`Ax|=C6y{2b9{nnJcvC~P|b>VgDY&h0idDoZ;SVqc)P{hEB<~-Jz%r;f)B)hPv{Hr zj)-?i=%nT7dZ>rvEgct3!uVD?1C!-vb@-OGl?Zp~uJ7u%-qG}_POobKL8RoF!=25+ z?xwi6Nx3PO8aCcM1^XQ&N!8>aS$to-B=OD@ue!kHz^f}^eeqEXrHR*6!c6f7m~O3f z?f_G_l`a`zh7K@K4=^|1OCef3BylVtnM<^YqUSBtgNHZ5174H!l9-Y?tYZa?$DrzJ zXh*Km(;Pl)cMNX<^Hz}kR7PFZ6#G~WN9?L5P?sMdEsPg%1jA;2UA2uPWP zfT3wXsANGfRx%XDynKjRP?)(1TtXQo0T4jp6c(Mvsn}04@B*tx1DB_X4 zMDiHRNmWH-IIkKh3P@WG?R88C(+RakT#n*Md4QmQPWvO|;)60PstEH^`&FbRTo^>A zG>zXd;4(Q_j>b}_8p>;{1hA%_*6wr0*sy4a2(=^>P&q(SQ+2%bXgAd{%}p>iCd~}? zIZv2el0fZP&IDN}KC2@#b!HDO3UA`?lq?B_YZP0BPg$0eY6+gjjPA#+cu@*OF9?eT z^~4MD&*}Y&6?4OgFYay2{ojfOAOEjnfuv9$hy@|J(1pv9|9^-DC3~4|p5RdaOE2hW zXdCb{c&`{vh=>Iv-u#DH@XrB$dARR>zvxhA7V@OjJ_2Lp(^DI_NZep8I+Bk017j{= z+$~uQho_73^nt*v>Jg+9j-bd&EWWT=7+gw;8fHw3r7i<&^bYcq`|g zHf;{yN2vHn6)R}Iht-T~iXYUnPcZTD!`~=gY_8#v*?IcdPGM~A$KG7>phR@^8EK7z!Sm_AJ6X1FsK9XUd`Vb)f3 zx1&(`X#B{k?yIg6!rXsv}uEMJI5f^Cd}jnXbu!Z4#) z>V#UFwR1~p5qbmUf}n;$#t;L?&KLn1qak-JWPAptCz{Tn+$oUpxlCD5Z3g7#LeyMv z4w&ql6K(}U5JNhOKSU&P>8q44MQj9$C$m@-x`i=QmH_g-5K3gM`D%Pp961hyhY(6* z_fptV2s84TD~GkpnuCr##9D~|E)t4+P$bma>@A@qR_Th)>-dbYP$au5Bh4x^Y@^f$ zZ4D<`kSUi6UNd} zY5DQYusZlr+EIhXNPUl#_`E=geJJ^TYLrD1;(loqWl3evNGkl1c|7Ec_K-C7NaQNq z(IcjMkYQLR*e@u^rFF~6Uq#*qDzeFJZ2DXz=Ngs0VHEA)HU)PmxM#||WFA8?9uWtH zBpb*a%^OQ|F=_Cr!Q7d-69?VRk|(7HV?V~>>`dmg2Ms>|uJ57mSubH;##ffIFU37S z8iIr^#XXz3#U}17tv&mAqDV_(MzYk8tegl1QL2JWT2j;Vkg8TmWk04=?QlVll=3uG zS*a>EO%3@^3r{D-&#Q!2ROVaCe@8VOU?M8w?~R*i?h7zOIbW&JY*Vu1EmqEdN_PHH z#P;8db!0M>)_`ql%nmhpml;b?s&@9MNZB^zt3lzE%EaSp>PZFivR_wR(dG+w&jNeW zC42K_`}gbi8#isfV^_LuPr7AK3fYq^yfKw29F*is?2b^rSf5 zyQJyasZq|v$)#tfMp@k^LDxvs$rbgaBz>=vZu78Ctfp&J*EMSB+qLzYI(kyFsVi+G zwFQlJS_7TXNC&=-OVw@@ozztO%`~U$J89Z!t?#xpbFvtpqUG!MgehC}GIVqYozhWf zbkS*@^oXZ*WM`eyO=mo7nieIWnABT~=Qa=qZy%lUqMrD+-u*A#F+4h!$kGYY+A~+L zU8+Yd)1BAoWvlh@pY+@mEsJ_FSgPC9y&oowpomXoA&F7NF|RDfdS-8oUn0)IxUZ4s zV$H1>oW$JIIQcL9^Ae^P;NYvc`8viR^|vWDiq;gPGy)N*`9foI=fzEUTYLw@0j$qZXX7 zyi-OClO8=$; zF(DrPW`;G__gM_}!aF^1cyH|d0`BRDOZwo+7qQ99c<~Kf+aCwLi8mxHIRIyVfM*6_ z{Vd!kO9_$GMFo}ve|F+$-__z7#9ca3O|j z99fg=KgukI6W?4Dpf5k)pFfpA)4O5eY?YZded(K%t66aq@ordGVI2kUn#N)8qU~O= z1$nLHW_Q(&QyOKlAXw=l8YNvNWa-DuJu7IVQTCi)=z3F(+9k5GXl;RnCce>1u2c(j z^ghYW1-xH?-WANgjQ%Bzy^2YHW8^i= zyN+{j;M|)y@D_&dpnDfn?qhNYJ&SU0W089p2{aoifhm_LSFGw)w;?4;fJZDVxgK?G8xa;z#EU@=5evW({9kHe@haI!R3$hUF{rZ2^WWjO2yeDO!Dwj5(u7@;Bf9^+S= z@-LZ-a@Sz3wHV~#s&zPYJ)RfO-e&Z+VAKW-{e&&HVzuqq>Ss*afp>Rdv)$ ztj2HEw{`Bo_h;aBMN~cfiZc9+FpugUK6!w?h@N0dE1`0p4y? zAP`!sDo~ObQ__Uf^Mpjlf+fxwm?tz z#-i%B4BPc(4;;qUNfOx?$9^|-pGJ2U4*tpfh|>O(bwg4Z6jUL8io9pdP8FULk&(DJ z`I+RuK-`CX2@k$P{%hpFOYVEb{~~FD;eo_&5x-CTA-x}vAh~SG5)P;LWz?BLpL|7$ zvng>FB`%=Ed6YAs;=iTDB~)cO#s5f&E65eKaW!!s;YI@n6iycl{boDiIzs^!WAT44 z-<0M}>EDd!AmQKrn=SaERxAs~;3<|JV3{R6Vi{+zcnD4-G7HdjJH!N@j7Q1gD2`CPsnjd3wJE(|1hWP4ED zBmrebBZl@7Qi5C-MJed({oB)BmdNqji%h2DTpH*};- zDic8_jU|{OgU1Gpkq2oj@-__qUDLVk5C(rB9>d@arbz|oCB(m_t4lb>g7qcQDSWA# zilSZdl$}IQ6-pG%q7Jb@V7i#+F!>isIz;|q11Rv0l6!)JljNMD;4FEkg}7)|9L^aE zE|}#2UNjiDXfeE9Blju=Hz>G8-fi;knAQ(3L|}0Ma{fsWmc2skMY4G3NZR-0+btVl z$$AWDce?qA%dR+kGsj=z?1FFy?qyR!E{hcVKHDMALX|9tUQ1<@TBy`uTdi|crdFFH zR8%1oi<=gu@+v6(nA%uP<<(KUMkrf8{og6E(2U%!^7g4uwyDK(w(M7Z4k_obI&;!^ zI77W{xL`{QhI`qTkZIO+lWueG*nG=&L$+&cPwUhO?H1OhW3>~bJz2??&~BXeOKGp1 zcH^~IRyzsWt0>+o?N-uGH4~loYG^lEPpYk5aktjhl?DCLz_cpJ&Ns59&J#Dj#NT9# z9?o=c?X1;oMUY6Bsh}G+eWmsNM8yKdXnGpJ4B%XVIS`UX?*G9livK)C_kr`^Al(mLe*-)O zF~0-;VbmEs40z0V@SM}8^3p9ZRDZk%cvb2Q0Pg_b1J^?Nml%F!Lo4ss%i;H{vc?Y` z>>hzH%LO(HlZ#-{LRd|3YB8qhSr&kT{qHVsnTweZUbNB}Sqjtt{h~FL7p)39K9)&E zrzvuCuTbCX^x@wm3nVPdQB}FOm53- z$NZ$Z6!-7MzI+9`u*4+&7ub=Qq`ci9a`2Ja#^edOX)&iS;bW`#Odfl?4T8ow&5>uA z|KjH^@}mV|cGErP`@&yWVzmCKu$mC1vWlv7SEa=$_n~m&wSw87N7qyZ(nDHH?R`|$ zsH5&zGc>2@da836;P7q}73!(HmyLlRJ~5jvT%>S`a(_^`N@1P~)+yX%$PBn%vEUH5 zsjfRrWghHO>HCdQp>Dq7!-nz%$5i@pajGc1qB5?lX4fSBp**%h+mK_!HG7YvhZL60 zvrZBLPQF?7b+5oiCZeMCAaH<@y=cS|6~iXw@*E%A_idWK>7@P#*OeOOso zhmKrnWyvg0?=R?!bwnOi;n;s`#094c&lCsp8=UfAL9}KaBx$Iqp^^@&X{@eg&k4zTL~RXqG}O~4 z>*}DsKJ~a>-as#JsP8n^%Nyw?zFyTt-%Zuin`_aF?>Eywh-8+o3tH$mTk7+z^rLMw zKcSDx3Nb@3Z>L}Hpx1WP_dDtCUG#Ek(dul%yxqI&54!1lPwDQ@>T}QORhj1TSlLT= z@2OXG)s3XxV5;_|RZ}_+9u#XX)xMM+Yz{Xa{A8w@RhG3Y!txx;D`fdmmRrPfidu5Q z`kgH7VnJsMyISs3R>ad5cek*c74xjc&sg}J#XT+PVWnqUelH7qTkwL#eJt*4;q#W$ z&l>TP<-TmWFIvt~D&gO@H)L!m z2j3<@PCSgS0I}lKstENeL5^0-7#m>nFyse)F;k3vj+fvUOEE&;4%uw1#6EI^+lVtZWB+x=QpE=`^;azP8^#>M zMVIlBtC({gSKPocH!=Gb7QJJ}vtsw~_uB}X234Sqb;)Z&89o(hM$yd)x*IxQnI7hL zAdZX3cPV}V`2z{wr=ue%Weg1*Y3w48b967SCF%ozS}^d%@n_r zqIOZ@&-CRXa*q+_Q}l6)zCq4i%D6|l;uR^(QAOA($q6FJR_DQ0Ik6qv;_i^X$hMp! zY3?WZ=-Zr^!|@Y2?Nk1IK4&cA^u^p`6*t|^v3nTKaMU>to#xel@}>(MI?w3^{Pjit z&{hkIsDnk77p=|~Q=t;-2dUF4t_n)3P-#_H;*Dk0nTJ$rSp_2ES1?MJ-A)zDP#;T@ zsGmCdl8Sm+HG4%hepMBFP3@nc@@5)bTPWY$6GvQ-J*w>%vN_WBi`Z^OJE(6vtxa=Z zQePXTM5&*RuY{|VUb68un_so@b(`O?p}&o9+4!dIzHQ?u8_wIZFUq(e4qTmP>1(7t z&=RPTiB4eP@%0VauX{5+LYRJOX6G--agc4{^E&AT9lWLaO+EN+T_szmj??Lrv^zzA z`h`9@RnPfaPoArPns4yw-Zy&c0=;0V9<)w>_>(ro>2CP>FpQmyS-ws?AR~cFw5(th zWJn=qW%A|wD@wJcvPfk{n446VK7;<##YBK8cMzd$6~pKl%y5m_ zAX04VgK-mzt0HmEz6nxPflSBdEry`CL)&lPxFu8-_(0wY5 zxX5XOk87y0g`pWl_td58(VG&W*b8NRjFPy7%oPU#eg#-bl2;Xns`m_|cs_?i>;tRk z4$9m24`*fypKZo+FEBRC2%GEZ^fYa6CedEy-~X%FH{S}*7<0IU?7SORntT?e+qVcT zEp7azfgD!S@GIUh2_FpwXBb3`gf=4}ayZ0{0x>edXb5u5&#~q+xbYSAoDEOUfmU-N z>YH$_^N--J2X`y@TcGR?aCV!3vlE_*ont_Mf)|PTg^Z&nzC0#YM67CtRaq=>Q>@ep zM?8(`Jjgk3zkFuff^)uSmrmb?;F&!b7@2`bR{GNwL8J?c{HdK6io zoCcKMh;kcJ!{!w9AXio#a(umScxxp_lB~@|z8OEBM5^X7Wa0xKlm7|9rxZ*io?-w~ zFxj-01Y(z(PJ#HQrkVN%i5tJTf?$JLUu5s5nZFW-Q;K=FsK4aw?vitl{QE}J@j-xW z;*bI8tm37mSTTLe@E;ByH!3y}FR{B28FZyl`$6L+~EbPsP1xn3m2=mGYCS z9M)MRy(o1;Jx)nsoKh8Sc+k;&)qd%c9b;*qw4|J3i|U?I)*N9_U=!kXNLrg~=%ICV z^V;F=X7Rm9eRD%IZMvyuz~E*^c=g2ZBqh#b3}|PdVL}m+fg$!4?Y^xYsaeU@8@_xUO6QnJa;q5- zd;@tRE(Dl07}K+mhN2%f9B%p?(>c1qe#obAP07$a(k<&>~E&SH7%|1=plvEI3Vpg)t`mE`@GBx)xyRMGFEm=KGNu)PXo zSTC@h2GX=>%4_7w6Xsz=U5pm6a9Ct%b_n^HajFM*1>$Np{{r*?`H7qAO^alGVL@37 z%1i3g0?)#77M`{;q~+v-Ra0^?S1rD7Ma7s#r?>6z`elrl=7Z zCn4E<^y*UHDq6or!fy0KVeVLi{W*M9-iTZ5-{l-x`pNCAvkE$?yjRpG;-MAu|57nJ zD%h-~T~V^qlIg=l8!Fhc;ddXlp^6QaY^ZAcm2F6}p_(0BvgJx;5<|ZBBp}?=G&oB^ zc}$kZ6zv}o6E8b8SpHwIlal|U{Pm`7#5T&c`Mb>*I0o?{+I^Uc9iffKs7gM?AE)>e z6mg!qouSCTDB?1my+W0*Q_sJt;YBWaiM_i#P3{-+_bFbT@ZY2a4_S22zwEehnXE4c zt)2!HBiK@T$JYrvS0Th;>5}Ld$3PaU54Ne&v?#(TYOkmE&RdJFTe5PYv9NWr*)WS8 z&bR>|GMm7xRK#ZJy@4a;NFRqO;X)i|BKo=L&NS+wae~PXL4v5?V(<+H3(=S3T}TCs z&_8eX1O9`jNY=T3a!|l|w;3Z;OVLn%R%3Ulk9VssyVSQb+sK;B5;(T@BuD9(i%+gB zwaRHHNlQU(W>cLf#>lqX>!@R8u*uY-Zpbu_^7>B&N1#k|0X@viLT5C>C{u$Hi1a@O zAN23Y*GJNnEbsno^k$*6z+}OsHdO9|AbR(8QTWZRt@1YIUpF0R(()snI}+bZ_x0x1 zMxynf*3sQ`PA@$^MZ*az@1*6Qwt_#cW4A3?{#}lPoH8&l!L&GGB?Iw}Y7JVj6`cWl zz_I?|jRSWA_@96`7P`u-F%$f`5Hk;|e+`#cfU_SWAIuEDnQ(Wr@Y@<3mZ}#CpqaNd z@eCxKgJS2wzX0w<2(CcIYXGvCx@0O-{X5{@1urCT1G@LYx8#^K7K+#M~T=`p=)F zI3y<^PQ80>@)0`d?C=e9SCnTLs{zUS{ zd;A&wmyc+=u@d=H$(=_0g-Lu!Ko~cXzmq2JA=pP44*kIa@_(aJ2Pys*g(6ri)C&sp zN00LNVv3d&SY2-TxZyM0d4ebQ=0w58h-Y5tk>k0^Vy<|E1DW~%WOa_?&NE$LDqvUM zBguwbX8#KFHIDn6zm|l^b%v{)C^?Z^9NcEO!zmIN3B$5#lu){qg3<~fHhUh~00<1k zOl!?lvxVyFGQ~d`i%#TL)%Ac14yu@Z!&?Zd+F5mM=Sv&s*l^Jf$tuRv3H9~d*5>o) zO0j7-9Xzjt*LD0W+7VdU2ilk5u)t$K*X|@;Y>LL|I+&roIU3jLI1v-CTXISD;HFvTi}))lIp32#DaoGH6IOtxz!t+lInm^Z$Qw(J*vLzeCof|$g525qXzv1b;zkjFV!V%Kwe{#c3MxISK+`{`VvamKyD#c z0>g<>CFNirrJ^UAJ`p*|S#l-Ulp`X$e48%YjvT_*ZBOcD@7Q?Dc0#uJK%{oiDQp%j z9AlPd(%9?Bk5x*$a`?n+x2)y_?N&4gktwCErrql1aBymCr;c{&YL;HV7c{@B`8Dmn zuK8u{zNwvmY5#rgy{GvD?S80({sxQ6L$y0hV|az`jnw>+=FytRm|`z?oaTu-n522K z=9M~2Y@QQUU|Gq-%m80F$AsB`4b%I*dKi(4c57n`mvopJvnQB9gm`@;wqp8r^nbzB zedzyzi5Dc5lSDc4XDGtAxbh~kJDYhWP7X9BY_W!-rU-}Dp zznaB<&VL4;1K{LC-U-M&1^g$tXCOt~Xx9O5gMUw);OPC|$f+`BgxXNt93K2l?q`s(i?7W%&&hZOjQjqL_pHIeMRA zj%W~*vCu(;Ul9+Z|GRlm{iCK5+BuH?DfG{vf7aac{Bz;?;V*;>=og@W4TGy_Uq|-_ z!cFs3`xe1%bnYPoi7U=$lGuXy^iUQB(UcQI5KC@x1Aq2QQ4mL7JoyO%eImaS1rL+p z7X9kvS2bl5er2h&ra%yLb;zwnL0y6dQcg-2 zfh(pSwPM=igz@Ms$9i&=7TanQLw(0onXw7e2wM=gmc;@|(EztI1Yj0oQb!V|D~{p& zVw2d!C|0HK3ZwQwJ@t-(X~mm?C!d;c-?!M88S3ocF`Dk zW?d;E%DSTKEdp2rJvM<7#VvdX!T$%LEd<_uBWGhjQ?C=qK7TK|;;76ecLgPjXL1eM zt0|O6_F97V^oRUGiG^|t>8*s@C}lg@>qxG=C|rmfP8!F~1TOqBM~>&nPdM^Z&Yi?> zP3B&obLuaUGCv;?n@!95NYESOAQ%nLHr|C*xY5u1s@^3-J7Bxhq5D`T3G_E)N z#=-xPLSFrk6arR?Wra#x-a;#Bx8?qBZ98Rk{>$oDU_Jl0RfV8KG_)@Uk5z!rE5a{= ziKq@8YCxy@5ZMsy#_)0qIBgAOIxiDiJr7B*L;JU&xa7nG*f`uoaedil=K#zCPo7Wt z$xcEZ<0n#zR0y}0z{bV#L}@%y1_feYsVa_?x&a^Ebj)gvt6SmLwm7OQ9{K(Am9aSKe5Y5%D7Lq15 z*EAleya}quEW?IcD?j~DYPF!WepAIxs?=+W$JxBk&b?$WmV1gk42c?Q8X5gBUq`pm z&D!eh_WEdNy(Lq>`kDq=Yh>#aV%Ymum;K%}N(d9@nknQ4h^p-73xh% zeGN{{m)On`a{eN|PAnJ)F>BZ2t3pweb$x4&7f{TLoYL0}>NjNTVwu%3%a2l4g{1$w zxq>zdd#J?c6~CyQS4{zgGf;g!Mos!ir3<-brh%Tt{G@8huXEWha>9voA( z_2Ux8Y^sYl)5)#%%@*eKC(H1q-OVN4|3GgUq;s=%Xr8v`Yp$S*#h5~+eA}!Ma^+&a zhGcane_~l%l)XcFlCYCo;YpQrN{PQqN^|7IOX(@u7IV$_)*Gy!7~AA1#wJ=?b-Zwj zO(r4;e{G}Xw)iwBMp)$>Ye69^I?{5YtWJfkOQLqUR&-G-TUN*KTl0=uC`f_hR_-xN z0xcU(n0jcwW~srZs?y}I=RwZb<}8i+1v2+S*8^ck{W(YyX9A#{@wFn*mpgkr`ocwQ ziSe?C?v7hzM45_@i~1kFt&6oaQLeyC@z@e{VO&(gd2auSxw0IjTtXi zUeA#`EmiDZ>xT8 zr!d3d0-SFQn5fBCRUm&ddsS|}%Dbk52spwmPG|#tfa;&QRIKRxRaU%{uA1vN!0abH&OcN3__gd+6+5+UcVsx@zYG4O4XX zRIR_zCuDnrRyR3yBP=Lnfn^OXY(bO-MT|NL|8KmP=dCV%t=xa|Uglcg$8NMnHVQak63d;$;sU12UF{cya1CEnCng689yo6qWgCDSEmSB^msKZL7 zT8YC~;Tef9ZAM3)(u2r{kPe%aG5jH82Eq}XaU9{4aV*1G^!`LRhj88$>0T6fSpmW| ztaKgk-@vv4sJVr&-NDv(r7f0XEeQJwia*_zD6I3-0NvKRgGDST~lCPA;Qp4J6AW3Hm8WA)k@X2mw zFgRCxQ5#v0gfTeXdz(75dhgPpfmC-u7=|MYlaaJ;4D}pKk^h!TH_S05FToNzxq=F< zr5=LEk@xXGc$^zl`4&aqrpP-K8HVH(y-&MBbik6@4Ng+B)M5d1PI0(oBzG>v+lw$g zK>NdnIigie^Bv$6v_Jvr-TPJZ8XF?c!rvp~4QOeo`^p)tqh0+pD(kQBk{8tKU`sKh(V= zDs)s898#gfVWsuBNcvC74X!!o zUx0%FhCuHLkopM>&N1sp$!9H^1CG!M<^wK-NU_r_2K)|iDb!mA-j9H*z+DHWHvw({ zN$A5?2(|$30C%^jnSgr%#4Ps@qv`vM(-nST<1`2FYn&5_k450U!gwn5~mf%wQ+c^G)|LyqKi#SVUsf0s4TXVfN*)d?_s+Hto?|A%Cl+hVMK5GBX@HR@)@%V*oLLS)OKUa!g%;&A!Jf ztMKGXJhNKX__%K^iU4V^!?x?O^Jd(-32`HC*n%fFU}G`SZ8s*^Vn5^Jt?2K-le@6R z9-Ork@fRGw7bhM-dmj!vh^>FcdcR?OSoFl-O<;5VQN$yd8WupWoWz_Hc;+}ZKaF?_ z@hqmC!D4@6p>v4mO+IDY1uS+Ehlns*fVK#uSCOxo4!Cb`pmWo-%RT65US!eM+qn52 zW=ake2^Gn|vYEs&TuGC_)}kX!G-G2F{a%D>6{Uz`gkcpmE0*RLCoDl&iu%M6JVd#r zDJV%}%h4>4zKo|s2^3L*5-ZZ^O0@A|a;sCNs`PLY6{$ukRcOc~lwFzNQMpP}w8*bD zX+#}bR-0x?$>Za6t^t)6mv229(THX?Bor#RAi+N(TtI3S;cDX&5w@OQPeV6Q)HW(5 z_l1k{H!mq5wu^H@IYE4IWOWuP>XK}R8*r!%JF*b&z`0Ly837;l;!ZDc*B3dmpJ|17rx;9DI1Hn$aUL>9wGye@~Gj~U0y<;N7;d9o-I_RADz34P2lu}uM91>dr>&>Voy z_Z+i~qnDZ@Fh}IqmCTz>HUze?yTjl&`Df-`>`2CZAG-(GJ;=^49Q?|$$C*zuA2YWS zsS*e-aThTeUgW6DoOZ>u{*9DH^bNNE=7v{!QFsd{(%aK_d5LV{EEVf0-&KB;sathR z7~}fLhm~7Pr6((RR3%nZS%Q~utfCvL#3ssarHTrFwW}K3LwV1u2`?)UTEYh^CtGr2Koz1>2Fy z&9zz7#!|Lq?t*GIr`g=rPR_8gy`9{}=BI6b&gN%q?ru9hZ0>DCADdsX`7N6V*gVDN zT-%vxOEojjwt24Y%(tBdHh*vP3LC=}%$#TQDw{Xh&KBFJ(?Z#-on08BOFHQ%gv|mnp@!Bt|-30Ad z)LxSIDrvWx_N!~ZhW2V}ua5TW8t`vgvhmJ+`MAz$pjR~1D;w(xjdUMh=QPoi#6Ov) z$2Zdz(sf!>U89A5xTSu#mF^Ta&MnT+``hWtl3VYn3w6?6yXXne7D~3f zZu-5abh=bLKWBCY**)~4Ub;gH zPf|>hgLi6@yJU*a83T`xHz`+7E`5hEI2Lx-i?3cx^$#5N@$|hI>6e8|oHsESRih;5 zvR&w(Ey=U&dQ~G1MPJ?_j#*=HAC+ z12Ob3T>Amu7=(R4#L!i|_XvI4gkBp;e_WzT)i|RjM?c1QYVn==d?J;(0jH*Os3jk5 z!`T^pw>3w1;G8FUTxU-2!ZFYC)#q8g&(WhyKiZZtTu88!Vz@153^-wGYK_?Q(P*7DvuVfkk)=Tum5KWn9*vz+tRrN6Ak z7cJ+4Rjj~ru2|#$wm@X)8NO# z{3Z@uSKt&D{}N0Qyk{&pF)%$E`W1()l2GpQ zO98}l=4Rn$g5Lw2UXa}zF7^SZub~OK{leW+FN6CEG!&21YtX+x%zYiYzXASR;Jyj( zz6X5=K#>oi!H2MJ5R@MXMFViMAX}!9VP?1K4i~aLxUzj34W2BZ#z6V8@X*H)C0E@~ z;pfSsAei1yX9jq=z+XYuY@j(XSOl+maPJ$qFIda3A+!jtE{4b@P_PVgmcw^HK*9I0 ze_d}|5e~T_~22xLhdk$j$Ho=)d zG-Ua(FoqN+Nzt^%HIaC)h`9u%6vpCF2!$|I6bHrNp=kUd7O$4Xx+O4F3Y)ulG7ird z$56ONJX8*sl*I$(@rH*P6*0aFj;Mw&C*zREa6=8ut!3&v?=-;lhIqFLW~N{e_H%Y^ zj(@hmUz_3mbWCrFsjcy+HrS&T#4_G*Y-68p#WcNb$o8 zT(aDBvivMox6SzaI$W?3Km8etZo}IW;olAg1#{IkD_D6jP~c1F_NF3WD>+O49MDHmru#5 zl-!gWq|v)ADYF&jrc=EZl-!yIG^ZhLY0DFo+Kw(|P(*vm>_EvKDY*;veTp)lC28MI z?oQrwR}P{e9# zokzT$){924iJZ+8+CmXqNo^+(u#*0o*nGn?Q0*H|dmcIB!wrZSwDsFD|kW z6%lXLI#bmuN{El##W8874u!aBEVp%;W0(sw7h$giA1%o{i}S2f{PIKmQ5km1aq+Sy zJ;xO|q9TVXah)U{SD6or!?qfSs`H~&`S^4%IZQkN4_uuln4y9@l%E z^JU!fxu6l}%6_jQs}v5U@~Y)T5_lv=eOb;?f6~>4{F2T z2`=LaKG=b6$!kbbL+ZA>^8IHx)P<*a=Z=|t;5l}m<+^eweV+4r@cCZ6t~W>b;gv6N zlfE44#}P8ry~3+r<~#lQkJtEvH~7|@ob@iRd7EE(k3;|BCIk532mEco-wfjDfm}$i zBoYoC!k=byi(x!#D2GP!&!f58aPImMw;98^<9PeW9Gb|NL?-y0{i(cIsD0D9_#8el z*W7|b3wW1MO_s3x0}oooq0PK*6MI{D>n^^uo%ikK^gWFEOeZ)_G}gbk{Ush%z#Xpe z;J>-x7OOivRaS%-ARt&}U>6Hlm+?Cv_M23^$o&T3~Tg_-J|KBlOs zW?%K&Yih|r_2U55GEh4QtIOFcez-~=p$3gKkoJ~imHV;j9xXmm;WXt>SM%qq--PAz zor;wSbD6>)RpE^$3p=YtnE~^aft1XvRxS|_t_1O*dPYH zEB3rg_AfVVPn=FlH;vT8i|F`hO%Xb`sE#bG7ZuY>r7$fB{(M+ec&>yzcH(TkRViRhk z=?QJO*8?(i!*;q}NBwTNPQA>NdTe)Hq?>N{jLC_QeNLBoR@W4TsFxnpQ%~=!V`Q29 zzzNw^H~c^gG%qwt_xwnE<8_};b(typp6mp^(C4S?!e8o2)69M#G*gFi^_&@c;4FP` zw(dAbPx@NlnyUxR(`V-E`wR8(Z}e;5>d*o`dx_riovyo7Usz<;2t}6Z55Cufe$aiF zYx_qXvqFbf=|U@YXpP>xT5nmWZ{_LxYjuN7dh~jIe}g`_Q5S5{=Qit=TlLXx`p!>! z*Uvg_hrYj4Kf7Ijyh|6P=!R%HWTCP!9O!Ul%Pml*!j@Z97Mqq6b~6fX20Y8DU^xkv z^Qh(2u$ua?)82AASWY|X zg|wV57C&V8A6YQQ;<1)9&T?`r=M&4BXz^#3_k|TqvYZ*B%UIrA%bjC6^DKY9?k>yOYdL!?=NHTQ)p8D4 z&VI`|WI2C`nbV3qZ1E8*_KG#{zUA29N0>Gc+4S1gAh9|)j{7_ad&LMEa&Ii5;!wKIKj$9;qqHYwz z#26edOPFXAMU<%TSLHF~VdRR)&CpIquO+6p#+0_JWx4Jt9&EnWo1L->3L6mMUW;rHm&0h&qg+#IZDZys4Au zokJNyruvuyp;?CcRNfR*^YBt5s(+N=CZ$WK%pHm;#I|+bvD!mo%pf zf1U;DnZYb_n0)>^aAX+cBQ-6TNrnQ z*AbW4x5O5$Vo*sbszjItj38{lkwsJxqpp=#AghK)RQh8o`%%+xctPM)zA?hx63k0i zwYgUq{v*XVAE-Y+Q+l2nERdfaYUWR><94F~iG#@BXPm2okrelWvtO+{pw|9wQjO#C z!{9_QvPzP%hwYBG6ZhGvvVFa3e}Bo`>jSN$it0m!wG@<#L5ixtX66n7%X~CU5FPGh%gex*D(zu_ksEa+yfAG z4*biIaz%>OAo?oAT!NJAkaY{9Z$q?X`R_pHU5LLAnXU2rEMwBn8;>!fvroXhiTJ^% zrVgg|5=2oO~#J;lL!&bz?PWoRkjgjOm$UyT7B-$xgdKZ+N0?koDW_jSq;ojz1& z57Y4@bi_!VI#$!SdYb$LegkR^D6u0hL3gv119DV8RO*ZI(=mc5MO>YORfLVHN=Mf* zOoP;_R_B&hl$__=tWSJsO@V1`T2XV_?lg2HQTMH0%-*Q7M=%ME!DbraX-CplE`$ z;Q&{FLy6G2A{=}ek}Jc^DsZ(LY_AGb9iC2x^^ZWeMY zE@q5+Fup#_Y68#*B7KNV0ZavM3c^J{lLk5+TC{-F*6`R9@L6*h)DjZfLb+D(ZF|ri zpzxDG9f32TPbWCo4MJTYwJY3s8V+|iShf<+0%yX29)P`I$up4I8+P`D-}=BqeSx2c zyDz|ye(>sxkpB|6F9W{<3tol$uS2KT;Anq%=M7l%4h($@o_P}vz6~qi1AHG24uCly z!2W@7e-KoVTX7b^80oMx4WZ&;&ixcJXBa5ukZBNF0l{XlH-N41av`x}7@TZS5*wDr zwtCI2%YVxz8jzY7lPj_@?z=!e0(Cf^|)Vaei89*!kOV*D8N#-cmX6v9px&YLLR(=am^ z)2HLqna1xed;ZCDu>EYrdALWCN8-)<8mr7QklR|~(EA2UEyU;rm@Pg%!Rar-8%wdt zGCcYN&iNi|{D{+*PAf6giW^K=?%E{ zCoI1ecWuL6+wtztIA8}R?!-&GalkITx(7qQ;1~PRK7fPv;=+9xbsA?EA}C6UzVTw+ z8cBgfQD#uVS2TS#g=P`TRrG7RHHV&GKsb+9%%>@H>HfEb-%zK8bmKc3w2X=`ra?<6 z^aCASP6w7!(;unJ3L?24O1vnRd%IjShHDn)nnieJ34XRDABtmLoNJci@egtDGJLl@ zKO&p+cz!H_$5i0zWjVPbU#`UCleng&(!?~?g?C8vsYv`EGmmEu6V9_g<+Mrcea_Al zK0B2c2-RFj=F^$JpGhaEeyf)}2m zLsNCF>H5?(eM5-Ea)9URT-mkG);w1qo~MKP#<4Sfp)o^-mg;_s^uq7;OF!!SD|Eps zGbG4meOYu_KL(J9Z4pGAFoAuRm47( zc|hGcsAe8khez3b$u69vD?g&sM`=A?m#(dG2zc_(J{ElW8V)f|W`C$@2X?}-WohP; zaDjAx@F+D;I;o3U^U7MC%3GbvSe-m8p`7XRE)y=w5kI{23`&Ki6l?{n!QT%riX^uI zhabWF`M5iZoY7{Gvup6+5C>IFgXgtQs;~5Y3^c6K4S%VKMBAxgJ5@}~$E{>Lm2Ef4 zc0|#T{+DnYNTEx1(?;6M)uWn8(!pE`aG?d6fX@RoL$R#m+l*3adYKa^7>>Hr&T!P7 zWjgziimU}$e*qW9sAP0xFcuGdOLC@?H=lx2W_6QXisQO7PvYcd?EfMqum&vC@-7RR zDo9ptib@`!g2D!$5>(>gE4U;(%$tzk4AoA`mKf|Df&7qpPU4cJDRknyY3d>_8<13`kQ60Yf7Ml}45%2eLp?%35JVKDQ3RBLh)5$Sg5VJe(%2nAYyd^bH`hkJzQ=ps`;I%lJBEKb z6q3EGRx_XH`8|=jripO=M?lcV0TGDhLLrIEM{R&HW4rcGQt%@|OGgYa4aKYWDdg`3 ziK|x2!IZ}+b3cTiicD;Zg}gPHu@jxD+LI4$?xZFPma^_aSgDgRK*ep%fgAd_(m5T-4lzi z!5ezxxxP3?Hjx+6Uu7SR7&)TL;XpFcUn{y$#Z?Qaw(Y{B`Vjg+Dd4AC4q=cCK|_0` zf{$VNJ~$+4{X<~Hs`nK%`VQibL!FXWvtQCij{HqvT)D4@zWhvZZ znH#jp{?%J{i31$gpUCIGMl|!Du zth!NtFABPo*OMmopfb4{+)8OtV}{^~l3t^*oRUAYNtXVyqE<6l*9>o9aGs$p=G=bc zi+kZE&X9htS1c_s15|NMD-FM5Vv@H+HUtycYL>!lo7uQ(A07|d7%#hzkuiRR9GTy=9JzM%5>_z;< z2H(7+=$(<^p7wLKH&IJn!_AbY96DI(u|pb;3jo%?>?+suac%BoWmhxYW{y zBl6)~PA^|(L$WfBY}tz3HiYdczb*M!+B;WvM@r75a%nVcPmc%GsT27bSnH#P+I1w_8X^IGQ{T`bWH`&pWVz=fn*C}{)c%7(I2mu%N@62;o1;bT2)uMYNUf4{_YERjz_j=Lm> z)shypA-5etCxUExL_Xdw6b>emYpiTKW60cUow{E1ej0AG+2qA1XyzIE{x`}O*>1lH zdpdq^$G?Wd+A47`WJhCefuz{tEL<*WqV9G%g>rkn-nheMAjtu$hM?Aesf5UF(;^1D zJ1Efya&c1?6xNxSXuaqO4KOVg6B}XjB^aNExed{kr#Ax|WMR-9!+y5K53fh}2Bdt9 zxe;kNdP6aJ1o}52jYMxW!bGd5gc4xijC!vXKH#v;DTESF5QCYp>y?cm_}WGfAjWza z%4L*sy~d&16*1yA?H6e8UMVxuL6HXWEyPi7^jQtsQi?pQSJSxY<673<&JDaw3bUd$ ze1AN#GAsD~iIwM}t3?~hIw0N#yoPWvr3vr%K6~HC=+oHsQEEG##I+?}g$((erQhlY z@_(k%pXi%Yww$ZZuOxG0=Talp!x)&fu0~&DV1UUVVv?>i;ZT!0(xi_t6*n307884` zNgiWsh{N#)3ymvPAY#6KDw;$nGr>zHTx^1mZ0e!oUXvj<>4OHO{q~5_N6oXpI=?^R zBc*$qQL<5Ya!oNskK?uzY#7RWoMBe<*|OJI2mo!cpdJ{j2VFs4EAm>CCn@qC zc48(XpcvF;e-93Wdo9d$`fY+mRPrii zyhgNzXb0g=@^_J30fIO~RZU66su;SX@rT(Q-%mxBei`Z086 z16_mJn=n@FUdL^qGBu(%i1TW+enKS62lNw5EwoCO*`({J#%Q{`l;YM=2$m!qFH%mX zDePok&oS$}n+>Ach)naQEroYaIr@7?tS@0(P7`fnAlDa_p_spxjb;H~E7fem4PGvo zXwF*8mkBrc3y>e<@jNQnZ*G|cZ%l`Q&w($>xagQ*0#XI?Avnro)w{MzyIA#YqWnzN zZ-m18RFm;4Csf5n$}d#MC#mD}mHWA>^_{xv2Nka^vhv5vAv0=J__iGk&4B#qC-%{e z5RL(F9MEJ)7q9z6kUs;Sk*xFu)B9|=>_u=S*)7SGmtfNxNPY`8Zn2BN=uaSsp2{jd zhoN$?JOW$fRQ4rw{RW!L+3ZIE+46pZN;#gLhfRVpaBx#qygGvA@z}Q}PD{d9>S9KH zEKkNj1bQD6F2z;NWZT78GBJ?lLcX#KD@GSA>4v&1=5@!@J#pwY)`*zi8=)T_9Do`9 z?U#7)UhEnoOh!lUEOIWAD&g5!_yXoH!i*KTUKY1ac=J{SLBYuPTVd_WmEYp5<9Of% zCZ0r;?ITw2iRj8WonKvllAsIf=swB1NfZ5GQ+-x4TyjpAt>*(;il(dzGAEU_6VmGI_N=f7xuZHPd z*AzB4DQ!&8)<$3zOfqz<_9r@0Tx79&hNu8NK+SKD?qI&+X4$`tsDleBZU)?;8Gb z5HB9WWip5!$dxy6uYCUIdd|C%UmV6mC7~cM>;RrWk$s7WPqC4rN*O^%-`{@o_}EMA zE#=ldtMH%kjbr*gRt_UKSjPA$omlTu$Y_gF?>`Z{r0nF?iQI2LGwHSB%oY(Ep3 zX@pNzZHr0&)HJIwqmGzL(S^UVcs-dvOx4!BUC0d8_<>ejM`Ba$d6sndWbr!#Idc}5 z%w~5PU$%p*NgGI}MR6u}LAN`m^~18kSSEL|Y;vd5yq}29kbS3GkXO%$$?!rnGSZpT zi+OJ=dMVp_8}g^qi%Ok0DyX6SYn4Aw!D0pVl>fQ4lO?A>MjP<1jj~T~uqG=Q1~445 z<>D={rkN1`1i&nS=YfQGx)|V9@K=EU2Dod%Uk~9XfUV$d2YL^}oe;=$NUow)ZFdIN zM5tq%U*t$HsNVQ4IJrBH?qk=hxr1@;7=*h~+(FkwP1Hq`&@0BSlQHdK96ZfNFxE-E z`$ITwD!%v_uAlxpKqD^-{fM23ji1G&r_g@_-+dB$OK18s_~k4#0sz^Lumj(ao87N+ z8P-V+G+biC5s;_hHVu3jb!a2667mZQ@^27OyXH2z;48P|TIorvu$1 z7q`)L#T~XmX7V_K2_(}DnoIB+-LZ}~yiKr+;4^}62!1B`iO!Lc)4xnh${kba8sP;= zX@#F?;38qO8)#sfw>H?;KxYFv(THEEfthBqcomkK#I?5aHTeSr9~zse{lqppW&UEs z(Hb;$+{@(r;KZ(S;7tcMI5E4O{<4`iuvkT}3+Ib|G>u^f!(*1)?62idHZW}CNEc}e zps*7^sub2#%hT1J9o3}+)FVPKyg{`dss@H??mYGJ%W8}8Eo+0+1%fCG(G2FEMG(9V zzTCBCOOik5A@t;y@gqKQ2FX|tRfAy~9?`T*`yc3(y&4YblnNaj*4`2Af2r{YogzZy z)#L}!CW5gfsa}5uWjTa3O{$P}=dbnMew4yE9^j#iROsBdNvlWTVEgJVQz#!pbR{b zwhsUu0jpe#NG%F=7XG6KoicYGKMavcm`xv@^ zYS0gBUo7aN9gAwbLq|jrKC3+uf?H9sTnaMD%O>*#p?Jb~SR=QbUFF~!Mhu8lDhg>} zg6oVcs;J1ITTR&6?m^xei=GGrmhMqsv_(OGyvTuk*Rr@xw(-)%70NqiM|pA;%JsB6 zLCdQ_t>mz$vgMvT9de%oJsY~rfv^|)i*f!AyuX`XGRsal%SO;8chSjlbZsG>E258G zGpx1wwv$4z)^aT`oRC<>C zT0@IP?#Kfmr)UWa%i;NMY#p!-MjpxF-dWt2T`d4vot}R1>JWjoq^97S$%p(PY@iNCYRdPxfN1`t} z<_3&>gz0H^tSU2APkM`FU;BSb4PE-*fkR*WpMyh3fcqyk^x-Hn^w~dHpv!F5=6~Tp z-v#=g5J9UURl!i0w>2!fC-&ckfBlJJfL91ADg5O%l{}1V) z6ZNM82%Tyxw1x;E^iMRXa6#p;dI1gkAE2OL{U!J&bkN2BHT4!N$JakoZ~qk>n)aW- zp?xU0hY|`Y@$dN13+&LNR4K4fVT2~w^TzKWP_aN{7!Vw24+H-V5wyfqJYr&IngmI= z&5NQzx7m1w>^PPC&CQ>gNQLnwzjn-=JNo|pNNvpC^7-ut{&*4EGE zgY%dc^21TA=#D5>^w(Foas{7=l0{=z^J8!E8*6#$X8v|7pMRgrB*l;nH#PxREKe>b z)k3!cx~b@ z=>shJ1jkEf`aX>R98-=Vet~t4V&zx1k09k|>s~%liC)yYTq$`d)_xWJwp?NpZ4`8v zgr4dPctx5AbzE!x#uawr_tjYKkJIjbcDZ)%*Y0@jKBxmR7#C^pAsxsjvRId|)UT}8 zUZwV2Dy%|&cj-x_X`?9ZJ{x?XwFFlfNH^5NgaQn|+E9BFW*X{af}sWk8(w0u;lXla zb{jfkB>du@aPXv)BKDY5j{B>{8KLYfl@5X}w<1BP#aO5jBrsLyJ~dg|cylk}jkTES zF(&iGx(q2ysq8moOyiWopUTii=t^wz1W6DfL;m=S2YvW&}I)ye?c8Evu3m zM;yYv2iXZsU+E-zfpH#RsIhQGMP1ImC$a!8O%%9e*95a*j5iKknZtoMwq%lYCtxMMc>b0I7P zcOirljeivqS3u%QdqOsE+A_q%^^jW*umL7*gp93_{T|Rx$P-4;9w^-ly^g`YBcM-# zdm0`ATp^=SLW)7lNfTOHZPb!Xtc6g|4g|hyYuyX~hX+0%g+v(ewxDmZ~?YdgJ4PmFnl8YWBnh5Pf_rUMD<~Gq>vtNN}U;G|zj{oYvM4Rb5 zyjUjBQo|H|R)f<>XApkD{mO=#{d4Gn1hvIx_j|6{t)hd7_Nwc=zvP;S{Uz6IQuJSQ z&8z;JYmSDR1-&KQtv?gZyhQt}bonP14&Wcq?&sP&sNEyFp$M8^X)jvR8c0d&aUFY7 zi+$Y{`}&U(sV1mJL5gi@@mf%gtEfDnf-DPdUet$5#QQylL`a3PR8UCpw=A9%uV+gZ zZz17}L>zN?IBqa&u&jfXh zdx;4zHJRd+Ze|V&`Du@NaG$M;_70ex6$ZqLe8_}f zn6tZ`8s9miPdG^@owYwWHNJQD|Ln-j?d*@vrqd3bangQuhMaY3{^Ha*=cH6Rwa(jj zGu`3S#D1)OJ=aI8zS664ibxlU97*8x>Rh*mO{+->-RO%LYFiN5vN~K`kCT%5WL=J= z@G^O48`#%&Kw}QmtZ%ta6NXDHnk@ZNPH(|pa|Y=SYspEM*>_pW>7H-H5url0<=@(I z#g$A~acO<_J8-*zFVEygSyqSY(}lCUa#nXP>A_X=I9IRe==h+`;u0RZUL7>7Xkg}B5+{^SjBnkIYm~0Ki>UaJGt#|PA{cWFIG?k z^6!H3N;{S9|02dNv@V_8m$7sKro4o~5}dLKFMbtMqEyM!*Dz)o=B=^JA6EjQ61$Lb zz2qz;_@Inv(c)BeA2u)7vkvgYR9nUbxeVRd>mThhSiqS|W$ukiV;7(qbrF0F<(1rm zTKvq#9Mt|tnS8Ur2t97?njD!*B-i#2P#?U0BVx%e9ax5*8wWFscNYdzcW zKDzIqD|^!pyFE#5lmCG&ZqxE=e1yrTu+C}AUUPrJq_e1hL*f6hupHZJ>}UtnL8cC} zbdarsE;{V2gHBp^(?KsC_SRt^9rV?~KphU&!HpV*+N>52*Xbi{Q-J?~E}gC`7V5|f zoxNTs@6fLJB6e!Q<#``jF;2{EVgryJB#5J+rfmTb?MZ~EpcY{r3NNNGnSw@yX%uv& zI^C##PiwA@^q}_r$t|SQa=t1h?}CTzF$$g}c!KCD>ima|P3F?So7O(0j*jsf87YGc zTN^Km_ZLnD6qxXK6OJ|hJti1u{PBjC8(A*$cAD^{q5mcmErIC2r=dswEegH(f0l#3 z5Pz2Jvm~H_IhE7f@uCh~Bbz5?a#;@d%ChaE!Xhh(l5nO8rR{otVkp-f#dME_P6Q9I zJB@Fi!S6lJIEz85Bp30S#a!)WhF2JtFfU_R$=T)n(nfws>dRZ(rq24YKr*Mg3mQgG zWn2pLpMt7?*qC7tH24H!#LT=8s#n-pW#lmEqX1t6dL##=Fd{hnSr&Vj_A$e zh<*Z%j3{Rz&cSm_qDh1bO#TMx1cpuZ!(xh_uJHq%zf+lQR@0fn?EA4!%GybKWuXW*RtJ_`Qac8h+4lN(ap;Xi3GbD5Eu{ zUq!)Sa$mLsB7do!iugjEs&GF=7vv9m;L73 z119aTS#Zd7tuQ;jFinn{vq#Jo5_fvc2|I9EdybckacA2)7YyQ82l5?5I758eH?dR_ zOcA&C&0Oaeer6Px-NrgPXu9-H_U>l)E{1zK{~n%tA8YY)kNbl|@&HeMkYQpJMH_NZ z$W@Ct_&2AwP)Z)*n1?y*QBE%9crkv@@lP^HUg=p|4D_^!6!ST< zfW1}Ra19?{%YHf6-pI9;I;)j-R3JpVhN@v_m2!icS*S86DV(PK7gct-YPdrsf2vZ% zNOoRH-+GE9V%kBF0j}8my4dFs#@abK&VZ6q>k5d-v{1Z%A4DPN6=1vY4nyKsRx}F< zu?l)s(H9#)3{H_pD-nlXjMW<=$$~6t+;pUl7)p0Tu1&s({UaD*iD#J)AUtFrHYl+G z`Q5WIMlO#pU?6kCb?C`DxgArs*n~^ke!N&MZTIqi8&kLaEv-Nsu!2G!MJbDe&p z4oB(8XxokGPm4Mdr|Y0p(>z@$7sHqBak^}Up1N7D+NR%>Ov*tWoY7Dz2O9#SlqwW^ z5oJm#KrJf2nA`^T2%X-HwzQy9F+qvWekDZ$8#WQaU1pLaMVJ$JQ+G<}Nl*76=tdw_ zN8)knN0$tv;7)pEEO{lAzmUq8Q0g)wnb*maxsD3gQ&3LD?-Fb#_dQFo$oklxrSrbD z^L9B-cM^Q}50*`__B7@FND04CM9iya>5|_l8%;i$u&ya>WVT#ppqYUy?chD3gUuMm z2pjVj6W(dM-*0jznC!RAAwjEcF>3_rv&)oxU{b{ywap~#Ht&97&h0d2zmYDypu+GG z^Yt;ITspYhx#BA)_dCb?(FXdkszvb0u{o5MtLC=S&Tq@}uVlQM%X2wCi!q1&F1BGg zRhSHNa*Gx+<_+Y_uVHTt<2~$+W2cx?2iQhk^Stdt0r4ox?4pcoNT6d8yD!^56w%ij zEMZ*EGbIha!4}ws+pJAX%N$a$U~-6UuIMramn&$ipo2;Y6m(SBNkOiHOm%Tj1>F_) zR?tU*NB|G0^icUlD)~X>7Avn%RZLP9QxujcdPtE>Uqv_Hsc^S~eG2xfls!uBb;+M8 z_@`ZmTO3qqN!@P^ zU0OkG8z^fJ)E2&O2Yv@@zIBEAn*l*j__P}w8~}Z;gJ-UXDZ{`U4mHL=;#h!atU%uf zt0!1e8B7G63~)chh5*x`@58X@5x8U~BuoeY3Al5HH2}O_3J0HtPo9DwXT$gxtU5sR zVbubtvCtL{O4vld2JU*>(wqM_B$q?_76^6%dbvdUBzFiGDg6l*<^KijMn3{xBYvbvf=+?uOI`}|c%o8?I19Tc; zkZe7W{Vzk)5<4_S_j05w&~1&Jf#qTwkV&j09XcWA;s_b+=iu7zSkM#2Nis1H3$MY- z-Z;7+Hjh^L9lRdnZ@_REhC?yD3By~_y$eh4MRx*@eE`D;F|7y#spu`X0_%DSK0JgU z2$KCm>Y)_ex(NZCwg!@8ICg0y9Kc76ZxHNQvihJbME12OMz{^M69~v$YaYtnL!gXXErGRdr%D4Z>BE^5wQVxt#^0 z3BG%Eru8#WSDn&HKR!sq^*V8|F1|q*57TC}P9JA&Nd6@K$~3)xs;(^2S3RodKcXj1 z*YS_(drI}8$MvQs^~9%iv#0fqvvmDA*74r5Oz)YigZbLLpd&Bpl$Uhj5`A`&9=}Y( zQr+n_U4Ny{j?#o)->6};_O|M^+pL<_VwZk#hxR_xHy+UVxuy#w(r@)(8EE{=Hj0uA zF@CnW`%RL&kG8jrQq*jN{zOi)RY;ssATVbEtkou}PqAs%!P~0^Rc%Rp!5Ardz>d~S z_E13Fft)Og&7gXn==EqGFziNidRon{ye|nZQf!l7ENoJwxg zlNNcD4n9Ut&ZOXRYpSeWO2IP}ic0t_z5hH_pF_c13K!ARg%rF@@QUp}eP@#`&%NwD z3g7=7Z6r0y`5)4WFDN)dbd1)2N&Tc+>udT(dbN(z`R^$bNFSmX|Xx-iZQR6?AL5SVB#`kmj51L@3zK7 z)|pMw0K4~|X}iTNecznhYAQc4>vx;VkIeoL&FNj{?R_Rr0_^*v*~Wu5$sQgs6D!Qb z!{!F@BuKUEG1KP<6Z5l4IAv0P73!&jGPSte@wz$gFo&i&Fx@fFJM^g?Wkf0*IP8F! zRig8JN2o_9ojZPXDt~s;zqjKiea4x4)*14vGwri4SD)`Hmc)$rnef1E0*{X5DyKcmBBx-_e6pdvevTyiXE0 zy?A{eo^&l&_T$w4oIIGt5UYv^`{+XV`n5^*^j@I&n6)SitYhKIigMs09aL98l> zQx(a#QRnR~cq}V#wgDj1|D zU9SpmP^X5fv-ygLtBTQT!w6O9CRK2&s<>Gd+@UJ&Rs~~K!TqY>0hKmE{T8ajMJoS6 zwR?)%@UVJesyhFOs`{vEJ6#n#rV2_`!4sh+Rj^dGt*5H4RFhV#f;Fn`Tk2%Fs@SM1 z)~gNgsEYSh!F%e^F4b_SD)>khe5eXORt5W1!CqCcM-_ak3O-W>|5ODBRNK#0+bk^Y zj!FH{47QU!`d<6L=THWO6ROf-4Q4Amyd6z6s`Vzm+`uM-8%*R~llqP^ z8;!f!$eWuaRLMO?yvpfc825-NZe=@Ch3PG^tROn~11YQO&S4KLe}}zU`rt_5U4uE0 ziRd7U_zs71FoF+^;-Ya}E~c!zKWVV8a=J9PBDT@H(6=n(qe0j|6C}Z*Fa-4L3)Hek_V)F~d$S$0+1M&b{U@oQJOnXUBNYB8)Wd_y|9^yfDE|+f2Z1~Y>fvvk2Uj=`2bCv> z_RsCCRnF?3K*qjSuHeO_)ho&tgA>aAQT4t+6%(Y`IptO=7r-Sss7kELV#IubiOIQL zQdU9|`vW8PSd<@jj32|gJkd;g4+y!$Az_qP_ST8CYYP~znEZNHn_qB z6M%3RaQlMS58OW>VDvZq7YzsZe~16_3&8z@`XxTz+zH@{cy~XzQQj9#v9*IYJ`Dq& zf#4rD2RAek=j7O~nT&-tiVLq|`8sqqAbccN1WnQyzKT}AYr#08wp9LTa~*CEixv!e zIewlK+uI4Y2soNiu6WWoEZ4MUR#kL&us9ZEm}#G0c|;$9;j9$-EY81K1PON1H3f2xjU{aM`y?U$P73}e!~HuFQ@*K_R1~cv38Wxf7VU@$#C>;#xia0H zYGLZOGIw8Q!pm*mq+@I2wlm*eWhP&3PPaFe8D>dO6ZSAu`u%1D%6Fx$^NLx3vJh}lZHvOLP4eKEw>1*a9nA(L3_))HUT2{rgX^&u(Y*ch-d^ ziHVj%4O+&HckmNes=i+-U)H6I!Ivy#JqS`ENC9dNB>KB#|E0fpjg6c*Ujjrd3U8ci zOI^vw+~!u=kbNYn8x~1&N@7zoI(rPm(^!5AeWfL)A`V8-e}tquXzIcGbH;g?A|b9(CWHYMdlT?pD>ts>S!JYU5PDZEErRa`{o-2Ws(l z)pdvJ{V(N9t>F&}gktfNI&=}BEatVKC<=Zrs}Ga{&;Z8CO5O*3@ZorN1YSQ1*W84ckHpD0<5Q!tkD%R4F#92-G7RP+&BgfF z@gbqRixjmEA6k$8+xUGsHrasn58<8)Tz>{npT^8n`1S>6`+0mzu7Uioiq4ecsR#47L%KC_E2xvX}I#gEDM8T?yS7D&3 z6oUHAX6~)#{1_A7W-1E|+-@rGG}V@}7SHX>_jlp%yYk$d*dNW|&5XBjC?#umTbjBvHkzLu&oqwR`xz&& zJBOuu{^TD7^*)Qa?yFpH37-`z+6ul}IO@x-&K1VO)D)P%7t1?Q_B3{9^RZ>Ta0fT2 z$`1(3RjDG$k6iAEye0oog*e1igL+VTH6-5;4N5SOhT=G#|AJ2KN$<+EypqIUVV6ot z;!m+vEUsi%#rOW2{zB~T*%awUC680tla``zPDP#S;#g>4s)|89$KU~zSDrM6TrOf8>}R_&2Q#D{rnSuh z`8n9{R{@l1oGPb5omokxvP%kJVWvTW0p_50pUmpM5U6)y)PBh>Pym@W|YPCDjO zJ@X6Q^a|>hL0#la5zY5$!dJ+=YE41HLVQAq1S8F5!%cVL5-c%g73Rx3xb!k`Wr%$b zxZ~~amL7*;CmlabyKA+Ku&9}FZ;lq4Y&Uqw1SgGq&iEj0P)^`EZgt14W$}a1%yF|F zH_xH|jyu?KZ*bh}9CwK04Rzd+jyuM2?{?e?j{BVBmO0*HhhB8tMUMBf<1KOA*By6_ zLvK0WYR6sYxaE%fj^n-O_!W+O*l~|K?lH$51#;4+GV4b0PlLo-QA}$w7|Og_N?PRu zl=-a~8b3wLe{Q1PMLK_p4&T*YXYyX4@C|Zhg7=;6xO6WdR+^dc*=UXIE)#qw`F<`? z9J(BOQpL+7E@pAU#CBlQo-vctb2vAP{U}q5L~!iNF+I2}TH>6XZ%<7bBAv`<6n4ro z$w^6FuMt>Nuoplqc4DaW?ZX^tq)9wua)(VeC0k9l6fF9j+>t$*5e?@2LF^Ay^OGYsY%94FSG+I@P*xjqWrytp?qG>y%~Zr;NJ;p&jQrKNDFkEqBP=BdtBNHsSEmf_=IFR`(m@Ph)WPxSQvu43X|SM zZ#C9hW3AL*N?Fp|SXyo)#t9oSd>1c!5B>MCru@uNqec1-Yq1a?e!OG@cUeQAkh{{P z;`~<(<;Wx+RLOmiEv@VH5A80|V_w#ot8~#yos>nlze&M*sqi(SWL`Yux3u_8++(Cb zM@lQozjNS(6P$E{?;SYhz*)!p#R()ltJwheGd#^iUS!Hw&tJ>`*XN#E{BVF{|d&H z9J89cuj6KK@kj4V7oiqyOUyZP0i@~}c!*sv?1d;dsSQXn01+W|8=@Faq~EPjOYXSF z%Q|U^&RnfK{cjy#g(Mh!y4!d!{jM9zue?*l!4o#>l_G(!Q&uPpMJW8q$vW#m)Qd%x z4xM*uYwilX!Ej55UFM()Cx}tjKAjnaM4^@T`^mH>}aF7GHe-i#9r++fqklL zLt%X=Yz$?6tm{>H+H|u`!ut1uuvZc$+WMYY3Fyf)-@?k%B@!Rb!I(VkBP|$x(Gz3C zN({u+6E&AM7HD&nwn6XOPcm0N&uv)zfqkOny$JW%riqwJlvdV{&S4?w5OwJ2#He*S zT^eex*EB?XH;9s_toJ@WubRSeL%6;Z^Og z)`cszepCCRr)<+MQGB9&HRMZ7CXRgRjjCb6iBN}viz!GZzY&3mBmF7k1#;(E)(t&t zdkk@h`B0F6JM9A;9y0KwBcUY2oEv8!FuBkri91oOiH~#eJTF?vRaRJ-Nz-+lu$k$7 zhK~`X?L`(7Sw^G>w~C^w3acsTs$hVEn-oq_3AI702}v|ldH3T0>O$aKvoSmdwO#^v z9o#igzS~+>;x)p{AV>Og$cdmBVXxOg3Pc{7UKOS#NFu>k-9vo-j zQ-c*IUhXwA`MDlIq9PIxk)>W%(az{ygD?pNAqC=zy2SyDieRR zU96-*vTz$FMb{{A7Y6bmRm#3&8$iN_+Hb34+F56Nih#&g=#sZI3P4OuFE0?yqtwk7 ziA*OcL7J46k>P;Ma_w*+$pr0e9?F_0cUuVL*h5m;CW;10a?U-azk;%SzO=afX!~Xf=FBRWQ(M2FP@j@9aTy3%Z zrGkqT2&5QVVr@K2%<8=(m|hKUYl7jWII1~fS9ImYAEEOXYUj-;_%V*+no_kv6!xcT z>!@)9lib=2U25jPX<|M!>3eM`th3?rz+y1v5!&>;Evzh^&7pwN=GqVkzQpSn^CPeD zM%me;hvzVA4@+Ck!8&%!IoQa7yns?mv6b4+F{I3_v|Q~S*Vu$GU07j+%_(d_;bkN=9`ABXvBii1Sbik zw^Z3wY)Gas&Ll`6v8qX^X3q(N6E96L2{NF&*p${W35`s6h4ngmEo`&7jOlWt*%Pn5 z!H$M9%(B2>rU|kP<{Ip3+-?SYnCgFKQlexSuf#Nc!q6;}^O5m)8}FnY&H3ky3l3Ft zJkP=E4%Tu|Lbc5t3zo`rpudBI9lXK8>l_^7&`<|QIylC`yQ6o>=Nv3^XmPX~dXYmf zJG4Z~7#v*Vz*`Qjc2Hnj>l}Q?q4ylO!okB19(C}T1pwK??sSf{W4}Gm?Z6Ol$4u)5 zl1U(S=1E<6L-a+KS17!W-670UcPDT3P^MvAFv`|;=Zm?0lAZopXZs9W#f}n#eSu*f zhYR>M35hSZ@s@BU(<;74LN4pMNjc-Y_FX_ZxW3PEJ2=?M=?doVcKr70_#-M)_LIf{ zt8Fp`--OIq^u>o(1-ry(;`|8i%d;cxT=z>&bjxzm#bO7YmhxCGIDEJ9i}Ejm+!++@tY1m~w=Q9~Tw1dAGDVlzx^j!sk5m!WQnkv13~;D8LwsA~rL zrdU$3vII3X#h03K%}x3mJ7p@4#UO$bc@8e%1!NoQihXZFcP$DWEL@}`VuWi+ejmyc z-cf(*y@bN$ls4XYOHEaQ&V6K(a_u*ZBROdV=a1s>UONqtTW99|wqC8x1Dq`0tx2#> z@xcL#ia<{Td;w@B1Y#7FeWr>18^e)EA!bd*W>Oip)_SB*oWkZgnucocQ4KNJYvC(fZ&RJnUyk>$H=A+g;hbqxsvA*M6DFZL=qsWCIofB zsSBsC%AASoVt`KMv;LG;eBf*1f z>xaZ@*w(W~CQptxo$=djgie^Ag(qZ?k)71Mg6Kgg!M^9!+L68e*^;a29l^eo~t zh_meBGkYz@wAEKk(@<)Ui130=kht_h4R7jfiKWXzdO7*BeqLplN9lfjPhe|3t*4!2GSI_(}^&lQDkKnZqIM4`Xkv75#<4EE698 z1#bBqOX93?8T+&C)q`H-q6J)IA%`ztfE zd7={svIXZ@+qT3^Bw#`!LyWT4+^Uc9hqL&OIXqM=@lU-j8>@ulf<&ELe{u zkXV(b^&}olfn1BW(CQr&9;V8pl!C?=rT9q`iR13+w!$Ei8)X-C<8TK1(k-=$XAW1w zgoGv#G{DSMEJ?xQWZc~lXI+BjX_(Ojvm0YkGc0P3*c1z+p0}SxybiEQ29~VG2JdR& z!@wMZbry2viV_rWl53ccYngbdqG)Y;UTGl5WOp&J*Q5&9^nf`pU?M4_m-j_k|D@Ma zwVDA-9*1hBfHIekVDB6Z1Zw?)z2<*!^tnO0Sf;h(^}?6*0Fek|$vsMC-w>W4sg?Zr z6_dEk+HxYFny{YZSL5!&@dnjRsfp74beqbSZ?-~Zex(8_X3|jPN+%eYst_+%{`wa0 zT$*fU4nGxg8$s-)5Z4S=wg7An!DZ0B1H97%3UeX-I!GJ_Q%Arf!=dL*kZ?1Uj{zzG z{~oA&7u-J{CQpPrCqdik5VI2UK7i^w;fdYg?YFNR{S)XjpuIo>G&mH6bsV#Pc>jcD zQqj*qKZ0}*k$}t2fscsFQp+T7GM@1HDB3IHVuu*akHdU9@>Rh{qM(o8;&DJCMlQlg z4U8nAsf}@UFsUw1sgIxg*r~B)Y|hHXXL7KGY%zJ*yC-^mvF`vJ6XL)ke6|ozPQut? zjGc_JQ!uRr4?cvyPQ}x%6KY#fR+l!GPDkp zIz_a!n6f7mO|d;Vl_hlkVH)-jh0_Qhp_-3UpXmfoQQ|*HFQW9tGfbE*`!u67%dLyUfpb{YvSq|@=a!agAL5QrY2M1PR$HnVexK} z7KX&d*WOT$+27khUsE{Jc!egf#B_Pw$jCSMN#ias0&PFD-Ox6(WvdzVz8Sj1Jo=Ft z{GoxJrgFCl_Lz(Inw|U2qn{dI&`$@<`U>-1)Yv0~m$On6^RqEOnnEcTsOjhu2Vbz0 zF+o2q7hhbo2qv~V=caOQ6MJ-w6*O@>{^vdyMNn&I4z1 z_#|h~;s(#y(W_p>C9>s-7h;XgRtKPxQk2_9kxV~EDiDpbK+zp4cu>JxiuNe~pvtaL z!C{pqCzfL>kVDJQO5%Hv1hNl`<`_1%vSURPpk_cVZ0p=t=@4E9*)1VSC@!~xe;Z&C zJT4$90fS5fco@9taP~RaE%Va(wp%vwCCHbuwk1GIA$}PoyaM5CkRWp8a`09HL|fbB zNQ|#T@Ft{-D7g;GMU;HYn!3-I1HTP3Hh}vsByI-xeemCbq^)pzJJ2?8x4@|PpmZYy zJD~gnDA)-TcR`I0p;YD=6#z$pM4|o`3ZqNt@71)@ODpZPfA-SK3A_raENCx~b)wHs%_L4(y6Wq`kM>dx{5&CjoZG(NX@W)K+_iiWrjc&L_fJ?m)2I1!e zF)|p7Mj}K9M_~~Pc`25A-B~G8?_8(VK;SnO%h4x#+!YFV14{7U{=(1-+&A5-l`)UkH%P(Ua3` zISNc>(Z=X$K?bd|GVen7LT&wSbU(q7`!FJ7s{>g0Pb~Zl*B`{f&oTWA43A>rmst1} zrhko<-(cat@W8j|e20&nz`~#Ll2drkX>`tD;V)QOiIt%5Q@ZM}n0`*CM7of4VYKSS zadad`Qx#pApq+SKQ9~CdYKfm0*3y+py8I$->S?#W{@K?HlXYQ=&QG<&rNTz~>?JzV zOxI4+OE1-hO?7z_UD#Ncx6qX>b)>bfyh7_%HhWlkrS`AVg;(nh9du!PJt@%fIT||a zFq$_^AF5%n_5?FBO;4Mu>p!Anc{rjC7F7d@pDXX)5yb?j`N_`H7iA3C*6 zZ=I{BF4W259$y(9G0DhI_K^=XRA`X-z-b-+qWxdB|C=QO`RBA>sbds{K%pRkHTkgw zRmiVNG64x2*lhx3m>?sCf14+WSR5TGl>dFCkVT>xLRU)ubFk2zN_tbICvCehSm;9; z*HHN%vxTbvb+%CWZ?lClM7PlZnJ~zBLGbVYrwK#B9}|Ys>6Bkefrw~NlHfWAEw)_Q z>{p4F+R#wqa-!EMN#+kLDUddq)kGpQt)-OBl=d#oc+bL+y`RKfWQvt3(k77IA;u&{ zOoKnI_asNbKG`GWtO|mas0AF-9#k~v+HU3QoZZrNJ2JSR8)3{pqHvKK(v1-|;wOx|ry?=fHOGiibwl2+40ro$I@&9_oilH-dSa@@J&C+EKN&Mk@o zd6ecR!09d@ufo+lz9pW&s>Z1oanZ&6MJl^Z`SZ(p-IW|(#Yfw7PQcZ(SjNjvXWra} zKkmu7dHh2!J2#^tTp`)&8@YI-H4c3;g8N>Or^UcLhKJp26>7SVVZ#4M-g|~;QN3-y zbCoq~5&}#@2mvXRn*gDx0qIgEHz9-~Mg&1Y4Mjl&MZk*6Bm@XOC@6?R=tvPnP;3xF zM=7ELDpC|sL5iXjDS5AT^VjG9Jo|a}KHm4($NsWE%OPYkv({D4^LOe%9CkTIHRQdb zd8WaZdT;9J+4|N6T5@EZg<42ZjsX3ZXjp2Tn8uI!p5}M7yV{7{8hxalkG21)=D*$a zF`paRTikAwHDh?EV11tmhXg?SYs6@I7W^{Uvn*!CqnChgH53o>3u006k;3>|1}@Gt zW9_ybvE)6>T!W#tIOYQ!_#xI?hw-vjcpsBKMf$|F!-eay;RY15@FyE_bTR%aTZXOZ zZ8K)!k{#G?J0?p&`5IU4!!loDtms;sQ2Znkw2nX^=SYNvydkoS z{957y)tEHp-xZ-_?NNcqx{evSX^xDKeBDiatX*~YUAk|Y{_}|C|6qAPTCVI+ezxGW zC8;{@83WF>FIjli@~>N5Vx(+lw^CZ*^$?VU)OheKfG2V$nfzA-tOkw;m<*f**)>4o zcv!qhF9Ey^lChPPD;i7Wvc~@7$zk3esUt=|fa%|2=orQe+U^&0e?|Wf4F8FrUc#UZ z1p+W{N-&RTAw}0S@zc70onG zN1kTl66EV(;n%g&*j-~c?K9-H10DeGERgQLC<}*mMQ<5p%l5E?imI&DTwSovuvxeW zrJoWAMsNy4HRz`s_PcfUBX{Vu1PjYsxWhV_Xt@&8bJCKme1NtbUhLv$ncaN8PBWnl)B?o2kMs${DY&eyGAp|-xvrCDf#q$KJrw+5>pYWsBav0!D-et~ znr#_w<2KnxTcSV^bh$y3<(V0aNU)AhG~z4i1nueIylz@r=>rOLF!UxC33yHZ45OEW z_@>$4@giQvzM&~iv$5BZ{wknCEaJBkV=!xry`5p3j2UdDg^ zpNJ4{8Kl1rFRcPt4Y&^CK7^V@Fl0T1w!^aBF#HQB+6Pjlc)jsEY1w2eeN%8N=(a{& zn8wlR{INs~yudPE!10hW5mKf=CyCIlg7F@vlu>Dw)lc(KKfm+DEwN;TCNTntAPyLpz>k6g8MQ?$kpBU%xCPuqvzZlag_{6HRl)PX z3z>C>R|DL7;Qtp$McV%N7AOLyIWP>Zerl>KHHwuo8g#+Wj5su<`qy3AWWI~z>rWzmRlvjb}b)9A= zTA>I|Ib{a8uYofYq691Y1~_j*>?~M68~i!Ib0KFQ@O*F!A$9@aLhu&>Ee3B1cq^bl zDtW2r|Gk+1yOI|U`MEW~qJ90ll5hG?CI1mPH;ei8AWKFqmHcMFe~Nj@G5M#S-v)dC zyJ9{|1}2QYZKiNuS)&~AVoh)%yBJhMsD&~Lv*oSsi%z7p4n|=h0FBXD7$HFV5m105 zDN!=CoMhs1{HZ7?NKdNkSJ0ILdpe4gDCuCa=WkchQv?#MQE1G+7ujA#_fP)0{%-6l6yN z4Fv)wqtW$$lO&~#yh^U@$7NA2492ig14<9>jbra0q~r;9&a+S@<3(8=qhiab;J<(+ zS17p2mi$)5olyP$RKPZ98`{|hHCbR7M20q5T2D&Vlcal<$^T$&x>3|!k#ws0W^3Gmq3UDttePPwJ&}{;w6o9`FoP8iz3$fKl z%k;Pr&T5P2#^A)Un0FD6-$ReBC*DPy6=yS7?qfWO?iAklI!90C)`fg&+}oifh9KjFioK$o3>}rJqwdpRXG@ufGN2Hdy33Zo zlzA9P;%DV~7A!UqpOWv%A6i^w;TFr=VHI4run~AI0A;8y6ZPf>JLC2M><2ZTh3v>T zC3s$zgr?FcV8*!em{bXK?!c&q7}prxW>}^y+LftB&U#rIqWTBTx(cZ_^EO9%bJ^ujP%Q~)yJ+%PEwU?C`?gVRaMto%C4*Y z35pApKTEOb?TeN7qw;@HTwQOiX&g`DbxM?~Rl*uZYnZ5=LLI$U^EwT(n%}6Olf6ci zSg9cp)w+lcvcc;QK|hEdWTY%cWAH5SaByY=76b198Kmb`!k{wx_o90@=H7??P;@3? z`eY0hAWy+yI>s!)*saJrG1!F#yHQjJLQNNMh(w4w7045D?{rFjm%P*DUZt=(9yo_M z&@5CvH_GTtf@&NWVyMoL#C{Ei7Z@b5Wfpsd?9bs*3m6u%ibxdr6Rzk#U1kv~NCp9xQ4p(~I0Y3AmV8_#1<5KdMfueg)>6}ItGGI5cvUn_;Vh%Ajr~$3 zf3ISbb^Y3!hwAJ?{oW#-wNT$!rg5z<`9S~iiPj(MDMfnG27Ppk9#E_oZP(K}LcAQs z@`x@%p)4BY{i%$3Vpq8vxd*alp2G_Syrc5Us5*=EsD--GG9CA;l~`IP4B8hHSvl_Oa=SR* zo6J=_o>Ysgl;buo-xbG4lexUdWovQy8CG88<3jm)d;G_%;@o^sQRBhGOsx+A3Fi3wO_0|B5?* zn5Kd`ia%2DsY((D%J<6mG|H&(R_)!U{c480Zi|ytLTvBm`c+lde6{f+_y;JEsVrHZ zWp%G)xx$F3Yo#}}a>Nt*kmdBT@?;SAj+w>b5i9SgweLsk_;D-lq_zJiD}2JjU#uTb zS>e-G_>7f#)(W4q!WXP|e^~IRHRqyL`;ryDVuk;*wqCVLu3Hb4SYd$f3`*Q50)&Wy zu&CNa859j^jxZzPLK!Gm8uH3PI3B`r@UkouZ-HANb=#Y767ea zP#W|NLtYyQw}o&zgfn4HI|$1TMYs^{A>0`b-wh$@9qs|UE97;7;aPCH8-yQ#irpdZ zKER&vNG}LK2n`>G@I$aL8{&Gyk9}coKX~|2Xx9f|033P*@*acx2Ez47(~&nAqMm@s zL*R*_(EJ%t!y)e}lf-dDRx{5*SXMJ5Ap9bPWkC}_IL9=4Ib$Gk6!aJiiTRK?9)bz* z?qoPP6;fU`sullrh?xngZ$iN=s5l#9=0a*A*b4xbK#ZU#R)Sg!=~9+&hrYW_5|e)n z%AABiHaLJlay(;+!jEl~HPlE4OQNu(G~S58M+Br_7Gq-Zy*PZS9G1jmNd^3_Jl>y( zPgTMrf^B#4k&0NUGOn(I?^MNkg539Td3D5O#1LW0a4QwprQRu2T!)HlQ}5epbbU%_ zOlum_=%zI8PAYCiy<1Xo3o6c_?9SxgPi|lG`_SltRQ+*E9!z8Rv*uA@t9=*hqJuF*xra{J$e9DZd2i41S^J4*fjZ{+4tg5y-> z1POI>?@8nP^G}ibiTpFgO6DM@$ky-rOU7R3Y zXBXadFIT&dyLaP*-MLo}c6#xVKAg~-M?b<&Up~^06CULr{dwf$++zU0@fcqp$ZZGn zu_yTY5T5lUmmbCmLpfnMk9eA&e1>~G%L&hM$@9En1ebc5TLqjjlHEMMbu`x-%jYI= z!gx-Y$d@K@!elO0z;j>a0aG|;Di4^(1772^Gq~>?e0>)0eT(B}bLu=JR2Z;`d&>Ot zZGL_!=g8PoA~GW@en~J9_PfkEozL0X!|pz=`Xzh&IpqM~BU-G3OkZ)!?|H!w>>QVQ z0>3VCC#U)PdFHdcUWPxvo08-DMNYaBk-}bQ=Z2ItD&10oFzFPfQcJ7&7_}f;C6`h0 zqTq7X$v73CAX{NI<`%W0vWl;w&{J-b!pMHDOh|=lsnpsE>YAu-tfxvEsCo6(p++kC z4waOuK5wFg316<68q-pV%Ik+#>hspBeptC}6%JIH`D*DTHA4oi(-qEB@U}X*Qk@mR z#pkO2E)}(174B7GS-Q#S^$XSNOLhD+6@0CVB16~ILyE=2a#Up;SDk-Q!5=F9f{N;B zyI)1%6=!TbXUG*|)x?W7{$&SOZSRULyy5_~5wb>UNkNS*t>=ihH(vX38p>%u(a5la ziW;iwAW1_N?T0joz^R6bXb~Yg+-fYJQ|cSZQ_xrkO?96p+Ha;4L@<1(3HbP~m9E%Q z7yJ5pYke@Rv(xp98M;}f&Tgv{+UV`=bffnAN(cQ^CmnN_?j4!yCW_zxZk^i2q=Z-L zrYm>XGbAWn;vOE9LFToTa*CiJrPlXUiDsJw0cI{$RB} zx<>1Fb?xPP)+*g%t#;SxYMo!_fm2mJWAS06%M@Fmk1gk;_p8K}D)YSkqa1N)*<_Kja-yt6$Fid>yR;Qk)=G@E zAl`xsmYrbfik4m8D)ub9x@Ctf`*zE&Z`qA3yRl_Ax9nz?eWzuMxT2+%*vhh7TXwo- zhpm`)mfgXM>15eimVJ*Uj90shWp}mg?iSr|**z`$0W0+(%kFL2*;aNxD`tR|_=uJB zm?abWq(N59K+As0iWzR%&sz42mi?0Dj<8|`lQqUl9B0`Rt)fX5O}6YQmR(@k(=2Z6QDWV~%8NpUhfZQn%|B9IzdJCZZ8Z+IBI|?;V!q`jD zOEh>g&A2Hjs$)uA2+U|V92xD>82orN;&^n&VMr{rHwU~^G4r1p?;E&9#=J8zU7TMM z`@R;v56$%|G7QmR{Q3#{>(MJR^S$I^9JR$v>C;6kE0T=QFl`t50-gQ>v%bQ)`!MT( zxp2LM=zfpU-yt5t=p%@S(f}=xjwm~?runYCt)j!YDw6FFr5+}qEIi&f0#nODW(sF`cWvGLj5W3Q3^dq zp}`b-l0w5NZXTh?!at^4KBxA(DEtNGN%Z_a%G*!j$OQ`jT%gB^Be$n8t6jM_PZ7%1 z`3pH`$&q_gF3pNY=^=XHP+hK`$`fzn8MpJq2Ap4?WAEVnrkvl5Iim5{-hwB#=KPkN z?{j{b^V2v#onzaW6<$du=eOtlw!B1Ec%3d$iia~%6Ld(U&H z5uE-qF9|qbF1s9VoyW1GId%e19LqJwbN)pBd=lqR=JeM%`F(aJ7xEk@{K4h5T2NKF zA>}pvTL#?Nz~_wsI87D!3fugf^tZF(yHvs5%ITtV?^U_?DD0}j5$8U3Q{Dp#A5!?R z!ffUAR@g^jUxkmVxJOj_0ELgKHwP&ktlS|ApHwI+)~A#+JfdZNTH!OwdCnOBgB%qE zigOi?Qjn*3tm1r?IL?5baf%FujP+YwP9kZ$e};mYif1WjwwYbBi<7MOORSf6Scej=hO*e&YsGzK)!1)vi}1CT ze8lR0)cXCH_0$hm{U5DAk6WcqSlv!q&;De2KU+h8v1F2+?{~UU~mM+7%gphYxpG%qT9g<@s|mY@p0%j2(q7rarE+(umVDDEDvk&lFaK%P?6yQhjjzLY)_8f}%x4}ypsKj^`NmAR@0nbI6=(&+7 z&s(#w=x#jU1+|Q-?vV&5^zSpFSIv81AWiiBIPw9!)Dv6x!qjYpei-z}4v!!{isv80 zxIq~G45Bb*N16iQd=6e8g$qnY+B5L%Oe_)cPo(wc z`Ix)_quxRPJsi6Rudl_=KEzB}*{?IXd!0YUl#lW3C)jfXR#}hfMVP%2H*Ch+HsL+e zbZ;~BRrt)PG)1EM($^^ZOpr*FgIMPq?EWpDj1&W_k6__p^p4`lW7y;;^iCVnBV52z z7x9HlxZ(;{xr}@jFJHrxpaE0Jsr-Z_d3v`c67ZHMYW~Y z9qGvoD(OtE@2109RB{g;xtC(Q(CMyp{XT+jRMLYsb*HEY=c^|fA=E63v?u)1vzv>a<22JWDMbW`Z%AeOrWac==vmjXfmCfLQ@MU zv5)-OEPm3Z%*N$4zH}oCAaeBy1XWpyWGa3 zZ|8R!aLf7(YDgWGx-w5;h);wPd710W0aPi%Iqa$zVz%iZp*UtRV zUHott-gz${y^sBFT;~CX2f1qx<3=fYi0wYyzBe!J$GSh4eVi)};A4Zhq6DT7;SR(2 z#51NJ|5~7w&+~*4{H1)NFY`wM*BQmH3sK8_FiXtjpw|HBmFI3}ZwISwJW(Q?BsXv$_xys@myG)vzTv3D3`aTb2jf1N_A}Qx$>V=y z{)MAXap4Jr?kPIM8Pctv<6op*PF>92!Ri$oMB|Fq#JJqR()QY|_X>Q|>st=DVKB>}v zReZwetP=lJG10c4V5=nCt!rqOem6V6j|~HC9BAWX5qsAl8=tiKaT}ko@hO{!+At*I z`5I=sPurMlXO6O+@itGeli#rUb(^Q#c+`gDHvDWC{A#Z}YiFIY=bf`lezO;!x368W zxBp>pK>ebn|0LZAbVFNbvyNBVjn+d-X^7EWMwgG$DP?t|a=Kepy{5WOO3`r=?b=ZL z4Rq)Z&5caJtKC#DY^F<^>&`87MoZo8P94=&uWzHTr|Xfe^_WckVmn=`gRym&7MgTl zef&}F_tA+`P(7kwd{To5y@qQZrZGZR7jduDRP>VeMryN~%KewztK=6bs!e|@Y=)@x^j<}Dh;jJe4eW-sm3B|9{JuD{%^yYA9g zKhsC{=#oNRuZ|U*v1Z(9fD%DjtnH$mj(M9fL!eca48GpYW?%MVf(+qu{FBm{G<4%TVsLyfYYu&nuED-d`8VIw5A#pM(SEc~LXfRgCsN20OYM*PS! z`Ir5v*vdrkAVr9*nS>NK%A`9<`o>Rhg8w$;FN2W8Ijw}-S3&4q2uZHfY6wN5onBfC z)jx!J67cj1RNMeBNygJgxLOQpTOhOvmTrad67%#K#BPWDZP02Ll-~_Y_dwQO2z>#K z_W>M(oYS!Jy1?|%7d4i`LK|Jj1bGz3pkEquCB;KD265=dq8E>;6)-UpjiEDGc+Nz$&;1kOB6`9^x{QTa zFy{uk7U5qeq|5r7CK(^0yD5y>T?P9ni7C1m-s&^*^t;lal0&oc0(uR)Y_96c5eslT%Eoo5~aDv>QDgGq!PvoAWf-_``OyZ&mHkAM=_Y(P6$oT=v|eEfFKYruK+4J|*fDd#meezb5a&TGM= zTXSAZ&ht4h%z0^?C--1FPsrrF_MF$2^F)8!iSs&hxh%tO$`gwIy*&Cp&g;f;-TB^L zoYaT&`tqjUoYar=9_6_HocB1#4dBGbI4PpJ^@nhH5M#vHn>Up6p5eG>Iqx}+dYXgh z`JoYp(mX9Nt4YY?sL>oXf%C?4(s<6B$kQfq-ee9>G247+FK37pM2zjf@$0{{FBF$6 z=JQOyE_4tTZK>L<2BGTjD5cf5D0N$mT5^l>tEetD72lzJNi(TuroO(&Yr`t;LFM;T zwdJN5p~Ssgdz^Adt8LTO_%#aOS4l<6-K=sqD%`Fr>{Lf~s4ZWpiC?MiUn|_NLWfl4 z<0?3z{0nOGMa3loBenU0{aR@=r%g=O@l~|w2L`5^VeG1AdUH!Nh83IJxD4&LHa52) zT^F?1aUG19R{U;dWZc?ScZlFs@j(M{aPKwkYIZN3(_7c>qf*Yb#!K!6kS&q zf})iYKE?+KA7S+SC`q#EThaX-<3AH@1;Ure2QcOkCLKmNiVaU6s04@*=DquA4OTwJvYw=v|b)heBUa+Lz`y<*!MYyFVvv&dSM1ar zIP6D>CWM`cA+Bv{_Uka;$}iUA%5@DALFS(&jd*86zACW0CfuSK|In28G&hL*-&^wq zQ9cXtz6C=XH)z8b)A_A?xRo&RI`GkU+^#(z$>fqwEWm_OSv;hp;UvuI#@p}bn669@ z@Ub3z{z2Z^od@*fY1yXN`0-)ZkFe^`s|ND*$N0ct-t`3c8o(n5u_pqLq1@*wKK~3S zKh0&HWBokOd4Z40`fnuv_%d(G;WtO|lrda2pS{uCaRO(L<4qHJ+a%VL*_*<_LKfUT zE;pDgZ;OdOi8;VfnTEwaMP`jg`>aPB3} zzRa0dxacp&Ys@#e=~Y9to+2(eR7tEv$hV2qMiH3^fXz`+TJ4Qe6s;tZn_|=h!epqa z{IK#nn-OcXEEU~FCETODt}42_%DhkI^ib(NmETQqFE#%`HSJ;5AX};4sz)C+roX~R zRK@^RFi_=+C;f31H%Jvfp>T*ABD2ty-YRL171*ADbZGKsW zUQ%%*6$dIOM|ByclEah`DD}EZeoalD zrYcQWOJ}IGH&if7Wxu7ubJUP|Du2G}x>&(NRc?t{BYq=2#WGbO^VpTD&HKtPQqB$) z|GA3ar5@d>Uj9tQexc57SM_(R+xJS^i#m5e#ec7QiyG~i3XZFpCsl_ZREHBPezDEJ z8ls@Uo!0zm2Y=a)(w;V@etcP7P+EHxG)uziErwW?Q&T&)8KAwBsy(swHPw)zO9TXw zuATO}TPKb87zdyKZ)9)L87}Cdy9N4R`A2y=YofV&lHbycX6fQNdiOFJy zm-F<{g?i3n{o&iX{xY4jROc+wu|isSPY+z7r@yO{mg@%Z>zQkH);hiZBmLDUI`&gN z<6|AaQU4-3#w|K#lb*Is*WRkTZPx`m^@k#++O5CYqiZ*VU;}vK%c}q-RY2&nB}qn8 z=Z=9u;>mL@DG{W zLq|bER4Dv(;h<{ ziuf#gxkhJ;V-Uw8Ou`P6u||Q>(~2=o2%p{po^k=_0b1NrJ8b5;Z+*ehU; znAU^6?0sRVDR_ZJ^N$zVzbgMUmC1@Ng{Vd=71-(*5r%2=sX9^0k5(xHGAgeiWMp;0 zK*f0~7^7gUa%5F8MFo=;yr%FS6~9)&hl)2V*r=dbx!cvI9qO0eD(*+cM-`q_KOI+z zCyYTgsA9uu+ZAe=yv7xDOrnOG+7kdm8y(+PAM2t)>LN*So27Z72r{WqRC#5LRd(rl zyHIA)BC8YaTs+24#;i$LxCHC(#N8eRwM_n0AiBYKscSVxQ3ig>V%2wwn9C?kP*7g6 z=o|N{qVE-WI=V3=Nm0}k0(k?U1zXguWzd$g!No383k||~E<|BaGjS zNuOiZVVrsar$rnPZ^croNBK>ta5~-dI^~G9T!=mAn15&QPYx~`W`ZbA-M`qq!4H=( z$a~dT4OwF#oC3ZUW1RD&sHv1>(4yT#;D7F0toKraVNjl#^)CTp^I0`gcx_V6a-E0fHJ zEJ2fP-awd%-katJOrC*Ih{EiZ-@D`#!?y?$19TV*k6|F@&_B?>hAxrmt2H@MRJsg7 zS*jt+-&?4#DhbdeF+@%h+0tF!LD-0(35{)TLb0O@sm%&X19S&l( zZ!!Nk`o}OuM&Ey6-Zjj1D6tI1m8G11?4C4vuNmj;rGMDVWejq|o=&=?l&9urj zAM@}fpIX>)@~A6LHm|Fxhc}}u4^1AIH2XInmpm(ZO7b)&5EhcVf;huyxvR>I^c!XW zVfQ|7r^(M%S7&wBfxP5z7?r6bs-I{Sz(87zkr4E*Xsl{!k}i5&sjF6^ToX;fZ)T*A z$>Kbk0q`0e75~vpa3gjP_f7DG_BIQgxq$P)oegP)#^~YghV&BHXk$z{%&uf={;A>; z$`uSFvRIYnC7FQs81zMrFbPv9W8zdJOZFok3Yc!bf?y`%>zF6+$!sGF4CWg?tu0-^ zVhomHunSP->88jG=eK{o#+^k&KBlIlHM4la2^CeWrS z6kMZlKlb`F=kWf;{QEM_6J`5$PCLbC&vS6a6k6Ow#WXjwQ(*-xd{_B9)U98r^ZQi| z`F;In=Zf4&(s-}iw$Lw?E)nc-8I4ieDX;w&x?Z}*cDjK)ltn5#Ppqf}MLrg%tq^+-XoMGGK}RM)i%-S+C>91WFbG|9+MBjf{o0fJ2?g zT^uZi?9V~G&$=Y!cg)K|y! z(Iq{!ze!7advMq?8a3$+Ba)TS7%VJAXAb&@F*k;STMYm${apn+RMI!f7tz;wy9Vi$ z7P?<&EnoxzXLWi5yoyH49ZWKphyc*CqE+^OMJHAIIeS#R?p{l;@2Q8#e>!JAgx2zD z*U~JB^K!zE#$bYZfa2@9Y2=YN(3=@KrUXMIHne7XP;*1on-tbt+v-8-T6NHU@6ubl zX!k)au&>7VYLRT+G6vO5O#D*GZG!WSl|KGkj6H_=e_;AGjCCj!O`S^9<}ws}2gTh< zCC%uS7L>9>HM(HOmenz>*&AgAIcAbj_$O|V*+Qgl*)WA3cu~m!TmohCTI!^*j%}-> zI_PxaMLeWaBt*Nvrss6}XF9PAteK5D|I;6vg}rBD{Wq~`A-eMr=3?>&ay#?WUCbsz z?nkNzt46}eDmce8S#r)yjGBYx_G3+pTD#P<9F?@C+9y=XXChitw>+paMTQ|uf#E9i z1r;p?|6)Z;jUz9KC^M6@uW__xxiT3REtV*nT0wGanENv1MAXr^7-ooONv6aPVfP2| zdVl<40N!{WZ+#iBjKOkpGRO;X2;;=BdIl4(;7giDibN-$U=q<}nk(xwk*X$gl@5HM zfU~x8q3BN@Q}Hrb{%5Kzl8Mu{6Q!f?)xNkVp4I|NDyT;8DpE!4Rabai)we0GA%AjQ z%`1Y?ZkSQY6rzba_?#S5)A6}QMu9BzRYy<;#}R)-k-(Mv31d&8a~9`aKu45ISMkM4 zK$pIa`HWBjQ7U_A7(nDc zjlE&l@wC^>u+||Q;p0WvQ~yHYJ)(Iz?6s`KU#zAIMoBnDWhm(ldWJ~lDQBfx_`XsH zRCZ+W)##{o^rWSKw{k98F;^^g*$S>%B{!_;0FDgj#2n;EE-p|kJXR6bCBpqxKv#ze zw?k3`nAi+PH-(%|uq6|Eb$~MI5OWXox*zOr(5na7-Qlgi@LoSS{v-@}3VIEJ=wa~e z3(#c**e^lzmto_JP-Y}l5V+ZP`28|y!m|5i3 zl89%^V@XBaRtZZgV@Xx~xC-u%XalmsSkwmn3_R8jgSKYl@3%+nh#fj1bjGxM(Z2`% zZs(GGU&|L#A`~Vm`Kn6C>`tjoWzp9zOpWe<{t; zQKla`@hr#u!Sf_rBvz%CQ$JKxs*(y-R<)|AxLegdjn(c9Rr^JQZW98JIQS&6_1&f> zS4-f%qE_M-T5RcZENA-Kl;y%bOV=zovNi_wpWe>2+=V`FFe zvg8_)8vcGg=3$d(9TGg6#HsW#DJ?upKmDc_3fzW;y6bGcVV=GufhJ2dFVk5o4fe3g zYEAF!o~!iAkMyRG^^grZYKx}L`s`S{UKVt5s65a#gjy_{A^|2WH8>aa)rSt=tW^Tya<yX;yHr4cT6)?0<*L{THm9WwAJ^#kZdR|9dla z9%P80Iu|C0pLz^T90ga#!jXK~9vQHlngGov!j*`h`kI)j#ZvvZpE|z)hE0c**WtFm z{nQozv!D9Wh@X0DA(Wd3#!@W}Y(ynRi$M&k$^Y3;oqiLJ^nc^0{s@}=W2yezPn|D* z>Wu&qOLfWruBBRd0`g6l!a6efk&Wkn=c*plCgQ5j!Fm5&G~)0bZH(1NrTU66i}J={ z^_%_p&5k?L5&XNWdh`FqRlPmps!shsb5*ZJ{{PrmEnEdD3I2<>T2KsPuNLNm02u`P z@SlCwD^m3e|9|#bTh_XxR`?g|m_P^>{8kxW6yD%X%wTUgCLTB0Qi)-0JJ_<;5zM%h z1R0bh=3kll%bdTlx>SajoZytk5R!=Ghwy=|6g^89JkQ6(mMhJO*t#vtP6HO7+P6UM zjMFx@Ki-fqU(tHWQFZ`Jq=o<9bTr-}^p2o+7&CsrekZWxCrths`4{v~q4z7^IBk|P z-g!(phu)uNFLO?qCzsK?f}TaeUxt493ecTM*^i0y~yp%%{APqp@oK4CIK_>4d$qPSPSz!R&M9ETDC!wwI^Mn4Ct_v z+1UE`XeUd<-5R@Sznc!aYv`%rUL8E3m-N!X{W^H~Z@qC}o!3W$T+?YfXF8mF9j?wd zlR6+24Th`Gi)b*a$!b!r!qR4};YI`)Ddn(qJT{Uw;;d3GS z(zv~6q7c&8V(Ab63n`^0^dHC?-PpA zL|!tGC4U#$QIe?e)e;=$`wK;oCbs zbfKj5%F6yYIK>gF|ChFNGbr=;|D2NfzaNn)PG=_(f=b|21}6b}|35}#hQVzEPFrv? z!A&<|3jgosV>%=Lb3Ue|VRjOwJ;<6cZe}DR^CKuz1|7+ruZ*xb5|O!;+}#RJD5->( zM(Wb78!>kuM(-3;0|Hn+SuryIm%+GP$92qNW!n%+9ZLRJB*4-|A#R$%g#-AKY&|~V zoYTDF1_vc93PxeF<)CW7YP(V>!aYZ{97;y2evAr-4DKMPuF4DXppN2(Dy5zoO<&4T z+*WzJ6z)*__L>BTC-$vFu!S#c-;aPyJ9uJZ25m# zxmT^U>z0td<#FQ;D~llsfh@?8z-)`;%djyjE8#POK zAb5`h%Qj~)EExhBLm~btfZ-574C0?NDO$2Na$hjmqL84~o;Ojj#Up_NKyeo2fj0)a zjs-v82>*m9<4y##m$_-Zp9Zp>xjGqeI@EX#@@GQs>(G7{WG#RRv!V22sJ{eo1&m(~ z<=%nv%YfeoXC#t#AM!qgjh{mMkD>f}s8IyG5!_;E zvl*&v0oVb8uWh>>Ui%DSHx%rFu6tq07Y5qQ2O#ZhDEJD}4g&6j^lzZ>TL``bbqMVJ zkoi3Xhk=g({s6&I$U6pKoB$f@F>Of0oXeX<+jz$Un$G1h2?Nlh`XIZkbXSuHW! z$7j<}iRdwmac!`AI~3k2x5wnWj5MfP2W;O7-OlKUC!!0UxYuM`XWxVFeI_AGb;I%9 zF{TH)58(3qF}WvZ^g@0J-G>n#L?;`AzSz4rI)eQlg#G}7h1v29jvJ2mzJSj2=u4W; z%LqBRQ})iIFq~%ycrXE-d~{{_9GRt0pNu;T5MDLV)cENL(=c`>X3xO<*YT~{m^BA` z$RcL3p`;3UC-j~XCW&z}ejR!rxau^zXK}TtH-Ezs zvh=xt8!lqkOStq3wvm0Aq%d5^oj_|9jYit;81*LGlH&S=9U<6GN;Xqy-Pr&Yl$eFumKGD)tfB3wix$cz?=$RA%xtJ)4}z zXyfD5Zy-H7i26N2!v@pDC(Y$j{1i`7aQRBpgL*Jna}qGpA7O zWJ-I5_*Jugp7uJW&ma`YY9ZwdntMJiT|fnkD19L%&Z7p)>D48&&m~wvk4dD|D#}?+ zpRJ@7@6yZfQ|wwwSwpS_X?;jDKc-Qb+|&W zUNU6YX=2B?PQKh!0tpB9lvoh>JLG3j7JDnIha+$lh&b^%8g~#2;eY&xCKL^4e>%qZ;?25UgC+9rO zUN(EO*?)w+-V71Uc;VxQIu$pVUmL*B4&u&FFb-k$BqtB$`NLQbXXhzi@(hLQaP-TZJCbV#?7wJysl9V~-zY8^6KTOlb1;sBd`^jYK>Ufkc@htu%(uV7egU_8 zm1|Dr4%673&O2V?^!!YaGS-9 zi#T^F`)_m2W!!cJ*AT17a;~|OVHHn%m%Y^-eviXzIrjr@_z}Z8hEEL(=yRbutmhg< z>=tvdk^RjaY~dx_8MZR)WP1nK_?)wLvAdfKw{g-QlQxz0wXu_=eapdj9DKvh0Zu%` zwZGuPgWT&Y4kBo&@Da{F%FYk$ALp!}_`4rD_ZSB!IP(`yJ;i^WwA$4|KR3VdHfBjBa{?uvr+wEsbWzAvO=Y@ZB^i?V^OM)R#~MCeO+89(PdSd zWc`#==?N-R+SNoAT~XziR~0L%{0b_ltQuBP&(=_zLMka)txi&JR8wAx`n;-YU0r3= zQWa~f&+Dkd+tjIB)wusf-Mh#6RJH&A>$=vp_S!QBd&Xc0?HOa5qRf;;lx+;gA%=(& zhICLWozLtU%1|^!si>ipq|*6ZLn@~nO4320s7UDKP@3Osy{Gzg-=F*boW6hk9*_HR zKf1dmv-jF-UF*7DujlJTlb&ZPTbouVyEyNXe1o}si$oE)x1C9CZIXu)*iMeKk89LIuah^H%0@L?G zv+#U#;YDW4XmkH1X7d=c>r&J0GIPOLGxBnC(^V$#O0(t)^U>Aj_v_5KYt8;^%p2F6 z4{tD8H<}Q(mz&J@<4pc7=DP7_R;hU~Hcyn9jEQFHZRYby=DEq{+9{@fxq0DsbM;hn z${psuTTSYn=80+MnF=#^x;b)}dGQ|e(@gWq-R4aI>Svql?lpDqGat_}58Q9Qool{) zz|?-w?5{Myf<+IR>mD|#kGk3P{R_=WkC<_fnO`3_TNat$7n>HClRjnMeBO+D*%ZBE zqSsBZ#_U;T#;-O{tuQCAG~c~v3fG$%YfbeAGyVhf>_(IEz7xoOy~$JqyYZ3v{$q3Q zr)KPD=E&!!`U~?tO7Tz3qAyL!Hp5%ZEnk`L+s#=!%uBmX@FU7OiY)m-OTs6MAUC%&j!|NW4mBj;oCvUHm+qk zA=ulKY8TeA`;u%{V2`Wqf=AB;_oJbW8r!guU3ipT2+vMvDce4ul~D9Gw>^)w#~x!l z=h`n?*yuR>SdNoP3}|JeDzCkDvtVvp--_xG^p_qO2~c6%SYq@SHpYYdNAJBQhZXIoQZ(}%mX8kmD_KhOGrLXWm|zKt)j zphIV0XeVA~`Epx&g)O+!${5FEEWXOpwbsAJ`ZwBmupM;0ElNZe$#}bPER?uTix`&K zXo4-f&GJMWpb?btVsnKJW&ng}vt~MtqJNL|@3wTGt(3)0oLHp@L z_Mu8!{jj}hp1lquk_YT@z_>kPlOMHDJZ5iMXa_E`y`Qz`KVk2E(r$R%rY^Q^pSJl3 zPFiB0dC`u3!Onf&u7v;SB|GG0`_?P=``7Fh2`S@KRd&u&``lahxi{_5w{4wecFuCU z@LfCL9ec_O``RkoVU3;to*l5(PFiVYwVl1r9^Kg%v?7{79cNKS1)V(2DOLC$^5(eK zkiOqBNXr+HzmOsb)bHW|?2E*;cg%i10h8tCdigHtk1@yo|FCPXI<%M1Yje z7P(vKKB4=C<_gV`@Bs-Pl<*;;1rj_e!6QOj1hE|vI-CP6&$aRWHh$0s57~I0!{G1& z+w)NyJ?8M{&oS0>BGgp@OTGf1UDg zR{l*Y7^lM9REVa;9g3zZnWp?Zm0zL!naZD~8&>U!%AOy-9Bk`>wQzb-eahahn%;-;Ces1vxUWa|2KJ0lpHocwOHhH|Q zoQPy$8!8pHCtOS8#P~k?$MHS#_2{qJ{Sc1u1cvI~!}PH8b=oMss6@BFNdJ6^{&lqe z=rY~lvG$Y)kq&A#Siw9aF7R zn$qG)=mPQY!n^8nr@)B{4jj#UL%#eRUUMz`&+)crIr~LE?`59%JlA=Je|>=uyv|8) za>^UL1Qh*s+;|gL|IAvRmYGlo7#iI*wMcS!Y5l7}8$Ta$f? zX}!`!-+50S@IE-?bxN^EplWMu_hi`@TiEMb+h5w)b*I>BJgX^oDNMT{5@VtSoho!P z4|9yW@B-Ie#C14Y!qKI6`wO@LD$aB=!lnIb!cbaz6-ghS*Pp+Co#W;F%oF-y5W@FK z&R+RyzhwU)$NVe@e{_;*IUpzhB%Ke+!9&vLu$z@U@|#3i#@=R5xYN`v^L!}5l!|6i z(%lr_L!GOLr@72Hr&oD^Dxkm_r2K}?3JM-LLNB4O6}HL&N%G>v9>(hQRXz1${~x&@AJm7>%Y%?Jw5 zsK`kfrM)xefU*l)+=QJbnm}|1MbjKNk})Fm41|BdPF~(#n~u6MlxdsH=FM)N$Xm?R zIx6~7VGdG^Hpot{1;EiX4dJ4osk_OXjwup!P?$J_*9{Q&QZCv?pL|8SrK;%4UH^;s z80)0FbQwID?@0Wv6Vo<9Qe+QXqTJA*%9Ko0Qkp=ZJm8w5{&&it^ND%lDek>XdlG!J z{fGurcsa%6C`N0#j7B8rAKpyzDro$@i9ga46fY)v-O-N)y|wj!;5bAf8NmU%Z$4a@tUL6m}w zsyYSQOHDAS=4rwk?CFeGa;;O((k$KPA^rFhdf?N#7y`NXbjn6O;4_{2jgEHf^dEG1 zNKb(7{bYAv{;Hz{#jDb6{GvhZmbiB!EYxwwOs@nFwZiNd0?zbcP!uQ(rek22DGvF}%arvd{B=^d3pJ)pe}YwQ{Vb zlWo-2egWh8cvlV9*vU&V_MKznr<@PbylCZRD{E~P!ZOxb$S-4n;2BU6Q&}2Cp?qxFc*a@d8T=Z1}RJO6#w)aU}wO6AbMKD7=%$PxfS&N4Kb}U#Acn zHjr4RFi+-v)0_+#krN%?;z=!Z+fsvC7q$*TBt1*q%Tau*YjNC-gGG!G+vp_;zK7A@ z#`PVnFQuO){F--2-XeJ)`J39qule&AFn+}2Ft2UdeM3Q?Cn=%jS%_?x}K1T#S= z3WcK%u1#08N9p+zZ&lU1RS5Y10oS6(=S@j2H?u4tu1}OkUQ6N=DdEk)MDZRc`$8$g11stGz6z1}!X;{EoLb=LpQtG?gno<{+C={q=nTZdRh zc)#EaMHHSvfc_+i7cL5k)_6G6an+^w-Z|QttxXskKWv z2`_V0u`E20{R$DK(XxaIWpILAH`NI;|G|gSPM6nMQEGfBRU&^mP=KfY(}Ys~rgcba zJnFqlgruIM2c*~H5t#fIy8|n)W(XBpKGw!3*bt*7#0;Umd=2?G68C5G4%5RnYG-|@ z0`7DA>Xdu9=WLF#x}e89$mMT3u^_(C@ffS^^U_bYaaS9b5N}mUf7LB_61_t4Ve!Ax zd{BF>48D{p&B)Kzpg;$8@Lf1Ua`*;OYc84Ueq_|Z0=ftaC%nPB*6(Mdp-7ZqG~%F9 zcP|%@2=Orps;hy(uj0~E-0Q{}Boi&;r^b5tULw2~T#!*FA)@^z?ay(Zh_L3TKFLHU zxv-?9q2$AdvRma9(cqz!JBE_3rpXnUvv9>sE_|3vF4GiiAIHHJlJ=sMek{pfnx;EU zN?%)jmhA}y0j{NB?E}X%gXL9i)ocjc4tYO<*_t>M01{w>p z`m45dkHSx#d^c6DAeydAH){VUNgZgu`NZ_wX@=hE`9moMp137W6B2yrY+^k&YvgG6 zfu`|id8w_LGSF0&n`id9Ux^gCqL%uLG+Q*(-9ytF@Phh$4&rG#@`aN)Wrllvf>mku*72{Ht{GmR6qb8Qp*CaZ{w0YiCZZcnfYf|@lGp5++ z6`P62dpqyPQ(dOlysfiV>G@sh)}fSi9;IJMOUBTIS(I}Rt$YC62va*w9?Y%qsPE*1 zt2k)`ClAo?4bk{#CqliOFVz=FG)8jEMAtJ}kY9dl0tgzH+r4MH=Q#}zC#JNMUA{oK zseH#WU2?y9<5goenK~aCv%_Re0gsMS#t>o%a(Zd~p^o!q;+2wj6Fx+@uI_1Tem~W$ zFEb4%8hfkBy2n_wfWS%XN>v@X1HKw?8&?w;&82`3Y%-^OWPaFUvR|^m;a|ZwH=b)6TR-x7qUP*5Fl^P=nEwdYGvSzYoe3TtiZptzrK2~?mu2v&d^zlwRu%%tk6UA#q5+7Xl3k?kqu2g zChTp^@>5M-shN1Y$-LWSSDHNZ4*}Z&Q3p7kecsO*)|+Ch@3aN8ZNV#c*Q<8G-z&Pm z>bEm!RyXQgL|65sCkIo5fwW;Ltwc!EXc{$&QZJ@Mm(hLK(CcH}30MxhP@=k%nIskT z#a|U&g03btwH&HAlx=77&YH>%b=spGJ;wf%OsLl0;mL2aS;d8@)0*oGQJ(eExqWp? zu`cbeCxFL=YHhJjdrGf=TG!sBGdJTBs^7wm=4i=jAy?GYW2MsbKKX2pyg4rs^E6+c zL%LHw^w(=8?+eKj zlegYf?DHC&U@NhEq;kgw%=I}$>h8N-fDz#uzUV!kx0WYu;0_<~EuZtT*qs`i^loP1 zm&V}sdc1A@s{Ih(2$u1cvJLC@Bts{eU={`UBocWL1F@8N9|iTCAs233uJPgG)Emp# zfgN1&zbO7!Fk@3%&A96UzFOQ+k7%y_<8=BNnl9Es;w%Ve>9qT_|CA1%*1IrA`_4sa zVOIm=ZFr~gUpB!T z2D%-2kixeyq;>{#WOl>F=6`7D3Qg-p@E6arKimYVcF3!=5a0Tk{7m(Qu9a54*Je$H_ow17saDdj_TNde5!8R4{ za5@v&t>lP`YEhi(a_9o+J(^Gen_dkZDU0H4qUPjhlHY>l7?Ms-yb)aI*o=IXo3r~p znR+qm8UJkOJD|n7=r}2DEtPE~?kFjdWOR|Rm*_LZ8zOllrQ|Znz0O@~C^12c?v=Pw zc%H-vJy|HUR(QSmUkHCG(L**sfi%xHn{Sbd4xrPIZ&+Dn_azEBq}9iVRAeZsO?dvO zGh=8<3&`(AVV{Jg1kbsM{6Z?~OHn@x2N0c2A>dAfC>T!RF!D!Gd?AIXS}&kzG)0$C zd>MsTQgjUk*ONdWas$Q19D{y*7KZ~l7|bz##tFJ&lk=?kYYqNL@aIMW`(0UbtUTuK z^~Znd5&)y^i4eeVmF!aVtMY$S(NQkCD-0=YNs>olPYS@j9O`1T{F>jSkQsWvg*tlD zWiW*&N=9d?D3r>s;*FO0W~s!HdXI$jg+3B=%=|}fM`Z9lW#eb<`!CsMuiLoF`pXh+ zw0CXrj(zJrKvvn?s=}|`)kF5G=tqTkj@Y9pIZ+t~6xE{$^#Y2eCrKp5xq*L8Q7n9)jeTB;ci*ZTm!XX3|{oFDGSQ0M0s0tSk zOLJ{UwBvFp?uDC|_=^dLyN{1_m+}vLf9Qdc|MgrVr3I?*1~d<%<+IelNxTio0*~1E zRjU^xj96a+ebg!X0(iIQ8_e7>nnWbc3=I3gNJ;#+-^xs=Rx$2YmLg37zzcXOcr_r&@hE)X;2D5}h*eaF#Jc~o=? zO>F0|vD}%wv&jr|CjCl$o^z-aZ~tlHrX2O+bQu5pbN=r_xYTSgC1oBXS!}+C+Y^y` z5c;~UYQi?vb-SXkRNhXN^0o55Ro*V;?RIF~WdP*vbupdZA>|!b-a+O6uK0*Lp;~!x zx8S{cF6u;+BJv6-r3-B;qB>p4D zl&dJ^dh%dNyP3T4v)I3A;-C7db9)3W}Tuqgl zpVw9I>D)ECa)T~@Ul(uEx#gh6d&+i8Ce20i-}86adQHs?9cW zF~JDDyLE#(XTQn$#mEseo4nq2z5Kw-spsW1@^V^u%UgLlgi za?bU7kMMFvd31r7bE%hewU={~mvfaDmV5sFUQVUgdy!Y~5ie(<*ZXm=_hK*S1uy3n zuiook@0YxsDlg|XFXt_<_q*QgtzOQTUd~Q0XNQ+_p_R+5TyBFa+{8Ax%KA6h_(mIE zZv~9UaW=-3c7l~#ZGidgB#VoDIN1u~(r&jh)$(*3B5QA!jb}R!q-d3@)Mc1njZ!t0 zK#UC>$14PxW2q5{h*K$COwo%Jub>}c;`oYU%ay*PaQI1F)r9>*rta>;oKj=%nC|8a zf8YmKI4*~`hQoEvyODi>tAF7Mn9=;osnuM5gnQP~QFGn-I34E0PNJ!e_OYA)lf7b@ zE?nybRE3*$!EZ?GmQjJ6m?kIImJ{p9^b9fe<-|sE?@=cepHtJAvpY*1pYPlO&;rJFF{70E!@ zQCm|0^F?P9My3!Jj4r0Io0(E%3VWK=UZ(I26OJ;uH=DKaWt6)FlPjM#{u1LqYocci zy=eT`jQ_eRuQI&U_-~u&E#m{p@{S2t8Uqst2=M6E!pgDUB>&ybvE2aYj&@wkHeWg1 zL_uwrOA<75vV`7wuFC{-2PI67TQL#tXf;Ido$T(eI4PZtVt*H>elPECrKk0KIip9= z$CmW7Qf$Zewa4|h;aN^UP&~}Z28xGUe}s(^zKJ+t{qSM^m}twVB-|gUnQIInf4V=) zR@$V_XaYOC;tfk#FXtF`MZnA(xH2+rJQYTqb_=IH$K}s+>KmN3j#EG57xwUwL;Oju ze!jgZzS4&AP!wXCr&V>~wZM|8FJ~KYv6Kz^Y+ohWgx?9`V0b2}25hLx^OKg1QKcr(r z=Rmh6(y`%63mC-0Ksj0X!yQz&vD6!r2q@$qrh-k>b}R8t+IE1BB7Q63C24H_@RES% z`Inbuz@ISBC4V=PH2K3t(f}@!Vi&Y`WHi$<7L46DGBwq4;=AbBNAo2*zElUd=r`x+ z^k?DK_kZ)&M_-mnacL4uuY%dW+WW?gU!~VX65-N>+dFgv;wBMh{nuWCjPS_&=1c2 z$4n8-`!FB9Zsx5qrK`=Jb*A(KFFfc)2^CH5Q8w*3D-gi6v$^0@baR$ln0Fvlpkimf zNJFOF%<}C{@A>@->Y*F6@h)(v%Pceu_xG~lkKVP zt#q?df%}4Bm4d{A2iSrU2?NxV_JOsG{|TrUO=f=}mzQ$qNt}f{@=OMhFqrMY=Kkw; z21qZU%{(I)^^!pNE zBBZz6!xzlvTOVMCrEw>=bRC!I=ms~^3h&Uo;BP^(zd{N8XGH8@$*}tbG&vBQAo-(z z%7n$H2h$?vk8ma)OvJy!ka&>`qj$ltkJxAi`?qu9B(A!bTXu3Plpx}gn2(*r%P>TP zU#uxp$nk2P@R`eekwffkdbknHGL>r#49l3AZ8(>C5=QX9yO^A-BjAm3B5@k_EbCPWGGO2zG z>X<{%6%k$OR>;A>t&n&MCErf9?w~TPlM34O*HW3|ay$!bR?BnL?|Djpk=niBIG>qY zsq=O+UsB#S%KFMV0s_G2go}Nimc)g%II|8@z#*cIkLK0Kar&`5y%o=C$ys1;7I1NQ z?%9K-r=zhYoypz%aqYo8dK51^pY?^TFW~f;qcY|R%oCY!b!4`qC%bt>T7?_c@hp~^ z4*tNE?7hx;ud;cKYrnA}LSH=+z<{q%_%d!=Y2xv}$Tz1sd^UlRDbuU1I8tF?6Z% zE;IUarvi;{G{H^AFEu>F&;y3%8UIlu3rvJ!V5J$i!o2;y*@AVu)zm%=50sZ)$4f_^ zOE1qK=p|j`>Cv9P_)mcOC7!dJ7=+d zLaC!uIm(96h5XI`rNp*gM#Ca_>b(QR_?XNkdY5}FEPAZ%xr1%h}3yPWQhb%O9bOB z0*l|4@|7YW=hrn+V6vMUgM{LiCOW~qcDxB@nD8l6gm&V!HoC#xo#i!%MPU{;-#%q_ zer1x8dUiV()J$zKvO$tmJu{&c*_1loCgEau69g*styEt#(5m!UO8^H4V9b2KQ^mUAu5aHy+uWGkWsYzI^FGHiI}E!WAnL3afTH z?O9#6Oy?ceby^v_(j-B`vC|EJFadNYuTrT$Lb^tN+P~qVqi=SuOWnQfb_y}unnMw! zS=$`0JUW67E63tcbpmf}L-rF8a&F0C7tX_-t~VP9w+8aOAzU)rrGNpk3zv7*X8!UM zmXA5!!fik0HlK0ZFF5aWu7l6~D+k>Qw=r$!u{-$CPTu}C-|`K2`LVf*Q1AT2H zeNl#P49-cJ;y zzm@ZnFF95p-CCcYukSfg2Pa{X=vHm?B`0e>RmZ33^mdxt>u~@&ovz!RrrUJXSN_E_ zU!c)q1;#vlL;J65A2yF=I(%1yVGi!DEY&`c<4R(LahxC}9YxM_^CO-q(YundMuPPc zedvTqG3Z8LIVwo7U+Mv&pJX~WH36M~gNEx245uMvZ>S6- z=l+f%ZLO&Z7uYnV0-VlQsjNp7ed+AF6Ms}^{;ovP(q!rkk9jjWuIHvbifG%LL}CKau2)HVqLPtVePy9{ra=qVeKp4 z(tgc7=slgjMi+0;x$o*k}wA>&~V6g|b{cXuuFWyEM{R!b*wAb<5XZ|43 zAqQ`dv|)VSiR3kEZTMs}Ip1VpB!rG@dn2crG^DVdZcI&&ai}Q-v;7hyFE~(@9Q3f6 zr{_5_Bp5qz@%Q`pF8(%ubMdGDOBeqD8w~s(82K-?a zZylkH{61$ww)(0>`z1bt=CQ%bbiv#y4rO1|%20uc5S4O)>#xHa$+c@1FSKc(#BGF72RAx@xvqws1V(9C^wc8fx9kT3RrqAPC1(I zF6Mp%ctFflgEYsNf-BD}?7zmxZgSj9+RAyrkE1c(!L_w9>&zanOCUv??0R1g<-J({ z3i!4WAF8uX65J|$po!iRKcvkr9bH!bg zSGaNr=v03T)2B?IF@50{Qn;OI2h-O~-*EUX(=Mj(n0B-5VcP3jQKiA<_AfW^w zfQ|($MKcu4X-j zs9A2LxPj93m6zZEP!pxW0cfTeNvvNh`bO3LR@q&u&TggmsIg3Pv-5^KipW#s!}t9m zY0o9Qg*e)taeiL6&){jV=fW-Q1KRl+xBHyOKBD9K+PExh0u zkB;*w$D@|sTgQ5o>rpE&F7rxfc(NgZ7~SXXJK#l!y^>$O;zOQ*N%*_R)gHCA73k{V z`J#enneoh58V72KX4imka{>vTn1T+$EDV!(q2?A6On1@jQ1Sd({ zPU6$uG&$}h@o5rA5*N6q0mT{>N!&x?t`hfjNY5Cykz&`^1*<}0 z@l=VY3Gmv-%`l~h-Fl1uP7wi)riWeG%LQD<=um;@Il%frdICO!J{8PXHCz!uMSyMj zkTaLL(*!hcSR)HjlaKU3PVU^@mYr+8k+%3kTPI<~N=|^<_#dM%-@nC0VHW-wg?aI9 zwk8VmxW7eVE}drebldYz%XisEvut5a8s@94Kjbz&W&f*O`61_}Gd4gBIFK|{H^H=N zv69aOd}bN}EtQWQ~>qH%eS8P3pSi+Zl^4w*-rarWbIDr~ygg1L?}uy|@zo4xDR~xNx>} zsYg>kM2j9RMv=AptD0#(6yeZ0TI%@_4~^d&&BwIvW+=qM}koaJcMOMa>-Kp(LTX zDtn#ARFVG%h0E!k)fBFGtsx|g2$Dq5Uv2LQiVt^n))E*o!aiJz43WV+VgS=1=Ce8e zD@o)chxmqR#mBl`&h2(^)h>?PyOcnf)?FCKxmt$nXrvCO=#o2i=SOvuCpEvQ{Z}-? z^+M!gtke9ymW{dqc5ftKe5b*k2N4SWlEt(Nr93=mZnv zrZCV%L(PLDja*{*dK0a1tu!>eY$#=M#q*S%6pw7#wTLJrBc={kFyb;uC%b74s zYN>rhrQj_}|3$$;&kjRO6Nf%F&LrI1nCI4xPYWg!UVq|g32^@Fk zQphvleu7}^Sx3YQwsM%FGtQJI*NAtAEQMLGsR@sFrMo=p2^zLTtw1aCf=z-|bF@sj zRF-06Nj3rgbG>;9*|FD} zH73BA51AtyOxZdoy1rwZiN7+%$_C(dH~cd?B-=)a4(Z`K*wHx-zcz4UA_wGMdu)9b zv{d16HKUpGt5gewJ-w$gx2Y(T;;V?>p!j17KO^2o6$ot792+R^dAG&T!6nVP0H%O5 zGr0ov>|WfhE9-|`ge&eBjAI&CAw(lVqmFbW@Hlmj6jDG;I@^>qsjlzc{D@Z?o{zt49$gx&v&26Ul}yP7_$r+G?yD5 zmx!1_x_3>=%tK~CA{2%e{TT`a-_r{7>ME1`l_6Xt_c#|!fVpa+_0M;v(Rb%s55X(* z?X~dSJ!&bDw=!>$b$KgK*os8V%Jk>$PdKf>Kwf7X8Re~}Zp$dzVy;2)gA04LPD_@8 zp{B{}D&FDHPvI^lKPfuwx)!0qvE>k9l1W+3ovL42QkYM{iR5=AI*oV)g(InSG|6T3 zA#_;@qXFnfxbp1o!r8sKyf1%0&~*i?a8(3!ZW%`_nbx}=i@%YB4>-Va_6vahuBlZ9 zLJI^@FSwJp@IWE~;jk72GbK`)LWLWm1X?6nLUhQ-Nw7);-@-=8+a`HHJ>;1Ni7o+} z155t>ZuZZC?0;@$$>*EYzjm|#w3T(b&iL2-H-YT`u$9gDk4$##W|{v!lfBd9h8HC= z**6+qWu~li9ceGs?rLT;Gi^z(^-p%7;EIkm>Tcs=TLfbf`dYJXILDSIXxr#$`RMZ9 zWm&1XK+!m-2#rhJ@D8>+BpvX5PP`QSU48@Y4TLw(|Eaq9OKg*n*~ojYV);X3qZyao z48wUK?)qqQu$RP3Q+R7_URH}?r^-v?jC9UOA*z= z9CTs78~fck!1i0jeh(+rAQV4+9Yosi=O&eiQ47yue+c`r8zV-zL{H@CR*r6Cj53Sh zv8v!0bIe&B&*T_$%!i$-oUxMEaP%PymQx~1QnvgNB^iH_NSD~o@eYo^=J=a`$dTkd z9Pj1$&k#vI$nhbL6{@3uksv9x^!!vEg1!H@1WC%!QKpWwbl5`2Ihu~qk_*)TzfO(J z>+rYK$Qxb32H_CeBmNzZqKvZEpP~J`bue4|kRm^zgSlENwZBMLAsrGKksJODi2R?Z zhB`<~An`Aiim|RF@D_WrW}lj1B_Re46Y zHYKf0e7e!6nXscNiA>PhWCLSTWP${=BsjyE^BtGt#1*D&m09wkiPxE6zu_ZL{drQ? z3j&YpdECh37GBiK<3f*%JsRZk5RZp@Jk;ZJJsIKg1&I;T)gIpjZ`zRf+^=C-xD=pdb9(@(eD(UwIvqlazX-I_s`2ioXdTRzfOUidH6P*IH< zYOsxOvBl%;#D61*l0OAe=?Ov9#2P`=QYzg?oogD2Cvj36PP>vbu5+XFsZ;r=V|38V zaj4>02jiVUr4UMk%?{k;@6xjsE*VmZrq+dyT~Iwn=*q;H3A&>PB?S%GEEC*j{7EL5 zY)T;ty3@!s<3I1@;u*_L1R+pETajTK^mnSQH{pwKKTq~XLY{)i)yVYmgm?t&iI*mBBDNi_>4}?4cBD(49FJ|u}Uc8yl z-ohBWcn@+15V={HzkBDy7XyPiI~mR^;n7pLk~>3VN{-LiphiJ?g&y(vS_ zYO054>egAhR||c4j^1>PKKppxx}~0#tDibfw>(zQYOO!Y*JroUshDi zmL2s|uS(TU8L(R}JjO(8OqW&Ws?}!fdu}4If4vE|np)e1mQ`=fP z#o;x;hnMqg@SBI;#kVJzErF5?741-vvPY>-W}n`QB;Un-Mgxeipx{yBMdZW93?1fD zqK!nmsS5jlZ8zL3PUEN{Q@R_+x9iI#GZ^hYbe00_y?-9)^oi>)W#d@i!)b@O;x`u3 z6}h@%ijHx!#x7T>qjaG_;xuRWjO(}_Y}`nsiO^9(nG)xSx zYa#bMZG?~FzZHpLNK}(Rp;TqEYTj7s=IW$;b@w3EGFDqlRksPso2nLURChz@cquvV zD+CXHK-uLN2XKH1@?tK7V*Gj6#|vNL%)}_U!|9!G0A z!i;+ZM;m$a`&|4Hr*7t~kNLzcT=*#$e#T?I;KI*&#dbcjgA2dr!f$xaw_Lc33%}zr zyE%0a58KOym}&0k5(K#X!l?&1^&pQr#A}pJJ?zwyg`^8vpC!7`>h_+_s-;uw>4H?9 znx<3Jb!vTG*gzLH(&f13G}Kv5^pQ+mn5ENN=)xRbevDppye@31vvT#$Ryy+pU3Q!< zJXX(dttaQ}tTwv5txkoM;&h$WUbi?+kLjq#4AXqB_J?ammtz#l5zQCs-~!E~HD9Xv za?Mve+YTgog;n}>c>Lei+u$Qxt>aI0`%iV=7TxD_J?9JE=PTW5haUfp{%oh7^Q~U7 zOWUvYm3#EC@Aa^~y4gOR^o#EEv#$T6z81_ks5EbraI%EcW!!A}{$cSJ$b%1xJR+|? zF6K!oehNbbx$0>teqPKAQu(r^yd=dhO69Ba&}%aHZ87i2zIUbaJ&;~R)`+YV{{sm& zN$`>Q8ztT@@|DOoiFZnn7 z`qPy6I!$_m<}an>wN$#EK8DL4|5O*w?B-;{+?6jXV(P(uFZ|9deYxyRCRj@baw;4~ zLzt$x+&6zgg1Pjn8+&D=>|DXct2zFFJEJBHwRFzTywZa0+d0<70KfRk7N9_@0SYnQkArt#Z}|le+^2fa?ikl3twv ze|fzCPq1Yeb`NlGHUipfh?R3}^|`iSq}@8l!c-nUXSpijzFBEQR;(4FJDQ|?UvaWJ zr?!&1Aep$ihMR8GR}m%}&D9H8ice6|T5-POlNGmhx>i0_aeKub6n9j7n(|Lq+(~g) zb$p@X0wvuQ_f*nbak1iliu)?=uXupsL8{l;iiapp2;_K#;t~~(QgV^<&sXti#bcCQ ztoRBgS1Z0w@y&{FQZi2YrOLle`I8mjp`xj($27%vDy~pGQ}HZC_b7j^3TG>xr+9(# z7bRd~ieFLmy5cG&%bfJie@n?q#qTOv zr}%xv8`Uuz6mM3H_7P~zpD6xJ@u!LtOy;CLs=*H`fN}uZm@G0mF1@Z~B6(#FJOV^; z`6Tke3Z6nMZl{fR(DXa0cp5dDL8;Se`b-M$B8QZzpyBt>q`T?c*|Y;`clS~1TrzX0 z1W|VnP}c{kbROM3pHeHSU;*ic)C5MPC+PcEs3Wv_RrJ#es$NYa)>9)KNm!By0yP|a zyai1gp9_+hlbxa%H+?8@_SWITdR&e20A22MS0o@oJIdhW8*`6<-)zKD6ONm5bprl# z`U~(@O+Rwx7&plQ?@S=TGC=72I_?+q*akA&j$lVvTHX zK8KI6dD!v5OBZqW<6OCbyFA8ui@5~?^`7L^CtRjp;nSSFgtMRJR#hy^c*Y9$-**a! zhd*L}GY4CkKXsiY{vyFZ*v<^)!wz2bHS;$deapOy`8(#_PV>oonZI|r59Sw+53qlb z`4F?x{$Y+tmmJ{`v?I}u)Zyu%mX1?245yF?#_2k)uepKdMp`m76g!-ysfA`_zoL>q zUUN%Lxtbx+I#yF_E%`cV3#V?5!3}Z*X-9KKBktiHNy9{blT6qr$v=n> zkkM~arA)RqDQqHRn%6QJDJDC~giX!w$Cxn3$nmCDYmjSLkBI?4a3_rm|%-pfqGcN>~z{%9lLXXt+8KValRBlArBu;GP~3QtTP{MFqt13{}U5$GpS#ivad|_ z4pY6|Wd1+W_WoC>y$?Lz>iJ)K{tnLvaBrVyAb0u2n}Qo|ZO4bCqpTO&ptD-^Hg;Q(G~%>?=hdjZ+Hnzf0H_mJJAq;dk54CO^Wg%`U7)+t++A}o z&E0fxhL*ls`f2Hpe}(2DniuO~%QUUlkYR-9xy0nk%UuR~yiel2&eRb9C>g)V#zR8C z%3|MyN10$E*kW!u$$RFD^{%sb0Y+4xnOm>&LUIOh?qH9gp8y16vHd+Uv_-0y>nEIJ zL$q+;vn6vm4a!x_?hzB$jl&`r>{$1B1KB{{OLityIzWzhOUyF*IQ1GtTpo)*Ut;A1 z@X}%ctg}DX^pOsc{|@t!ae6AwGs{mm$Gu|D8VE_1B^*X?P_&#- zWd+dfoanS4l5K)x4O+y-=nqud6inFRmB3-KN8N-(fF|TOr4|r=BhIOovyd>Fb(5Ie z>8sAu0T6Z=rl0HrK2keME=bGJqCoX}f%xEcT;qn_{;dL!hTqQiKh+Lw?|d0Qqt$u3 zjUrpn$?ocA_nu}a7TQf+?3YCr9wG#4_+Ue-OpZnhK-8t-oAET zfBWM=n>ol94X}3%v0tBM2c2ni&#~8>YeS61&$dT~+pA0LX~SGx+La@nm80`@HW+Nn zI@@>mspKD3$_LC_Iag~m{ld1IlT44grpr?XX(>xLLi$BNQT!orD-d01 zr|)`@Z~`DkN+4l#FM~TJaVBzaYjae~sZ}%5*h^)<9uz_Rb3+y^(F~5EZ-;*kkM3wj z;|8Oma2XfjTAk2+rG3N&IHW$~U$^tzZ~4ZrxzjHG{W}i#@R5Cd?Jv9z^1MU5_jgV` z!e5Y%SWhzgSkae2Tv|(iQCH_R)zuC4lg+e$w5|^I99+k;bxDrie~d0UUJuRH)vbZu z&`VEtqm%Kcx=&+YM|}V;25f+3+6-v8na5Y}mpEx%StVcKk7RC?-(H+3Hqy@9{P~344MK z@@)0Vb~yB(r&zzeE$?8rA8qTNW>X7nB{D_}|H$Ym>TOHUu;s<}ivBiZn4LJnrp>Ww z4_cXT-+I#W(-wa47H?TzY5T9W@|&j%6mVe?Sa6#1p}6Q^{l8g(oY11!B9$A9$5+bb zXd|uyBHq>_k%Wo-I|d6eVfXeE`xVrE^o~o-lc!y^9K7MkE!em~8=LqV_B1%b6NCG1 zPO}%mo!XV@HRoUBH5^11UsfDCWK$}FQJ`-b?lx6_fz5ouR>89LrjxjYt1ZeA(Ta_t zBo+9;s44{8`E^y02o{kBO6sc^qm<@KvXnrV*jh=xl9QFRRdTA5_DVV^>8Rv16`Zc5 zlM;A>3Y6bnNl)eXR#L2_pOU^x`YRcrWRT*sl?+jGjtYk<8KI;^MWd8|kqXXNG}@Ki zGDi7VDF13D*D1MK$xX_~gyJ?8OjdG-il-``rsPf~6-s6*nWgw170gu;nwayHEKtEh z<(BJJ& zx1l>X4EJ0Iop4&sDvP#~@c$L-nz%as|DNpnx|<;XU*N9bhg?Wu*&kOVzvhZ`JLOFy z{~nr%8&KlnBl8?cnHQ3L;(FTA-}1KHBpQ9r6xZquU@K1L5Kc)*mHxCzf?xL!VOx3Z zcVa5!0(cGja^<;PGK^D(a>{T{DdCinoN^wgjNp_}oN^%#zJN0>;nIsZ?^@2do-ezK zQ?BEb8#v`A&KSojiLQ7Vw*5p`0d8ek`ycy%z0I7ng_nQI%Rl4gU-0tJdG>Z*zJr&4 z&C9>x+28W=UA+7|e)#_*?mfe+s@nD6`IIroOb9R&0*0nDAz&zKKt!s{gir+xO}d08 zU;`0BKwu>V2tD*F1f=)g1PKtjR7GqQ0YOD6Hbe~TJY%ta_q+GC_y78zFX#A8E|f*q zoMSxYzJK>kEb=oRx{Y~vF#dNO`v+FOheiIxJel1+K;NPwK@+htJ70Jk)D$U?DNj=o zo2nI{%28A#k}5}2jiQuSjPi=p*cj>-OL=irr7Y!@qp?p?xu+;Efeu!rZWSo6Jar3= z?8;T8vDK(@Ey{a=y49h)+LYIxFpJX05sf7ZIpXcfL{o`ol0BPfF3|$AKcMs+qAe7* znJ#}s^^OqkliP~JE3li$T+vtwev`Ab3Ug%+Jj-02MMI7vNfLiSUFJIGnB`>VBs11< z8krCWuFu?rp(%571GJP7Qf|fkGPCG)+p^n?1@Esb?dLav;jEF(u>w~&dwcrzPoM{=2)8tb&!#$_k&yriQg98d<2A%wV5KfV&O za7r+)oUWZTbl3i?+Id|EWOe??UM+I{p*oNr@>Y*AI0BYA@* z+67?_LKrrR#pDW@D;}j64ZZhFEi(k^M0!!g5E5ybbnf0R z@`L2GVlSI{M(BCl$cQTKd6o5^8a~wcw!BHUc**^`#`7C!WOM=`a?r*mkx;q`i3w); zIds=y-L$tz<4T>gR>LOkCu!+uSacpkEs41DPKcci{olze&nTwCRgA~j&lkbAs&HJz z|EBn!x!3S}8~?B+8_{$Dt&KR!>7kuBG(3W?JR+`0d|M|B2*S6s2{Urj(Cvn9cXYd= z+XLNR=)I2E8~uUky@T!`bO)n56usf-zDN5-{PvM~eFCA{i3OD-t*gkY8|qu3e$(xy z|FEo1|6?fLPXmD3t(h#uG^pYi3w3egCcC3 zU@STNZnO6b!(Gn4FM(Su!ly>05+YQi%F0*;+ZeBnb41}eHbK8}0TfsFf_&0jI{Q6P#;Qz}((7&IG&>y!q$6e2E z`t_wc?Eml%_QcqKy@qe1^Dc({^D>?tf|37vACoDgIaNp}$fWq2ETfFykEwE})D-DQ zLyqb_lT1!M64$@e*o1RAqHt(HzPN8%klT`+*5tG|LATBza^52xOu~T0 z_X&p(4mTghm=5qM*xP$;L|DX(ZqGj|6F9M)~X}v0IOWDeN`mj7ID>X16}OO}JQ7c3rT3P zvnsQaN~*6eHB{gBR8>R}D7>;0s*aGx&#L2}s;-}@GG|ogIn_c!i@s427gfv!b?LIQ zzg2imCChPl$9_ub$S|E#P*+RT)v6g{jEFj9>Lph^O6+MjEnp>_q&v*l-Upf&>aGiP zv|RDaHEh=2TJ3Gnaa(oSEm|@}Ji!a+>A)e4k|AR`(c zu-^ilvJe-_p)Dr#7iiUS#uJR6FrG5}XIUtSbXi1b{uRb+jNh^^?%JXX*Qu0q3V#%k zkqu33Xk~MT&ExEZ@izQmr~hOx`nOW^$v^CvP^nq$-%HI1-MWyj|F43xsE!KNoK6X? zLS<)}f6C7Icr#5Z_wQxr)4Ij6}nDasEkO;}F zX)4*1+Dv%bXfw8LWz-`e8j|*AGK1YU$X6p;NjWh-hro4kC3sp=rvXvsIl><(AX5T+ zfmF5)wfL0nZkn$c5QqOb)GTX!_bGBSb^>=icq3tDHhet^cniRn5cmp^P4$>N8l5?K zU?C>`b7OW7-I#b59Z^cly?+gTISp=`MV08=x0j-*iWD}4&Q2yTn?`OT|BzAGqRrl8 zW;~ml#CJRM)NY(E@6kX`p2q$x#+4k{z=2QLImhl9^Q}3zIaXMpZIs(hRbOZH$!^Hh zzfas);Tj9;^w8qCay<UnpJ<5PGpN^FE6RSvmhX=`T4-R;PLAC z;8CP+T}t;UEt%5lQCbS6HKt{ zgJbNRX8*I0pdw7!B&q+40|~g zW)2f*r_YZv@034Hr%%z3N>F2T4bAR+ncWG;;2p@7>Gv`WUyis68?DCdr5Lvo{WUmx z1(sZgaceQK94dD{Sp9W^ETTObKgWoYg@XP<5?gDb~6s)=U{! zwzEFyV*Qb3$?p5>9@fmB7QSxrFzaE!x|(674YxiWZ+$q{`dDZ%bFEejt+q?7nAO&o zk6XOcnz_e1BYc?CR@rk_v5Qv9Wy`y2s%U|=wz*}szHPPn)$$)&V%m#|fT9JVbx~+i z1Xe}CXOBSxfyNYvWhKCi1^aR6_#`AGz=X2UMxff>8QA7L^UQ zw()Nvh&b3g9D`vPEQr5HV7~(RQ(>cLmdVfVBKUMPwtEcQ6-B2cLJSJ8ewTy=h_Lx_ ztXdkYK7pk?e4{M-PvJdrc_d=b=kc@ZSfVxt>*5;U_=X~zV!AN5TVVV4_*)vT>WW_v z#Gl6-4JVGlq`81b8E5A3XI!;O*i3R^04i~=#PvuB{>&S(j1QB3kPtyV7fyJ zXR$)u4tZwlJ@U+6#2#Xsy^Mvf7~AYe*KyhR7$@f0AFxcwIXmJeo_OS({l!GDrv8r8 z{=nw}VM1#^ORrug5Z=yxN-4xwALoq~xL{>||2ZyD zg~wIpVzszmZElvzlZCYN3j2>>JH2_841%OJp2nhwh?>EHIh-<|cdy{o<-C6t$FDR% zzp85))-kPT+Q>m+`mNy&oA}!;hUoI`Hnz92yMt*v+q*b#59^Qk_HMp?h;JM<)*kyD z`(N{suXxEtZgquQUgb@9*b{5KK>sWu#3(01jTDh~F*Tut%85}irBqZ&<;AOk<2+0uWc7H88reXtuCH<%tE!DuffrR` z6BW@){VtfGE^1erYTrYB+*1YLRB8Rx-~npTdn!0YZ5yh>-dAF}#|%|COWhx@+DuZj zrl@nX)cdk$7j{sN8nMXWgK8~NFDz9{SEymjRN_kY(K_Xp8`qdxjr72K;Lb5+Sah5OVS2UU*)s-UpV52?h% zD(0B#dsI1}sl;>Y;OA=ZWfi=tj$cuwzEwppsO{HOep#D8waflw+dtcJx9zMuc7wZi z@DF?VpZ4Pq>{@@>S@-R%eA^D%CoFxIw6Ihi+ia$S!ljASMGNYo(K;ncM;6g3g19fH zvto4oV>-FGj(l8amDKOX>PSyVmewh8Ix=1lE2Cd4tFsbxu$)e*q$8iw&pxf4D!OiE z{o`|5VivO!_3zK?lzgS$ApWxEW`uP`xc#klvcSMQ=pnLH z>ZvdE(iv~+uJ7sGcKWYO9h_!>nXyx}H(O`T*KrH=(Zw29Yj2%?ca27=@iyp$qh?*s zr*v58&WbpTiSi%HYGyYo`P)fBazNQnnOrlkHwE5TD`l}2x(Y$ALisQP!H~t4jLzf( zl;@GMk?Bmnm;u|V!VA_n%3BOXIO zfzD~83id-qGKz8jNrjcw!e`a!s_No%f>2gmO>uQKyrxk+dUaH>QOYT*shH(HV?~ML ztE=U_YxyHB$g+5`bzTHlvh>+%;ZBS9S#a8Nzm`@V{b%vd%2>K8-mQtJ+nD(5@_n#V zUm+BcBMZ&W#N7#cPvtOgIHwoS*cOa!qA#W>1Um(6CT_^XD7+eXx{g|^4 z82_n+XcUz_Z-Vk4SH67I<|?IyTGdYd+D2Uox!Mo+RKo_Saqp{z!_?O!)K6p7&53Ho zG__@p>N8h0oUiahwP}S~vQ)uJb#Rrswo&l`Q`-m1Xs@DnhKh&IjC>;|s@%CMQr27Y zuXB`)FL0z)Q3PpoEqE4VE2CW%lWQ7;RPN{Ii*sHlSHSh6eSMp}uOxMaNCxAzOdsS8 zFq3L6pZOUTkaW5CRWV6jnWnrCm9tMZk|~Y+5pv6iW^0cMo4_H%#*_xUulyZ_3AR*C zJ*vE~lmO>F`RYfSiF9U2^m4L~3cITQ`c}ox)y_^+E#On=)x?56hV?-bnEXIWt;Jzk z#+KzJm?$V;KEnXjO3?9RRMtfG%{0Xys`5)!V1>$BsjkY;#0&0!lC zt|G%!nvhk>DS6s|s;VL?t0~VY`&pGIZ2TH(UM*Gh1@%^KW!F_TdMa;*N*6D{W#wIw z@L!$W*mMW6qLzFlmF#53&UR>|TtVi^AszVNq63e!o+@WiRqJIDggV-57J z8Oc_gX4c)84E?WSXRC8hYtviS;eOVv{??H9tkoITx_}kPv_4C>ejI82IKi4B0`eKw z3`s7_u{ticq9m7OiS@yDYf`RtJkRQK(CT@}>U`8Hd(3Kn%KGuFwdPan-80r2(VU0G zhv8pZ6=ffK!8-M~6$A(*8Jc~&CXgn1C>h|1acqT%9KgQ;{*NHi&PG?{349 zc@p`AIWhn_hEX9-PQn>1`Z?Z{F~}`^qoPSe6JXJem*n`O3vJ1Jg{pO;?2a_5D}B?G z`lr$T-gNIRvis66@6fRRROnrrIFLTip`_2q|B8~oA-+Tr7s>gS;0pDj*<>Sxs-sibQ4K7-p zd(`AHwRmt{e!VvToXqWfPOQTRWfGEPh9UWlxKv}_U7s7j$P=4#L@K}0jE}VBJFR$f zYhKcZ3$*9R4xHDH?{wq=ojI*7|M&`z?8ZO#-fAjXQ=P7(F4R>cl2w5Q>dpGJuD%e&9C04tm3bs+h z1-05<1v{yr2t18$-b?K#op-k=IYwF`SRPZeo?5Bc#Rq!44 z=KvKPq#nMf9u77&Qe8>V9xrN2%as zHDZ$5o2`OVRB)OKPE|9etKdu(oTWz0Rtx8=;5_y40~K7Tf(w+Nqk@Z7yXETAhbmo; z&CqRfb+ro0;kicTuT?4Q)$I)`T42swRF$o&?>1Fxp!!fmefr*>8bPkXs@@9dR=F{rL*4F+5L6cn>u`;?)a|8LAu=#eQl@?>!(Kr zw3DuLN9y>|A)o$uoi$NsOw#F7bTi$qU^L*>&HP(y`*2|l%*S1&{_gG))1Vt?)F>v5kH;F2~4=8}g z6qAU@?I6(ABy~R;l?fA^ zg6=e9cg5)#n1`wJu|N*)UySJ=nuyZC77T1f{0NtQjD9X&I*QL8HWin9%HR#VUPK#- zW%W~llEoKa(Znr5HDc+!B**hb;^tKBRjS;Fl3t?%{Y)W|`T_ZiOsaCU7zsBL?4fQ4 z$^V4X#ZmYJrT$1$ZqeI!$qQpaIzxG5lNW4`=pipx=B#Hqsv1XD=TUN+HDtR5tCzS_ z6Ry{s55LTbZ8%(bIBA^M+3=u>bmzOhcuODd`Wk2S=A<{+9l&3{%l<%ihVcEtW;WX+ zookQe)0vzzig7%r35I2+aj@cMzOjv~>@)|9y_XB;a)*8V;xR5Dlg2Zg@&(Vhz+*3R z;3uY^netg%Dm7fqh)@y56$lGERDw!#6sV-qtEfOV^;Zpbzn1drDoj>R1LZYQ1)HlQ zsVbqBf)=Vx8x_}Hg}+n&^j8B1sEC0oI9U0^l{-Q$&QO7o zYE`BxGg{#ol{i*Kj#EEQRxnBBOjV6$s1b7&&Qsn8>hdyGcXQ~4-Dq^yy3NVgm~Fx zGAUb(hB_cSUs02a0jHyJYRF_#tZk!uXnfV|f8Ez~cUgjmHsJOkLk)drsLmRuyT~4V zr1nN>Z;Wmua2wy zGbWT!X4-3)j#8<|O_C{BeC?!RON23}k3w=(JiuaoxLYfqGT-L)s< z&30y`F55xQDH<(D=}x(Q#D4BPZ4 zk2HbDb%w|SrC4e}VI3&90!P20D{R9GyD&+#g#)?s2>zk8dZCJfswUwsv5u--S3Ov# zvSk$|dng$o*X0jo{c)B9vfz-_gX|i1V#{5)dK-S&1aj+AfiIOSK*$%^6R`~_rx=zf zii-~8?j!iyaeV0vF1d)Cnp1o;imA+18*sO`4A0~jk=88asOQzw)zqPxD)zW~`dd}w zjxBw$ZmAP1V@{R@+19Fs)~ZF8gnC4tX6~R;d#a>iDq@U+i3+7rny;L>%3Yb%M- zX>&2{KdujywA`ZXJ#KqtMcl%EvVv_Y5KdXoTXD(Os67^534t8+$fw!c(|$zVmx9TVysC+#wQWWAyhQ|f|H2xRne_xZb=ky zL>==S<|HACW2l~qZo!5q=LSl2ONxO={6~6A3&d8&Guu}PTK~#$`DYUy^*?T+`(W+Y zG4a1HqbanECJ_v5!J}Jo+Aeft68kas51~ue9KrXG8yP^N08CEdw9l}j1U!9;ndi~{ z0=)~!Un75me97o80#}TUh;JZ&kAWYMf0S%UWTBG@I{vm{tBQ@t3Ate*;;3Ma~66fs$P!yhiXHx!)6CC%!@M&k{sSD5SDq$-PIt?^B7tsKf&*kxwOp zBzoTO!Gv9x2!h0cP7R$_ zOQ+U0#^Kh!9#lt%)zuvu=#&)QvXSndtWz86tMzqyWBuKWdQ?+gwuz<|da7KG&COMt z`jXCRX$+@{ZFE9gof>j*?CzxRx7P_>^!u;qr0)8ut~x=)V7+w8TmLnONam%3^&|L3 z^f2xIUywIag}gCM`!lq_H!|mFo~NDpdiaOBzycjyqEi;@hf7UJ1g_G#qCQ%!Q#a`= z>y5R4=^8Cq=~qOF6iQ;1SPjV4CHCqH2erFjm&ntT4{P{Go;3IqoqR$+JgMVCpt%}J zI&};tzo!|b2eD-C2g1=RV+G5xnb+I`@x!*Tprr+^ttMiCO|zU~R${>NGOSp!xMo^zx|KH4N*isVOjE~LLNXP* ztGC1iL%1@>J7qba8il+#QpE%mch15ut=MlY5J&1oi+{Go+U=S4$H8 z;15gE9^p?z$cKkkAm8#B918;Bl3r#wtX>2JL|><+NCCGnKmij74n+W>L2Rv(pGZQH zss@qIf%81%)CR5&KhyxP4q#1i+CfWcyWRx1KST&rsvqDGP!b?M9E2_v7y&Ybq5!~1 zXg(EOalB^3`AHC%X>v(K=It(l^yM)7(RC^A@3oL8m*zUi4c(jJ|Jaz5de&S01^3+7zBO@EVYANs`9x)OG$woN7?8& zCe6whyHFvV6@gv>Oel;x5?xtJMx&r1mI~`$Hj<%r8l zOel-tPhxmE>{$^rp2i(jP$gnoWvo*bTUW#I8aSysCe%W#gVA*{EeZefv1I6atrEIk zqaR(bjWJvNxlOU4D4-r)uWj(d4rsT>gpSxNbhj4ij77R&Mw(H1WpqdEiW!eoUVShr zB=pL9!)U!C{?U4kl!Q8R(}YXCjO-c^oXx`VY`vfcPQCF2bA@Ca(cDVf;3X z+=?>16(bCOjIP|mdFUO$j^g2!kR8EXoHRK*EiYs6Tbz9r;X2ZHnD#w7H;{hB@SEt% z>hq2>x>clY7|E^$(peJvf{(nM#4r&1CXFZp?3p{+CNL zPA<*gi9`3M^Cum=Plx`ZZPIQj{OSPn1E3FSC7fyW6W_Zbd`)Zv2JUcZEVL;kF5$B8C zE2$nA_L(I1D2WR-V!N>cW z8pyur@ZUAe;lOat8o|lwj3do)oZxoX0Ec0c`N%n7`HR;X8edF4zhoU zGY)g6#Bls`q1&g-qBiXxMN|FH*#CmVuP|L>TSQIQ8E>%q&LA1*$@ca)b{_D)hukq3Wv)-aP22hg#hZvCRjBsX_%6MW|D*$`UhCQI%I(p{Lwfg-@7ltc^lI zt*G3mRkcd0NL3Y`s8XL%;gwZlHFfg^m0DYc*Hz_{RJ5<6>Zz#uDy5N%YN8swsG^#w z=vK;Ur=D-4qC2Yg?Nwf9^+}pK&{bu1Q>A+-4zcg@`Y2hQ$dV;ERC&YI_+hHV2(>0% zIRUkCtdguEDGVYOC|snx<;q@SRz;aIkX)vU$|`5I%9DZQdbMYhqMa&okHQdG^4zD2 zglKn8{qnhr7tg{s3NNUK->Kx^RNP&~5-XFhT(F(Ow&&Vh#OC5Qmo~((>`FE#*-ky% zO*TdbZfJ9T+mYy*R2$pc+|lMPHg~qUlkIf1xtqX#zrS(Z1jt3 z?~$dk^naQePm7JQl8$>ydsVgntmY~@PMnO->G{=k6|pf^H{LO?mPyU~_66;UnbFsY zb#>(w?bXx2ib%DA_8RJ!g~%cGQd6DS+_(|Fm$WbThql^lrClM7chY}|7`TgB=CUxL zy6GW(bk=KHLa!oU*U7#9gI5;ywn=Y{dQ+neg(SnVo%a5zoic~%>7m*wbA*lyXg6Iu z8M1NHJnFwkI{u4bHfXXQEk)EU%`*)#DSnQQ4wX{4PhFvc&=*2VVj33WM(gMgvIOEQBte)F-x2UvIkHpsyv3$egr^cJE0A@VYeS%SP2 zN3X&qt5L7Sa?4TTiW;uL9qZ6pi{;j1p^fNnz-F7U!A=b9K|GC#A=)9FMYx5NK>(gK zuO>ka%4tQ>9SFKpLI!ygDKLYQ7SVsQAQn@~zi<#M=ztI*)*9HRfkN!0frqHmag%Nt z8M3*=lR_YyhRh`*!c@2TZ=a(|#7f28I&$p4v~TQvI*a(*ZHm68jX0Mq!=vh!sx zg}FBiA3iXJQ)ckk<>vg9hA41_{hRE`L`52$d>;9LeNccZLY&f;>PN~Jg?5;kWl72d zMyP(Wc&(-iELR}Q;-f}q*zdUd>a6lks;b9S#yPe3ysG-SaUZ~CB^o)nqI&)KGy_EPNdCbrYmZqm$7X>KRKWJ9Vws)e2WvJLIc z(M0WR=x9?HJL45|Kv9|vk2r@tZ0KoA04w&g;Z57_WAp1azh!fO8y~?BhuApG#`kR$ zL_omC;WoZ&bC#Vn-d;4xR?}=}wmI2wuIM>H()571(*#m2Y4Rf0)R!pIRGonpo_O7JSXuSDn>@` z!i~?-v`F`m8F&_Ehhes+gvThF%?}}>sE)C$Ytkb1FiRpC;t5)3?Gf024zfQ7|2jCL z`~4HfJd*wv#FSzoDn$q?{$FNUjg2WxitYc5A#R69J0MFE@jL^b5_e3Ll*c*fFGN^` zxD;_U;!4C7n7kHoJ@N+RO^EWzk6^S6sZL>90YcgMv?r&x;Y$lH15Q%mPify-YW*3N z`GSg^r$%2BKF3hatbIk;CPfjhGj)--k-e>q+e|IwZD)Uvsf8l|ZgX z2`0tDkq9A?Ma3)IHtj}=>>z|=@Vu2b zTz}^5oj00gaVizi4=tr-;@3rrWeKZ7?e$4dMTvRnEM2# zdzf3@5XEsmdLN*-0KFXKh3GDls5SJKqPG&g73i%+Z$0`O(BFif01_4LkwKq)O|>cW zurPwyahao-3o;jCuc#@%y^`#dGEu@@&YZ6NfW4rM22BiH16gJzE4Qbjf$CsrPb6+o zFJDR2wqMw!YPhYJ2l+ zFUR&*+3qsiTVeaFZGVmJZL_^yw!6pnci7%;+sn1R1GazI4qUdqtG0LD_P(<{*-tro zy=wvEtH_(1#o!d~uOXeGt^23{Fkj0Mp1ea)cv0)cD%e1q~SP>t^wev3X zCHi|b=Nbr%BM_KRv?EzvC$)1tWWYJ91N#vUBY%ee>VJz)7O}w&cD5UGk$cz(c=%J5 zDPpI_I=zrlyOo@WJO`a+=q)$PQz!J|m@h(@X^WLSB)NC&*d5vx<5)=xMQ;2%<JZ-FkC}P+$3b)tqbJY2c!G}0G7h~H zq1ISJjn5d=Rr)!MKZ^;U;*Ikd`~n+)iT(vF|23BX2J2qJ@)xn}WsJRoJ-)->bqw6V zXTHa!KVa}j4E}_{o4Dj>eC7@&+{W_17zEmj^s}NM z(*uzZYg!^8Rw0mtQ+fdkMpBa~S`tzYmoG-;i_^Ur%72WOm!e9d(|dyQJ&KN{H{+;D zJO#>9upB*jk{UlnbrWc9Mf$7~m8d|&%G2~`D40lJR;I>PDOinyBJdL-u@FmYQTY(5 zwR~;bTbG{k2^vzMwWRh?az}D|lHZ$X7-eS}-ZD%yuw~e6(lN5XqO;#n-3wIY5;eF; z*S@8imnrrN#a^YbpXlNZ3cpG7ex^ou>HA-({2$c+H>xde+yd+t;xYw81y2R$O6*kR zxzF;Y#yqGwPj1N|;c;!*8OVVloRrQ(M)6l;St6k~jN$W>O)ILFbM9*P*YNF~#xw42 z=a+VK@FUJS#ETCz-{rU<&tfC`Js>rbQiW~hY85D;YKI#e=6kMkpHl6TRG^s(h$ykO zs?}Eg^s+kHMHNp|1AD74`>8-*wRw=b^RDvWQ{E880d+D%-I=0_OjGq2s74FbYI*XP zsUoY@muu9HovQXH>he)l^n@CEOdS*O%Mms1Gxb<#>YM+m`aQ(I8uW#71QdBmO%cV& z1r@lWhKXq8n(R+)@w3F!?UvM6;`NMTniF(lMcrC-v(M@k)ihVv!9+c)hR(04chu55Lg=bJb@T{d-><88 zC+l<4{-o%jpsVWZ`$Dg3s0Yayxrx5fOkZlMV_N8&&2?0&-tm%wy#!n9hi!DHwtC0Q z`bbCJrL%6_N`KQy=XcPZ+v`rR=wKK9FwM9>Ms(Nj3%#np?$J&M$LW?+b;<|You_-w z*Tr-6_654~Vx6*5-o9!{ zE(=*vl2)L<5x)rCI|6D;{?wKf&U88Jp24*BmVcOv=29S!_z=-yqN9=#!x9jXxu3iv z6irsdJK)ROQI5EJ7}o}~-ol7w=&VA2xhX;dQi_DkFM)ODj(cQ&aW|r~0bP;O{m3!Z zRN$mayr2^A7+yhOfo3__8%u+x`mT^gIpIMH9Fw`0>N|q^zXO3BoV@5i&T8Rp%2^HT z&|i!2=<2+n-dTZR2S^^jKO0+85y4;zLlgc|UzQXpCeuN@$zDOj1#&xbywG8_fzVD6 zz|N0+<*3RyuQpkhm@J%JqgVz(Z4{tf2{)G|bp!Ic6OSU?Nd9KZx=G#>CJ>EfaCDtT z!0flN1(PMFFazX~%cY?a0~ltPn7^bfnWURN64o9<|5wa3<(8dZ&%}#+^31F^bAJCt z+3=!25hZbq`_SQjl-QsAlDsUAtIK+|H{S~|?dJ5Gy!Rmo#7=0b3{vT+s<7lwDv9%m zl~naGMcM@aCC4d<7df#iDvI9k zp8&^$Lh&G>5@`wGlm)B+@D#XDgI5LkdEjK=W`GR;lkI8D5Lbh#2&e2VKO^2I7V zyE5lL%e9{4$Gdr@~mhW}uO0RJLZhX5Zf7g}0S2^l+&hEvzukkEVjJ(Mwd-I4l zcx*q8=*tcJbL)3Fc>v=;hIe`VdpvwF_Z!CU2)2iF(*RFO=W`i6Oal8dId>F~$l~C5 z&KbuM6S&7jUO0&%+gxNtmaub*{nH!}KkVlWUviA(H(g-7$dQ*h>9*00WC}^(Hy&SF zL98kjulRB0$u9D!Vb6w(NJA25ifG5vsSPx&(#}@h7qApV)G-u#TeM+SZbKA#s`AFwD*Fd*IVYQ*xS^g}4Iwd{&l@O9ee!qK6 z$^S=4R`Oo(Wh-#aa<5x_!@{f9s2?o+(U2$v3+CUl@V15WcHFn{FAMW6TSOz$Wy(u} z@^A_-4ze_$%%)@A%Rhjpql~y;Qt8x`5$RN!`YyI(*Jkbk2J*xIY%D#KR8EHmQcl6p}5k} z@XDl=MyPNxpUNTJQu$pKyrG<-3dDbUROJf|@`QnA$n_K#$|_Y~tA5|8{ELb%sLj8s z>oQdNT?SKTT)ZV-3&2wV1uuyHww69uM<151Dp_Btt2foxFZjB3J<~F`Zmjn;(QiwW z)zkz{UTv;-$PPVK|JYLZYppAbnMe!>9dyrE^kbcLAWdUeJzg5I`8sp49wV~7)*)1a zW!-vciSH8k0SF1BnAtD}iW`bAjwjjjzy$WIs+j^HI%fE0@SPIA5Y98zQTPHKSfZUp zS}oTZn|1bDow~uyVVoU0RTOBuwUev;{n|gIRi5T!Izu|RQ##^=_O3xd2#2!rE@_Ob zaM5xF-V%Ci+}oBfd9`wz2$d!Dv>S|G-OxICfT15tw=NK#yaiBDy0BdUmw;~o{0*RG zc7v}8lsLw4y2Pg`4cBE46O-{`Jq)H`-v;=wA%0yS_cp>{W4zr2FTIGtrWkC7c5{3! z6)&~I5ien|1qNH>t~SFV+*SYsMGGqB2ZtTGq9IhZ^fYs?Cz0Lvi;lr1pQ z>J*nng~rkSvGn$M!vKGO65X0erKV7+$nqyp! zh~kKX{8KU3g*YvS#}ws=5}aO~`xb{?j!2WR$5HxV?ZdyR0gDvh3Jvcb_}%5 zg5>c~eIkTSfjv{<%rv+?9cIhN%ZA_#NSFie#)*Uc)Ck)vRPi=!wcEg2_;JH2U<6ijTW4MZ6yA8%ARKX#8Xp zrjNs%@tB;27sucyV{y?$oIVMgOu<9hCPrk+TuhsR*>f;B3!BWx+z&8%HtHPAT8QDY zEBO!yEHX_;k0qG791kqT^p*JD8cbY=F)Q%-wbI3)y#duG%$-O)iQ=*;@d5uJC)Hav zfF()`H&W;d78kdiP@=9^$^y@z=4aNn{5saP6f2NydCjaJ-m=E@v&s&$Fkmz@nWL>Y zv#i+h7LGNRd7N!6SZw7lwRnZ)t+m?hwA?)w#8^{KTOB^PR()x;5!sCJ+b@}^k$=^K z?<~A-+231%P(9EnM5glZTKtRU-L~L2Qxeqt)AIka0uQXDhgPZ-&laRJcs2y3LM7Fd#kCaWtUR=Kjnih@9K;F93Sn3y&Z)#St)1X*Mm2$X}dWq~U| zpc43r5Rf_{R9zRZ0dG`?EYaK40V#^y2H-RU_eJ=$IRu)5(*y!9fz!g+A3PD^ybMko z2y}qxjsTrNY6f@(yfkpS0(S$a7hn&F> z)DP|uaEF2?_4#0MGQk@G@IK^*st6tpt;c|$WzP2c69A`z9|}>$=^&xK4`fz91Io&~ zFb6VbLF0Llx&+3HGIlw{t^iyM~TOf7^1h#^^ z9qR9deS4tsHsFt-=*Lht7kD4I`=MSQls*V>6!;j_KLRsFKzkChPeJR`u;L6%{}lK< zB*{GgGf4UZP`FZGLe5tZ_!`tVV1EvcEYyDHOTrNqOU{N zO~9W({S4k+2;73eFOYN_a()N(D-^f`>Nm*v1K=<4?}PUzc=sUX0c89QIr-oOMc#!= zP`VF84v7@^gY0k=)^`k6Bvq*Uh4ES#rWe7bk@!IrrWVK3B{8xX<~)X}C9ro<40o|u zDg3rH_Iv_^WpGP8PKZNDz}P1-vn;NT#gq#8g@*&m% zDZ0(kNyXfjc(9d8c}r`7?#sxnMazie+G2zNt2^MD_88w08+0g#W zMW+usZ=l~B{r-4xAdVe?t%jg882u4Q!_AqzKLZ0JF*y@)6vB8Dn4U8R)kK^z36EtX zOha!fM$bT)j*)ZFn~hns@Ph@Ix)9ra7@7lzhQM(<4Q%22-54wBx^f*KG+?C)N6|fk z@tBJRC~n}oP> z7l;04CIFJ2)A}B+x{vk#HsH5UMkgWL0)T8ooUG{bgUyqcA<@3sdzUE^dzqb4d_J~ubO04LfPhN0e}oy6q?T0Kp;p{1{~%4S|WyP|_*NIY|=MEP0W# zxsEHh``btIw6ZP*Nl;K4#)Ql^%;*^#=_GRwYhQ0P2kdUKx9O!J|sKJh$-i5`Y zW!UUJ*^`b*2<^Q%=XE2KjuJmla>g zt~vMG2?2IufPevZLcmbOfJhO99S9JL8W0328UoT31sez|J0U>m0R@p7u+UVHVgZHF zlwRzepmYmxP*DMM=XyAv*K=OqJMR7d_{R9g_{MNJJV#8PXP33+`qdG%{4pw(hQU#E zWh5;bL(xxB-dL&?Qt*ToRQJoH_s3D;1bd|N##1YehFKI8 zQv0W=)=cUs)8lN~J%>`BBa*<2d6YY!3Kr0sh2$6lOJ>Gr=0o;|M(gAIbwU6FMZ3|M;S}_$z$C98@}^6zxf?|agHDBc=3*3!SO0N zUKPiy>;x%}SHtn@IKg$60>)Za%HpRwUOmU_?tq9lzIRfDuld1A_=nT|yz}e@XW`FI z$8*kEp>KY1I$X4Ug~gYgh7#&~#Yqx2r_`w#A#^0$zlvi#V>FvKWU^e-Bie*z3`*sC zdGkZ8SzgYZi!#YV^ju@^h_k&UK^5ayHp{Oy%Y7pyUK^54Sk>g#Fdb`~+Si%%RCA=J z3F?>?wG0RiRL=z0n>sfbuf8!2O=+VDD-?-RxxT4s(acC5?8@pUY-zk(3`U|I zzC?M9HOr;nGc-Z2@$*bD&g4ZTE8b+|Pcb;nh;T&Wg~J&p`5EKQG@@W}=NOo0isqWa z=S;ZJd_3R$zSw;6ym@|sd7{Yr4#q4oBNv%EOU;FsO!SN9re)@p73Rt1ru$0Md7ZiU z74zJy=I|;L`?6{LnrR?x)Ecw)4Kw6*vv7miz21iY^?u82-)Me(+l+X}%-v*G7n=oJ z&HC+T{T9=ArzyA1EZAX|zh}C=YntpbZ|^b9_nD>pO}7JPqQIoWRUI_d(@ks9T??2X z7=kD^MN;+O6`M7kP~@7T()?R-=D>efX8xbcGD{r#HX_IrS!Q!nB*}7ZtXN30HL|4n zMSP~B42dWkgGB~jutp4t!4bqM+-Ah4DxKHieiJBFUC4{b$vy8;LWyCNxXv;#ZxP(H z1eU)D?jPWxY%HP+vwC}(mM>Pvay~xT60Zn5&=+qVj2j=v>z~3Eh3LPIC%5B~k8KOU zlUEC*KEqq2p5qJK(1Ay6^4^ed5RW64Ae=-z^>-ao5<>FJzZXbd!CJqgIKO<o{x|JWHT0mG`hQm-CGAm-b=dqb1ybqy!9Z_lufJ-mCwA4hitym)rD# zojN(vnfTV{`aiUP!71&D_V0WB;-A7lSA>5TbkM-Yd+r%%T~QZ4B-_sUEoGgcsB1Vm zp4(L7230sYky9G-=qB8vJD)A!wYz!e9zJrIpE<&R9OHH$I1(OSsiBGKZE?sR_nJg; zC=WCAh+z2kE%P5WlO8uP#x$60O67f-XTDrv-jYDey_QOoqPMljz)!SLLw;YZIv969 zj&DAN>!dXEZ44xa2sAX+r_yzLpzm+5Z|$ZB^wuwo(_^02qh{&7&uD+PeqxUPbiPh} zR^xN})4BTGV*Tj?3#kd1R$-xjP9WtO6zgzwdG6Bi zTN{|S?lO6i5CdwaQ(73Ooyl)+q#8In^6bSOr)wuWFis0!CO6q96o||Fi{rzO*gb3* ztN`ia_4w21;Yy^yUyL5q1NZkaLR&~yp2*mwpl3(3e+zLEwo%g2CDl-JoPvHf$En{U z$P-`8cS596)LyQgZwf>Lw*lOv5JaI{7papC<)#TXV#qs>R73A*r!hzSqjfl42g`MI zC&D`@b`52|N%5O)vVHMx;xp8BC?gm*!$vy>g}~oJ@QywHxZ)hFOW_TKO-M5N{Vo)C zBEFTp2W*mRmx$`#TSJ{+BYu;@cWmZT{tk-UMgDyekXaPt`G!^*0R-Yjq}LX&R;a{p zwXmC4m*@tH6L#P>;!gkc@yT__$|t>xE0%CfzDbeQ;OaUs1qwGn(NQQPdfmD>s}sIH z2)j(cFmh9}x1!C+YNu0kblzyaa=M1PlC;e2ZctGbF3uHFcd_O-=FgqssD!-$CXLk!w)k{9`QGFUp1|C~xVKi?FN1IeRC zxvIAjjG#67)HvU0t*Es{!UaJJODvrvq!OM~!D$toQNeeXO9~{gLg4X>79khlNch&E zR0Tr*AOr+tK$I^676@b%Fa%{S{Tc}U8V5lHBcdu0BtlRTa;rh;LzoPh1Yu2(DqBc{ zpgshRfh3W;75D)Jts!g!L0bqiA0T=1uXHy!-{p`NcUpqq?t68hEg&6?<5hhib8x`_4BPs5Bx z7&Jz=8M?Qi*9wc%(Y+l5Ars%TzTLcJjsJ(u>ToV>sUf6Dc}h+N+jq5hvLeR|Tw|4$Cb$!7Re^Dl9}Cta%|&Yx>Y9F78M)`B!i zs2&eI4*Wt$SzzgMcey-Bc%-b|3NKZ`Bh~T8uIRrUsXcug56dOGL8nWa^ds868VX&R zKCeZuOBQq*;SH1|DbS4xn$lTG0tv`#Pf|I$p(DlJMibC6+nYlFkVdy!^D)kPDj-&LMX$(L93r*1r?JM6`m!w<#my%^|tM^|(zM zzuTB&n{%$znMDpMZYH}O+3&=z7+Mdrcsit#8_qj&J*6^_glPNS`DY)ulyN%-qpWem zwr^i!!UV}8v(?*J%|MdDWP??0<92#Y19ePREfdx=c)h_$*ETnfbZtjcf`hASkS9%e zRqGfDWd3`(qxeSGn?UxmzZE^o^z~QWqf(co+~*eC)ZiXbzAO3x65)v?L-v=m*08xvDnu_T?>FWBuDmPCD^-FVdn5v9DZUZI1b9&vUKUi@D+_)E zPxj&<@mgpkO%_$aO9ZbX6juY^2R|8p5@5L|co8sJq#9l$*xDGN6}SO->5$bL{5IgV z1uql)4Di}pNZIQEUN=bY4qg^`y&&jeeVsuc@a_RG0wah0!0T^Q5xl|R3xGTjydmHX z1-KvlVGxMA;~@(mr#@o2dl+Q_WbaAfvEV%cUI<<;xD$XTS{hn*ADbuqJiy!FiE~qS zqBB6>LA5Kwu;Z^nF_pz9V$c=uMj0F%i;sKgRl%xNZGzd)J_c!+*a}HZi{r3(JQhzz zn1o&-rcTG~X;}O$ektIvcYY`tsi0_`{_Ar!JrFRri@Okq2onv-9(F35IX3X zyKL~FJ4idDwD**VkZg>J)Z)n6a%hsSI#tI{*8`^Mn3+0bhOSVk{ipTovvgd9;LDz^ z6Xt6#Lh!kBb>TeSYk{W4I#{Gr7wVWI{qahTtMqHDwIeh6Mx8EX`f;5teEJ33{M$mX zsmhdC%kGlTG@!}><+mY7x7`QhyV3SORIWFLgDq$iJJN=LeLRuExzzL}yXCdnK-oJ* zH9?&}Bz=_NEEW7joi5WjN$N&ED!Mg?UD11&XEC0StH_QN9g0IuTxk-gpT_GO^9L=N z(z)fWjM)r1>|xnk%}v%Zyv62ShMiUivicC8JuBXTG20+hxCz-MH4$`?}H%{u!*o$NDX73)RY!3RfJAmE6 z3?aL#7+$lr&P89ae}ui3CTML6TbbZZ1N%(;ev=_xhfxa3C{U_ijDm7Xl0G0-#l$O& zvmMP6#waP%UR%p>iM~aDtMmy~UGy!dl`9b|LS`j{Uk`lQ`tzWc7#~)GUTeKkUJ^oU zgxk>XgAk&gZ{<3<>(SYR_$lhoQGbEnmly=v>8Skzea$4jeTmjf?Um7+v@1S^FSIKy z1LX)STU->bC#Y}xJN&-n7m}W4eG29*nF^dz&1x-TvTWQp-ND#}p&Qd|#$8riBshr} z5X9yq9v@xKO5#xrh7~P5f zCz~sBQ&)_>!}_4DX6#P%ds>HA`dt|G!YHLg?L1aK^Q)8|(F@_b=&q;qfxHk@Y;U0V zz&~u+ANe`q6!a%y{%({DtAiZQuWIU9J_JAWCcqVtW@xxf<^#$0%QZ^ z$O!^quFY|hl@oRV><5s*%%1?Rh=dPyMFgRNZnCu$AdFAZyeaf}ic`1Wv??;xSZW zxR&k4R?`}0L8h#x3^HYDDH26kmET`lN z4&Z+)^;7ElvdSy3{7TA=yl!p<1-^1?$eU$r8QliTy-B%^MY^W`KVRxs{D0Z#_qF1$ z6#Z?-(_agoE~qa5_Z?3&B&;a`!YYOBBA7}u$1Hl~( z-o19Pafd>9KX}6+?cY0|GRJ^B7ThPm4Z+O?Dg=53ia&y$jtzq77iYU-7iU;+X%9K4 z%c9g1UGaGdWw{kugeW3l-e-G7*S>%}SxyV7>?*or1HJh+b=pO5)?;qWQR(cD=1Xl3wG$RA_5*+SvvuFVmEh!k|vZ z>u9dI)zr!|vU@oEAEewjEA-RzIH#Bt{n2t zQ=0f#C5c^ZsxtY^=5Qa2cJv34CrMGrYqkm}6eJ-M1uy@zr|?bh66}_=AKWA2-gihO z4GD9s3DH>q!D7%7T2cfBPopP!j}gQm6vUuAk1yb)wzyPO>}^rB5H|Tr5+N2TSZASt zn%6>U0+d#^@s*|3q11=cWGJlxrAbg)6G{WC2!+<7+qY_JU(W9$3cU@eqx>B3Wj@aU zh=@I)E0E}`?}DJa6?=F+?YSQ1dF~5-e|w6Tr`OyEUPN(CA_slc){}{SGLR3y0dOzS zc}O@Xh>NW@4&o4EF*e=`2&Fm!D`J>n^@MSfTat*=svt@ZSXFFY8!y+z(i@Q)*+P?2 zQQ~ExKLnE{19Jr8Lr9OJI}(F2R(xf7`4UY119)4b<8h1P~;)ewG>m8(i%|B9GcjlRt=!sLDXv~T^vH&htbjDH0ypU zeu(%HihYa{N7AUrsl^zI3#oh_HOr-H`P6+p4Vy!y^C%Rh^rsY@BKIWGX%d$Nen;u& zY0f{W_-D$yNQZu*j0;reCz|@J4TFmMoeC~dl0-ZubDLT`;zld-_gY)hO=j%eT)Ulx z@>hU?e<$?zKi&v%C-0FiEvc#a1T0tvM}CxLGEy zt8LP$-pz!)ZHFV?X^Og=K&JP;R=M|WFLPUVr0-Zv7E;TVV;VkWqwF`1H~v)POGf1@ zrgWwGbd?D<8hXbBA{~EKrF~&vkn-nMeg!CsgBV%cZ-y#T>(df16B9Is_0(TeTeFQpPG2TS~*nRTgmFrYgdN6Dt3j5ON16xVYw9S`c{aZ zlME)st}~;Opi3?AQ|-PPI}*A~27e0NGSzk!iRKDkhwu$JTLR9vF!?CFcFdwIMnsh^ zo{hroH8H6=LLDrYXxw^OP#2qb!iycTT3dtxSb8tsJqR}r#PN?=VUJUU0xa_;ocK0Q z6k_F9YeH=O3vT`mAH0N}E@R){@t!LPZFOopy{?On>aR2U>F6BYbATj0>PllQx(m~_ zJ5A#a9SV+}plPd*Db0~X0g$pUYh+sJ#T|@3`lyZnV9;Wzj$^DTk{!Cey?0qa( zp2t^Ze+b76hcE2g^Ce!Xf#z399O;~+tvy^-L|0dg#eD(r)QErvdN)iD&{{cDuUNN2Bh_v?Xj z%9K#OnKbrUi^cg1DHJ`%a!Olfcen6c`+}s&6B~Ics_kKYoSnv|ZA+67*aj#k$0R&t zVh)(g>84l&nO{U|(+g$ZN53kkh%f1YX(W$_JQYoph!{)7W$>oWw-mviL}iJc_VLOX zRKZa6X&vy>+p*|A^rRGTLxdgJg6?L7tq6x~2C^$vO=mE4ELI7b8fWNSIbkK(5hzzQ zGg*=*O5PtdS#wim5!%{i`B|4;5%8DePs($t$EC4+D#oI<-LB!%iu^`AKVN~*Ch(=o z99M};t8kNR`Nu@QC~cUn*nNm`q}BG@z+PcUB^54^Sy$Lsn zb4^DpHI-FRLHT#eGo$<;l;1=K8^m0^Bg8Nd^Tt_ZrsH@_or1k5BTm4#3$WHioID9% znt>aq|1)Yks}S9%F?tr(o`(r@(0>MZ&c-g!V$-?E&*4d#x1~5zMDLFh%@DmeL3bO7 zBz0ipYdR9n?7eJ!rAj4!RzhMWfA2m^;s{QQCI5-jdVd9J|2GJ&z_VKDxxYbZy-HT` zTdgwa1TYbtwqivHszO3_(AA)oZ_(OuNl;P)AO%2H=2`%CrSB5b)2zwP`wMI1~U<7Aw4b4QZ$4p5SVyXQa#m4r2Ic|GO}rNxxv?MZ4>{zhS~9)Rz&i zpozEUcZqeC15eOe2Y;#c4BBbk$rh*ntJ5>M>z|#T&`(p2HUo6p6WX7yOP1-Fbvk2< zPTH>%_G$m1ro-BMUwa?hSx8XI(4#<5%CZzxq!>ZuDoJA_1(gXCB_M^uBnkw&Or@YB zC3d3f!e&Z!#jVsLmo7>}y2Q3WO*GT?R>LzybEy4X^5>B|pWK(oUuJn6lC#nVYpR07 z)apa>YB5C=XkJs^H9 z%FFmC1>7$i6R}EBGQ7}MtaE?*#l$T38q-#Qbjp+kf3n`<@CZa%u> z?OY^SqC3&LjeEaGuj?h@pBHpV*N8ifrDj@ z_%1UAOP4-GDOt2!mfTgX zRq3m0^B3xKu{oSq-G5MJvIC7A>foRxKHcH?yX|g1_JWgC-*k((iX^T?I)!6S zDAOO-wZ#r)sqAWY#(`{ILvzuctS7AzkduU~6;@8CLJ46|2Kz}Rgk-!NqVSwk@v?Pf z7xsm%5@@-}W~A>NL-7l!x_o!}%3pEPx6G&6JI)D7j(4LYK_%TcnUBsnxpTmkzvRM7 zH2OILDdj9$IAUkxt}Zd zOC_glSHR@26^Z6VwpRf~htRmEXlpJ#QIA8hpG(n(+~upFqF{+K32a06u%$MzoADP* zK1t*y+GC-QTqzB|*-B3#vQ$dxhRB~FBDe~>8dm^{Y!mh~Ak&dRWMwf-!?2abweSxq z57k&z=jQ03p4}+J3*=tQfq3Bst`P{aRO;|dD6mFkz{b^tU6Rq7)&+Ev)(tpMkU9ojCd7aN##^l zgDa{L6;%1ED&tx;xr+Lvx{6Iy>AuQIQfq6doMe@gqEc(Bq@}sf;w0)llueQSH7#jjpRMHBkK;se+r-sirEUiCWrN4Zm5PYNm#^P&v)jz+2Rc zmg+*FqFSlZ>8hZOz!a)NJ5@PDfmD5Yr?W1DvRs;H~5sIHr=3MZ+-Q&h%O^}sYWe7YJjL*>j=MNg~fSt_GYoq9$Mo~>?vR&Af73g)Tg z`6^?fs)Y`==d9Hfoc~!7f6)aIFUQ$h7RO?o#Nz2uaWopC=YV=Cget{}j zrTV|D8osJ7tx>05QID=xjn}Gu>(nFF)S}nau=VQT1~u(K`AfexIt-AFDGTsfRvO_kOM(`cj?#LY01{wtTJL zoT|mV(6*f86ne=XB!vPoO26aMA+7O(fU z;72GJ60f%yy)%$HB6dQ$9sP^=m}H|>Bq&RMIr0-IzcK~Boj<*rmOb~bvrr6(q*9Ju zM^$iK`6rYsRM8a`mVuI32rGeCIpUG58c86j22>F;lL2bjiN*3h*MWOugz>o#!ja%U z4&$DJ@MQ=!3PADqTFqE2yqe4XA6m_b@th*L+|&-KJqo8R#0_@FK)z0vC6uwNb;AYS zEtOm>GUHwt*E@1H8IQpf48$J(vd;WWi(bcm>wkS^v19+ox2{9EH&9U{3Ij@LLw+aH zx02J_*6w6KK&c}sdlrSyMRtGTPyadq$Pw!hxkm`UrQmrR$QHb8+|7p0sqnmYr%Jke z$W}urazQVUaTL7P;I^~nfYvb@k@~n9ka@d}XYsoM3VjeE!mK3VZfg+@2U#_scU1%^ zSM>q#Mb9JL!6T8a1mq6Kp=mzi0}oAuz@@< zaxn`j5P(8vze_5(ta967wm?;}}dnoe~QD(HE+TE>UDfk{i$l19|qu%-F%^F$NNT-VLD#hRb#Ms{Xg%(vT9; zDJg@B+L9wmHtCefBmJzcjrg~*YAL}dBuRG?0R-=u@IC1O!h{k9C#|GY;ts+K3MEnB z5ts`=GIKnu+YGPjHbt?S0@wzqGX(7cIzT8N_zt;r5wb>@8W9+X0yEoE`8WVV5nDb8 zFv4czh|Ch@yZrSlh*f{P39e3P4x~tGL0^yqS|AX?T9Sx<|8WQ%2>XHrV*8Ry&=;h? z*iY1DQ?+!|;vFjZ5+#>dYLeVZ>}Q#5i5if2fnT+lt-{spO1zIK8}cw=946#r!gx%W zfZ3BUVLBEUV%jWBn2l-AVA@^TgUga5h?MVr?M0+FA6XZL*)@ImBc+hpL^)IpOd!9)hO zN~ayS8Z8lMIeiG{lDmO?kue~bh%{7`RB8M|I#-j^u4ocO_#|gE5iE&NP;$B&+4))8 zaA+chqR|rNg9x!if3-wVvWTKdR7|3L6T#buB5<|IpLA7qCL%ErhKVXnBw?cR60w$O zv_zmK;;T{xl0#!;l>>h%x09EsuJUda(JzL#S*XoxZV4KH5=(M>uSM)FVz(>CNB+<7 zuYZ^KqCSwE8sf>O*UH)9v@Vzqa@Yy(MG(n~5H4*|U*(iVJCP<98wHhsucBDjLb*gJ zR~4#Xg|L!AC;bd(*P%d zPRMZ`6Qe|MgSlnU`4>9W5nEivg#;9ufUOF!WFoeB2aVt}e~Y&WsM25m8-6m)#&nbx zYCS{Cix9I##~jev2emn*=^JTCr zgwg**3@-l%V$j`LnV`!^Zqm0(x;E$l1lw%Jqs*&xT6&Z;WKi%vIoDaim}rdM8<-k! z(2~6tOhV)x%51ze|{2?86sTacjB22q-bSa#baOjpo0d2Od*?j<>Y z@uA&3u#+KH6Qb3a3M#FJdZU4QqlwDyq3-LWpr3;KRPdxKeoEb&tLjcuKU7l*@2H)- z)jJ=mH$GN(eyyTqUp`@3xr*mhx*(tDRcDC>s|=ad0g{2M!HY?7>^kskgWT~yQlV)b zc(*RZTyMjUoEt#bhk6YF8UhQ8*A#+gP}~`)8x#(O=m)GiwCPC5ejKu=!H+Yb$8;za zN%InzAbGqJ3$V%t1)Tk}IV4h)Qmj6n6oMmC zn|ts^EYk=pHp3|`@W+-IC3^LAJklDg$wbi(8@0hO6C1R(2{uPNVUaw~x8wD6)^6XyFX;S+lm9?nioVif$+-^o4z2r6DANX2NEzxa`>RR9EZpU@{ z3BC7wee#T6bXMp8qTBtfTZp9XSN-m9y7Y>^?hk!X(XT9-zEmpOJx$4mhPzZJhDZph z>Qo@E@Opwc**KkHt*uh`bY!B4?LrRXKxb#>;Quo9gkECY;xpOPg`!mb|>&r(5+9c%U5xhlcxW_mg#lJnyW;A7FT|UtL@-mE4#b7<1RLb_~IUp61Br;T=Y2?M5=NJ z9c4Pk=f1I;hy3rIiRYdA|F9rls|ybO>O2nSEoD45!giOEiHsyU?n;G84 zl+7|JUCnsGawF>K!XAdZo1$Lk(A_4y$GF*s`kC|rR!%VGUQ;y4i2L<~=%vMiH_{}C z1y5MNo(4ymH*!s(h_WV|Y$8xyU3hHFH*ochSsWZeDxUEM9F+ zt~0-^vf1pvtubd`H%SN$T$~o>(xxR~50y9v4n!7YK{BxIifuT__e`+FgF@!#^C8P zxIGys)j^F)&c+R#f*8dgtZ|MDju8UUcAscnDMN62i=t&X}XtzX@6lDCWy~~>7 z|B~)r-o{5~SN!{ocdkoeJqjDq^UW!^g)X!qw$%5v3C&MDFieXb)(q3 zC^M4dA=|-MvKQpo?Z7LbBa^6T8Rf2}r1cUTM7giq^<3{I?*sC_Av{iJ&r`}3%D+Tf zN(M`%@qmkopAdhC=HJ-H%s%1rs3`UgUoOM0kVi4x%Coth89h1UE*_W7IDoyu><(dX zI9Gd^*N6mS1h;vF@ln3{F>W!Ey+|NKxzU_Fn@2C>*cZ9k3k)xD;VO1lbGAeuyw7_} z*qpK!+E7FeRULPL1E(DSN5}n#L+72*7o46yIsVTMieu|nC!y3KB_pUAPA1zJ$2Gr2 z8>ftMV$9JfqlJ>Y#$ZE}b)!jWWTcBQY-ZQYA<~}H!X&mai(AX%XxvQmL|gl^2Qtle zFcpQu=xqF3jeC~`Zw0xXH`Ks=X5k>?4>RHYX6|FQC3*B1)9Oj%&oOT;Hg#mVTVOU6 z8CqgQ2r*%~!F9%e)$nTLzh-NFqQYSovGgBP z-Y6T%EACEDB+WiRHJC1lmYkRb+-Lw{LkOf&cB(zziomSZ5|DyCDUB`M2-71$SWp7~ zQ7C)blJD~7`lrB;MuA_F$tKuukHQ5pII0Xb^>DQesMYb0I_T8Jq#Mw5#MYg#*B}ff z{7}w!&*He}(2;oRc$WtuErE%d#wKX*iWis6b9*uJ(W0~$&+9Mvc%tjk(h z>7Wwf^@Pny<|PmUx)bHzNx@wNy~yoJ-6R)x4&|+(U>#-4V_%*jhJ&g+X$bEa%Kk8J z`T)lc=gJRr=149#it%xNdbCyYc)OWPxbzr*d&)s&&TEr`CIAz#nOVj_lv#7LiO(?a z$+FzWwCG@J3^c*RCVbQ?Wc(+LH^x?A;{tP?&_*jw$#PS?+R!@F<~37xty$jzaf_Bs zTqJxV1p4Ql?Fy$})>Rh4tj?nP6Fm=R?9w~sf%yarKgFcaG58GWD{S}$uKf~Ij@ahA zj1o*fhIkbHZ!q~d4nK+hDU3gjNoO$adlbia_yhW9(f@}vWhecF-p_U*kGhD@{faez z!_-T5ZG_8+k>Nb=cPw`WTZ2wU?XyO$1JXq@r5jz~Xf0EEv_?_#l+%Hy@fs_^Er`{% z<8^ce{ZK{iSJpv-E=<%=O;dH9o230@9bH5FDH>{Ozm^WJ(;&lqs!qFJr`FY89qrfF zci*6chB~8x4YTrZvXKQ6X%#fl;my{(FYyI_Gwrw3UZjjK`vlW}=O3??ozh5OYOV_-A7JoOwR0Ju0K&0W)oha?tDwyv5XD*_Ebfa@gK^U1nEDhp zm@6kWogV0V?RAH%u>(aS%ctt1By3Ob-9wAV(c;r|`6r70jp%ox8(9PolMZv&J+@^v z{}^Wpwt1()92*QG!Z6Xe;%4K$Yco`R(YmK8!OG(AQAL8-NQX!Zox4;Ylo}VA_P;07 zgoP^dBxClN#YkbC}YcAuXZifKM(H$|F>upMJXv?&_}$%`XJsRnJv5rTROO;- zOc8fj?)%*PAdmcrD}Kh)#9m#|8o^xA<^`rekdQV;0%WfCm59#Gf8MwPj4v|jl5Zdn zn6TSxOzK;vsm!az#@lJaZN}SS;)S8xZ{n3o|3Zl`b!q{oJcrV@yk{ESxRQ6DU}$U} zT4=g2G5eO8Nw1h$>&&D#&9ryTo;{}B0kh?TbawDmq05iM+=n?&&eylo)IFS(Y5YzG zMAEqkytgf7Y|{^fniSKA9KF|@aJO-_^84G+0F(&d>ekQFS0sW0T225lhWlHne&067Y+FmV*>@3U-Q%BZ0J$^Zw;+$nT=R18qX@hnW5y(j~Fa zYfRT?16|r)UlBR|ow{*1UD{ih-pGMOVeIAb1Mc%7Ulii|BYr}Xi$3SrZ{&n!rGp}n z3uMz=Xv<%&#s$+dyJ?26m>{Bok+|UC-{XR%BS0Q?+-)OV{EF(PR;qhHH7``#R;exm zlFLI|MteIY)t3ApsI-w?t|dU}k3F1wfRp7>WK&wpKJ8kr##UR~8i@HZI+h3W(Jd&=7E`oi*B$LMrV z2iNEzR{s$vrxLxqf=;QZlPc?e3A$+&op-IylhwPD_NwdjB>hveUS31HHT8|Pbk=pc zMtz-_s(-m&*OS$|o?XC8YwJrl=&T01azmYdqmFN+OB(AaS;l4cZlbBFKGs~n-ct9z zMGtPFQwD2a_O*37d`FMnqBp;%b9d|9!#eLf-LxwOgUJ^y=m{$K16`8hg9==$mQ7iq z+xdemZgdB?=*Go8*y+h{+{wecbHmw^E+j6+$Kn@3S%3!M; zlftlDbJx-QTO=PW^+}#RhP^x<7IH~0Uzxy7B`9DDM@{8jGq~P( z-d`xnA}%+J%gy1c3pjNlS65b9*}z${hP6i9tIRRJu|pn<&gs5?4Zk{XV5UNs|zOw?qY} zEbIEXpu1<)qrWNsLkVswtQN)COp>qy=xbn8W%xXT@IPD=KCA)GB1w<)Y_0`bjY z=q-Th5Zx9sIzl<|D+$Ki6{50i8tt}TkR}GD9uVX}+#pyp1ZWtfJ__z5uy8a$KGSQ6&f#_)Q~u7^$P;)*m3Z^YaNIP4}YZG^fBzR?&> zQ@nUH7TkiRtB!`Ei0v_>E#97K3oKGQ*{Zmh+bp$rjj)s5u|_v^dtgqaFm7po zbO&JYq-@OyTC_FJTJHl957Z^^W}?>i_?#uy ztr=8z8s$eg+*%80?Gh?nOtH^X#!_k|FzL%gYbjh$!3KhDtgAK*iYf!2&MiJ z`BD&YnA|U^@I#_w?bIK5PxQAoY|+_E0Ob3H=? z_HM8Sv8@sma0iQ0J*GdCprcanJB&*w@iPTnS4?5Ex$8WxwvzqV?0MYT#}~xEu!sNH z&k4IN0F`}+v)|`ta#|D4=zuNtb3fy2WLZ1L1u_<%Xa5(*D;&cAMc-W7Km&Oa;X&N=gbar_HTc*zMRfvUWTD{Cmh zv@{b0I1S7MDICl&8JQ-nwF%o8-QL{S)^_wHcCv!TFoFhzQbE|o6iEwVS3})RS7~DE zVJ6&Rw)ZjRdzt9FOtN$lMzmfD{Y|ZYc07J$ph>vbWREa7%=kTxlW%og(eq8Wr6%!3 zllFpvmrNivKMZ@0#LxK3X)ZDg9;j`;3gF`R>93GXr=;5Yj17?+o7cj zTB)F|q6`(ZS3zqPc2r?!6=bQPiwe4`;C2;sQ$Y{q-=%`yD(I!~ZWZ)XLAIg+Djclf zUgZr@!B7?4ufh>3d_)B!Rq%ug#;9 zwySWr3f@!UK^45Og2O8KPz9f=;A0hhq=L^yWubyERPdFxkodCAiAYAgPU{fXN16fu ztOb;@Q~QoS=+z6rLsTAJ%yamjsFwfdQi|DfKwNC1VQ?N-T1Yzp*%RYz9IL zo5Lxh@tpRCA|O>LbN(uOT+$MAw8nT_ESxTRj7bMgYD6nbEp=EAq})?dMl&lKIrOD0 zg0y82Qw4KR(yG(c^m{7(LEb!u1H4%dn7=w$(ZnYUy)Fx**(HkE$;KUQ{5LS}J!_43 z%YdJ5Ra@ax;CFyP6f9!8kH=8@XhhGs3uo@NOr`sS^-u@|fk(-cj`hRr|EX>EMBB_p zB0;dZS@jMDN*RGJPCi3WHhJlz(dvrRjfcN2Qsw^9gq zi9Kn20?irh_yb=18-7|wW2#=?SbMYeMC9VCOjj5A>P&ww>5^?lU$NwXbt&(N0m|>< z_~N@4$Gu=j0vz3CQX}3mDmJzt`=D`^`a%3hGLM~BzyOKX4FvrFRzjUuq0u@REXV3M zpzJ1Sv<2SU3jQ8AbPx`SO+Fqc)UnmoDCa@3qHINw1EB2wvXTgO5~IC%?SHM^qZ)qE z)R*v4o57VEskw(gNZJWWGB>X0ALTsQ*sAoym-(92oF8$m+DW*Qd8%0?sIZmI2cUMw z6#=;%w>ui_Y&zd&y#}`RRo2_yhI*N~k*n?Xw?SuK#Pv_2ZxLslTxUTr7J>f(xSs)j z3fUh*_UGVy0s2e8kKy*O0KbOp5~y_)Y99ml6gVf~%6G8g2Z%cl_0EFx4|x7(+vttw zpzbeF?{{!6!mF2nu1Hiog2D-aoBn{}t59uy44YwoQ;cbjn2ryLg+cDAJW&Ech_*+r z&pvbo204uGhf>z5y?xdx+4Zod1Ny5E^pEfBk3QD;i5@#zSRSshnlpECw1hWG2hbr~ zS_fC}DO>p3-d1`1L|xp%rYKN^;LDJ!)ZVbb)Ey#Ww%tq_(SG+a(N~|w98)BPszs5v zY`sa^Vf(G(4vG*+0?p7DkxkHsK(en0R|{$2V6uyE7^EnSEsOCnSP*R^xi*!@Fcy2n;q%wv zk$9|M36m3SVnA{g%<*u$I8rNPS|Vmt#n@`rBKm-jv2P>qLHroK*R(G--sbe75sx1804PGXw`KoOfmr+C(KlFfF492N}&CtQJX} zj}#}IL~zlXS_I;UXF0p@b(S`c1-wpy`*3n$~DAtZX&g&@K+U zv5BB4&C^K(bkQK~4bkQz9iTeBM0=w(qd>hv)0O)E+q6GXkH1?tgBc3&Z4{_4YVT!h z0o(eT_TJXsJ36Y=z!Z4z>TtRCmT7;bMy?iM1=yP|+N%8quD;0i?{s;o>!C!9i$gqL z_V(^#4J>%X(0j*y&KL$^6~bDI+7EYok)gq6?)i2Vf~zIMc7~fjcG(L`yT?tfS>}Ee za!;B2UpDtHFpZ(jd)?GtX=bl6b3yGxPRbM-^*Fbh&%It`75CFLv=g65_^o)Iwe)ta z_$@RHJXHLz?Uvc?n?7R5_R!yhMk^01LswguVm^fzkca085BSq67;U+lm@szer6TNr zz0``m%AX0+HQIf#5YguftXg9gc5N>=21}mI@LomxRZyk_Tr{+ohdUL6(Nx#t0ZYuM zkZs6psH_+xY_GF(_24d=I_s#buIQ$hoyWx&aLW1I|3XeF=9H0~axte|#3`dV4f+sp&a6(+DZYHX7tDP2eMMiPXKFR#W8jAh)I>a@>_S9KtcF_VJRIZMoggk^n zykW;lIqFnzM!B#L!y48Z)LAMWW?jtgdJV5}Jp`d9If3T{)toTJ@oP993Rm9=(;cbf z_?b@X5Qm34bdDXk`{z1IBW!O3jN-NzIC8$j7dkT1(HA*|#ZGv!!=oI!)R9XZ8RPJ1 z#~bTRyxj4xaQw?057|Sd4&fQclfKD;pgr7T>p%};=Ist|bNn5a4IAvSX6NdAt%?%k zKj4f;o=ibKDnV9t1{(VoYD8I7-hhH^l1wXfmnK%|9>D)wN)?miB(=M#4gz<|scbIM zlSK0=dWJHeC3>2Y77@KdWv^238u^uWx1~=>Hb7iT-bSjsg=m`{9R`qD!nAvs0!%v< zPcTfLZL~J8Ve``~ea>#kVJ7=o9HF`hxJfgnmR8=zZJ6>o>|wJwfq#k4f)1^F>86)Yq zr%J^j@;qypm5Wuqi&QvL`J)uytTJy^;ca$0*>j@GgSl^#3Z`1SeNdrzmWrNImFPS` z;I%~EyG{jbRi6*k>`lu5QU%{C-l9^ss#GvWjw}C!it1P?2n3=*a|v2WX$uKXl^fc~ z^tKoV2@pfvSERp$XG&f_p#hRtF2MuVLRrt@Ac$?@KLPbnkLak&+iFPBbrsj~}U1z+a!SeLJK`3je>cI9%H zuX6cXSFUsE8kcWyAqMtubom}vw%f^m#!qgr%auK@zuS%26gWndMOc(|G;Sx8+1UiA zn}V*!^t1=_fdytzf8$?b!qIl{&6gVg1|!!SzR?7aSdU&QoO+niJYlVQK2FvU8a-nw zo-@G$OHXC&q1YucEWii=?Jsz-EfmZY zI@#lZU@ON8lWzi$tnk9(f&nWtGy~ya6UOI)@I1p8ndo8@pjyCrZH86FfF;F0a&)x> zH%au1L`${*zD|S5YpE->%*4*-HfXxeFw?LT<(u~~2<~nwdYI&1wr04k!1U~EwqaMo zVSIpj?@Z$lH2K()hMU?bPA)LrurU>zyo*f3kw%6YIqsrYkcZ;6r$d-TtXH&2g-E^m zMg?*3jcilVcIE9*mEWt}ohs)$q#*-EuF`){yhr)_Y*p_cuzD4=$UwruMjswk;V~7S zu&f4lgb3Avgw-%m6aF77Nl)Y02sL|ns>ZGd`El4)d$GbH`cQ``7k}2U(P1y%(aoM^ zs8?Jx7MTNsj6W2gosCqs>-jL_tuxUk@}FZ5#rDbUAC{s{T=<*ygfTikpxvBy1WTYQ z&r#)*RWvE4XH=*VA6$t=QrL}qmy|%wn5@&FsfK3|YUM4iwo!wd5Vzk?P6SI!HHu(Ig8%69 z*!}?L(Q)es3E=gB6#_nmi7d}6@BgKC+W&=@mR9`TOZ%9Kx{K@(@Mj`mH$cYT=eoPm z{~?&miojHX2oNj|^otrg+`t-q;IM|(E2u+dIQydy@D2NIBp9N-bXS_X(#(~8Zg{t{ zCYL&NC%)h(Y~>UHYJ_h&Eq1;DQ;hFLkG;b99aYV)JPs$9Qho14m$_p0psR2cWGD<4q)V=9O#EB?bO^HG&OLj^Nc^n@yUTxC?KikJWl zPD^V1qW}TUo~pd*_Lj>nR{;pX_o?6y2(b5e2yhx`Env3%0Rb*wuHcOdp!~sc7|iy| ztvoM+r4E0IKOA?00%Pr~=Nis~>PgWHD*J%&LBZfDDzs-G!aQh|iBMpC>qI-OIN!oa zP5=W-C@Nr=0|FXc5$Fv42IOTCHzFLpgT~}HCBHk#&E!ubC_&&9fUYUZ=b*2R5`aS_ zi2Hu>zwoBvObUA%SBN0dX|C{mvFwlae;CssJVW3M>T_sZ2bqO~O@#3lMp}P2tkHgl zf3b0j=y+J@eQa3cJPQAASPKeaDx{*bemAUvcNYz}4a8q0WyBlB7I{1_FR@B({k2s(kKz>7QE^Cq?rc!cRpyKDGonJT9+ zj@2Q^4=*E4LxRH+9J2U}Bn8_QHKeNtSQAbmL_I?26~+Fw2>!J} z7Sm^e*f^6Gum?@-d_`C*VsBc0fmHm9H*I!oM%ym|&L9{yVwi|Q;e|HA0roVmvZrCm z9l*s~9Pc|PLY;{s^Jhm6I_#34OkPbQki=^drQ2iyRGy3q6NJqE6!o@Y(-b?@xX3!x z2)wlswq z^ne6U3(a;JQLqC|aIxVg#B&rP-ULILgm5yp6<2V#AUyH*IAI(D*PBVeNw|g^qQy2q z1zS~mdm%_=rU}I7X)SdIPL8YXCy0_G7;ESkD+c+JkCWT)_M%%^O(Q^sR^jct7_ zk>fxtgn!~oxFk>cq4IjFoDnJjMG7NqwA#=&KobBcs-X(y6Ch^jckx<|Rx(3{f_@i% z*FRL!KUFEV@&Xfm!rnmTV~-x8YF`TQ0`7B*ZH&rKNRH!wGF1bg&z>cMxE2kq+w z2_{MKnJ%6}P%8x>ZY{FslyGv~;@%^e>|lutwm7ogiEwWE?ss55q}?HwyFY>X{}n3# zzX37Ds>^>zF}F23&%LHt6xYc{Tv7qxXMs^8ZKR(ti)h4{rF+fJ<;H0ciX^ z)W$ zo~5iJ_DZ;7JohN$lt;M|Wd0c(J;Y<4;NKp$c7WuC98Fd~Rw`Pdc$o^`Q@qKJeWxr{ za$F9*XPX8uY}YsJ(5Ns&sM=N-T`1=9!n;;1)8r+q~adhE~AoRPAQ?VX5*> zqQ!J_8?Jbbsg{by03|9*(bqj_IUYPro7?oP+jU>O!PVN|6ieEEc9+#Old%z0n8~l2 z9%$258Co6Zrf-~QYtjJpizZU=6itc;{Sv#y!A!GJs(m=cWpEb)k6 zuIKV^7>~dAh>D&C0aZePNpF;&XGjX`Jdm?;bzz>3p7-z7KR34geEHa&-pM3&Hpg+o z>S9}zVJtXV5}Lg3W>miUtd~K-(7UI(9g*3+?KJ1kzUDBF9z_-bgbm9dVnIM58klFB zENsEU&B*iO0mKDnF$&#_%*?9e&oIl<$Lf*qpn_$o!8sXRy*}p!oHmv#pfOmhJdESN zRRQd)m^km$Juw}CPHdkG6Jk`=Tx}yRpu~9P``qPcn+SDa7o&Spwl~&74~NGo!0wr_v1p72GMdKd75}wM3^{j-+EAtF_-l)Jt;$}fQqd&_C;5*^ zR`~>WeieRh^H>qUN?TQLbdPIF2^z=^B`Zc!3);vSCykM;Dk5qos^C z@}E8Ass=JT#^?zzvs?UYYxHbnAhAz_)InT(%_p(G}fV0oq9sy>|icc>928feFTYrAlI zr%gjZ_6q;xc>A5`Kpg7*vy*ku@eVn1#PNQ0qN7gAZw?yk!UUJiq!eokfZ~`8RVJZJ zPbD=7vr9%nm1^-6ZXH{4qu72DC3hpZB`H9W)6CX;NL!FoiQ7;{2MW%xHGg=zt;4;L za={1aM^uG(MvC{@G1Fi$1?Q5SL)clO3rQ{@7d6<$glV7xQfw5Jjj?=kcP#14s0?`L zD=6nm3a+JLAUvbCA4fq%QbK}tPca6toswfdZB6c!#u~=elR5I)ug?<$9tvSVZ{F35 zbD>r$@#o=RghybDLot4(0UW9E{-NM{Ea=*24^| z{CX;At+Hn+g0lvrho@EPQ;HU->Nvc-sPwC9;%h2xky3A{g3ncEbGfUfY-%eLTga@_ zWNRDoI!b>em}a0ayHUb_Nb0SUKTgzbQV8#EBsInh3cPw{l5(dU zoG44C%DeZ-Y$$y8%LE*+ewC<|O+j6Mr@s9iO+YBG*2Qb|;ScpktE{Ldcdf4YNT+Yp z=Wo}?cj&~EE_E`$oNf|bO`@CmEi{SlCeh10QfN-Tk1anQZ3fm~# zIm^hCrgWY;<0%t8Z9&Are3SXSp_i=|H+s&BoMB*j>NOL-YWQ`d--w~gZ=1BY%q{Pj zdzYGam1fcsbJx3O)^e*_nY6-Oz0y>!G9kpeYt8HrOq~x+)A!B9b;ipxi8&yWvDZ63 z8}_jq8S=r4aYBr5hMYfZew?RJ_798CQ^PrXwKmv0_BnHBnjfJx`q|A#KWCKQQKn72 zxAIQS$)*@#pl6#N=bF3LnM%ib@>)l3bmTfmZg8TToM^nAlmYQ!*$x0ZylYi_gyjxW zy;dB+VLiYO=>4%Qn0N1D4?YOAx3of%*kGl!s0`1>bLSbQVLCq7n!LjK%0p8Z3);_0 z6-jiC_=81;NHEMslQbSGUMykt?ur{1z(n`59;l4l^p&^jE%$0~miA_AZ?3h{W0^uM zOU{qh`b2$gE>$rgqKH)$6D6CNPsFmxlkogAzor;@a@coQB=>Kfv^DVS-SlR58G<|dl} zh!$Bf{5L2W43{Qzs>k^$jNp$k)p%k}z9q@}fc#pFT*5Gw3(`5&x6y>*DI7xOSck)t zc@-3oF@dv21FNiV+=x{+>nu)g!i7yaEr&B2Gi7pSb4I*n(2Ubsv9#o*)|`7P=eFg- zTn<}s`Dxs^4HviLzU?{e$X*9d?aXNO$?2TYh0D5eL08^>24h}TFOQRZTaZqNBKG53 z2zVB#A8{TJ&f}ud>|M&)P|IA!={K`~D`$ZX0&n{a_GZPo3GcAKoWrW~%V*X<7=FpY z4)%81ET_?jtwDy4aqt_%t?eD<-~>lnd9IRVo5%?lN#I)rHK!@Rwvr5$b+Yp6t0+)W zw&F&L8>^gLoW51mPOa%+`JAvddGWw2K*e|!I3ad|;FTx_>t><~F+`YdQJnrX6_$ge zqQaL|-XbM$Dtb%#@2J~XDq5w2)yjw8VXN|fQqeBkyyd;h+oOVmN`6(S7P*>Ded3mq zkt?sZ7HK2T5QH%L{iM9Vb&(_f+aE6BF!6@U_>od@vG}7Tyi{giCMT}6 z8!=rY*bOtUll&WG(oGWFBK!|2y;YKK7cP~sM1lztmB}-A%BzzEbAA6FYdirLH(Ds+ z+Y)_d;r5`K_}`0sXBFM_g9JYc?T~1<$WJ1>q;jw5{gQt`{DTtyEPPms(R=?@!Xt6) z5yqD|Y$9{Y(Q}o?HiGR=4uWh z=~*2F`5+(|Vnju;PCxW|kSwfQ_FP(otIS!CXaQxZ#ArQJuW1m|zRZ^~lrO6WMFAY8$+TuZs# zR2F;z;6Ja`IcWSIvdPqiN$~ra?AB&%M^k_?4TNOpn&No|RzeR(m_PMG|D)^VZENHS zmzfaOs=r!JI#U3p2QD(e*Jl}-XNf2&kRJ8qby!TEbY_1*mtsIk7QQ~d+@^6J7`C9XsykRlVj&t3iF=uJk4zl(lGt%W@@gPI?c#*dws0^ z+;O71c0C_F-bn{Iv=c>V5>H1|lhySJ7N0h9%K35*aH+shuhw{-^06-eLKk8;+2?+B z$mQ17Ux0EKr?5h76Oc$JmfD=AZmgpQo~&xuQ~81Fl&NYrQWs~d zOIxdo7HV~_s@+b#-B~5NsO)ZP_8Dq;S9Sb+)&Bx@!DuyTlzOIEbsnP*UapRfRi9m@ zPQ6l%yIPIAUe&)&J$$25H>u_G)V%rXR&;olpj#DVx1X0D^(~(qXmkxJGG;wH^^o0e z#eNs#06XjXQ%=jCfK3hZUBMK2d~ zK&X1EBt2)FF;z;Q<8C=RnZ3|XVGp`ow1`JAZkr35JHZ&iv;u2d8mFu}t{#TjJZhL{5~-*JU#J9(jJ6Wc}F$eo1mGB@-U@eO9MB5^9q} zcE+0jt4&*oTwUSmk&W#7f2^1O0Rnh*jPKRut8Aw?bBz`-b-&ixTXgV)rtQ|`D7&>l z&3=zPHs1feyXAm;<9=&fJMEC`|Ln43LS-n`>dd3S`1NgwNz~RHY;TG>nex+PgmPCi z1+t=oSU86a`ZMjqcvG{Kui9uU%spG-&y%kUgE zagBbwjSH-9P-zWT-U=lvm3~j@)d~?a==6H%^eXbv5L=}Rc1m~^m!nnkwMzR&6@06b zx2VjmDs!7k`c8SfRMJl>f43^!uf9K^k`Afh7uEGUN&ZnP*Xrmi>#g8-E$G0De}aw6 z`A+cx6&zCG4-#UR2SNv5h9=K)mG%pq0bTq{PuGWwUl7mbML8R$u(op0dadkVhZihU5nsp{-xEyR}+QmUF zm7lBf7OL=o`#ehV!>}9Z%)@R`O_PTw^m?c378?qQQ%O@C^Y=R`d+k6Z>4?+mnDb@A zsliqgQ7xGQ9O@NG4N9s-QGI%@F@6DvCwfob6!Blnuy>>ZWdn2_5 zC;tY^oXq_vsW<|x@m<6-iE(E6(XQLSX~u9P;c_C`GNTeHe5@uXz>h+=HkA`~IN@{R zBu>=k#L4{rDV)gQL|snQVIapD!8`34_*laIa1iFY_@34gtqUth{!uH?fjcZC77hy;ad`hNBGkKu7oY6||Xek?VCDB3>r%IxYjB6{Y zr%9r{oME2Tk zedSmmN%WTm{UlK&#|Oy4L6SII_MRgn221xLk~mko54W_X<6thGFNtDFTp&M>7Bf=9 zi{yn-^6e#Z^kUJM%UZ;$UM9z`l*Bbs=PDV0h3vgv#$6}f(9OG1cHJzSZ;==NDL3CL z&;CPRxlOvaMXQb(~Yw4To=#rClqP7hvnR$xNtEcC5(Al5q^zSwQ zpxb_@-5+CH;%=S3N7G(SyR6#B`&Bb?i;e=*gq#sAP#(Cro88nj*RSDb*K~ta*Q?{! zuInb%bAjpb8@h6`3ymdoK}mrtSuSO|el`r?uGb2+hs!Np$#oga(Wx%CcfGbQpXTNP zrQXq{4sLQMByYM|U0gZc<*qJubGb4Pxzx**v)#Z zt1_1+xpJq=Q!x8*X|gN#xam_}n(pdpZqB`KaJL)W@A3rKd&K1#uFQ0~!lgM_QC)h< zRWG>ovP-YIw8W*iU8;1WrT9-Ds^pWeYchx6$Z7JF4(ibj$enC!3{lk$h~fIX2JKnQe|eZ4xh< zpWiYkRhq;ylUQLAADG1ZrevL2_My20Hr|n9>X@jL!D#HRbItr6a#sz>!IScn+vGP6 zut;uH!71W))Th=pOS6n=Y|N=<%M+mSOBo)4dV2g1&LB-YE~5AL$WL*7`@152l`h$? z^9QK3%M`z$CN5KHBC5Wm&XDZSCH*^59rVewwflz7U#Vf8$n7dQm=V9p>01~h9!hc= zc+PW<^LjNWH5n{HXGnEtA2gG`lUma$Lvj00=NVv=H`{J%xYeon){$+_svXYq?N*0S zcEEufH0nknd{3q1KSS?4O$R@w6iEHIQSy&;y5e>?AY^jb(l(be&g1v4V~IF=%tiuz z`!aX^jLSaf?wfeU7d+2b%TP0SSIC@&`c&Pl#!XaulA1cp3ifi|vE!jZht-xEvY@(5 zX)d?6lpQT(d@ITRr?e@TnaD(!up`uTFR6Zgb~`F+Vl zX|zKpZ-LuOC9PFlsHCT=K0whRl`%|Vme(8{q`Q@eT4JZ5jtbZ4T7zuRq}**c{q)r_ zyy6!f3{}NYn+#GsOeGCfdbldvDG*96?Wv;Gy3ZPIza?1!y7Bfo+*zqDy6_3EyGmz1 zVu~j_Hf0q9`kPhuKU8qLD!GX7x`emGr+*oDAFfv3s&*&rPx}#5;C`w#kej=t&Ne5r z8ZBx@v#+O041?g&z`K~Q4h@y+d!^_N^XrEu<0_*{k$b2z@p>Lm*)PD8WzizD5)xE{ zFb`vWMoSHmqrsN{Pfm(44#of-6JboxF(Ag^7&G*^zzF{wvSa=$E@8r6H4esL9mP+5 zel*|~Pn*8~|JB3QTVR=@|9Sy&YyCIZ5Z|(j(5?NyGAZN#?wE{e;!c<7ei0Ci9~6Gn z@~*imL*%cF@h4#^iUT$ND+S=|CPD{hsrgs=ACf*GwR+4%Xl#~QtG)DB*&w2`Ky(L` ztG!}qCqljU5k+Ddiu00;W9=Ruj+sdLBBh80wHGJpQO zdUlL0($asF#7@cnK{9`mp5IHi_~(DHTTWcZ<=69;+j!coT)LkNJF3NzDjTo%PEebl zS8BJs-iyw>ng;Y&Nkf!gpa$M;6awk$n{@OLs7@-D}~o0&s<3(RR~H3ggx7}x7mrlbqHSxmCG(CIN@+A@kwZ8SziDS zBM|Z-R?p8OX+&Wrg^ek|crh081?}xN8un$cAN%m?4vL!t!>xJ;ao!#})wuY7%K5rV z%70Cphc+0BK8Y25^6!ei*R{7)hkw`a@qR~su>(`qR=-EFeoyj<{;uB(|E}Nj&LxWV zdl+v137p4#Gq{AH!45Acx{AWkn;>+sKxhnccV06vE`?XZ|@ z5y$E~G==ZkYo~2*0s=4d(Pd+K{u8=mH(5aGogDgnL5nT$<6iY z>vic@I+$+Y8NpZf>B5EGI3v@>xC@HC9FDrM?#ewfb<{v}b6qc!8J}7gE=9}h9-*!b zS_06M);}9Eeh5Vpq7}A?Q*fQ{k*q3h`4tp~obr>TW@;c-Sqjb5PeEn!nk77R7jQKt5q=rX*dW;&{`qiiT! zh|}25 zCOSVyO9M^Kba7MdHP_r)`w;L9HvukAe-2k!>X)~M{pVH1J>u2ZUbcNxe75O}UyYyh zmCXwyNC6ipUMT^7byp5v0|-usO>`x`al8?ry zAj^U;yi6T5*HLdBKnFO@L`jaH>qK20FAwVmQ#1Bkf_$QaE)on7sjmI{n!nJQ+cjNk z^1R)>8Djj5oX4o7IhTJf zWG?24b>L7zgDN3Dm$w+^ov;dvcLoRfTnERoS*qVLn*w0l_+z9|LtU?d9^68Qo1L&4 zc^?tx!g55V9aB6VJvt4!ARN%p!$egX5GMrLVRdmkL8Aye0Nw@OBi?m&gUAEKli#Q{|4$#wjSCFDvx;bvYk%qCb;8==%2RA1sk8^A` z4ZUZ)St{6wY;F^rkff<5+Nj-)8h?|!QTrM8e(PtNWlOaJ*)MKjTgd-!tJT zgOOI0p*-A#xQq|!=!BG1?RSkhr3tTV#_1h7^>j|n(Vbgq4CRBYXD~&Pxf@)m5E|)drYkRQj&y^#%2+(q@hxo+1U?I{`e8qBF+Utguu%e~T zUjnPOD=?AuHhv##HxA+Xa-50qhu+}`RP^;}dJlf!Ey=|)E9 zWARVXL9zypDK$&`9rWg^K+nsxe}(qSv_An!H`<@1qlvm?8WjH8yI;$L7CY~~q5Tzh z7qB+=)!O@7U+);drb$1^lxG-e5;HMy2M)K+N3S_gY{_Ny^^8R^{?T#Hn**ewy*SiM zU}uPc`kZLtKVf5CyODmawSK0X>AENm^?>*da;(q5^9Np7IFpO6G+S3Ga-0zGf$0{K z7M7C-RwN>N=h&fk^nWH)+8%9e@5{zXe~mrJrD^W{nBXUKP>n-uJ$>c9?K=40jqpT# zEO&e_l|4*4c+`$lS=WIx&cm~STm3990ca6$#jmvwAwV@AcnX)+=iUu@V8FMag6+jf ze1`szaD>4W3BqX{WKcq5)`{cHnKon!rlg`j3*A5Ke^k7ffez=w5x}#!nUkq#3N?9O zA{1kdby{Ox57)D$_NNH4Q&U^&6{9JH6fI8&12njKU_JxF=~fzAW-o6sEcrFK2qFh4 z9H4DjWTgdvY8#>tfw)u!Rl;)okdLjp!2f_DQ-NMuAU3FqfZT+PM{A%)Nh2<^XXo{P zb!cvF9mS~@G`A+58B~Yb%o)seE#3j&ZpqROnFCv52{57XGydtdzer6Oss3iSAEPS9 zs=~|EJD01HD^;f|-+fo19wI|UE|a1r8i!;csS`c4U!VsRYQL|}>!A47_@)E*|4ivEg}GV9*(-mUz^B< zh-vWKDRxS*-b-seuNWsCQJ>2YsI-v}w2&GQuFTf9UdCE=+v!0b`fyj&E zza$wii@zEJXeo!gYP}`zg{}41P~=`{sXGFd$Vl^_&}g4F{HzIM9W2Tfq%-6B&3WB~ z|CvCj6iiy2p0GF^(A3c(gx@V7532-xqb0=PCwxRuU!;!UT=<^w@{X&$NwQ>$^q*r9 zxU--p!WZL*v}gN=Cv4J$w}2|A2tXhBPxnPLeT5nGq5ZORr^xU!c-u+6LB+VL_4R30 z)$fr$cALr7SnHI5tUbU7bRIrJmB&IhNA67pcQJa2M-yBsJ98-OdtI8898M!)}^A|rJYJm3%N zyrXU!ECw+v0Pj8QZj!3r`v8jw$ObSFZ~UU)VFiM%VTHvS7oK67gYP<91=tSadWdvI=Clor?5Cw4m2io(;#w@4Ffz=`$=#3b+n2M5K6_VO3W!#Z$8@{fuflL`ng zUo~p4lReV{g+iP`{%Mhw46)6D-^-!)+nfSKe(!Ul81WjVPz3aJUrH_|no8bW8m~Ct z#IWUl{3?@);ccQ$Za-o#TOhNV~n37q;LGGm0hSty`a{=q^dU;X=Syq9@ZHQ>>iTwPe|rG z88=fDgr+q$U9Q7b`peb&jxD*=sQSvaZdP>3cWnzs$86b9;6R+tU!E!-T^k=k`7=|q*Csp1Su9zfKK^3J3bT+e<4 z&oT`p_iUm;MDTIIPJ1EoNb=CJ;OAgvlnpc z3rsI@^dfusyzq$O^8zgjAJ$@9Y_wd#70bEtd%SfGSAM{a*0KK)YkXv9sk|rE9dp#Z zPpixq)JqFh_G`BD6E>9W#*%x5WXurUinQNyP@~$~J4xrD&oeR94Ov#tbb zWr#X6KA`!7c=8Z#K9sW%g?1N`fH-^s?O6`c$5_GPa*o#6X2tuEQ9Y$FI!sxhDi*4n zUs6f&3l4DquhJRttG;2jv~UV~avGviz?<6c_}d(U59mjSpbmnW6kcg~e-7LD)a0WM zs*n(lX^#REyMC%ua(q_^;%-l-8W}XK4kZGr(SV|CavM=48uE>4d~?cbNt{bjYpeA0 z2N3rn?nz%l!x06R}{?B%(XDE9K;Ht?>dyz42tmFRZT<0!a|Dm3S%;>d3cW9rR8 zFAjQeR$uPllb?b>G1dVFu@k2cY&cj#?_z%jPh4PODXEJ%{WWY}obn3uoBZwDT)Bjk z7c<&@-U{Y5V2p77I*vZ#z8iVu$MJf5mMX`Ri^p@8{pcTgN;RIZN*5~c1;sC^g4YzI z0FGB<+y)KMaT+QEu$E#WMIPcl$=WNU_e+xl(g=%EeC+BTFHQ50NUwNlnvJC?%eKP6 zemOeB`dKRG8+qQ;Uua%@%j7RHrSFPJRo* zVn{71%KalAr5EMm@}5b4U-J5qUtnA4!9dc(sLc?P3&}60U?hc?Qgku#C`ukp(beQ% zOL8Oe4Fvx($N+a@|GJ%)fmhu4(6p;8;-Fd{V6)@%XvjkR_3yqSm$ zk+)2ZC1(4(X3r{f|2l)AkB3`vhr{1nOPb9-#;ph~v_}!{y=t)fl3&ZNKa@>=BZ?Z^ zDH0T4#vu+ur>Ju z?M;YB&s#~noS=mcK;*+y)6fD9+WjI)wRIt+N02lxF@wfY=F6N1bMA6Z`+$oUYBvVt zj-LH{glFN@o^ z<_KWMb6L>bn8BSY*q_Zb3pOG~f-T@Se3ccH!p4Zmb@B3z=03CjoeLC4E+G|i5@eJahqLF_uWoK+ib=u4rOjj8zRtmH2Y|q zT&$wo6qtC=4z$#!v@_+QenNxc3znvr>u9_F;YQ=5q=W(R6bdp(8W5zsAtrI?@Vr9u zExDj(C0RfpPON}d0r(&EQo%??{cJaT$YmNS^RQhDNX4*m!MF8{-Lszh5VyX!g+=etYAju*>lcceADb8+A zVN3FIiCa_Mb|m1s!>iaGiy$SRL7ZJ!hjZGZ!&vW2d~qX|G$6WXrdB@7tWcnD1S}T*)1l@}Olr<6Z9l z9?xCL(Q0nEiq|c-a{c2Ua`sx@w~kL+&$oQU*&i@{!jFH-?gnmEP0=h>I9JVlQt>>+ z&nbRJz4@$qY`(hUdBv}&+Apib>uTd7)#DAt=`zZfwrSF~y0on!k7bCdEp1Ph>8Hr3 zdNK+jl9_T^mP~CVtzZUkBGYrEZMpdOVQggWv_OZ24@>Z-#r%4})*q@6v< z)0W&=xL1<)%Y6r=@UX1@S*|)F<;P^eQFLRpcs4bO5u8_FR}XZ4L(Pr!>=rt|wa#j# zQy$Q_VJlpxOMkH)_yGe=;xTjY3?nnmjwg(sYa>)(pn&lZcrIXpf$I9=1$(lPMP}@a zCgn{dZ=1wBX46}?=p9jMWLf+SE;sGoGkaH?O&{3Saq?Ot@7rjYtUNR1N9W;RoYLl0 zvPR!o*IIFbf3g1AMs`*AyW0Hg@CDK^Wv`-(>oC=3AIJPhICUo9_d3(hd{s47P+f5c zg+L0dEe#MR-o=I~^p4C9U z5+2xLJnO%*hj%AtZarv*%u(}>=r=vOB^-`@Yx^@KV+Kz-Pg-aVg+ zN7AHwDZJl$`o6Erxp3DGa*qkgYtT*KIt*N_y?W(rr8GNIc%FC z8w?}c9J9N*En~c$jvNKo8qxC@%1AUp2h+6olw!>LK2Y=qWz^SAZqdJvHWfIkeQ|*7MxIRY#hyRVr1&;u-S)WqTLM1P% z@FnHpw=7chvdU;CMJ+|O60fyHEkvCLmLnpGCBLJ{|06<|$Nwj-%PgC$fq6mSrwrJ1 z-iwwIS|xN@y5iqBSJ1j(?3<}EM8mw2GBr2V0sb)1M9noOdr6Q-Y-ZbXXV9~_^h z1NdAp#H`1;jSStYl5n-pHiFB01tGz|{A7jKuIyhC+8QT9smn#k~HbGsMK&UYqfeeyE5O6ThHtnNU)?G*i^2mIl z=WPcdE6$k;;F1GwbT>L1y7WAl#Tf86^!L8)WW1@dL+~m4!X6pIc)w}W7}-qcW$U}L zbP7iBjr8PZI=2hY{0Q+eEQ=+38YjVy`l;@*NrxrmLJD4of2z%E-{n?o_~ZpDqm3-e zMlYSSf09=k=(4jMbs7(8$Io1)a(d`#J@t2e^!y)XVy>Dr!dzEu4qUF1u2h*92xaTy zAzax=o#>~oYR@Zh=*ZS-&2*jS`nS(?pKtWSP5Oqf^}HQAQ#)mdx<-;U!k35WzNuX6 zGd=7xJq9WrOrS7l%+?r?-3_M+2B7#*h8s-8=z0}?qWuk8KGzIe<|XE=D)p1;&f?7zrxhJqEQTFa79rVo(5 z7t4|e2n+FN3KnN*SHdo~5f^O6F7EISdn5teCPY6il_Zt`h4qMH2~Y?kXqH_nqfA=_ zhS2|vCBB)$2grMfXgl43{&PM@eJz<2XGROT8jdyLf2aS!tGZXD+)9AFSOVnzy98*v z22=5Oj7Fig7DBWj82ZmP;d91YY}a|&=g5A?`^E8&IH*IS>bB(YL-O)S{w@lN{w@mg z&$T5)IF#rQQ4rynjKlIJ6#bhhD2zoxcv2vFLLV4KJ6ge1r3?B4mPhL{E>1FQPk7s)rR{x z`b^QO(g(qg{fu20Uo|PH*ta{f)rn$Rk@uq`#~h&B^qd45-MDVcu?Dz*AOlBZH z~|xaSN$ARLWkG z0MpeC7BUunC&fQNt)at{0N>U@8;wlEq>k2t$DM2*7W~N9?9^_u%Rjq0HBI|o#_eI; zo~ELY$v?+z8E?GFCV1RpT`Omp@~6!b^g^F8Q&280Fq2;}cfD+UG)`YJ^tzExRnXBX z{DpFl07|U-eGUe%xchYkLhQ{Jw&@)qv>NDh#gK%}!EZO-FVyE#QL`Xcp`bZ==*i$*(+_Gifp!bd z_cCZO9*?QB&l`WO0p$SV_PITPqLOgG8_YKTL@T5WcX1e@H)|Mg?H=+#Zf`?gCWq?~ zE3f_bCdBK1U)kX-8itLqT=SHGvpP#K!qSa^LJE9SH`SD)oL*vrU&uc~Kt~36*`F(< zj3w^T(6odGNPN3M365zg%EL~*N34h|)tup*_p(hP7^l6H z6g>nsW}Fv*HGdpLJM7g{t0&|7sBo$Zk;(++{G-YPP3s52^$C5GlWK<4HyJouX4q@u zy{RPCbnwmW+iitE9BsO74(8Dt%Gtxmf$1l%yf(B^cLadwR|-IaI!OhQ@Bz15dw5%v z75U)O%~F+cG_*JV7=w?`9~CRaaA)E81i)6SO;82pkH?ew_|XAEs|# zXsqfGAqVpWQI(L{l;E{JXPc9Hvla}$P6*~24Ion5i4nh8T^7btZ8TOqn$G^c99AKl z(3G1PBbz{Ha(_oE4ZZj;;Qay>K|k|Xm{JvNAFL#RlE6p$-_VfOU~h7Lz>Y!_fpPSt zot32A#d)AP?a*N#6TPmA?vf)(n%=?T$lw{bg+2HHEfn7=i^}ZM>dm4E1N4Z!2`pWu zPfr;?QEaRg9$^f0maDXPW7j9vH+)8KDsQ><`Fd+qX_EE^INq0z)U@Crx|oshA}=fH zB|qc|%0He0Mv8?kV5OasYo;Lo4g^K4pHG>IX!r!=Rnd)lQiOdIi)3G}Gl3zT3-BT0 zPKa9{OYsEZ!Nf(zXzxvEB*??>63zxi95{DWI2+);WIkZOCU?2Yd)M9!i1(V(Rqli2 zvZoX}I!w_XnNK^JXo{T!(rgm|YuQNPvY};4W>9KP${R=N3&~$k$kM_W!$qz-s{p;Y z<*K6UXKvOT*AlI#Xai_|Oe+-|7f`1cI+*~a*LZ>`D45T(S&t#Jq`Pt3DPFD;RaZ~A z5clm7kh>J_&ytOL{1gh&d!NnFlF3s{PuuUM-mY!OJ!$DBq0&h9tTUFVwd^}pYKL;o z0GWTW47o{W+$`5bl2R(o?v%0UnjV)3J8T!jMFs#08gI9r^2bnkYXC`JgiNlbxxAga z19G^NjC@S}Kcf|3pnXN%Hqy0UQ?Qv1ZzYW!(jVyfca*)8l7FIW_E5dURGxtJl~bT1 z|4=>rfvWb23fh6vZ={`i=Oj#~aP%|OPMr>|9e#34vjD%PlMeBVI%)iU8J^abMz>RG zCz+_FK|_+yx1d_wGtrk$)(kG5#cCmECmatuHpVE*hFPO_!v7#~v@5_kDtv;FTVxBW z6X0!9Vw)3gcLF{VA{Z;BOI+a=lXLgFu} zXop+XBY56sGe5?u&vV>Bfhs(2sH4Fr)hez7c(0W>Kg>^_g9U+!p&#Glg?qgioxTER z&228Xf~nLU4Iq;}i$SEsDgh)RKzGmv=+iI z_%BB&oXS`^{d#ipyNprM0K8)Sa<98}SS|gB1t}`!>y-lUx1P0&9Tq1EPs|8vf(p;t0TRMDG$M5LqT}%oc7CVm-Zt22S zQ0~NoR2h2T|NK<&+)GgGK*fxg>Rd423e-_F8fx^ywOX&%GZWK|*Xsyeh>iM&T3s+# zE=F_kE~&j=CO;tU9uj_7j#(@_s^z$yG7xp+UTJznJZ#qAsEAE!vOz;16XzD+;4BaJ zueZuAcWu|``RjGzCY|xB1YeqMn;<2GVUg)Iog?V({~p+D0c;A40sCN_v*8D=V&g1) zu{b=;@iI<(oJ*GSH&1ZNa!!4ko2=j_Pw}f*cAn)6u>iir>IIHo=A0L~%d1?ol3#s| z{Z;&9jdP(adxO)~aQa3L*Rj8ePkxhSGy5C(U+a0^YL4FGnk^h`H}{65$}7S(>~_1Pq^w+p7I%Ie9l!L@}*yJ$u`zsvi=XJZD;irFWJF$-*CluoVJSx ze$DH@<*J=LayNI~!$o^J?FTOUk=yO#^h2C`kn?`xX1{X!Z=8OZbAI6_N4VGToL$G) z{lQ;@qXf`vo=Un~C2iFs-qF3`4DhCI_O3SX>jNL?%RkgbAM2b?bn!>p*NzN!@I5mi z-IG}qlu^(WrKX1eVbt6rQVoN_fk?BJ!N7}MUnvXb$=~S^0}mJixC)AV4K_HbBtle& z59Mh?3K~<`g8Y``Hz&UtaY%k!@-xZrLVj0p%*gLaesA(mAs;00Q_1g3VL$Twlb=t1 z9tDHQA40(}@{7nHMgC~=N0JY`{dAHu$RAJsnG{VTe=_+c6i=gI28Gi}okME*R{CCNJpZs^o z|Csy_$^U@-Ps#t>?bQAkB-==?;An(GZl+u(wM!joKL-00zE~ftKR#9MKT!?7Q1Y3Q z&#{-Of^Dj9yQxB6j^D)?T_-wPInO53mMeo%D> zRMVeS#z9qgNd5k^YWj<7m(>00+#6Q?uBMXy=rzF37kp zN!KOoRVlg-PUFzYT+cUqkGFiUcVwS8=ST04176*JukMhy>t}D@FW#32y)lQq zRlj+^9`Wja^;RAA((Ak@*oFxgn(M`Woowrp?2#0Ew2}R}v2B}X*EO+qO>JE>o7=)J zXm0D$?Y?8|zLxg2RyMb_-H>7Hj`LunSJG z$9A$+C)#5>+qqrrFFov+UG33sHXG%1Py58lwyup$?r*1_X&?ICtAm$g4_$YH^vjht zQ>4Sia^Pxts9Z)@$aSzT#75B6Uh}xM>+OP7`h{Nh!`^nxDQ>eE*vC4<*vKNDc=tei zq^~W>xBCa!!-dw%v-yLZVeB&Oi9=nQ+pZzDY=li8WiKeQqler4k@oh{_Qx?c1M$Sg zcFuVF!dUykX}0Q2duW0U6A8t2XW3yT_MS;LX{zlu#YO;9#@RU6UXnv;8%*hPligUs zpg8l8mx=o70hErM{HftNpj~l1mrGv3v`*wqvB?KPu0KLu2|Gg1?HcV5RpDrCTw%>@ zhTl%cv83MRls{BsoL1@t)>!c)w&rm=Z-APD7CE4mK}rDuD^y*<6$B18TzSLPI-p_o zFwtnW=x<~r0U0#~WCVyK0hG-fuTE=h{R_lb_VRj2{CJvIpbGv6y+Ev!?$qTV{I8RE zy~G`vU*y~uxH;??I;w%kCmfG&RP&Cg$yUo0-C&x|xlLz0rVZrJ&84D+$WSR8A;EC* z#!2xr5;QhvTx2TQ=H^>7z}{HDY~H5;p5xqvFRfqfpxg`JoRaDcdiT zi?5V5S4+`#QgDqV#j>ef4&5m8Z;}R;(q)cxxJBCCD%ZjMXP2b5FxMXRKB=(fFio1K z<8$SOGMNa1@n|^~#okai0%5ZZOeW(&o!igJb6{JSk33&QsLbM*(fBJ^IlP~W%6Z|9oH~oMZep4345%4`izOUXLp`Rh0(g?ERIGw>6_u&3Fn`igk2`OJ$0Bia$X5Uf`1Ew3tvE_ymeE$e`o~ zrYhM;iV4759%152GwE&|;Z2xfgMJoH*Ej-PG}Qh!!ch~WF*f^jn+wh=QC*tb6F=TY zm2lkB9Dpx}2H98_VSo+Mhut(BCy;cM;`}hfbai5Lm3*A)8miu1Rn=UT(o~n#J1U@z z$B7tLSG^@~irC2#p6%Qe*T5(I8i9GN+#oS<`)|ZQBntVep7Ey`bC2QW&Nlq=EhZJq z+80KDV;U!n!jRGnN3!x>ws&tAwCWAAmBXAR)T%S=vI#b8icN;$9@4j;;I!8{^KH(3 zK&AGTMz_oSrwlw9!tF-&c2EFgJuD}wASojhSF(T@HdA}Z05a;ynJ2UAm0*MPW(88m zI1VpzQL1q{PrjYy4)*S1Zyuk8+8%{Ha$29{_z4D*05yu#u;8S;hvf$rQgI_CforV$ z?NpPlO1i7O9;zZ&)fA{|U<)IZoR2x81f$|^72c=nfc>sjvQ6=JmGc7#?Aph^pW=4v zC`U66ZbP)p&~lkpH#@yak4N;fC-s;Wx@eUSfRnthi$B+?-|FalodyT0U-hh$BG6^{OOokOn)QEfw&wul7lP9i(-}^Na@_M>Er> zwQ<^|o@Qi$$((4o)ckP`;uV}{W94$kBy`5zIMaP%rhe(Zui2O;m9`3U`kp%seZt#o^Ze*FqnfE~~seH_-Y6Z7s+>;O-p;v`#TpXByCe+M?EnSZu z2pIP^s=#@V@OuUaNqkg3&f|`j;d6y8ey)^3=rqdaz|m{HUOHEDzoD@|QKw&MIy^j5 zc~o1zzblXF!`@6DwNU@?h(7YD){p6;r*!I*df#&W%L;w;MV*5790dFQ^+i*RHUCi9 z&EsT<>{jXcFP$As)tV>SyNFs}Dy{A?t*T%hY|5DeAi4@|aR%ejALY6X@g!E0na^`W z5w6t!r7V}Y4tO|9WkJv}M&*NF{jTc%jfw&G<~tiwJ68aureU##Jh`LwJKM0ot;w@I z%=y(Vk)L!v%Wo zL;B7tz3m+nD>@UY-wg(|mQJNH(rMc%iay{~xF4u1J-_N;2*t9^}Bk0kY8n$j7HJE@wED*XgC|9G`B z&oQ`u8KPRll4zQ$o31APOTBWox*=BOH!816MbE0f&nfRUWmc-$ud3MzlOp}S`r#Kf z1Sg}P)$6~ii;k$FzXKlAFkL+BD4OrONmI=^It2lR1v-16J~&kmgOSl>ojgTPn5JVm z8eOALzFL=Gr8!}3RC}BDZ`D9S*F2`fS9F6_dh%AC2AiWDy6blB{YQttXof1`sJ6|e zaU)SJBsx(5fa{U+`!Jb5RK6S`-w$!aX(d36SfKnJFjt@;#^@?pCN>d4nDvgNVLb1X z4vozX#~H84@VREkIVR;i)9ifn#|0+7(9~VzERXmtV>TPL)gTQ|Tyezw)qZTxSWbcxNr%!ZfRxmQ}g!iLw_@M_z2 zj_vc1wGUVj5$hhe_g34{%j}s;ZQmzs-IKP>^L8E*6RvgobW{b5)!=}V)w&X^#5x_+ z>Kb$hFsDwoQI!o_=pw9vIi}_d^Cd2@xhdgQjk-7tFD@uC!~m+L|1?coFeZLhZrhT^Ab!RG#9+={CBf6B zd%~e`Z;_eKpp~x>zFK&p@aw{#3#0#XNF0e!8}SSSLqpzr3&ZUU0}zgk-078OkG9Vu zN^Fc>c)A^2Y(WvZ@-(~XOuKY~tx6n7e>uyJEU~*M*`ld-$rPJA*;b6Ri|1H|N$*M< z)mqNAZyW=cZ#jrc7^MhUHvncQNbtSfgf0WHtP~T~!s*U(KNsiC(SM~*!zMHy@@Ezp zP~Y+~wg{=yNDV8o(20b@pwnappWx9d?4|V!8W~~SQ6?WRx8;cHB6oI{u&40JlF~~C z^^+EnG#wzn43hFuQZ`cV9wIqI<;D@Rez>$6D|(DHERjBENt3A}=g2MRO74a7&`f#h z5}9zBynnfzcCEB3lWS&4dWD>94HD-eH*1#=r1Y+KYLsxJ>v2abxFk=hZxkHMA*Mh_ z24uW+Q0(Aizn$t{Q0-t|`nbL90UM)3H_vH=)eF`~2Z|`z!Hfs-d;R0nt>B;PA77$D zPeqCfU&aXY3jfIg1N-a$kNQ>5`|2w-gCuvbNTH;R5;anCMhHOH^hR7%awQdw_a^iR(s^q}EZwD2$DR;?}D1pifAg3cZ2 zPhg{gb#|)c^p_}4!V<|rc{#^*xN1;)+@A16f)&!=3^CXrC7577m|!m@IACiXXCQ>& zE7=jJ!};RFC8-AoxP0*Co>c=NvUonBuy{o^tyjcAWU)qd-=y@LYGy(a^9$q^*OMj%;%#5(7O<1g%PbRFbU2g}NqNYK|AF6r9mwoXhrlIlXK;0GvfO`k8!U$!8xnHIS~H zsWN)$cz_BEB<^oO{3|?OQWBjz@Dfu%vjn3O?(wfEgnPyxaQ0qq(o&-K0;iO`90TcG z_8x(N5%nb4-AGf7raDpwMyU@Q5d70G9#r#S<_LPbQ!SeN@}@z3h@??JUyulo5;5Gz zy^e6*?|k%K-S&Nb?*yIc);(PQgff&&1j4W|OqjOo1SD5!L$Ux|>ZoB1N(+mdB10Iq7_^ z++y&v2FGFFO!~kK?`+fXSN&~fq6W^!AD+)I`exn998HwF?h&s_lJ>}^^SNXJXWgN; zuhVx<;v0b&{Ds=F%@rU0a(5z2W(M zOD!kk7`Ri$`KHYmCUt~MV-H?%-yp8^{exU`h>H&MAI;U(&D4ue=wCn7kawl-ks9A+ zdBY&$*ca?TJo$UhI?5Hk0WmTi@xd^LnZ(a6;1AeFpzWa-hU58qEgPKBKAy#4V;lUF zt%sx8>l|!z3<{`m@t@$#g|8dSRK4PUgW_9stSKKRQ9j)Qf6EkV){si!Y}twmvZzx# z>eimBv#D7JYSxkFbf@Yr)T;+opG4I-gZH9gy{Y;X>ez=Ces3IRjOW11*>TBI$E@u zs<%+}TU4}_n!QV--lI7mQSm!8>SL<@oT?Fxhb27&NUVzLxe!A|1E0idjD;7gE|%Oa z;%}DdU5Q}J@R{j-9ZA%_fCqx zr}!wL#v*FRN9|P^Qm+YmFCgcLumUjDlMYYQB*pb zN=H&@F_oT9z0RQ0@l<*y&6-4|lc}_X>@?awgKDQ!t8=LITq-@Ew$G&Pmr&{DRC*1S zUQOG}DY}trZ=%v$sL`#|>ozK#OQrLu^e!sBn|j?#wGWYXQwDt(5wKTD;{saI=i^c>B4iArCgUawJU4Q*dd+gDNT8rr^*N;lD6 z>uLK|Dt(tq-=Wg?sq|wi{g6sOpwdsN^m8ixj7qlR ziGp7VN&=8MvE75r8RRnZ5Pcl^N3cKKr6MB13JNSFw8o=2EKbB%CCHr6Ji_4(G7$b3 z%hdlhnKMq1Il<%v)ju4o5SFI^%j0W><3}>(H6qiPDx1^7W>j`OUEQCK8A9{&=)Th^ z<8;cKOm9!4c{8Y@g5n#f;6}=*q;Mk@rqk^xPC!bp=bwXlUSD|pU3Ju#9H=xv^TsZG zJi$TEMM8is`?pKp6e+n-vM-ks5MmdLdPEr8@jruZu@!>#+LBS)RblvzmmCmiL4}>I zB1JXB4^70tPmhTK8LcT=Z( zsi2A$S5v`K%3VyIo}q%}RQv)}zeuBAqEWBWqP0}Lh8BHFsh?3nM@M1-M3Y-2`ZP%$ z3!gOcri;H-!cV30V^JST@C8x=3{E=Grz;dQ&pN3x)@OdvhA3=aMt|Iy{Ge7u-?n%b z6(hyqGphTF)Ys&Lq45ubYw$Y-$2xYaboevJR={qZ$T1kC==JBT=pof4SDJvr3f&5- zsRa@&!fC=&Qypb!2G(Kh>BChz7U9JdfYP}`z`F~#Q?QHV2jYF?AEfXQ1s;c}vOp6G zoC?EF@LJ)tBUvtmGaBY3NWowS=7854BzUbTMS}4hP2i}+$!wh;MS|A~#h+iwd|LBAB7Kq4eIN|(TQN+r*x1nsEE9C9DrO^E*eGVM?jCg!q;rP-a2X#vD6fi|EToFZDd{oFSWJ0O(S~QJa0R72NB;9xo9-M zNAeDpe@wZbQ|@P!{Jo$Pkw3*IH79OQm>1}+t9}%tt3H_GV&cgzrAw7j)hyTMj+asN z0pU*0LlM=Sg1&CS7qrw%;eSQpb>vr2FpHux=u;?slEUXGewh%h!qp`35P&yM7YZtL z7T&i#F*^ADN#&6$C7wxg83oHoJxTI1skM}Z#y6f;CsCzAA(wupMff|6ce1D0DGaWN zDT4Lf+feifIN_-AVm$dY*Vd0=Qg;I_y5B_jeFiL>NROcqKdS)MvR|Qb^h1}&M>BMz zX@W&TK@>tv*IyYg4N2-*;7!rM*M+u|OcK2qZgYJiV{j`J9c1F}2X)Sr*~8y|jLpDVLh zCI71CW$U!}CENi=KH{FFUL&OcNFl@AG6z8Mtrkl zU#HMF3A44oPpd;3Y81R_)m@zuS)IAk8CiqBA?Fz9t^I*XA7JC#ZB#F3JClNm1Q1EmRNmjLs?!vM zWBHJZpHMOOtY;NW|Ik(RUv}-e=oQ7UI@xkuqvBdsxmw8^DqgSPJn64-!bW~eaY6tN zJtG{4GSdFXM&AFoi}#k3m4)x<;9VVjs9~Q1*~tG|uDIkcm7+GYl1xr_10jY#*@WjC zzRN`K88Cs%8rmqw@e`!jA|u{eK3-v?`3aDp-C}YBln#%e&8SL1<2MTF1nIs?Pf|4v zRc(s%mPv1-K2B9RX)3*iN^hpp;h%7fN^hldj#DXZRC=gV;4}giVXWeE*f}bxfQ6}& z8=cy&;x;E4@b6G^xAO0Dj7{k1(dCqfoTQqoRLR4jG%E%M2vN_Y3JgyM!}CeS%awZC znIqw@dK*;f+bRRd+Xs$IBl{KqtPnY;!i3FlPaRBgRJvrCu-&B7Z*kfO(Dt(L(EdHn z%N;ree}N7j()m?7X(9T;I$WZm*uqeO$PqEY2!#)y(@8HmNnQTSIt17HI~}A+97xne zqJ|Oy2W}=v6IRDc+)CmMceqyB5|zop+2SvAMwk9_@mGldf&?##|DpuzBv=prvx^bu z?Fg=V4gR~Y|k<3DSn7mfd_OE-&a zjH)&M8wMGy&IxUu3Ey;!RSJ;6t)}m0_eGa|Zfelb{EtDZOVy8F)qbzRLGQ`K-oJnI z2LI|MAN7FFzbCdyitDn4N%ml4JG-H+JjQaSeYLG!i)g2IHm!@j7ZETywz8+av6qEw zCDu>Sxs$PU_j7($h1k&ZtzU>m($OHDSszSn5cUMB|oL zcnY1{ho+oLXZNMY`_a1*CH1Evx#Sm68j6s7no>wfLrDfx*&rI7M|DFe9zk{(jTlZh z6;a_R8a$c?kEFuWsBbY{FqR;z3D2N2#*vJtk_i-?Ntu(Ngr)E-iYC*?Q%IH2*;6T) zM)AKWJe#8FR5XM59QyD)sE7KmVqU^$XRcN8*Ee$JNK8c1=b1)us1;#y^CNE z{^kArVM|qkrrYsOs0dr{nqoEW71d;=ir2U$G~atiLf4z=w)I$&#dxAt=B=fTz-7O2U?bjG!s!5=%rT~X%6?p^p+*Mb3Q3NMIlJ^DiVpDTPwxe_kT zg7Yj6n{YKuf#3x_tVe9L#0i$Y$80=+!C*oDcy+y()D5--FGU3DB~(jwi+SDx4(EDt zg)IQ#cBMUZ6Z^2^>#wsTJtR*j575c^I(e`T2I)pab@D)6G(z)m{rpIsHcF?B*2%@X z(HS}zuRAqX!A}}HLe>{%a;*pAR>c=8{#-@dRM179=_=7!1L|-3XgRcvc!2T-s%VfB zfHsAWm6tVG#W({FQz-y&>QDWnRqo$MvjhUr4F~|vXbEg5W4wC$VwH*rMVOGhqVyWo z?M+qsgF=>T07Y9r`E7;d)QQ3&7Y?7+sO2UuvxOD5uG)Hl*;6#48?!c=BP-$C{1-(3 zPsb|Y^9gVsiH$f!sJ9$Bp$fq$`@N%MZOKYI`gIl5sO+tZ$G{1P^r;wcg2Pe9hm`pV zWhA&gMHf;&=xX3&>~dYOa2u_M{NaE?EL{o2QybweCc$WSCy|*NPD){>_-!S;Q1mWr z%@iF&yodNy^1v@bDjX{Ioy_$_GNi+UHujOuTIjkP{xpxLbF>&k$T}tFTMjmlF4yl} zrRT(Y?DhJhS^DuC^)uf{-Dbn+VfD2t&-GP994>~~2-xf-mu&|eSk^-;^bfs2Gl2_n zuj}=^>-EqHs$`N%nW$3EQYj@WWr|9fs!}GalxZsEUuxXhD*ZfFHbdoHrqZua7yetN zT&_~CR4G@h^y^g089-ch(n>v`)>%x;QxYwgXoW=2i@YFZFG=*G#BWH&I+?d#;%}vL zrwrL8Y2V0_@8yjjBxi#&Q?1!(G-OTS6wUMyKc_s)&^6#jVUgcx=G4MeSqaRRPcR`Q zIeim5KFa2Nr;AsGHXiCO7Q{jsZsSolJj-1*mIaw=3lqD%g3(Z}RoI|cxK7!hrfnN7 z^tlmK30UGDOQic@J#^w$DizAnGy#aBM;VqDCDB%&eotg1UEGlN14&NcR2u;%r&6;f zRFFo+E$HHwbhtSkXhw67p#uP!6OiM@fE@pUHmB92&7G)K7rFwNb5|+_=6pOIIf)Jf zb53BAhfkp^`_PZ4(vN>(l2_$A2>N*-lR%*p;N;OEv>$NvU-;zVdVCTnSutG-boz9< z3IO#PbQl=*c>3{7T9&}5FRjO@OQ_3a+CPOB0j8ct`|FYF8T7_!xz%}4aVAogE??8PksG^KYW>HB3n%hxH8HkPo z=9z%CJ11bznRDq!Alv^yKG*yM>Fzz@z}iH&F3Lx&rVx zz(YW$0LjfygZRCE~tiEnpEMY~6B-t&nb zAMik+UdK{3P^SNe3f6;8_1NG5V!(p{pnwn#CaDJr0Y?3e69Sb=)H$QBqjvRp-K|vk z-@wE9bQkc$#ngK#6+A_Y{u_k&GR^xNMSO$i0OR_A!UUXH_XSi20-s@EhVdb9+@lu7 zXDU!BtaX0_Q-Es#3MDibsxM^&8j6VfQ}SPE)%Adh{u^Kg)Cic>WUBlpY?Y|%vH)IP zMosGRtLvx`l^aG&8Epp|_D?wLQOZe_TNU-7778ukT2E5eU(iNvuIE*DV-GNJT6*1%?UyuhBs2>0Mzt#T#v1bq#j zLR$0~je3GQJx9g0R9r)MY@<1b`k*NTzH$7X^+X=L}@?^Rrj|$2tT&p=132;V_7(Lt9L z3w47xooT%KTHxd}Wda8?#9LtDG}tm;@3F|d}x zIVk%|_ z{tmiu(3ySscXe|l4TX5?{;VPn6D>kP0Qzv`_i>od>4hARWEsVNF-K>xKbFHpmk@4^ zK03UUIG)V@znn#?Oyl5e=WiqDad;ui#T!_PgW{Nr}mLB zl5mQ|mrMKtPHGY&M56&WPj!E_H1Su3)vDxMVL;7!31j32&Y=-sP2rUsEaUKTj+b-z zG>0oVe1^m4F`_tpmH7=0*KoMmC7_+Vp2N2oB6N&Z2*w?1jZc;8Mgj%~J`zSqIqu<= zjJNhvorMlY2-@Evo(W$d3=H(m@#Kk|i|-wmfRBfN+D@=2!M`Ro=Nl(-a3yEq$vE|+ zfsR{uoPy_46QG@Us^q&>Q5&85k6tHk8hV{+iC!n1e{kPqi>S9LE?k7IUeH=aP1od!{Lf{c+3(V7kSsbM)ys3L6@urRLR;AEVT_zbI z#=K?L;xjjOti>qtum0UC0=ol-JXI1b7QfoLQSsNtZEdI94l;g%e%or8nV%Nq6!7uDAPc!3uoERT3?B>IS?BzU#o4sDWvXn*+J=-CT1o=iu0G zoSu5#cZz>h@lQy{)=|1f^a;0i2s5Mv{)yV}sJ-qwJV{G$&6kNuyjldND9jS!wUxNZ zK)He2tIK3Dy>&@DVk#b2x7Kk8S=PQO+Botm** z{k})}dsXnG3J<98Csoo&=cMV}=1veAw9$t$o%S>6psP;Q`JJ_N(oshpLj>Agmz<)d zN_erv)e_@7ebYouZHP6it*yju$AEv!WaHk>;_^ity=mNX*48#m9E2Hyf+3bi{7K-1 z?!I!YO@)WmWa}o;EY2!Y;an9YE+5v){v}d*nT$S++znG!KNQ>A5vMrob-0BG0G1PE zC#V2qw5_V|UrcfmNGu2;Y^LyaSBY9I48JuDVEk{5j@N1d5qG`Tho)!YvaF zz1ZOVl7l&jmR3&<yAHx9@SP32i-V_Y*a0*8=IGWDExvb7-zTi($ zOi;?f)z0cUjrJ%7Brw7OAsHKkDYjuM5kJp7=wC;zBPW#SpIuhD(V4x`aR*Jo6l&On4e}%@1<0&}}8SUb$ICi6@7DJsB?>T73y;^=VEsHnM_r)g($3qbug0>8&(`sfm)+6^p*?ScvvS2v z!?)%-)ufUV_ z?TOz({KGuL&$PXs+ULawycjt|KYQvoFFxXhzj|?<7XuqivT>S?n%LT=Hfm=5bgP@& z8gvg^T85)*Ya3@E710)E+KE|Kb+k3@Y(=(>+uNvvE$w7shST^&+qjEe*4ZxYW^Gp+ zpJd~nSPyL!TFABHHdc+d&7RZg=!18+aNF}A z*D7QxSA zy26WFhrfYpqJ<^&1R6<3D5n+F6@MNXRwi(jT zKYE_xJC!U~(K{;asE@v(LnZNRqP9tJtx-25VyzI9^N}mJVzlG0HGG5dZ!)Z#qFM#bUD#VM?E%9g+q8#G zO3+$T>oi1%VX|O&Cf0`YfA#%>p*0~!qEqS~6U1L*E1 zKGWn+GIEyTsfMpLa*K&?GwOCDcbnio6FdlBxAB*_X#zb<67(!vP0NqW3Ew!gT-D5) z4z_bQ8|7G@XcXBW%78E5C_Wbs8qz;S6!q2vF{iGeIXf!IEPbVnZoqXPkHz zGdgh<@=zz&CFj{{2R6Qz9A|Mblxv4@{=Yf5ob}v<^Y9a#{T#zwOJUP|nHBa;?ALIF zc#HilE{zejx6=rq2a>FcQj{b)uWanCNOeTcR0#fdGiSQaIV$Q4O1Xx6+N;=;z?Vk)vx8>q!jTjZ?Kh z#U13A&(cS4*U|I30jz6R>GVyy>H{7Bs@)(wR@!GuPFDd}r@T~#;BNTwM%9IVY70<$^QZ=$Djo_S?10hCJ8#lAFTG)Zd*szrygQY3M zW}!OGwDEDaIiwtItw8$P!A@*v<7_*pll|}n`{{``rL&#f1$03--qKFCg>4+$0YW4Y zx3G?9n#f!ST~Nd|zVl zKTkkFs`axt!o0x8u-a>(gOxgdONZd7psz=Xguatae64#aA2B~!9QRWGJQd;02oWWo zxzEEZFdn=@Fq?Asc|jI*@d{54v)s%2SkU%)QI=aJ@SvMziC;L2L;Qjl+2<*IhWZy@ zqHrn)y$62+imC3aT+i-Hfs?c9kg#e@%+v5x7ug&S;Yv*8rQG8Qu6~N!Kgr>8&Uu<^ zR&dd?Jn$J#OU&HN7x|`@+^SDJZ~${f1BqeCV2i&C_dFQ6F^Z`KB!!np4(M?ScMIAO$&WtsMFf$d6=7BbW&Gc zKQV);niF$#6Qax$bF&fjLB~o~rUa)-H)Pae8e-YmEr0Bk2fmYVuM@$!$&zFgW=eav zTE?B7p#HyR${4rZe74#Ag3jaHX2(0`*)3-E`{ou*6P%JhGKH8UkVfKu)=!h4y|jZ~ z^oti@j$rTp)#JaWNu;g+|DGlt6Vrs7+496RiT;`CRSbzY(vvd`nyt8M zCW8PT~``%@hn>@;ibo%j@Y8*U7$gIoPvpEuW* z)n61=fL`wA!%!u}=f{RVPX&N4GK{lc$5OCI6@fJ>dY*M#Rn}abZ4K&4uoT>yllY3| zd-t>?tD%p>QiiWP(r!s{;{oFzRSmvwe1o6`TCH)U#aI89&YTJ1iSw6;h6;YFc`5|P zlDHQ5Wx)_54S$H?flq~=G6o4Q3NsF~<0^L$K$J{0OlM(vxkm+eDR`1&SpyUXhzWV$6ajYnpsiLH0R0b(3rFK1cC41Dq(R`054oQfdF>j&kU#wq(yWTHG1 z78(X}Ugls-A9QG}MG1602D%QY91u4^bpYm}L0TUq296|LkEQPr1c=~P{9bEeo)&;< z(9ibkZzB-%PPg%x#NeD_)i)*-6`@KwHQ{Fbt}2`gwj@->mhYEnfy9d>hP4a+7r@0O z%uiz}CTYUn@eHR07+Htsi>j399TPtUb5!d;Yk8ejk7$1d%4Vwi4~5@Th=3>PK@jl( znsFkynNwJj9H^oKR?V2xIO^o$y#QhdI13MiyBf!*IgC1<;zZo>bcW?xcA<(#s`ZF| zI9*j%YlGkqD9V2Y8(GSFh)fs%DoL)E^v6Vh;WBHYr|k9()@-rY?{SSq4ZUqgAiWAJ zIb;YZq04Vo=7_o^LBZ8mYkifjLw_XINvom{g$El|Y?4klS!2zR64PXcDZJc751Yzm z&U5DWO(qQ^ZK$0w-4V0pH?Oe0&1wJ(YqvYVkr-|^V*vGcW*A)tz!?Us!i5rkC&#rm z@d5=4ME?Q{+`9-xCW=Ymw6`knHl@>a_@JabCMAHrH<{JN&RHF|Hw2|~6XL2RuGKY- zIH$40nj-9dyAe%gkcud+-MpTcub?eOxBxcdocFxm+f;s62hNo2_i`r~M24Zbf@j4e z2fW-j?YJxxzlJnbJqkB_dCuW32ZNP!98HkF%A zO~Mi<>IZWz?+O&0II)5yJJse?Shd(5z;!8yccD`QPK?b!PJ}8M26!J9%A(#wxP}R^ zp~G2jh0_3rDCV0`Qr}wED#4>@OK8vHttS@#!Y3e$T9_Q#;=CwF{t6K~{mTHxxR1;O&R0U}&K2`rT^os zM9X%o@;%P|+w414dUxIlyP0QBG}6N~Kh@~|re>6LuM&*pS#Ds1vG&;}bH`>=vemq})6Cf8JqCt0 z&N3*&LK{K%4TFw;RwcM(DUof3f~vqK53wa3Wxgdl)qc~!1;ghf}gzL53kO*DGjU~Z?Ere_o059 z#{4*Yht-g&+E3i!7Nd5;as7nI#2@b zLcff83x^@{xs;r#QqNF%$89nZvjOl43Pi}^BF7&WLQo| z4?5A=yojTjj*FXrHOsYbJi{az0(^W(!RQ^RYM`m#q_8RHb>=~9{goWNm{GD?W zOULe6V`r?kGw$bbH8(+s`3OcY0#_ZkbrxqKOw69vK_?MR(jLN7owh>mk_am;zJ*5x z(GqY8Mo4tj+8vkt?nX{A5stv0I4S+d`@Niz93$+zrE@MlX`rh@TV+Ym!3DvD;ETfF z=~Kkb2rd@>{K%Jy4|?c>0KGKFS{!zwlWZO^VZe6ZNy%B(-=&UZ=uYi)?tX9H2`UTR ziDmGoQff2vcBMX2{IOD>I`VMznTkGF(U*>$>+ewVA64{?igu~!Tb2Huigv4Lj|#t6 zyw?HX`9G@UpOgZm3<1k8ig8Z)RYiX&Ce6Po|ELnySxQHuBMTcD+#nq!X+Q_?`;D4t zPK7K5$tF5#u8UggI9*pAql4BuZsQL10Hvc$oz~9b>Tw6HvUSv1$0uq&L932BJYH8O zFeTMp!n{PHnRQtI@e+7`fQBhP2^x!kzv=P14DVI{E}xhj;Jr-KmU0BNZ8ZlQSy1bKqw3b_ zwWzcaGyJjgzf=rYw4G|zF7*dIh4!mq2bDgA^~`zS!LNgl)qZQeI78pp%^A{0C+Wqf z=(vw=1;+RWQ@F*{?D5JDc~jtMftBirH||%@m2C-~i!^tgN^S?x*k*NcRuv^jDR`7) z1oHYSDaA#EFv)r&zU!Cb*v>5TgmCd zSRrwu$0^_hQ}(tg+iHHqyl!T7AN$oHn}Yp)xBO7zoPyM4I#{5iwHnc`AxbYaP{v!B z@P{9%!p~LkoeHoU?sfXRu$|u39!0O_&7A)=j)bOsOJdLhj2dOnonXQBUERib*ms)q zO7JVRict1ogFa3{8XcY}0*8<;K+9!WSJ6G4=jS3Ah76E8EW)E8+Y~_v<3v&CNqB*P zDpLtm{1Tk(WX$yC+oDv1W6RADGJU2!ADenLc-b?8}kxTO#%4t_}%3=jlQW!`V9~9r3M=_0wIy`ZD#q~crFWmA!@IRSqJLkZi#O|} zVOCi+$JYed$GbFZzFpn;J_MqwjpmY^!3&GD#9ldt*0@K0VG z+Bs-^Pj)st+ZNiSRhBo{V3UnzIWwi`pohIF3-Eibo$!%?EHMWuMX-Mn7RxnFIlRCz zdE!ATsmKKk<&RQ@eeC{0w((deN(~yQ$q;*P@c28If~p>In`s3WRfsxq6Ch%(FH=L; zzKJ{Au#IJ$Q{aBt({4o{_CyO;km5INkFO|1!HG&Tb^+P&&5MDjjZ?vRv@a#4zn!(x zqN3Y`bJHF|+ahe^JPj(kb6DiMFreJTk7(ef0oMG!8cFNHcISSOa~?;RvVRp!DilhH z{L#v+Q@lwrZfQ$bTKkLbS2ea|wJq6T#;&#gnvjt9XH zfyYHXIiw3Z{tD-^aE~NoG&V57TP6*C#zfx%J+I_CZ+|0uO@>|H*81814|{I{T}8F6 zjn22=<=*ingq*he6U4H&=%6qQB=4=S}o&=>^*(uoKW^{8BI zk1e2tPC6T~!Co2#R6tNcP?WrHRY5MtbM86b`@jExLcs@z#lcI($53pq!Mg*<0`^fHt)l;G zMJp*Q><_`yl)HvEJJw)k19q4)Elrhqv?=@}XaA;&5XJeeQyCN(ZW2m%Td7O}Jz>`|#tP z1-A#gw5Eo}-CmiZHesoMtytg1@5ODaxxEfrYsuBp(H5Dxt4=>d^I6&})Udxss}xC( z$w@J3VV&p@2X4tW@esx1PBw)J2BE{3c;%E2ml$EU38z5;gik~ll@>PY&Tb?6B0)22 zuf4A9tfi}Nxi9u2s0bYl(#D`vI8Wqy+ms|;h7eu*s7IY)HSAyr2ncE8soN9eKS%sG z;uk18!f3#W63*4^x*X5uyf$2P5eEaAAVe);7a~(=2IsN2$m({BR$60r`kv!8m0YE` zNO?n4P^R2eK?_lFQOS{b1MAMw?F^wF!sl8JjK9X-pJlbsHb}dt>b9-5f0hkAd|$_} z&;it%>-60}KnHCyJ6b1j4}}zHKyWwa8kuj^-@#j^@?B#PedU?>OolU|>Sk&UiSZ3F zE+Kfg0@wl}4XC0;_kM~MHFc=J%133s!W5yt^kb~+(^R~Wyl05Eayx_{hrs2K^7b-* zp>(ejub;-^;GSvvRG0t*CWI+Lz_W9$!erF9kXEpf3i>M_i{W2XeWa7$TTF0HSAF&V zSZ9|zrTA9cUMrn1O7O?kt`L(MSB)>Qpp?U|$E;URUxhSEvg(}WOko+JJx z5+5MmRTiW!zD2x1pc5%vU>HsvF`|nlxKDiSDdB0j)5Uv0{HFws9&BZ7H5H>c_Ke7@ z40hjtz5eT~%H`fOA@XR<&meJ#|>gOa+^B!No0ntU{jenk0e z3>IpTLu^amD{Z%qJK$C{$m|;;E{=J-_?^XnRr!CF;w?@R`qAG`-6m4$WKs((z0h4m z2?$PWNl;VbU_VCGNAMm|2LsjT1l*-?wqlZE!n$0Hkae(l?}__^6Tl_-0`g#uj#gGb zIzc^P^yD=pw?Sz8;8EH(PR*%FUM&h-%zDe2oCeltNEzjpwuN{6WJ?+KTa#@<-Illw`JKq^YLliQ z-&)GJ7m-{@@$SUktfMSnY{&ZcPOiu6;WA6af8z_%}Q8t>MPB z&53V!+;1H;ofj;yP?n)yid7f50R+zkt2vXrmm%s54-1k5 zb{P^6EAW$s@H5hxa*=An1Bei~&(RX}R{;Sj1+U<3(f)-u|BY#})l0(J0KHf2&h@mV z+IkRC;wIzQU#;(@_q@2#>#LF4sQB;72caTlN)TujcpDD8*(uuMq-}L7zjBJcb`sm1 z-0e=$4kzOq2f>N#b~1K38T%aQNii7Ik52M_NB!)mUz|i0(j zt7S=gi8@qSkI*45<3!s@ys`n6G^C=s^d%-p6Zq#)Wn)UoBGr^~Gs$g687+uUqKq6$ zX-TnD$qgq?qBSL2k)KPI*rVH8(siOE6?LMbkmZX>q{2z$U3Ao!DK~7g>0eC#CDxZI zb{SRnC3QJ@mr~JHwvLAgBxN84*HPuQPGzcTxrlZYWSB zD2Dlhhk`o~j>`8AV!XrwM;&r14?FosoRnlrOQFgnQi_UBpoB|_+LS;Xn?{u#NZ};m zN8On!&!m(tREg1b8Wo*QDWLjXV5@xUT$mdZ_aeVHsRC=^p6EyFO3P}K&`dQpgkslN zDjj_1FnalBQX?oaoPt{@HkK3$tpO#X=Zi-P_DBsXj>z6vY;ULJ9~_85!Q9IoO}QBA zj2z$crM>Vyc0a2AUktG5b-cLQ>AA(WovQfCDfrsS+venKcM5hm={udga7gIg&a_=l z`u9%OJ|}OFQ@Pj4`@xy?qf@%yDgMdP2b|)co#KPe&|e%n~;fQTj=g-hxyPCATDfDrJPDD6ci;wW5Mts%S%b zZ7I1U_3S{!ov7dp(s)Llsp3pZ?m`ve0~#4F&c)%l%DsqE&ZguGDWf}OT|k!B)s2dJ zQt~A{iZ7>Tg#>H*;!COEN;~ih2GDuP3X3Q)kSYd| zzK$xeo(~~?EfwJT4yA(YDTYUU6Xo7W#Wxd=puFMKeI!-fN*TA19!(v`kc+`N){2|q;Ofwg|!0}L5xlQ-H;UR|sU?RRSuA(2X zn_xZPZ9mZmYYTBT2J=hS{`Y8r9i1)S1ClKkpKH)Qo`ZMU14jsAWPH!(;3ZDH%SHGV z>lI$XcZ|>IL$R#kzp%3HBKn=c79%Wcn4VbH@H$pD{0U_nEN)m%;c>CX_=x;<-q)_IF4YrRc`89t)8WLSwNvz)-2 zQ@PaTXQ4P~$P=3|pUQq)c6)L1O&r|D&2F*15v{%Ly_`RV190JHSada*X_+4Giwutf zeuKR=yk$Mt+Q9z19BgFsJ_|}8U-A*u!H#g38tR2w>Xn-6+!NIGD7NG)I#+oGs`x%d zK*Q&&%!LZY6!|CLQ@99ve@xy&pkv|> z0@;a+F`Ujat1mUH3(cYE{{P`uoEt1sp-PAWe3$q>>Gm56ab|Vc1~GoIX?g5__u|>@ zWgiDz2g_Eo8qfFGpX_7B=i&@g;b07*2Rx3@GS3#%(6<7lj`DMCmjt9a-XP<_cyJM+ z20j&UUao)<%Qj8uosFa;I+HDoC&I178!S{T0X}h`5OURD;qIVv8mR)@t5i;Yo4r=z zq6iOI7Gt=!LDxt*z|-)0_)Ps`%Vi>z2XTa4*pX@KVG8lrz3ighA^L-F5Fc}GjrPKm z1QW05bhD_y^ao$AmFz=<&SN)0N|5`rU|1et&==vQmXC8t<{%ZMGA>4y8;pxp3Kz~- z3%pR!twwrSHjWR|Avg{lyTgL_gK*xM19Vu!#Kf?PJ_3`XhY2cCOVn}PIsjzFl7#yS zK3WEQ@VtFjA5Gk_Bt}R*J{K$$oDx={zbOH{9^NQMOn!=9g9QPr0hmbm$IonDi7dP9 z#Zb6`mYp$Pb`|$4;+6w>`8ZC+alV2VB2Ndo9rNyXH5J#0dybKSIoQ>7z*EDxo#n*C z&ni8S;h~X&q7d?eCylHDan9~9c1uDGU!{U*$H8_J?MJUMx&^I7u>H95fmt68--Gv~ zR|PgiY*MQU1}2v7i$nlNhyrr#T=+tYjlUv&M!wvOA$w%h`5_g-VjFtLd3oBs5YVsj z&bHQJM{RziKVg5FOYRhd8bujyQS|j`h!gFx)12|MWCAh8^wU@1mKV{j3TmnHb}Ic3Z^o}U?daceR&&WdUz{5#SfB^5P%g@Ji;Wts zZrCmZv5iK$MckRcv4;o&+}+j8U`M}WJ<83a z#QboWnoEt;yKFUhYr{Xa4Mfu3|rSV8T!gRwR%RpK& zf|d=ZRkx5CLk+`JV*KrN-<{NO9GNhcScVD`CJPc?+*KqI!>Jo;HBnSw9orut*dHI& zM|U2pSrqPup=@jsDXgDZJh5_ORm5MzWiY^BqxWM9v#X}VN!$dg1!K2j%Zw7J!K`W4pM*M#D32fIu|G!_MP=_yyUX0%VlSARjRG$xW zE}YNZphn<)@aa!-5zY;XfA26e!Wo7+`&*aVUp?gPINPF7wT*Oag~Ap6=b7VdK^H;H zc`h_W=ALH^k}}xpLQL2BBohb048Jz9cg6!Y@sust2Iq$?$A{Pl)e8K~T9R2)f)Um^ zoKW~h9jV$e08Dk52GpRPfHvCE)%|J6?KCg)L`C_uAKNqvY~HYn#erH}H6f96_ywXuXAO2^BzqOCZCv7zztxOGRmAF2kmvG0?`j22KU()kq5P zDey4+Q(fRG^%RAIL9d%sUh|)VL54ePRBgtR@-M#LAn#xN^?&duP~Ct_c2)%mktc)z z5rVz;g?2G((pA>?3cGL)=oBazb`}1Qu!@eNI)+wA&J@tSz!ZgS3S$N}oT)a^^C}5C z7k(FlXhyi@B6b2k*qZ&x+!50RBxM1W2y9L1;@x@)^2Cf~0XW$7`rK1iYXSZv6}8-hIr3Qdp|0h7%qzZxk+t_q|Kc{*US_t^!= z+Y*5v`06S+OEFTIn-q;uz5|Ay9e5V~1a0h5VIXLr4Ffv^kP4VAd?-@KaHjD9kTnY7 z)Q*PHa~22-I84~+L6rT~fdxc9DkRvc>)S%~Vl>`@q8XBh(Udn18cf@7%Y82NI(XhP z@lexX)HIe7y&lRo;|w{HU&{h*lF2@xd5>L4dh@OAs=tEo0hdeUQM1#PUz z2>P$D`wOGP%M>_2gkt}fWWy?{>FDAbIwM7wpQ@8uYuy!ND-`}*u2ZklGFYSJ0*V@V zCYBt#FE;6Sq#IVnb4RD6EI0xSuA6C+Z=}0%VHyBJ>0^eWtbxE8eOLgZy=!{H+XP|Q zhvH$Ih~R7lOE`^)letlYy6-~|2o5TUkE6{LSmp%sB6KcE!s7p5x^_E>?<%%WN?ADa4=4Jcu!RQ#t+Ll1I%hsQ$bNc zfCrQc3n{>+NS=mTR>axf$@Qb45#PgkngdYyt)nPdF?4OoVyVSI#@FhezsFK)S^)x} zy~3VmC^X#{nHMiKg+R|=vb}O}L;7?9jLUF(w=OGav6`vkV4J|M`8z3%J_rf|+=>+t zC|UiT3sD$oCnK%+j-$#L_FQmIEY(C0{s9dTMG)bfr|EPnI2r>SA6p6N$M|Z%!BFL6 z%LZ2v#9e4fK*(tX+M5OkW(|PvcP-aZ0m;QV-~{l|XkgkLQHz2`EO)oX+5mLsL?{Df z=3odHvs=PGXn4TxeUnkl?Z zcbJ1v_<~zIUZb=K_jNZ}{H@{vW{$p)fBjVmuj~?>OwmkcEY}Dxi>drsa$g`T8w8=f zoq-cLW7=ZDj}qz#j(-Hiq~j2IMEDr1$071*;OERU=y$0q3^4aBK=U0?LUH&9Cl7=o z6wMaWLV)!^>bGzj!1_nkutR?b)@SvzV0}77M!@SIF+d|wJ;=d~{sVB|ReVq`;XVNXAK!9JKMq5Hk3nv{(lm@- zIp4|(^2e*h4k`WCR&p>st3p*KXh`lcS~8jwq2yO}z7+$$FkZ#NcUnc#+uA?=ZQ)95 z-x&$4_Qzhuo$(BU0knWe0TVKu%t@hGrmF!1;iv>-Czft$w9)$Crb8LA(N3<0;KV`^ z3?dm63MI;ek`AkS#J300J=~JAN>uI+D>nwK6P#)sA4J&{@PtcL;vw<=K-|SdC{bTS z8CRkjPqTzEkWryi%f}JE2fJG*z!=1g4i6FoHE66Nkjg+I!!?G%jO~Plr3qZ4`u~zg z0R{yaq<##N-IDqktAML!630)56*d z;_j22hi!c)Ca?M!J2i-fV1=C+^4L-32D_=Xl`IK3#-J^Q)TTQ@>x$S-cm&`ZL)?K~ z02>O5^LVUSx}nQ}E(z;DI8Hfc8kR(?oLGCYT4Jfh+dyvvZ>^K|z!Sq`s%IF~SrCIk z41+ubWOCya)Fk&DhAS6p>}|o40!_E8t^hN0hd%Y^SW&1?q_;M}Tt?DdQcw^V1#m5SIGNT4Dz$w9}e+dc_tDj=VP%#))@ zUkJg(p%90D>Yp-L5ElMZ5=+Eg=^Pd!kRgJ9eueRJ!sa`3=#07a>}tx0CKR}8@39A_ zD0r&iE`qX)_#D*SjF1xx3T_MKf@cmYENnEOEQ4q+p@aAJFFW)Xanlf!1xz-GVo*}s z>tv&1Jdak)1#GI^=GLVr3P*t{Kw6kUff`ScoKn2uWXmlFJ2d{jJ}n9rKyJY+(ed#* z{v~?-N>c>_%p&9CX5yIm;b-ze|K4E3X2A*Iso`@$wFR>mWwBaF*%%Ce?`!65mYZs& z1iP5`ar`HaN90Vzekhpx2Hi<`E+r5z;nJ|hNBetovS}KUz8Z8L7BM^>1QH=1@8R~L zpV-+pkhXkv&_$5nHPYZJ#G|KqiolBbDA5S_A1ot0qn_d+SG`yQm^ov1fN=ye$;gmy zgr@_}7-IYX2y-8ReMoBXFRhV3e8&R&oF^>ls5$s_H#1wl; zELoyl^b}j1M8VJ-O_tq+4HVcPrY)ku3(+{3p8y?UvjYYrZ*}~yEdM0f=D6D(Z-)~H z3td>Q%ZwTiOdrMP@@2M`am)F3~k1_co{ z=mtw^ILZzhZ3&zapCKOd85qGs^$q;qhB3hbi_!as9sbSnk2sV}oMPd40)l*kE#d_s z&BpIQbOyw3U$DJ;3!If;U2OntmYRh6)F`NV>m352-NLSs|T`- z!HHM}^$?UhkYZpZjP?sWeatmXE}SIJ=MT#x5`=aVoGac0bg!@t;415qn@PGQC290| zVgCf1`18rkS8_#v?tL}icMbQwj_VHP^6PoVwJbxp*G(MU$O~@fg(G;wNcM&^jp8@| z!e%sYxSgBb!QNPwJ2`$AH*25>@qay2I+8IC133G^aS@z{{#0~3^-BkSWW6%%e2*3Z zO#klU9;@dBSPHg77capShiBM!0P=|AzwX4BfE8eo>v(SxxEi94F@(HXy{5mX+Z8Km03kK=E$ ztm61O4&Gwfz>=ndR0RZ+8Yo6i*Vs-mAl`C6_^8{ zi;KTsyhDN(!)~gU+S-L$ww~rX+Ha;QTL(>b0Mc(KO&v9;w%lFIIoguIi#2SZ_-^f$ z>0q*U%Qer^!Gk(@NYiWDTV&f1`>)$xB*AhWyrtcDwB1Co(Y$Z{ZFrM*x9Z>vEic6+ z%}8zIMwS9C4Orza0K2}%D>JtL&LR^mGrZKqw?H>!$6?&%poqO|*~elVRY7+_)O&K zU&a1lrePc($8aR`heFK4JvZ_t^^}j{`h||y2cWF{U8n&fQG#KeK|L^kI=M4RW?T3# zwv2cmxRLBeZ1Z-^?QP2m9&Qc0GN!WsS4;UwTgU!-+j}BNQyN2g(gp z`~l@oS83?c^Q>~8SKlpHE@sCr<$kLI+@B_}_mTJz(IdpeodNDVM+kFaiS+!~ipx-H zu(W?D5zw1J>v&9~p?2J8zqaOP`rK@NUQ>MoM)({puh~(W3j>W!woLbQhKZkOigN&c z8ih6la8bC@1SlC{a85FDbf{ToKr6-O?r(Lx;}NFzAREL^8 zc)TD%0oDPU12!-H6DlvbiynBqAoLzX>%d*KY~cpBSuotIJ_)z@qkvtw#aqsB$XXOE ztvM7iek0sVd(k>g76}LNv8Y6r~yoyLQMjpb~ zC~!SWeipt(d2 zXwHBO(d5;%iDz*wil1O@#Ne4Jb%<+2Cu<4MT%TZ%%ngYe*xFs^a7=Pz^0LS}0yU+e z8TsLu^qW&0$x%yd@({7mr8P+yd2$$eN=JAgP#h$*GvE$Hd?tBah{GqI8HS^XMdSI$ zan#QSk>19oKDPcaG==jUT}&SM>S62$!mWE5abGmZrk;f){V0BgW!~Co@T!oB4IMpV z!hv=TcdsM9ngr@#44Z4o1IHEPIpjdPHxk{9z9C`k7Y^_EEp~(#jUgX{e5{SE;&+mN z7x6gj+=u{D61W8M0{~|Vqaq8XFr*}i))18eq(eH1&VXpgh6g?VSbswpiFCHcbQmW+ z0YM^$smWeVThDwSKLFrsZZ|9deBKm;3_@C(J6oF1Hpb{QlRC%5Kd?sG{H!4Z8#ikz z-m^J*7n|fAOusX?wYy14ees%#EEmvz&=v<62VQShU)-jsUW$PI@{oou@|W7?qE^Ux10RvgYF@J7iIrI@*_Qp-rxJFY9BR?I)ML9CGV>R$NGTp zMIZ2stO;9<8#N<)X$mr=4!}D?<)@XUxCnmunlIhK8Q2!M}37duqj zbi+k0WG}j|lZDV39JdZ)*yybG#p1QCdm$Vx;8_Hq5S1UiKOUZ5GENVw(&{rTR5@Sh z2kV;Ohln4ZVT;;^afV%Oi}M6lVBCDjhVY5e9Ybja?+ja?XCVc<*rei5XmmaVQX1Pr zJ*7F+7N!C(;#uRi;Olae+}t+N#sfur^m5Fg>d}IuJ?r3TwoiI_tNh?{3AY`yCMRb9< zVz4ZDlHrix-2=Dh5HY+@dmlresJwg~>{szuCH)l{zevzmG5&^>ER_+JQnFHFpG(OP zTy(xVG+o8fbZ;&Mr+VjG`jpQ#+Qj#qY;xl~y*7XJAYwLE+Eitqq#nVwJcb%O6V4EG zbC;7_gDQJczapwTjFN7ldq=@HhFhM;RsHxboIE_DpMXlpHVTYC#rzCcKFzd{`C0aH z&d)>Z!9H-hFsLYAsIGoqWww&a9x`aK6y0n?h_u%v;jjVc6Qk*}m$r-h|DizHr`9J}0 zM^mAf)GF2(sDQlV%{4_&d8raS>wJwG4ooeu0abyCgsN07H-Pg@S3Y~X@@4@c(WEUm zEa;;%(ZznI8qq|uw(EkwazzWRzLh$=H{;<~ZX73Zri6@TBtAhP$rnROX^^PLYn zsT06h>!{^Xn>bXJnG~?Fu(;vGKrqYKJe+c#KuN^*wDSA#Yx5QQaHTa7Y9z@Qh#n<_ zMoQ5biOrLHD!*@Ne-({n#eG_X~Z0rg_2&giX>5 zYSc?=<;&{Y=av3WM(lA;uR*hiQtpY|voGJ>k9V!(wyhMdBJEk#ak%eH6?5KeW(!8nGP8P(IdPs-XTIwDAL{*=Rh{S6tXI?-U+9ff zh#nxQJA)@E{-|wBI=r6BdRbkv6q;zE@iH&2Yk`jVxlZ{)*IZ^Y);b^GLZws5pGFvd z71JqW2JuXa&7n)?k$T9cFc(!&=^I37H+Z0ir5xTOJ9kRM-E#jP`BZ6`?PRh(Kd!MRKc20tvUEywozzsXZ=pN3)qm-r zvvc*zPP$b`eYmq#ux>j`w@m1Q3HqGZbpBd>$|n6WZqZgfrlP6I zxWrVJnO>98d)E*i$|B<~He1)2dEq_uo*=mL0$ZU^&KT$~^sWxBgicj@5U+B$c=G|!a&9-gIFTtdkV%hr`5*f=VZ6#&K zIqL+-^LaEZK|AyLr}MnC`1dop@c>qs?`4*pj}k7N@lLC!nl)9q&DG&fD!rpx8m-v# z)xu|0&*xR%Ybp)n9D;^9qOk66oMo4Uw}-hpkC4dC{Ju8>RH6m4(!x zKg}9U>DLn$xVum1j5GMN0zRh~ces?_cBNZ=sRDbXu}t@5RU>&fQ+^sE?>{2#=gYFV zb_=z^qxnp4*{ZvIrLX*2|1IkC`>>h(s!@wg;!Sh?I`bn&`ySPErzG#NP!4=`R*mFY z!+G!>JnRB>?k;u3dVL*IZ~?Bz0BT|EfIpnQKF-2 zRiLu&f=P(F`Zbl=M$Wv_wqvuBRi%9_M@D$bFssN=k*8dN&n8W>bqR+i=P--UevzQRbC=4>%qv$~{kI z4^dn0uq;`c9dm1$Ehm`S7nr<@OtS#ec*8H7-(EA9v{dc`6q`YhKFSrTDs75NOjkLx zRL%z~{;@*NzUo#^`U|H9DmejdpekLeazB;@53&cOY!CbsbY)*%P^jBprKbeCD4`4Q z)}2drP^J&xr;{e@QzqzhF|nuUT2pn(4Bcp+F0Iga%-8&=?mUHp2gpZ%kTpcGl<&au zDEl9%lq!{mr9k8kmeQCsd_%Ia0)%sa>Blnt2dRBPihq)+`=w1x7j@JtztE$0=!OTh zU(*D+R#+WhY3{JKZZxMpE^ykYmVxTV185eqa4fp)L<}8Wxih zUF&Xr)4e*gR4*>miTiZ%M4dB1=S|jMPSUzu=T6aysrv4jI(@osGDCNorK@IZen?l% z)A8`OBx9$$!VGI8J8zfG;VxPEn%3C+W;tc$M6)RdY7>IJ_f+a$RfL|xOQad@%y;r! zN1cpN{1>Wmh>rB)K225nc$KnHHTXas{!s1Rq?&!KF8@TGyVz7dr!e-)V|rIy|D~he zRof)y+7!d)9oX(cX21wXaJ84;{DD(WR27ZY<5?;xTa}%n@=mrkr+FRJ;~mvS-&mY9 z_Z?lFX5gc;wV^4_H1O2DC)*@7H7#12f@bEP9Mht;+1Jb5H=a_%)e?)+z%|tKJ?e$c z1v?8i`g=Kb9VcC{4h~mIBh=|PNb=26G)my!@bukMwM0tx%O$n-Bd8pfn6?v59i6PTr`B7n!~rcuEUh3}2dbp4WsYBW%WnWNJ`kp~XW!nADq+E~Dv%)a@$zbpU1d zr=)ABWC$e7 zUt%^f zjrx2fD&lqEsxx?80mIp2;qYVCyhk}V48n`nFo!ig?=8OPOD<1S1t3f|RZCl{^y;!+ zLM^SX>^-gSc~;epihCH+AF5MP2FEDm8!Ph?qEY>uEX61QR!Glzl89=6pUdWBWx(!xq-wvs8&(1{!b;$PW0k;owzgg| zopk$-dT$R+7ieJdRd?(2ChIq6=)7q<2^GSZbj54hph)<>-uI!tc$2O|weU0j;-`A_ z7kVUirG2p~z|$G#JX8+rnsgKoo140=OnO%{FsveaQ5ErWbJMXx;*C)u@mrnRE*38{ z`6wDU;is_w9+2GL`V1_mrTRWBn^&6b7ftFSlexs?EjI0!nZZj<0t8C>~G6lc@Y5QdoN* zQ5U?X+AUXatx|*DR9CE473N^a7rCM*nn3wwhid-Z^G|;+!BTBetgQCJa`qKx|-c}+~_Ut^EThHkuTlE zE&8b6uTbwUR7ajxonKNdo>wVIb8=-u8#EA?LH#7>8mYWmHV%}WYsJ4&mJE?W!{qu= zk{BtuV`SZEx$JhS8Y|{*sR)Bo-YGe?^|rdYX@)LoptCyZL`R+fj&A*_MolBB%w#Px zD^{2XmYSrMW+4=I!{{)WV6$myoF}L8hqbwFU4Fa{U*3?9bmrvAd?-~7cv^kAT%oSQ z`z;zcyN%2pCs>}PrIkW|F=o2j}eO}|t}kE*8|WrG-? z4Nasd}sV}+QEX}m5( z3}G{6fx?FDH{lV$bP%Ng)crn6{u2;VUWCV%?oDo1$2sPFQob(5@ z5$F=aHeimxn2v`X|E2~2a)JRPz{d!9`U3dT-53IBsdqdgdA`I@ zCIT)AxauZJ1!6Tq76G&xEvd)jR#-`ZS^~YABemvAafQ_QudvGx#f{)g;9P$m!2}`} zftZc;JICXgq30@sJqu+5FYA5`%`DU{j|Vg(91XB$1f>Do1e#WjZ=(G5Cn3(y^_DMm z34l(ZoQGnu22K40i2sq?vB2ILOar`eSF zkSey=R3)u8|2&C%Oyv8K?p?3wLlsAOjM(^Fsn~6IOfdR>Kvks7(!GY&GXZLz%}vL? zH0flOzg!*MuIJw8JUY+06j|ph`Z46ui?x1Tr!Lj0vs4TbIA-738U$mQh{h4IApD-I zJ#y~+x0Cw#8I9=-yfwo2|HX_RPl-vSt0(n*yG&(=^Lo?q^ZE~y8Z-L%>3sZLzL&Ei z8o*TE_lN2HPssq)^Y;&v_jqE!v6*Y>0e?SpVLb6qX6`>u+hcR~p?^JRqX~=Idi+#v zBZ=y%8qQP3JUxDr9-E>6idyig)c#EF0K1@idTtSYJjdWi8GJwvRnrW9m1#%B*V;dx zZ%{p3|IAeV-!V@kD#8w(Tg^tOo}|ZSC~y|bO!)84(3MnzT69>24uCkok@!1V{I&kJ zT@2U4$Od`Tt3C+L2N)myfXl{u_UOn-+wu7{4#*G<>iqEpI5L*>SuY}{#B zC>%B4Nka*GtIO13A>S5DL5ai`Nzp4}-mqoKMkw8*<`zEd z_$P9~M{?K4lD6_0OI3ywmiCF1n(--g&NmvbUboM_2XLRbeTh&Tabjgx+4P zs{&nBqD`5ecE7%Sf_`I?ZcwgInWEcI)zfEcGff|vp#!AAbM!CsG*+9n6$HFL_&a(ieKjHr;K9?v-JB zo@nlGY&(ADcBe{sOE=+53s|k?;cK{ZJ*RBoOsv(>fcZ|UFizI%idxJaRmu!X*)L@{ z!+o*W_KU1_;!!S~s#?@lsr6MJEX`Z18ycA<*=9jg)2oGvrK)aqRY`r-BUdF_E0mr0 zXPf()nh)@&xf<2H4|>rW#Nk8ey)aBVcNx96oU&I^)hg0!DRVs~t)`?kQgZbVp26?#NGqy2D?KRwfIqzA| zXTQTWKj6>6Vg8w)1yqNEWD})3st2xDs#L|wRPMbh^FG*)tDH${%|zP^BR*Mq<;tI` zvL8_XH091vmD82`kn(0K??L6xQkk>WV{?=@PX%*T!NV$}LRIWgMQC@EE92Wp)6=DL zpk!Yw1w*9yFnQo+sT?WEqvW;`^82mQ@^<-XtZi$UbeF6iC;I|PB;@*H=>s0lK3RbM z@sRxX8%R1joAud7-xJsQ8M=P1zVIyF7FD1!O%ruFDnB!{gry!qspoCI{UiM=N;>;u zc{NQ^nyC>g-IgHgj?$vmW@fHQYGPE0Nq^C%47|i3LTNoGxnKN`Y>dzHAcfR%k<08&S5eDhrGwS4J=Fmyzk2NwW$aY(q$>o$hi?+p*O0y1DcuGxub31SOg)%*ZQEQjz&_dq|yyeSK4cFxfrBvO0YfV`p>8n_Tl9F2%`T zr?PKQhli?0*Q*-CRO(Ht>y2vMa8+`%8aF~+GD@8}Qt3(+tW>mIl>@{H^WXSdRe}_F zo}?|Yj;3q+=#0KPxlj)YbW%e1xm!0a(+{GQbDu7qs8c5E8WVKGNjkk;XHL=ask-|# z9h+$}oi)>S)9~p7WJjSdKP>d=N40{I>uud{y-oq{@Tp#pApyv&mq|t;9qV2>>7}5y zGOc9yZGHta0%iG*>eV3%-s9Z@OX2?TGwr=<&0tHq>*6r+w?fW1_d!+d0hKdd-8oYw zW~-dr#4?FErT~8#p;Y5mp}Jm7NBdG$4Rz zFp2|$suvap-6tre0cWA9*-({!gG##57PR|!mTv|~;x;L`LsUYRo}xSV&=u>gfZ~Kt z^;%rig|CR(Th%e@14fpqwGD&Nh>-278f*CZX1Zn(B(WUq4!cDr#r#b;6-yJ$u(^BH$?TqfX-}N>us!noTHR}dZn;rk0-&U}0U@xksp$&KZgi4;TlZ;YhK4wlMNy~gJ2vT_JGg2u zSN*_1>#DNUxTdP=B$bOwFYae2^~MhQc#r%VRtb(SRvD&imRVBQ>^)W}0QRx)0XhL# zHdsq>J{UPOH{mCdr(DV#@t9U~#asM%xXEtW$d6A|SqtrqD_y0E-c%jdsQxJTp`bll zT8)vSvGU&IGH;1Y17WYD-u{KYGsApykqIs_n_-~Z*FeIFp1-+eX76N^Kg;C5Y}{83 z44LasJpRaNM0wjGqe3?1JtI5QZn#&)XiKjxQM+%uDpd~ zD>-)^zp{xN_ELBBQ+)$fGG0~Ptv0_RH8Eh`*D2vWjQ_LMKK`=FdexLIHU-Pfzzg)C z-a3}hCD9rlE#P5xV;i$RKq++{uH*15CnXF8=VUnUI%nD*hi{=ANZ6sRg$Uzh^*|SMir>?@#=-eDr1F8eN#R6kxHOEb)v)o_j|GmYXTO8 zaq?lYRLqvj@1&Q~UR*aZ+HI!uvUShK`qEQ$mtNL;9}&wlKk9-5y5eV@ml<>0#eBG3 z?TbCu#%Mh2mrU@gZIk-lV$&Pobxj_KI{yj|;MrSG6}3cJ32h%25J+RFWPSnJ+IkCJ573!)H4OdNg^rovy@&`;tEUWo?iG zFVY%W@Dg3JLdTZtjBUE-cTQOky68fhb{;*`lg{o(bqi@@5uJy~>N--_&~HQO>YHfx z&2-_d^dw|@>D;>?fBFRbPl4^v^d{fCiceb0F-)R$-0eNCK$ijNzv`=^=BhGBrF2vs zN>y^1D!5nWg)3gcL?x3{@f0-hQbpyKd|vQ?3c?ky0!Z;gmW7V!$e*SB*{bIpSlfYi zs45;-xfQDNX?4l7>c9(@By;mCYGV^=-b{X&BMawB=HoJMo~YeY`Ge$y8_K57b?%q? z;HUa`tn;W;FEYE9nB2wY;7ZeCjafP0`QQK*{6s}SrT|MJ&o=yBs>=S%x21NvObf$wDNA6w{ySc*I94S3L-^i}&}V^pyB9(Q%YIU)?pg>h2v*@M97phbH zsTB*=;ZGEOth|quhfMroNkbUcLqCHU414+odRbF7Zm607G3pUsj6HX#`sgO5vGXEy z8KoMHRI@f&!bvPlI$H0JJ=4JK$uh4rGoxFZpL@~x{?R3eW!uHJ4a-F=!z@k*a8@wsQk0yhWQY=s6KszC zMIiQ%F!vB^mf10x8IxKDO*GI1O2!!pj1(Jr*~lwKUNce%Vnzt2x8W0CHa)O(FE+8K zZP&0&Bv83>Kg=F6NpBGMMtN(9+%QbyVKEtwZRqCK<5r<@61z*{flNx+6{i1qfqK1i zf~`ozzm(K1;-6x>(mZz$sVP+Q08zP>grv@((uXO14yDecZ|2fK0O-qT8*-U7l!`1y z@qft;05JgcfPcXaNN_pexrsb&5}y}=bPsaXlUzHThFQbuf(G1Z5*JP6N^FHdW+$qY zNvhjy<)a{j1TY*;k6n!j1H%sU5 zBuDfeS~rcOXNMkCs4v=}%fHaS?~4KIsz4iv60;K+$1;Ov)+q=Erc>!m%KSjD+@yaw zMj2K6DC-zaH1#9ZB~K?^s0$u8wVyE4UNv>zH1pS)$GXEq)nr7FG}3C+JdwF?A&HXr znugH-7hw!GHTc+rYk~0iOMa@Zy2MkR&r(^aJr>KfowD?M$&Twm9rb_o&`*A4Vf5@B zX!H;p_iLA-YHLY>X-e$;R^C44<0rWClOf-+J!P%)?RhLhz z$9qrYTO07fI{at`|JIm)YRH?L@J`ea7Fe=k?kcWW%>&kP)mwbW+x+`Ge9uNc{e8YO zEF;wZi)3M8*)OSpj2r0mZ*^A3SaPMQT5hUVn!U&+4``dP@0L_NyALcIMBdlICS3!q zS3j@-eSEj%M}Mk*{Vm&=6`D}oqVx|{vriP1oAIbP@J*~J{4WayUZ_%$OM+$`It9s9 z+@Oe)2XZCY>~Nw3=@e=j$ZDEc269e23!wWj8Ui;SG|_+5TR|Z9-;rGXCx8Me8E_MT zCjFU<*t?qf8kXyrhq4Pb+4ZpBVGadl-pw2v!R|=T4h3Zb!RalW6SD5T<1}Tcf&WRN zmIA6$4W=AlkG)>~|3a;QFVuo+@84>*{>M_Or~(f(Z2;t5R<7kjd33{3#g=y)`%oeM zNeR^o#VC)5W!3*fDk=~vj!`LM|CQ(o7<4sL0x|aSx+jRLLg~|}KPP=UN{5Ju5E1|3 zIO)?-+QTuR=&z2YyvSL89gxKvrSuxd=m{9Dt?U>l@-#+p9pAfqprMQ4k z0xCDk*PB|)bL#i7||8A5yATa#zfbFUQJ7lc?h{FGQwC)&G_ebP? z9nbnl-R}QcsP5mu>;Dw0`(MZD{#P*c|7TIT;~_bK&edwxIpzk29~ zTp+MP{wFB&|2IbO|1Cooa3OF#AcJ%1T!1NnGiIxb=T-6&@qxUQ8I6@Qs<{4(Iv$F6 z>$o}UcqrnbZiWIcN@pmR!Yv1dR@Bg$VpS26^!BqgmhZX9)t`ggBO@T@;Gl!t1#dZ%0AAT6jNq_L8xIobFgSI%{ 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

3MBRy28#xn(;cLlc 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

rmCX(m3irTUYUCL}Nq+4?n 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�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�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 b&b;lu!_NQ2+Y)ucV3H5vvhPj7{1Sk{uMjvylJO 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 XXjb1NMj2Q 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 X3I?DC&-VaN?g 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∋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%0D7Nx|N(4?QmxC0enImgMWgN=cFbcg~ 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

Xn%!mhM)M4B-;tN5c)0Ag7;cV=QTJeO|d?J%C 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

W5_Jrzzl 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≫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%0AWo}}|6ohKmlZ|zZz%K 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�pOj4H~{tD^k&v7*e3D$2aB|4?RL6=mjCQD$D% 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 literal 0 HcmV?d00001 diff --git a/.vs/retos-programacion-2023/FileContentIndex/53e43a39-dd9f-46ff-bb78-c7791f6103f8.vsidx b/.vs/retos-programacion-2023/FileContentIndex/53e43a39-dd9f-46ff-bb78-c7791f6103f8.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..51c7a040cb432344d09fd12e96e84dbbd9298ca1 GIT binary patch literal 1202450 zcmd3v34Bvk_V~}e_koX11A;7r`dW%Row9?@jIT?8vX-_WYEfR3*EW!)CTW4r&oQ9R zR2^qPTmcmk_k9-~u!18hxI5|yF1X-`8w!q!j{TqalC-aFlJ~+txlccQ(j=|zH|Lyt z?z!ildv0;bZ)oyO-n`qfZ4pm?j5pxTrYjWbv%tX3=jS|u1rNyT4cp)gvoJK$Cu z&A{Fq!Bdqr3qy+ERi`%j%(#Fj*vThXxs_l;wMX%zChO}{**=6Gp3Tkp5v)X68VvZW z)u6Aztu{?gfj7T~E127()&_jOQR7n}MFq)OVx9d(a(!|JtMvpLmFhsSHc)F~XBY0| zr^>3%@=9g>uiQ}1&G@To(7?3GHs6&BDf+#S{>cptT}9a7FSM5__)71u;3Y8~Ol?%_ zm*$&5X}r9_YJ!UYyatcUl#L^px=;rNK7MZu}2ViPfq>TvjboEC`JwSY6oX9pMUvMl1|f z)q0v#ui_5nYj3tm$@t{^i{|ih7Ymg}C4|nRK3wGrE47Li_%BT8Dm1_e&GYR5TZ%!f z;;*YsPG%37TS2#h{}qf$N@f?B7Zo`&ITpaQ`|MC9`dL>X7))hlwt?XUP~!@!NmXed zm=BXm{!vM_X%|>!LLO~c{$-jSeym1ytHFS4(b5E>(w&8EV4ms*zh_BuEZe}mfuQPld6W?@ z#ixc60bUcdMU|MiSmaCUTs3Xl16Hfzc9L3FSCU9pQ6sYpEU0bu;&xY3vYW57LzVg_ zoPTK`6u=UX#BBC}d1`{5aFbUJCWg|KIehR_bZ#z}f)GPSF&J>N!2a*}8ox7$C5nDjrnbYCR9tBM<8$V6_599I zy~iJzu3|DV7{I_HDI0IF8muL#SN$GWDk#le@K)s{460p=+<|ZkVQF04RavWevDVJS zzBDl2605CNFu9KbbyBbK%FspJZ7jG5Yjj7AEWk-KxihmxVzES23M>Hr64Me>e07DarUt%&>e*MP>t7&{Kn}5iLQM3T)p(-lNj3pMprmqz_E~ zU{1FiYtv2r1%Kn$k7xMQg&rlPF71$*#~TXx$Bj;DVm7!7wbq3p*`m}~05(X>Tck9E zJ!W7-rt@~Ns?VqR8&q$h*QErNreuJ>tmN%3oc>xZw$RS82Yus{ae)mI3wm6O>aY$r zDU8+ngPt*8yp{@}QD zr?P)Lz}mLC5-U+3l(tCB8xAa)mon93iz+9fzrfu}ck1*Qj0o|bk`S!S<4SE{C^7zE zH4AI8mS4d#2dx!N(xvz@A8;R)xRt8Z)SLMW8^9X;ZY-jyHX-8=R*OeP@JPL?)`r5t zq?!a9!0?c4IH=+dNnqs2u}S4-0~n_H!-}^tFa{6GCU>zrhj=-s2yje>0zOQqr=UW2 z!5>UJ@EK^tQ{o}*NM6z<9LM5GtN~owx!+5$Iyy6UeLQB`dAw8^YzX1eb$yFBnDpFw z8{yfX@&$9N9$x@Y$$Gu{sp)uv>6Mdu!n(XoFiD^E$>S!mkP97tRf*3RsL$7*Cxz0! zvHHRwFB=P;=QXtL!B;84ZoQKq*ka7sb?NmI(%wyg`1}u?!Q38i01sm%<7q?W4py_U z5lgka+Dben97nM5(t0)4hy(Lbv5l^9GLKd?GR({P4PaWjvk23jNwEM9yDDS@SWQrM zy92XAixn>}E)(L-oo9!{YPDnHm?o>o6_ZCvNM;Y%WDFKDKUR*1GeQZm>{4Z|#~WWN zCEgNpFH!D;0Uftqp$dK`yfnnEG+@_hV zEHUkdsXN(MS8xN}`v9b^eF zi6K}p}9SE?-~|m=}*{ z1X6W_1(+1D!NzLLn`zkuX5LK89&>*_&C37dxEQhCOp801)ecPX;UBq5 z%yQcv-e8?7z>{~!fiHtiJZ;Q!6B;a4;RQe2npNK4gqoE>b5wU#P2*qCv5H${X|(f#jyJ-@}yC13+s!0!&!s>y6i5619; zKbW-!A^gGg%cW+N7fdh_8TV1?EG(IA!lY}HJD9~j9I#*n=TYgj)`tUbY~k!+E%xEC zL1NbWaM&O*YkfH2{7TL?)@j>0>7>LRtWy>?DHwO-x7h9imj98nDlN9Vumj9ey9-;u zthBp;73(>xGIngltlb6N`zdG7k6>2XUGN91!JSI)(ol+?lhII-yDBaA;jqERv?~n) z#Y!-UtvXZmBj9dh*wfv=L}?sv(%F~4#A>WH2!VCab9NUN8-&;ZR*l_OllMc5uik6` zv(|?L?%&5*l@|MOz`{p(Z9t^ghXZ~)>S|88i}d<%z@nG9f?4jv!4oX4J{&OQ$NXF}+YKEGw1Ho}s!u z%KR$q*x*)`a2;MkS37RvIBR_yqSn7hUXv*sO8}PUq4l;X5uc2HH=AI1Hr%CM8eWID zhimOOyq^5pfbq{Ke_nj@+AK;e&C~Qo%t9f{VCkHuH-atQmQ66jNoS{pvq(lTfE%)? zN+Vd4T7gYXlb=}cNQJLBfmu0@VPrd{ffJa83$cw{zzqzSZH<0B?iomU5qt+G{Y3_s zZwVZ%W@A-p)V><{ZWwTV7L7kv%vOSJ?=4*TW55DhdOR&oYwuL$?*tx_Gt!+5m;pW0N5kv^sx+k(}EPx`#hMV0C2JKvd~bujJZI(AU0@r3b~ z+kAYLP(q#G9JcYHY^yRBkGZYgzZ(bKbowKlz|ss9Yv(-72~1rY4pgV8mW+!k_LZN+ z(u^*)*JNFlhZbFQYke$JsvM2cMPW(l+|rqa+TM6s;q=0y^1?&iAHShxBPXylgN&yR ze}WTOnnA`(V>yDQ6J+eE;suswkTKc+BqvoGz^nuri$CH87EfVVJj46tZ#Hp~Sehw} z)*{YeHJ<7QzsKzAR)A^UH}jR4)tM=SU}Mnp&nm7goGzUyO>xdEEO8c>&cIh^PuhBu z%i~S6Hfq~_PiIPEreJCL{!jnM4-9?3br(y9Z{a2}gD1nzDq*!a5DX_Rsabi~Ry)AV zcOuR?!WJ-d-+#|*e8IF%inzXX2OB4(UR)ltnxBouTBErGxQq+v{h<~my6!L<^mn`Z z8E!VFFE9;OpK^&=JnEnPz@puutSvAr`%cOteDb1bEh>y8dl@CG`^5su(T#f16a%TSq3vqkmmD{0qmIrFK1U`X@>f3 zXg`wIxq!Jn)|$_>f!);n1{W}^y%E~LdYs5dVptK?;BD|#dn|8qWlmz_&|P4b$5~Na zINf>ZX`YzO>VNZ5rc{{>?9e>fU!VUt+hB+0$!^$}b+AM8WW9dBC)*M;fSE_sZKLuE z)mwQv$!hdayndA22XXukjTF?%_ISqog-RLM_b)&kcy zun*4WB{6G(Ya19piPhr8>y2vD#8K8JrRpnr8Go(6VF}(WYYhv416Z0TK4Z$fZ^1X2 z8kOU55}#aJiD^50oHD0KI=jSEv-O_zb9Oq~O=I`-084)&m;48KfTcf?pLi7)FvEPQ zy4|D3o7cf!)$~0NiKUt3M=QHy;z5pJlN7JVV_Kf58-E7DCg7+%!&xL%6qn-xR2oVv z=XdJoQ7cPJW<{r@nK(BYJJM*GD6O}O4?6<}Q}?8K^mj*RNMcsN(rA^#5$xoXtD;x0 z`*4-ysy8VhK5oXbyd;Jbcx^z-NanlRyjAiiSKKCX0!woeKRZ8{6Bth7*!RK}&<@CI za&x2kr|2%^pTiN%dSws5%Rlo1Gej3f<(@_*R2jgI4oN$#@bhB^Ft_5x0{@X?Qe`kM zbQN&2F(a7j!EQ8liWftSB&V^#Ca}gD+$9XV0&X=Knmu3`k>OGHpxT5^Es4xFJYa(= zo$kp2e^XO3Cf(~Ew{!%58&lm4qehMzl@e@D!$|&MR_Yw=k(fW=sv9#lrMs|2Vrr9$ zw_~U7MfUR=8&o+-smAUS#adfFOtRD^yzG4ZIvb4NN|Q8OBxdDmcv~c9WhE|d=9mG1(k>)IX6gSc%2kvH$Yp1WsUD3Aiid8ja-* zR?ZiPicjMRhHE3Mmrw^6@&rrc5^9cMu}i2IdIKJRO(5t~!X8)h!^XGI=9RdMCx?}?H*q4U{+hOjv4fO-l}Z$RAV=$ z)D{N7Ut$(dr1F=TM{QEPO1)Xp^<5#(#&7jvP3~Y;Ybd#^(&}xDPp#&xN~gjFOMkX6!xTfz1ljDlNVTemxWzk#0xCV%fdc6WfCWeMGwk$zClKRH_^^` z-}QXKEZ@n+56p1hz{=HE!M{$l7!PMYH^KkJaYLPZt(&VtF2`$$_ZE z?!0a)FR=7Z<^51KjTe~J6=hUn_q1@6nAPe;?qF8eM^Uiu7iCP9TJQ9kTUXC;md~n? z%F0V;;FrnH8P4hW)mW%#tsd~J7iVP3#w>wZo&3WbyEofl)@PwOlm2zfp2{rSnDtqx1K1tcassp9>^p$H+h`aNUM+-o9{|aVCnk*%bw%|mbU-D{zE=s zY5V_23(nwTV`;nD?{;tmv$P6{8UMfj#0M;GH+yx{nOsyE2kTgFnxasPGnn;M)V()x zm6-L3>E*Bag2nqvjF>PXRm6{n@-hdewJ0wxom5_kCwPmuUQ$t5-rjsQ{hMWP{`~Ar z8GlN!bY~>EyI&O#u(W3+*fx<1SlTlZytIG|So$lH(%^g^sx*M9OFW9J&UBT;AIwS@ z4xBFs|BtsSt(^TquzA;UQ>C>OXDqmY*Z;yrV(Bj~NBnpW595yq7yjDmCMnLi#E!g+ zE0{6rNj+Ec1+yMp0AE#Vx7X`Ut4xCna7yR$u(9-)&+dTFzDc-uOq;&Eu zY1*urg)>UqGoHin9zP{qx7cH;nHGFISK$MeZhUdnEu6s8jW34n-~^_xc+*%|p1PkC zSoAKBfNuhxVzF|P>%Nm+d~7V{`&DqP|t4)(ldoXbUI~0Xp_7n$+8P-U(il=Fj;%@ZTo2--e zzfzZdRi^9pHA}m*4==Duc&rk8&ZKMw*lznA!6qXYmNU%tc)eZ=fRBygAhFnVRH8Oc z!@7og?PBGn2H_-ps(k3lzKz8fZ|%2)nS-r5VSEizBxA?1wZ7KQd1d9!iqfsCW=b;(E1fg8E~_jpKBPMJOP}**%El~!r7<_%ew2?R zSQ>Lv;Vi#BV3QTEiq+trWK-q|gg2PQG}%{f-m0v!HaE3i#uF?)1z7O3|JV}XXk#%j zE1vd_i8g@M`qWUp5>islj?_7vhmq`1;qE|t!lR64y<-}FlVlHk?7gPBsL zHL!#o)Lqry_USwN?8(u5!7Tg!XV2mbX4&`8ej>zGm6q2fKfcUYVwOEw-@i9-l~~-9 znHF1b+8(wA%(xSguy)ucu$qOn*hUlsjHYTOs3!8XHmTBlC*tTwZLu-)@IP}gzg7u| zGty+|OuW3ZWLCLW4p=;ECQeBe&aEp8)6JIkIetlojNdw#r5X%>-=)04tj$XAsK zv$jX_OFefm!*rRV^Y)G#GqvEgY-0v6EK^U`NBWK-f8wo516YZ6q_<*9MS?Zl*dFKG z2!68lJ3B%WY*Dy{YSz4)``c7U0;(zOFD+8DODp<3}z zOPW;tG3O%g5{rVB6izFcl9UVV19PYD@q6}$zt|)(1oNogq&;rS-C2%Qv{MK)`%f?Dl_xQC@VyQQj?30)~6bvj3j2t<3Y(g8e56qSyJq_&X40WSUQKoz@7!lsWnW?jFw3WGxPh7Pg>+P9FUCn?Rg>!)l%;;f7x0I*Tg1&y z+i(HX4}Ds{Bu^LJ&R?#~zKvO~|1)Uw!BN$JKnb-dr*!E;D=GQub<0QUySy5r}tpA_xOFG`sqp!`> zs7wNOC^I;s{r0SEgBd1D%QHBF-F3xvS(caqtj3GGA%RAZg?>VO!7PUs+$5H6Xn|n! zU*=(BRc$5A7$f>TLG$1O)cI3x8CZJp z&sRTi12cpfZpDY`M4#%$_C46m!B8`)k4Wv|#i9+oBxVHD%H>n1Rz6>02bgvv-BL{Q ztHHpiQ3;CqQDXFQu3*;VA7$jtyi}Q9m{I!0ZJfa@-WkRp%;Idm<*&DLmYBsUfTQO( zq|sHcXX#QUKOAavTV0;q``VqEl9+ZdsnUtJMB@3o5>L(6dt4sx{3^v?+u&7#Rmc)j z10!NDQ!?q0xxMbrE?9aKQM=$~o|$E^c*yT@D=zJR5o=2kfd8$$FS`$a=U_>7mtYRCB9W4tw%H3^Q58B?X!30&LcnpfEt8&)f!x++7) zB2;G-O3LR0W1KK~IRD*` zWM7pQW5c+x^sh@^=Kz+r+efqvs#5FHtlilfy}Y%sLc1+#($<^wsLX}kIt{_TtG>R2 zcoMw0^TK~*N|mX=()YCg+PRqrm|+#Jx*N1ck9FumytRRm1&P6AvQjKVyK*$pgC+yN@G=I-_j$oeZ2ES*CHHq;AvzQi+%I&BAPt&=%?~vkC ztLB8%U)(1jWK{Xr*ji?U>YOyhqg4*zp7*#N8G=3M~*B_-} zqxFjeW=)@k-H@dz&Uw|i7xT@0fwDiDMz7nhT zDPb>`&6_4Wd4pM=mbgtx!G=&6uM2Ce4F>AG`9afc|EYQJWy;31{`}LiS!l(a8ELl+ zH3mG<=Pz9Nes;mqog?FjSqH<;ocb|0?F3#h>}krc4aEO;%CCjnvMjN<$5(=`I(3ox zXpGaI{)dmVtI9Z-^>j)UjT@NNsVFY7Kfc39VwOEVZ!oQP(iJH71hMUs*E4dQsj`LP_NY&tGR%1SE>CvROq)DYk zcnNQDaVche$_mR5$;0+L?FWuvmKxwko$a5$Imizz9S{4|>Yw?6VVI5G6J3F_SO(A? z2qulRTgUy6E0{alaB|f6q(rf4^EVfB1k+r92$v@HxWa7j)M@Ph-9DM0P}Ob8eaB=X z2Ww$e8o`ox=8wYt{!W{~k~hG&7c4~s{3ux9TxyFdQ#8Q087z69`6$?5?y*N=Df-Mu z!ES!T95`Ige~r;f4%ELETRsKi=_4CD@G(r4a2 zRho27w-3xv4W8V_>`6%HE2J-TRH?541NumenMwVk}vc2r<+*zYn`ZfYUb8EqV0V$wJ|O7^!tIs8-^ zvechB3btkpcQCX5%u%p=&*lhb*yX|#aDH`htrAv~>~sBmOfElF8o+8jcp@))ad%>} z41#Ixqbm!Grt968X3UvhiIone#oFdu+bPR5nlMfIFk=$40EWjuOO&O-fFG}x@-?{C zrpfuq&Vbey49k=%Er6v_c+qeMN3e9Z1=rrf5zMfcWSSh#pyxMNrJm~SY-HM-v1!Qo z<+&kw{A^4I(_5TYD|p=}c34S5g@h9x;|? zUv&YBzcJ_yj$noe*0g|ZZ0<>!l9<+_9K+Y*!iqx4IkUKMW@TYXp|N>eS_cL%-pmgy zop1~`jXs&1#A1$L^FT~>*C*h4sGcHkP$V3>wgm*7>(YOuD!6IO!BlCZ*4 ze8DXH4BlXteMSb|g(Vv^fMNQ=6>wvwETKOeerd-1m}M|Msa}sAxPw8wtR+dhv#ie; zuA?&MWzFl3E?900m}=@}Z33HyWPWGK$mETpc-xp|_y3Y}Y^H2XYa)t$t&0n%J7<;@ zmY3?QrNR>D+)`XF&62d%NF9Q+YAjR?sUanCN9l)RIWzGBVDj7cj7kGo;>oj+YDA02>Lr3eLQ)wc8#qP zTd4T(o{#eqh|F%V2HYa7Pt;U*!xmd5wn!^f_l!tDW;0mwMai-mwn}V3~pV=z0U;v8(!_`VqadjG*HiMNngs?1R+{8{)=*(=MD?^^3UkPEZ zcywp9mmOPei7rf6c5jO7RG(7ltqJ%;f%anEcgEWzF#}jo4TS^VP(!e$9Sb0X zU|N5Ez3!sC+*z)d4;RlWo?^H^z;wwLpTM=Rd(X+3#7w~qE2G3qHX~TyKl1~N1&1F0 zBD5;Ax(ge?7P{QNab{adAl{QHiD_$*DYMYXX3Uvcg2e;zZAztDsjpHS)%vCR+Eb&t zQa!(5&iD+){3*e@Gz2ka^yg#>c>u7Jrp)^d=TTdC^G<4#>~2N3zctV;~f zV0aUtjhm3l#Nh51vJd9LcKTgq=JTcm+x$(|!Rpl|RW+EJ@F||!e3v(wQFX%HIA}t) zM`e9IHnNWP(CR9;_HXhB3%VOT{yU}0C=u&h?X ziNurOy|>=t1J-3&njwDr3m>rfur%XolN~Rx&NgPM(F4Oz%d)$`lJuD0?@}qyCY}UO ziaz52W^4v!m9En9yX;F0v%fV;gEy>|izTdONFcE*?&bg%@3CrCS{f%8iFG=KXNivs zSQjT|0j+*K2UWIr5VAlNvo|hah7K2&$+#GQ-0fSYLaA{9>*)5a;a&ea2OGm8nMOa} zN{H7!SffITWk1!a-EkhDlg#fokC{HecUS*D+nyi6I=X&Kcz-zS4;;Wcl~*L|3eqMn zd@^V=4~cd4u%=Su1J>p*OnKUb#z&Q%{Dl=f4q$=mM9E=Sb@IH0Cbl_)3$tzf!KI*Q>3W;K3tM@iK*WDI#1V>qPsq&=kNVhw!zXW18KLm5d(^|Y-3nR z9mXyyT}4(iv7nu!%d^*Klw=tUFG-4p{1z`EjWQm&mjjsPOOgz7`}lEZ_9Yh2_M{`S z+`b&Zx_B`Qgj~SdyB}L1im8)}DmzY=*5I-aRu}epJzys>f>i z=_&?2!9cPGS{;PP39M^~XeP7TYA&j5FFUg8$T)!+BQY~sMK!u5#Kn(wn!YWtaRZA_ z-xip3k#PWP@Ol!QepqOdT735ZW@URy(!o0E(u4|S_QuWG28(s*>9k{+`aWd@JMaxB zur8j=1g-nvvMj4ICb9N4r3q2gTY&QsPGB94%p5NJVBQ8LcD5Lw#l&IZ%c&2PXIYgR zSQi5`XB^_nHW;>}@+#F;9fIo=XWrt%Tzp(bmL(Pg>moE0IJK3N#5x+k2^ETM`HXB! ztX>T!C?2af^ZoO8R%Th1+C}xT1V28Fn~>?(6^rL^0P8d#Spnn&*2VJ8(XPLNhs3l? zl$VUlH^*t$@VlqZ<)F&;kl!*JCyB*UiI%Yd_(-gy6SIWJ39N0q(h`(rXx3R!t zH5jT>z1~iTEbBuf+iktevxTeA$hPq>#fz@|Z9aBs7lg!b+%|3=AF#Fphh(>db>ge| z_)Jb<#`A9$;9R}V;sj<)cK)isl6K|nq{G-tZW4=cJ6jNzj>gUSG5ES@yy78(X`$SCgw-0iL~lewO30C|Fy$kttEk#yEj>v@k1hN1k*})+H7S z%W2Hc|OO^O_4yXv&vdz`EL)8D8EJE?}KhX-1_ol+JS;j#}Fa^XG2UH3-xw>t`{!>e`o zXWRHg=Xu-BA76C%^T}Tf`D{U!jb8&(qoqC8u>kmhbs3lDh^?!6NUWoOHK#%ibCB3# zPfa+1@oR4+nty zuNv@sJ^A{(DY#(yf3pte2{kBQY#W-W$7y5I-tISybZ6Pd8Vz6_jVw78it>(mnF7=9 zrYI|QmXsHsB9#@EIj5f@RhCZ0`!i0#yEG;jmRHU?MXD&9RXj~Pdxq-vDD$hZCnetG zp<*}US|u3h)S65zRx>2A^ubd0b*QVXu?-B{CnWDu;QOPkVC^fr&d1vA1T&shRs3~o zuweAawqtR=FY0Vlr4h`y&8nZl`L%!FAJNk3)k zTB7vlO3jZ|l_WXiwPBxqQ<4tWseDm;Pmdq%1dG+J7dQComCArm3E@S&Z7aLuS1+_} zRL1V;ir1oc+>m?dt)Sgt?)C}Xurqh|t&8mki*=|mU;+FZz^WVY?qZKp-CR=lWl4H~v_Ts)L0A+`J%UxA7;gVfhu`SnXrcCwfAfXn}iANsgpXpi&y_;yYXX?=u(4CoyhEzSg@*nA>L&d^Py88v(3h$ zJDF~uFHoP~W&857NB(Ian7*0QIoBB5JGq-ZYcrUZ%1*GEV<(tlYa%u>+XGnmd`YGx zHXbvI&goLctQkdk5AQ6g!a3bpTwFS9W?{*!^0q8u%4D4}S^THgZ5dLfH84!pbvCNb znXxF|>f@f{4VFBMXp|UlFhfqPYlg=N_WEahC1wEYny)Z|bvyTYuBtSEbFxkp;<0V{iZD1+Ef{fwfg`bqc84Wj5%T9kzg(o*BHF=!38G9+h#hgz5b@ zu^sceU109i(RJkGH*AuaNpx+WDm(3g<=7>$#2X@QHfA4~cG}n#2nPI$JCGnU zd%V}bY_c(v^@xpNsn;VnkFrf-2{%OAY|K8eT2IO&sy2Y>`SPkH$?7(VZTaS{3>p7K zjQOWHD={xTxx8=&7MYe-M4w4#V)^Mz{Y~lYNn3AndA#$hOq0a-o%W6`V5Ui88^Ka1 zi8oc-BQev!e{guGEvhttC62FGI(FF&mN>r7Txgx%sEo$f*wCRO;7!=G{KL2Gv$2$c zzg=MQ_&RA?y|MRuw%Axat*$nX&<<-TL3beN!SfnzeLBAU#a6Hqk6Ifj4&V*Kp^4)= zL}hkMEa{5GW{D+Vk=QJ;j|`g>69lu)#;N z?!A~8{aZtsgjB~cfP zLiZ9!AF6$piz!`B

qOrjc*ya-{9fo)H;E=6vQD!-TOcGMYIiFtLOQrHo8r;#5YQ zOq#~%bS9p`9A`1d*-V_z=sAqKm{`psZYI?-NoAs+3H6NNXAdzFW@IrVOBrcm;{P$y zz{sDNZ~+s}XJUkj%b1ArxsW+7X2M^X(9DEO8M%y+%Nf0diGOGG&rDpw#8r%3!N^KR z)-bw(k@bw+%*d^b+|J0IOuUN`l<>Wb+{eiMj6TZflZ-yX=vGFyFzIO~v@qeHjBI1% z1tx4~;tnS4ifiN>=0K$!U>km9k%LV7i4jy#Z$>Ymj{cNRBLzoNL83I5($UmWK*>ld zl~7?S6=qOjCMC0}+{z+@1v-M!*-WZn;w&aKGU+--S2KDoqiY$xp3$oq`7N3ONYkmK z7n251$1#-1RP0M>IgmU$aut#C=vCd=x}%spoC)th{eOXuCl?pdT-{Wsl$0CcE=wU?*8TB!F5X1Lr z0Z2YL={%736WX1vI2EYCBK=roI1>j841bACPPl;3KandhB=Rb4Xhj?mf_wyZjGz(xi(V2rmXg6j#6jgj)bSfC5222uX=FSVoHTMW6>-!| z1Zgd$C$N!6GI1Pnd`cuQrAMG@1o<)&@lkmokn4bW7^!1qAtQ?z@iO9LWEBwvv{Di| zoJj*g9z~>`RPM`Y9+L-BdOdaAM*AIs_Cq4eNF+?fM(Uu<(UUpw*W%|wJ3-Z;F%&QX z2O17BRMvPV;6R(m#8VmlJtL9*L2x_MjZ4C^lX=s=f)CY3~?OJ zgaee`2`HXi;cLXhLX6s7j+Aqe_fw5Oo*TT2xu+5>Yz|^%7MIY6M*w>Y_~%Z7RUexDCiY zSP>$9uO#!1pyVggqnxrulqq!C3fgTA?beGuK7dUd#1;%@-G0NCAI(?}Be{$nFWfK( za^}IZ3Yby_%M>8hP_z)b2cX+xShfVZJqJ@>1okQv{tMVn=>92O^ck=|q?>~j){%wv zL=2FNt|mR!lHL!I9(R-G4@p0P&hA6marDEJ>69^aTLBd&Qu2FRIE&s?MwgvM`<_d? zEvAK6)0}m*$9CFn2krYR&3T=r?j14%^<{p`Z_Rmq5q|aRSJ{ zhn7pA_X?obzzJ)i+dAldE417JWp{yiH!ObuS{?$j3B;`+9)PlgAdV#tbT4B_PnmRA z2@Q~b9zq+)VH-%#N6DOxgl;Cnhs5y#>HPz#=}CniRO&_}M`_wWd>Ez2(FHQ?;iU3Z zdeKZOxv5Y~#f8*y9z9|ym78eGpK0Vu8d*uD&6Mn9yZ5kR@3NXtnfw#G=ofZsD_b^D z7(GOgB_T3Q$jcFOh6{3UCKV9@KWRS_@emnjnMqV?p(0`A2e$24fvln8iR^>VK$=J* z&l5Dl?h|NahUW7fRa9O;BS9)&PNi$8lq*E$0lAWt^$9SN>hXqr?Q4aED@WD!mtboWBn$srN1Gy2T^}rqg$Ab`g6k0X`c?!f9 zpwEEt76^Gn9!L5XlI1cfC?egb5i)~xuON;9Y4MP`~T9{~9wppSs#aiEU^c?^V& zK%M}{li=74(k75vKzbU4r$BlJ#4XxvNM8VPJCGefUj)a?KwpK(Ye3%w;SF&78_2sL z>;%Uy5Z(jFZXh3l@Ck@}K-df7mq0%Q;R}$y0>{@7`4&Ws;=Tjn0Fdt?@&gbw-5)`Y z`lviAb_z?PCU-Rzuc3}>sbe)2?;?@Sblvx??+}4tJc&LNLrQchS5h%RyWuZiNn5U_ zUtFu1&GOas;5C%2q`j}E1FzN$Sh|{4TuaF{wD)RCR#RaD74We)5pE~lR#N#YDqlZe45g&)PVzhCFwaFJvr%%A=xQ}oQj&lzz@g@ zBLAKAzLRK*yB5S9Ahr@wpd{I!IFriHkURG=M{f{%LF70>6e7M!BKK4B5S1UKj(=0} zecHT_k-maBfb3oc(v=__Pv~Nji{t$z^1;6e?Mua1*r2_v0OyN-g1iPIiHt|O0vvJU z(Z?H@AZ`Z7CUEFxL!SZxhZ06m zF96*RkwgaLco*nS5O)E655(ONi5m>v3&NK`J_D*7jHnxoupj7mKn(^Xpur3zjv++q zPa?+R*Q|J zf$^PG*vTR|9p8pB2jN{1e&<|HA=$A0`T?4t>pk*HnS_unu6)ac*xmQ5RRlxMY zC|?gHH$d(>$lU-v*F)~D(ESc5xeH3}g^~xL`5`FLM`FpNkoy=kZ-m?@p!rG2{Rfn6 zhUQIBqD!^;Da}Fk-2%DKLCFgsZHL?)(CuaD{TlRs6BfJy%l-|Hoshc=nvrlfd|uF@1XerbpIa8et;rT!LfpLwR{*^VWc?FK*MoEeIMxB#0K$53+zRp?Al(JzUQMdPLm)j4(xc#b4CIaA zcml|iKsE#21XTYlvi?~j&w-?S74&RvE`_`a^bHVomx2~Tc7gmJklo;jTZp_DB42{^ z8OXYY5ZyxX6UpC!tXqim14Ir&1V2tPgq#O5$<`b~hLNpKLM9OrS6F8d z63~XBh@t-FWclAn-lgR84Mcp5h!2xU3wki(c#6;$i1a*Z#vt?6_|*IfAqPqCABl`} zG@(m+QK2t&IOxy5TzWn_$rI>>CsKJV6$_}0RyvA`xbm7xU!F<#&!&-i zl)C8>54~{#m2vIUM4$aDov@NNUqyv$=-*e<)`uzmr#2SI3sl}g9WTER-C3}mE$iMaB8gU$JrP57J%zc5jYBn1)O z%TdCFfx_1~vrEEZ{{hFh(7GR5(H9}!e%ksXi@e07S6Jj#CcVKTud&G6EV7#|`G}GC zS>!!-{D$|ItPk&Tcre&{<)2 z0^Jn-0mOrVK1%orgmGl~L?UAjJe8h^f!4Ql1I9}j zCZQAiD_M3Gk#8XK29oz7SzbUd#b9hPb$rC;e8}$nl-+q4iL8cZJ>Y5W#eVF=o;s2} zdK}w!{Aa0?mh{I4u=~~ zfy%M4e!LcNmX3k-zk}JQ!R^0?f63rH9h`-*p$OJbf=VYiOJH^}Iyh?VzMkc*Y>T&k`fb{y55KJ+B zP8|ElitmVUfb{&C9Mekr0`1*{9xqZyH+rvwZoqkVptdTH98E=uex5^HbLsp%`T<7N zlc;wpy>c3Dt)RkO+P9kiP)ol?y@%<~jkNc2dVYkSyo}y}0rrJ-O0yQpV3=LIingw$ zi?653t#l;%tNZCaPtm|;x_b+4X`vI}rK3Kf7kx;@kEr}HZT_0Jen%G^p!6sDVt2NS zu<8^kugOdp;OVNSHlDSadjR?af*h8W}>?9ZUL3q-PH4cP^FD zW6UQvV(>qo%J)+_p}T1F6}y?((OpDzcX9Lwto}>(cimB(g)1psA1x>S-zS(+xpSb< zw-=McWI0A+s0$3k1m<{%6g@!bePsQEgg!!gJWBdLOz2~zTi4hOLx{Gh;4s!tWEZ`{ z&e+2S>}Bs%fpiABF#12fKuV9sv>p-eA{a@EJK2?=vdH1=6#U5e!^7D9XAt=XLe3!C zUw@c%2m&$i==fI(2$MvH*#!)%v~`M~(0`D~KZuY|#gj?lt3-Mge;bV)D+u_{kNFDX zz%|!{M8wZ~7$Zlr9!F?DFGhdHPaICt{T8zPKeQ))*G~jozw851!KDhru)hH3;#WYx z@E&9Pci|Y+$QSSdPO^iDSd3W?BH`@TKm?rH{zh6ZBbeoot|j8lMBYvWkOgk;A~1Tia48! zI1(|6IE<|zjEXErq1X0jR~*N1z0+?T-B&>$ucXJFLFdn-xpV1tXVTm%y7p|^_bhtt zIkaRxZ9bPCTtJ&~{%XN=6K#$rT`?RGDE);91eY*m5RQ&d*$Lw?$4jMgR31koJ3tB% zinb~-VGc-WifD)Rr2lzZTBERy+-O}bR66s$i@K;Ks35VTe`CK$$BH{GCmfncjj3+?ARofbn1x(T7+FZ-M2qzOED%B`hRGx>i z3A)6tz^nzXx%8jxz71nPiVJGtIuN&kjN@)4I95T_*u*P9z;rYQ*w=%614!$DZh**o zkZuKX2grIDBi^g6++}^eAU_JyV-VR0NF_cA^dA`Ug0L9`-Q*&AjEyT(v^rT|FGy%| zuYvHUwqVEg7sfMmw-(CcG65|OgKCVZjG`%xK@K-fs4lt&<)p*w?H29-v+nb0l0+3l%7EKH@)=#v16i4RZEDUN0u}VUeTQ zx>`d@B2S>Qj~;UrE5v#K6_9p-tj~{_w3o{Dq(>hn z9K{NB`*aLt^05qMNF*j7qs=%pSKG#Qtc1uakgo(8WvI`jLv`cSW>Vca`|Fb_8YgZe zqL;w+S`U3nm2gVcSKQjHsvBqf#EKqxGxXR5%XQ1dyiMLSunu$n`o!8FCl1|340;V5 zZ^E)SfbN2_oly9$mX_@Q5jZ}91$&?@KC6~}0gxWfz#KwRbXM(X zjl^J$Eb0WNQ8dWN5{mm`!cr=)qJnOX!Z%EcTjPo4RMZU;cf;kO+DBFR>SneR^7{JI- zMvi4N{yB*eeQ#aF7%xw=d}2uKMCY9{T{W1hl6BQYXP;)AeQp5}(>u4p6r6)_9fuRp zgW5VyOg0T|hW?whIS3ti1XpugV8L_H5}kn1isF8wpYAs>m(uMG=&#R5sHq4}N$${1FgR7i&e;pGZYcT)DnADK z6DZvSrF+4F*)vQ_{zp^piC;k8SK2D0t`~c4!gfi6cPw}at zlZtiyN*KG&rgRl`pnkt$G_KrBbmfZuwXuK>$}vovBhEUUQC+!_1`>=bH*x_HP`Q65 zQb*@WE+_J(mZ_sRU+=@ z+zJ%4(071C&%5Ggmg51S4}n8>n2tw5d<>+GAU*-olMvYqMVp|nu2AV2DA@u%o`ZgR zSk=4(NZeM>PB_nFeSTHX~kC43J# zdQ2rJ8;QD_(Im~EEuI>8XywR;SmGct|Jv#Gd>%E(zt9jMKz^zfPV!r9bOPJ2(I%k&I6>a?t! z;xyN$H5{0TovUk2!X&v4-%rnzcgH;WEwE14TArRQM_(#E7*Ck%TI-xM-vmXQp_{HX z`59QT1^Pb+C+Iozemg)gXf5{*Xx5jIIlEwruC;!8FpQJklz75?imo`OD-PrQh@LP< z#pUVw|42&3p)phZ?5k)51yW8wm_~=j)r3~srX~S%=C^3keh-|!bv2>kVa^}b6kY#1 zaPf-^D1(|Xvx>$RUGqx1njE;={R#wKO&F+)3Dt!0iLNQCJ9cRmB|2Dlbgh^i*6l}( zf<@iq4cdAH!wia4xJ1G|U!BVF49K_*v0dAY>u03e36WhO?FR89h*C+oNv-F2(Rdum zsB|Pj_eB^9U|d>)>w8S(m4XqiuzL9;F{saWIoUV;I^M;G#I1EGp5qm_>ZVRVwbVVD{iWy)I}V zX2PjZLWH%{F%TU1UHmtYV9pJbIdXsEIEIKvV_6X)5)pHVW0=1GWn9DdWrO;#i>}f( z$4mPY=?FIH7uIWlfDWYfAYiIT`=k11G=_!RpI8ZUJl-SvW;E3Y0=-U~o;vME3%5a$ zz8@XI{pbf%Zb|<`OQhgkKqS$Fy`ehLHkWYRCh&~Xs&1gO9!_8yCePH(&u($#vj3ofPP9JenYCTeDN$ zOGofyqKifw)BUr&UJIFU&5oWKL)n;HejGacWSnQw4mWG2C_SxhwWBFIbf1jY7~K@> zlp~5R+cnF44RehViVRi+xio3C5OsWYVJhL#;gHF(}*! zg-=31V_2fwfH5p_SPM(UceQ=zw8IkJPH4xNr07RjfHBFbM3jkusnH@5Te{99!ZfX{ zh<;9ly#z}^uynR8m$u~7-lK6mVg)7@rcfqN1OQ>pb@4p72^#zBH~B_Vy;JWMSPW)#EJ9ENc+Z6bv$$<%d(ZXn(6)GOsK zq7v>EV%_OXBJE?i1t!)Iv6e_VH1ailZa0w!FdCuK*ZPWkKcjsG$3Z3%Qh=MD5h`q< z5iD;wfCU~*$`Qyf+SY*MVof;Fnzsl}Kv)v|UoB#k+$5qB`FT>5OX+?pW2wV_CLUzC zRn&haaqOqGl(1=JD5?e%gY!v`Becp`ae#n7tknT7)c%m@p^o#ZfE9OZpqsv=DmsE< z9D;#2L6gR8@Kvw?-I^YgV6fe79h7YVwjR3O0?Mu6xDAfJ1A6LZ5D6*%QwL~oY0?w!e`)wEztWp82W-1QFq$`J-aN9FpR-i8k2{(IO@L> z%Jk%Lw~t_qzBuY1U&i*=7e`Lrp_P3LC+I7qAwR(MA2o+|f=ndcK1p;Y)$OxPH_pgm zly;+{NPG9uN`lc)*L5^h5e-$hMqD@HTt?z{=s3Ux+=D=M;BT9c(}zIyr4v@N$yi3~ zqxG0+`IeHySmax+0$jw(^CNNZ7xYO2|{0R^n>0G5C?#C6hsC??jVqcf;9^1W3wK9D z&R8fK4+|zh&KM{<4I;n8`ViRn2gs2@I30vSkcxmhq1z;oiy@~3$Ydy-0=d&*T`81I z1!)F|(?OaEWEO~JxFrN^4u<_8&jV>LkV=p$pzKVL&W6ZY5IG0r`A}2^>&}IO1rSj{ zR>4sVC3PS#gykM^ECSgJvJYe|ZuEm(4tK%$USb{TYg;s`X3^Vrh+i?XRPDrIuQP z;F(D++xb;{#r_`BaO~w7A~1!vXTQ#0-^@U!6)az z7z%|C#*jbkr4-0}h|7|{N{VMIi3ZCGpTezWh*sY|{xLT_T~^jh@8{zOQg@**6PjMX2z?k`;W z4Tb;dIunHK#z3%FX|j!`KhoACH9pxVKtDZIn@-aP7}v8k&Ar|r9q)zx6T3A%U2Dc^ ze4e)VXwwC{J-Oy{HTi{C0YMh&McRI$Zg`2#y-b_PoKDv4N=<*Q@ztK29eb(vLefsv zoRjn#)oV4MrX(@@Ae3&P7&4F`W{?yAjh(Ez;yL>ZEu?L{bNtT~w zG4``g6u<8h(%Bz-&23unjcXZUyA5+GG;cT`3AjLgQOP{gUZ21!D8!Zk_8toqA_-IY zL(a!6oR6fjvLcOz4yQ~WKC}XPNZ9Bp=vB_gf;=oho#zk#Px3INfi#$tXAZ;pNJT~# zENUQr>mFoUVPv!`*R-Z!S`{n$nGDkk`~Y?pFGB0=aTtJC1Ta8$~lVaV-QdLGIGFsn&0+o!e_;u=C0z zmCBd4E41rUO%|{aiU;tVGdukZ>p9cXv#h7vzSm__CfGWcTE|sZ{g5TI$+nx#wdYZD zePs3-RWLqR(xbR0*RhtXdetS1UB1-q|E1Gqt_=(}Ec!<3v0wFI*HYugZtRk^Tt=N2 zfkVg)W}<*JTvoiMGGyICYXNwdtG%uIzZ&gq`Ht4Shu19WDV9FszjxUpAeOUZofk8I z;qW%lUtZOT)TK)EH8rdCn=3up6Rnh)#J|z}CXJ_Qe!V8QXx-n`p4I$m&E{(IytW|A zc@5E>?L#(gm_?gejQ(vq4`_W6#6;WSEX%shV@0ss9l#rB=6e6(I18c|talA}N4-lL zT+_O4%i*qZ1J~Q=+MC>@Q7+jiN;YxsG9RfaA=q3WXCXnfw|t(LKq=cWY>i#Dm6ZC` zn*2r6x2X2;V(*j!ig9+;Nv5}3JzsjKP5F}@^^mRk2V3}n_0F`d`mA-9{pB&ML+1TA z+x|%#`-JWMwADUiozGj_i$QVskzKIZCVpZOvG&oQ!o9?0Z->Qddc7!HB)nuHecW8W{X0tVaQgxn2 z?`ZxJk{FG@RK?WmEZNCyZ_5rf`WAGuT_t4ER@QV%Cu(>UAvRP4=7ES(@I^vD#KkB{tnfyM+jPa;eX z$4C5try4ju>|q}Z=K&aJe_cUB%<)lZ&Wqy%)dZUJ=rzeo0#SWW>>rZ9D;iL-=aEYL z-5(#g@k}l3_kno0BJA<%758`^_BfOmdp!B3w|3SVQe~%+QN-81q50>I!i4x7X=!nZ zNUzEsCYw0fJCZqrq^nZ)jb+~|S$_>#r$#!eWv?~mY$SP!th2VX)ydwqQnQZO5NTOg zK5meP;Zi?LP8uq1eK~1_)UPKmHcIsdvVW6wY$)BSjBl3SQBuE=bhOAin@G*ZGH9gC z-BjwoDIJ?j$7V92RXV;U9a~B7w`Kp)GHy%h{jMCnt#qL1`@TGtN!xbP)+Q6jNbe3Z zYe%WyUe0Tmj-BM=vGVcGvi`0zZWpm1NcV2i^F!&|U3xlX;(qe+o^ta(vdLaDdVlHI zSF*i5i0wE?S`L&$|6A&RB)tdAxF5^Sosu3Ry@yNtk@DJ6Qh$uRcC?K7sq`Kz^~Xu= z@iOaY(tCn*oGkP$A9sqhog^)XN&Sh^a;ofcnjCnBY&%Z&K3&?+l;|vJ887>vE#q>T z)g=?pm5vG0(Jd|KN&ES-$3$uQg^cf!aTiI)#nN%1Y;u9zMmWZ4NN)XhYq`tI;~O8a z{CTsNESiV6a@|`v%`K~!xX#B8(GY)B#iEI_teULjaa}x0IXr~3AL6SjvSXCyEYP?FKTp{i>ToEwY7a@$(Jq|C1LNk!7n5fusdK zf68Ohh&cIifzPj9@u0NlrSe&6cu9(b(i8hZbq}%M90Ey*{X%sQx8F~4;_6|L!p0#5 zQxy(MAM5R^)nTX9ueeimH)<=?Hg;{>c&rQf$tP*ug*xolI`Mkla|W=-lBZnDi_X`! zyyt$m*n`jXD~V%|zM@fH_7jixGgj~tX@D-o@9B?yfEnS<4%5D;G<{do&lOTg!<>`K z{}}7hF(WA{hHK3j+`=^I3L5KE(jj_CmHev1A8@Oh3-8n1O-+TE>fr)zyk^fz3r%{|(9f&S`3 z?E`0CqEoNdmdmsiV9Ak+9FBt1ULAXlHeIWAH)+LnUJBT9vvy9`{C_-Y(|fCGWH#9H z(H_Pm>N0aspv?1kzH|{9<8>o;O%A>PqL936VJt6eOu5_^&c5%UE>^2O6DY z*=sIojMzt>Xd=JBj<`FhI$59>Bu0$=j&wlKq38Lb#)oQtq!)<+gY&;@yg;?lqO)xC zbFJxYi*g&=?HQz@ltOn|^?4rm{t%*RTc?>bO2T(>x|7RxbQ$&F9ijG_dT^w$)Po=9 z(j#1Uq)SfA-M^$T#92`;O|A4bloB{!+01iI_e3{J56~&$57l#}U4sUaRY-4;{3e-5aYWcP*#nY=T|=VBNXGp|KIP~ZaYSsK^c9K84#TmR&hD7JaHv&@gCj~yXE!RxV&hO-(GoV!s)Q;CJo>ZbK~tCF ziiuV6u_ZyBmu_M_NKFDKk9uJ>!V>)I{l5H-q?PC72P!s0eu4C8`mE$-t!7BHMIpK1 zg_`880{x!x*o%Gb1N1w35{Ox!Fe*^cWQj=Mmz1R*3&Fiy9h9Y|$6GEaWp4jCKvRnJ zrFcS8pFvsLJMalfs}1l``fRC)rpT`ikd?x>_^181vQi#6Ljc3!DEI^IgPnL<)45uG zv`db0$+2unaG=xBUVs>f*f4q0qH-M#ddn)8!uTN*8t$t#$22-J-QDZEDpK%GZsI6c z-QrTJY!F#pDb?r(uaWHb{&FEsH>A#apK!D(Kz|zdR>Cj_g8Z2ynDKv+Z=1cu6 z((tl$1|zThyPzFveM=hNlh%Jo&AZa@f%JYToncqTC`^!-d@5C+3tq)1asDL7eOr*!u{^gI#n zB7>Jezr?qfoGPgVL;?i}!7q`R&PYs`In`25@as6$m2!fGFa3{lf&qk}e6RpQ7;lMG^`kFKZfeO0c&XUxj zGx*`Eu;OJLTUQL6H0U;dPz=8<3?I(0Z$-|~_p-QD;IA^&8sYD()~JtYzEo_IKeO~` z?Y_m6z4ejhgDs)(FC$5K@i%O^ST=udr zbE|sCJ@uh``ZJGU+rD&T8=^LfIJVQiKg-CEMSrGL4L47cW{$JVrRvvGH&vRaN%M5+ zA-{Z+4-=Yi_U!9nxAm)eo9~cj1igQd=6j_1UYYbKsk&b#^-0yEG6})Y9BKZWjD13y zpOm_%rEad&JtNt3((|%RdPSNScm;Ly8$KwQ{FXGo?WH5>J6^R*f@#c$GWH{BULtj$ z3NtzOU()=)(!5lfzoUNpyr(hg<8OHCV8)5oagxQji(eQO?)Cq2gTHjGLGJ|dMUx+7 z%wCR5nDCLsPr5JWyQ|-K6>!ltkWrQhIY*cLT$5j^quS+6wKv27LRm;bl}sk_AS$`Eg=zbqqWYr^q)5TGn#c+ z&;OE$bMUJWCddLI4C9b|^!8R@n5iBl;8Ak~nW!--Ji&iH&@cGMS7=G<-%pm7)&97k za8|NqJV*N40L}k<%hi?HhyDzODnTCamH)ViZImF3Z2}j%QkHO4E|hhzKF*@!tPXFv zj!U6RzzkbzcC4qVeRcmROQ={UC|+h%fRgI44BO?1l2U_ zIxrjLm6m*678YVTc?EOz;Mb5>D=q|%+H+QTu)tZxq4;7TXT?GkoYnG$2&+&LoYiuM zYAf5H;?T`)VY^opKvmgk7A>;)3emkRs&(y?Bs0y46vC`R^}Lk&r-PSYz^19rdKUOU+)lf#Z%UI4Jay8U+i%G zDAz`pnzekFjEJrGtmkQsV#(Nh#cUfJNziec)fe1&m#1i|?y&Su+vF~*_>;9fWa%HQ z^8vG&)(ZCMv))85D{uuBLBiJ@D4Ijc625S>c>?o~zUCd(Wp=Ocqya?luVi^hvPUE;RkA?Q zi78{Dm?aoSxst_7%*?<_mJIP;xr`++GdZkFFp~OJ(iST*3=lQ8m&JRV?dNMz zL7~_w5I^4ZGL1Y|JXk3 zw4G`lYFPBKX;9~Cql>Yn^p!tPiqE8y0C6%cmu(#|Nz?MH!xRWvXYT4O=igA=X1nR&3bi zS~A2`0c?0VS!q!yB*A&2d%=0GHe7}0p({>$rcOLrN1mb;r|OW?bmy}*Izz|iUT3~t zmqz2YhQig;^`mjB6Erzb7xegw<}J@v`=xgNLML7953jBZb=^yRVrbpVbjK?-`n3+a zN{_x=hmj}xjUGmTGgYs-T5EfC6v@PEG@a(pulOeIn69I5)aZJ>E+iA{{zu2&qIRp+ zga?aG)=`vso~m1(rZwTgss=pR@bF+uOAq$*@L;{+!P>)v*+rUPsG~2@p38LaD|EN; zV3py)b_ox5!c?7dwYG()BGH+bo~m}bwuYygc(X<`wCR7eqj;)wlrD1!xi3UeP1Ol` z{6?IBIx(rBn<8yXR7Jj$YP8~l$xX^QI@ z>K=X4Z7|OzFFRPKJ?Fbq-*K-2MLu+|!9fj+E^3O}YFvee&2>@8=)q57JftKBY2Iyy z<T9dg=7?zU%zZ&H0B*K5*?E$3)r0Rv(BR;_ZiE zHXdwUO+@vkvn~CzPm7ZTjJ|NbUsE_wHJqnOm9sV6*dY#K0OI*EY^dWYGBTH2^<>|I zMqe_UXXz(4ksKc>=A~A($c={+U?FbRl!`fjnz)Hyx<9Yu1I&J4v!@{>AOb25Q}(8( z^={}VlnQ|^&NEvrp%gT_MHyp3#h@R?bEaW?!Xp*ib0Ckzd0OyDoTr|LVQ-SZV{fi5 z+(VcbooM!{wex~nH*sCp&FV9p&8>d4b&j)$Qr5Mced?RMH3SiO*T>QlV&NhQPE5qm zYQw?7(CWj%F(w=wBSTEIb2vCCgiKdFIMM+JM>i!-Atu5*^@b3b`X)qT)Hk&}DHJyq zLj7*EVJ}PDE7B2$UmxP2&K2vM7=BUTgazWDAfsCUDb@e-4N~w?IL~BP?F>_~QW%Kz zi^1B7rWDyVx%SDpEK4r)6&AEes;G5iXgBdkC83O@B>T*5LD|Kp9=@(oFpB88zI4rB zxxS??bCLfKsYyi?trew7gv3rGm)5#T>$ujT(z>7MPkhme!3NZz4AcaDGD@4Rf-r_2 z8e3{aE`X?xmvZU!2C zV%sdX|5ayH3cv2EIWMRg|CfuFx)>x07JX0C6Rqzg<8XnZX=m&R0=q0BkNmQW=es9y z4wKD(<74@vpd(+Se|JnQAqNUK0E)hFV`{%7xLgTKatG*6$p)3M1jQN*Km&46GS2se zeoBAxkiNfIBXA&DsaON#fH1f=Y=N>3P^^LduUf28mQ)R_*MR+??-n-Ti!}mr;MB$d z`sgr2dznTn$HL74RU)QhJEV)uXel||CnJb);vH@5&YsJnBB1XCqa=;li=K4b&3AV( zKPXPua4lfPA#PH=Xa6W=;$$b{qo->OApnm}YUYPtOXHXFZ`$*eU(NVgjj4^I6V6<< z=QMx8x4I&^@98q^@MNQNn%6Ka_DWRpfdHZOq`PF1%f9bTI)~6BS{xcx zkQBJn(ojTJ)S+m}0x3d)i)$)bU|k^MC_ll+ULUaQrh$lqXO4memWep};S@w1=%~N& zBs4CV^l*RS3Ar!|Pnru0d|sMD)d>;J*q5a-xS+a!TXm8`z6JC1B`3lBP*uSmV1Zr1 z1y!s<#l**%y=l=K7QbWmzUh0Gyvsr3^AzmCXsB#|r5D?GE|3^1_{|`3uh&|R+U=CI zEEGXPBNuvH{9Pw5RJW$x45U2GesYR01g=D+daBi*ZpnBXOK*xZZOlh>kh28Jw9>`Z zE(^{99U$EW9q@yqfOR8cgp@Wx?@G3r#>l_1w8@%6Am5?+?^W+n`&`pCEo-*yVSD(m zcHDfQDPF(AH%B5cNry-IdQs985r}1@G}%aftIs1;JH0`se{p*R8(Sef4lMo7^IM`8A?FZuupa2i^$!!#g) z^sN;NNXrxl4iNQMf(3^0x?p?DBkSP$(09cnqa<={CB0Cq*Yx7>n3ILszy*D3kCAI0 z5^-eEyiw5)@KJ~Ru;nl`pQt)Hymp6=vdxZm@lh^5#>K~aVJ-P7MvW4Nk1dZHGJ#PS zWP*lKvjO8U>Xnr+r94zImf$SWoB;SgXCqFG9U z2Fhr2gkB(@<7tj$=~6>5Z(q9jOzmZ)r|4d%Y83)VN@4@aHuiL1J4xYrRmemicCq&M zXv+n9&V|}=k=9M&rx1iDWb>>1%ZFYqevVFG#PTFU@t@akJJ> zSK2&69MPjGe_ydHPGM%=r!&ACAF6$Xe#!EqU3v_*?b5<5S(m^mfipGCGXv=fxyxdz z(`$VBBpLq{?zG7GKM*=zGSv@z!C}#~u!zug#i{0y#lQ;d%1cvS4$tiaUr6rT6$bxC zqQ5-VHDRh(4Z~@ynsBb2ZoPP(b)uY2%ETV3dZb2+tpX}e@XLWmB^Pfm1DPB;7LfY5*hXjn3P z#LJAAr<=o)QT~}z_#bdlN^}sazz7YB-7zpUV9AQmfF~yzl(9QPXpn>_?=3%htKGJh zb!~2=zioR4=RlZ1hkR=2&_9spMKOy4yaFzw***tFeC3*o5&bmOk4*Ba=|UEZ1(Jql zI7&L~f0j$=i{Ugs(%&Nps9!FVEY_kJ5&PX2ONJ4lKr2QxFqzAUvS5VEN3@Ne0K(@v zU)Ma0YgL?&44zt~>@Z7?vAk4^wi#U+%X&kxg@qkju8fm1X#F z2$`#w*TF@h4lWBhptM{E#|o}m3P-{>)DfgJB@J}hs-y!1Mz zt#O6rR6&l6{&1e4NVi)Qv03~NORL=te->gxwqYNx{yOP>2XT_jTOQ_55GyvZWgT)bs`4Ri?4t{eb@1BYZLi8sxfW zcjC7t-bK>g#X3ayk$g{y_m${WiO%qa<4 zXR-ZbklP8~IChi|#B_J9+uSm)W3Rv{xEoHA!(Q}dM zCB7AQcAdqySoS}bJWjVXpCv)*nj!)jJ2c)$qy02FQ0X8M(E#M(AlxFZEc%TzZ)I!0RP$deqRo_z(5y?g@Y}&n zw&Ay1Cpm&2TQ=2pUe9F*YFc64bh(79!9CI~lgFUgw!RSa6{Zw}7l058)>{{Ov zr!95+qVBugqDO7QBNqSJ_Icb|p2U((pRs(t+1nPsZ|QrMzia+l1UlPa9Wdl?l1F`y>>l>pTh7^uO`!qNk}jW!QIEEN9AZ z`b9YOR-!;vXZjb!d_F=iQmgzgCh@$_|7NsM<|v1%x-&o&D*JF6B>`Kx;e6pYigSOt z-yoI=t^Z z2`+_J^WK@@$#Io8$%}VNAO9wqey31ApY5q>hvs2NW5YVo^4AlJm)Dyt6DG;BDYEP% zI{{V)&ajDQCceWJY#vy;m2l})twoCP%TjO5UuaH0Ok(8y%?|L>1y}I(gCSrRl|#EEIcP^bN7M zMcbF$Cr@FK1 z9;%^gNooH1Q`O7;b|A*lJ5*<>-lxdYqS?yb4N4Ky^S+Kr-%}{8j@0+E`wpPz;rdv#9=q&YB2D|%HK6=>eXV!m7U#qp@(~YXV^AD6{ zcW@50l^W0Rk=TJA4rToCbvSC$dDP5W%H{Z;dK_i+Ql{1Ux54Mfzbjz5r{&FiGz}`bJul{*%ks}MYN~WJ-Fw~ z-#?Xe|J43Y_X90BJ;><+sNdm}u`%j^ETs^5JV{>RITbeVdR>cW#uT|UWH4N=bP=#n z;MwVTi=FHRa?~u0yk6^X^lgW;fBN!IU+_3fn-3Jl{)2R!t%t&=dUtJ|s)~)Vrp&N6 z9sxb-=C%*tyPxbaUM>f2o$AXEi3;u8mTY6Y(53$p8dzyGoR$j_a_D%xe*qszYCHa= z<&WFKFQ~Hds~le$E;pf;huY`GQgyYqe_$zAcSR^0r(}{#PY7H1A%A}3yK?ypP-?x3 zPtiaYmqCENIYj>P?`}fzVFmd7WHow0{76XzE7*^ERVp{B28F4k@)XWzu;XPJzfzYW zp}f)aiYSXv@$nYq$9!W-B99CmDJ0TNQ0}nzu<_831dM=54g%f|t^?))EDM|oJ_Ox? z{gy~R#*F7L`_+LS6?Zz&_ZBV}H;a$OqawjAdq0tlQNV8PxXmXz){unxtKY_2ayVBZ z0Q0C94ws2=1CL`*w%7?9WvhqgHu}`3Hv$T=26yH07I^USfWgfO0XW1T;^{Y$ujAmP~y*BRd z1N?LkiFOz5kYo=UHTal|K=rYoOZB=(sZL?XnYTXD$ zZucj3)=4KWi*wzDj~eN6r`dM?UCAHquXo#Vyz71&%U9fM_MugO>iUd4I%#w_X{2jA zA}CTIA8K97xAWDboWF14V6PpDyVWM?&c%I0jAC6&H?)M08tF)CD1X1?vI~U{e(-T>JCY_(@D%QFAm?8kjy<-JJAa`w^+< z(!if^@-Fiz+NUH&`LiZoBTA@PA0r9g^$fA^>!#bQ?SP2a@OV3{LnWQRwI_aD$Ntfx z`z*fSXq6xR)w1VIU-1WoPcOFm8ylNWl+=k{OfL?xH8@74rPW`GQU6`3-$it1ss4eq z?IzJaq6bTQxY%*ha|$$|M5p_=SC`%!t>IhB^t4LrXqot3Y5%^o?IN{1OVbaey?F0& z(#snU6Ql0+Y>B?FhT+lasM96<;gR^8Tc3)5P+@vI6<(Ghy;xxRz2Oof{^oygGO~wA zFBH8i^a8^vZi!mJ6`Tn9xQ@zKvg8c>FBUUo&Uz?%eqOwOh$uHkT_A&zIxON!L?7Ws zPiRJQJ&AIZy6A}NqKxk%JNbm>{Df}F#Z6KmtkZN84qX2CV^_PKCC_njjE8lRGy1w` zU(h0e4jZdnSXnq*Ci&hK?~S6J7s`aiVna)pI&Gk7s!^lbhFZui05JZ(hE-x24W&bQ zua7$O8+}iHE+Il$k=`ZCuc-=A49NnY-+6q6a&jwbISD6U{?D$X`b_N8OvI z^}^2AM-3jr7A&6>Cz=p!o`LshUReGN$?unBp6C*pIKS=* zug4+29OvgZOLD8|Et20Z`5j`jB$_SusOTI~aQ*<0A1@SrUGg`CY!M(oTO_(vq5$&q z@-at%u<9DIAB$yTZ(^C{y~#qXqm}FG81?-F>4(p=srb5S9io%yKQL4~>-_Rvx~|p| z-VWDngf@g~MAosk$u}6xC}~7-&7WFs--F}Q9S`^7hiIye=2xmI-@+dld*U5l#uuUd zrvwR4}`01c|D&W-sLYE+fTeM@jW4X?k^+z!hcQ)|ZrGx@nRY zVI7mOQe;OA_-}$co^7@99WmpoAs)lI(h?xz4Fix5Kg23Vx=9SJm;rtQ)lit?C1Qm& zPLm?=%rWDYY!a*fIiW5Kohn^t zNY@3U1LKA@qNR$QrWn!4+>>U!$k?F=(x2fq? zR)N89V-*Km#U*zCY-@bPHv6+xJz-r>S>v!?W&ZemS zBFU!9LO^L)CKq-kg{9daC8Jh!iTrh`?D(Z5UkGPCnSAQjEQ>3-&NN~y~9Snegv*K-PH0e{jJT^%flGwR9w%=w*a<`;7gl~H=6HU-; zihn$7uzVf1wzUoOX754oZkFw5_6p>=Moa}0GB`>v^v`1;glhx6fNhVl_Nyd&M`HXN zHora0twi&@i_16>t`bU_dV=vJ)1-E~zt5t5hBVzO?YBtN?b39I^vsgl+0yf5DRfoT%$#>1ZXUPFxT^}7`YaM0V9&4}t(y|N9uC(kii{^N#38|dCE@~YW zoi2ZC{b+xWu-Bptvv@-ryqyg` z&|4kifoy2h)ExQb(NUV8q}l7*!NX7wa;9ZhS~?=SWj)RJ)-De93OB9RX`TCMElFFX zcVoF=YpLB)xEy((i)D`)vJCc#uZ9c4`0tl51N+3$2D4Q8g&@l7uG89eeR0j7w^KdX z?*(-4@mV_WY<(!#-Y#vKpz--S_bT1&bY zy>MM)Y zrRh}~6=NT`C~SP_HI@c59uf_{O0VC{UfajoSp}?mM3ii1Igh#-l!9fnbvilJyD=xn z=p$I&amu!eOY^`v3-W1a9vC|VFD!PdZ&{#6sjVL+tM!mm>D==F=_L2k#)DN^7wn$_ z-YWS*&xPit#cldJFUk}FFOO6vFor|81a`&Gd@@}+XLuSmyTxzA^bUVg>ujHP_l?W& zX4u1X(itW{dsS?K_wd>4zWHGR(&&0^izHhjjZ3}FaI)Z+ICYIRM1B=cYCLVeu10GcoQaJhhN6dt<=YwS znC)mFr8;bNM3i1D`39Enq_&=iNil~-FxRn@{dLUcQB0gBj#1p?O}F}H8FQ;_d5hHD zE_R2%kA`Gr&7UMATQ^Idnk`2?Dx>E3I@aR(0lmfZFPtatRmm5~w1u+e>tfWg29sVB zhq*|$EE?J@k$FpH(wEZt1^2gFHMpyI^6=Q4$o{d9i-lEWh29d>ul?jB_|-|%q4FJG91BuoO%Kkw8>iS*aieZ!KW z%HVRRayhBpbof0O78850(IB3Fe5+apTlETiX!ahKLCshjP~sO#rQ#p(t^ zRd}>OnitB%V0#r|AdO)l6BqmN)|SYg;DO*&*)kL%W&;LNY#B_>N~1uWvwRfTOvwYJ z!2=WyKe<+R2@BD8lNbnRhVfkD%@NQ(Tfp|MbEK~H{G0`S zrM=I^b3F^BXQ9--?wjh=g}vV%_D(J7a>Da~X0w2@aJKn?htI+)zzbpCzR4ANIvf;x zf12de!_DJ2Nkl9INFa&%C*Ruv-&mxmvN@qk%+nt1po#fA8eosPSX@E+m1K(=;TI;IKdefwPIBxLS5teKXa?iR&){e~p(hc51% z)WI!-2Ac;=OX0_gZ_L9tUO!EAy7w*Yh4|LcayEF>s#%iFmXwGO47|!WYH+6Jxnz`1}7|d03I9vu&Gw?_j+nW6#Z2KNiv+2dcYyzgkr|#`JM&< z={(p#;iJ+p$@o%+><#ah)#XM@LuMmnh5szuUMWM0^UTA**}p{)joZ|AZ4Lg!+j%(s z{b9}AhA1N`Z@|*@(w!a`ofhV_z$1+$>@qIFft-n$RpxW4^lvWMRDd@dVTeXy$TnPU zghq^-iK?}J3|8VLNcrVu>>7~L!mFhHr~Y0NJf62YMBU*zv#=#6;@efFhjo95gmu$#s| zQ1XU$oTe}9Sfb7swf=R@{;tjc(D(z@cm0h6T^m{rAi32#H@BMYta4j(-?P>*YLZGg z%+{aKEiItsqkNj?ka3n#oH*V(5lV4zPxUPVCMIUNSCkBvP1?TXq(05{?^C1s!C)&EivfZ?&G|c>1&+wENrGAPR*c8VQi=xwHhv_nThE&`v zy|+sBEm9G1J5A$JWEoo(6o)=1c&e7!QvayzJV%DFxG0l@bv4eD-dCk#fpjdC>Hq+S za}tFW>0Tt&pGb-${mk3jHk@Y?GV&vsG)s@Q z#(V9sMfBkZb$dxbD^0Fwz;ccyg{6g}<8F?;?X+!_bwBMv_=7cc#q{-bHeaibwHyv- zu4^qn-r@e}?6*u1DZ02YS5Y`Jm@Dut;S62Mll%O=kP0H2*^kEaGJmqlTy-x%GEpK@ zf(0^Ho=yROa%O$zPY`f84k6k_*(v?cKVQ+~^>6tBb47l6`CN@R1!+$;>h*>%aW*8< z6{l-F?A9kPW5~?RSxRzEyOf+=8W;wj+MA;JmD>DUZJVY!x&9Y4nXl=q+Q7~wP%XAO zG}lNscB3e5j`H&3u{Dmjs^5DWVc>T5z!*(<@Ufil1cN=n#{!Hw-YP_J%?ZRBj&wKeC|&?Va*T2dXLgT0b+5&< z={aT>KW*8wHsm?GV395T#M3?<>qk$Gv*c9YKW*aH6qZJwX#^XTESVx)6rOpo2|%5N#ov*JZKQoL(lP05mZ(Kq zHkO|Ml4NsfXq9LSX@P>nEAA`F-coyjwBQ&!N$^Qq$v1ZVOxjKqJ5#a=(tEB{TqMaa zrH6jG<1KyGqPhr?$?^v-Pu(RUU3Eo2kmh&-NMK>6!ge zQW0giInubIJ=d0wCx~2v^div6-;hQiP%!59MN(TN0YCGx63jVph_eaXKvct&!cON< zf~%WVN|Kk)DiDZ5%Yjphll-n`MCA)yH9i4}4u|`z+P~BJZTTxWm6o_M99ZSqAeKQe z84M{4BoBt<@g(W{AjtF)1kvuy{vfLeYF4AWn7f2hIMPmeA;K`XNMCDP**mRK( z$;;@pE=)VPv}|ce7gpW8m>B_G|K?o@RTivHI0A4u@$`NgCn|F|MW_M?TL9@I;wWOe zfYTsgVcQ@8%j_$$WE7%|BG~6d=3_BG*j>())l$12s}LlXJ`gTt;0Iz45h~e$PU8&_ zTKFuU&wY@yz@`7gS2Rc8)<#It-BkD0x`VX-yEYnj_gEV|-r7k<)I}hQ#|95Do8Q|$ zbKM_CM7`lmj5tHDlHEe|LBO3?Q17 zoJq90CFZI}mbkM(Wh((%O4!P8$7uwdkdf4Q$o8@u&%)%;YlX0a3#%BokE3NqKbTfrPW59}`aX z+yzGH!U{Hov!FGEx+K&%3s%C1=`87+EuD`_6Wqe;R zTL%Ee7sFY=Fae6?VbXLl|C*5!81*q#(xI{d}e?Vnx{R{%pdWkWgSs13@&TGw#3#5q^xG$2MbCCNkpHCW$XgH4w z2sb8d+er|iAwxv`3xvy7fpFPMNumLBTR7gfc`}4NQJC9RQ$?g&NEHETz%y(mvPF3? zHuh98w=pPgb=#I%CB*C8$LL;|7VekCH`Wrc-13R#1>|kPEfD*k8mB;ib}OCjxSINLWkjVI{eC+c_4*SpWvJuV>p@v`3fEA>~C zwdQiIzEsCg)0*FE7g^UEwC+Y4Dd?bFhn=lPGIxT$I#IuOzFvQ>c7*pH65e~oWM5dv zdmE-{!*8`JycYpKRTb$pA5D{_7_*)u!&Mg?<3sck84+yT2 z2G63?*s3G}*{US**{Um%f%&WzQ-Or) zVSwed4kzq&uX@_5Z9q1V0g?@5fMf#!63|wVfp>=i0&mI#TrE0cbi`TxqZ?=L467OM zFQ4iNNNM><*|}F5=jMVXZX&sLf_>D&w@Hj#AuRWDQ|Z(Q5}4HR%bwKw#;2yQxfm@6 zCu}%;8|J!2^Bsjhu9&g)97%9gpiEjn#F{Gjw}RPY(g;x@tO!ww^htpcFRVoIMJpx3 zo{)wWCk_9$$G^>mL1DpP!SxZMqNrp?r@JYP2e=yN#^r0P^>0iaAzNRusTbL%IH*AM zEuS>d#R--pZkg*orW9zTTmG?UE4nW@7F?+RmQ1%DW}`Q@(OcLF+u4-w`3pC%8yxY1 zIu2Q+-9x+#%s#htu5TRl>3oL~&W<5iJ3BVQI! zdUHVOU_AKJRWaVAfr+yL7FguYn9PU&ZSD+M0(k`)NcxQ2D3gh8lqYkwWMDpUCIkDo zd=80X;6hO!A%DVka72!?olds)@pd0SpDwW6egd({mmGen@;QgS1pFc)jemOG^`=kZw7bYzqFli~0-PN72%p0LizXb-Cub4M&j@md(NBMf9h)stm;&>Zd z{y^j+`16tnW~3|OG)DR#;j|~h{kEmORvxLxX)7{pWZVF0aGNWEG>Bpl8fQ8y2w|Ij z%@_%D%439BTRz6}d(YBIWzZfFJ7<}@QX8gd{9CPY&tedG>$8jv?5dj`B-Ic%tBLY0&e4=2wl&3AX-tXEDA=6O=7mSPGqJLb!_YS;BUoJOe+*y{C`3)cGFR0Rkw)y-8uDp-AT?rgy2Id@q7fusuTR#>l;{KZQ7yA?CO+72zH~BOUr672ZW-+( zUQ#?W*;4M*-~ei@b2CP|U49~VsK2inufmmcDRK1C9t=N(pz%hne@T;f6+Jdd?b&8<7M8k95A|L!dia__vP}G3-jNuc`6S@M@D22;)^hDk6Dm~;<9S5!;&V9~}f5|Pr zfhFMjU9S&cc7pG!IvRxkjC0SqCzrTwnZS1K{KTMh9}DNKVzI;>(X2ERW5WF}xOnwo@l2*%a_Sq^QT@q2)_AEaYSTF{=o zDFbwRw69*bvjl3LwPq%hH-#lLnn1!A?WKl77~Y~ z*b?$q_~Z*Mzsz5sLX6GU zh9um})3fOTnjFOKgkC1()%XmA8N=AtbM2AkKNdqq%Q?=U4V}(0eU8is{>1%`%V()W zxl;AUFs>iy8u)>EfsUXQ0t86H7ePm#C26Op8O|->7Rq zQ^kr5jFH1~_`ODeT+-FBB6@AVM2a!S{FXnw7kJN*!`?3}fhXhv$P4(S9wza1_7HLb zNoaa7kOhJjA7}||d_ZqT6%60PHzIB<{bSQ-#IuomX<8`2`S(M@UANWD^8z;xoB)0R zV?fl9UnXD4=OCsk%;r|5GS{!p-));b$1 z*#(+Y`bz1<)xNloUm4}n=lC$6dw%ItnwU#QavPl{lm?6S9BI+RMu95X|MXkvrZoPL zd#fQFG+EU>r%7-a>=(`GMaeYSIWmfa(1|jPj=cx`KOC6aC)(`NiM#WZUz+ZJH6TI zpPc>PS)Ysk;-bfWqCEeZwyohBYTc#{E^Bc$Q>B7lUN=hLZ>57ajJHVl@1*Z8(M&6k zSG!)T=V<=A+CTM(YF{XtZRj<|-8)#ei*eIOdaz}OS#+eu$5_&7`H5D|bu*`X@lST1 zSwPqrAD|$DDBLPGD!+2M^R9tG*pjI(bM3OH^&Q_?vtMTrTrn#9raLs`2f8!Et|oe zU&wJ?8lo@_zxB5Wjd1!K-^0yr*X#bEwRfv=2mNAmPr3bGcE5Vdt@F0aX~MQn)IQj4 zTH}`8>9rgvLgR=1{vrj2td2f-(M6j6QIiTo)E%+zw5DkarMsI`_~UzP`~FUyrdRu$ zYxEAQn8$_1zR!}s9_0|D_Ib*N?v7@E>pks@sZRQM7fW_E{ei!QoVY33!;~I4`@GbPyc*qau<$7|bHuI*k=iK7P3!r1dZ z>VI9;2!H{X(tLgwbW-Bj}#6heIWGwM5jb$?yffae;q$bAC!C-8@#K{{Gm-K>?(9( z%#i5pYU_ua5RHc^W@%SjtBI=zBsyFv|E#Zd4QslIm-$AuI}g=-m{0H05;Gm4d8qn~ z8#VdLt+7s&a@qI2QgxrS-Y;EzDaQYrU#8}vwrreja)#xLksQ*#SdyV|L7Hx$2~SD! z@1F&3ykl+0E%R*~IBWD1o;~P0mtq5?KX&9psK#9)38kaen!+w}7H1l5ulZq`|46G2 z*X(+&xIg$4-=&hSDs+p3XwsNT;=)HKJ=uzP7(mIA2$+LDJ!p4WsZ=YSx#0gk+79 zZ9s{o#Hr*P0XFD92uhDmHc~>WN5b}YNP&LY)8pdBdr5Z^ z9V@o0+3gD5EOw&+~nF_o1w&YFbFb48JbH@N>A=Ejt7s2|}P8XcF^=gn@%QLblWe^vc`o49XW z<^u=&gI^tnfFr`O=W~fQyk<<_@=mE6dd>7#RhqBK@uX?0*~VJ&4Q<;>bqlTCRy#BL znP}qN9UDY-@K{-WHIl|QZ7T;C0~Wr5mjn!im80)HoF zWEKshy`H68`D(9t3yXKA-r4)Wt4_A)RBJiI6UAw_eQ%=e&}CE3wd_*sxWl&^nDUT~ zc*OL1Q%K;@;eQGWD8jIzuH!uyedz6qj{0M1q_fPm(ePotXy&l!8-rb3ce&FV>guUR9d)2oh#Hw%9P^%^sS_Kw6ts~ zz1vF1cctZfQjy8>+tRrzeFtf4myYcv+DSUbO7E`HQrweX+>pMHRPQU1`f-WF~`?>$<^l&(QPU=sW_A@0q z%U^&#_H1eCl8N2n-g7QJKVNEpAuT=9@hk5JIXL3KOZ5MEdlTp^s;uAp?0rr`5d&5* zK$xTw0tVDJ;)GLM#DJi!g5ubAcSM}JwME;hZHFSD21E^_IBNt%1e_4(DGVykf)j!R zIM1knpa^`wT@hd3?)ToizO}yl^F`#)rhga;7+WIzD6-wcn2U5q3-=#pR3y4w-eO}KVHjmK|J>n5su zy%*vSZgg7dqXWG;L|yB$raZKT>Hlm~!&xG8iz^+&vd`SPlvqEx;3N?tSV0IcjuG0+ z{6q@NMMj7oFX1$Mto~bu_2%^I@NenWO)}`Wan(~KdtaojZQ}v?b3e=9tf;pQykn*j zvCi`}tMy^<<}~M)H0ptQrt{%G{p039=ax+B5k5K5CnQs!u{qYcC8GMQJly#LAJzLX z+Q(yjbg2&wK8*L;l3RU=k0$vr)&G04b4#rA9B-M<1Uf(MX5SA>a1b z=vykQ%?BKn6@djxoI$3-F8!*<4Ub7Q7hkA_K9@i`>a*q!Du0)v&X#gQLHJ+MmJ^*e zx@e}|H6Bu{OP_K@JaOb#l0CYQq%HZCqa^;Pbs5Pxf1#cIUC6gH<_-{8` zJzttfNtSljEU`4nhKk&mxVOr78g^3IS#{Sua+Jey8sQEm98QU`AYPMLN$1D4@d%m-)8v=9K#r9+^TfbI zEuOXINHGQnnL2N^&(Na;TUm0#M6cL?qij$f>q~=&lEVWd!(?rgZg3G1;3aKQ! zjj{Wc*6`NPFem4Pw6Ya>I9EsOdFj6nBOPov>z=eFb*o-=ycxJj^XBNTm3E_Bg3OAR z`8pi5KJ# zVQC-dK^vZOxiZ%LQ`Vl4Usk_|6$9DJ5^vg^yL6037i-4yzyu6eq6u1v7vih7S}I%O zmhd?wJLv;oL^jZOmbio+F^C7P4PcZd1aJxC(jJ3#|j3^3yW6y+e)n`IVitA zmK^kxZ@u1Q@n^|F($+6B#TGTRC~CFrCjab~S$!N4O*2~0Uhhv$7IHsjSrHbh~+jMhlR(EH);*J8aHJAhDEigqB6Mhm8C{vJA3L& zxnE;bx#mY*4Wc&e-*Lak>AjtGA2X~T9^B$Ipm!x8ejBK$+9H^(Tonpj2P0MqS#Ktw|xcHLz z;kY}t^>xL5*sp$uqjd~+g+0xOko@;#fulW1_{+i04{`q(>I$(CTwp|N=5e?PLNo%0 zOuv+wJ(d4r=vTzoaS>#t0efyI=$HA17ki?`^U=X>AeMmmhxfFk+QQLVKTmti*L^0) z4p+(H6XkvQ+qE*Jr+QulYebw0dny!^ttkSI2( zd6a>V@jRko!B?uqP70C+=NDMe_qkyd7rzAGCmR}8U>Jfy(=#yDUB>@y`O}3?*2Nui zC$4|9;c9W5n3CHpfOy~K{+rLw5;HkTH{>QiIQ-=HKGi1}Wx8vNAGYgYxf(q|`3|IWGO*}-BjHr$U*tRg z{ey5}`SYuAxJ5P0wMAO{pSoHG!THM$0pZWp-0cu0v45Uwqbta7MeoUo4|0Jj15LE3 zr~ppTf|IoL6#e=lO|LNP`xId*@cx!Oyqh(QJG!KAu3j9LOBauIVOuIj7e+h1A{Q#o zaJ6^a730k}<-giK5wmXuk_?RaEpS26SE6U64r%Y}xpDbz?Vo?M-7`8Wx!9~!`30bbCc{I<$cSD*iQ#;Ul$ID{DQ{33{hl#33ImqK3GB6IuR zqw8nrR?clj9`%OZ+*bLI+kM|)TbXIW7?mOiV*w)pYf*URFJj`aMJ6lziCM{FUx-W$ z=@v>c6kF(hm>0 zP6c#;vWfMUudCAh8*H(m_d)fOzbnS0W=DXYC0}4we9t%bI=1|vA^q%Q5E{4S@`*6hD-c@t z1Wfh+{f@wY-tL!&sDHk#)xl3@CxrhDhdJMc{{0?7+~t*5YgKOOQ8PKW0sPH9;*qy| z1k4Lx6awmmM&~P;E7r1I{MQo)FOf+ZEJVHy z3<}~R6vY3$deHD-)@^5WYk|4|RWGwit`Y4ZF2c2gp;zEXK_P2-&{}wCZ`giS-?9lq zA>#+(q(Ml7KL(KuYT0itG9R#IJ8f>EV{u_OuXFy%wo}MUjL~nf=`HNs0$vRZuivb8 zzO7|zZKl%BcUPo6tngnh9efymU8~7ij z>{seS3u6JU0{jFh2QB0T?(eUhguap;{>vo2mYI0VhRk@h%FFZ8AEcd2{i*LqPfFnd z_jsbTp08-Sqv4vp0uKRzJq%)<5JEJ-1pezz)z%#G;zOY?J412S4f|?zhSuMpdcPFR zmg?sv8ljf$at0y`{W~wR-mxhWbe`dOHdEzpP3}@gkcFVWcjoi!4K_JNOVW;`c9lmL zqZ>$6!C=;F7YotII!an6#Ed3$r1mXOhD%8oH#c>Y_jA#ij+!YN=UU|+P*}aCM~Gl$ z@Cnlh6+T7B5EjS~)&tX9;PH+M%p38cwsq5oh&D_7l%xxUxdVM}yC-!N0RcU+f;WrZ z)Jufr1x|5T?Be6PtH{f?M9l+#wH6ooL1WBYIPg~A7EEG`xJ^_z8gM|x)pi3$!IT`t z0KG|0nU?ce5{Iq#fe=U-ZgSnOcjzz5Z!oeM=^hZaV;olhA?elTNW3+(NLn-OXuA3O zavKoOJ;*SPkw&kPY6ZgUwje2V}8Pm~N2!dUs!l~Mnlv=%>2B7BPMuZo?g1)B=m-RINT+NB&Fe z>b2d)I4#>r{pmBRpIeyVs8zaYwKD4w^<_oAdP{#U^T(yWdKp|4AOGmjU+c5=zW)Ya z?F0YIXtjz1sgO*Cq)WJ}b2yQKzWdB^I=Vj}7Er>0 zN>NM9b=vIWS6#Bmna#^e8yQeDSN&+TE{;OF>vVhJ9o9lmVnELwJYMR#cR8BTZk$Mw zR>MYyiabCgroCKzrt_@QD>dAt->lT$)Un^|R1lk&yl{EBup2xXpeoGeL%dZW4?4jB zvvU9=&A6BsS$2tBElf+>f#qh0uu z3&*$}>zoXC$#D*@4hEsoX)Zd;#pl?NE4#qvSvua**c)=KsJ!BuUvt9#{FWm9k!#$DCPNoSXBO}3qr#5MPE+S4h{9=q7w^ALuf16}dHF58dMvx_mn zAM56hchO}I9~;*5>}y=l>n)xvG`Vn_SzWcC?&ABL&UQM-#SglMN8D|Xy5`5-^2gkR zPq^owbbXmrHoK{-+}!V7XZ9s8V*YoDmq}p3kC$ky44o(++%2^a%Y=n8@Fh8RkxW}Gmo5={ z{N3J{_*0qog^c=AD!-8d-%1KAZ?){aM)U_E4~x|DthFvI(4%8LutXc%YXP&fM31X7RHbb{7S)a+(G{3cyFO~>4+GDFjQR36amDXqjvzgY|4w`^tquFc)_1MT;r zW*=$6N_}jNt%}>$Yd7)d75WF%%a*>^_Fmrb9PSNE{kUbG0!cU%y={q%{-RbPE(@c( zgu$J|1#SJNVt>K*Mt3w{_Z@W|Rpq{p_B><9d(oxuxTILpV${kSbd&AYO}|HE!{yzQIW=ohq+>bLO;IMgJkx4U$c z3wcUTvXf+cOEy@dp^_aZ@t-CA8pkC$MCrFQvSf3MejguTylu1vb=6AF`G< z%(noA^fM!{`R~16Ed+&xtql1G_8&vy0t^{0Y+Iv1#IPOU9CEhqZj{cLI*?wTlIbC- ze^v+ufN4+}AQ2HAqIRlw1Vz!PT!(-`{m!^gx{DU?rpaDv>0KkW<}^K*`*^xu1Wk_F zM1#f?wFJt|B;E5`Eusp&4fdvnsT$8Eqes&<+WkBIAulu9t+$i9s+BJnKREK6)QXLm z6rL|VWoOvvo7#pfuN(rETR)x`jrdBcNf%#L?tfS5i96(q^{1t}NlIRp=C`p{K((QT zkV|1_ao~>9>WP{>f$UDhYqrLya7tgb5I~l9L<;0aU*9Ig7dd4FNyK4qKe~?}xRVQe zyZ8u;Hpn289O+~j{8Fb!IsK#4qh0i8Cx3F$F>d%@oYpx#))s$uyp!Xcp5Wvp%e9G4 zcHwVEHIY-Dp5|g8j(<2k!!izp1k!U{cAk@So&3|uznolPW=#!M2EeA&GY`m^IeA*a zJdtN5enBLtlxq`|;Fb%1v1S~3nJt6D(JB+QW|kH6{w|9)Aap5xQInT-%py(R)Z|kQ zERQcW`U0Z0${OAJJ57Jou-@YTAedE0UcU5=KN&NML#;JsZ4Wb>)iX7XL&F}9>K9FJ z3Z@1gza5Byfs*>WHC&~SiJTB>6iCAFY znm=k%uKg=C?qf7y*;doNH2b5*BenQ6opFZNoUZIh+_-48>IBUuYPiF;l&YDkcPl>j zfw&MV_TT1T6#7CoL6hH01ZSqJJw8=^h=Z|DL7|&~c=Wf(10p}Tr$e^W zba#88TJ_iHTN}6W{Y_k=mo3DKcT!)W*(6Pv$jq0Nz5~j^Q%=0d{SqFOs8AtP7oV!h zd3N4~8+7Dsm4{UxvSgF^35_4oghy|_W-ps%knI&Hn<$?1#UC9ay=Tkp2PK;$r4LEL z^U|8DF<;86a-@P$_-WGEY~5DfTuGmj>Unk_c~|{U(;;VQ0e5G<&E3)knmnWOtVRnp zgI4{L#;=g%1!Y3zb-V)X=_3(?MI}F~(m1Tq&|B)ik@j3_CbqLw@lM&!b3uw8)WBtY z&>(lNXVp7a((@aK+^Dia)BPml`mjPKXf#P*zgDa9TcfdkNc9aR4r9<(TEN>Iu0k&` zLX*F$(EJ{6+Gj2-7qezEadO5Qg7Og;+V27?ETfWS$z7==Ch)c?3$r)uDkYH*`GpeJ zQXijIiQnCrOaH^7dREdOxItRay|`ElC+hfVnz3}J=cx56rT>)Pp1?267Rm~J22p32 zPXYgTQRUWOYpaM#HGM-n50j*lWGG|w$sv*)DPguG(B{vuJuPO?@SRRxOQ5!7T{Y$c zvP#!z%oEKJoHab(c-OU~l)j1Wnipry@KOdBZwm-z&6gEQ$MQeSu-iO)R zxKNYlEMwGD9?zFRgyz;(|_C|cWY-d-Zb)mu9Ueag6I2X}9-J)5OsSI?A%5opA^Xob9h?FWZ+o zaz0_D9NkAMx0kAIZAMveq13n6K@VufYVEh!*RJt|UM1^%(ba(JJ`L6}@w8^k{VxBK z>{#}HH+817K(5oI-C0s_j?`yzNxhVgHER^ms;W7*u@o$jD!?mXs}7b;K=aF}R}a(H zhv(*;|J3d3If*4oe1P@fjR#91R-%lOcz>j1cZs|!W0pw8dvZQ_?8AzyJKj=n4b>{U<~bw%G~Gi( zY6T3ktTKx88f#0-k21LRvRie=J2rXg2A&35<$Wfe6!`9|eEkN0d|7DjVYX4_kdAm} z&y?gWNzN9Or%9GOQJgPHy(DD!(9Sd%8wwYlc&ua)qOK9NR0&arlO$zZfL?o>B$Fkb zV$O}pR0%XDcS-V&eEyyOezmsk6#PW6BXd*$C8z?ZobK+t(-?HPowQg1_yq<58RSKe zxx$6dU9WW(f{gsUc^4@?P+kDtI#~)%mFjb3&_yzMkv#skWJ_fDa;f`BBH&rnF)+zH zXiT3{t$*A>B{jiXRI7Th_B%{Ru?~;dgTQUh)G=pka*5WC(|D{l%-5bv4bzj3UcU07 zeYiLW5;tuf3Ok44J;U)V36ex!knxa&KQN*rj39PY2K{kY10{IMK0d=}HVr>}P_pnh z9e<-1mUzCQw7s9y6NL!Xvtx~=9`b~XPztqn8Pb&^r)`|Jb6K3z)H@p|7KmHBJFRer z8RnBXoL3WI85-&xo$i2_wbPxP?n1bvG1YZv7xqLZNz|I9yT<#vct00%Ub+r;DFJ7P zxNxM?7Eq23BHzTo<&@rm>F0?q&@BATg_a%x{G2x7EEnZ%f}UeLnC298&0Ku3)6q`p z=*J>bcw05>``GnOZbNqv8Af(Zhl_a(E|LI~${Cq_NI|gZz^y{^ zs&D?pmwn-@57BgM-;5PliB#=mCV1cm@vbHajejp+^p|ElHwMat3j{?TP*S*3dM~qC zPu&L+R@k;FtK{MQ{EGLpv>Mp&=slw$Y8Vmq_BC2J$;Q*x3#{>DDgz~P=rm64k~r@ zOFkll`&Az;^7^_h(FpDwdEDdyec+>yef+M^J~6gr^r??N@-geSi*Oe@+~TqqECC@R zLU(;`DhuiHIvGl!^D=4vN-hSf?X4*S2gc?5XfjX-aT*?=QfIyyg*;!GW)~VC00Jb< z%f8-kA%45acThisAvhS4kw$Se9B5uY$v;nkWM zwHJ9zwn-cw)88G^$AnJ(nXVonDNV;=qK8X+Ac(W%!m|ygrcW8(}Q#$oYEqFqQK5hMD?J{F&riH$O$;)sjjO0$T2?by^7RSjPYjWwJpJhHvp}x_@ zjPt0w{v^}$;T?sXEELFO*9&UqJ6fubHQ7!WDJ!nC80&<=;>}WaqfEa=$|g(g zRC!>EfeA%H>)Ys{Ub+bq^^R6~mhYfr`l%eOl|wb*R!-8|r!{+44_m}!U*G%`k&Y%` zXyfNvzgDw#rg$2&QT?qxUEvqM>ks(E@ARqnYizr#12JCj$3S%K86NE5SE0!6f&SV> zi;W3cx~DmzorU=NXjRaI6+R*Xa0_2|iEFsZWj!9aK6VRewwKrZD~tTOZ~2lX=F-#eJ>Lp1 zBc9gfe&koa{%e0F;vlBgK)x5-;4;eTI$hBZcC$t!nI|bLuuRh&fa>2>&)rU6p((D` zq-AQnr)G5SwU&vNw&bsk*M5L+?4n4s-|)iBw{=K3TE5d)xAtLkVIO_(YgZb@nyoDT z!6?n?dY^9aM1E&K`*f49+C@&${3~aJPSLUOC#LHYyq+) z0AxqKLP@s()_uvF!n+-^#&_6gC1T7FA8L1**G^s$QKEjW!0gC3#IE5=7dN_ik{f?5 zBuUfM$5RZqheANv9M5zya@tb_yvSScmn zOTz{!X{9CYv}8ZRBDMB7t@yiEoTVifYQv>kdzIGSq7Bovne))#%fI(RgI45P{mwOP@22nI##Fn0d%9u2ccW_D&{{X0 zkl#UW=z(rPOUUo#Mhj`XJNg0&LP>wG6`gXavbdPaJh-eat)GcTV^D?mWG0$!H0^2= zQo|OyIVpEhcNh0@NpF*jR&GaTs9Ap_8V!A|CMOdi-UZJP7wzRj>f(J|+}|BqV>v<3 zQJL4eu&)DNh}b#~z>nP}!22!O{%?VO@O+T`6Wn2pOL7=L1I9l!ug^!iR%g0F)aPe7 zD)a1LE*s^-B`zN0(gqi7_3LDiN^Asx-PqCeUgv^vsg7v1_qO_-GmH5Yr-(M(3a(`>7Gunv|(RZC?z8_+R9Jkgd#1x zjf{EKs2Xs6c{Q>Ztq~h01`Bl8lKBuawe<$rIL4eDg%BG%?iLnJg58Gbq!bI14f{jO+x0-bx?inycX6Js|5TSXZ zbFl;LbO<5k&pTnPNfY!|?hd`&3C}M)e@GF?EfC38%Fca6fdu=?nY+nUO68qpyME&L zltFvRb~Up101=cCe=z1xG(=`_;||ZWFJX_Il$-pYX%!2VEt*rjDCG((U6`$>mq{lu zqNx%=pO`8B9*ORji{{9Jha`GLo_<(fe?l&4wzUL%N*72+bg9ot!$K)Q6#{>T2#F<@ zt=ag2t+Xyw<{uNeYfSal-%9=G;(wCjH8Sc)N%5ChE#U_lxJpXCW9p^aTK6o}B?a14 ztVhMVRY^V*>}&|ksB%Mk@uNEeNe+~rDxFUe2xkNAw_4L3HQ7~TYQo*L4xEI_5Ef;v zVv@rU6IM+5K~`5-Q-kBda7FcS?_ag`@mgA^bI;V;v$gI#edb>}pK10v z#D2}bFn;5vm0Hk(?QGQLo0zZqO#O3({w?u)6&chM187h=9OVNg_Zzn z(L)btBEYnB*a8SBk_TlY7tY$0Jh-y?07voK}G0|xykj_yP1AG6?QJK!GCLf8UmW+@jpYSPNz ztv&)0VJ(5WFZNI@Fie2`MR6p$X50;Q`>g2znkL%(?xgXubcLh1T%n6o6he`Q~5@1y|8njz9TjXI$7x8@IHKb6` zlcP2KNwYd-m#F5m+^j36=!V<%uXk$clbSqlQoiOTKKb0s*Z$jYy>9YzyNBW6NX7n= zix>(!4q_H+#@V`qwCN|U_mY!FTF$J@!K_K=R%qommR^0y_L}UdBX`wNeRXWVU!t@N z=m_?)pt0?M)}L@Oee83RZSUcH))uL<`K(o>e>H0r{1%9nFSd2i;ma;5H6CoVtF)zqJ5+u_JkDVQ5kJPn7YiE?WvVcT+w187&Yd8HsCL%UuBzQMY^{xndd{QWa^C&`y}3rOYZ(VKwwR&W-8e*P z0nOcmy6HJBU!=uM_JN6jp;qhOo0Ol{LVwAdzU&QO&F-<(#~?H7JrLI*h_0LbjJ84A zhgUm1P+*Ro#HSS88tM7A|r1@Em2tmZ46av9i8vt z2JGY-DC&?0{zLY~7Uo6+Nc+5M7%9+V1H+i{8s-XZZd@WajFG zCHl|LjQl{sOsTnhJAVR`IPjA$z9{igg}F&I(nk+SgYkZ z-V$yzc`uH6m_noCDX5j|Kgty#a`y|2FGk7rRmP=1>};*afsnmrtP*S&HR+&xwKcqp zM^$l}+Qh)Y7mKf=Q|=s^dxn@pfj^NS*~U-b%1f#LsIza~)i;&%ExF!rVsM4ud^9h24@5D!bX#M(%4RJ>mO*+>~-Dgex06&B2`>uIl}u6lNn6^ z*GtbswCq@b6iZFIt|~Xt;$SUwXSH!}mbks!xhc6b&ruy+T?N*Ht}=0lSGotcaraR3 z@9n|E zsy;na<9qa}*?Rv2I`bjj;W2IXsJ`^Lu6asFJ*jIR(M?b2s%EWvTALT><RC~Xp*M6+U%e3Q%ilRCFMq7Wa zJ-^gKs>+pGxL(=(Mzr#1M=}((i#=Nl%r_WK=~h9}#dHo&!}4m-OQm&1MXiqHUCfOF*Xv(160_&oW;1#;kpvMH0&QL?69rZ&p*%VpA7Ib^)d zyjk=b*=dqQH_2Za7~O%!#F&kHE%J?Q<4Zj)RrPt2ULdDjD3@kZ$8_~_88%i{jF;Xw z$>RJ+VwjNmH^ZS#+L}k-hg_lpA8+9=Xydov${*U!*LLt0Gl!NMT{UFSq?9vQA1@i~cO} zR@$(QmQ`tn3}k0ZuO5WyP=129+Edfi$n%#D&}^W!TC`EGUarOC^`9^K1V$@X9*cbR zx=$ASgeqdGzi62syuxGWn7n7Bf#hS4bD(}=^Q`1kv*N@Xy!vauU4#}JWHfj6LI&9}i{rZ-%ngolp0MdKz- zZ??h=jv`0oC`hVz%XMey93(3Li}!gsZhrrpH_6+(T9V$L%IX{3{LYqep|qlW9VNvV z$pPm}sF(0h8GWwRvHcp1$DUj)Ta1;m@seFBCtPElMYvX!MFskLlf<`4m@Ls0Yd0>L zDiD3opCxVYvZFbD$;XTQ#jpFf-t@P=<=X(0F7_L^n9Ka8cYOMxKY}ayu7CJTzZW*z zt)#L@YR(jYwp5I=S!W~OS(i)1@1>l+PF}o5(ill?ML@y7GT|63TC*gG|#Xh>EEA}tLIADygbN;wAOxF_Yc+6&3q5r zOcWEqLbOHJ8ctSI9NY7bZ#59a6%zx?SF%DpO-jQ8a63HJh|2^IajW zW!>Q5sqbmjy9f#v>$bNl1g)KoJOF?oyQ(s}-CeUij77lqp4MuXFJJ%!tsx3oOV=p& zo=vO$A^AkL-Os*s8dPenE7ho{FRhWHqh*`d&6_KEBTux%Z|6HLTBQS5D|;+@vBEXx zd)9xQxjFrritI)lVl}-{;~Zf~u2sEGw<6dJp#CL42<{4Z84Uj_jV5R^NlUNQ@|&Pm z!YbG5!eIPB*uukIcAQhVN#k7HPh@wS5T!FEJS+j%%Eu*X7J15eusyjN@JU)YS3I*V ztdiYTb^~YAq`#*7>ikiv>vahC1>rB5$O`bz&@W&X}m*k9VFGISrQ-&eTWO9x2>=+ z2~?%w$_%9$0_QpAnHFE7tuIr#QXBHQ0~6%zT1~Dus(F~K;Z}vm1t}=H-)MWvx-S>XxYG1v|SFE+^1|zM$8+;jr6ObHgkd7hkY6!{2#Xh^*JSQ<6`~7tq;HCmh z&5~ZUoH#nFFE8>((mquA3-6a{kiK32d%{-$tyHcR{mwisnPa|9OWQ}Qx7BUf zSavs$L>yLSq`o)Cj1a*AHqJA<=~2&^e*E0mwDa4l?`XDGPsUpyVw~jHZRxQoJLFy8 zfc5kSKf85k9fkT}b~g-;%HRRAyhNLDM^Nz(L;$cxh9c{%uPfpHfnwjYKHO^Gt8HV_rzTklkF zrM^8z8~?7#?tPv%UZ|2OF2~^(l_m{0YnWp8$i3EE?+=|L?&R46D*#e%*5U;ka&=*Z zSN7KyERyXn(KC{~$S6;H|1aROOPBerz{)_({zteBen?&bq@bo0x8r0Js1DvxU8MH+ zc~mRr#%;{cZF#B9+Mr;q7enylch`$6_I z8WlZ=9N;1*HHSE5D07A--BeF>S))tlxaeVb>?2Mdbyc}DM(ZbBf1GxnGA`4Q`Ib?o z&$we>a01}K4DLfG-#Nh_b)y>wV&7gqhuP9j+Ehx?$GU9zEj#WkAy>VnKwgK)@*&oW zLROr9l9Zh+a*DYz-*u`iIZNU*r4}yS6%sIo8z;4w$$XCQu~Iw1X0=V6-M34_OsiqC zeAZ*TAMnLXlDsTzfcq|%beU8wk@Rh8_nthnT)zEOqA#TGTZ2pkQ2ZL{`;(-r<<%bq zf^o$LOL|q|AkbE=wJy@n3bdk)UKneN(Nj0JY!eQol?Eoj!GpB|m3Q!-dP8b#hrv)X z4$wmY%Ko5wq_#d(#~r18z{-Ye;I`DMDx z)!IBk%O>i$+qCjlExy?}NMV}Fo#w-w++%1!^pwU=YTRs)6jSweuWJ8yRX*1E6O|7% z`B3AJat+R!oL2+$bCuq=UQ>vX>Q689St~PSs{=V7;G+Y4_6Hx%Gs{7}$m<0@WIl}Y zq2B9g^V!xhK3wXx!RuHbE-{S#h^4-AnLqO@U;ee{SPVR*9Ybx`(7j8T);Y}X9!~3t z49eHQZvBU(;JO7q8t4+Z#6X}M9c~ZF^HTbb#1|_J6UZvb&DwaoE?=hoy+;FvAQW8{ zqtEcDOCC2LF!aIXFT)Bfu&XzoqGM1uL#91Q*B=Z++ci~r zSau1A_3>t}RClQy2!Q{P0TkG3$se_#Ntb_PdaD=-+fPa#m#p-Gonf_)SNS+^5qGw(B))o9in*R>8uB97va4#qOyIPw1Yh3BI?unb6-r{iPX*boCOg5|e=ytdB zG*^6wi|#b>X__+(v-@1xY)1?M64X%-7|F1b8R$G$ztHLPE`mq&qU-yzD|pqFEOKuz zHq*HpW@@jyW0#p~{?hkd72Lv)&8fBBXKw!IuJkJ#i|b0)c~!1n{J~9M?KZA;%|E%z z*1Kqf3&o;k828CQJhl2sV}F4sT=oYUeUOwNEQ3Z$35@IOOe0qRfK<(r8ShA&cctnB zdHO>+Zn-pnBvqftULOno^9>lq$GUW|lD|MHlE4^5n#5y5`2mJ-u1-Ejlk>H4nu(Ia zbQtnF>1T|LR8g-vf7d*}UHdSoW2oyK8k2BJkMKx^9ST2HhV#3HH+uRnd->%Dxw$91 z@^_{DR6Q&B1XlUZW=fWQBg5917&H0S(8!D%hoA$;*CJ2x*)q|n`R@~rEtmP8|C@=% za-TBPphToN#ATiFO=TGQtZQ|j>-vo=V;ekKYA{IvGIToYgk0>rqDS+%Ged}lR0xF z1-$*z4&|gq%g(gEgB>HVW4x!)2L^48DfEAUva(Is)Z}VDwUe>vCz#bvXJRy=)8`=i z^VJ|@dzg3@uy-5iDCp?#(D+`hgN6Q`&cuBYvd0bJ8`=lCVk_YoN}bSJSy>lkNW>?S zq>X5?#9LZFUf)q(XeZBgme5IROU38*R-?8S=`LmT=82>gqLfBG%!EqV zE1q$(&?V1VXleGct9!+cr)04Wmt~ogcZ?z;AG#F4Gk*|l%KVwRA|zkA@Quq>+97UN zd!5S|-27;>o3u`<-?CN|5#@`CT>wWiq9B4)nNXJNi+-Vn=!(Gh`qBXkhz< zMn)UnU*W?nU-*a_BDH$NN4rSv6<%R2ZbWV=`k{$inIlM<0ai&)8%TS3ICx_&kg~C| z>ogfOOCB4b0~YzJWmdz>KO||?rV1|@fZXpI-m?f!P*$NT>nA`}Z|yFN_mGvR$bP5E zpdDE4{A@md|v--ntu;m%nIDCG;9(DY}r8)2y&CP34+{|{Jfj2 z{hx8lx`HgXQSqWA&jsmXdb`G*z22^2l%$iTRf~_xsXF&OEn{UKtnoEAK)D@q8vg`K z4RRVI;4WTw7J8X#TC?_M%tDu!M80O8;-8#6n@6a8>qs!nCb)E>Ls8Ddg$%?TO0P9m zMtZ$VV2d%TzQrX?=CK@2cFE?sCmMMkx-i3)-(?BlNz2p69t8wP*- zhHPBfBYD2SV@@Bp zad_zxCvUmzbtfRP_{F{BGMZ>~?(aE$-|2Ffe&CW7F8R=SvpmJgCocQK3H#fZx!c?4 zF3Z{S`kn2Z*(x{Ydnapb8XMNy(_OyKAsCnZ(UuJ^{n;g_YMYxhe$kAo0$Vm45%u=B zj@fj1;!F{6rL*9|t6c)2B|o*%0!V)KLVoqM$t6>rPBv+POmXQn+p;V<9q*&NT$p8B zu4x4BF#yxFA^98`y$pxAGDLpFh%ppA6h9bRX4F6VrHkgfctJiEd^!)EU+6-9-NFk_ zUvweAbe7A!*o8N3i)*=b>FX}bFCE}R@{V0Mv?s}O7e27@ndaB6MPCqoVH`RA+Af`Z z?xOs$C8hv_d@(Z)u>PchzvEQTfy7@5JY=V|#3%Qd1x+18&x;{wz^?Rk z8I-1Q6nQ6lir6cx_9+PPeBnUEoCmR|HTWP=q(wu!r3l}k{m3Z9#prmBumI%}`Fvl# zpMEpXA4y@UJ>vR4>c&3idOU6%uyIegfvoxO-Go(cVTmMAtoaonR6qp%3~2!*#5oy@ zi~yO0p&Rf8(@7}$H@d#hx>vt-ohP^v6J6ESZsav?-~3UnyV;Gn#r17+J*K+0lU?6w zZr~km*E`*ayWNP{uJS%N{(d(ie;7wR==wh77Ut_`;Q}{dp6k2Njd;QJebH6s3#M(p zVA{OthQIE{zUzvXxgPJhh47qLxV|5{;*VXwPu#*U+=Q=<^StmYSNDzU!FpKZ7Or-! z*1D1F+;u;>2`mGgFt@ULTPqdcA>GN0Op{s-*TP2dw=eV1l3DfxkZ{sCUvCCbD;iy| ztK7hDVd0LNg1TI<*$7uO!d1XvoZv_y7RCq<+D)z$QtK2q zWV#!0mm4w5^}WaSz1JG)``xxzQxkbDnW{+_FN-}PATMttD< ze&j}c>Mr@xb^6YYSnnomut{a#z0o5}>2S>$Pq1}EUcFEl9ES(YSS(_%_KsF!>6dvz z2j4KmCH?b-$8Bx-2>b{?OND=fOXmv}T{_e@*Z?(=2bqF|?wAq|aDYk!&M?+S3}H{S z@Rz~p6DQhKMbS+FS|(ZmkaCpPQ58c_%!{$?2EA~KMt9-Dm!ko!Sddc2H?&|7s=I_5 z2IVh(UL%@68 zSs*V&I9P2Ra+4)KDVS}Y^-us}8O(fKFJR`t$vM;ZpJa(kUeD<+?85*rJDa_Kya&#H zzvQzoIC8Vbc4W>sxJfEt+0Bt!_$ngC&YdZ#;*+8YrZr`zUyfv%t*5B$RLLBnORQchOnZgPr&dtk1+-S<|I2afXf zF7}cINkDWvNms0N`xubhdRG}kz1Lrw(ef~#1@u6cb*R};c%&|)t)GSWE>}r}NEuxu z#Yqld3|TC3PVzbb3(06(;Gu~r)tb>rQl-bb7=}6i2A%EE+l8SydTIb(0DP1egEghS zqL~HeJyP`u&5$Y|r5_Df&x)eeIz?BUt&8jR{!9lkUPswC(d;)rg}(vgU83V~U^`I*+<-Yc6`fKb<^GhaIPr|E`nI(xDgX^hODy@W8GTsndvF62~?!I5uv$D;(n( zHx~kt9U}>N*BmL@U&jFc!0rIdIZ8@+zh_>|SkP#z-M^BGJr^wT0Q8+-$<#RXbP;JL#ZWi^@u# z%ylI|ua2QgZu>c0Y_nbE;69lZ`3S+T0Yo=h0)@#XRB;D6u1G!aHDxgdwM`+;tdH*=K{9Oi+Hnp|q z^ViQc5C%9DsFQ6l&G$e7aL&=@_I-8aZaNyk8E-nw=nzwshjQK+zlGxP*WYry6mgpL zP-XAkS0l7D{4O?L^n=Lg(06mWPSx6*wC&ZBLW_FUC4A)XUG%eKFl5d=$b8ted6Vqh zcob02bPO|-kg*5e^dBC5c_B&-3`^E*_s+2C5J&XU}q41&|Xj`q+jM@C8}8Y4evNW|mJ-O8JV5@SWombj($3P zhFK3MT}#&h8bI~_toTMrs}YbY^e_M-t~{f+8b<1PuOZf(ZW}^aB6V2V=VCotY3v;W zZuVTdxr*1Wz`NK-8gXgEv8_c(7rd46JYuVrbO51w;XC;!zQSgLlt%sMM@vHcvyY6c zGhs;Jdw8OG&Fz`gdm=)Zuz>ghUeWX=`Gh5~jCmGrw6K85)N(K}xKKGMXcI0FWGvoj zmX#^}DLrZ4*C&W9XcKNW7+IQJ%vGA~geH_Z;GItIwyqPn4AQbb=mceY-W`MmW?N@h zgE`JCj+|Le>Nv0H0@x!R_X@+xq82Io7v@o^pZ_97kMoWIc%R-d${WLojsR96{KhvW z*#r+tWpj7Hh7a2|{I7PA5JkciCm%o@F8Fbbn#K&8h-V>vJZ8vj*V} zD_lVsQtaB^ckyzk9~gQ7DKY!b++D!E>20A#q;v-ytejk}eAcqYT8^-mHOBGUvgA0U zE3`2V4a^8Cw1)kGijF(=f{fu1hegS`iSUP8*~%wSzkVfQ{!xk`Vd4nHl3<-YFN1jn zPHGkgcYmfRSCVV;l@i18Uu%FX!_{czoA@u^xu^LIguhBTKXSi(a<3HKEmaSgqWB?bu~I*9=yT8$entvU&)xV1sWYONZ#x*}-Zmof>cxYY=1-H@ob zp>=EP){1edOI^XWAPVkVmBk$}|Ic}bq*1ZI_Pze^dzFhTS2ExE&OGzXvz&9E``icW z3W5fNGF|p-m%Zt-w_FBvf3=n9%7zBql`g`X&3o@VU5AMac>pUHuRk|*S;r6)V17M` zC8h=P?D+qrQ0(&dn>D@D5T2DCn|Ct1Ig=gBmW2W+hW~ep;;^uDVK76|z^(hvE6BTj zf~NF5xkCBL?0Ofu7QS_n6>T{HOZ#A}F(lXMLTm}*{-{UtC-06o$e#-}o9_?VQ{sbM z1|#JgSSYUWym9UNoG2-F<}<`JY~73hC*~A2ThT4~! zGNLd{*ey61^wcCsJ4<@d}Y1D&=ZA6?5DT`D-S6Qy9=cRaU@&yzp5I=EIQi1LCFW(feiI??%_NGoImLv(IC|_Q%Y#H!d zxD*Gr+K*)BI*ox1!P|2?AvX_l@GxgMU?Gqq$95Te7E-f;39`=?bBe2d+hdGFC96XB z5;C45z#?jCfqNXHisiWTU}X&W zSEZgdUx4-NG*itDa?D8h3}mA9a0!`cRZiD&(FRV4{WVznGenwrXD7ck(+lW6X?Ina zRU~koVZ?j*q79FQq^;L2Kh&2POF`f#>}dN!e5e-g(Nbc3v$XN;kQ=qcgQa9Vd;S!8 z-rT_NrpvJ?Sq9MReo}47k`ouJQGl`{Q!0iT{@vVOf|aEA(*8;pt!a7Rt4OBfxp0$f z+$!?vHVXN4Jo3gtplSHGQ|ibOrpLDaR+?}jbWY8x(u9@n`k9kPR~YSdy;Y^-@d_?< z%6i`F6w5Z4wNaZzSTcfBn6)@}H=7eGc{*OOX^Ej^_gQHY!YJQLF6MOrx(=6-KasdW z)(=43IV9X2FN61}cY2t1B2=19)3vYHq8l_u(r~8w+q8w0I#O=)tU3lv_r$sfR2V;bdL2o)A$t6%NCHXPn1a~$mB`Zr4fPYv!wofDLPk<{EHMG zm$nZiicL8amopxtvb&}S1|gsp6QqR^l-;1&O)9r(;UTSQHv$7?GT?!vu$YSdInbtH zYrO2sL1|v`_49n&$G&{2k739Uh}tj!DA?EClEG*p0}gv8eC~?`Qb} zeb`?2wEQgFG})t324nF_w zn2;6SMymO9n*g0%U~3LKR3=6B8}gT>l#J2yWUXn^cAXslggkw$mOrJq*pIyLOTYBj zBvIoVCOU0!;u}&5xArv$=~00M-$YW$JZsjX$_;3Nk+%GfKS7@JW9D z7K}w2H_(LMAgA(Zi7TZ9THr@6Yd}2Q&%9GAFH>Q`2isiTm(X=wfiLzp-afaB5j_8k z2{mMAN%V6zN>CafaY32{OnRNPyefn-vnren~Wz8y3Rqw2|4~lzlSrePx907cEgcAd1#C; z^5+9Vjbw?-x(>qPo9DR~0WwyGm2NU8hrYFF8qbS^&v##PxyA+RRZ-WOy96!n{X>lA z0Fw)dxo=k^JKM1G%ApN)xa~w~L2);-7UqApj*{fJ!h_3tnsy#cILMLwOpxK_zOM5l z$t$+W3TAWR*9P{LGyt>8JJ8YPW-9`TaY7`*y3m6dD%{ExW=1A9r0L ze(fI1Y1ftK2mV0k!R}2m8N<+xY3HY) zOe+uOM*y|B&UX${$MZx5>a-Ed8|nI#sf25qe{pbRU(B!nTZ8einXD4+3V%KF!Qw`6Bgku)wnq4YC z!W!7sD(-%Y(#f_kb{!0-efLPX%XbbkywiMChcr^gFh`0R@bHL;{^TF!L!E>9LecFY zGo`?ve3T#L=fh4e6f~bnMJKQr?T8QJ9tRd6E`J%ajaId162K;Qb^a-cI^ZXou^i8j z?`?$eCwldJo)zZc@dnPzlg4rvu?Mx z#&g4h_)6aXZ+*mZf}sF1U187=6`e>R zp4ce0A;Qn(SmO=iz-G)K;y5`yEXUrz!v~w@kf_qOP9_+B3LLPU_jRX39u~^nsu^GR zTO7@djR#$v)4g({SI+Y4MCRdI7_Dnw;B*CW-l$vwoHrg9B(5$77fZ*|P+Ige7w7b? zF76h@Hppx_TAp*&y0g^ar`_&iSZ6uk?1{iJW3^|vcCpLmxTkPyDn6x2SgVB}SW<-{Ewa7BMh*_f+Ml0R^CFjr3 zh_75NDO$w*a+qWsuhEfwG&NK|0W_F{f)LfCR3~7Fx`=GSy&Nh_(LN4YV5=(fOQ%gv z53*Dj39`T_kFBg8Lg|)YJEdsI$<8WbC; zgyT7KEfQo70hup3jgQW7lh4qIyG&K;w)5%jU0mU#4nF{%8KPMi<8ZQhq08 zlDG`fRbnDIs_2`sFJQp)lmEOUe&T)fV*Z^S0T^ai$D2^)3K{bvREmW zw?o{Vf;iXeBiNjKD|EXu!sUlagk(W}kyG@O{FmxzuU!N!g6tIdu126uhkNq$V=}m( zQCzKZe&-6XiLM1V^OOW)Ntr}dM~;)w!Oy?Lsg|BkLc{azu>Sg6-bcEnv~Hy7`5IrV z3Oj<+{^76ZTSSZU?{efqt6n-8O4Ts2=VdT#6j)Ehb{~}VX*A_RC-BNv_kEtUuyP6K zzo3QF9A2b}GCifq^Y%hlJ`|)2OjiCw37aN*4N0s7PbH;Q|L_lTi(?hB6pN*fMKD1M z$G{)9C@nqQLI!bz)^Y1_@*x}~LHHkjtGCDnqZvAxpa1ZehIdW2KEFq!wf$~sfo67! z+C}F2KC}?Lh2N{A9viAX)L|CKPY)C2M%yVK9Da({O2V15eI+g71+o0{j3l}6zf@{A z*Yp+6m-KS3<0&^oag?_as7 zQjUZ*EqTP~$Aw2-jE3ajT=s;e%yj3_>Ps%}3=Xo`CV#h-0m9`hcP1>kz{PL4XrYVV zbkSQY7v91LE_v6O!|-E|nV0^vx>#RB}d!P$|P@tYFlX-^qwxva1$; zswrXm(JC;$_Ot{giV={HiT+#8-(#gh{bn*G3UmetuNSuCh4Ad)NxXvb>4vHR`L zaSI=CV?MFBzZxg-*0z%UnNwVCs+8X%MbAhr;kIi1xNopqN0WXsPFI}B_Np(p>&r`Z{ru%F2=5oE5FDkAr3R|u zSW`Q!I#-CM9rC!0_)IWULDkxqX;Nfzktvyso9UvTnQk_UMrRF zAFkA9}CfG!)O`|qK*?XI(auCMQsx{4Sta0*^koAAy%z+LkcC7O60EOfZ>t^- z=2LuvC3;wq)0;#A012@Xzk}ySf+1ip;rPb|S)?oG3q?09Ln^P-hLtj2F<{ODT>4`m zn0-Y;zpn)e{Lt6-i^?H#(=av#ZpSUS@}m^;HZlCOKGOwX6F&BLV-I|YUEw7s(cLQP z?N*yCx!YJk5Q(#OjQB^lkaq$hE!jy^y5*-9q)3@iOs+Ll6HSI%QCc|ywIzv9F~Rl% zx?VRU0B8x71@dj7{{`S0OP(H%A#=|4+rYV?Jy+Ctj%@S~~mha)Bk;hZAMrhKy${!9hRV28fA+V;8 zeqlHvUs>71JlfMT=^3ekR7Nxtc=H8Go|m#YlD#MeYSzCb6w<=3hpG1>|31wLoM&;3XtbP5}-Anq8lFW zgpZFhg1S^1NoM7(xkBDQJ87@ZTTje8hvqSI`bX_I1ky6p8hACl=*zS$51)aP zV~6iUs)Y>y(yYx4i>rT>RY&`8h7o8Y>d9c}{c^xVdiO|aoT%kfWkjRl1CZ$69IP^t z>Hsq1Ln)%%=U{Du_BmMJdx&~))DYLwhjbQP(5bRws_0<--AHMm_9z_Di8jWNl1Pia z;jwfqkxgC}v3S-ZVucJ^4#IWMKVnVjaEUj@byg&ki>V-EVj5YQqyZ!6Ktb&J^D$S**TYVQ>gad>3kub_ErB8NrZFB1Bn7Ilh-SzbJ(rc;Zp?pV49={c^QxCy`WpHKo+hkQ#qLQdzJIWv z%(ewVl+$QK*tTr{V*Idp9zpQV3LN}$xTZfBSSZS6^KU^ihrY#ej$qqBncx@xLz(!G zcD*Cye7?1ZPYLl%6P{%@cRa!vS)Su~O#I1%e|uF-ZZ=84q&U167NveJ~J`r8kSg$MiQ$O?v=tLlKowDp(Gzk{FzWPthFbOxy97R4Ar<+A6(bur)o$C-dGdln6~H^ zz&cFR@tPi|Z()m`U|8R^r)t`web3P30WE6Rs=qRFGqAkD2a0{`TrcnW z#>GDQ)E9r{Z~od6^dQ*d?5{^>=7F{{$N9i;l=L3YM~u6{g3`?sGWB5Vd4$Ey1tJ zG4MeVF5aXgq`eCp2Nhq(YPdixj@Hq#ZMB$0m?2~!8WC$_ekY9=+RO<+og)0gPyRzB z<^}Omco%d#Jq8NOlk#XZa-iu@k@%@O*&dcM7pc&nE>!XylM-K&e|;@q%@y*KPj)w* z>Eg2-b^0={d7Y&;;P&F?7vO?=6t1LDB!yzZqbDz*P)76_+(ruPNJaw=k>~`gnfT?c zM$fLDFDXqLsg=L9?4FUdjRrtgpRaANYxWNDXw4R^RNjz(0N;^Ero_1C!UOasftbS0 zEA@U$-?pu99O2ux^R++qZ9nt1d-}E}-*Sv^9Or9K_idN>`su#@YF{?f*FWfM!@EXB zt(nx)Z~XDgeQKh)QK2Y8!4+8s6oeAG=)a0H*2hJ=x@4D-iqh<~#cBQ`SRClUE3NbZ z!xEZha-~)-)mPAuxYCYTto%x)mk^&!pOU%}c7BGW(p>AwEgU3`2raCnLU$owgV##m zl1;;#r3ZLT;dLa8Jud#BiDjj{HMSMF)|B(+#eMEEhep$fykdF}JMh1%-@3bsa1!ub z{;QhDB<)(yztDkSsgTbLG+T-b7A4Ru#|eF2_LY?vPsT|TCulSpqSpj_eVJ0)UOfj{ z2YAJt&zYEKKQvkxBuhMlWWDzwuB-&Wwtz=!0M$X|=+Ln)V z{+wh8gEfp+(YEdlbDrKqz=sh|d-DH#GB=0oq78Lni*C`Z zYfjdTWXuapemuQiqd@v1Qy_iNimY|?^KnS^9f0m!FRN~xRrusEDS6qozUA6+qF3{E zB4oM=f*zmw-Fo@vZM6DGD|ZFhUc83SDy`g=Nlf(jeb%)4AX#F`TmU9nweLZ**Y)d< zFg2kL(w2jcefp&Vm6lsqWTgQb))Yl{cx}@&f$khvi4lPgvFgCdm9lJxyneH3IG6oV zE^n8@EXf{}m13$-NYgt)Rf4EgXRJn&yQaM~MLvrnEOol~kApP#2<ve5tHGha^9bY35Dh2Jrb63Q-AN0d`RMt+ka5sAaQ5HjfNA34z| zNqGGkjH42jo_c1YenZocG@!CYlaNvNSb*bieeQn0DQR9qq_ z^&+&F#N^%fH$S>#yq@37m-W_06)Dl;9;!uJ5^G7B*7Z~(BNTvGnSgnyWaMBD^5+io z6C(T(bpIqe-X@?%y4y63u%H&}d{AFFcq{zdR0{i>G1b$>x}3z!izM1cu|O#B zSLo{-22fGd7jlXIpzBLnD5>$fy(`Ph`e3XA=A(vjud6}|<1Z%Zv$D8PyGxf^l4IhG zX;0c(9r=~iUprVp#umLQg$3qmT5%sz?#TS@Z&Aer$$FS?n4JiL2Jzlxea+U>;!QN# zG$?{%(r+Ae__wem^mHqG9Z9NfR94+q=WJ~$)en$Q4QUxi^(ZYGrx^V8leO@X>Jk%2 zBAtgqB-HiW3%>3$=2uj{K+=m$BNSf}GUXP1O!b0n)=jGYd4qk~5HEyWXPRF_9u|aE zx!<9mbd8gAb15AzeHx_jv?R|-?F-_cm*P1x@kJ?nS&Cnh9`9Qn*sRFR>1a<)_f|Ph zlautu6D>Xeq0@B8sU`=fZ&}KAHqQ!TN-s~?rO-oUppg5oKpZ{&hO7D0DtsH*Z(sj1 z&I@bfV80}%vhVIvjECHdyvUM+CZS{SpCci~q=nv35{+eDq4YB9iB*;B`hWRoB_DSy z*Y$;qSdQ?~@YHbAzHzM`4leD4P828$C{QaX&}vqp4|VvF1*z^Uy@7+)An{yA_LDdI zfE7zQaM=Kv+F$mmkS*4fbdXerOvzqV(x=)?-1njJZzP4yq-+z*;%Bh!wv`mN7E=Fy z(I9hnl=7V=9W4oN`~EVrN&4?A_v|NY94zezNUwuz`j|#5)8{a0%gO&_E|ckx%;pR! zkO**(+>_@5bYhIv6cn2+RWHafbENrs`R$9+|7Gd>l1xWpbgrbh&*Te$_K-3Fobp*` z;(%yI?m&@VL&-%l2%63dr`Q(ur@1P*Y#Bta|SEdz=)s5kH9&bx4`2}Tc%9$o- zg)9R^0H*2wPM9n#BhTITP<D&=0B+*+`JTIOGM9 z=S2fl%Z8g2d+8COWR-Ekdb0fnQu-rFg5p!uB$WpdwUPK>6QXRxwfU8RJyw9FQ)qIw zl)fbOV|6HY#c+%(GLODj+YTvURG6yGGS6(c6uN{|m554_{V2CdHj@bJ)z56em_iP! zm8ikYmxcwBy~8%D!rphRwiRrjiZ%-B?x74^^)^}<=37`Fu8{tnLnVi!tG^FN4>eKK zw3e@Ew7!;asw0P6z@=PIv z?VASsc#0dvBjXy6llsNlM41mHY9T+vWTPev8T#brqd$-Q?AdbaIr2$CcS6jeT2JS- z7W-;MZqaaH*<8;YQc4sNUjeQxeSzd+sdyi6)M~-At|k~i59p*VU4~RLbZBZm%8)g8m)qr9e*Q3$P%P`!X+wWzy`J}-qAtt=_7cWaGRV~K~M$LkXEDW+I50-H5W zMYB3PM9%t^3_Mh@-+oI3>I%8~7TFXZ?f0@4L+%~R2e)8olVQ}$bH@#SIMjuTQ2B+V zk5Kld@SU@Sv$_nXbYBE6&SM*Cu;X zXd4Et94`+~Fp-Cpgw|VR?rbT;`o%u~`AV&umGSPeI;cgH3<8hF7ir~%y5FVh@n4)t zj>v42XombxTFADCS8|6b2e1cVG<+%`>Mnr3)G|W+XdMHVskGM z@rp7ep?aMQv>%#{?zYPu<*3MT zQ3lm4mp$$ZFT2Y5t`=GXsoC&9QQ`Z>kp{%S$jm&m-Zx!M+IorRB8>&n-i9w}4MNJ2 z)k;REggIb1YM3n^UgKue_KNFK4X-Z;q>_nKREm~;Sx(js4RLgL|(}_RPwHF&A zu?SK=X&q2paudBMDkI7|AbODsZbSXQN<#cUPHp>CCu8ad&|dbnC>7n9qIiONEsOY16z{*)^%w`7?$Y$ZZ7F?+d3PzlJ$`-Z4h#e|EU0cwlv-% z^+amsTUpGqh0?};`noiKKwd3EoswZElxUBjsg<(H!fau=&gn5Yar=VLYs;@RqD0XN z2DY4!g3UBbjX_5UrRA(W$OWTV9+Ia_F?gx=UaVt_{pLse=&xQL^YWa3o4E*G_Snw_N(MZIl#leguNe;g*2LE<;eS`VEQSl#;il4oTakCSDEfKV_&{5g9S% z?X>_A=s?RWjE++>9Knjqu2lWK71u62p?weq`n&d`V9jTWOmQwCHh4f(T^%u!3%z^| z*uoCB0u=8e5Ur^uED#Ky_LcKPX|`p4B%Wz6PyS9lHAg5zHrO}R`m%NXf?>WgcnZ?y zqHA4tol&;f9qN%{xY;OM*=;U^0SmeG4?)3$MH}VtSDY?z@}A4ycgYtfViV=I(-v0T z0cKizD#cft)kJ1iDMiX&lO|Smkjx=qfWfmHrYqe#e7ZVK2{3i~bXjod(rs0?)^vm> z+l8{}yBfI^I#YVEZL(P)a>VCocE0JY>A5Pu3(|ZbMQpoFc7UepD5LHJ+ut`9ccz6v zB83u3gVRyc(`qKBy_va!J;^#y$$LR~2SkgG8YdM{GSCrSXugArSnw zOL*7sx|Ay;Mil(|$?wa)WA*NF#;l7lwBGZz$mp%`O-Kd}h%l~>9Vm#kV*K=CmhCF{ zE$HueTJ-Hc~9Z_V=%|ESny1X}hcX+-(5l)n5+YSf&k^XRzBFq=Q_`adORA zx%_ZRj~7d~oM0K3QznLtO9Z~okPOzxdC~~qBZ!_sXuNenz&AcHa$4%Nxjr;YWiy98U(*I>Q4YpJ(zH?YGV9-#zvww6n$II!b}fsr+*r$WjkuyC~eqDi?`QV z4Q6-%NfI(0p@ZSaGu{z3WY?GtGE5kpCmUbdjfm zHf2dq+KQN+^F0Jb7gPjIUU&~V<7nwPHOSfV5{c$e;2`ovMg9+cd`G$e1aJn`sX=~H z;#-1!`)sYh3ZBg0Jsgi$hDK?BH?z{6w5A&~z+JzVyMB-xGtkvlxt-Q_zo@np=9!6` zS>whGbz_D&sdY1lxu2}-E+6b>t?$Nc;2Jk_C;iBc+0Z3aHrd$Cq!8Y4*Jm>~b8{DO z;SS%_&0NooIosWL9?2~3@$=o7bDf;yI;NSHY<88)5b$YpeumR)9Nt`Zt!uj8HC^YT zpl6QQbz7I<9tFy8v%0`B(%HAWrtZpnce}a=gQnIKPGG`6ZL@~Vqb=q*A^ZL{r}Hc` zt9F6YH(a*R>6=d9GBH@l@DMUn7NoVAt6zde+z>s69EiyPuR|^74YrrdzhX=^H z{bg$iHtR|eH0GIlda-%>`b}nEO}|NoO*^Fc(EjRO35uU<@Z*w=2>zL zUX@<2$!QDaoY&>+cO?CXWN({t%RT7+v5Up}n@R`(>etX_6iWN63{;`A`~WQ)WJ+-? zgP>bI5E)zFN&`;^rRS2A<~Scr=&1K5AyXDHy-xs}M1M*-XAW=J;=3vHDF^)|mCF ze`l$0hwp9HdXyExBa4dqMW29vS4Q>K(SoXI-N9C4x3mm0*4eHRgBjT|au&SoxP}z^NxGRV0P{&D zMUCxH%Wg)Ehk7mu@&IvvIp4OS;sxgG_wlOEg1PKRKd0w$YG6u_4Alg%E{?MB#9XN>h_VrhB$XfNhAdW-1NUejb{aXJcrY5GX+Xklf;C5_mvqG z7=jQE{J5>TX&If2d4}CMM0X(6k}K4aZ&FWS(Kl~kUm;nwbiBrkb=)_;q?fN_pdqJl zl(d)n61?39A=rrYF?{%jK^|`f@B}^iWPeElQP3RrlV!}=wxVXti*X7q?dH|}TS$cU z^ypWcIA_3$!5gz#L5YqGBY;QRA3Pv%gHf@3xtQ4m8zfUxJyYcq zZC<90SPSBJoacKi4oD6HcR>#mDne4^>-+j)EYWo7rUK6=ouu&@T8*1wygwZ8{M^5erf zqry4YT`ohfkipl>sGFq{!TfN-a|A&K`dMrFX9xQg)G_=9;<{0qqxGb+L5wU1VvIWm zV*HZeUdJpc>uKe1RYFB0j7dv;mf&n*Z%t3Ix>SYSu)oOsyN$2Z4aAS6h~!6p?Ez6* z9UaV&>*M7di=7ctWR+fw%m1P6dZWhbiJWlv79pgoO_Enoi$%u_PX1SVAf7w&uq%ARqRkNM>t_t~ zWfg8_IrSM`=^8HiAB?Eq8SiM-gUSj1D1h`uvGnaL3oGQrA?OrIoDZ{2WjZ76U?~9M zGTu&>eZN2Cu8`(1>Ta7Ydv%RE+{Vvj$ft7o=hO`RmjiFS7QR3B;F0FT?+>bXYVTDJ z!o_+Q;}9TmQy*>O3!4EW`0QYx{K{vC`s5HF|C>YfIX@vErHlP$i~QOT z^j1D-FL%EkDCssPUCu~={0Sfl(Fh%ne!#isSSn3=v+MYSDI0gpavk@(j-{?+iECNz zKro1pWc?+olx%a`1Sd?8%TJb>f01e;YgO8TKe(<+t=0dE*Vn?PM(BzlUT&;#lYp8F zKh_w}YiI2^L;-w!vzATO4uYFl7x$1DrE;&4x(lD`;@&>nz!&EF#qb%3A*wBO2Ln@Z zwNDY%@T{3Yb|cIEfk8LE^y;8q2)+W$vbiL~C1ve;&YXRAB_nXov#N8IpZTg!{ncc5 zc0#6mM1CZS(7_J^!-oY*iTQ|Rfe`#6;vltt`*pn^=6^%wtQ<$h{k+*K+UUOqQP)vl zMY|P*VeV$i-q&k{R)VaKR5GeibcvTJiI5#jb`}Q?)>wN9nz8pMokY}b5yGJLjt=fMa9w8ax zD_ULk#jfU3s~nWVB)riH+OSBWhRA6Q1c6HGG6QMZ4vJV)!PWa9c#fKcM36D?*MQ|W zl?}GCG9`lFy_>ANyHqtwGf4h{@(>p9{$>o|0YR@WAXTfxd6EaR8UZdVw(TYZOA z-zrV_ScN96h3c@GBC09#E!Hq(k%?@y)1yTSYC+j7s2x;1$$r@>T6>^s@XF;^rsH(* zIFm@tPD0$wB0iq_>?a%B1P*-VX~Os|_+GuMtJiL!N~O{=1+!O{M`e7`b( z$h%PcbmTa#S*njvmz)yM!22Xb9IHiR^?p{rPxXR%@TL9dFd;9JbS?knV1MZ+nuw1; z0`dJTyrKq=);bxE7!QH2!*QH(BEQ%z1h}KW7>}`gk4y+25`wXEopkyUR3I`eD|oETtP~aH zHDt|x(poNk21pz3WQ9ywQ>Lsf8x4|+66sYfQI(XhBjrOvP8@p6n^|2vV6J!%bh359n$)m_>U~~Ur<>08aZSMtr9Vb9+pW*4&e5h?c6O5kgPf~0rSMV zu1r8O3Yl49T2)+Pvj0s8{r$nH8hd}G2Ll|T4fv6t-!JM@9c2iK&z5cHNN>VVGc~$Z zVIobr&k_v|d)(x0t7dE2^9FBZA#__ALQ%f2uNdfShWO@TJ_h*3IKSF8-R0_7c|eX! zq>YO3J!NEXTe^#fOK+_4tz-qUS0tl(H$HFnn)$o zpred~vFALkWSz$kE%tTK`$_XcQC;d{FYyhZ5=xHZa-`HW^VZ{?NyhO?sO66f`6lLBgZ*R7 zj@1JAkgvV#$(kEmpO6`c(O#f8!bli7PKxoiAZjkR5&%}^1o)jblb6mq$=-UDP9Cq9 zGF!=GqEOe5yl&w83^x|aBor*mJib*Oje(68i4;pSM&PyXeI@g?7qS3N_ip6N!^13iR5go~NE z{UhSVwIf`#qsxA3>~VC7DQ`#Zax$1QU?hrY9oGiloW7N%*1mX=z=mZpAH}8)ckr|S1YZ%^wOjexh znKS6O)t~ZOw=*y~*m4s|+#%7elF$HD->-+e ztLZYWVNgNxSsX4!Oqej)QMx{SNKl1;9WOiRe_gb*Pj}HyXd%D09sI!KZ4=-AB;BFY zg}Lt(jZRg?6v4$<;$qf(wx_Y$yG!r=F(PI1MS*fY<%^m(J-lbv1odq{(N z-L=2%n!x=+5P`ZyD>dX1kl$5$kPA7@92|0*V%QD?Ejn5JBPH|e%gt>HzYSJ1TJ;Dm zj8}mLak*x*31vpDHPJPLBDSG4mXZSv2x4pa1VDp$=u6VLx-Vmi>)gb9giXB1ELYaK zi7#vrpKsr6+_R-Q-?*7j?A_QuCF&FHU8SVE%FbFGScTg*>)HhD&Q?#%?k4q!{{6t_ z?gvJGK-A;cLI1y>8!^JgtuAAJF$I92@sHM%imk+o{ZZ!N7J<$^mRn#=Vfifc%}Jz# zBTuE6L4+~_z4L1=IhZnn+VO!L4;1hZ@`ZJ{_*$lX4}ss3qvS0zVX~L!}MK z;&iNTk2_2*bM-=h0dH_CITe!ghFWxiE?dp7=;yetp$B+ zdp&A*1K7W0%pa%AL;1+`WUU8pN7(Ze-Ro4VXWf3GelkrDxn4KAO`GQH#-He2pJ~%F zeOmm1BYm`^mr*|6$;%Et9pR(xe6qbyclNrAkDv7MQ$Bjy<`;!cJIZ{=*A_Kv!)h9< z>DL;6ruB@6enNqs@et|DJlgWNR%^(QThs-0BJH|=mvMkO|F@uZ@0SUJ6zqJ?u=yJQkGUY`x zTcKRGy62|2N|K(yteBXD zYtU+fFPE9^x5adKJ28vvT;WDn`Fq!Vi)+8lwcqai!>;(R&Ohp!pK#4+F+Jnrpp8TN zOcUZoFT3{FT-occY=LWj!?nNVn%{NBAG)T+u6da&Ug6r8yY`=GNIySx>xmK{nb)m1y6N?#koxBnxBse2qgR>{x_3b z!ACwEVW{)b=7vnxY)9Q0D{A@Qg;ZlTVHfcfRB6A%CG)KUh%l}gDolZS{>=)#px9l6 za%tk4&UOpJ6G^ka3&n_s`qV)lXy(ipJ(D`y&g$u;Tj2Ps@8R1vg25uXgGAd)bF z!`%bNm?)*hL#N2FzsUJxb@2r4*Q`l9@ttn$7qIc}D%=ec?-+!*|7RQ+0>?+M)Z(55 z9Tc$QJBr-!KNoykl)KnBeP5RwCPRg9L`WRAaJfkq6quNw=~=}l&05&Na0y@~WMQ%i zh;`WD$JI(NcD3|dw^Z&d#M865TPim+l}Tcm&RmM!3VU*fBj^(!Brq7YJ6#j*dQJ$u z*tJlPW}+n6btg+azwfJO-rWm&qFN5~*M(ooYsDNYGf;OAh0p@Ou zD9u>C-hLP9N(7v>3YarRzw>~qHm2)QboFt&+iP*lfhO0 zrBM7gQs3hTwBnmpzcV<$GcvzFEGwigCzCKBn|0=N8>X@u zwNBSHS1U%A8HqEZhu9OS&6lg*p}f%Yp%Fio*E-wlYb#$aLi)<_4yUW5!yvi|C08Q* zxwWbK>uAyaET~7mK=iQaLH4H}X$tmwpXgu1|7X$j5q(ee6PSdG)JYT|l!!lxgBT|^-s#CsKVcrwi!Y6zSC=@DVJWKa9^dp$!&B*F-g8_=StUcV$2WGO4Yjy80o1-uwac z_R!nk`66#Bf4c5(p{xJ9`aFM|^gvhVcklVUtLbN6ciz?Ad$_A(={E)geb~MC^6pyY z*x*UY3i&h6g&Q^6q2@H+2Ae1^h5x)A{v7N|`3TdC-|1L>f)MgE|G!4J@^*6_8Vluf zUDVI*0C=*FvG++Rj#yawM_K-LHpf+NuPn=Ko%z0bvDFtAn!y&sKFgY%@40Na{K-ni z%EQjfTkBe)*@d|gUtyuoeZn6d8S)1EH-ODX^XvVV01=#DhO$dBF%8m|_Mt$yjabvQ=_JC3GXGY=&)v#nNf6 z9Do4{8jrccGWBPN`YzvPdtIHim*tBq^J*|xurcUr>v}^FDj{MKdi;UG3 z$6JLFvughJuCYpchSpM(7b@3&md-}x)QlM{oTIcX9|;V?d@zvc$9Uiw84TDzJmVtc z?6odYONYVu!4Sf9VbkZD*gyTW9$N^Dh|!BhG}210kf0H94tCMzq6BVm1Tbp}Oz;(i zAh3U!2t~nUvWxt`Or|bli7A8mL~xnZB!~@sx1V`8thCW#K05*}2y>|#j`T4$73Nbv zC)ih)x%4of9O;pi;hgL!1arcI@NJ9hBBHAR4vsL9Q4&&2vctR{=@Ybxa$%ye!NK7f zFQ$$|$kgbv%AN_@K3jOf#3E)#!!Vxno!X(n?h1mEo5aj$CNFOxx8gXBN8=~-er6m- zT|VjPod2bLoK2jm2TSum-N)&6tW72YF@1K=V0P+swfR*P-XkU`oj|PTho?Z@&X#3n ze#Akm!t0(3%2Zgeb0vE3hfD2rv+)1pYC9Ooxp_=e12M)7=0U!J8rGfV6#M>Ix0vHc z@m$;J78_{=D=H`@gf!S_8|(OOb;rPfLeaVjLwdHQYf%Z*#xt@T&5(b5yqUIB7ISM| z$c*DUnA}}6C|Kb18(iryS)SXdELp5JYznaAyVidee^&lr zpHmglVkeLyf*GIXgKd2&!hq-LW>FnAkYv8&jKmhR_@}Pa!C=Dr8=ArX$j{v4BZ5O9 zV|681RtPRYZNas4a{*d{3sBVQ0&Le${v8*fb`xpaTH1D$($Uh!7y#2aNGkS|MpoS; zrRXFny1Af?y3YOrLySd}jt>9kH+FKGb6dXqX%Ir7B;0L}G_5`ZR{c>SyZF8F{fcgY1VgKP|B_n4~(Jfx7y z1+JylO$K6}ZV|5RYFB~FcB8Af&9!mb!!G)(DVNs&%~c0ha~mik@F^(b92Yt>I-dRDx@ zx#UTggh#XT8FO5OemMAWz(~`-n}b}+147|`-IXqI^>4Ujp*>^#wky2jvUiQYT~DPO zsxy4-N*7yDuV|?|^E21-g`4!byDosnMS#Z3ToJG;7~r)oAu5F7G^(=-7)xc(0KxIg z6^{2f>dsL80WGZQF5X;Xv{;wAXb&MzzvLzp4bJW}1}T~Yg;^`BD&wc5iAC-4$1MhQ zyfn2M9`fD=63vh~s9F(&*i#D^YBW_xU!onq)AKIZj$5?v`*^sH=>Vl4V2V5o3KW{+ zF~f#8a;ep{lB-+>$6$sN#>w?gZgAJ#MA1qA<;2lYX>~5#9TknSrY4E!~ z;wC+0seiEIGis<&38GUX-io)*b1@@_?p z*_;ubiJ3}L{80KZc*@6%oFGDB!BeDtf*5Ybv%`%$S7HiS&;x|kE|K&q_!UyPkyl^^ zwG+%iqFU=|w26rn$t9|fIb@&Hb$o_J8b)J!l@+LEySD-MxGOyA3Qt*Rukez~UU2a| zC$GA6p)0)UlDADGF?~PeL(%5Y+QRWtxvR#gbbhLGvnw1Y?Pp8#`7-Jpsei;}T~a*E z+A-hn@hnK3{-Yv%S?H3naxTtPr#5=Y?C4U)JzsLM8J`JgCaiMY@T zY)ObR#4HhvTiSV}eX$U@C6*_3dtfr>YsI5ZSSa$k4?%>VoGAhg>1!^2-Ng%>ykUhn zqVEn>|}vuD&g!X3p+WxsR@WIRZ-fD#o- zOxZ;5$LU@{uotcSN+KQP2qZy<3+8{ZHeVk~kKJh3F^azUQ7A4B^MyvY+Zfk(Pj}HRD}&oNGPaB?mh}F6ItxLJ z((yM*-jZsFqvLegvD$ErDZpnhX!4>Kl|+TINP7q7(h#FR70R67#6{b)AGs9ey&4PT zQB@YC1r>-Y$QwELiE65YwZN0^X~Z5Z5LB4rz_(11X1zhPhpiOLgiiuLY7<|*nJ+5y zlc%bV*RpYX`yP_?a%1|t(N!)1Mclwm{*k+}&ed+}qMx|9!PSp+@lH-gxzRgAMR14g z;-a6CGA2d4%cvG(ruoNAQMRo{hu)*ntATjd0oBA~)wkjMAY(<%g>poy}3XMF+Ic*IZ#sL6X#P;JZzh zxfdWqb*OeqbahmaBW9520@RmjypyJ=F7pfaK<=I|_?~ty=^nuCy&!M?LzvY^pY1qE}sN6LV77?+hpDzD~0GZROI3sc@$wJIR@b!3=M;r1Cb@|GGG-QYA(b_c z5X5F}ePB{_pANWzjQ?9SW^q`ib%AYLU|A^kSw8-YC_flQanw?RHeeKyUeP;h%1MLZ z$?yglw+vbm?GLpCqEX>?(K1F?MBTt@UL~FBEIWe(T4d9q3{l7P=Hh0etB?6ya$3W?nY2 ztdNd({Fo2mA(*yd+AEq&vuQ9x=t6Dh%&rsIl7WkZ#IO-uQs&atTp=$ZO7(%&2?V38?vgd# z%0i-poD6hPmE{#iyyBWwl@R?AU~;!AqLdKboGJ#k+C)D#L5ap~T#|xGx< z!M+#0eHPp^#L~s8!=Rx-pNw%?SB;q6o$l>)AGfkn%)T!Er8{tcrw6#gf#l9OImi}& zIV=>8Iow4@y24RT#(uke%&|_7adLu-s3UW#lhgTBnjQh2j?x}TPeg_My;MizzY`9~ zV>dbMpJV=A5uCL(yFyzC#(m*%u1j_h-5yMv)O(dm{1jC}{OI8f(iDqpbJY<DR$W@4^#Szr-vMG_G-Q z2$UpX3wWRbLb-i)*(E?IbpzxN{pG|?5vMI6*(S1Pm28B$wT?Ul3Q;3dhDaRl@)YS& z8wi^Dz3U{|C@4E^-5Fp#&?5EG0fy9pu2dZ)(UGPO9T7*HA<-)FijNIx$yOkdYH_ar zS@~uUKHNRtT1y#FDX{+BtA!Um{Vx}3{5$P+sp@n7)G+tIxzgDHK1zj^oStXcbhv*; z@mSUK036{w7Ax=#lxjYd)WZd}5lDr4M-;V%-pAbc&Nem}g zax5&g4ZRnJH2w2K@j*_@|8o}vb^t10l!W(~4}O|Wn+YQl$(kKP@LiF_?gNHLpn2?x z-0^8E&TiKPd-=8wQu4z0Wcj}nhRZu-#kV7pgvoIHgA8WrDx;H^=;^GS%~~6DDT`S` z=_TToT>;j-XY#;h9+#wfS4x5(#Oiv8FlP&_$;>x^mQTA zA%0DhH#8%iykC@IDS=@EA6=qk-`EPq?_IB+)$DgcyAp!p<$4m!8o@Xg1pf0on=hz7 zKiU01l*Ycs*<;|8W-3H%EAh&ki83$D?>A1T~Hq z|Dja&Gix8?M}KDC77{LneYCKj$}zg+axGj(1kD#_`{a2a&k3?2gpii`bh)4W4Z<~1 z<&*L__TB*B^mo4oiDuNAxmuz}1>^GyY6kHj*z?$X7;o2U6G>z%NVSm(<3x{_wrX2& zND5A9(y5}zj5J6+q>eMiDmBA#>Z8YktG{Z-QueY>Uh&b#UM_IyI3<^D)KYE!#;;Z( z8Tu7xNp!X7C@tSrGpbtPypYpztm<#=zGNW{d)DIP@#`Kz8@*Ty$VyX927{BQpp$V? z**>s@XF3!N9%2*ehissf?{7~8y^uanfDkd^%7r|XbX^9m)B8-Kr)rjKxZgD_aji?; zsN)Phz@hdNq;Q%HX_l--c4;*gtQo(RO($C-YSFo}(*<(QrPAkONq;Akr^)0tiKk2X z4IA6LEoMtUri9P?EJ%0R#*LQvVfp5OTl|SYZlmt$dXbqoS=qdy9 zP*SqE$+>D!C&8@EHPFHh>oAd`)6Of0RyIlF*Zq)rj zXQthf@kc%4S|2j}s^&>o{**fyw={qc#R25emt6dUv9Lg{M$L0oueqv)uKZ0`_O`2h z$Bp{Hwf@7^yzfSR3Is6}*DHVzaC?rEC}euXssPNHcdm)K-%X_MpzDO@YbOwpSSnuwDC zP2lDOO>AVE)tHM0P(1Bpmg47p3{B#NFqr92_!10>H+=lIFUilV0aE03cvx z(3^n)a{z=QO36GEG>8d21pp*@-z7O{^Mxyrq;S0GDWQ1NITD>~qXitMaD_d4;YulM zlW4kRSJ~sI*8+2C`>sZEPES%f*+MW%_S4O-`FPpuY^gm*3KwEjAQfw=uL_m-5tlM@ zCP@Fz4!@NS@7A$dn+(Z2Ht*F|H))D%2(KyT?R0-H+XWuWOe6Lue{p4Vor%?d?xrBc zK&s2>G9{C?-$>Rh@mbP%hR9`7dy`xURC1IqV&A#kMHdc5pI6iwf@zOdejYh!qq(Q^uNNSe2^m8|A znQL9)nwGor)1^lym6PPh6J_C9GUE(Mr$}^}v|cC_G&$*NiEjcK7R><@V2uEkL{~ex zHW(_uchnaHr2&BiD#;eO0(A6=(r|{=;$iWLuCp*PvSXxg!~r~^SU@(_d<51C#`ZujM;XUmvktz_`PuRhofBaN}v7n5Rx7l!$Yb&6@)*Q^?fWYtbU zmd8p66+I$jo|0+`7(EF;7Q{usFO z;W2$93Ix0Y&;ga#XDp`>NG3QcAwrfeUDs#19llp6)VL}mykY-fgkynYejm!PS(OD2 zhVW~r-#5QcbLkkFM1!x9b+4DwKgp!KLWTEsDVrtZACLq=p(my1SCV{TIb|T0x|zy& zZ8+E5>ayQ!*<%_%sp%6cPigXuPI^|;*_ynh382Kg8oj5{hZ=vN$@>TFN&TJ3_J#A{x50;h#4@)>O?l>$E+%A z1!e=kGmscRT~1t=`}RwxfC;(F_MJkXjFYY^pS1=TUqa0(Afu@=S1eV&ewH;-oOF`u*B@To(EWh5*$1eQSa`xVe(NXHCI{ZWVFOX@vln|sx49D!A{ds zQew}RW6zPN=lPje$mn5;umCGh?Z=*9l3E{ii8A$zJkQJHREI>`R(awKB}|4$GAT|3 zOi7xU@tN+p9T7$oHeAUSJgAdcxI|D47V;G zAk;@JVbCff_4Ea9&Mj7WB3fj{@4yGB>zXXrxFg`$pusDw^iKikwO-N&E4$XG$jn)0PVRo zHYa4NiKs{Gknd zs7Fk$s5>N>`|sW9f?GQ6MDsQQ-~!Nd(C}PY0E>zuif8>3FPc>1s#bG-;0=Hpf&2Az zXZCi=cwxBh*SfJw6=??T}6PBifdeD4j9%tKg{^9 zO@rN#^^HR%oq$qZoh#nhDTpGN5}3y3t_WCZQ&;w5R}Q$ewcBGGSMzOTscwX88tEd! z5Tjff5Yx`CXh+x5HRAx9!p20ZMcH122%VLi{QsDH6Y#96tL=ZUwRggk7~y~sA|f7Q zz-ZOR8LO>_7%bKaQEO|p4GvXQ`bO(iUx!108s|7qpbVncI%}Qk5QeHa)d6QzP(;)^ zfU~H4zqJpEap>Fk>-T>D|94$nxgL`9JkL3MSbME|-RoYzbYX7%0Lm1H$<*HcMTKW z>Em4}nt%Xup5n^eTsi0#&=vsKscwhUT-g*CKoo%@i7_{`geH#DO8oPmp^IJ6BK|FL z7H1i-7@+8N2GVZvm2MQ1S+8I~3Uu+uCTkX4fCke9M9>Lu_SDd~3oKnVlp3!s$3^7-8_Ve}*jW>I87<{~NSzoYPi^hGYc}Ob9usMODZ-4Ob0-?Fi{41(wwv z4`E1=o(5kUX27yG3YNjl0vNbh{ZZXQnihEyLQ+RhQj5wtugmw;Ko2}y*kX`m& zH)FPx-6?frR3D_Rxmg1M1grsHXLY*;N>d;_`-?*4#%6Ze z$se1C_BA@xbsKNf;8?3@(nR{;19Ms`s8?N07$wOhX(V*j@Cxep!9b)NHKY42u^R>N z@PDpzu;NQ3C>OvsH2VV(cfk)t?^fW@6vt+Orh~LB(=|x<#9I{%*L+xrMz#b4)PF|d z1~LLH;y}rOedtK&XoY$3B559MZd+0yr8KqxEG3&y#6c#V>?FV`dF`J@;B;S+UsKyC zZSw^Iij^Sh>Lw&8T~O)(P1e$EpjA#G!V@;sbaR~mvO262TxEAu1d8xU+Zn318mizS z85nTJ$j8x5H9yz2vaa?w!BU!5ymFz|10@Z%(bG(F&X;!$sUxq~1mT2RVt6lg;oLZe z6hd-ZAw%~A8Mc9}UR;UU2V-GipLJ;*)pUro*U53~$vO410uiB&Wv6##Pu2#o;d+wd zz^rfLLg|K9t(iorbN$|BgNW$uR$`#fX?R*K)rj5#vrn>YkXD|nX`CSQfADqy{iq6G z5g|uP3jr95g+%P!RbTLc(K18311p2)ppzU?QkZV_HHfgGNfKh?X1X?qn_alkg z;!FTJGDe^`(8yb%H^i>@a2o>Ia7Ye(&iQKkS{G`-K2XrQsm)8sBtTB)q1dDw$j=Z| zYLL1gN;Lrs4mqe!0i<87F#TA-*&wan%2*#L+hlQw0&5uj4LEWCSmsc!(j&6S_M2Q$N)tBUy}hYR-(w{CsJyZ$`fS7 zmD1Q-Q{;VksB5h?TmfMzVP(6z^lh!N>4T31-F+TE$NAp=Hkam?eQ|DRba=J zjx~or0M>zP!L=h02BkS&!ugV3Ea`<(18?M9nKDVH0B}u}beeQbm;6deF#^|^8e78M z4p2l+>QRcGL^NR?#_t#h_ulY%t44u$k%<|o?iLJ_#T3&BsYC0^d})}Fi4*MA4k9N? z!goRE@Vvn%C0{y0u0CCAPGqfGXv~675b)Vp^Px7CUnOQzlbBW0Xyg^WNsqMJlKau*iHBfkn_&`7FX2Q3O9HM!>W*ca>m8RQhuVJSD zCfjL>00pZBX$aUCIKyOxR=2lsdpQG02suz223rwmzOFUkqZvwyP-GO##j>?is?4Bm zLivOB<3qS9*~Yq`P@@|7eBeeAnGX_Lt;98F!E{4pOfZ zh!i$ZMHQ++n>SYUc*7=|pa;bV#_2$)pA)32$qJ>3a4Al=J#wx#V23Z&W}YI|bW>e1goJGh;QZY>qy`P;OQvmskN+p2(9!RP>;gDhrlOUiF5^bWbjStM{hc%>;e~;O6 zWqyYhF#gH0<_Hr_pDc1)b0j}c^&-l&C7&boYru5#AvF`oyD6~)gWpq+fW}TjL$_FSSpnQPZ0d{(ueI{mv5|Z$$Vdl^(0*Ng~ z^?FAFVr?G3-v1RRA(QH^^kTOcx5vcRf7Fwx@@Q??|0osC{A{-#c2?KTaOKR#v>@zx;>)!HfRt3#^2h%-vt=edBum;0p}k zMcpgwMK=c-QAwajslKM5VUt1fLwUWQvYvlyeZS{_O5KSvuj3JpA*z`=13x$|^{QW-lAdBjof6rEOAODXCi!%cD}}k{Ce!OAyI+PqV??85Ra2iPM&{0&RAY3yRMB?_;TO6o*yw)hTkhX)v`RLg%EEHNDpt=Iw!Y6H;{^RC5Ns_ zQih=*lY*VcnIv!ctj|E;-}U7W(HP66EfQcH@fAqlvs_8>{N2;vJpYJhzJ8VdK8-0J zVxpCqozqpPn9geb-+g$(H@s{slTp$LXj>j?f(=nEu=&N7EU3LyuAXLt@E1m)D+h#C zdBhn{V|_pBKF80Krpx6|_={flmz*FcOp-%h^Vj57u99*RZ6f(L(!4z_2bU}T$VQDfgOI4d|14(?2GHD{F5DGM!tZuz)U?5@CCgm; zAvJUnNIz0qj}ik^kCuj$r1f}dA7>kOw{}U+kZEk&Gc6s^e!4tFQqy9Ak}#Q4wmIq47P>n-1a zgZh9Q_r9y=^p8oUDd)QMJeQsC%E)LSIyc#sE^}du%dT*>(_FaHRbJ&_)t0VzrJG&l zO%4h1QcNn9qQ95GWkvL?!;(tL9G6m$`JgL39F;Eq?n-c>pK(*>xz?fvhr0fSE<`nn zl$P0Vxs-_G&6V_EI#9!9HOm>3BO^YyzI7IiM8IujIw|Io7&mfBtDGcjccwNvVlL_T z-E$U2E~zWuaj9+O@5v=0%9N_D$?oZ-9d$sfHLCmXWR#FB`<{%_qdrGG=W(BtR|PzL z(&x|l{1u{BfH>s~Mpi)~VPZ@$ROyFTyCKtW?p(IM|k-I*r?g-8h1I?yT*rpwpy zSdXO6Q=yMazf5vuppuw@Dk!*FHwv!Ib7Y`k5z9jJv6GmA%HI5%f}6$+lpJU7DB8K{ zY0_}M8J6r)6WhtASo#T+I45g4RQ=A8se7#Ee=w*y(4`ku`J-g`AI&EmNqNQD^0P<1 zlEZz$2eJ=yB5=nHo+Ly5Aj_E!@_Lh`4_T*kT}EVaj>{i+;Ypi)4lIIG!B$`6sLM`Y zuvP*{C)J%GkLS{QqUbomIMiM&d;CduiWJ;DQgBHs(U}6FkA}-FiPJH|$<>ydfPzb_ zf^dVyCd4E8Y~!?p30p|pNx?;~u9hck4I&)0WaXD+SVEE6ZX>^EI z{lK)~l97g-Q*^20&BsRC!X)KsAec)sK{gvN`N>j8-r*7%eX%5%Yo29-q!&o#X|Rc0 z?^9&ATS!7_PKE-zRE~2frTtVUXo=s`AK`3G`B~>VGTLye(b-!g&;)8^Ki5P^zB*^O zMK}3LQaVGzBvBRv@yHBmrP>;@R)-|_Nj67@Jz{w!sOHP;kd^;1vg_b-8iYFkdnq+YkMzS(`;1a_ik^8U{d@k=4I-d<$nBU4r^`+W%8U* zB@l;NB8<);FKGUW0f4{-{HunybAn-jWa7eT>$sPbcKJ@u1x~_ESICYJS;8fwRb|Yx zuoOq1DsRSqXM57*>rxrCK7pPe)-M1&qQP#Bu;Bs)_j|+#2%qnY6f7bdIBW&rUm$PaW%TXsOh2JJ zJ1dHWm}&$WmL9Y{`lcuf>?4AvYhkH%tCfID59@CRn^7&pb*%x>nWION4;xsda}o3> zG9ZuxK}CQEH!wE4S3+>g2vc*_vZX zw;p^QH#0|+Y6XVkf0}35(Vb@)nT@Z2ylwP9Ni|&kf1GN_=?}=ym=L<+k^agmo5tP9 zn(`Drm@Psz8i#zjHKz{n#9*WGlW7Hd$qqKuh6K%#L-BD|BN^wLvP&iHI%fVQ@+qCq8 zl7`Cw--@luvgBr%)?z)gl36OFl$b);(eZN|?@A70HOW{`_3}tuKb0f_H~n{ofHntgF;$SS zyMG>KO+T$H;$+Rv(X2}gh+$cv^1jN)3Y?pHk6e`!!UO8Y&6U!-6L1^AyiRhcv)nWE zR~{T_4!C>1=Lk5GZPi_^r6eh=TEM6xEn8@|@R?xptd03<%db0J|Gg;vzr^PYa2{lS zyU2MiVEOKtJPDwO)4z*6V@aHI*q+pV!)d8DalGp9j{mXo9B1?Z zp#f*c>mVHr*q(s<5y)Ke!hUiPc zYEP$lj;HKtw0dGsw=cB=V+)eT`30}_oT$K4Y)mqGfN7WN4nLI~uzHb9WaplzJtN*l zE@S8=`V|+PsI4byEPTzT2HOWfUJeWxjo7&^KS0Qx?Q@}Fuz$Z$ zOArzu`m%%=C5Qy)GnfE7P<>$0YdiD88TvQ-Yxy{>??pOH0ad_4ApnClF@}6jxX6r8 zw#27kdO#>uDxe>X()kAaw7?4HOx#OaaeE?aR{<1rw?aDvuhU0VCmWQP0^d!P%E_|l z!!m;MsJoPFGO&?HY))y)gXgwqgzW11&2VWdyeTqn0Q*;nZlon@sfIIv2H6>ohj|Aj zn=HVC5NWcJZU)92<4Gh{?~fWH!ar;yKo;haD*-`>$wKgyVP7kawrL?8Xd;~#K7pLN%^(1$-~y_JqPk)iZ9U& z80t12%vdVLR2QA1D{=_DFumBR4%h`m#Lae)AR~e=s+{HgNfcr zlB1!-m_B)SkN}ksVh9c-6lJiiyCu|GI=J^zZClSLyCV8cp;jkCRlrjdMY|zX+$t2- z?EJ`2CVjlVFI(RqG+qAwgn#^HztIWu&LsKSYySFNvI$bU$Yz<2MJbG|v$YYp=?%|; zo8M1eu-5{f0{1KPIcHx3fU2uKJRXAh26wu;yIj>@T_XYYy>7xiZo)D*=mXcz!Pl9W zwBwJYB)R5GT^%L=?{jV%)7X-j9HZyEEP_HKCc6=rxw9rCB0Ok;h*%E{^fRX)$! zo`O`gzvvoYc8v>N9SOnLU1_mvf6EPe$BlT?wg1C-vyBlTYL86gk)OJb&)p#4g@1X_ z7pd40k&Vo<30jwa58$%^wC9UR1}<{74>*0_(b7>?^=V(PHP-cB*7g}eMA}KitMzG} z2RchSp_udv13e5Mdyq0omjXOSGB8jKROcT&n18ov@otQyJZucBF0q+H)%6{i3$&r8J!1VrS4h;728smzS ztIb|;3nHO+@EVewOj^fkoIx83)^3OZ3v%Bz(=8pp{WaEvYs9s#?gm$PqiZMIJKGKV zn`^({8pMxy%5u9uK)T;l>a;#F6-$c=b|iU!vwf+{1HIr-QPTJ8pY>C!J;-5Roe zE-B#2H+i|qRF_4}B)`t;XS2C3@5D^9MYIXl+8-$Ufed>go!$$RqILmlf?f-GwPhmy)m__ zQP9#JEG=Sl77tvzuDUJUk{@>#Z57@!Te3TwqHwAq4|K^M6807)R7DibC*acHrvV8h zqIli--bCg6jQjyARw_FA0|2VzKEA~t$j>kcx8s}qf$S>D@MNwQoo;E7k$*NEj0WXt zCwbr-N&@To(q4`;j-t8b1Q|nN_(d}890SlQ2;T8dBWHjP2*dsxoPp9Gzvc`y{2QDB zToi(ikFm*06ocqfUgnj0VdjFuHwtFKXTFyci))IVd{o*Vlgh_C%hTprkNBD=C4V|L zM;?Vk$k8v=QzDUIhSdGk#1ItQ3s^yP1Kphf1YdnL>HElQ#mU5Aj<(m*tU^u`G!qS166*XQ|Q`RLR*BHKkdc@`!{0D?g8deHWxq;Mg|}&O@SCu6)yHnpX|34>C5eYu6cDD@g(}-qU@Tlj+C&Kw> z9C#L35JcRU83Ds$SmpxAh2LKtHDTVCfMFpXCqCj&k^ew^R0K!nHWQmaqMWnIBO27{ zDlYA5MBn-bYdc%LwX6P_lO0^;&TiOFjtXuoXE@O57*`tW+KzJB;Vxj1AJO~~I@dU1 z_Yvk3S#am97N&-fpYd-tk$Ga|(Oke^>F18&<*!h`5W~bZLidTK)kOp2PehIDA)Nftli!cLM2X!%k-{Taz?E!9p|ofo9b2|y-% zpefXXYuqqK1GZa>6M%>cpAB=3;km^ktVWblMpd&=fd%$0&lO7!;WQ{E;igpn#IP zEQ+RP>xvc*|369Z_Q2bx+;Xv}vL4B=!qqR)ij?rD#+NATSleq%xdMt(@rT4^;pAtR zS!Nt3pB6Sa`3N^lP@p2urNwZ#(XPEP4cd@)b=Ni7!3~}|3nx2>ZM*k@~9r= zUx_$4OU^)e0+4nqlw%V0ZlgY$E8gjc7aa}o!*l%b87}9XVy#~1!nM{9S8sHszdD`m zlE1mq{Vu?|{H80OE^y&hr!Xy}D^7wHiJ`E}>Bp{-I=<+ND}MMlo$z$3)98f52gWUg z%qg8tc)rNVkXXxruN9qexEbl@z@d6hok!Fn0I1@DkCG`bOS(u@(wXIbg{xS;s+U0hK3HU$xM>ol5vrd@PFr=sNyL<3@KL z+;0{@G4Fgb*NoD1M|%;xmlLG=9I58S=hQ2F1H4=ql6-QP;{hGL@I6+S^1}W2-*r47 znR8csH7w$U6qpwuJPQMEVKtJ@cEG`$r#zEmw_+6pe>oAj;SsUMghAtUW}RFbxy=`uIO>QmJU^k}rqSW4#^86c_;7ysc23MS zeGR81!w!MDc!8Y(1wBTv4?0e?)dCPm2!?|_?|TD{F89JQl&eC50ymx(f$NS)pjz(l z8tW{-lxy-dqarqT4Omn3xonGboFhSS5+*QqK;?p@1b-&^ z++|=;#aVNdXyil?nws`oTfJNiKIko9?o!?K0q+KE zJgu^+E{Ug=BEff`eIsBLrQEWBGz!usns2Y!Nb0^dKTTL^xJIM4cR3*5RxWjJ5NJuA zt3?(6Oe@`LgGkR-`l&T@slH#*zM4*qnHq8mm*^JLG@GH#*IL;{`mhR&1qk-kZt$+} ztX&5z!VCnM+>aG=X?xd%wB=Hm_gtD8g#b-K) zjCu5dv2x7LcpVN@f~?kEnvfe}*R123ws*B>3TeKad<}=@6Y3w-bgnTds1e4(q#tR) z0{xVfE?+%er=X-~3{tEmRjyjmg}s2f6xI^Rx#9uozgXaTX?2 z5-HFr6=FZBsDj&nPE1Jgo7tlKcNU5kNnR2ztXL?Q{6pFAN_pr8o>6OCH6O37U#f5z zP3&ZJM=7>4q|Zn|XEFfx5ylNe#|?92|H%jj;Y2m~XqHm*ZYM(bs15Uo*@VkxA*V zK=&?|2TQ_?SbUI0*0YABHdOPMF4Trg^u)py>B6aSMR=n4vG!cW?|0M`HVc2^H`wq+ zHX1#7&C{)J9Y)A;lt|lMqUBvDRQJ&M-#D9CT|D@|6zAa@Zk0RX1wc)47~!X}jKMA# zDE?#zw;vN};VmW!&JU_~kV=ySH|lp2=EWFd-+ zXDzpE1N%+udIW1(^-sp(NxjIVlF{rtt-EC=WDeW%V%hE!E zm=U82CQfT<>dGWqd67gT(TT%D)yyT@3}C`2HED@58PK`@h*nt_@{WzW71|V4HWR3M z2^9Xo_Mm1bZIUoYa?;SXn$}s%R6Q>uZ`(@NWUewvaC1?LtTd%JV9r00l)X75YLsEe z3JX^JEX*348jy{LDqv*rnRThrrd>O})S8QtB zGek-^R~e>ALfPkI7}?_x!k@SAD&d}u(yATNYjVchIlpsk!RHy?IJS*DtwibDi57R$ z_QJa^hPV4=JF0x^N|szaXe=m0z+@Md!!-M!GJ2c~m@G~fu|{TPePm>vlx-sQ+eqa| zsoYl%A0s1=k_FdGeWFwTsJN+nOxCh1b;=D|_L7do9L371{2=3BVLU;iOo{YoTG~b7 zyxE-t1_E0Zj{xTZV@{ZfLq1K1rQM38;6hMz$=FgS6}M9OKYd;U!cl|rQdOA7M)TcNs9=>`Kef7FO8G#Cw@{}6VTcYoJ z2R7U#x4Z0KM=$j(`s&#nm(Mb!1#P7QBPwbN3ST{g+#Y>(`0a(Sp1tMrcU%g~J-X{= zFh6oxH+MZRY6=SL{e4DzV5j5V-B#-rhR>LWSgdX^%&OB?qtR_3RYa)Li1|>_P^w}Sw`ylhnjY|)}4NJ8Gbbi+gCeI zTin|8T9@45k{ez2SC`Co`QKcI9L-#pexGYCubAtbz8Zy$qHAsTf2oCCd|jXAE|0GD zN(Jd3uM|X*Sn4ZRnK~14H$X{H<@uZdH$LWDvo9%KH2z*I-rCKocUT&fdY^2jvAe@_ zD(@mn5&Z1R^|I^e8OHeCjLxYjDSptTO zf3@0(t;U{UC9oldmH4ie=7KK6jzbuW_=f#UHwHWhFlRJp5aObdTvT8+U&d<0JuFAF zl512jk@k)RS_nwIk@R1Y9(vDsN6K4Bt@h|_;KeLgtGOtLS=H@I)yKmiGs}d>q%NkV z=qCIrB{t~$F1y_MYpmid1@es!UP|o@mwnU6)2XHj&(m3TOs6Ki#OSz0 z=p8l9a*Wb(Lb@THX1sckwD1^im9f`o@uTR>S8F=VYTju&CQSnUxO9TK_w}U9w-qH& z{fQ_Z+D5T}n&E}jzucG@tm^WLsu+CHZ{u(C*iyMny?N(ifZdoX64MS zrSM_!O2&R=Q3ZTdWcQtH2`nqyXFC@=x8N-U$+8(Q(8HO1hAxv7zB>Em0v*UAzd#4` zOL8k)_};vrqLVPKKq(6shyqvuQi7M_9LH7QGTz8f3>Ox!AY0;S@tfk8JTlvXeaBCR zg{3%3doqiFmQ(#X%ii?pcE_N;xw~_;? zJ#k$iOtP~c_bW?%qoW9(z=#>}c%b#VEkDaqmsi96a5HQcOxC$nWE&X_4+MiodkAnv zD=R3@-=M$WNU5?UboQn6^nhux!+x1 zk$n_)V~*TPrR8E|=C};q$fg*t@w_Z5FqU;<_k_+3m0#|rfOq}XWt|(!WClCW$1v4u z&Dclqpt=MDi+z+Vav;n)Qgg<&Dm<8qdp_CqxkXh-_ z3dH0`X~s(6uRCaISJN0IUvTleQauRu6ncu*_ zvi>3IAJYCI>mPFd&8DEq8FEVuQZQYMfT9q*EjCe+xhUY8q6H+2goOc~(6vrjBVeTCgM4R!!J#fi!SxFv48MTlmL4@RME7 zFWKN-dtsEe?5I7<{A6a+`%3ZkHk$_Z*B1{}pjD%^xy;va%^|{xT-8~ovEnOL<_>Ix zeENY@Uv_Rl9*XmeendARHM?s0uG+q`=Il^IU@BE3gCL1HBah9~Q4v zVzC@6=U03Sw8p&K^@c4|Z9x+g5az|suw~M+Tu-0+%gkwq16elDjeF76&UbCmSFc^{ zpgy+YpU2A(NI`QIh&!$JWdrE8;7bF227Wil=e54A&L2TGuGEH?Sn4JYiBjL&%XMNutF6<8Fu=W);KeZky|ENFjMjO$ zWEPSD;8^cq3QIZVsdVOiFNOuf_^Bfix1d7u%_ZN3PVv&~a5?!1SvXJfXQci$nSfkZ ze=XZclZc8`Hfh+$dappdPv2JQ;fM6|Sy>?O%-Aw1)N9)~zvQY4eksGt*v8+tKkV8c ziG79Unag35#l6LuYK${gOo7P=ch>cY1UUJnhy7u|5?q!!RbQOzD47u(fv4ZuM_lDRS2f>0YUDy!w%Ap_>8j&3oSfV$BV25sk@2H!&=y)YioIiFd${UJ z@N=xz-ZY21pN5NV{oCMxwVtHKO0dadwRAoLJF)WnmS{8Ya#F2`7TOKiT+DNg>|7$; zIKLVPpUrFc5U=UF0cJL3@HvjV-vHAJJkMH^9FW{(^2-KtA5$G=di`D>`hlz>@`v|v-BqD2XOVjFbBTK zYT;=>%-}VA3|`A!x;8+;T-Wrp%NDt&K0Y1nN5l)#cmV<Mjcmf}r^0D#t2Jv+r_;7qz&RgOqXYrHyQjmcVznvyid^-zAqi(H@h2}U5{lL5GJ>QaZ%}aJ~Ipql# z$AldoSNu$V$u%S6os5jva5KEc@M<1BzUHfWol-{+MLhn-x?jbMlkt+l9*Mu?{<$oR zuQk4ANck3nJ9tK}N9s8~>B#t`j5fE*J?GP1!(7+;v};)8TGy~z%SPDyYny|e?4!E3 z>Tfh_R#{ciG#G)fOpE5H1NkZ$?W9L+mO(GwGNXbtu5OGYUBfGkqqRKp4zNes64$o7 z%W$Uwi_UZSZ>L}AN|RhNHID67F2_B)+6n|L-+fa|dEe*~Qr;0jqXi!5Q1=G+F!MPy z)5lDly!3=ip0svg7KCEAkv@3MmQax$CIg!iLdF9N=2H5eAw`ICz^y`#gM4?g+$H$T zE8NCTQhXIl?pCX`7VHO}SoU~ISAz6yFr;(MCFS5qRjt4pt5lJ^zrE1UYsYrQ4y zBMHG~tg`%7XZw#D)Ob=U@2s+%Jy_Z{mD(Rm?G94Ao7BRKZWh^JhW}c6A0WD~`Agxq zCh=;Gj1QIG$4c#u(sq|L{Y~2bF1^86K+EyIUXZ3G(nfsup7dTOZC^_79@@K)_Wr5X z?x9WlYc0Ot@3aCF;-~${4G}Ok-B)bU@p+PN)We-z;WniE z;W8&nW$w#*rur4V{EAUN?Cwjudhiy6qqE{NpqQmn@v@%EUzb_`8g$xeW=G-@-cCBn z*gIQ~bku;G#MTFH+%i`=2~f?$|GAi-h+e9%>V-71>v@hNF=w>=N&1=k!+ZISVaM?s z^)2cfdikW62h3DHvv2HHzoupbG;F6r5W1GtlOlChM+gHPG)a3-(j5pczVHx-faVwh zzA<0l1k(ttPJK#y&esXM61DrodD5lQfyyrT)64HyJQq)Kh-96Qe_!{{g+tzVZ)bxP|pAl#1~`BAZ#9W#!in4W2b3)7B*Hp7;O^e>xSyf zHSOM0Y82{Q;>+p>gK1q z0sRbKtC+9nar4~vYSe~E+qu$vu-?iwz%>jY4@mSk)MO2si5HHrM=;q2L<6 zx4*Ap(n+xX&42<3LWAb->MjRszLoC7GqNNY4X~G|tipZ!VtG9185ut$ zOk?G+Y(U!C+HBzs?KZgQeONig66&WtnT6h_MX+)qakuj=%pCBJRZ|*GqWITGQYu-_ zlPRnF+S{B!`+Uj?5eNPWZ4HO$i5n z(RHZ4+^wTcab@?*xTd(EUWnDYX+uj0l1&iK{+INzO&@p7=2L%ba7_-*pKNn|GDIm=Hs?`Cz!nog zb+Bto^xWs_)#W{0N`JalT+-8pL8Qi9SkI*!yYNGoG&tSb>9(MXS_K;>Ai*(w)$xxmZCUM}%+DJTc_kb-e9`L|* zpzfq-$4)RbjESZ`G#uj56fd=+b8tj=UJp6wLk2hYV`V1GR!*OV#e zEI6CS2l=D=(pR_t3ydGM-%cEHGQ{J+zl$wNYP3QAy z3^>}MllA>8b@-oj&^5YXrZ$Mr)Njlw5184*NjZU>lL{x5^tq!$pWupMsfsgNMta%B zhf!X3^Rl~_T|Ek=`2dxD?JKCpvX8}ZL1I4}CaQ$zCERF33WJdh%g}=@$ujgXKlA|; zCZaqaUAy#V+3$MwcWZVp3qW)Hy+{29ttNqMqAR!-#b&`muI4Ay`3x&MR!`%2g}U~k zmb05^$c3Kghjvag%!^D zD)SAtJJmIu?aI$}{ybOJ9t$@ol*DjthH+(6T)2W-T9;jE1giEw zx%_&U-|TYYvRhn!hs$rXrvtj=RKh;!ESJUd@C*P1`;RO(FxQh-3lErP5E z0tn4Qtc91ioW5h|hk#2Ixx$Yy1x`M9`Wci7Yp)#YtR9L1NjV)jr_kFRs|)(M4!V|b zBEwaqwgnY7^Ov?eo)OH#Uzhn)<7K>S z{4zi7Q{$-jVEq@S08voB;uD{4VTo@Jjvj3AxiVr4T`67Y&aCnGi4K8HbK#imBWgc{E#rZLDWF^Dnr{ zk6mM5+o4qGX9Fa!H5abw5{KLnpHOh8sptWYAe@J8kzebw8(emy9VHsi5d%Y>iZ%7m zItuE;0++vPxJv#;1iF{Hd^wF9td2h0#=bf~%QceEI?IjV^W%ScopL|%mvz{GHVDbz z2K#F@4g;K%cv-rYw_D;dxgN9mv^?>wY=eEC7f*qcrD3AEIvI}~-!+pf`70mA_4_&9 z-@e)xpMRD^nWy0ZO>dRzw_QeW>y5Pqt&BNJO;Cd0LOK!*f%>3+*3#X&)en#?Zoq)I zzm8yLHU9AKQ%4Ni1SeKVrIb7c&|EYnpV(yB)^ z!>X$*$2nQWHRIdt<`|zGABJ;*qZtd&2hv3XcN$*;llY2MGH!$Hl)nqx$f-(Pb5fLf zDZFLOK8yc;mu@6!o$3(tix4p9C||i&oeTe-JH$Y-Cb^jzGKdA=-6>*t`BUL9!L>fY z?zv{N_!%++_vsQ{08e1DjJsFT(=|KObO7=+;L_!tE}5=@#E?^5vhMyEp5AuR8N>gf zfdvOEU=DlsZpk@1nLCu?{)wQL&GmN#wL0+JaNAy$GCa4*(ibo8R*`#UNba)!j%BFIM zzaF8iSmHqk-7{8CiE3_B=l2k zRADsG@LA@s!BldBeCqe)5GnQ!mVqt60%j4iu2@v84kv!Sr&`ELzl$mnh5@*la{HKp!9Wshq0Wq#x;zM&YgK0XZbQ=a#= zln(WGyA5=^t>xBV$JL}R)VVOkEvR>UtnUV_=Y|h0!4KX6x{;;MK?X5k7a9I_OcaB^Mi0>>-!vK;ToOhgs4Q!n|JGII-g zZbzxvhcifM2zbJY@?tLIPm=AAm+DqoeS(yam-atO?YXAIbHf9&=S#Br>iS@R9Xed6 zfv{b#*&W*VFS_onT7SD%-=(YEtsS@N5qIiu@6nFgT8$<7TsuD0_j~!8Cw%==J}~3Y z_{*R5@}yt!oG&r^h4aua{0fmP!2i3|JZj>g2W8}gQnq$TQv~!NOq#TNK3%gmTk5)Y zpu37a<^$-F`kF0~S9L2m-@g^VeCS7&hYZVkt8R*}(TBbP!AT+!*7iV!KPj(BeXFzs zK>bL@lFoTXa*P}6{8g#^#8V*oi|0*OS(xruWZdhLbBC`Az4Jn?u6}?b7(QjXRy`#g zj&;oYJkiRaT-If#c>Bwy6j8%x;y7)rc=#)i_)mPuUEpCa))An=EHDnfM{M&_&20+C zSI9OG$ZEtLbiz7@9ibHr3yufK37^L9W(qL=Sgoxjn-}*opH}1d18;fH(UU#jPzDSa z+1_GLHg$5VJzdR1)&#JP;eAyaH`dMA$ee4(XyrrJ$}L%<`I|cOQ{PBZp04YB9a@M$ z(|jYN#Ejr;z2;0V^%W`6T5-Ax6Eu*rAi>GRFB*e;08K?j*uM*1VD7*=j?g{dceLg) z((hBkaZ@)}sveL8tZBF$w7ax3qyscX0darBsGs^0D*dgJ{!Ru{ z2{_QBPlzAVo0TxnrY69ar+phYNr;Vv1t$7#^=(q|xlcazAiY)n1ToC4zh|syDna!D z&%S4+tkKK#zT^nIfcKUvdZ=<)mYObIV-0XA2b?WNfQ)jE1|d*&Gm!X-ih2wkm;) zHn(A3pHq(h2Y?{VrO&PqzmX2ySR1H#`qZZzYt=)l^HnM4MV0Fa9fyb(uhCpu$J22& zuax$+B;8BuN!;HmwM_S1sU+31v1VIqdV~%-(-5|lvwpg^-eDF`AG1$m;*@=4SQ(I4 zOwi*zPZi=>L&FH<(@+6g1$2WG3s^MA1>$#NlR1&=JI7!ji+S;@ai@8~U+1_9G|%Nv z@ih#+CNA#h`T(%ZvA()|PJR3n|K%Dk;6>i~qC8$uNd$B`;Gt8%9MBu$L~t9THbQ%1 zK;pXsj_6}K4!J|lenO@Y!4bcwR&%7pZk+Ppf+;}hCu?@4mKAsfaa5W+4fk1(yDTa7S> zXlSf96{KIVk$%pDi~)ABM+!6rRd+Q)0<5*;>6@11Ow`$T+cY<1Cqm-VJ)5WalX^ErP3 zcWRSr`jT+`0h|7;ZsD@%#H>WJ^`EMcY?_8uqqu8iy1 z=>+u&2u8ujh;hA@NQ&QEVCq6 z`jPdFfJ;fimqPdY%wh`*BCAYJ?)!UM|FUoAcSz{}2yRg&} zyR=TuVhI2OXc;a9)NweI)Yt50a=STXGZF`w2(T&Kt+&kAO8ZM%ZEaJMRLCW9hJqXt z(?OjIM^f~p>3h0jxrWdDYZpZ}asf&dbSA9mPR68q=R<9J-!J&c&-lPE{lv@X{wK@* zabNnQuqtFsFwQHyUstE`rwwEMPcz&SH^6>j&9FVY z?8{{wn9yIX{GNhA8#vymcVgTgt#FV+CnK*`#G31jcQHG{cOcQrPO3o~;Zv&p{@4`SA zwszsCPNx`T$H+4U`4FpC=9(n)GR(`iUK+hrc!EAFtibY2Z~_8$jc{c)%z6qWZ+qcg z{Ci7!uPO9_ty&{g4ROta75z%qu%H0pg7C5o?W;Z3MDt%aU8*ZS@DqmU9Qwwt z5o)LuMlqnT_FR+Hfc|z{&tFSJl;+nZvZDVX<;_}MBC%q&E5&m1INw?%fQPGjt@Ndy zK40IspvaY{TUsb8<-Q%h>jMt8hYS1rib0Xp_YnJShQ$cCjR{i>#tykdDL^AFBEz9kru|gLLWvdhj8--55O$ z=l^ikTx%y7OFUd+u1hjY^Ovms&?7zkFg){qzJ7_%miY;v`TCkLtbeFaLl_)xNB^x& z>LV~~(mkUz?ZaVY;0y~gKR*g1bON(EF(Yz4S6c5vth!;dH(AA*6>~*wHYZ{t5lQxk zinCefsv%4SGuGhQzXN_6=_@>M1T#jjfMk=`-AZOxcWs}~qPw_>WLr|@BzZw`-%;Am zG+mSwuIV$9ykeQ4z{sSU*IJvos!f$Vi|zy>q1s|<`S3im2|79_w`(1N8JULn^u?F_ zj3s{byMF3Yzrjbo;{*RIJmk;)CSUrO$OaYwHOc++qh#wOBlqeRv1aWmH-RTbYUv@P zK7LKD>;^k4^f_SXfsIBD_C!=n&>*J%ML(qt=`PN5^V*yh4>6f$3YSP3W%<3=8T4{_P%@ zxTZs)1UQHUxJI@yVT)bkvWgV^BR?Dfp;GQpc`P8TxMK#|Iru~)O-C5#I0MdmmFL2>i zrx5wD23UUDf$c2Wu2i?_rhP+-3^)ZW@HNMYz9S{>kb79BXMF6N-n260EUw!;H&-z0 z7v8H0o29|mhKw~lBpkDr|0^l=Ev0!2`Nh_9)32oW;f6nyUXzN~iI=sUH%_+P)68Ys zxKuAG`6+LC{n%5>@M&#mSStYhCO|rSNWPC``-t2YOLYjwe<8^4r+-1RQq%FV@GwYD z4q}1teUJ-xxY8eWkEKeOuQj0q+_g;0eh$Vc1HY1)ERyTRpP&>M7 z=pMJ8w#M+bVq2Sq`pG(VhF0z&x~H7|3lZ+&W(l{6`~{!f-k$Glls4Az+1E?k=f?c0 zt}&C=3VK#!WcxpA1>ysJY;57Qw0$8^n`i}Sd~&wK+F^KYXjwOWl!gt~3F{3C zcdZr950*X{wp7!}h83gXfAZi^HbWP1WXyLpo5+n@%CIfy&?K_8w4WlwZk0-o_4O3I zf+8S%o@`$Y`)R3J^E0$`x;2Fdg(%I?nkP&~zD~#jd$QZBzUXg#%cOy%Cdk^MZeSQ+ z7p%trR-ug@N-Rx$MWdEZWEp4zti6;r5MCbjhdt(N9{0^p_?mgX`AOgWoNs=`H^1y_ zUiHnd`;M1<`C?zb#5cd;n-}?xcYX681V}`uXnvVJR6boZwlGbFpk%z`c#z7SME0}s z$q$#ZBZM?oKEv`d@Stqr{Z8o=U;2Y4XJ}aH^EZvy6KaDW;;VZ)#W@MaLZm>xYD-yz zVP~co`D3JYyp;V>CY&O*rx}6))Bw1VAg|Y7E6AErb^Z&@usm(rLDK&{t$x98%+cR3 z0G1Bp9>B_Y-tm&K-I74-pX@rNPh!qcT(9YQPEHf@#g^nH7jUI<2IP7K-XqTQnoEbv zgt;;od?jFv6d7s;oEP)}qHdReyhiuws>n-O zYAHpIFj>GXPy!Y;|0!T+RX}B2)l;m25)o)ssn%!fhHI{stQ^9+CR@?e)k1)rv)}_g zXFw?R59^hAA*$s-{4spIkgjG-FiLFbshWJIy+6}IHL(bYYO={fw&>KiguRxa*-jDh zmwp)gu~}$=nzm^|G{>#39kKwZC0VVG#AZVNd;;HFGh%t*$~p<_o1{6<4#<(iJ@|-3 zh6L~*C}fB>V{m?`7-Iq#rB~!s zd|IR?e__jG%I8|qFN~}So77U26Vbobe2$A=l4FS)7^}~;nPbaKsYQ~bqz5Pa3V%&c zHxi;(v#n?ProqS9_DSglbhd-lg^`hG`2p;dey!M2zJ>8=?iXkvHDD9j6{Ex>JVCXH zR(+@`+jb-08;)5`7*B=QYQE~nPVaPSEcx#dy}=&$x+-M!I?Ufomslap!bb6DkW8^e zXG#{}2^q%}za{BMA|DD&-kJ)9gx713_N=wC*79F!Xw_}U>Dp~7r>Lhe_D|}sQGcHb znClnrPYy4Y=r5EM`JFKNLr4eelTkORD zjfA1*{ie9|wc*&qw4*YXzhSRFG?Q3fX??OPOInGc_?+GuI%T4r6qSfh_Y13mj$ZGu z!)=v@$s3Fuuh+>i6GC~J$vv6rtJJ3WA#emUYKr+N-d-0>_W5)Be5?>DzXT>8pYxEW zpIfI+t<(iHCg7vu=ir_t`>Bat*M+oXcfw^x-uqmI^MXHt+M#gB@Ar!;g`aB@f6q7O z{43-jcuayCHYOWz6S0bP42bDq|URsGKlNB7}WY+X?)eNWw3WH9tVDo zyAJjazP)z9G^K#j5rR&^pBdgtslfPPrht4S`U+ZW_$u)`@|7R>e7W!QrI!@|J~6l^ zlwRsz=x=e(Td-~8dCP!#Iv-D^KOjAfTXJq#wBRe=RS~%rBc0xyaHhr zRPara(K@2e-#Sq8>!o_GtnsLHJSKZSE~URqLO$Xt>3CY?Src=9?H@93Pi0e=?WGfU z*V>3LGv$M2) zby7SbA7Fh_Y(i_zAKjopfag#IsjT_zix40kO;fCGj8g6&5-|6zdn$%m~ zVLGDY0JY|txCCHzN;LFDtQ~mD^?2Gn_^f+A7F#U>T;hORzWT(-nYkSKZ6 z7$2oY1;Hn->QmSJnMFw(E;q&k1><;4|FNr_^O8L9yzKdk+^|?q>!(WwYVY;6HjdSp zZFF}W^|89~2Ra3KeD$zbzc6z^7+w=@?H_(KFbr8IWP?I=T^KhwOjs*y{d-A9)9&1r zc99Y$2#ZQR_+A=*uBCmnw6~Uiqow!tazLtO`ZP$?a((yVgaoA;wu~JLC(ss=}XL=1YA%(x81v6|L(73hL{7?duwjH>$uU z?QW9`T)6PxD%`l&Ro~~X=&%zRT#p7mo|NQi3C~E+a$UZLa_nx3 zA`oInTWVXA_8OrTjhg;SdmX3;{LU&A?mI#AiRLAia-Gtu=ypOX-fWy+Gv1QU;a>Hm zAv*NRS=tA(*-KizSi|dj`U0bIhS#(z9w=2yRNvL@-qEr*^^v!=$6H$Sp8n@m0K#G&Lh5e+i*drG*_Yn;B-*my%R#@B_u9324c~WN zlJKrYT~F^?f}2@#EfsFSDsDifYw78JzN%~K;|3&dz#6WlziS!jTGn(eYrB?O*OI!H zI=5hm8&Gfg>mGw$%Z9FHW7qOSH@?BOZ0cGzcMG<3Ekj+)W^TdOZsw0&%THX(a5sKC zH~yz?!3fu~qifm0_1x199px7M!nN$-T6T9sf9YEGb~E>N3-)m>zi~rHy9N6>J;*IM z#LYa^E%*;N{&#M{k*?+UuH`5<^KduxXxDO#YdOvhJ=V1x?^;fDEx8*%(Y1_sEhoE{ zQ(Q}%8+y8HIm5M_>XuA#Ew{V=5x)4zJ8tZza{1;$Ahu!?S+Rwz7%H!9B`0nzD+u%s zlwpU;Dr02DA@btkvf@8vgBJPZ2>EiXY=AiJqr!=B-%t(5YJR-M@>M63i`37~(5lmQ z#hDhxlz(8&ns<6nJ+t$A8~Ig|O%s`p0G%Yb zXYd(5Q_+yE8sJOM+eCJILu8m{@5MFnhC7dQ1X>YZ=z+#$OWxD8M{HpIv8^8=1<8qw z-FQ|{yHuyH=9jJOY0A@jzx(-eH-5C?T?v-Nx({gMswzLXepM5GXC){dhimBuU2&tn za+98Xvu=Bfj=n?h`-@(FtB$^1PrOa{`m6rvF1`G2J?cK);9lMTP91QMu83RUo>`jz zO)s0RE9U4u_v`r&=)Mo>)Cbi+tk2Fh<@4o_>MD=vHh-)RKmC9Wx;YFkQX~f;x`?>6F!z9U)kZVY0Sks^ICs#?j z0f4l_wcT$u8tDt}LCEt&_aB>zc!pK~%84_mKub~vR$nKSrG%(gCR<4BW>WbhY1&3~ zYuRL5d7(+(9Vxo29J06c*tSQL^sQlF(82&q4>= zv%nj#lW>R7--^Yl6i2)v`8(FEBzs?yH>LU`DPKlLRg#Y-Un&W)HrP>l^vZfFxqKk# z42g!#%>53Hn(VH5SM457V>9gqHKiDwFUsgMVzg3WL51i-Y-hlK zFtCBCPt$=EoszEmG|+CW1fs3zxB;LT4_;_q z#3>^=Cd3h=c>O$7L$dWHH$TonWdzu?PNFt=eO^C`y-OAxmf#W5$E6ILm{m5=gFsUpxA7b5?i%a?KohZPW*ViOZmGDl zvU(^RF3w&m8rVKuoLCU1smXta_h*}T>YosP!21CC{~6&2z*vBtZiOnt2)bGo0^a{0 zWBaCe=`yw-<6--`|BmWcDGsZ#f)kY3hj+xhxrnhytzpcYY@4i6s)@uu>XbxNYtsYq zlu(zZ*P%WMP|FxCU;Rdu=um75B|@T^Mk~{)=@mpR=osW!%?&)2-I^-eP&Uxrc9h(n z=4Df|OK_}2DJnd43d2kjvv&nsnKsF`Kp|W}8ETJL{MeowZ4{6?Fa+Xoj z7u0kOee)gBI_j|n_1R=^rB2(atb!_bnj~2J05$!c+)BFUFqIvnq6@U-B8{k`C4L0v za1YBYp04K17?2knk;J+VL%comO5;Y%?!@Qv_+)49o6k*|wm|36tZUJc27R7y(@z$&ErBiQGaAU}L#c37>y~>rdckUgR2+ zxx++`dYu=RamH($F_Ra~;qW|u0nqwFER0MD^_yza;~?=P;9w7*xHWJQQ)f_ z@e5nK*xC)=jje;1hw4)tag0x5Jv?WQyPGd?2a$CoDvO&76mz2$tvQbjDNXjqL zWrw8fl9USJy^^zC;`d4X0a>_TQuavBVL4O@azP4CN-?0kvtpkT1R=~hFOe4|d_m5f zkrwFs2}_pN+NUu-ei5Ucn%c3om7sgzP)*YxrW+#QbMGJx{8f$mN+D(C^&_f3BwKLh zgLG&r;RHps(D$tO z)(b^hp^8_kQGj|rQ`5gt{x8ib5x+(if2X>_Ex2A?>v28djcV8TMv5@{CzZ2R{kl!X z{j8#QsAO0S_NeH+Dh@#w`;ChYFzh1-Rj#K-fDvQbadq_x6@N;tIHS&ma1{e}7o z4G_8yIYL4Mh1Q!pf{q9s1w5xIQB#t+ADu|x=MsmNr!PMpMNVf!Q8n9VG=3R9Idm&$ z+`(gkB;3w^4?xK4#s13x!qtU5sF)GyY@Zaw-J`$);2V%kSd%KgQr0V`LnLY{-SxRa zy09Te-vHo9AZU!PVXl(Yx`yiAk}6s0lGQ{C>gcZ~s?1V#V2a|Y>d-VZW%*xH&retS zRWojd;RtxsT*R&Ct3im4d|O%XD(fASscyZeEbtm1s@?!C0s1Xh{*MgWQ@~YMsel(Hl(_NNpq-{HS7oQfI4az8xmeW5rIDx7*~dSBGa>`;~pbgsWT) zz{j&dA}Cm&Fxg_rv21rvJ#|)Do_ML8sIVc;Oe3o~EFM(UmOkuY?1#EDaaY4`gm0m% zyHR)mfzAKkG^&nr@GR#Z=M^GB61b|N%cbANJt+>x6+ma8f^p{5H_vBfJw4JpbLyw- zdm8AY(c)k$!I+Kh0~!OsT-E3na4o=D4;7yEjN+9(exuH7qf4)nLIHR zL5E|sl)$<#O3FNn`kve$NuLs(DL3_l2i(Bd4CxLqz^9CPIsO^r3&YwT^h=!zNywCV zAg-1`JsZY0eMXA#`iy1=lv$-AAMq;*wPZl1)P{Ba2eI_^I;SeAdTg-3`uPwsCjD8RQfj7 zUtkwwMFJ*E!5C|KHb9P2Rt)BFg=sUYjH^XNzU0GKd zQN4AIado{&dR!e1HublSEx&ffEayuxuld|)b)m2%Y72T#ZM%Fu()l*rw zDt(u-dMW2#W#6N$K8UA)154QtBAHX!gO&TJvL9F0W6Bz)oS{k&SJo5CdRplxmGzXO zXO%TVSwZEFMsb6(#wu%^vPzVmpe(d)BAa@mDlAp2r>SJj!!N5M5bF^C{JZD{I39E_ z|HV`c7dfWl#+Zu#8^wz!3Iz%BFQS(}55`H}V4VM-24gF%;+YJU16I*zh(##AEX!n@ zU^dn^>6&;q&1_s;+bGi*x^Acr8W@2bOm^fDrI?4gIG57;8a0K28&c(S+eN;R%WwK@)`Pio#D) zS_w@UPXk6%-iw6(j^-0+(nM1_JmF<}bvk8Crnb|l-V|#7Dm9-)6J}GLH>mC$YCex9 z%%w?-DDQ15SVHwbpv=WI;Ug+oM(!6BTt`%`=hjtv*NAS;{>@)-kGklvZD$;6+NQA}}%<2RM}G@lcu}fPz1PhB=i_H(_eQ zw#Ts7fI#R*&dB3Koj9j6|CG;Hb>&IjII@5P-A&J9eoyXk2M2EF{JXg19?tK@`F%Kl zAeZCq#xV#e<_V@@oHE$(k8t3+s5K9oa|}Fn)EKUhS9L5$fM|G;M@{6|$*ilv|JS*+ z%#(@EWS+y$e72WxKb#4lGM95%h3V^@Qps1Jt*T&$=EEV8>MuMldZ8qlcJLYx>vgH)IcX@=%}@He;V;r%8!)%IC%hK&Ugu-RtDV% zNfMnXuOfY@p7d)Z(G6u|K<1}QY6eUtrT`j?Kg7wX7y$hBJ!tg7#>`&4m|poi#e=@t z;4xN_?D#naw=)*}R(#|d-r0_wT*LkpKEOPf#}{#H;J_iSU&6t0CYHpIx${`Rg?2x7 z-ZjC|xJ|-mc>qh7+LC{j=-&;xYp%t5x^7*qA*G8(Co(xTc~V~{!0$DrW4uWb$-;M$ zcqv2anR;?_b&OJqa6<_=VyDV2=}`B{Rhc5d=RucTuL4t4e5qP6S*6WT(eJC0rK)(j zN~u(JtJG}`X);LUbfPB2nTAbMJ zC0zJ3UwM+9Q;-m#LfZUD0Xpe(hA+OV3cY4*g`w1y5FnJb;$leNAns=4TB0pNJA{4_ zcbCv!LASWQPY?@3`-S!hSBQ1k%+k?E4C%b!tSmS!u*+e;EKbnD+8WZD({*)Tsy|6Dxi2T`)JzF?8mc*F-A)a=HVLhSd7HQONUzWd6Hx&O3P&VypHs#FLCwcrbhB~ z1L=?=Q4M9ZBaBL*VlbmKvG~IYNv-vjvU2j)pg<_gYcY*0iZ5`P)$H z9rV@xX3=mwz&1F8E?_3HI2JP=js@sOijC0AoyjHOD>2NAgh&o!B!gVQmi4ubzAo#G zRN4CFy1Fb@)VRaY8(O>< zzTcNrV3vyiP(`gY))M+sX-FDC=u|0OHyY2Xr~lc6uMl;#6RGfRa>67wcdpB^0Y1=- z;~r-j&RI`$@;r98v%8IbmE7b6`;PN1=Q)zZiW2_Tg!4pI3B-8Ov62)m1Ab&T070EN zw#gsERHkbo!h)O@6l_ny&IYjw_V@Cv9wPlDS>8xye?iVV+!A60R>p8p(YT}0AT*Kq7mwj@#=nOJVgn0(#GcuUv zW=(UxRWaDaH>u5ARVs#)pVf=oO_tzCl?puR<`e4HDpe3x^`VawdK#HbJ}U52K@=5O zR1l343iz|ApcYx^wMRT!6QWGwret4D`U;rTNVlNK>u7s(N^C{NkZiRfXoUXK-n0}^ zCu)ih&O_T!-2&3b2cD(B!E(7bq1VZeP3{|?K@`h=`iH0ukBTum3hBZOT5Y+AjEV3&*BXzHE= zKN{Jse+!NLiBh-HxSuIzJ2lxwJ9bmm4hrw2kri})53M+0got7b&`m>KXGMA%^{QG4Cm2J({yZJaH7?IF>Dt z6qDJS!tYKuwNqEW&elv$d5urc;TPZFhJPwh4;Olv;hn#7`4P5oVV&giN}hFwyB_BdZmtvD<*ZRB4!pp3Rq?P%Z-nV_L6%uUwk>*{ct&P>r~1G*X11r7AR3_UDX_C(96frQ(9v?V!MxAD_n zXBylRj(AJ=aU-|J{@#0rvTBeUYYNnyeiZ!8NWS^0~^?U3AElDk*NZI_W1vSpui+%LHYWb+;w_p8uh z`5x+pf%NS_Lrw{P$kljqqP$m6oPWWS{{WMxD@0+_YwE|@s(hA8nXjH&sB!@j!_KhO zM5`T#AMF#hf4z#^tlj|3yHox6s{*VSJg8i(w~*hQSIHNY^9ORPDbq)eMJb6C0sIzO z5dRF}u4qdwt5MvW=*^qyVl|fAk08s;?@t<_ZeL2cmzEBsL-$er`{~F7G!8H?7T8DV zt-&<(k7uJA^~Do1g+Be4hXhdYB8tazQVj?L4F)8&fo|GJ%>fG^BsxW4_u0=HfN)(N zox+sL`)@P?s_VKk-@^Cico1+DN5ugZTV?cb08#l`a`7mhWfz+Q z?vYq_=6N}OZ*gD|-?o6u7IN8Q_8nz91|=bvR|pimn4iaE&4CWKo(6HLF+cyvH4Cm&CMwsgo?Nocf8JA3VJ3xK<6M`J132 zb~nsv7dad$ch->BF#<7gFhPzbAtyv?)R$;5DJce@uY0q=hxKJs;H3%yEDR7V;*vN4 z*5iS=^Pc2 zr*ub?TjJy@?xdV9O6M!xS!DzMx>?apif&QV4{2bEhbewi>F1OVDJoJlM)`}COfe=S z!b}c9;7iIk+4zjI@jlL1OTD)bg%Nc>HZfDiPqacMtW;F4+|N{SwaF)kSOQSI^`o&7 z!ES>vAJ~W-XeSPuitt>|auqzOq)OQcIU_>wTL?xt&tMqBsGmUD8RQF~RE|PT4as6( zLu0O`(aou#CEa>G<>64mlG2uvZy?`|w6OzG4!OCsFQ23fh4QG~%@piGaRp@cp}0ay z7(o7e4L%=wnBoSRch{)F^$@*!bq74er8 z2OTmp6R=6)tp|?1nfx1wH@YaFX{$ z4na&Z3As`{^Cb>V=kl36cs3`);pJ_S^d>uRLEOlz7jiQoCx7GM61LytxOX|Ug3)0Y zMh;IoJ1fx~gs>5&Z;Xz}TF0X|aNYIn{=m)_9`d~@HK4r^0CVscSQvQaE(Tn0Y7P$Y z%F~?XZK-fVK@&^o*;NvTHWC}FUq&M{Fha&5k*~JYxJIa@P;1foqC1%Z%*sPWg#>Rh zY8LwzaeD}N7yDMx9=+?_Df$l4y+q$Fe3$5ZgzgpUE!1Cp{Um#U#N8*p`z3Cm_=ZdT z2;q^22-ZRIg+vz#j}mLNaIxsI!X?5JgkBIDC%!SFCknmjjd@E@gDY3QFZ7|%Qpx{7 z=xgC`%zBF=&bW2r+bBg_#n~p#&+t&-M3o`ip%@hYP2^W8I3jXXpk4z_44Dn!eV250 zm1KrxxTQHl>l#|eYb#L?O42?^bL;6Gl&zo-5w3)Q#!wN8m5gXftx}mi=wdIby@Cd; zBAKZ-6ElQouT3{5Mc z%<(j`lp;q{vvG79e#Qxu_yUzZPv<96&J0R^i2|>XyiBd9Q|2`4_Zk&Vq0nTC`l|`v zFMFMO&ZL4_)OI!%V4-`9d~ZU5m2sw;k55s@%d8R6+3+#ps z$?|yhwdj%WelYJf8B!dnh9)K|f2n#MX|dDPC@}0VtLCpNf0@dhrTlYL^c%`Q&rs@F zZz=zLbBJ|48|ls^n!Rb0hSzO2z~QKD}IpzEsJpRjoB@ z%y%jpNv-RYY*2kRD*yMUXrs>0D%PXU{d<&uud1_8W$ah=4=DdZ<@a19g@;virShLp z{!{9PGb;L=@}E`y^U4n(g{WL;H=OK1RB96-R$Z6iP1f+UHzMueayJO1L0a08)t-v7 zjqBD%;!S5N>1wWW4eX^i4Y-#|fxrNM8AV^3@?J&Zbp!DEtQ|gMn(T zVam#}8vj5V_zcd~oz&+5rC{gXOFa%#W+laX^ck?40w2T6;Cj*&{V#}3kdsDm-;q2T z;@*FOZvM`#EB+0=X(Kakl$$!pjE<6Vi_GXI8Mn)fo|0QA{f5d-gC*lRnK4b8&6H-d zq{aeiwo)=6_E;?f%%{SGeIVXAA*YTDofSWb%X0!%bqKTl83_VHt5$AY)@-2j2x88I za0^0@-4vnI1{SlslfKpS4_3PgU>N`>SnUOX5dc#S-iv1`c^cuFvE~}>MBuQhds>x$ zWr!*h!vB9P3H)mneXsZ#>ZRpfpQP51_v6Hkk?FN$QHFe3pt`=KN|&kd z$11!+h09gGOI42;AbS4`v~@g{0+X3Q6_bsaHfu34z|5nB2&u{xPR!%*ZN_0|2id}P z^BKFJGeOE&$%{{b+m|hViDG%Arrf_(jvf|`fRR|)7%j^n5=fVO@cL{}1&7qA1k<_m zWLvWgTHjFIX>0`ShkkMk8c8IfO1dQK^+~$ukir2AW+b#$@hd78KF3U4E^6hC)Vc#T zbE)uaG8TJ$F(IA|HU!Sf4qmS=Bq*-QCu{+*eG!@KJ5pSqV0Ov}UyTwbh|^jUwWGqe z^u!I6pG_-Wx}gKzltYL;bn|G^DoXj1QjjV7E$Oc*XN}RK&~b`yz)=}o65uVk&>!aT z(;S@0qh2yrpqwrI)oFg_C|5;^?>Dp0S~Yb6{)!vP=hEz4%E}`f>*`P%J)Smx1zZkA znGDIXh6HO0Mq;)~e+A1Y}c~{1%-oZXIzO ziQPb4818DTP=?WpKt~j8Xh7))Tynb@eLn3b7t*rZjb+chk9oFnRzd^N8(4uY_7SnG zC6Sd}KIn4ZU;?9o4k$ECc@TNpIGTWh!*J?Dc!G)lvMsWs$+Cg35?lk;W!6K35^`xI zKA=2<66B00y@uQaW3EwR$)jp!vorionMneNdj+M3Sh%po zM0KFj9E!=MLgbF(6MWJPU@%glm8@_lqUp8MP-8;Y*>n}Y;3-D0tD$h)#--J<$vi3rwPrKTVZmio?H%xxqJ{r2dk3(&{Qt^60CyzVhqEfxHjMVn|L7z5Z%hO* z-p(~{$`!YAK~GM&gEMdEf_u227Z>#50(c5A5C6NZUwtfk=ooDrvQ0^M;7L8{T@alK zJo*MM^NFq@1PBfh(|_VR0mO|#UrasesGoR4*EL{cMx|EJyA#wfS}%H4k4f)4^s9J$^{evmCj_Nn++}_{e@@T z+iGN8ZyzuvEOd;5;L9$OT}7BTUbVQnkDEiB4>5HNUvG1VIHTbSC7awTQ)f_zxxR7b zXEi`oA4j7DG{Y2$aw-qXWNyONmCRSOza{)7PJ6$1;s4cJH@o^?^8yg3JSzYT$^58JK2CQ9RJiL9yP;H zd{>V%b zVx(RzNluVaN%BLYj7XL>b%Aur%KEanku+)`=Tl@$KTbs8m40D(pnK`^hp07AX^w}ng|ACUWQ0hRB(ixv!ubq9X0HB6mx{|XN2R8 zSH-erb5s&%CNkCMa04z&<(v$z!ZzK4^Ru`^Gmf~1Gx7R&;HZxL2PCQzjpBmrGa z=OeOrdUoTaTR6Lb-R@itJg4VB9HWudj#0!tJ!(YAQIDC$AvBm*KFRh_6Jct3s17~N zY0q#FtieQfUg4;jJa>tKWtM-yE{=<(oLSDkFVOkRxnCRBY&Tf54SX+F`#%UWuwxa> z)rxw^=|PYk;Y{y%$v$aB^|ohz#DWa15teBk0=@ys=mQtT7AmT}FP#MCC@z?D2!6_u#? z<)(EJeb(^|tt0tjsMw~WL`v~mz;taYjHl*a|5x0f`oH4-6kO&a^q>X7DeuBT29%>E zy@FKOfi&?xFU}MRArF%u_c-ny7{s0y3;pxPii(sQzY(+DQC8 zmHbH74>Z@u5uSLs$l>zJ~+umg9`<*II+mBaHN<;2H1ex&(u zBQZ4Mgjr?!AmTkfE)@Y{P=x`{ZzbK4X0Ta`(fDx0O!YrkNeTv6II}VgI%LSWBg(n51uPcOwK8}$j0zXIKI&K^(c+LQQmYLdVukdFM7p=K#gG%hn; z2SKce+Au^$Ex4#sMUPj5&Ki|34l5+-;h4H4o2*X@8+gh|hdQOu@KmamM&sJi!`|Xn zT0p0Pd)!Jnx6{l!=(f8k?rti+hay1D;H!O^G{gYMsg0jAW7!5jlIl$b*O|^`#90*G z%E<#w=o6$<6_0S65zIxLIFhYV9Gb*#87I8XJ}~1mdBGgswuIxiA@{)0i!KSma>KS! zK%Mqz%HVOyIVHCD5}{4Z77f_rYP>txg^`()t|#KNjuj1s53Ks|>BAR*mtu;_e907B z`^r3H{v4GLS3aEhOH|Z*s;+0ihmbY&y~_Vl?bxF}g96{P%)>8#C2W<|PI=@e{Y1IH zP=j4wdJ_Ed2vCaSpW&LX$N5b?*E}rqx!fGC`GH2V7=~pYet9_Mk#>R=5*Np}%FX1J zFb$31EF>?DZ_H`R=H!;{1=roUb$%L zf_xVbKtsx@*4arq)9#doZ0IMp4hv z-jS3XqO4JrJf13FprYp~`9%thqi1GN)+CddYQJm}Q=KW4599D$dTtIPdJN$ehJo}G z8o!((%PH_F(MpP3L8YIW3K$bo{R_E!C=(8m{l-{|j;-K9$~sA-E>JW8@hX}Srd)w) zk!zqyfY{MI#^zqNP%FdtCK-n*)nk8smNd2;9-q#V$`_#(Y0O24zrK=3wc*0H{Hx0i z+VQAdjt1H=gss7R)+(iLgx24_XBSIKL7nA&R@op z5TpGeSFGT?PdRca7k|S3&$yzTM}5xatN5KSxz|@5_?Dx-P8;A ziSvKpT0e3A_q=E;PyU%@8v}$ne9R~fAdrL7z+rK4-TEapN-#~8)HdCGB}Z1`2N$RGs{LNct|iTX&A4%atQhd@1DTvw-fK^AwW>4UOX)~OHB8Hoj)BNcVV9vgN>>L()>FEX(y2;2N(YpcsZ1F}y3$uE z-OMybIax}#Q2JW5nkwDeI5Dm3mEB(H8w~g7fcxvDEUqxp-Klg>rEgVy zm(rf%-MUBVK1T6w-H&K!Wj~~>!OD45S&u9In9{?PJyh{M2>g^TW;e*r95b?};2i|oaCs4c zcjI-?uK+x&?Hhl@Me29$OMCEQ30a;ay& zQGkTHQH#3?Dg__JBo9(}I3Z&yY9U>{h{k+m3|v|JfYchUEmIq~IJq`=Z_J}IIE?$W z!S(6bE?dV4>WjZ}fQbQ;iK9)*X}j6pPFB#nci>2K8ZD_Xu5h&?xXk`qE4 ze2ELoIP^Y>KX~j>zAMaWJ0+`1lG`c`${XYT^%TUJ&>H2B3~~pxV)%S>8=5(43q+nt zRFq875MX2QhEY0EKbWMSs;?W?(|ZH@Nl0kw=+#LkBQ6LAp$`73ld%gVT#76R`k}WJ zjlrzFiuY5#_dEF-FB+vDcU;PlSmRGfz+Z<5sfho5$JSSh>lueNbP+{UsrlzrfF-C0 z+dG*{8J$)DF8U(%D^Ze?rEeYSUtgR?Qon)pO)-lcD~(tAb72y-iUMrSDYSQ}L}T`!2=aA)xP3+(&U= zrSDhzL1jIp^k8K_s`TTEA2SL8YbZL%6hC230JDmWP#jeDXvL!x24EhixJ1ze#V;rx zZ&X+iUBK%H9Hs~|o>x_Bnc`WB=O{hfB$O7usqD8*uq2|<`E7+ zo|=!QG*5cE`X$PHnewJnt!Xr23e|a)>dd0N*)(Ae)tO6M=TY7wN_*SrmWw_hy_oVo zqSu#F+21K@8BP0`qE=GW3i5r1E&y`ApeA2aU^Qi}F+f%U()NC$qOG)YCpn(cd;Wft zidhD|XeGs9S3O4Kv8Y~zaMyUf3v6Z&&Ki9g&caY_;H-bavi<~QWw+$$KY*vuJ zWA4nH!?E3%3(S0;(4Wg5<+8_29mAKycnc&4BlvL8*uZT_Lq~GGG0Zq!$MVX_oITNq zt~23$na4K7pYz$b#2Dhr{wwk47oPI-DG4b1DAH?jWVAA(Qb&Z+yDe=#W8 z=v~aa%`(dejnB?^ihTfbJp~kEz$o)aYHHo|77OrqUe7x_C)tn-2eaH@Z%kQ`51v9 zdf%r2ChM+dAcq#n+CqV!D6o|x@g7C6#zX`V*fJq4z=3fm!u<6gm;!7r4>QyPh&70W z!ufR$mKipO=PYSC#5G>-&+5K@!`5X2D_sz-O> z2AoQ#pP}N!Ll(y^Y*#A@6~ zVjby|BDjbdJ5;KK19CK7&Sps16TbnsJBq&^DWjL5ODC6FgNm)jiXnR|Ans?pmWHapMbnq~ zUiuPOjQ4@o_cU+LN}507Z5F^cF@9ss>Y?`$>Cso z&#tz;Lk_p{vh&@$Zs=>$X!Ka)MH{W9nDsP!1O2?&h&O^rI;xh#!GpPV^-Wkq@OD}47OYmg;g*5aEte;D zG7csHq-cVG&dpcAanQNl%B7ydt<+Pvp)s~WwZiQ_b|2so4|Ac1j=uRAe=vmW59a=e zmmKEh^!|kx4(E7)rB4~4KI<9o1r5Lmc1CmRNZwP#UB|F~-e}%TW@<~#nsU11zvV9ty3EwTIN&MDG#Ki25&_m`gFL%QcKj$q zx5$ed1^L72zevp;qW8*;`=nsIEZHNqaj<~X`CZ;TBomLAeZ=`gQFhTZH(?XOg#ssf z3`Av@6=j&i-D)9Onn92Vaw$O9i>A_vJb2mM)lTKF9nFAEs zPienXw?nkzSGsYpiI?ATkY=W`18sacJ105$lu2gGI>Fzb;$C^AOL)x-&rrT(3#(G}8 zn|sSR#&68n+`)|2u#>|`Zuc^`i9D!iuo;`_FN(omJf&_Mp+IplW?BT*{;s%EA?g+s z&)>UIWq%6YZ=}wDeUN_l@Vy1&3AJd;y=R_}6M8x@U!lOliR6d~G|=%27I%y0)-gP` zEq6sMVOO>X8pQss5oX1PO_E;ZqM2;Jg-m94KIKthY>%3x;<6J)l7Z*p>I%u-FQMa7 zenDD8b%49b*2wqprRloqx@QA@5qdjsRk4B7BH0YFa*%v`9xEPT{MtzPG}+Fs5$_SE zvSmEd!|ffwBfv(^8FdHpJavl3unlu46rn+Az!K?D64kFu;W|{6Op_C+B#m~!7+#Na zGI_;!#s-VZ=Iyv*`V$QxI1#i5fG0fQ?QsV=A2(f|5k}H-p~rzck$aAY+YDKS`7*#rV$1kIF=!x^V&IuXy2x>L<$ClXQs@KoO%FyqP+$n4 zOAtzuh-9-Bwx}yZ>PVL7!gJ~wmCMS8VmYGIq;;w>m;lp&l&d5|te>QI6UlBW57?^2 zTcb)44iHvxwJ5hCnmDNBN`n)E&q~Gnf^`E|13nt~7p^C_J*9T0)b5@?v_IwcrnrF= zbuWePqu~8i{t!*VqA}PcAHwwp8Vi<|oMF^$IQ6^idYc=f&;HrA>%BFTa||1iGg z|H=4P;u+s^zo3$J6t{tLHyU4C?g1)+6aN^MT!e0%C4%GPISvk&PMq44bNh4Zqb9~A zZUoN=nrskvBzGChxsy5fbuIy~{SK#AGgB2DcLW_e9Cw_@0Rx0t-~#80l-QD5TPkXL zM`fYJdGq${_0n{M%&%5Bd@q?>Bjp>u$8wdsDjqC&!uI{Yf{9hS9~ z0st=+1NKFk0tZBbj)PkPRt2z59&^1WT3R(U`n@~aDP$;NkG7Y2y{l)GeFYUmSB6LN zdHM~8g%s0a`Z+ucXPA!iqxgbJTH%B*G-_c&zRF0zEQEB&gsF7*qZCZwzzv+zh?6m% zeNNyh+>2bSY>O7#>Lm-`p6{E7&!y%m^28sjm z8Lom)C;<@hl;Y}{5P;-pRWe!8GzE6anQ5Fsbw5)CN)8Iuu+oYgyu22r2AN#h;9x3!81fs#5gT3!h61Qn@oLPV?XQ@eic!<)_SX!9M*E3cW$M&7o0q>EJxdUr2X)TAg@kbr#XokI4Om2y;|9%81RX z?yR9{-%%!P$Q#M=<|Y46p5(QH_Uxf^2WZxQ^8ZQ`4jUngAG*Y|CbA}Q+=x;jb9Zs1 z`I#fRo92fj45|r!IX8~O@GsZmtCEf7vwk9cpYy*{loi0IPKq7j@%60o$0+pgp>i@4BrcR2U~TOV@n3ZDBJ2g{jOvGo-%SjWy!hQ-!ja-(#rjaBj0BpfJa=NeBOP$}yW1@MG) zwrczfa|F_D4nQ@D9Hmki@Ie#%FbkPSr zGb3z_m`f9Jq*LTIlzc5kwWQS66nQ%C4~|9n7H^~C+fn>YWp`5GE-C?Q z+{YM5gHM~~4$>5U&G-~jK?uTK{tkWg9tA(7skzKcfa;o0$59Zz$#ma<&;%5T}ZBnu2FYv)RR(YmThJcC>*t z+;lz-ili}HnOyGeV$PKu#OQdniNxWSY+uVYuVSYaV>Jsl=OD}=*O_@4lxHhMuyV>E;Rl5uHX9RR720P~L?DOQcGN&^C8wpSXRZO)jH>Z6 zsE;GHZRz-E%`w`Bj6YTfZJnE-DPD&X_30!%v9{hO#6@Jw<`=MTEscO0Hp2;F7UBU|+yIe}Z#yG{I!;$(50=2I?Gw zJ2dOF~+%DLbUX*&j`9plru{=y279hBT!?h%;j_g{h0?X8_|bMa z^{{lM?BIQhp@I{iPQ`PL?j5}k*&*i7 z%mjt6`CDu&=LO+6!LXG1B_9*oS1M;J+2_ga!JrzE<#N;~rASkZGZ7hC6IIR>l~Rh| zqc%@drIS_Rbd~aw(lgB9k>dqj#?Ml>%u)BwRukS(t=?4eZ>c`>)q@LF&LS20w#s=& z<-Du9EKxb{shkg0hmTawQWfb%TrT}sMXoR+fzmHkJqB`$Z(52+;Rh{>#90-8-tKtLd>4R$c@5bCwT&cR8 zP^qU>>KV27oZ4|#eSKc#;7Dmhb|(sTrlPK@MeHBVr$=yEkmHL@>r+XHlSgs#Sd-Ub0By+35J&b7GiVnC zk!|A{*vl$;_$hM=`Hu7aWBdwU)$^QC^^XWL%a&6$C0tuhBYbSFI6%2K8k8HfI9G~u zL_)Bf;Ji97F-prB8G`-jg3J%gkU!WB)&gDYWjhsY=}@m>HG{n|vVp!aR>IK|{>q@u zrUn$7#q>*orPiEFfu%?exBfk_^h0HRbSbTrKlWm9%Ks^?)c$i?DWXb$HUc(hhk=)I zN?V>$8aW2l@ub$j#FJtxJZl7OCYy91Srs%Pz;PQT4+h)8G{1&qp-?_R=dvh(`~5Hx zuFk=n{|JANk_bQ+-wD0;k5( zx~bGh>J;`+L_n`KDbTLxt;0vj@CY1XuH*@bd_Trm5D9K1h9+MeC^K=KdZNmejmU9~ zqG|RJzI`yKOylGi5eLMh>q*b?3ZnOjR`mUil;F~`Tq*_Lf)^x#Q=qI%7Z~1c$UOR) z!3^Mk#H$LB6i8%efkMZnvsm#W#eXwRm%$~<`oL>%Ii{?WN?!!SZW0Ua+T=b*1k`%F zkvaKOIM@+^7@TsSxu*t=f38%h5XG?|pC~z|D8&?)Clzsgh-nI995hcd(4YQ9xz)e3 zE2lkYI?bV>inb-| z|DK=CF`7xZ41#xHxfe6Q^GCT9F4rfxco>(CF>V(?-{w>Y8;gS-r#fEzc_x7b zaah(42A7I)tC~vmB@H$bl5L}1G0CI-20pOewRi-zYocd!?G785mC}I!qbN& zN}z!}|C6{k8l}P4Vf7yH2aI2UAdoz#X|0de`DtyWN!R=}ini9El4!awhQ5j=wy9N3 z`Z|vMwN1;R<*5a5cOc>>^?ox@Ie0bdm`d?h8T?wc>bo81=kk@Ci~+~pD7jlCh)}x< z31SpXF;T100dmuL6}GBPrnu1FB0aZ@R7f^##Xp&FTBkbq3=bzT6QCtPNYc$+_PIePclbV9}K z{s@0Pl#l#{i-)tpv~h2aM#UkgPGILn=4tHA;=oJ}m2v)DE||j;-r(0go`@E+`vsdd z{%cPD#E~zaInhW(224=ofdL0q}Nojssg4N!`i_+QB zP9tq&%@62y4Rj0GgrlVtVAm)Lj9~vrhAhF_!aouPKE5AX>yIcsHoLQz{-j0wyjYSN}iEy$5tvW!68u_kNxmZbE>QkU;1sAqfF2 zp-2$g^^c@_{rN{{V7E8D30+ykPd8(O-M-b=& zIsn$-4ZV6|F;^TSi_pCG>~!M7&ip7Q|5vyrGU9&Z>$Y*r?Yw;_AK%4ep+?A*imp<0 zxp+gw4~k$Q-7NDZ7OKT!@gS-xlfoAy_cfXNrlh?m4c`*~T{#+rr?vPhuBmyN&@hfjZHUca1XleR?s{DGo5+EDI!iN4kq?t{7JJ!j&*P*H9PZ30T5>ya zQCD`m1vTh*asGQOKuz&!#YZ*BT5+~>;V$-2l#`=BDHyc)!0>_}*?&_FkH~oof328+ zlWa>7TZDT&!;Yv;wUCX2_U-r8TZAJN@^25SZ(Q-PD&q)ULvD2Z$kc*>lGdD^#U5_z zbJ@@4aJQiR6f_^k?=7lt2VfEnTE|~1XQ4@4SNKwZS{X)gI77kyjV9;#ZMhE|i!d>D z;?PYRIhD4N({^z-&KVr+_e$|=x+Ou>gs)=}XZQBMC)zEM&?5OI&^5WA39k_6OG*Ap zWToT;aduI4Q>{SVl(RufzB^qPI1@u1vO|&n1mP&K7i62G10u`Rv@tgVd#P`-(UDrm zz`>2CRD9>2Ymi2ZbJ)uS=}gYEM8FYTn|NBlk4-NoSC80PUJ zg=M_;TDk!Ns-Ld#LdQ4BZOijIartJXE#c)N56AVNJT*~O-k?8uYH)hnGpf8wyxI_- zqY!hpfa7pLx&cnaf{ecuXb&cesz8TaPfs(5puiOte?}KQ6%-sm=<+Gou7^Zfc3|}A zA?`p450lD}8Gr+%w&`0(vxV~;n}$ubA{KPsz$T`^HEx<&o@v^*HmNZ-zL8yBm$DL- zHI8XcF_~1@hvM&|k||XED2*(qpJ$xzM1Yhf+KG@poARHfS*S$-Xfu}*UZD6FDfeZ% zJ19rUUr6~t58j~s*D3#>l>Z*Z2jvL)?^Egr+Gg1NBT8LFHb_DkxSUc~Q2H0zp_7kO zbR|Vr(M78%eJ$Ovj?#mogoHCi3Hh5TbsMFgDN4xSN%^}dbvNbzMCE%ZKPXBl{hiA9 zQNJV9=@6wKqmP1?g#2pCuc1ojLW~Uoz58rKhO*_CGbHb`Njxj6ZwYkQTT;0RINx-x zJWGAJtR_^jW3(6O^ zbIcBPKsdWK6*J=(&ihr{wd6QEkeVFQa97xPQw}I^5_5`E;-q)1h8r`AP-9el0>^6j zPn8Y5ur)W7ng;S$`EOE zwWM4lIoC?cjq37_8KKlkRrJuiTgt~u7@Ip%(eBiR5gD6ke}Jem(U=1Mu>nm45pvQs7-rVKa8?rUc2;i!x*tuxgS=b&*c z*2E;jwPBY3*$s#53|2Vou)W9uZwoWv3k0=~yPRCu^N(olnnYlVVPkbHml(~016?ce zx)4ddfV72b4hcdDs{g<2zlI2%r*|t4;Q_$ehH^Xrw;L60!!G>rYwha`XgnPnF919T%83qO_071HW+L@`KAkOxwT1y;;tOtAsGXV(}f%I-mb z0&4FJspkZw9)nN_NIeIn9{2_DdizaNEWcz?)mn-0RlFU>!V~X=tOH4D0B3CT+XUV#eZy<0dul2dNtpJ2%u%jb^a4n;iYHojz(MteoG`<{PfAwN`r$&20LhIkR3Ct^;0h~#t)kcyS-+PzC{_=k{$`#8cQEjlJ2m3N#b^OI z9YFdr_E9sjni(Smfb`$^`Cs`gpy<(xkg6a?yM|R+5sU{GvjK2`I-2r50Q{Zckj;vUe=>!lLuTPlslOQ&LaWrAe?ft*KS zbBMqzW&S6+TD}DQe5ZJOb$WMj=2uAuc&>x;FfJWr1y^f8Q23<8M1Xx8G!~URW==hm z)X?}*6n(Ra-)^1>@N?MbJ=pPJE~_?iHD)_m_i6`5!@UOB8R!J0o+nU~VF5mCl|~(t z-j>U7`D*>TK_L_X0hHPKBiP3u#Gk^q0ijOxs(oC1Y_c)B*Nm=XkW_qol6hm3!P7DW zm&N%~mL`J_fu|<-DO&z_o`oMXN%{|ydvNQ4X#xlO7Z;x?Zf)LdWA1N4=`P7cZ3u!- zDtk7?qxSASU6J&qK>cV#zN#h1MLk5AI=b;FWKZRC1bOx2_!6I&m+<45b*FLS3|_I2 zW8dP5A8~gKx}WpqYqCMk<)Y{d*g&e2p_xnne@Fvre7|*u9Ea2l5w?UTq_y4@@|lNw@NnZ4Dg7K zkraeN+%Lr?(&Pd0Q4=;%2gQNKVkfE7{JF{U*`tzGq1jxOFAFb_oP}cElaDLK36S=y zaS487maaDg5hJk9l;MK=#nk+cOfW5`w};fEa34IOK_Cglx*(nHF@uY*G-5Dqmo~J| zG_lhg+njW}sF|%FHKDhV$PNjYi*L<8LI$S1#5%?#>FZzJ#w0YPL66daC&_{Sa~rLx zqO^nLV)nokZxjMDnP}|ddTsei071Be`fz$*=8L)e4GO^GCaM6Py^zyh26C*4T+vh>Xe<`l3oT`DE4c{43mrAh7*|G>C$Dsu zO@IV15`U0JFnQODbEi0y#KC9$QHh6634!*r<(&EAy)BG*jUYoKf47AHoS^}60_>vu z^)v1q1}GHlw)n`O&;pKhHvMig;gKeMvkBj-1d!dXn(ef}0*|OPCmyRYU%CTIFpZTP z_*cy7l7KnA>))BvNOKeUE9Nu|E5{}?ppAhhr^Rg~kC8b{#j#424uDMzp zfGcn0!aKRW&pe(Pv4nRkHRnZcpvy*b}_-FrR;jmmXmirvd*jlvuz!!NB%ok+@NUa*P->@QxRY zCw7j^pDnr1$usk0D#EK*2>&G?0b>{JUHirClSlCKRsnZ0MK~)Q^E-&hdZxOQsaR<) zU1g@NF*mF=)4n#}1YzlYHkzZ~nMe?pK5d)nv%?(x!Sp$kmws%w8S#@@zQ=sC(>x49 z;dk?G5WIgiOumQAiYhY}hwyPz9GHA7YtEQ_BW4bg^U@KE6fl)gKKzflcAfZ2_>p5w z&c)niKQ%AcPy(J!Y0psOXQ|P1)aPYNdxt`cDDp9dmeNRcYko=X)+pL`(Pk>!L7|`M z>z~O6EF|oTE{?<)H4A$sG66|M5ZL2G3j7wxRVU7$B>9u2EW_sDpm<#>maBmdge>G| z2#bJZ!hfE8v^@gQdz0dU>3vS#mnwpCe^4VQ{J&q}&(7qea;a!w%A1+$Q&nNyjO&;^0nI~@Bqm%qg!fDwy%>h~N0wz-1`BUcAH;W)`bQAK-+?J4F0 z$+}n8mC2P;rORt_E5OFEIq@W-8*FL3$$L+--jdJ<0x%PTmLzmO4n@_A03riA$G}vh zkIezmWItps0c3`I9Ro}^CEfTqs!6mIBP&?jI0Sso4NAFE0VZRTH$@% zV6qPyQ+4{YY%z(A#>c@VpHjKFes}iYtK8zx^teGTem=*J<>K4eUCO+S!(XtwLW5E( z0>&RwPy7@)^Toa>VCRwI?o>+!zW)QddSfa;0e75hInA1u8uj1jkE3t^-X1SdUNAt>o zBCSkT8>~#~O;$Tb4f%g2yznh`<^e!iA^N>gO;yO>5Ga1HVedM1>DIc5e$jK6?wf^|%^mL)MI8WSmlGRCbX}qrDbkmGY$CHY{zU1`Qrj_zOatdrqfAMl9 zr9c?6*qfvTvRGWxMhfCi!QKPAo33Cqh5il{D>)oHw2_!jk!L_ zA_MJC5Kk>_dr(dYB{)aY&ylQ#w%=%u32CG)c0j(3ug8OmR~s+&V&)y3h26Y{-Bava zakFGXCqbJSa-{9OQaDXV-|~Hudr-n~LP2v23M``3Cql53b|{*3A!dvqIRS|iNKU|9 zvF;>JEz7VYWokA;HVAYehat?9I&EV4LO+Wg&G2P}q3d4EW$omePQpOvFgP7GaV>1i z9;%)88*AW6VLQ#Wb~>x4Ag@YdFpdJV3I-UMp>RC<@Gt_E?aT$&vsMX!1*l@Zr$z`= z%8I7}$w%hiKDq6nrtJYWLgrH5as4)uPD<#MBt<0dC%q~BeR={MJ78WuWR@P*K+(t% zQ-h+G6XwWKGqT#ONBi?JGx((05;2D{Hnp(Dm$B_3A&8n5l2gDP2QUv(WxG3s8-C9< z8~N)^41~O}rBr6>k}|KAWVe>2EXfL-bXRwjBxr#;N&dMa?WLfLEWj&&zLa;9MC=B) zV%ZGjf``>{jNnR8R5&F#!ooACY2HBMw-|`4oPckUZclAp0ueFh~A?4K5%7;)gp3RQ+4z zKt_VG{2lV&C5Q48(Yu1NogB*$3!x z2k#%p1H^mvDjp9>=W3p@ zmff%UgZ2FVI$pDZ6Tao_Z#c4vi?^`d#z{LlvYWlVyccUij8r>PH$k=qL6q_J<;7$T z4U068+Kr@D6RC$T%cfGdne=QfO;hD;R~BYS3Y5KRD(*d%F72{pb!*uYJRvunE#J14 z%5!9D2TABCi?gNcc@p1F#&wdKb0xRET-;esb&-E|m6&eQ{Ct_-U1B`h(o^2OK&pF5 zBu`>`O9bI{x$<0pksGxW>V_L+DxNMNtGCGuVLc% z;>_{38vFCeYSVk2>GGZVakFuLHIZLT(Qn#|6nnr#4w+$aPgk44r_2M0?M0Mlvc0~c zeJI7wXkxE!Y-b0DNnyGz&akzb+5F(ie=FX+9HcbEy6fjK;21O~V#}@@z}kL*Y2(9! z)fHbE$D@DD8S{xcyD|a^n^nf2?uFnDG6^ecX7@8E=lU3yk-%32!jBf?-ER zjs|+)LD!)NmDh2dm>H3h+;R_9z zvsg8Owvz0(boNf-U-ZOCNBRu}LWXm~%!%wF(*_4cfQy2%2a65UH#ms)x!Sz>(j`0& z=qMJbp}gY;ZZeX~0^LRa7(NjAGW>F8s74>*gooKq=ER`H1Ob)&G^e7i0GcZ$GQFL|oGX#8GQNv^+)c)xFMB+BuDe8X zBo@a-Z<&%OJuXr!w*x0^uFSqtc#t4LC}Fs`Hwq(aY?M?N36GJO+tjJ;!Xk8UKyTd- zFiW-4a4q=Fp$ZCE$9owUmCl?$ah9IoA3^!G7?<E16`$UrKK88GBw9?3q)d#tU>%jrn>gxizo#i z7C^5PDGjQILsW2z{Kl-gZ+EJqJF<|S*V(?wwch6NyX-8{&YJUo;pwn}WJun*5{4pZ zq`uT@yh0(=ClXmDa!?8P2x-SkOEEbyW>%c>!1w)!EN!3hkUe<7tn0MQWy+R<9 zfu$GAd)WAKI-g`=jT_Cag2^9?3FokPp>AHX1AUabjFk2fub45ep^e7jpH1Z+ zgMv07jm|;y%288rMAvgnk{iI0HM2RL#jT|%7HB@K@cKo{p^qi#QYv6A1d$PCF>d0| z;^a^}$)7DhVXb>X_EyXGu&G*aO7RyRG@oF2OS7MLfjUBke*o}36`YwUz5 z0q<8J7;xXzBqfB#OH>T-kzN^KULXd*Q3LT059HQ^ICTi84rdvuE?^$VpCZF{3Man7 zY0G)uS`L4&ANCl8D#S`Q5LXP?0c7nq)i7#o98<7sfMo_$bw=muflV&dPgw|(@B76o z6KAFh_^)|F>dq4Lj1)pkvrl5c?S5c*jk#j4`R=fJq1wbopvJd}&8-8|Q&jZ(q{Ja+ z1oa8e|r550I?}b*135lGbWp zA>OHYc+%k?X>JnI&0A$ET`t5IIYt&2g>V*_K+8{uI6IcFjbRhVXV>AB1fB$oH>N}k z3;_;&sy{a#&c!z~1E~hUzLK}E;=yZzu<@^1)^p_s=5HA$&|h$&=c!MsRiNR)oC5+V z5$i+SAV;o~;mZu#ka?@FLeR-$H7f{e2=aptg89ev>c`Zf!2V3`Z4I}80@-4;Mj5dM z#AI=Pu#M3lza*I}8fp=tpU!YAdthKarC+l~FyF&dr1)8mggplf2IkG}2S47vk>r~JV8jcTf{E?t#m{G>4_e+u^>l%w-N5&yPTyX%o zO}sJUfMf?=3L@ZsaZ0p1!vn20K`b7mr_?!8_=z|h)klEFZ5+Hgac00Tn*3lIS|m>R z(LA@A%)xZjyoH2rkxIzUYvf03)`!f>SaYDZX^>!iuoxgolgylC(+W;2&<8D)vC4*3 z1V<=%t1NSCYg0c)Bj%7?{bL>Sb11D3RU(|QE#<+U3}^QYN}WlikC6|%5C*3?x|Lub z8TzK`c@TZJ;zR1XhzcvI%jXogmI^kIY}W9ZEIcqU^}q~RMRJ6)0{m^t2`b0f5av{{ zW04xj?AfC*?gn?k;F7|$BY9|UU%Sg^ih_~act3`65MtxKzTfL))ZnBDu> zEn$e{!vI6d*qy>-9^zvY847t6uYj55N7;Rh-KQAV7551aKdu=vNGL6t&HfyApJ#8b z^70+#v3-Tl!?XP=XDsAem`_00uHvL15GJyY&;EuHs-L=1ACkho+-^Th@Tg!2X<52?2p=BWv2qG7KRdWofo#ohx;Nd80v&c)`4Z4P{{;wIR>$FFgmTjyG+H@NjW( z<&Babilkz%aRJ6F80q?QDwzD zQm{m3EtU^Hk?$(SLxA=sRdK);<*{|Xp!Q_7;z$9zTYo`pdRB@iTA+VtKzOXHhv!=G@`NL)G;xs|x z2lP30O-a0&55GVR)u}_3E)BncQijl)$x82zybSD&q_@xy=1wN`$V!z-#kZW5N?!^PP)T%6`qP{|T@W?yKGPZ#N zdVhH2rI}b0hs-RzbOA4Rc73xw!FY)0YGTr08pW}mVal@1 z&6nub87R-z|-;NR=qa83eouYCq6$u$4QHL(pNkeXAUGHtJqn4S|yUdoy&KhE@VVFzd6jwhuAs7 z?N9OpL8%9RqeTiPM$Q=VAQ!PxKO|{5aFT^x38yNwJ0wkKw^dx0hNt@wPexn+fBDYDuF+tD) zV);wtn_~HFlH`<0))Xn2EWbP~u@6aPrYyxdgB50ubbn4>dtP=tBS+@RmKWrc`O@oU zDGXF470|lBDdlfTYM?E_$+I2u64-1v34bTv7WLbf{~+#x10#Hx+`j9p2Lgv91 znn&jZW>0}!xpmMc^Qa2B(K}rE0(A^*xeTEi9@JHo@g1e@q8wOjTXG`K7KjQuusPEp z6OYNfD>v=Wy)pdU!Tvb*A7J0-FbR1z zeViFACv+x3Hi*n&|9R%QEc4l)#}24x=vx25-fL>=g#MhDsw1!7D#iLHtmmY!`Mq^q z@C`3PZNwjX39B}IoCT5~y%OcL;VVG){HX1#@xK+#6oR2nlY6p6TI++F0wU(WcFmkC z*=j^ahm&$erS07x0B2(80`~sIi(s+m4)Em_@{fg5 zyk5HRQ;%34{;saZ?`gbV#_w(1OO4;(xRUwhGOjzzos=)e>cJx@Th~v^a zoCiT>H?F}6d@pA|%~N0DIV^XNlA{566gerIPsx}_u<7HzjBddwWvep9-~s}M4oclL zP$3)1Lo5K$+Gz~V1!Fn7&s?nVSb2hcHk8D9z(4Uze`nWXgwTE{uZ}?n2PF5E>Bh~3 z>PCqGe@#|MBaj>N$nnarh|S+BOa;=drP7s>ayHP%SdH!`|`9fWM9`X)YV zAHG0&7Nn@TA1EkM3(&+OsC#k1C9`JCzw! ztMWnpjALx(&BlPGYGO@e`yiMp{9Fi`M?<|e44EQe_Fri`P}!zD;arucA`jtZ^t^B5 zbK#RhRubgv`-FjY!|%4=^gn36gVha!IK=r{jd{ZeZUF;7XFaF z7mj1f02M;+Ti2w;o3uK{hY96Fa(^YM&4{@}ID_{JyE{0%i+#Leb)^`pIlN-$iC-jM zrP|iu0|La92!sl;zyVd)4s$yQ2s9eta~E$i4om6dDkusa)b$pgXvmL2WwuAW36dVG zOl|yJU@HP5pt4$ZDNtv@L<5OkDPD?$8VETs5Da($)9T^(1o9Pp{P9UoJD@7B!ui0H z)qsP)7l2+Eh{OSf&b(S@DuA1t7EMfPh86(>8I7@jDgwsy-(QOxQpI|m4QHA=rb5|b zO7^mOh0pp2OD|cE*&xxxoHDgfnGg1xTDLPk9SFYT3^721NkKd~2=G0h?qNJ-OvEfm zw?!G2Ls+kD-V#p21KAKUgUZ(f2Se$+7T5vyL_1q2lk*|mh!)^8FBGn8ZCA1}7Kf7a zKKm;;+*}qt@HWB8?I1T-=ipLFE1;&Y9pol1T%L5tp!yX#&V?`v>q;dm*A zlX1R`S|Go?D(6k?!h7L!cb7LhK8&DqJuxsLtoS%Qc~tgaQ1H6}^FfE>9D5)LH4 z;gxSft{bQpAydp`zZI`&&3+d9=P*)MT(Fth8leV7;xUL1Av?q>G+dRL;R(`WviKF^ zL+^K<;SR=KX|h+Fp6g8kiVU`xSuU0AkhxOa_o;@gCv3%H(qFAjnl{$NjdL zueX?;ILzCz6tXvxEksA7qyR$>tP|-Lj8YclolsXo@pwoQu^NBGNSF-YrYSKX;DC2U zON#yVK}qrNjQkBSq$nVUie{|Ik;l*dowzdgpt?=708L*{Q!usqHC9_KJp zd}p&Whwbwmp3BaBzH}bHy+CinQ=pRZgaI)-Br8^$DXUD{YO`>S*|XLx`PxLj(MZ_w z>&@vv{j%yUmpCFw=i9+ji+&T)o>ovd2Vz(nQ3_&!%F# zsrtp-2Re1HdE<8z`3<+KjeCkpM{pf$;_l#V=v~_xC{b}C7U4Ph*2H4jxmf_WRzS$= zN^FS==5wNgQiwnQ!5@P38O`VXPFNL7TX6`_Qd@4|ai5{8+i^#5)(!eWbEmT#gz2I9 zvco%E_g(hTdV{4Nv5N3IVF)Ra5N6b3kqN@9MZ-hjd1+>gp~#)a<3lFq2aO30)krG< zzvr-<%j>6coB3Sg%7iq{6Bfv2$@~|tgJ4x5}(iO;mS4r;#a!^^G0Jp=8NxATFLdgvH^pB;z+X&Dxj=SsVdg(3WE` zNX$TJp)^Xj@a7S40;R;{>#g!_+*UQ}FpkomPXd6^^- z<8|U~UD%$l94=mP@4trk?qY@>DNs&Mjpp>C;S?dg`2HQ^AS<}B)=1&f!7bq8Ka;d9 z*ue+^RSc#|{B)q|CWz8NxJnvXFGnujC|&~_29Vp-`c0Jc@@_&tjPYW*1r+ZP>U<&b zn+)(DPLttaaE4;e6nQ~Ek6@7?=5dfK75qO~C{ljM%`0`M335BL)8sPz%RTH&6Sxa= z@V~t|W*8L#FmglLBk-#a#J44png;hxkVU`EZJL zzGnsMzvlsXeUNQ*&=vlRURiQV&ahjk%${n4S_-V=#%$dO~_`p-_A7 z`xfUVNd8@NWe-74=D+wabXwuV_%_$yC1tRFSIckUJ$p#XAQ{%4_W_!Q#xK>p($ai1 zmJ^^AggOyi(sqrkFGTuZXBqf}Jlch~oiN!oChP7=Ld1W84bjP7kI|u z=6+0T(fC;kRZzh^GS5@!1w=yu{eh{b8vPux=R9@jmH!OHDdA-5N7 zruJEauu5JaevxAFt*%f#8??JfYYeX>XARlaBx}iEM{uv>I}C3jL8Rek^0tz1 zb0vGW_)k&ZErL1#3-#BN();scXr7j(Cm&q0XzScD5gpgYV~a%_Nca z3V}M`lDnP4Kj?yn=qLXocKWFa+JpMEfdyy~MzqB=DSJ%p;}XFGKU+Ed@EYUoHU^Tj zhU7ktsweRtQ}rOvQo}o-l`!HakhBAp!q<|xQNF-$z)=R7@ln}m&D4)HRNOyb!5P0q zc&=0~6nCwD*~+~JUl67S1|T_6@@5H27%{^jS{&SN(`hnrhWG%hPl)@9c(011e^57c zhMN+a;RPZK5mRjH9+!mUl8OM9kG1Ful1{8VFaSbx>l*eg`yse2*^gsC%ziv%z?@c( z{o(Au^j*ja*K;NAqc!ZV=a^q~N!Ku+7~RzHOcuY!@;=K_9i?!ObApP@{go!AnZ*jv zi`5Vm+mOBY#5peB8vU}lv!xK<3H}qPAh!F)7CdQf{5CvbtAM`=G}u5g@lxwQa0VeZ zywKnfMzaQ9IuEZces#8lPKe-V$1mZS#lPS`@vHa;FVQqf!$$_M!&-K}7L2kWXAyQ} zE6Dwvb8+mzy@ChnR)D>FSYh6?6Tlq@i$9h-VAoY5={6zVrd7#~YWeb{tUDzaN2CTf z_%OK_?={Yl1?2tAnB+Z7jF(CAAj!N!9=uXQm&@|2WY6CuG(`GbEtg*-Er&|#wQ^3O z{5(p|eNN)vl;hcZuN7p;Qn zvhaX7kY02$ZWjX;2bxEA#B1U@t|!P#03Py3;*Qn!2fOK|t!x;wD;SD@CO%Fc+zofK`=pALJjB_-x(jyrU8(v=Vm{U=lCPFYOT5B>GC%|) z;|sF{4)$Z_%0MxW6CNvP?5B(q+wUQnkm-W2Cp~sl_E|$9N#pXk5ZXBmP7qtJiDVa(3 zEhS|TxDf*p!i6k-0#n{r9=3x^ws8o%UV>DnDEZ|yl*&d@+(Zf*OH5N`RI{543Ifd8 zDqQDY;`SEzCXq+PdsNDkRrT#R)#=D@Vf|EHTKzO*dooOUk)b>a$IeWtY-mI4xT2CE zoG2Ye_BtG-C@~Qitv4vO!IExG%8k5#pO)ji25km(2pIB#zQU*#g|nbhY-OQ;fD_QB zTKu~Qi|DTe_ngertsKL{O_)DZ>^$TYHM32Uwg0GnqE3tYM;o!-f$!d6tAK^I*> z)qUvEzO=U=U48}q<8lfOp>K!LJJ(TKTiRDd&F`hQcT@Icx~7aKA*SykN|-`5k7<-p zdX@IH0+oVXv!o|Sa=3RduIq7H9-qwTU41w_MC(fN7Tk&-9Ix}6eCk#1f{O;9<*l53 zl#jrfRfTjw6?HU9km~yKW}p&8rde7O2{n}y&19e}Gg`{?88RVLYFbGzhy&Y5dRs|9 zOA61H!VVJOQJ&A1#hxtcE@e5A(Mz7sleWF3<|0{ssWj;?i!dADV7y!shsc_%Wz4nW zUN86DAdiladLtzg2m<%{Qv8_Q@VM-lBl{{Oex9tvw*IzMzZJxNe<-a!kk#)?XGqsR zmB=z#y;LGAB=V*F^0}0LB{iF*#RfFSO5}TaVzbP^Zup}t{arD}Is0T%mFzyG_rjI1 z9$?B7b0AI)V$TD$TW9Y2$#nVM>JzExGG$9AzLZ7 zCT!;-lsj2Jxm*oc8x7W`vVoQfGTa1zi5M^ZlcP2o@C)hYL3R$Xmnz{4#qA@0U-5&J z0lwqXsHt|o=x*%uGE-KZ;fh)00rZx;Ejg2sgB6|!SF6km2@yU z|D=u&-l^EQax}Q?lB_he*k3eV6DLoqMZ1dL;F&fY49PIkJ{n^a8(HK+M9RsXN%8pH z!S4M8B?B#~pf%6aoH^vqr4=XLUP|ADBs-Ism(vB+k2Gr4rRYf zyP&y+_zhe@C54w$@d|Q2CwFBK4vDcjD0p(#Q>_iO;#=CZS?6aYaQZ)zyOVy{MgDGb ze##3N4m0&c*QGkM{XisrrFixLcP43AvZN*#ovrRmB8^4C0;-g?mv>5l-WJzfw zX>CPt5&}y{TQRDN!F`~oxS{C=)n zN{XO54!EKG`D9^0i$ANfFA;-XB33N2@X&il2HgI@tok74hC9oER2DuGU2cy zuJDTi=JijQ*fVlUG=Cu*P0y>YuzG23Dstl?CF57SV;MObW!eAWw<)nOfN^XgcL;uTXa*r8+$1?g% z!h#eiNcHuZNf=-x!?eLIKZtlV@e1N?ggn43czF^u_SQ|oTqMPf#BVBoGx3{?$xt0y zEZF=kCG;hlXWmhl0y$3?N$D)oRfWpjUHl8g%hR|~AF({SdIi_LR!-u@sgTTPW%4tU z`3El#Qhu&P=F7yT5)UZ5tKsPFk1(871~a+4)`UU9fbw2vT!0DNjJwr@e=zPYwZF-3 zBYVs%Q19>$^J`4V@sSgf=$>WoVQHUcmQm)%TuG3N{vH_;>{n}igTfDpwN zCbgMKNHYnU2859d{dop+YZjzqw^6(cs2Y;H5L^s!DGEqh0FuRQ&!CYEG_p+9q~Nt> zGCKevfjvIS7N}zYIXeFiIof$jXA8ha;N?gWyAr~5YKde`_zt{qC z?vmJX!l;@JR8`@7q&E_ZFn?BPTXgtY9iI?+;T{QQa>wKWzp85z;!VQuK`bW#+vxhS@5CSyA;_wu2u^t#lF=g53TIgoQBtVCEIT}2Hqn0#cm8T;Q?oDQ;~eqZdJ=q1-rIY?2i&3&~x#7 zM1GfEKg(CYNUgn+azL52r3iY39yQhCJa4mK=?P3$AcD(c%`}W^NhYzm$}iCY5yrwI z^mr_-t4-q&9@3C@_Mze;t!c1#Q@5apYr%cWu&2R9g9wq`WRFnF|ClNn%@1kIshzna zG#)sM`g6Y6PfRVo-xL{Pv6 zeNF0;dR;vP0;EX?q=TL-`JJUKPwF8IBv;(ONxczreGs#-1nJH9>xK??BkW5>i8Mm& z-gxPVB#=qLQv_dUndAgXT(zO8m@D~M%&|b>F8Em7AQ&WZnMy3e$j}R*i`%^UY&-g=_=K_KV@CTU6 z{rVh}$a(3Up1~!72d8@n^(<$1=U8OL!cIq;mW zW)l$Kg)rTG$1&S^<{mEjiDA7Ny^j-r=Rp|Z4s+5WPCCeON4W7xjcPYY%pwWJ%E+J| z4n$IAq9nSKl_~`pvN%nWE)=;)V*98;X24~Vd!@tONlTB!n34y3utEQN= z%_eKBhQOy`lEFHRX@{&Hp|xx%N$YGDHn#2Sn&0A07^mn!*irxgv>QZW&u!%WsNMl5 zz-FDFPM3#bwv3jC0?*Xh^3O-;2;PRr31W;sVlLD`T?4g4e|fGzngX$TK*SdpW+l8w zz{3G+0F3I%Uot@U7WEC{pJkEyq_APNg(I|%E&*YUAlK8pA zu9Eac8q_1Jv}B?FC-VH;(&`hL_qL4tR=ia~-Q*{FlE7-(3o&$m89fK4Y@aeUUPH=z zl2T8R32;-uif)((UaP!P+(?silL_5yLbsaGC{t0Y!BE^n+BH!xQeqo386GU0t~YTp zHtwbDE$9BrSUzL^g2OA={gSau;WjC8}>=23R`3&S=L1QHkLP< z%HU?Qv$=pS{H~=GXUMs5s$z>wQ?u&wEb&^)+_U6|vlZ*k?jUz}ly9=-_<8biJ2}uv zo;z2X1s>JaUF6%YQq)a;M|5*{>FdceJ!O54w7x(N^pbn>P!bnnYfgZEwhfZ%WU9%CPrj$=mYWTQcljdEgzn;zQ~7fjsw- zj9VgSEtc!vm!^vZcxn4eS@enc%j8+CpG#%Ya(OI>7oGz>@R#!K=i+}Q)hng;D(Svj zYSzkq3O-!@TZJWQ)F4_$lcs5 zPdB+jF|kxxn}#P+aRc&m&Nvqak_QA}3MDpY41{i`vj2V?jh#<9n+w~q7wD^907U({ z5LwyRXkHeiR?wgDLtHtT6TmP+#P}ZbBKALI+0OoM^%A9z8I_R77$^ivRR92m zAt)YyzQ~JG@`||sltzJ^zRf4Hw^IDz#VlPfbvH`UCYk-6#Gr;?v((=wy{i;mM5f0` z2-fSFvXusJrA@XsHL!ncs#$0A8r#$i3-vn2W~d8pOENnGN;J0-(l9gt)(SuLv$yAOINDkzQ33ZwmDA zBHxg;2f-LF=U9#yE&LVD2UIy8-$+jbVF1guc zJCHq(!kx)>A={C{=aX{**&bwjliQ12*jED;w}pxIf6<*C9!_#2g@ew%@ECGOYgL~` zRo^&r#uDRH@TD-UWc_ z8v-N~8x4+eaKQ~}2$VtyZ`_KAY?Y-Y-z8v9)5nPm*lm-P;!i=92RFea84Bp{ZD={T z>}NiT)Z$f;?$HYa2pFR`od?{`H;(3g^`xL&3R~IBn2Lnz8Y;5%ahQr?scCI$8b?KS z>GC>Mlt@h-YTAg38dFhoDr!PSEvP7sid-s6r|p^4G>e+HrdkWqoQ+ZLN*n3 zprZ3=duJ-@LPZ^E`}y?o1yt07ih9$8UNqrC+MZ8E7gJGRsympv45aN>Qqg5pG>E!f zMMYQB$3toR5GuNsx(uW3!Hc~8X8QOR+CGLRjHc~(P|@vFG>$$VOI_}yqPwW*Ug~l; z72QWg4^WX$6DCs81S)!viY8N08FiUTMGsTa6xst}a|IOvLwJ`OZ=%@msmEU8-w5CV zci`tbbEG{-I&lPaYFB>Xe2zrHOps95=~5%ts6@xRk>wVyeUny*ZXU~#F&cz&^fsP9yxy?-1RI}MNlbV}GX=YJN z^I_oU%5P<2GtKf%%7FL|`2}<_6uFO4c{Bwgn*UHq`J2d#5TBx2$hWA?C3Q5X)UD4R zB8k%ZNQP>n(4l~{v9zn^$+#Y$>Z@TgZt!~c9?CI6H!F~n&@I|aE93Yl=u{tI_WAYu zxwKdlvA9GXf8O1kJB6PtQ{}3i$o|9p-BjNG5JzUQ3A(uv7Q|1m_c)i#;EvPPT_v;G zR&e=qoIZyWo>vWd!aSZgHwcx*Zt^OdciDZ5hHIRpf3NJWd=a@$M2ANYOnSW*+l*%^z;(%YE2-CQ8dvd1kz17t4ziw9D0- zF5a_ho8kbg#N=t-5ch3K|3tiH68EWAG&(E9BG?=YCTvq6kB%sR^y)!r2XgIzY&fK} znr9S@+8ATvYT=PIqr#@xF_+deV;UM|{Q__)ca50?z;nG~FTgz40`vUN9Qb$GGXbzC zFwZE&wAWnsyUEyRCIkRi^&#^^l}c8CrzM;)pI4jbYfSrNW*ZLalcwP*J?Al$IxSAe z%Ok8{KoIBkVIu>lo(gi{Mgfg=Um%{xd=*F+RO$n%WU}Q<%Min0xVnZ*a3}7QSOgkF zKY7gj7|1f6|4_&v?c^Z3S`d#9$crK3&AXhPE7`r8`KqAUbO>9-+}*+d@<2Vt{In*p z`Ec#M$R2LbDWRuyt(!}1t0u?bCC}b)@%HW@os+)D;3vO;^)ujR` z84l5v4K@4SPQ~A=QPR!~^=9UYDTm^SjQ<+9fdmNP#%P4+YgA5VefAr$G}QPwfeF14 zOH(dx#?petF%KwI0Xh;?@ zk3BgXTMwZ40Dp^&5l>7u0tfa3UxgTkdXJ~cM5RpE3w1Yiy`{+^D6Z*(T2vCI(XrI5 zHuZ?7gg6>em(uG{q#k8C)F_G45-7PocVmvPN`W3S~8=yoR*6G3{(lJDX8n z6Z(59<+q@l(`b83DsyRHI(^)V5;E!iEZWqD8n&jo85B8-^3EYXo2uH;&F4~W3=i$; z^A0oupV0GYcV{Z>LSs78?(=DKcS- z;5C#tlztyVH5fb!scaZ69Zu;ZDCs(S;s(lVO9O7CuSQbd%{2EWD!7Gyy_NDtQO+3Z zKbpQOqJ%qW#O<_a9BsIb%C4upu~c*?4ZDkOxSM{xm+rWSlKxHw_fy$@bn^qW$EW_q zG;bn}oj}7&sB992Fs_tR%4FJCM(w83%@0%6BNTp!-kL(&DyXoNDFKKFhF55MEDfwp z8A3_1R8pG;fUW{f0HI?;dhJPy>B)CPNrn9r=GNolBhzv?G5*OgbsIANw+R#=izR)H zsa(YdyFdOoRBE#n*;oMqPqjo&$z5nCd0G-4Q!PhimLx+Z2;Dez9lKQ+qZx)x3>YW} zgOdlHnB+i%S{f)oW$bX#pqtd-Qnf3g(P6O$WqNKaG?b2!DoRh!E4onr6mh$f48zt77L~o@-PhB zc>VvR#o`x876es^OBCw}A0+Pxp(g@jDk)Sw75@13|DmLcN)*m0sqi7K`|nCBCs0z! z9Hj!Gq;g)PaMbUEzv6R3t=^x-RL&3DriYUaVk-AfVk*Cncu~pLA!1L$5J>D*GeQ^( zXoAUqjM6XRr9ZRpNkxBgmItYig@S{_ouOhX{QtZc_E=5=&3!%l2--qxYN2>QP4^lv z_&xg7o|Yo0hH&@Q*T2H^q~vKZN+vD(MWCgG6lZ`y{A{o1Fy2ilF-|ca?sgsYZ1kcT zeG64v2n2a?OqE*Kna_*H>cKjkA8&fx*JZ8?<7^02l!!+o#tqbuvuWG^ys zP{|65&1Qoi1QM^Tm&tX-Li`U~0lJe;sA3A47#2?vBvp6;!SmvOA%XaRczX}*HM ze~j_XtjvS}Du2Q9}^{3o{`?P?Ufm7Pdr+9RaB}m#P)C1$;X+*P%Lw-`U{2NFEM z-op@F3DmjySF+&g1^lNUBvm31pX@YaF$u&N@Bwk}7W-bcV<(;GRq&`bG9C<5CDH`% zHQX!k2w)b0S_{`=J=Jx*K4&$J^ApULF;(_k1N2#Fvd~_MKRU(|0bohN5Nv~nb;=>F!x2P+2ogbu6(@qZ zZg&yPZyyAoP-K|eMr4Af?8!?axLz@jT_Rqw*q=)CJu0J;lOpE;`ZDUQv<=D?2(VG^ z3OE25pZbGS!N>u3>u2ObWCfM%LmH?GS=7{0&V+fk8{~+Ri6K&XRGv-=aaiY6FuC835I|kZ#}si$k{~BW^%R=?@+A0 zirqmKjugd)y((Ma4x{%@9`IT zf5?1Kp1`{cH1@rCoVuHFQ1BF%r#1OK@$Zx0!7a4jV0Q^8zRk|-%93*5*H+Zq!0glY zAsos$#2(~)hxzlfXgb)%NcMiWu^+7wJpZ&M6d^0C$j-`A3uEEx5~wBDwp2Rh zmbOyAoz(9j+)*++$tT&8)?$WKNq}(Fey(If~$-YzKdrS6xGO525`!AI9 zkQj`ZhDp)@#n9z@I&Y80=>*l*WEnHf*KSRf%U+VgB5`MlJ6D4&p+U{XOZT0;xkvME zrjD+zV+Ss7e0!(?Ft-22x^Dj+(;brtp~A4CCHe zQ&egS%S<8sXQxfr^f4p=2wqfpve9m6&4P zj_Ay~RzyQ9I>yYv=yDgIKgb_J+X>|c%6rHr(RHRU6xVKdUWRT6y6Y%27P62yhL6cY2SglOg`;2qH zaUN8|8V*Kpqn?e3*MzfMw(242?KZN{$N^*TG!AM)(7=8$vfo&6k${DASp5Z1mO{h@ zU5!;)At%VoaM7*9Hdw_7eBV%CAlL%aq_CK$g?dR~Dv3kbSsM=a^?hf9HP!@^b98Oa zC%Ol*K1XKvA4L(+ctCP9LNg=a;8PV4Bp>qyWo>Yw66&A`$~z`Yut^W=K#r;8CTw*C zuT0&Va30rEy}F&Me>}9hUYsVvL?@WIM0jm}kCi{3Y>?{mrwsRr6&dbVu$9UAcW7J} z7UJl>3o0VreRct0gAp4UD}X#?Y$4t~tVuhiEWtcSvXi7ivKUAO!ZFk6)9)4!dBMQr ztdu+q3H?eVX}5UaOVU0+`5l9u(|-Spw+#0+D|#X}sNhHNCnNmPF{&W++E8(*v=SNd zb**cwsNBf8IA#}nkc9Hg)=KQ9=)GKVX8sawRGNr_fR?)N<)^!xdt+659tUNLz(|TrCEZ93UQ8*)J*2C;?&qGfn4w(~pyj*~j${DJ2Fzk=RH@s#*a}4#IS( zV`V|1zoWWLt|{H>DCIj5p>Ivax>PCO(2Ustefx25naFx;E4TVVZ;;acql0)Do^+Bi z*^sQ+~c^B*TL6?0C=J24hJp~_YKtSA@r{W~S1mQ{ix*}qom_}9wysa959 z>jbWqFp?eQ=jZ8%F!LGIHIS&me761weD-P2JsO&S*0hQnS>8po=et3B{vU-rXT9?u zAkPvW@~qVCYVl(2&e4Gn|!3$6` z!1KL(Aa}k#WP-gB-jVVEB>nY6(KG1+WsPSa7UF8y6&{?nXe-1VZz?`7&fm zp|M9{Rsl{yqY6W1*wGe;{Mjo$F9ySEd~9W~7zbxcHk^Fv)TI>}g$Nok-3-W{pN zX=D~OG>J`2KBQa~BCc@5i#lfpo%S=lqQee2{WVsMSgOHbm8{abzmb zX~FqeM_$AEow&&jd}~+E@4_qla<@CV{oQOmz|}`wXqKBmQuRJ}`-JC|o9own<(uob zbL1hOQ^ME&#zhcKm2vw>X&)!mFW2@tzpL^V`k)u+EBOz}m?7$HDjp&BFlj$n(=bu_ z&w{E{;YZa+*ZGBy$!@_5UM{hx7ka;{kyOEPfRlk3CY|mw8k_ zDKPm~#=~$_?mMDpA~;)P&Pn8Xu|t~t6^)@s(44QK^j&lxH>@{J!oB|?bIGsf>~Cg7 ziFwmsU`;!2rkyYa$IP^oX7w3Ude)pdWjd6aWo2d=HuP6!I!2OAUOg@3OsdJij=QnR2Cx)4 zO|vx|0fP(JW&seki>csK5{%uplXsG`{E>nOr-RKAHQ7pJw+Sc1`3{089D;3>` z{-aI9JQK?-=wpX**SuZc&6k~EIj#Ub57FC}Mk^XXI2&qRWH%NI zqIw8^!lHWEkXuSHU2eNn3ncGyP2BL{P`Fa_a4lbyrH%ufa=k=u7wIi-t}t4^2c_Ro z0T&3H$E`CoTG4r4*7*EPRro+;0=>ZzcnzTmG(m8QYZ#2Li*}g32hFWJO&>h@fLLN^ z3A`A#b%52>uoh!Q>sVd`DH zJCLuyAUT>d7y2N$>t*}^8NmjUAE5ZHicUY=<|n9~B-q$=u4Xxn&C{6RrI{H3+RrB0 zPVTd8fd>DQURw+d?~fcG&_8OY6ieE%WO4E&cAr$x9GXh(7O{H`-ou6SxYomxj(Nx& zpoADN>B|E-5s4DDBpvN-6_Z|~ND2?28;l2GxWiKf&)wykWRV^&j{^d4pgQj!^=nsr z9hVuayTQ~NiekloC6?RqVvK<5iJz;osaAv5v{UrGoyf3}%3^lV3quC>fPiW*5o|-4 zU7=BdKm|t)<^cCd$^Eh$Xo9|yho_>y-iAQIuNWkQ!mJp70)Xl6o#(O0F|9Ca1}X>L z_W+e!gH{ItSP)3A!-}Ua?9MS5g!(_!Es%~^(;#vSyKKam)?%wB2kNp_pDl+aNk5r9 z>_)HV;5BSzaL{F^10!tZ!>(*@=9n&geJ`&6fQsdC7h5PKASOr4JV-<3;=W<`S9Yps zFX^JSA0XFHmm>7J$8m-$kmSdzpa22RFHV%%4~9=|b=XAkqzbXCgQc!-Zt1=EWE94X7~@tg7%j>9QhBUIjgyo-=`%(;z|esp)K^u@5rmNAGm*83?-A!mwXQb^ zm{op>Xw@*mSB@ChP>|W-kE)#^lLN&I($joQ0^xExYYJdCFEh{J_&RMO@Z^L{ zRwCftmOz;R6A&y{L%7>R9E8)~zd;h?i~&>kqB$NG8NiXjAtep9>mS_6vM?K;O}SXG zzC-CN3F{jKW(8Vt)s{T6wPv^@(kuCPjzgXKAkQ1fW%x)3a1DH(k8sjhPME-*CbLZ8 zHmE<>G4Rg3fnC2&lW<Ni-of&9$tnND=t;TZBfr)G%7&q;U#)OoN4;IW2J@P z+Cu66C{G;Ca+8wDV;*B0wZwd8SO~H7d|2{uq|6a_2p310^d_eDJ+x>dy*!CmR+d0@ zf{GLOyv*Rjw>bJ^AYaIPPjD#0f+t}L1Yl^-6MS24nRxiJDw%j_P@yudX?d~a)W*_{ z;3l%;vYX3Ac;H8HF&r!9kalndoflN(6S0V0 zP?c~dY~mEW_2<|%I>DIc$Q2zVr>9uAiPOhtun&;B`Qmt565CLNvgJ!~i{b`yQs z#Y>7z-jTXl81w=^i8)Ngrr;a4@J@x-1bC;g7r^O+MLQdKNIi`1F}Ht7 zJPhiW>WB;@ddak1`71C6F!oth(>cb^f}f>-^>7EhKvkY6&|RWy zGvi)}mm~y_M(CN7gzp6_`+8PJ?+ zO@Vjl&gGQ!J}p~8ReiW3bV_4akyT9DA5&m04f%rJ+eqmkX@5h`HhLK0r~Bx#z0~0# zz4s$E1i|JQ$qBNKtGWB?voxrTikbT)=p9#xZ=?q2q5!DH(`#~UJh!gHZe32S&#?~2 zBynsqgVf}Lh}(o?F5!hu71VquBu_2*(YD+J1yTpbRvnb)nDXndw3kM-<8IQa{y-iy zfLq?j5hHjcN@CQC%h~;yWi5|c$IFDF%T}09#j5R@{hb4lAZ35=~RcypmvTsADy&ZH4?%_DL`eQms%fr(0b383muGJu|opw$BMBw~=|S zi7Bg2?nJ5*wzoV@(KE?N76=_j z^Nl!*rt+rw+~GAIyNCH#PW}<|4VDl`uq2RH8eR?Yt`;{-ylmkv66`NLK#q-&-oxYz zH0+NEKQ2+8|HVE`f*Hu#-PR>s0HK|Bcum3nL{NDZmCD4>`@6lCinX85ARZA ztu+FiKFsfcQTx_@%x4N9X3pfAXx5_4po_b+Bs1>f1})ieipg(iK5lG;XkHhRuyCuJ z8o+~?ihrVCL^=R;O*x@8N1%@g_g`7uuOHt9ar<<><7a*XTNU(H4Slz=AFlKtdMh+m zXs`a%Tj8F)xV>s8o6%w6qwcJ8sxCuyRF(di6py+Pw6W6vNS$947Z5lmef`Etu!})s zRl|&Fi|f+J)oN$9Ah*phrkydF#=xTfjFFkfdLE=KBhMOn(a0>_uN9#ML+9nUUDu*N zOtHZ0$bXGbgBXJ^B8weBKlU+y&)NGq`+%0IoT^iF;CYACvjU)+AZ_Gz4n-U6&c2Cc zj~GN&w-UrFE_iQOvJ7LB4X--+2F1|!N(l`-YQSc;DCEy=)d zu~O1jt82;rTx6X@Z}T^IUr6z0v9~B#19=uG=B;hweJ9oq@n&%H8h#QqIV_&;f|*M< z$dwux#|m z^&H;t>zpANCE#G|dK8);B!pUJY)1lI4AqTW5A$5h)tQvIBlRt&O;v;GO!2>mge!6UC&BG zw*r#h3|3@8Rm2cuu40@%1X{@d8kWA4WEuURz|yy=_Qw8>WVb3O1rL%Btdk$eI;6ZQ zprQYkm;QI;gsZin^)eWXYO4cF7nPC!KgB5=)(6Rh=kAC~$h`BaBKv)v)JR#Q3^QYq z&r+BrHgF0RLIMoU@a>~}!k3OQ@;TkwpvVudH`bq2E4wrzEx6AF4;TmezX!EL2Nou{ z-#C!0#QQ@q2>bCaKdNdgCB6JW9IpKTbO_`144=c8DE{dv{(^UgHA4Tbvj1gq|Gx6i zs5p>M8$5gb8N6)zuz|4vM|sQ)vS#XDTaYa~o205@jt}>y-NkKw^VUB%77~XCve3JF<3D5E|Y66gWUZ%$I&3 z`w&?_lJyI@zmZ*{umU-*!D04Uvd)lIO2`dQMVHq~!({bXyMaHuiGS?E{qS79q1z}} zcpw_|eqi0GCCft)8w?T`-{}&GE|yDnigQBJPD=D?agRvBSxGx;7M(GRPN{q)4!tK# z3a3q0$Yi4O0$TP3xje!^Pz}M4o#6LzHBD4~l{*3pV<&?-V*oZxXu&!D8Z@I7uWG{? zcQX7b93DVT=9=Gd-ZH%if@|bW=r>BlI->F7&N06XHU=sVjx=|PLHM)>Y2wZc;|mmH z5HA5Gln*TpXsFmSS1~qB-1s8}EN>C*-O8i4al`HWYUN{}Sk-48_`5I( z+cVQhu?FFd*zFXA1Qen{94ys*6{z3pLjRe0CmW2U?qQ|(K=T>tD?HItVAsFrA^~Su zw7ExVQ7{mRKiEOM(L-(7xrXyHctblL;&P}xmt}I@EbikoKdp{>@<75@gr?pPuYuAv z*j}dgm+j!|dg`SGTmpl*7slumt^|NA)N*G`G-k8#6QPI&FRh9n0f1K{j`F7xRLA#X zUw|K^0ZaH>KElOVnY}Hu@GUQwcnA-U>3sofEmt*tK-MaFrxZ@cZah zsl4zKl@QFilD*a%{F-CG(@(O_JSTC6KlV&|hV5A#n#Q4->`sUFo4wiW%whLc77Rbe8TiWY(a?v(U+l!$YFFe2te_{7G z-c!QYU+Wga-N^?x1 zn@J?*t6243skd7OpiB^1b&$6^%1@o-u54)x3so0M%8|)k{Y5a^`R;NHW?Z+3-AnA- z#RjjbkF4q|a~_nGhhz>G#294{ldeO>MYB0d-grV1$4XaEUeA||(b8_5MCQp|#_3F#=(OjSYv_RQw2}@d-F znB6gEcO?^wGoi{R`sV;UrighU-vEopE~^e*{jJ9{v60PMEoeGZxq15#tsp10;yIX1fFtl<p{7G#ZsPNV4@Q%o*;=L&c{v}DD$Wxz6!oMWr198y~V04KCWP>@4r)azJ zcIfR~a!A*vj6azFwCsf`wH;^RLf>po?KH6f&iCgpG0zzwtMHkBE-{$5fIW+!>l@{m z9mWrZpQVdDKS1`bGg<3l_b~1z6D(IMy4%f!9j4lDyUAOFz$Zi z{bGLl)s+2aTo42yKTuY%ztfF2ujEUL$C&O@_ZV)@J?p ztzC*SwDuXxSM!3X>>e`K560SW?B6uv96Q0@P0Ty}`JY`NyfT9kyS&qMg)0Q(*=i^h z@jv2f#Go-G5LYLpgmWfww$_ULEb(#;yklbhKYT;D5pW&EGdE;zq(QM5mNL{1*D_zv zi0Ea&Qt-e$$o!~Uzo9YUrOYdsKV{y?yo14@=9Bo9@YM?^spgqssC-Kk1G%r^K8E`l zzT5CUhWqOe%NtaxhvtjfVthN*Rf>$wxGAByY&EGlNI<~<`@Mk2I0n!B^YqeT>Wjy| zkUk1mywA}P6uq;k_+<*rrqp>9ETU)>z^_ol`IJ#!20sBP@nXt)gI@M4;hX$Qc!6ID zN1_rAhpC|$_D9oWP!g}EXZ)%-ZY_;nM>n7<-bhz$AdtgDn`s{k*V#Qlh09qj1VzA1gHwb zJs^|;L&m%XtFGnZtdX)AoQO#y#*Y{lVWPENkT}EJ;L4X=l&Rs@5YK9Vw!!3CPf$2) z27Vc%$S$%MChkut0BHmi4i(ylt|GY_g66>IwOww5 zYck7|>(g&kc0rKI0XYQ8^|eUqkzB1$=6^fC-k+=BNr);>u}}Zt_Z0hQ{IRfuBk@~m zyk9GyJtxUKkA9vxj$H&Np%-qV54qKx9n>>zx#(&QvTsoyWS^R&Ll_UlEoV-DiQ$m%>-e)905+pOq@_w^r+}GkUF9n5rF6#jlGOd7lO~T991&0rao{ym?F> zIioVL|FHmi9D_TIy;skcis-Ah$IY>eqOY8@rno%%>cP`yY(?}{4IHndCOI zeAk}ci!9%@XW#Qb1Q(i0Ri~4gL3O5K%|_Ub@|CL4Mn<_A&XI4jSCa)%{L9 z%)>Dz#biTF)v6{k$M8+Y>SnmB;hPP2G2Si4zSVF~!?zp0!|-i}zcKZ{RiZLRWDqMt z8>tEnF*bT?RI?*E8>J%(T0DnEvVRK#S&WCP5Gbv&!ez$A<9e55qaWYHPxTbf=l{FC zB?bm4TqtmngioYi;@+tn0pKa{?+430CK0!Y^tzy+gGvemq6uv0a%> z4B}H+wRU%k^AB-yCCwiX+RHd%8AglPumBFAfn3vkO)}nh2)Y888im)9@sb4E9=7CI zk>l&0Pq0Sv8mfu0*r#M2r3ZAT6Ry`^tz8 z)E*>1)g1M$zKps8*X4ZuS#bU77uSyq{=s>e^MA~Y+5W#784$?3KfaC&BE)m`ns6Xg z>nEe3RfA9sa<#rProSZK4R(qTD#tu_fQ%j_uMC#bhq1L13mM|mBoDph4Eg10iAOK_ ztc0GI(2LS#mjB%$-v>&2Y%`BZH`MdxNqp`xwV#V}hSiyf1HHe?$XS6_9amDLYj!M0jK-z=*B-Qk;azwM~*g1B6oOO7vfiOaWM| z+f?Y71$q)jD}8iUA74oE@U73JanDfnixfYb;^$KK0xEiy;ulirJT>{dZf2}3AO{Jt*7c6D0&mcZKk*_lpRjM*-bg$ zQ~Z9aet>cig7X8V9rB}aexXjkQR@NU#u!>Zi5uW7e(9=&+lI(ioh@@EQ(l* zt&<1k9O}zs0TjKH zzqyN7_T%FIIuFc$K!>QsgE{|x4J+?}(_jQo#3*kh3oc^q7#(ZFGxa=^za zNBKDA?2i@vQt)pd{IZT;ThIMAa`Fa_-K6?7=PQnZm3|8czty2J;*-#;w%N{EFt}k4 z^|R8LF^zFcIQB4GKeBU%gGY5HlX8T!%DCovIH<&nmg@pi2sV@@(NKK{r65)r+DVE3 znW1er`XfX8GHFep?-U zNTt80Mo8shGS%PIJELTZCuyUl-UM+W8-rnLk`I!?H0BxU4Hh@%F#i$9{igcp8L$6R zDMEP4+am9Yyep?xNIqPp?+eHS4L=lKC3l4rMj+MmRg3(E*k1|*LWRb8lgLJY@A-`e zxG&l+yhlOPd_u2@yHBb~)5be{Ojcv92B+{jA5Il8oq{I+62rMBu>#4v&RnzJL~k^? zD?u4eN@5t3oyh2F|stY=3wjNLBkxXW!PE+=d=&OA&q} znG(qv&(qK7C2Mmh3@f_xxQ942gFkqT$F1R_s+z=Izm)T?mG|n)uiYg1E^+os@wd{? zGNCd#5Me@5=B8K^DxV0gj5mkTG$on<3NZi7`K`9;S%|H!*P-{}L@`>M8W2p@2otMo_G++{?U5Gyw%q72?Vi001)<@>UuH zRbEYcBauedp&qqpem$CBmwMEuR!MYyeY!K50uAVWhu%z~e>9>V4T;leaTB__F`Z4N zkD5}COR48&l+%nxT~6ugG`=}4YC%(4QNk7U#+6jXNBX>R6(wFnfoqj%oDQIIM~d+| z#sQQ@ov1j64)@d=$#kQbTPe_;0ymSnjRJm+1ld@iHwEsZm_FoQLOt%GnENU50g4$& z=?_uNPzns8z%WW2OlCL*Mo?fR1s)~yI7N=4o*t!-qreynOrXG%w6cK4JVoRGNj)di zwuuy)M3Gad;dHX6D(>lWf9+Li8bv*=@}YO0qgF4{{8^Ow5_vCE$0F)EkB-fzcjnUR zIjSidF`w>TK#gCeYZubL7SWN#)bDkY*C^@@YWF6sT1umq(L+nrb)imrSNmYd?4jZid#q7>nUXe#rbFcw6CcB7An|A z?YGmM9aQ)oHQh~x`^eo(W51`A{nYRP75Y_e1-G_+qR^Eb*ap_K9~p!hUppQUTh zXwKKQWz_5(t->4=OwIFzb7(ZH>aU8$4@Pk70LMkMQ<>2|dDVGxHO{Nb!5aKo98ZQQ zr4~=B$t&w#Ad+#C63I9f4i`Szm?P47cTT6hCu}R~%LF z?44!op672vTsu-SeS*Yq*o9S+`>RM+WqB$np;!sU$*e>zKu>~1QRwOMlhIyv7_re;eGI59iP z*S>AAL#B+%kyr%W+${0kCAO!0e~X;xB@wqv49ff7V)c>IeloJZY(V5qUv)j~eMo%- zB|{{8kYtXKmxjrvp%NOddb!Z!Y9)q%E$s<8kuP0FNfS>(nKoKNd2)KZ>=`2; zO%R?W7VgcdQZh}sofc}&*%I}#%y~(iSu$*%Min1HC$dP2-jqiciuH!fT_TA~W&AQp ze^2VaEnEL3qu-V0Dbl1291`jE6l(ZzH)T^FEV)ze#_{SPz=?L52sLtcMK`F+9}pK$A4w z$Oyxa7#?Z(F~g4<`*Fj=3_oGKnTFAQ%r^ES!>f$*iQ&%-V^i~mvA;AipBwp9ec8>{ zo6f)=Z8DF4ZI*sxUir#w_}28@VwU6H-)h?JHqCaK&ihQW1E$X&vv8-WcF?RiWSae8 zuGnw-fSB}~IRmHmQS%YD}bLmvMDw6d?r-UX73m2rvK2obqw`Hee%=jWsfJw*8J>s)!Qc zjwIpD`@>_UT5{G7UXd#E@va^UsFXj-=PwZ0tbmmal z=(>U1BUcOl)_ok@&mLT^KPVxpI$W->0K@2do?{?~hTRnfIWUzly~0V+MqxN}I{0ca z3^0A_8g%k%fb|_xuRSFB1AN1d?}3dTC38Gonc1+rP7-^vconACCBjQ3f4QW?dHSPj z>1UQ`f=P7@8+}#tmq(>7Y^N}svT*{YMWk_UQz|AlTE+HFa!q?UPuH2%Fk*aVENpzX zs1XlOwYA;s-eJarM)kdU10gJXOcFYDta5%a?Mh6O!)D-7V~&}OGa7tsk(FPj{cJWU z^k9d=XaN5yBqDxYie?tdK)X==1@ga1rGN$UU9y*x1MubtZ_g z&R+DZlJc7Lz*)Lb@?MvSMxJ#wgOHmbEa+!p0EqH7a=ob9g6l=CG7$(wC$;6c+j&7h zZtx&i9?mVs@m15=ox`E|$k60xKj5ifs<+xZ$owVz9Mv&Og<*3OC;}zAm3nR zRTIiF4$jza#_DREn~mK?mvmKk85buQWQv|~lHn0h%3-sFqNn|(y?_SsOVhz3jE2+0~I1rN*4 zp^}Sj-2f?gTw24L3SEaMB^dCImX+g0e80alL9N6ByV(?BjNM=(nk7=?ThHc7l>gdd zR^VZG|EFy`tjGRRM#9_n!>YT3U_SqpJa@N(Dj=tQ*4hiN^-|H&iC}UkFrz z|C&JclWI2L2P`^j@{gN*-w&91#^m{a!0}}!AGiEzmG({ZrM77B)m9NjxiI8hZ zu!XcqqR6X6UNlK%k~o3{)T>EQ$LV&m2IbZ!sZWwj;*g|}l}27;a#BeyC22--IR(?9 zvLLyFtSd=cle9!+0NK}&TuX8t1=~}wBU#vJ-=KHB+k?29ZWiQL5`??mM&dWlRxgs? zBzKW@4_Wt<{Q%s26nu!Rp(H~{hLJs(csR)jjV%zwMU5iyC^(K}49NtNCrJv3pCb9E z77|uiggis#e4cOG3S#O1oCX)lOSHX+WH!lMvKCPARg#6I0pf2^95l&TX)Pgni{u?L z?`o4 z5ge!dc^D{M3>%+gc}A(=)^xUCR3%t&Hp?8g=Bo2u=4n#Hs@J$0{NosUZ(_5VV|H)` zC~fi?c^Bh4|tbjm1LMjcDjFIxvP-*S=JJ&rbL&C9f(8gf6=TG*$Wg_L1JD-pGM2%!tFQt$paKd~p*k=O4i5 zQgELtoE0 zDz~xl=EI?1L+$xD)>3;uT&2I;^Z)J|MTLJgpTCC3UCY_+xNZiYL~28O?vcsyS-dox z=UvBDd=2dil({s8QyMea4v^Aa zd_|0ZF!EI~K+3m}5ZLpX6#5Sx>uqz4rv#;0h=M6x&4ODxnLJy|%O?b$6 z@_e7zX75vCn^qu^s{Q!EE+@8Ck^oGjKDVtK)F9xt`KD1tx1}mgOX+Qw$ib$60Jv@T z0d7BE1aMn;wM2p8)?Q-5rcqQTsBybUYhc{KaD!bGFp9zQBs`%Qs$dO)83>vt5Y^6` zhG?h(QUm!JWA+ACom8t=UF!&L-v0bu8?qxA8m)}ORL`$ht@^@ykr0gQ+9XGq^|9tG zR+9-PIn|`6nHw6KtZgQurq!o9*){dHwdxUM4@I>p&OwB_4z9Tg=;(@|m*&cxx59U8 z7m^&s>SDYcF^CMVzbA<&6XW8WL|jNNgcC1P@+^A(C3@~7zUMKcl65dHU=4FR0lzx_$>0?4=0U zAFxYBk$jwhw*|PbCJu@+6?9=X>sruzV7;r^5O~dz4T0C(O;qfy)fml`dL+@aKirDH zXv4t_&VazfWy#{1H?ZBA=b-dOTy-u7;qJs))ZY&fzn9UJ1qN^q_&=jSSYRtpb6D(r z4vyi^#&U2xTN60DKv6sZXatevw~S+6=gC;|exO53kTiZ;&xx2=ZstZ`bG2{y&F>h% zb8i=~-pxrrvvZ8?5Cabwz#)(*fM%>qkoq;nsx59UiKruPT`~2Xlf08O58FhU6$r>aTLRi7P%+#C0p1E3c81q0Hul;DjbA10<+ zR$N_cZ$0IoZbJ$?#}y&-WU>-|z#5A2d9`pboL{v`i)YS@J+g*hmgi0C0xjHaSBK zC3bbo=?1DlIT(GUsG{SkRI4X`y4v{Fe9?F<^JOx+bsq>{NDQUHPiP0&+geV14KEkM z7YCN$$F-F8FtF95GQ6*x-I~K24zzD?oM~rn; z@kjHHn>=5kp%Wf_gK*ryfsR^El-Yt{Al_ymA@ks{{z|dK2%)$T12mHONAiBvOuZmB z9T1a;-RmK(*&q^2eu#_UuPNn+{iv+`O2)y+6h9+gr9LXjxPaZjV4;PtTEV-6w+8PE zbT8#T=*0WfLIQk{Gk~2z%;i?ue!f*U>n~Q>W`Mo?)h+u+tL)^zvC0mf&%OR=m37`@ zknoE?U|Geol6kdK@d1TUNI1R=ypM-@*IBmkjhyEDeZ%Yv$GGwl-i0?5_j`mi!5dm# zyhhqSxb1v4h@Vc?y{DwzDj(k>IlUz3cFFmNJk?ur`uG`Dxsuyg%tI2uTa3rG0v>{v zAC3Q9;qsQhaH*;SE;h_!7Fx4JQt%2xgn3eyo|bM z2M1RCE<6|@b$8Oi5uT0czJ6LkKfO0|A7BXsy73<23BlYOx)i@p1Yryl&bT+&eY>33 z9S${E&(Rxs&IaYol=@j?vW;&&^v8??FujAaJ63{m5=ay$LBB+RUnF+rz5nEwd$bqhsa_hB;F zT!1mY$M@*@jPYq;jN@&EwBxK~p3|E&83lzXX*?8Z0$~TAKiUx&e#RbZ#t#AZ}|Je$c1Fa()I`!1jMmaT5tRHGla6O z2g@^$iHw!t6lsg=W1j4MMebc9gWi{=A8V>0?hzb`dqUC_J(TE<3}p%W>vWJ+(8C^A zW-LAvT$dp*vcwu`TcaW^KqIfj>I$DEJ~!;Iv249Xif@xcw@bHNIdn$PSZ%Z?lJlvy z(gCcB61li7gM5g!H6&Gg&>e4LYcr>B;ZDA)>dT+mI>u62p2dxc?_#jn7$id8vsS0v z1$z`Zf(X>aRtjt!Iuo%e6x(08o|QOOvxl6Y$psb?C1|m>X4tNJsKBph%%B`>UAypg z)1~l~oW@SG3%_+rn!X^@p_ZH}i=LBQ{LM7-;PJ$tb_lY@gcrd|Z!G9!(AI4wP#nD- z5P6DysgY|9w=;rGC{~}C!1px4zQ*ojJghje-^2!Uw6QS07-NEy3{NpKP4}4g9K+aP zeqpRHjnxLz560~brK=0dM}modhP=g^Tann7ZP&-pL3p;A@yZ92Bp=8)6c0CuGgcy| zi}R%pQl!1HurvLak)QR7oP%gojN)SrRyo#3Bp;ICbJ(UgyVH;v>$&#qVLEXgyEkwK zdh@UR1Vc=m4zd#~t|MNuxR*%`sFJNDm?hF#+}p&RA;Fnqfhv#ZWP@I;HDP5sVUodq z^Z^A(j!sIj@>8riFN*aU>3Iv$bxi}gqw_Sm827zM)=Lzer@>5Uc_3?n(cAeqSzl1_ zOLG1un8`)72PSxXebcwk7I1&UB~H$d&Syz9`a6=T2BRJ6NgIu#%sr zEL;{-$(p87O=?t!F8V7SAtJ2_*v~>gt;vEXdJAYIO79G&2#}Sz%_Qb>h47ebBpth9 z%-s6xb;-}E=gT{6>R=@Y8lkEz1z{7LKi1D zp=N`f&G`Wmadta%FbqI@T-3PKL0tI3ak#ao6r5}y&<`+gAn*(GqPw{gEU5E%_iMVC zn1~?DeGqVpg-sAXx_oK9UAmR1CbkD2V9ZRKvYRRyDU$yImF?r4?>Xgmfyur3>l{k2k4`4b40|Dk%A zdF%8j3vS}LgD?V!1u+SFy;LbmlVDS^+eU&=gY)yq5a!n5HTh2a+YW zCr9*Wo~4FLc}1eJum42%@-Q(4(@bY5ey5RD$B$p!qzYO;kjL$8|UV7ZSTsuUcJ2UEs-{@1sO<6+=}S1wAN7;*7KT_N@6iuZ2` z;=erxcZ~56o9HXLVaSTFZv}s4>nBdeI0ft7t>o7C;q8Oi{hs6YGd>firFiL*c9j%l z2)+ma(wp8W-u=RJW$Y^=uS)RWVnel(Vzq{jx}JDw)h|`MmK_g@lz~~ps-t!-an!N_ z+a~_N5h;ooh#{nR4FUJhzr(R@Pq?B4n4ggYfTSzBYUIt8Nkc=Iy&}J}vq=s=Z2S_!^ z&rs0{gfy|!8cRkU!YAUVScDC%5v*vd7{_5di6Ik0N)A%_`n6>q$k~%5d9qH|ty%`N zi*)?KUXl3MP@>>Xl+5b{^Hto-)=y-eAm}dg+c5rk;KiZY^qOBl0Xz7tph-YOjY}C( zo(Lpu1PYDzHOSb~A#f@?SdT(t*GbhHUSEwVcOj4i*cp3F3~xVSX9K(2)p+ipfkLGL zZCIqZabk58ue*Sp<6&JmOq*6L0U7cqNS+{YS}NWiu?~xM(jS-@t>-b}cY(fv*anL> zh-9u{2X`xYjM!S1!saQ#LUDFcurhm?O3h(VBCSdieW}(1IN^D+O80lz#{I>#_|?qE zS$f()$uRDD1ZIg1*PM;d4fgXVQK+hH1ErEa#6bvrjuX)6Pc|0xdCJE*mRrs9O!wSP{JN!4*%y=;ZmuoY@7m<&D zj{o7mg|*=-@qRV>H@_Ok|7+o7_$-(kXbI$C1pqfhGd({C;_vV0#{%N|eQ29ixsD*Z|Z5u znbjl}f7*@a<8#Jyh0BA$nS`S|Kzm5@Q7Yu zNSbNdL|k~^(#$^Cj_^;geM>W)P_sp7(4n1XR^gwwQDvZqUkBrt2LY;r%~md}0nfNF zBq&jIIZz=-$s8kwV&p}QBbh8F1jz@)9$}?N8(**ig~`1J#_Hs&1Wz44ma)eLuMf;M z-#$m#c$M1md-{NJkB>P1D`;0x*ysgUZ?Hr>D#clBZ2=n@)*Ji?#^7lT{|`=$1DL@Q zeoY7eWEVI*3|JpVd@%P3J_MBF_-fYbgN^4FM=k7jSCE{`}Xyc8&Sp6B2%j6(osd>cnJa0ESg>b+dB*QD<;u~=_yP_sX`Rx@(JG!{TF zYiaWvXfBY^xE<6P5sSlruX+Hz@5#aVtGaP9er?T}cvaESV2-zy@wr8!t3}>Hfn>id zPFa^g@(r7Axzk2KORk?%Q z)lG`weXeK5{zAdlI@HyDBGhzmu)qTIHuJkIAAwmaj3W_$wiXg>C5(@#oyM9x-cbUb zWa|yOEKbak+^(|cuzE2N_~qe^-e|l{#`#*+XfRfIyOfdvY+(KYHH+B?jeW@fZ1=0y z!mDpt(>QG_^Byini-8)oGtNDO_2pBdy=T^KQh*hY%fV%`VhDS8;k3~OO+{SV1k-Bp>ji@$sC_m`Z6 z1WrPL5ZXxyA%IFiM8I|efeBcM6vsXh8>kFLDPrLy1PNFO)rJy^h!n-%H3%ZkNEH>3 zstD?+p(8c-+2;p{I^TTvTmS#P>#oIOVT6=Z-o5v;pK_a0h=UNkwfC|A0AKSUQwe`K zk^$wHj^?ICJaH6H#Q2H+Y7X1y*+McC?$*;#B47D;yY=@^F4p1i{fEW+nMxTrS75c> z?jTqHmGi;r#hX~kwZVlu!tIXozmD<76MSbCzm8^x#7C)$QDR|$TDC%gaeuYC5c})2 z1;Tp5S+7Dk?U9td@=}PxK`sX{cK#uOkQrlO z;}9Y!XIlba=rmicfqgL4yx@xhVaDX;)zV!<;jP4Y#qOe**}BDsk{7Ul;RrLY68kms zdve)r+DH@vYZ%Ezm@ymJ#nG)C6#CPQH{DRVCfh=x<_Q6chi@UW8sl1%(^l=Z9cbrq zHy>2k+@H>N7W?>l8(S}2dOD*hGljcVQUSRN?m!D4s?Px`BrSJiG4DKNs0=ouW7NUUMaA!xw zy0GwvlRu7}Qsu7L(Q0AjO(A-c5+5fYhxR10)5y*snyCrwG>hzP@)l6AQ0-?k50gDc z!Ey3VP!PkrF-}^grnr!v{as%H?;#bGje(6{P5Z!%dcYvTkcac)CNY9!MeK=&%IgRd21VJ9Bb!sI<FC4SBn zg8RDBWB@QcWaw8@f)%_r1+>D_(-F#vqrb(FION6C*@={zL}NfM%2aQY;-=K48I@;K zMRN^#Ja7*E{cK7F~>2)R=<3?+D+ys1P_Q}HC?XY_{h3<_rI-NZcw zCJ+s|=(Ui7&xlq~Wk~oV!%Jg0lEDRe zoY|TCcjuV?+!PgjfF6K;z`1w@<06~^fNjQDG&?FeRbfF@m8wYq$C?bJLf8v0pa*v6Rjl%{(c}+sOzn8Ar zuGC+55E!sH@#w5wa>;QiL_IyC6|-WeVC$`%+aD#zC0?y4Zp=!ZO_W)L|FxFNfkRfq z-hqR0CLRFDT5<3Xk>CtS5HJ+Rd?Y(J;)^e*t)OJo=4^O$hrHq>%+b}PQxhp&P6g=P zGWfP;ybMJUcwiKc>(8;TvJd2NgIdpFo9Ra9?hw}I5K@?!Og@mJwH^h+2d0ZKfh8fuGK9@8su5C$d!rDLp?d+% zu>RKAS_E#qm%`}~-G}=6OwhMT;WCiEJm6HI?{3l@_C7zWUcUSX;@a%N=NWT!GqFol zjSrgcgrA9i)cY3!6!$=rvrN; zuuRizL;Mpw3D`_QwP6K!4b?~L7}={{Iv#ZWuaNT^VfMl3krOUiRB@nWFvvgO1=v`%rtAwTzJTIyph5kpU z1n%_=N9L$HDYBX2tnT1@tHBjVDZU4%Y-dy%Of(f}m77|E2Vl7T(&8H}yO(Iki#TKZ zVmM0zVTO?HP275NPj82JP|EjV3gj}2p+m7I1C(>#>WLCn0HJS8Lz;j zvW|5^<9eX4Ub?pQ7;R#*EJnzE$GK<&auY%(aMW@QnQ53Qm|)`Nb!>utG@`K5DunIiLS2P<4;~;Ls@~S4r_{t4zH9D036E zxBxZ>*ULf;@ixA+O-Lc9B>@~L$H|jvQ$`y4#Ms?o>N?E)?;~#s^{D~h9->BE*n^!r z)#$_disJzyJ?XR0j?Yst~Nl3q{VuMc2TEn?=R%eIDcC__D3 zy=KxeOEW26Z!Rw<8L4TU0uz8K4Vv_|#@=ASk#1FJsE1XIp;|ws)-;FcS z&=BJeGyZT>_JE*74G?9WDjc7t8p8O z>p+Jtpqo&AIuiedqzjF{jOYrY%jswj!rYzSo&2kat|q#c=o+Hyi2Bm#kpF;&GZ;!q zBglJ@+()&&EPhz!v53|}DpijuRQin4q~o8as>egB*iarxf`o(MoE#nz8{bd`Y81a__z0 zQ0}*szMYnArN|Cy26FXxl=Ks2{!ATzR9iFuFgb@bM!{o7V-pL570V^nm=l<)GbM6H z5+6%NOrByji|cYxJuXP&7zBwn(5x<;OPs}raWrM~nr58QoO4=mjx`HF!`OyN-ypofyW4fLzuI1bt zRkfOly(+Nuek_QK8pvM`<|_yB<^lZfaHe~?+Xzm(kHMtE-0{e0?mbG=H0-0QNUixW zKMB-yJU=*v8&BoO9_OMbIPOW#d`eOD$V^TuXPU;&Y>v$0#m{lK1spe@TP;+_yjw85 zEak73@vWcmP5)q7&b9ujfm6djFX{>B?U2SjhIoh&wJ*PsmTdO6oC5sS-ENl4Ci+BE^iL@2GCUz=JrBlWjsRO+_rNZ+oQL5{wBA zZEPd^v1iZ9u!9@hX6bfnro9@la|1g$%g(DV=?TL3fWk@)^5i`_hGVx5gbK%FJ6!#R#kE!S%6tkR00PP2e{iT9;j(IlM8$C)qmxjtGMubF1(ie{*4QP z{M@YU7vMi|hUdH42MPpiJXBHuejf(V_&$viC>a^{Arsk7;)3b?76##2Tro#8=pi~t z06*$Gw(uJVxp4zKxa3FGjV4uc$^rgv4Oyx1+2OAgw7S<2~qZAuuY09Rq@38HMcR?Cwx#qae;K=ve4B8d`JmJPh+Yi zPSl=Ovr5_CQA1}dyb)kkO-{2{!_TC##m1^QU2SPg8rTcMR{zcIoPdBcw7zI=Zy`*7 zy1Br^k3JuS2LKnK(>!IMA55shldwSS!3f!W1z-i7W6R9EiKg+pCVhwDooW@EhMm+O zp4hNX{U%Sqq;LUs!?18hVxUE0Aine+hPEp#)e zs?M7exkGJ^N#lzFXamD(&0lojMwf7-zp&Ru^}kEIGyHS7C;x!uZ$Ew*xA-nzfS(Q> z_yb&w4!nqY6vs{AbDm|loP7*O)7hQHg^PGl1=A)z>j2LUW!=p&;fBn{xtMd0^4YzF zw@E%GQ%sRy9HpF;l^ud$p`k4}rCHbr8e0|)D4C2GupSIi0pEq5QImClht2_92yoJ< zmR>OgQRUU4LP$bRc`ii_w4*^()lYdYEpDQS8C=let%R4?gCgKYa^ao?LK>g|fWz;Q z{a7y@P*6Wi*&xIspdo~FQL>7o0fgF{mGR{bQ9dVx&;CUApH*jO=$-Kl6RdjW-2C6lk(Htz|m4;`V5H?*|KAMl2uRY9#XC!S^ zL(;WXp-@cv=#zHxknOqOH%l< zfO?dFTvnfu3BOAHa6m{0v=*-8eH0ov7WN_sP!)U&?_?i@4GRaumGNFfh%AJeEgDn^^iV+{Ou#PVHS-9_y}0I4 z-Z*4&xZvm#8Z?eM3KgOCz__p>1?zD`o7USHGvCU1Y;9aZPBykQC+3 zVu!eo-j5cJPEV$+p6McF*68T)P7X{pJcX!e2*eCH+XVQm`j4)V{~9b`v$ z2S^FLjU7~wySOZL6}aVY_2MppD_2yGH-Za6ba_zuIl$1cTgTekqKKe;fYKJ-y1o^f zE56OcK44nP9;9}#SVSG!%{41|TDTo(_^YPU1bg|7ef-&e{w&-McqiC9#tBu}$?H;} zF^F~$VfRsxAo$auzB@mhm(H z3voBj#uB>ZF&ziok4`3fL}g_YaH_ZCKI?cay3K9s>oxbVB*CoX)Oo7{F%-2^=dFP5 z0w@?q?qr&BAAwPjbkE5M>{o`JjKI!$fQDn6GLpV1qSp6QyJE@-Q?L_C$Qu=AVUJNk zXzOvbq)g+m)5g-4$0$G$5{95hsLOb&dV=atq1F>L4!h0clz=&CD)pU2+a_w3BA)Py za^h!CCSos|N!y;+)PUUQ$eTq==TNKJG;(ejioJlISV)7PHdKSb+YhQqXDl_6BnL?l zr}i442k82&p5&$r(jPLz?Zy>Nq$Eo+(L+LajH3YH8+I!fn9R;P)$-u*G{8{+T@s{% zSheg5QyZ{w!D%3x{bJ(?p;5LD5&WGRQZmj2fQ_J9p>+iB0tW(cysngk6);YNKI9e> z-#~S5q`zRLjspQl0r2Xu+?>p*TtSOg(r%!mt0-{|RjebtxdYddd_fgoQNour{4|w4 z`VPkM*f^|-by$O|ZHdEq3EIWQhHoWYUctL7=%S>BnC^Ua0sFn!4_`Fx)BeC-z*Y{v z!C@!X0iDR;L3~|0vwO}iFb#1cZr8hD0ZO0f40f`(iJv-qk}fI ztUDbo)ChI{j0SI}ueMOab}HXWMLTKKkJR!2(SG2czy$dIYCJH32PU##n{yg)DiD~f znXlrcYuMhvej!)%Q;v5`U)};5##o*{m7N*9U?UfOt;Q55_VIuiS-eeh{w3{pOYQ-g zbVxu~8;D@KI<_IUb%4!#u#2|xM`dfI{Q&<`adOSz4s>)7-HP|(d1_On{qQjeJYma; zKK3q#od_qA-$-J?Z)qfHpfog+(P00MXMdcjwTWYJL<1ODTOBl6`BZ|nookcsrY?V{aZA(>ME!GcU&@rN2k&Cgyg^0t>k7WK z+d%w=dV_rE1)2*=A&hQx-npIDg3sTNp16x{zJuZikTZ}j8$@*nQ(k|{4nl7KBBf68 z$ND@YV+gi09P*|(S%(Y0l#B5+4pAcoY&m};%!4hDClH=ZCsVyznXQ70fDOS9X68CDl`2!1b0u0uubNDAoHE2*R>C0|XEYbfb@ z>iHr~$M^O+O@4#o-Xv$K^1DttQA9WvG|1iN#=Gfm+%h;h*VHvZO>7VlN?Z42NAY7r z-LQb6hb!ZB(~PRfI0ITsd}xWEk5HH=OfeE+rm6Tb?O9WIy6FPm?+Yg5B~$c!6tu8iUAjQv|V6Ll8cHR~_7QbggDvDUjv2r;N)ft2>P-~7dQk3`< zMXHx-z#RR9>~gjDq!_LO+YkxM`Ak=8r4H^^B{Gn9Y`B~fPQr3OEX_+s>k7Me5ff0C z>6|o^KSj=RB{zUP4VosD9)s+UIoivmHXLz`t4$vn9sKi8o77ls@Oax)WMm2S! zcku9|&u^=Y6fn^IKQ#PUE8MQReuQNNI{!1<{!v7aro}T9y0@+$?QL6RLwE|P7_3BK}|wU5M~XO zzi_tVn?nT<&Wa%vkJv<<3?pbOuJ+UP^pkYaR4RIb=FO+Jcpu-UPT|}U{~mdZDLsrk zEX3*YXAw~7?VP)Tvcpp);}=NYl#t1>%<;V6;p#{~tj@8CJPbz-ly^97dNJd)2@4bd^yK+~dE2QJt$ljepvn;v8EfkPq!D+vRf&?pXvwG z*VDQ)-KxV@yzx)e{bzax76G++K)QNgL<5X+(QIe4+g!=m$!$0fyfyHbTJj^U8FaF* z+B1l1AeCW8n*d*Hko@uf0;L(oE>2yzTf=xZ#36wsS@unvHO7T!ltSx|cL#G)_MWw4j*qLY43MyGinX9$L5Z1@*{$x{(Lkt8+h^c{Hr?H#G43h0R-05t!G;BGI zzrt9$l<8~D_W^wfeqryxuY zpa4o?6lktyD8UdooRd_7idiyft@4CieA~l_ULty%XsP1!K4>$Tov}p%Kj(S&;kmIj zq=A8n4Fiy?<)r01K-ZAfmVtp6Uj-){@TDk+=VFF*9hK`h*(pw{4%`o$AS{KeNzY`p zAE%nqskY?Sk~XQbq^@+TFK#0l-atB~hk1OS6ot12RjgBH==_g<7|rngp=%AgU-Y_o zME@)J)FZ`C!&#UwR9rMBmt3E`E}Ctm;?Td+CjdoH_qyO+{6~gudL*>GKpTb*HhgEb zU&T8MR5{wOMhC#?^am>VOPm_EtT2#_2@NDuU+2^}IVW_FOnr}Y-sc3^MOLsIb&Le@ z{tUaw)Khkm314t3ydt;h0yH7o@m6x;UhW5s0#bJf0giDr{C#&F3DEuGO+nv_b{E`B z?DEiogzo5qsi3;7N{~x&v(P+X0f*NC8#i24gdE|*hUm0T5EvYy*9}xj+|%&1)GLN- zg)4^90ME=F^fl1qp&EM)BDxpG$VRz~rLTwFML@pjTkz!nX)c(7p#b(2xQy7swAAfz zaTjHNg38DRnqPME!uIEaL0mU_Z9xbh!;wgERn7F5s8nJyKtninHp!-Rx?BDm>peA zQ9sjuU^vHtRyW*qxYx{k%m_>d&!w^F)6mxRYFldFjy^|UbRo6yX>}f@+(xPBvG1TO zk$e}!SKg)6^r{DV%xEqg#rM6$W!TBS$6f^|eaz{b_=T@^$?G20<@jilWR@|G#Kj85 zNPfKJ^^%%@pz*F!WT_{+ zeV88tSz3c#;P{89oi;1ik-!-P`b`2*)P~-D1*g6H;MxaYzC9H80H4^x#=rUCTW7~;`VVpvPDIbzQd z7ZB2U5}Ye8V5{>%-WI35#CH(BK=>jdU-%M<&`wQ)Vo~6 zjUC~uBo1B*SBrD4xYvnu4Sbe_ZxX&y_;0FPNxwzB+hH;z&Yj})la6-?4-(s7{K4>+ zl&GIA4;61%=x2Ms5NvE86#Ib01>zKmQ!IA0*fC;D#f}qtRCug74?(ag4$h4U;khwY zlAi>?`}^4UDMHVxhBT!d*G*`a&>VqKk>;u|R^9nR&k4OC^rFy9x-;dMb#3auBJ`@z z8^Ui2y(RRH(7VDPs4YqGy72o#OO#m`^O1NJVm}f3hgdl4E>qnulFsnf+)`7@@kXRd zVqIy~NOBsB2Q^k5lhel_(8}4N<5(f8`~V67a7`tD8Udm57Lxa^`k0~j4!W?9qih6k zE8&``U$0@VSF2mUlBtg5To`%?cM-opyz7N;6Td{9M}!{}|8e2xg_i2+=Pp-HvJ383 zEf`!_A7EW|@h~hv_R`cs3W`oCXh-Roah_5}fe)k?U+Yu0d)Nh;@IImUggz96+N6F% zAMc=tU5-ajcrRZuf_oG(to&w0v|9t)GZl=B&H9crwhRctxq|#M@}8oksZ{nP(Q=~o zs(1TrD-~=bxs>@{j*R5Y$Ds{jJ5QzV&MNjkXWqg7571j_{|vBjs-p*^nvFm-is|wj zir-4!QB^$oX_^u2p=E-}&wf*Ifu6(uCJMf#jBR=_BH7$QhrdVJVnLX#39|*|Hb1B4 zY%aFyFa$=w+FsmC#OWk%XR%j^3t{qA0@ac~NSp!s5V}*vn=alA;d$aM7F*qV&{Hg@ zJd|(rawtHPwU^`V$oW#LOb{-kq2vuh2r)<(NFJc-4KQ-nF;DL_mT24g%1|x5nFu^0 z#BkiEa*q^v1i=jRp3pH5*vL?7{ohI8|GjD64C0w&XPt7)TR=$*^>o!C9oKNZ?sh!{ z!EYtnPF^^xqMCqs>HI?3l@x!y>MXF3^+s^xr#ODr8QgpHy`QlCoW1|R1gqq%eQ=c3 zpeuVqyC4ePemv5ZRt5xUShm)X_(DCa(FGC2>2hjw8ilg)tVWrTIPPxZoZ5m!7`LwE z;TY^{ylYJ+#7E%+2IEjXxT45zaiO5&MaoQ?xaa6>}9%=3tV@Y=J(;%)(u5yCth(>vM~)+ zNnmWzY1>S;H4<%H4VwgSqnfrj*_J@4-WcQx^U{+h7TV0%p5z9-UH z;zA+nwkBe;1WH>#wOwNDR?Klk;|zJNL(sJ?Rd1(JmCM@Gk`C140(~hgsGDahZYq>atgl8Pi#P9?^gsHe|OkOFGAROqkc2@RAJPn9ZY`aY+k~oXvEO zN_8S_*v(PP$GBG9yDgWuyl0fe!rG+Ui?^NWl^yHgFojlnoXQbTkmrVATaC(rygud>4Ao5V7HP zQnF35u}a3{bONooMU)#3{7d$$czH+@fwOmf11|5x|NM$?sU{5)r5?^S-0s>E8)}XF zrpds%azT9=i1)F9EN-YC>9(=7%TV=4H+++rT(UH(sZDe7k&RN_5T+RHOc4=+Sq6cd zJ5BQGaprs~!6id0*p_U2veBU?G!s^ZKEf$5;B=?h=!^qmISzSDIH2g5&9G;4?Hm;nLi`nXzAnpvnRL8JV;q4R z`8RS(;cwUx-o%$ncn64^qr;_S5q~g>FT_$36Vp?w`2~jmNOW$h;DR+=^YrM1-(HOFy1nFk9fv|9k_xGt0t_AK-c0UgZ9r0$4)TfCmT_M5J!ABqXXnU3cqg zVzFKig&|;`cf@0pA)hr?oNx?ySkfzxzFaT=pLTpqv~alS_RUh|EuIx;m5LZaKy!8y|L{J z&$K2s58~Ny!;WMn{=j&*5{;rry27>;If-OqcZ?Go=q1?8{u{=F2W(s2c@=`=H;U?i zMs5{3Mi(VsvCg)jl72rgl$m_3`Knd>l?f?_`IwP6&;zsF8!sM4wvdfxYjF8N0G`az zWp231EeSWd)zFT@uD_P}U^2I);#;W@&ZQU?cTwq&)b?Lg7u?+glpcEQ+e>)j0A4ki zM+4P~k#}QcGg@e*IX_03SbBCG}bI3<=hrINZ176B*)zR<@IcKGeT_a;xOU61m_j9Sg zRx;Mh#T#Ye*YesH8M{?7zLAXYr0ZsRew!TLDUEkY#`kjf4(a?aadF3gk$nf0QHFqc z9~}{Xhq;h%D2DO@wZX{~FJKfz9m>UcdOuL;6>$=v^FbO=KI=sC&Er)8}0a!9@$Tsn3LkTJ5)m5cIcy_}Xnu!&g%NL?-2R*n4XWFbsw!5vAm+2&wb zj7JeGNNk1L=q}IiK>l5n+n;t1pd46?9#A?K_N4J^CFN@jJ4!k&{8|DuiZD+AR#Z#S zsK6sDKs4mT3`GD0M{vo2O0=S-ruIN)h5z)|szIXfNPyA|!3g-J3#fCp-1sj96!Mio z=gyv`@Ca(a*+FiioFg0*`29Lzb2|(*rDvJiMX~*5%aiGqv0l0#g7ho+O zs4pB?uTBNG_!y?#N_@@vngeW0!)dDolJ*96RD!gEvNbAPeGqKs|1H%j{kN)Byo~b< z#=1OgpfE20aRn#=WmXcpJ4NjPdlv5I8kPLsUM||t;IF2C20YM4J(Ha$)eS}m4g5o& zz~aEObW^If1XzL~M+3Z8izl!iQsk z1zZvIp;N>mNCK5O1k5Mwhf#?FuwSYx?g}CtV25vh<(Zj$-!XmuBTWF&kW-h+nuvdh zGutALgtr{x6MY#Ubeo6+bGEwVZ=uvZOq21pQt}@4`G7o4krr0hbUgg{SDAa11VRSX z6bklm{vrPA5O1wx@}4y5eI>V_MDCEtT@vXpCVH`u3kG#(o1=ynE8D4N@v5(g~$AvMOqpJ}}D z;UtNptV4*^^raxGmqZjY)FrU>Zpz(Sa7-KS4F%;OF2xRFHcy78CXvsb#1~^hFd(#8 zd5wCv_Cg#)Bb5ZD<`XFGZlLQZ(~bl|^@=c5Ty_9ZNKxg(y^SE+a@r4Qok zW^jWYQXfQ}@#e~vrtk+-*qweJL{AK+$uE%uHBfiXnZ=76Q90;3QI#Tu3~&ahVGAG& zy&E=GCNq(!J=JQgTT$Cey?J3XV(WvkOjz35sqmUs?Je&V$aV49$A_U>G0jCTrJO-v zL~yW45k)L9VV>|tE6}qg6>{Aqkwl5q)|EGo1pq#RlcBy8G?KXuBnFT|W06ehk|krC zA=f|yFJSb|(1O8V?tKH}J{PjS@EYoV{A?-)JPuouOUU;L;#}~cD((SJP7MF;`;~2I zK{5ofuv8N$;vc5Qk5IvQTKfcbMQa_B34`erJg-`+?AbJC9>vX9*R@=zVh@p5MJV48 zI=Sf_$>LwnQ*#m^X6^`fCaG9ByHcxmb{(l$r93z1YjM9357^OV4$Nvo zO}%$7*@uV#|Ki#{OhBT7@nmsHA1618bw8_AWcLL{DTBGhv&e@b7|?ILVsRXUS2)5E zN8R#s5;>y|2cgAc#VL!$ZF!-^B7DHG3LmZToi~b8;k8)FFRW5$B&eK#)Y%`!0WJK1 z=6PvdI3g(s^MYLKl-DA9TCc8TO!>`g(VJ}?T-E1IJ}x6P0{<{>^oqf2aka6l46iZ4 zT0>tNyG|`4lQtWUUO+hfgxAo9j*9^f=&)@FLdQik57CPWVG*TJ_7#*lgfgF?;&OdM zX)rT(HxT<*a$n5*t7QC6>5X^lxQs!Y(UE*Sw?k+*3<}0l#-rqc{yIsQ1qCR35vFeH zw%yip%Bz0nY2pC&n&;PYb+kjzi+poNcM&J)e-6NYwQfMFv zn^|v~@n)F-Uu&+h3k_^KyhSE}uHi%DEHU(Pm}`UP4fhCl=L-{jWrEG>fyrA9Z&Uwa zxPzjMx_gWtdj6*$HH2*f8a4>B0-_?~QDjRfV+_$~cx0)j(x0M=Y?!xun?aCckfRD) zsXOK3f9Fo=?^Pfdo8>>aQ^MT{rYjD#tD!rk|B?zL zRF?=~{b3~?fa5n=gRX9WhHpY2`w|y^q?_EFN}hwo)=@6OYBKMSDVetO87Y}zex?0d zwr`d`K+BV?lWhG)mOL9YwwdWRJ=4yFiCHunvYPZwl)Cr<^QhMiRNhaMYCoDl&LkD8 zWUQc!^)wLSDG@Gi!Wo(DcHz5vvhBma&f)Zrn3w3@oGZBujw?rb1xcUkQkWpUqGcNE zY1C*dK;TJ%zgPn zxTTF}4-5gk2>3#%gLo0(p^8DHEfFAsG^SG%0ldf((C1^rXr)_3dd11IaR1&lNoO1^ zyWhsQQA;xGOI8DUI9>XM55Oata$OVYnk5GS{x^q1j)@y%io*qc%9AE|2CuoX(@hLe zsoBPxX;536;Bm#Ff#MQoOS$v(y`u%1FlApd!7CavMT@j2gxbY@-S}a}DSgw>+a^8q zU-jQNr5~7N7=V9hXtCi6Gwq{Lg}qPTLGOSmI%2$|#yf6YIIzKK!Gv9_LlGPxN#sXK z0@>)YXu|o_4dAd(F&*`#NXNpZJ27Yj7=!MQzWF`S%_=Ri-a>qeD5@X8x?=U=+Yu#t)0mE2? zA+6(O@?ItHbt-v{oW&G;L<9-EWg5u!2k^YX+!6B&I$jjk=Q&uwc0S8Ows6M&h@F41 z{ipVL-byZ6!`_$d?PB{qTbN+{$lec{Z-UMi!#Kx*nybW4Rp>0C)Hf)oP~E-%A?18T z&PVLykolN>h>w;reZtOi4nAdC!R{*dSF*dBX&t*5^FL?z3uaWAsKXDI&dmfnEY4;9 zB;g+{x`>Z-IW-gDSom>T!v1pI<|B_o&0A8KcEC)SDHmyI)?UZ>2&{WF{tO?%Q`Znt zeT)r`-$cAg#)JRc*{W-HdXv4HylW_cMzv72X+ZRBF@ZtqwP1U$jsWWDI52#GvB%%f z5O>&Zg1Nv2;gF4kS+$Vd!|*Yal#u0EGSN75P26hZ;q||q@_SMl{=!Xa_#fOsJ3$9p zsCNWHRDTU+Z>AzpA2$&^Ol%IgJo0rBr%ria*{ zz@<;|61-M;kM{6|M>&(l15*fuNi3l2*=rjscN)|hu;OhC^7|+qRNJ0S9PHs7_zuBw z=zu=DkOaCAiQut^86fE2BZ=Rj3|w=-(R&zc>~xTtz?q+~cNu>8h1i}CRkCOT0Mggl zeVhFaT(pUu&sFD@5W4JQx&iJ1UOHMS&(-g+;wNM`gC#4;OUQ@ePqNOQFxdckzz5Po z#%1GMm@b-Lb<9$<3e5=&F%K{rpr-;V2Sj-X`9StC&Am-Y?J1%D;)YO>da&WHDq_cAqogOXr#^seq)GI4Yqq98up zET7FjhT?wg4d&j%*uS5X;5`LUv|OdE_Ej!>jqN)O$6Ca4bzIEVmU8Jb?!27oGfu#3 z4v(pg?ETCUlDs-%;RCZ%zz(ei6b0XQsloCXJZIQ{srOf`lCFWuqThppwI`T(wdJ!^ zDFayolwIf@Aj1LkWCPUe#;r>hi}hQnFieYv=~gl3+^IBolCngK=jo$s7pN38@+(=~ ztZa4ahAS*wxq3lFzmKs@Pv zvvd!StRv-^v!GT3S)vAGacO6227!Ii1V|rSZIad)f1OE(=gd}(s5U&v!}IX{mRE@gYG9%y>lzMy6) ze3*AsabdWg%S@0_xJTC!+_CE7Xs3|( zBzZUq0ai?+U>XH8bY%8tQ7}iPm-xoqh2){`fUbF%OEAD*!7e%|bizoYoUE(2&JUS+ z+Z8SJE~mWf^mF>psyPouZ#~>LKu_91MR3&lIW&_8_32^0h~Ofc7!zN+&k zFEO-NqXaxd9>cYToQRh7iW{gj6xX0b4i-}R8k)ORsibQAhG){%{?;~O%HVZFc@~fs zC|^KeC}N(+9=gQnBZ~JF=lK$fzlZz>u<~P`!afSLkO%HchT3k-iwMvU8A_!isQ60>J^=q&-Gp+X z!bp>P-@$oa4cy|62}S>a-*NEbBltt~SM)#ek!2w1$*6sZ@ROqJ)LhQ~gWv)IVBfyM z?seqmY3an(7>*tQKR6olkNC|uAS)2S*PzPycsFq)@R#ush_Hkl{9pV6#dH}JW802D zM?&g8{(v=T3?IfHPOqy#jX)GyqLkH_n;MAgNe`6uHh4JMj^LnJ-)s2L!Z{7w1P7of zUIb8FAgYB@7%vC(YH-x{_}6d=6OBIJM<4n`3FlUzW zpI5Naoog@>y7P_uqH$l=&|!CxabMLFAoWe-zHNNWfbS~Mf%n>07`x2)%N6l(S7;=M zyUI8?uGbp(i?ECM+W1?I5BPD%Nd(f}WjtU?KNv*IQ3yo>TyjyuAfrB_ndT7iy5Kj} zp<>`;fTY4>CkaOG0DFO7^`-Lg2(sx4j+I=+xN$i+BEreb!{mjrD^P}f>2sWmW2#cg zigpig!Y&SsL@b_gJu}tOD;^CnPRmK4Ut+lRE~J=iHG?B~lH)U_`~ws0(O1$389ubr3@)b}9J46CYsg(o zF8U>?jk>d6tb4uEcrXfV0w$_7>rOUq2ilm#dD{h2=vH`l&~A;Tf~JZdxQNmDSm+bo zWiLj`c6Ajw@(YF{fK|zlL5o6hiR2`ZUjw#^${uvvo8cXdecDJYh?K^uM@}yq{dcND zfj}ZjBX+jKPm;G=f#=ezNdimB%33E`4Xd){SsZ#Bp!v1y>za9~W_W$mJI%~#Xy!C9 zz3Z8rbknVoxi-UaV>8b)^D<5Erlxn6K``jN=H|j?=BXy;gR@NUb4)=iGyH7RyQT4R zpnfv*&NZcNP11R0-ucF9XZp1<^IDkRW6e8{nBXz9{87^zIicfB74#9$n2ys-@T>`@ z8(VHppVQnNfEcNBP5C^teZGQ+2%K&7k|7{qFPr*{Od+`RKy2PJ z^oFr-nw)n|79&0qVmLxrgJMi1Aei-3p2_bHpUwxx&8r&YOB;nRg! zaP%bqdP*-;TkItd(3S`3!+?&Aq>B6LgCcsTm@X}$_M@o#Lo|5|eOXHPjix@YP~1Yz z`Cau1Ih&~Z7P^1ClAMqHtUv@`#KlA#j&q(|2LV@ z+q}p5Z*bN7VO%W0D2ytarf_X&*<=l+nij}ov< z;Eb(Z#FqjGj8(v;zmS*L$_Xq%_R0tQW#>Mr2aIUz_Q7hO7RW3i6;z*GUt0;Y=j2(LEUkCF7$ zLh=Da9e~Sd2rHrG8>pLouRj;=;RB#ewgsmh>_Ivyt3ii`=DEyd0Ed~YDA`Hv4A8Jp z6I2u;V1#`-ltE*OUZlb^#X-A&QwDYIa!MIAm^(-FfS{=X{rC)_P(>&d$_<4=FQ5kP z=kZ55(FoW(@qn13NYPPvqv@&+jeXEu;sAIOVY5&kPbGzYg*K)R5IN3$4#gCVKCNG6;Q|6J0``VvLywWw1V`4B{|lY!G)>I84|}B_ z*GJd)Eg^dq>-AZGjSq_y-IZvpyW<6yqPLV3C1N3MPsXi-!S4if(P{hZf7v{H!$+Zo^k_2Q{m49^_n_9#oJDQW_+Gn6tf>wD#hSAAI!KW z?mA*nI8LwRW}_VAlIrIdjDi1v)d0KTJHdwpL(mEe(ujv~pT85us}CXAWxxqJikHHs3U8rya76N^r+%s>x7R0)95R1Kk@HSF#=#TywQ1R1tB2X ztzNPY#&dkm8sY^2tI56s8VPF~1H`Ez*_(A~4u3Ozb&6MGlb9RXzk&VRDf<;QRW2LG zsW_TGrPQZP3>d%1)kP;IQJFA4xV~sSl8hJi-K}Rl&+tW%Y#4+;V!^7S0~{Ui8h^2F zpsqsF*)g3^khPtera{|Y1F9&b05~mvI)GaJh%h5yzl>9E90e07eWLoYUp?qz1vE&lh@FCy8>=-XVMWq}JRFkeQ!WZ+R80xfHk5{FB2@tuA(RR=;^r`y>IRyB zE5+PNHd-%GL&sAg%4oD|pqRc-&c~{td1WOPtX64!9&nO%8h4npmgoyrhuJSF8);VS zmA$6=)9*DJ*g}O`Ns--@2cqD9;)5Ds%@Cy`>k2|n)Zz&HSe>9EL(ZAbK?W0cg&1{F zpdna5jYfIu#coe_5oiKNO&?~EYHkj*vF>I!%AC1}J4GuO4B}A7?^Oj&>it|3RSY#9 zg=|cipEW^^B40sepT@gF0c-_IJWAWkx@ttXAKAwCTQ0}hh)Q=*PskTeX-E^JrJv*% z5Tat_Nk=+j!xHTT`bkM&$-Gli?vRqZq@=&3pe7=XE3}?_5x@f=T6 zr`^U%AzoHsE{#rPQ_K^mhqBow8NkadlYe?HJ2jNKXAEWTsiCYY9LlObG*uPmvQtA@ zn-w~g)x=P?`nS2P;|7BqNyT{oJevJ%mYgx2b*R+UzfNa|%u)6 zdbg!~*Hjbk*=rTqt-m>ip5-jYn+MXJ^cuk_5aw?lnnV^WwrrE&m zAYOZuJREmuZ$2RZQ!4xwF-C+i11E_qYjH+8*J{d5&g1tw@EcvY>Pn{Gil5+kgdY6L zVeH+*?!Ah}$K0pPb7wl!^SX7-{D}RJIev-yzq!lV!rCI72N&+)FZOcMe!i4seT>A% z3b671juh3=joa<3rF^Zd*(iH{l$(E%%%f`T09=}|iN@Fk#$y9}Wp!DbAn$x)>`m-% zXBamvttM9`OE;)#U=5TaMYUz^X~(4c@@ON8Zy*Krw6jX_ba4;B-)pLtgF$#o*r|pd zH;i5F3}a_0N5y+V+d>-xj~3*gSBzbx6d=%|FvwVtTEUEZ&$tzO#;Q@qrzkGQS$UGj z!fOq~A{!{>Cbh+O!S{eJ^*iH2pSa67-y8db=9~LaiGn$K5Y8TkkxB`D$YEpQpar8* zoI-U7hqg^ayda%)$MuNQbtz!m(DcyW!RDT_ceqXCSyNX~wUtzD6@BzMC4Wh^*Hgv@ zYQ2$4x04SkVjccIjdOac+W_OxzDm(B2QSXwLRk}*Ba4{88{GUS7kX^pU_=kcC&1>Q zKwy(nsZ{wm&;q<5!rR$8@kw26Y_1Ojz!;pwt}7 z#75>;@^EespbtPM2UhtoRg9&iiAqL|d7p~b{*G84iORvCE#P^Z&Si8`Us9yYWjjSn;wgGYS@UPhpC4AUxGZt*3jjC3>vM;wC<>C zX7S^XtR;8XlcyR;4uC&&aX^+{Hh4I_9R@kYi*c|BBBXz7%x;QeK4EXx^Nijs$)ki* zy;(&TJ=v7TH>2~isqh?<7BuoK>fMs2ZxVk>DeI^-tbGv1x(IOGt&*7l_ZmFjh!P-Y!tuBjr<~6|P^Mwrc?bi3L}6m= zjvrwgUYvwV@nCneTe|F517Y1^9g*NDqE*xbM|}x!>8hk7%oUMh0Q3ns47%Lo{AlP( ziY=i7{_P9}asi{k>mJwdb7tdGs zn4)bI|08iNm9Sk55`Op4BW0)>bB!Ir!%<0J5AjTB8~5|YYxP)bUCX-Yc7PLNEKT9a zasD<67)H^;#L#7{mIl`r!R`sLAvB)NAqlrJWU@;Q65$m^oT45kr-4KitlxmdQw1yO zbio1|a~epDqKN+)Lj20K`L9aV8FdPTM%1Zxc$|JUIU$Oej3RZyjK+E;N%{Pm^Z^~> z`P9EPoz<2eYflMC{kWW(_n>CT{^&{R0CsMmyZeO+AoGc^1$dbWVxm^(#M-xea zREI-oIYLQL<~Fj6XcAPn-CSPDV=yrpiBxf80hA%2VfTs=UM+uJD+xQrha4u9W*6b% z1iBAsJ_2;!)`+(WQAu)=bx*01M^~4e+h`P^PDouEN~3yG(pGZ!bAVytW*r~!@Ngf) z<;H^(;~LXtlfkwfa(=G{xd=ChsOJu~EbB6g+U%f?F_2I(PhfhN19)nE!R6lr&%xOu zgw^>M;;$E2z~TG^@8sRvX?KnPNz6(&+R~M3UP_y<2uQIi3Qfw2Nd9HHcw_ZfWU8(t%RD3h_xRE;DM)pps z9jMu6^FZ{ym#x%NS>eaamRTN3P~ z;0qBe67NX4D<|p*w9JrTT)I-4N9{VlmlnUsuu6Fe1c1F#wqME)Na;SAcv#*&C>2NK z@FD4PR2CfbGrAoT~!ABy+c4}Z3SC{J&wP;{^%ASy+A5gWZDsyz~9vKi6Dyjb4c1oV}lCt-DepmK~H5{z8z> zLPb-rF?-=^46Bj3kPziG*l-4!#{OJ(7cwfwV&5>Tx0684pt2A#x#97P^l6ZTWkX?O zl#+R&{$xHxKH`0E!8@JyhGtd#i7*Kq)EpECgu!1nEP>7g0#nZDi4%a-t7Me{)=>y) zK|LoY!>Li<=~UaP`L^^#%zItwS4W2GQP#VZ zfH;(ojdaU~-XM-$+-r?E+L-4z;i?!3a=G8x6n8|p-(>U_3`E`p?*0t_=~EsF5k7L- zf96N)$xro7X>Zx=_eeKnvk$Q;F>RzQ0WtcKy@Tm^%MOYUp+f60KIk&#R_gew?Nr;U z=BQ3lnT(M}JFiy`U3m6>5<1{_s*9sJ7XABT9X1WQoF z3937fp}Yx~$kT=(S%5#R5YtI86wNV;Cl=~dVF`gk71~sRLUj?L6B)FQ>73s(pNI=F z>U-pthH`PtQJ<2)3h^a5kYRsCyvk-yEJW}`@CJJ}pdNQO(!%Xz`T3!$A7CbOd*nxw zU&z~IhBDiUuo)dQog|DB5dA_#4OoU7vScwx0T1vp6m(5PGWs&MdZ~8&Ra?Ht=d$*E zDu-+5a^KGEbzr9x`e(Teqkca-$^gFcKz8nB=RS7s=jd>D0`?2od4!!pb{=GYz^p6I z7^^G<_#Yd~!6bI3u`|VVFAzCHf)$&^&TN}(WAoUVYklkTiUsutZ(HtxyvL9}n(GHz zM5qydF?+bpx4&@?M%+_8?lkAb3((q;?(eQ}bc#t#+BFcbkz_TNuFXXtiHCd(BZ@B# z+sk+qUELk}G6H!L>842dDUjzznn!pqimqmel!*JhAQZ)c0vv)CfHR2VdBd9ZFqs56 zJP(U^B#h<3qqSdd033J11laCraesrRNdA4*?h(Xll2{kW0Bky*(P+ zZ;x4GSe^wGsupyxb(}2VGtbf%lwnoX{PPIe$dy(QbbVJn#&PpF2PRgCfgyw|1N$mL zH3=>gKUaco_P%d_MBFE&c%hX1O`OG&9=;A`A4}aU!cVKX6jl93(diZ1d5_DWc-yUJtT zBr!)gPc8tyG04Ori5UC>$qqfCeM?QO4#Ww8qI}Y3btg`f6SV74duzN2lz@U8h~f8= z3&|xh{ zMQ>UINo*u(O{5svv#lisj{$`4h(Uv6v@*s|ZHI=71U;T)xxQ7PBdVf>DcT5oM=cAp zf;bb3J^*FdAKz+|QGSb9O*g5ey=qK);VbKtXn>~0-lY?dGV4KCrEw>98EXL?nDEW}?z-#%0xD#vvLAePmSDi4& zo{fcEEcbpS%a%(T)O24-47ma8BmzGsQj!oCd00+kPB>~cg3ug3cu1lLq&1}P$EEB< z==Kd$P#_$-C|+SXKPj4&Xe|t0W$oWWlX~jC`4-p4h--U4%q}ZW-TcNHx68JeGy+8` zUbu!^Vl7z+=aQ3F8scCXM}S+3Q&7!8hhka{r`MTw12iem$~4hwY$B)MECHS|JYZ0j zkFo4%7mm5|G#h{$*l6&C;CX1x(#Fz^J%~v0)tB2>ajJ*e(a8A9y^nM6=YGREH{je6 zJhp&yAK{w{Irl+6_y9L8;;O}*JBHIoar#r-4`|O=E}q1>(>QkuCr{u?lliGU&D=b>gDjr?lZ3IEzcpmUDlv{3}mc}!s5RbtNa(nqR@U|2JZpBysjkw>-8)vP!C#2{%BU0?! zY^;p$5doen)Z3zd_?69oh#lWonFS|t3$vP{sqh(;gHM(P(0n!iV z5<@`pH-kM39X3pRHhZ{CfkpgkamPbVa@3p`Tx{9jSJ$W zfn7kl{)(dWdX9(S{rZ;NUK72&<>kEXCFzu;J%=!40EUu&xwPy7Vh%C`3n(s4vDh&y zal;D;ruZ2f2<;sNeEq{YT^oSH&K~J!0cz;zaGsw%%<-N=V1Py*#2YrV%C^*2+!BG+ z;cMIMO74u;w(su+95>v=*WJu6SWz6;|DlDa*ovf`QU6;74=CU{Ec2{53ADQ(zNBc6 zvV;9oj(o{)ui#@VZ5^w;>VIhTKuYB9uy6+i++I#P%v@eeQU1*Uc9;BwI4D-IDpi1r1<4;@eG;zyyTZi{+w{$2q(7`6fTs% zyoc?$hL3L|?5hW*E9!C%$ua;4#|2eZ_C`l^>6w>02`}}RnuSGgrDm(_ z)+SBdtXbPMYp3RI)WTg_xLdPuV*j97J2Y>PX5kRnuboe71<3ByN^sJV8W;y~3ci&y zZEH20!Pp}(+C^2-cJWMDZ*i7+KexRC15%IwSYQDP29RdNNye5PHa!V!eaNfFON566 z&jv7L!1CdF4u*Q_03I{QV%ggNYo*2W>?|_Dl6-96DO54zcK@;1B0W4;k&1~^6r?=r z67CD5jDaLWsW?K?9{*$7JQAm|c7f18DbcfoF`zuqA2>O~V^hlaXpkU?o5ryT(@;5K zjS$@%B@OPM$^s2GVr?vg2v18y0vz?{<_O_U-z#50vQpWWwE)x!QVJ2#gK(a;u#9nM zM9_f#xQ$B@i8I!Yg%9 zLi&vm?}9M*qdZIl=@}sCFJ>S45?Esg!+Am7f24dMHaI+yb%3A-q%cjY#j^=JJb91N~su_|D zoMw`NczHl2*H|oG5XNsxZvhn!n=lNp-h-0(h{%VM^RdOP$Np|@Q?o5Iu7d^|N8N6n#upG37LQ^hH? zWIDAt+oe)Mr{_|YS=4+sZJ$GH=h2=Q>4lf5#e8bMfXZGWT}b!7O3h!RrLWWQH>mj{ z8u1ru{#QzPlX|^PX@8?OZ&CBbwDw&(|26`8@E5OKPBp^#pkZiZ`I2s5L6>|* zHC7s#p1hhaLN4w%^x3zRwwBs$ptavq^NqB3Gp*c0x{U^Ir%QHF^PO}GEiFG$qaWy( z-8B4H8u=ro{6g*b(D41Fd#U*Wx(k^3A*vaY?6)7M<|nB6NosM5GB9I6Np)PJC*=Od zynGPg0!hiz!aJxTzOA+e~WIM3xaS}=xCi{x{d zevg-QC1>Gx#zuoBlal8w?NK%^mdtq_uzZMoZ7Cqn4KW=Zr74Hs#76@IpK`qBmb%MH1kY?>C z<`+QBX#)q_fnb0{Z#4!;Opo})Q0t5vAF(hfSH-B7B(*LSA4lp)>%R0qlGm0=@?Hzh z{RiBEq7cAkIG~QJhX@OdPp2%B&Wd+Y7xM3_&z;OL=Na2;62X}sgOt57S6v0d8o#YN z_?!DQ?FjVMMiF9Tbz%Mr)8X8oxaH5>>_-N?@ZLb_JXBf^k-X_(w)JF^uHR_!Xt}qV zNW<&N?n&nFq(Xw`!_kASJVoEZz==R7$XCMTmW(h53FbkBw_FDyE7o(|rw!EsKZuwS z?90t;afV~aVn6fP#g%%ErP@Y%BNl@LJjqyr7jovWEc@6yj3fkhAuHO?9x63YvyZ7J z3~}uM^a)Kv(D)6P9DJA~BmtufV2ZFY)&ss2&LrFc z?ilSz$sHx{3JGoyzpo_RDv|poRw$3*y1^X{{{0zg_L8K%BHjm5Ynd%60cLw(Sup*D zQ#9fxK8b1(MrercV6CdE7p7|0>ZTp)9)9=`lfdL?Vv>M(f}M(ho8XjTK-|x9&bL-=oa+{H&Zx2=W8a*hb*z=xz3KEnf{paNFe3)H;`7ppp#SfV?i?8-;&XFx>BxZh0r z0@@n#PH5pEMTS(5hvOCH7*>);muO%0r=>3+7!ma22Of0 zB_E^Y#uhfa^kVaj#5d#k7TlmE=d|MZZk%;5H@=S>59IXwxzTWL9Pk?j-1rf`w2&J= z$e%sHpP?$Tm>ZAbb&qq8Q9Nlhzl>bju~x*EG>IEO%MVWD##8vq$=vH1et9~-Jc}F8 z=3e1S{_;F-JeO~MnWwzMjUlIm3a*Luz*b!^$=d}=T^PH7nlEDgFrvS?`tzzV$7a2; zY^htcaFeF&)^$KN(b*l2NuM584>}fn1sKVoV8Ke2;RHUXoUkk2uJ!!}qApvjFk*wu z9eNT&kvNyj+i_YKPs>^9QQfetEu3}nae-XO!>l{TqCz0lgk&hd_SAw)%af}ypWwwD z$r%%j6RG#dG|}>`_36KHP)QiiIjY{F>+5TC8l(}}ED&fP#UlKW3>_}X(3yOI77$ZM zm+hC_12PFqB_cgB)}FAHp)%_um_uBx6R*&Y$6EbghP3b13l3=6ejR>Dj~&#LM|AB` z#dMT(LQkF4w@>K@$F$XN`hJ<-1X((=Jwx(EV2>()k`r`4rv2w=*3Bt>u$N=;eS&*{2O`Rebx`vjf_O=*1G0A87r|+JL+lJH*};{;LSI2Zv-Vq?M~pTb>RA z2;=2mN^Wk7eVD&wJPR&I%!&{pf69ehO|cN$EU{e@+a$3q;=mHST@bJk`xz{R!(ABq zJof{h`73AO$Qoq-Ama6K+WUKrmI6AROE3yxOAPnK@+I-_G5sbG! z%tT@I7TQ07@WMV1jVVqu$Cv%d721_PcZPHD+jn zkR$IVQ@;SOHUI=MZct5tih96AQ@n^fzsUg>fyJEiHn)3+^WNijOS#<=E?LG&A9A~o zx%e|qU(Ur}vJ)bZB_W;K`CIM^;BmX%K~cbu=U|VCzx@tB7M$k4$4fyRq69=L%J^~| zvXdyJ-CaTwHqX#VAK?$z$(CNiC@;8CxR0GYvHk{2MnGGf151`*T7Jyb!qEv58E3saCiQhob|usB;Ymha6W!SVkczTAEC~6pK8jN8UXEFslh5m zfCljD0I2m^4bF5Bz?aSC9R#~I_~A?k!CuWjU?+Tew^4AyC}zdzOAeSI5X~qhnFYKw z!x;>mZ8^7J#VNx``f(z#i@!p-EqYL@9ui>b2v|V%jD+Et!PQ)=D>uA~KkmkLu)2cg zfQ}UZr+k?Ot%*(c>>3N|^A)}d@xo`;UN1#s4{{1ZJO)bIC<$OT*`WSL&DgD5_vqH@ z=7a(a;`EhccgRfmE^Crk&Hg421qz{+zSInet5>SGO5HW;tyXWXdh4~<2JNz0J;V-d zQ*WpJh88opTM?}1?NEP@d4ix6Lf8oY_s1_ay28w8z;!baNP=T$t;Vg_rkm_mb+)Oq zQxi7ou3g%0i|+eDo!#o}(1h@M#RmnI5pqlLemS7g&%9!(|N4qmgXrBj%7hJi3R;eM z%<8iFupGZrz^c19v7C^N>(v)UA_PJY0>By=n9E0H%*khlWJG*G+YcFkfHh&QDGbvP zK{MQ@SiQKzXKY=2!U@Lj|%Eg?VqiqOLMG(Jc6*VMO^qM$Gydg@T9EZ zndd8)cLyNW=2`lovhdAv%T_53vDxELuq2tg-$X1`G&j_-Tu@ctI#T7tPt<@|cQ z2p?B-t`CU|X4SyX)VC-*zU&A#wkQWZ(n@4aVD7ME~pWw(ej(y3A zD>yOa(cpBbw8l)hU`FH{4!$#59CsyjJ|%lO3(CoO1eS^yCtgKsFdtdfnit@{gk85k zgfW+i*Iq_+kc?d6&N39+R!EuMb*+^2l$zH`i(Yb9Z@KG6xvP)d)n9^JCAeMA!_hQQ zMnFX~L`Dw_sgrvxHUy@IlEB(gpDi>|UyowbCgskM>=OCqc`2P~3uFF%i$jND9M4AN zkem*+G~ZU!ewDRfzNQwO!-B2SmS1ZG6xfft57HXUgrU0Tg+HomP8`+S&IoKyp47jc zQfSHXP(fYu4QR45?eY9mMmY_$gYFSM!tD|L&v@DNe-_a)6_paiy+xg39 z`RH?87Rn|Yf6HZ=Qr1Yy8q0`Q#wnK-$z`MDlBcC?y6}hc`ls^1*HUMlv^Xjchp|_m z9G6HnJ-$^p!-jKM2cJ?|!doe;KV{uUg|}1I0BUy! zCEP_>gQ)OsDjZBD_tLm~C~qj`^`opI?DeF&!-b>&V?3i_!VOj+Ih-W_Bou6sR*8+%cZGkGW%eXwOudtVe)x@sn*bVIc ziR;177(V=;53s$=T#ZwC&GWn&93t|lr}5j9IrllvD`9UYFPy<+UgU+dI0lmI1-@<` zm(ArSuX0zA&Y$v~h`@sjavQhb44<0SRF%LHxzj`=W{OP2{$=zrCNsZ*Wl~+=RJOE~ zcrb>orG6WE=d54yE{P77E<-FSw<^4oL&bT}9Qwl^G2S5+mjzVlkD0&#GJ_bbl+#3> zHQh)IS97_ia;bP9Te5-tT^6iFXr5Vn(#u_z2c#ih2Y4-kiX&V?^bXeicpZa6mY6oF zrqBGB?#u1^=dJ36*Tk!vwE9kUH|nTeTKuEt{-Eyw9N1!5Q|h`hegT!6DQ?zp~& zz4(MV3znYL&Nx(0>!#nd5QlI*Co#jxsqeg3+j*hf+KK1(BiOjk1V`7<=c+5Rqy5^7 zyFlve4?s)sWCAUjVwrpHT2mh(f&Y{6D8sDfyv;s*Tko;Il>H^_eaQX>41WK=*8b*L zP$BZH$_C22gJp1$R0ZUYc?kxq=OrkybS8hFoj+hdQHz7AyYnG%-P!`F*XOG=)%XiE zqnXCH&`Ot^HcZ;8;45gaP6w@zoYU}f0MAJPPP z%txs6sJbIH_5`AsRVFAyR5nxH*~+uj``9Yj_;Zc>!k`JvFqMxO?pF-ZSR6Og8C)K| z-ACPz7(sT3Ew$JXWV4Lnmlt!++x*%)obWy;zsHZ1@+C|8(IuSxA^%cE8073>$vP&v zM&IeUm(clrpu>XV-qqK*) zN2q55V%82{`g7u(l8%l>;}Bx0MHMu@qJDzJ>10hoM9F!&Emf1NTIWK$>e{20me$mR zb@lq%dT*L`@U(e7{V-jh$xuZYa+X$zIEXYUU8gQYvyHSa(-@(-4yDIYZal?DD9NQ- z2{bWEvnx=~M59zTuI%#P}WscwJUXpE%Z8yTuXj0lItnxX#s%z zC*m8)xru__#C?eKiEk#iFFChTa0|uyQ_z@Z-$w2La_%7iPIB*}U=X=?lRKE?9^#?I z{U{hh!Tlt|$bX1}2Pk-uf=9?5P8`sfQItNC+7(jwA{zWS%^pqNi)r>#6nm0pkD*%6 z(6~t!3+%(fJdM2P$(up`Op47VcOjL*s_>SDPWwwJ8~fcd3V@S*PW~4pa93f)TSfkA z^1mkcTU+t`wS?9`?|Um0Xop2_3&}Q$Z6$A~)sEY`_p2GDaoPua$RcVH--KNcn0EsE z6&X5tHzh1;ugBRLd`GA)l*X2E%}o&V!kwG45A8j$tV>MLHL5vRZ^;!}@iUil>E-6V z!f2F`!}Hs7kjo`kaO`TUA-m`*{!3R*&Ewo_IH4Ci*O?Nm=z0!rWVwN*H+!IXhH&Zt z&Kzn=280E@e=k2a%<7h2ew6PV!B+-6XgF_vgl{b1Q-%B{^aCTg*<+meILkQBeUdkf zVlC!LPg!vBePj5wC%DU4e)Va-V=BT%c=04&GKF;-w+B7?9B-b?b*FRR62?C8#SE_Z zB3GKlK5D*S;5D;(;(V?%hfmM7u(GBLI2&PQf3ZMXKnLHw!P#%I1!^tj+z&anjIaH~ z%<@ydum+r9IbZv^mEa&-19Nqgb?k5B=ypyEG5^vnT(E-^cd@gROMXGTxoKds_Ho8> zmSY?oW-Oi9C%};UEKom!AZQtrhSg+#RVl7+`5RzT{Y-hXfk?V^$&gA}(z}sVY9hNY zwivOIEsU*0?m_idQtJ}w;!F2-QmKu#Yr)6iT_MFCjh89Ok;3lc!?bvZWf<~c$rvh# zhR(WIW(||ze&Gj=mxtZedB}1GqK`_wQIcFJSD-^Dkdz`D6lWF4XCvi`Vu_3vAM(7X z#D7Lgrdd#J_VW@q&jQ5!*JQyW>G2nt{iZwxUGZP#>vtu#L?*m1ot8?gQnN!ovP?#Q zB1e}?>(6B6=ThTS(Jy4mmoj&Syz`YzSS3HLlnJZl(ywLrxAMwb+i^*_xNnz4E%jB}t!tt8V+9;xx#Dw1;C+e(f+P|`1@g@A}I(Cg-_pP@5 zTHAf6wZ5^XuMErYdL6Mr%f8pL?dol{T{wHE=0oSX$#k9#cIdbt4HWIX+o0gxzo@fE z3lAtl^|9de2=9W}5&Z}->1mx0X<~?!J_SW$H7B8#GZw5(4X0-v$E)iUdrnEZGq#>H zGQ$~D-?^it%QgPeGn=U>_k9@56ezqN)cVRTJu|SFhWe7c)0}MiGQB@&?gTi z2kcUvuoDDXk(1!e!k=2eio!2u61$4{l@b8{1=5aE^+nPe`A+-nbNeg=Y;&;-BPnHz zw%n(&^R#GyY#u6wm|n2RhtUUxwKXeEA5EfKA#fdJN?}V28+2CzC^J|90vi;%f%inb zKn?_=h4yv$Uu!9-B5dVjD88BlzNStUExU}ay_6QTp>HlH-=}Na(zWgAg&bPYk*@7P z*XGi-?TI^4_baGhXIjt&U5B(_F_pbTW$#hyyOjSv_5FZGhi>8xrzsVFT_fK0;@==aU(wsldMWqI zFNJcnKxPz+j24+F#SkJwf{1{)1>!7`vJYhIV(DBeZFb7sZL(my^xGk8_ex8c6w!YK zt4Ig+hO1LPbp+}bgcYgFN%Fzy{^q7g9)X+h*#oHA%2p z>>&D-way~DHA*@|Mhqw23KtpC8HP zBb`}0aHJDo){!sk!s*>P9T{bP*zacuVeUp6Ef7en%NfQzwroZ_U@Cf;8bFG(or>m=ztCHEFd?=SwXhWn-8 zXHgHuP|-Xtxf3M!X?c2v6wj2q=S$M-lDW5A}#x6M%I9=)ha{AEw+@Tz@s6{}U*HKY|+}nt@XF z-=U0a&;I3+P> zQL?iPGR}B@5@ILtUr9P4OeqNJ=9bMWbjd4ce;TUIQFc;SS~X(jZ@xhp0bDy+@HDtUS{;BX@!FQuRJpXQet{ z>0_{VZqd9SH0dX;eArabxGdb?Os;>$DNTm5tD=48T+iA`mZBB3k|rToshlwhVHQ5a zn`EEMo1BueI8Ccytm2w2Pm&af&uXIK?9L4Z~9&af&uN2t-iV^zih^*sam{%2MNm+U{YDor^4TuKG9 zE=VkZgSF!!ow(Z>VkLHs&D&mYJ2~;%dNC~D0+DP_OOhSO431~sUbsm56Sh^D%Fd%Si2 z`js{RQw!HB#>KHx$E?zNYqWT^7Js8fYjx}IeIlp82XUUJ;dHI8Pt{efsf!@GNK>w-wbJ#M2F{FYD0qg7 zmy!F$nauEYl(Wg0bW08gtrCGvi96TgIHcrV%o)vjdrMAj%|C~$>)P-S;`X)a!nun( z4dGEkxo9w#J{Z=@BVZhXFdu|t5|q;GID0FX>@cef|HzZT7D5c02=%TcRFKrDq=qJ@ ztEU>E(pdqQ^QT5ZzSj=!2sbq#JycQ50aaQ z$jPCSH%$6IAe|nRxd@?sL>4?OH;$3mla^RMajbNCLZJVAVw(7~Bz?9-OC)=y%%3j# zbERmGT>64|e-Y%w>S9S)YPv@^6n#DUg_Nw9=zhsVpzdj8=4)y-%hUx0R=Pp;dv!J` zvhtE(v%~qNdd|u;C#SZvD$_}7jksk{Y7(Dg?LxsM@e!O- zB0k7*+_IvjmDLCl^xS2Nw72yk4>G(hrk;(#b_yPb*;82%OnVHIRPRjPa9um)gPDxty{YV)O9R2-U}S0E^;APFu(Buk8I` zp=3wnWvq*5~v)NLcjyU4N} zsdbI~c!xZ3mjw67oA*odK*<^}7hqYQX$jl;-%ArPZhNH&(BDz%59n{d0hpB>2a?qv548v=_4SYphtL(I;6(O|>>bMG_H(Jpw79^z+1+tG@G zKiH0v{)6pks^x^2JCB}*^XNHlT5dj?!Abwte>9(q7jlc2x$G6rU2Hju>F;oHh_a@a zGB4%yC8iBXN50AiKE8>|@XhYvvUnrbKp{VdLp;_Q=(d*!dNq#=3xh`fGGK07FdVY}srCuHw&iHp~Qh$25Q z)>hs28tb6W)fxk)-OB=^{UPX7HQ+inS-qL+%~DyQ-cofwRo$ZbIGOk9R|oXFy=GAT z`(bT%NKYKp4M%kDQB4Tdo?A|8=_&1ST9+Nuw|>(#WqP+b;yMvLZ&jU(!bc8~Q+nok z!|VS(p0}Dj0EThAahFT_osxF5_}_^


|MLuG1$=HfL3?*KZusFQdg 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
XgNZ;Dx)RBTD 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
tMMeJ4LubW3ZH2ITWPfTH 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�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�?-FD`)*U1W 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%0DP_`exglA{tR;z#IKkpvJPn7TH+$(&HRP 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 literal 0 HcmV?d00001 diff --git a/.vs/retos-programacion-2023/FileContentIndex/69476c95-e08b-4cb8-87f3-06422adbea99.vsidx b/.vs/retos-programacion-2023/FileContentIndex/69476c95-e08b-4cb8-87f3-06422adbea99.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..ed5828510000deb784e2706f3945c19271dab5f2 GIT binary patch literal 2282259 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%0A{?85F7ccJTEa#Zpyg=MZxRkt^bUY1r^_G= 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

e%X1|{i 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 Zr0U^}LJ^624O+2g~x7AsF?mYrfk-46q3rdOFU zoi}m<7U~7YV?76m{X0dcC;bI8`mo#7Z^EOnwp!9$LiDag?}*@_-(%2P+0Jqw8v{f8 zB)VT}^;MXJb-hCdgae6Ttt&xt1h&q7&flvL0(#ChyyO-mk0{pmmQRSfQ`$`tr21%( zyA9WpdxFu34DLw{_@mc!ITF}^AIWGA7EIIGmv_HPw57O&KWBvB549EUkw%!T!2o+OB!?$!!J z$-~n8C(-)qr$U|VcF2y=+3#hg+;-W+PAs$gU1kfACO@YAg+k~FpoV~ad53T@#sh|T zt!C>H^5wZYFfPm8≶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

=OAhfR9#;<4m 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