From 8f38ae5c8bb4ab96858d1287136fffd9cabac09c Mon Sep 17 00:00:00 2001 From: VolumiDev Date: Thu, 4 Jul 2024 18:13:02 +0200 Subject: [PATCH 01/24] Ejercicio 03. Falta implementar la agenda --- .../javascript/VolumiDev.js | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js new file mode 100644 index 0000000000..367afded94 --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js @@ -0,0 +1,61 @@ +/** + * Tipos de estructuras de datos: + * ➡️ Objetos + * ➡️ Arreglos (array) + * ➡️ Mapas (map) + * ➡️ Conjuntos (set) + */ + +// Objetos, podemos almacenar en los atributos distinto tipos de datos primitivos + var persona1 = { + nombre: 'Diego', + edad: 34, + grado: 'DAM' + } + + // Podemos acceder a cada uno de los atributos del objeto de la siguiente manera + console.log('Atributo nombre de persona1', persona1.nombre) + console.log('Atributo edad de persona1', persona1.edad) + console.log('Atributo grado de persona 1', persona1.grado) + console.log('Aqui vemos el objeto completo', persona1) + +// Arrays, coleccion de datos, pueden ser de destintos tipos +var array1 = ['hola', 23, true, 'datos variables'] +console.log('Mostramos el array completo', array1) +console.log('Accedemos a la segunda posicion del array desde el indice.', array1[1]) + +// Mapas +var mapa = new Map() + // ➕ agregacion de elementos al mapa +mapa.set('edad', 35) +mapa.set('nombre', 'Diego') +mapa.set(25, 'piso') +mapa.set(true, 'estudios') +console.log(mapa) + + // ➡️ accedemos al valor por su key. +console.log(mapa.get('edad')) +console.log(mapa.get('nombre')) +console.log(mapa.get(25)) +console.log(mapa.get(true)) + // ➡️ comprobar si una clave existe + console.log('Comprobamos que existe la clave "edad"', mapa.has('edad')) + // ➖ Elimiar un elemento por su key + console.log(mapa) + mapa.delete('nombre') + console.log(mapa) + +// Conjuntos set + var conjunto = new Set(['Diego', 'Laura', 'Eren', 'Laia', 'Diego']) + console.log('Vemos los elementos del conjunto, Diego lo metimos dos veces pero como no es posible que haya elementos repetido no lo incluye', conjunto) + // Añadimos un elemento al conjunto + conjunto.add(35) + console.log(conjunto) + console.log('Comprobamos si exite el valor "Diego" en el conjunto', conjunto.has('Diego')) + console.log(conjunto) + //Eliminamos un elemento al conjunto + conjunto.delete('Laura') + console.log(conjunto) + + + From 4a126e5b4683fa3940eb1aff20d5284c3cc729b0 Mon Sep 17 00:00:00 2001 From: VolumiDev Date: Fri, 5 Jul 2024 12:51:30 +0200 Subject: [PATCH 02/24] Empezamos con la agenda --- .../03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js index 367afded94..8a1c41db6d 100644 --- a/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js @@ -58,4 +58,13 @@ console.log(mapa.get(true)) console.log(conjunto) - + // Dificultad extra AGENDA + function menuAgenda(){ + console.log('Elige una de las opciones\n1. Busqueda\n2. Inserción') + + } + + // do { + // var opcion = menuAgenda + // } while (condition); + var dato = prompt('introduce') \ No newline at end of file From a661b4832dcc9d9ddcbeef27df873ac14527dc80 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Sun, 14 Jul 2024 10:08:53 -0400 Subject: [PATCH 03/24] Algunas correcciones --- Roadmap/05 - VALOR Y REFERENCIA/javascript/RicJDev.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Roadmap/05 - VALOR Y REFERENCIA/javascript/RicJDev.js b/Roadmap/05 - VALOR Y REFERENCIA/javascript/RicJDev.js index be18817467..0ad0c5e035 100644 --- a/Roadmap/05 - VALOR Y REFERENCIA/javascript/RicJDev.js +++ b/Roadmap/05 - VALOR Y REFERENCIA/javascript/RicJDev.js @@ -17,15 +17,15 @@ console.log(arr1); //---> [1, 2, 3, 4] console.log(arr2); //---> [1, 2, 3, 4] //-Funciones con datos por valor- -const cambiaEsteNumA40 = (n) => { - n = 40; - return n; +let miNumC = 5; + +const cambia5a40 = () => { + miNumC = 40; }; -let miNumC = 5; console.log(miNumC); -cambiaEsteNumA40(miNumC); +cambia5a40(miNumC); console.log(miNumC); //-Funciones con datos por referencia- From 6faf407a86e8c1764b825b7f2817ecaa9b2b25bd Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Sun, 14 Jul 2024 10:17:17 -0400 Subject: [PATCH 04/24] #05 - TypeScript --- .../typescript/RicJDev.ts | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Roadmap/05 - VALOR Y REFERENCIA/typescript/RicJDev.ts diff --git a/Roadmap/05 - VALOR Y REFERENCIA/typescript/RicJDev.ts b/Roadmap/05 - VALOR Y REFERENCIA/typescript/RicJDev.ts new file mode 100644 index 0000000000..366eadbc0d --- /dev/null +++ b/Roadmap/05 - VALOR Y REFERENCIA/typescript/RicJDev.ts @@ -0,0 +1,45 @@ +/* + * EJERCICIO: + * - Muestra ejemplos de asignación de variables "por valor" y "por referencia", según + * su tipo de dato. + * - Muestra ejemplos de funciones con variables que se les pasan "por valor" y + * "por referencia", y cómo se comportan en cada caso en el momento de ser modificadas. + * (Entender estos conceptos es algo esencial en la gran mayoría de lenguajes) + * + * DIFICULTAD EXTRA (opcional): + * Crea dos programas que reciban dos parámetros (cada uno) definidos como variables anteriormente. + * - Cada programa recibe, en un caso, dos parámetros por valor, y en otro caso, por referencia. + * Estos parámetros los intercambia entre ellos en su interior, los retorna, y su retorno + * se asigna a dos variables diferentes a las originales. A continuación, imprime el valor de las + * variables originales y las nuevas, comprobando que se ha invertido su valor en las segundas. + * Comprueba también que se ha conservado el valor original en las primeras. + */ + +//Variables por valor +let numA: number = 10 +let numB: number = numA + +console.log(numB) + +numA = 20 + +console.log(numA) +console.log(numB) + +//Función con variables por valor +let numC: number = 5 + +function change5To40() { + numC = 40 +} + +console.log(numC) + +change5To40() +console.log(numC) + +//Variables por referencia +//Función con variables por referencia +//EXTRA +function changeValues(var1, var2) {} +function changeReferences(var1, var2) {} From 038a67b5f60a45d4efcf8c5cae8a71233b3f3638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20P=C3=A9rez?= Date: Mon, 15 Jul 2024 10:53:20 +0200 Subject: [PATCH 05/24] #02-Python --- .../python/AbelPerezCollado.py | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/python/AbelPerezCollado.py diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/python/AbelPerezCollado.py b/Roadmap/02 - FUNCIONES Y ALCANCE/python/AbelPerezCollado.py new file mode 100644 index 0000000000..e382942d5e --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/python/AbelPerezCollado.py @@ -0,0 +1,60 @@ +# Func sin parametros ni retorno +def sin_param_retorno(): + print('Funcion no devuelve nada ni tiene parametros') + +# Func con varios parametros con retorno +def suma(num1:int , num2:int): + return num1 + num2 + +# Funciones dentro de funciones +def fun_dentro(param1:int,param2:int): + def suma(n1,n2): + return n1 + n2 + return suma(param1,param2) + +# Funcion con parametros por defecto +def fun_param_defecto(nombre = 'Abel', apellido = 'Perez'): + return f'Bienvenido, {nombre} {apellido}' + +# Ejemplo de funciones ya creadas en el lenguaje +nombre ='Abel' +print(f'El numero de letras de {nombre} es de {len(nombre)}') + + +# Funcion Lambda +square = lambda num : num * num +print(square(3)) + +# Funcion recursiva + +# función recursiva +def factorial(numero): + if numero == 0 or numero == 1: + return 1 + else: + return numero * factorial(numero - 1) + +print(factorial(41)) + +# Concepto de variable Local y Global +var_global = 100 + +def devuelve_numero(num : int): + var_local = num + return var_local + + +# Dificultad extra + +def funcion_dificultad_extra(cad1 : str, cad2:str): + cont = 0 + for num in range(1,101): + if num % 3 == 0 and num % 5 == 0: + print(f'{cad1}{cad2}') + elif num % 3 == 0: + print(cad1) + elif num % 5 == 0: + print(cad2) + else: + cont += 1 + return cont \ No newline at end of file From 77c16f93d0df5e825fba27f2f907383d046b7002 Mon Sep 17 00:00:00 2001 From: VolumiDev Date: Mon, 15 Jul 2024 12:02:46 +0200 Subject: [PATCH 06/24] Actualizamos ejercicio con el ejercicio Extra --- .../javascript/VolumiDev.js | 82 +++++++++++++++++-- 1 file changed, 73 insertions(+), 9 deletions(-) diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js index 8a1c41db6d..dbbd052212 100644 --- a/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js @@ -57,14 +57,78 @@ console.log(mapa.get(true)) conjunto.delete('Laura') console.log(conjunto) - // Dificultad extra AGENDA - function menuAgenda(){ - console.log('Elige una de las opciones\n1. Busqueda\n2. Inserción') - - } + + + // ** EJECUCION ** + //IMPLEMENTAMOS EL ELEMENTO CON EL QUE VAMOS A HACER LA LECTURA DEL TECLADO + const readline = require('readline') + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }) - // do { - // var opcion = menuAgenda - // } while (condition); - var dato = prompt('introduce') \ No newline at end of file + // DEFINIMOS EL MAP QUE ALMACENARA LA INFO + const agenda = new Map(); + let telregEx = /\d{9}/ + + function inicio() { + rl.question('¿Que operacion desea realizar? insertar, buscar, actualizar, eliminar, salir:\n', (resp) => { + if (resp === 'insertar'){ + rl.question('Introduce el nombre que deseas almacenar:\n', (nom) => { + rl.question('Introduce el numero de telefono:\n', (tel) => { + if(telregEx.test(tel)){ + agenda.set(nom, tel) + console.log('Contacto insertado') + inicio() + }else { + console.log('El formato del telefono no es correcto') + inicio() + } + }) + }) + } else if (resp === 'buscar'){ + rl.question('Introduce el nombre que deseas buscar:\n', (nom) => { + if(agenda.has(nom)){ + console.log(`Nombre: ${nom} Telefono: ${agenda.get(nom)}`) + inicio() + }else { + console.log('El nombre que has introducido no esta almacenado') + inicio() + } + }) + } else if(resp === 'salir'){ + console.log('Saliendo....') + process.exit(0) + }else if(resp === 'actualizar'){ + rl.question('Introduce el nombre que deseas actualizar\n', (nom) => { + if(agenda.has(nom)){ + rl.question('Actualiza el numero de telefono\n', (tel) => { + if(telregEx.test(tel)){ + agenda.set(nom, tel) + console.log('Contacto actualizado') + inicio() + }else { + console.log('El formato del telefono no es correcto') + inicio() + } + }) + } + }) + }else if(resp === 'eliminar'){ + rl.question('Introduce el nombre que deseas borrar:\n', (nom) => { + if(agenda.has(nom)){ + agenda.delete(nom) + console.log('Contacto borrado') + inicio() + }else{ + console.log('El nombre introducido no existe en el registro') + inicio() + } + }) + } + }) + } + + console.log('**** AGENDA ****') + inicio() \ No newline at end of file From 0d215f7ee48e500f2b5c32742f0334852c2115c8 Mon Sep 17 00:00:00 2001 From: VolumiDev Date: Mon, 15 Jul 2024 12:21:14 +0200 Subject: [PATCH 07/24] ultimo cambio --- Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js index dbbd052212..5c33f663d2 100644 --- a/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/VolumiDev.js @@ -74,6 +74,7 @@ console.log(mapa.get(true)) function inicio() { rl.question('¿Que operacion desea realizar? insertar, buscar, actualizar, eliminar, salir:\n', (resp) => { + resp.toLowerCase() if (resp === 'insertar'){ rl.question('Introduce el nombre que deseas almacenar:\n', (nom) => { rl.question('Introduce el numero de telefono:\n', (tel) => { From 6f10cd5816ec178884f9e4a43dbb84cdf6fa9c1a Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Mon, 15 Jul 2024 07:39:24 -0400 Subject: [PATCH 08/24] #05 - TypeScript --- .../javascript/RicJDev.js | 26 ++--- .../typescript/RicJDev.ts | 94 ++++++++++++------- 2 files changed, 71 insertions(+), 49 deletions(-) diff --git a/Roadmap/05 - VALOR Y REFERENCIA/javascript/RicJDev.js b/Roadmap/05 - VALOR Y REFERENCIA/javascript/RicJDev.js index 0ad0c5e035..b418a1b3d8 100644 --- a/Roadmap/05 - VALOR Y REFERENCIA/javascript/RicJDev.js +++ b/Roadmap/05 - VALOR Y REFERENCIA/javascript/RicJDev.js @@ -19,29 +19,25 @@ console.log(arr2); //---> [1, 2, 3, 4] //-Funciones con datos por valor- let miNumC = 5; -const cambia5a40 = () => { - miNumC = 40; -}; +function suma40(num) { + return num + 40; +} console.log(miNumC); -cambia5a40(miNumC); +suma40(miNumC); console.log(miNumC); //-Funciones con datos por referencia- const arr3 = [12, 34, 53]; -const cambiaEsteArr = (arr) => { - arr.push(30); - - const arr4 = arr; - arr4.push(24); - - console.log(arr); - console.log(arr4); +const agrega40ALaLista = (arr) => { + return arr.push(40); }; -cambiaEsteArr(arr3); +console.log(arr3); + +agrega40ALaLista(arr3); console.log(arr3); //EXTRA @@ -59,9 +55,7 @@ let miNumF = 63; let [nuevoNumD, nuevoNumF] = intercambiaLosValores(miNumD, miNumF); console.log(`\nValores originales: ${miNumD}, ${miNumF}`); -console.log( - `\nValores luego de cambiarlos con la función: ${nuevoNumD}, ${nuevoNumF}` -); +console.log(`\nValores luego de cambiarlos con la función: ${nuevoNumD}, ${nuevoNumF}`); //-Por referencia- //Funciona de la misma manera con los arrays diff --git a/Roadmap/05 - VALOR Y REFERENCIA/typescript/RicJDev.ts b/Roadmap/05 - VALOR Y REFERENCIA/typescript/RicJDev.ts index 366eadbc0d..f7d044c0bd 100644 --- a/Roadmap/05 - VALOR Y REFERENCIA/typescript/RicJDev.ts +++ b/Roadmap/05 - VALOR Y REFERENCIA/typescript/RicJDev.ts @@ -1,45 +1,73 @@ -/* - * EJERCICIO: - * - Muestra ejemplos de asignación de variables "por valor" y "por referencia", según - * su tipo de dato. - * - Muestra ejemplos de funciones con variables que se les pasan "por valor" y - * "por referencia", y cómo se comportan en cada caso en el momento de ser modificadas. - * (Entender estos conceptos es algo esencial en la gran mayoría de lenguajes) - * - * DIFICULTAD EXTRA (opcional): - * Crea dos programas que reciban dos parámetros (cada uno) definidos como variables anteriormente. - * - Cada programa recibe, en un caso, dos parámetros por valor, y en otro caso, por referencia. - * Estos parámetros los intercambia entre ellos en su interior, los retorna, y su retorno - * se asigna a dos variables diferentes a las originales. A continuación, imprime el valor de las - * variables originales y las nuevas, comprobando que se ha invertido su valor en las segundas. - * Comprueba también que se ha conservado el valor original en las primeras. - */ +//Tipos de datos por valor +let number1: number = 10 +let number2: number = number1 -//Variables por valor -let numA: number = 10 -let numB: number = numA - -console.log(numB) +console.log(number2) -numA = 20 +number1 += 20 -console.log(numA) -console.log(numB) +console.log(number1) +console.log(number2) //Función con variables por valor -let numC: number = 5 +let number3: number = 5 -function change5To40() { - numC = 40 +function add40(num: number) { + return num + 40 } -console.log(numC) +console.log(number3) -change5To40() -console.log(numC) +add40(number3) +console.log(number3) + +//Tipos de datos por referencia +let array1: number[] = [12, 30, 12] +let array2: number[] = array1 + +console.log(array1) + +array2.push(10) + +console.log(array1) +console.log(array2) -//Variables por referencia //Función con variables por referencia +let array3: number[] = [10, 20, 30] + +function customPop(arr: any[]) { + return (arr.length -= 1) +} + +console.log(array3) + +customPop(array3) +console.log(array3) + //EXTRA -function changeValues(var1, var2) {} -function changeReferences(var1, var2) {} +function changeValues(a: any, b: any) { + let change = a + + a = b + b = change + + return [a, b] +} + +//Variables por valor +let number4 = 20 +let number5 = 50 + +let [newNumber4, newNumber5] = changeValues(number4, number5) + +console.log('Valores originales:', number4, number5) +console.log('Valores cambiados:', newNumber4, newNumber5) + +//Variables por referencia +let array5 = [12, 10, 14] +let array6 = [20, 22, 25] + +let [newArray5, newArray6] = changeValues(array5, array6) + +console.log('Valores originales:', array5, array6) +console.log('Valores cambiados:', newArray5, newArray6) From 6231d9fc85f958d3a457e100ab6edf2459ba1ded Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Mon, 15 Jul 2024 08:03:02 -0400 Subject: [PATCH 09/24] #06 - TypeScript --- .../06 - RECURSIVIDAD/typescript/RicJDev.ts | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Roadmap/06 - RECURSIVIDAD/typescript/RicJDev.ts diff --git a/Roadmap/06 - RECURSIVIDAD/typescript/RicJDev.ts b/Roadmap/06 - RECURSIVIDAD/typescript/RicJDev.ts new file mode 100644 index 0000000000..3dc62a4b5e --- /dev/null +++ b/Roadmap/06 - RECURSIVIDAD/typescript/RicJDev.ts @@ -0,0 +1,44 @@ +//EJERCICIO +console.log('\nNÚMEROS DEL 100 AL 0') +function countdown(n: number): void { + if (n >= 0) { + console.log(n) + + countdown(n - 1) + } +} + +countdown(100) + +//EXTRA +console.log('\nFACTORIALES') +function getFactorial(num: number): number { + if (num < 0) { + console.log('Número no válido') + + return 0 + } else if (num === 0) { + return 1 + } else { + return num * getFactorial(num - 1) + } +} + +console.log(getFactorial(5)) + +console.log('\nSUCESIÓN DE FIBONACCI') +function fibonacciAt(position: number): number { + if (position <= 0) { + console.log('Número no válido') + + return 0 + } else if (position === 1) { + return 0 + } else if (position === 2) { + return 1 + } else { + return getFactorial(position - 1) + fibonacciAt(position - 2) + } +} + +console.log(fibonacciAt(5)) From fe272cfb9eb26075ed96d32dae7a8f5898ed900b Mon Sep 17 00:00:00 2001 From: JoanCharles Date: Mon, 15 Jul 2024 17:30:28 +0200 Subject: [PATCH 10/24] #00 - Java --- .../java/jcrodmir.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/jcrodmir.java diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/jcrodmir.java b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/jcrodmir.java new file mode 100644 index 0000000000..b73174be0f --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/jcrodmir.java @@ -0,0 +1,49 @@ +public class jcrodmir{ + +/* + Programm Language/ Programmiersprache: Java + Official Java Website / offizielle Java WebSite: https://docs.oracle.com/javase/8/docs/ + Other Java Website/ andere Java WebSite : https://www.javatpoint.com/java-tutorial + +*/ + +// Diferents types of comment one line/verschiedene Typen von Kommentaren + +/* multiples lines/ mehrere Zeilen +*/ + + /** + * Documentation + * + * */ + +//Create a variable and constant/Variable und Konstante erstellen +/* + The variables at Java have the type of the variable the name and the value, if you want a constant, must add + a the keyword final. + Die Variablen bei Java haben den Typ der Variablen, den Namen und den Wert, wenn Sie eine Konstante wollen, müssen Sie + ein das Schlüsselwort final. + + */ + + int variableNumber = 8; + final int finalNumber= 9; + + //Primitives Types/ primitive Datentypen +/* + Byte/Short/Int/Long/Float/Double/Boolean/Char + */ + byte ReallySmallNumber=10; + short smallNumber=10000; + int number= 100000; + long ReallyBigNumber=53856421646L; + float decimalNumber= 2.5f; + double decimalBigNumber= 52556.684684446; + boolean trueOrFalse= true; + char character= 'A'; + + public static void main(String[] args) { + System.out.print("Hello World"); + System.out.print("Hallo Welt"); + } +} \ No newline at end of file From 28de425a7cd3d8130270bb95fb3e8fca9bdb41ab Mon Sep 17 00:00:00 2001 From: kodenook Date: Mon, 15 Jul 2024 12:19:51 -0400 Subject: [PATCH 11/24] Reto #9 - go --- Roadmap/09 - HERENCIA/go/kodenook.go | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/go/kodenook.go diff --git a/Roadmap/09 - HERENCIA/go/kodenook.go b/Roadmap/09 - HERENCIA/go/kodenook.go new file mode 100644 index 0000000000..ff4d8aaa8a --- /dev/null +++ b/Roadmap/09 - HERENCIA/go/kodenook.go @@ -0,0 +1,29 @@ +package main + +import "fmt" + +func main() { + var animal Animal = Animal{"bob"} + var dog Dog = Dog{animal, "black"} + + animal.MakeSound() + dog.MakeSound() +} + +type Animal struct { + Name string +} + +func (a *Animal) MakeSound() { + fmt.Println("Some generic animal sound") +} + +type Dog struct { + Animal + color string +} + +type Cat struct { + Animal + color string +} From 5db7392b576af8babc4fe22845d22da3f963efab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20D=C3=B3ezon?= Date: Mon, 15 Jul 2024 12:59:29 -0600 Subject: [PATCH 12/24] #21 - JavaScript --- .../21 - CALLBACKS/javascript/RaulDoezon.js | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Roadmap/21 - CALLBACKS/javascript/RaulDoezon.js diff --git a/Roadmap/21 - CALLBACKS/javascript/RaulDoezon.js b/Roadmap/21 - CALLBACKS/javascript/RaulDoezon.js new file mode 100644 index 0000000000..8c795f36a5 --- /dev/null +++ b/Roadmap/21 - CALLBACKS/javascript/RaulDoezon.js @@ -0,0 +1,66 @@ +/* + EJERCICIO: + Explora el concepto de callback en tu lenguaje creando un ejemplo + simple (a tu elección) que muestre su funcionamiento. +*/ + +function phrase(message, callback) { + const fullMessage = "¡Me gusta " + message; + + callback(fullMessage); +} + +function complement(complementaryMessage) { + console.log(complementaryMessage); +} + +phrase("la leche, la carne y el pan!", complement); + +/* + DIFICULTAD EXTRA (opcional): + Crea un simulador de pedidos de un restaurante utilizando callbacks. + Estará formado por una función que procesa pedidos. + Debe aceptar el nombre del plato, una callback de confirmación, una + de listo y otra de entrega. + - Debe imprimir un confirmación cuando empiece el procesamiento. + - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre + procesos. + - Debe invocar a cada callback siguiendo un orden de procesado. + - Debe notificar que el plato está listo o ha sido entregado. +*/ + +function confirmation(receive, confirmationCallback) { + setTimeout(() => { + console.log(receive); + + confirmationCallback(); + }, Math.random() * 1000); +} + +function ready(process, readyCallback) { + setTimeout(() => { + console.log(process); + + readyCallback(); + }, Math.random() * 1000); +} + +function delivery(finish) { + setTimeout(() => { + console.log(finish); + }, Math.random() * 1000); +} + +function orders(saucer, confirmation, ready, delivery) { + const confirmationMessage = `1. Recibimos la orden para preparar "${saucer}".`; + const readyMessage = `2. Ya estamos preparando "${saucer}". En unos momentos estará listo su platillo.`; + const deliveryMessage = `3. Hemos entregado su "${saucer}". ¡Buen provecho!`; + + confirmation(confirmationMessage, () => { + ready(readyMessage, () => { + delivery(deliveryMessage); + }); + }); +} + +orders("Quesadilla de chicharrón prensado", confirmation, ready, delivery); From c177bbeffb9e014b14432b9565992f9e83058081 Mon Sep 17 00:00:00 2001 From: avcenal <134477562+avcenal@users.noreply.github.com> Date: Mon, 15 Jul 2024 21:08:34 +0200 Subject: [PATCH 13/24] #27 - Python Ejercicio #27 del Roadmap 2024 --- Roadmap/27 - SOLID OCP/python/avcenal.py | 146 +++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 Roadmap/27 - SOLID OCP/python/avcenal.py diff --git a/Roadmap/27 - SOLID OCP/python/avcenal.py b/Roadmap/27 - SOLID OCP/python/avcenal.py new file mode 100644 index 0000000000..b6b4f0dd79 --- /dev/null +++ b/Roadmap/27 - SOLID OCP/python/avcenal.py @@ -0,0 +1,146 @@ +""" + * EJERCICIO: + * Explora el "Principio SOLID Abierto-Cerrado (Open-Close Principle, OCP)" + * y crea un ejemplo simple donde se muestre su funcionamiento + * de forma correcta e incorrecta. +""" +from abc import ABC, abstractmethod +from math import pi + +#EJEMPLO SIN OCP +class Area_1(): + def __init__(self): + pass + + def rectangle(self,side:int|float,high:int|float): + return side*high + + def circle(self,radius:int|float): + return pi*radius*radius + +rectangle_no_ocp = Area_1() +print(f"El área del Rectángulo NO OCP es: {rectangle_no_ocp.rectangle(side=7,high=2)}") +circle_no_ocp = Area_1() +print(f"El área del Circulo NO OCP es: {circle_no_ocp.circle(radius=4):.2f}") +print("\n") + +#EJEMPLO CON OCP + +class Area(ABC): + @abstractmethod + def area(): + pass + +class Rectangle(Area): + def area(self,side:int|float,high:int|float): + return side*high + +class Circle(Area): + def area(self,radius:int|float): + return pi*radius*radius + +rectangle_ocp = Rectangle() +print(f"El área del Rectángulo OCP es: {rectangle_ocp.area(side=7,high=2)}") +circle_ocp = Circle() +print(f"El área del Círculo OCP es: {circle_ocp.area(radius=4):.2f}") +print("\n") + +""" + * DIFICULTAD EXTRA (opcional): + * Desarrolla una calculadora que necesita realizar diversas operaciones matemáticas. + * Requisitos: + * - Debes diseñar un sistema que permita agregar nuevas operaciones utilizando el OCP. + * Instrucciones: + * 1. Implementa las operaciones de suma, resta, multiplicación y división. + * 2. Comprueba que el sistema funciona. + * 3. Agrega una quinta operación para calcular potencias. + * 4. Comprueba que se cumple el OCP. +""" + +from functools import reduce + +class Operation(ABC): #Operation pasa a ser una interfaz con un método abstracto + @abstractmethod #es decir la clase no puede ser instanciada ni el método podrá ser utilizado + def calculate(): + pass + +class Sum(Operation): + def calculate(self,args:list): + print(f"El resultado es: {reduce(lambda x,y:x+y,args)}\n") + +class Substract(Operation): + def calculate(self,args:list): + print(f"El resultado es: {reduce(lambda x,y:x-y,args)}\n") + +class Multiply(Operation): + def calculate(self,args:list): + print(f"El resultado es: {reduce(lambda x,y:x*y,args)}\n") + +class Divide(Operation): + def calculate(self,args:list): + print(f"El restultado es: {reduce(lambda x,y:x/y,args)}\n") + +class Power(Operation): + def calculate(self,args:list): + if len(args)>2: + raise ValueError("Para poder calcular una potencia has de pasar solo dos operandos como base y exponente") + else: + print(f"El resultado es: {pow(args[0],args[1])}\n") + +class Calculator(): + def __init__(self) -> None: + self.operations = { + "sum":Sum(), + "substract":Substract(), + "multiply":Multiply(), + "divide":Divide() + } + + def add_operation(self,name:str,operation:Operation): + self.operations[name] = operation + + def execute(self,name): + if name not in self.operations: + raise ValueError("La operación no está contemplada en esta calculadora") + else: + num_operators = list() + operators = input("Dime los operandos separados por coma: ") + operators = operators.strip() + list_operators = operators.split(",") + try: + for element in list_operators: + if element.__contains__("."): + num_operators.append(float(element)) + else: + num_operators.append(int(element)) + except ValueError: + print("Los valores introducidos han de ser números...") + else: + self.operations[name].calculate(num_operators) + +def calculator(): + my_calculator = Calculator() + my_calculator.add_operation(name="power",operation=Power()) #añado la potencia con Power() + options = { + "S":"sum", + "R":"substract", + "M":"multiply", + "D":"divide", + "P":"power" + } + print(" --- TE DOY LA BIENVENIDA AL SISTEMA DE CALCULADORA --- ") + while True: + option = input("Elige una opción por favor:\n- Suma (S)\n- Resta (R)\n- Multiplicación (M)\n- División (D)\n- Potencia (P)\n- Salir (O)\n-----> ").upper() + if option == "O": + print("Gracias por usar el sistema de calculadora. ¡Hasta pronto!") + break + elif option not in options: + print("La opción elegida no es válida...\n") + else: + my_calculator.execute(options[option]) + +calculator() + +#en si la función calculator no cumpliría con el OCP, si añadimos otra operación +#hemos de modificar el menú y la variable options +#no obstante todas las clases que incluye el programa si lo cumplen From fad7c0ab57c9a88f7abcabe931073b1e8c216139 Mon Sep 17 00:00:00 2001 From: Julian Gomez <132085190+julian98789@users.noreply.github.com> Date: Mon, 15 Jul 2024 14:17:22 -0500 Subject: [PATCH 14/24] julian98789.java --- .../10 - EXCEPCIONES/java/julian98789.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Roadmap/10 - EXCEPCIONES/java/julian98789.java diff --git a/Roadmap/10 - EXCEPCIONES/java/julian98789.java b/Roadmap/10 - EXCEPCIONES/java/julian98789.java new file mode 100644 index 0000000000..70edcc8845 --- /dev/null +++ b/Roadmap/10 - EXCEPCIONES/java/julian98789.java @@ -0,0 +1,75 @@ +import java.util.Scanner; + +import javax.swing.undo.CannotRedoException; + +public class reto_10 { + + public static void main(String[] args) { + Scanner input = new Scanner(System.in); + + for (int i = 0; i < 1; i++) { + try { + int div = 10; + int divisor = input.nextInt(); + div /= divisor; + } catch (ArithmeticException e) { + System.out.println("No se puede dividir por 0"); + } + } + + try { + processParams(0, 50); + } catch (CustomException e) { + System.out.println("Error capturado en el método main: " + e.getMessage()); + } + + try { + processParams(50, -10); + } catch (CustomException e) { + System.out.println("Error capturado en el método main: " + e.getMessage()); + } + + try { + processParams(60, 50); + } catch (CustomException e) { + System.out.println("Error capturado en el método main: " + e.getMessage()); + } + + try { + processParams(50, 25); + } catch (CustomException e) { + System.out.println("Error capturado en el método main: " + e.getMessage()); + } + } + + public static void processParams(int param1, int param2) throws CustomException { + try { + if (param1 == 0) { + throw new IllegalArgumentException("El parámetro 'param1' no puede ser 0"); + } else if (param2 < 0) { + throw new CustomException("El parámetro 'param2' no puede ser negativo"); + } else if (param1 + param2 > 100) { + throw new IllegalStateException("La suma de los parámetros no puede ser mayor a 100"); + } else { + System.out.println("Procesamiento de parámetros exitoso"); + } + } catch (IllegalArgumentException e) { + System.out.println("Error de tipo IllegalArgumentException: " + e.getMessage()); + } catch (CustomException e) { + System.out.println("Error de tipo CustomException: " + e.getMessage()); + } catch (IllegalStateException e) { + System.out.println("Error de tipo IllegalStateException: " + e.getMessage()); + } catch (Exception e) { + System.out.println("Error inesperado: " + e.getClass().getName()); + } finally { + System.out.println("La ejecución ha finalizado"); + } + } + + public static class CustomException extends Exception { + public CustomException(String message) { + super(message); + } + } + +} From b21fd53aa99c80d89b24bcedfaac43443de1c4b8 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Mon, 15 Jul 2024 22:16:33 +0200 Subject: [PATCH 15/24] # 18 - Python --- .../python/EmmanuelMMontesinos.py | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Roadmap/18 - CONJUNTOS/python/EmmanuelMMontesinos.py diff --git a/Roadmap/18 - CONJUNTOS/python/EmmanuelMMontesinos.py b/Roadmap/18 - CONJUNTOS/python/EmmanuelMMontesinos.py new file mode 100644 index 0000000000..dfb94bc015 --- /dev/null +++ b/Roadmap/18 - CONJUNTOS/python/EmmanuelMMontesinos.py @@ -0,0 +1,83 @@ +""" +/* + * EJERCICIO: + * Utilizando tu lenguaje crea un conjunto de datos y realiza las siguientes + * operaciones (debes utilizar una estructura que las soporte): + * x Añade un elemento al final. + * x Añade un elemento al principio. + * x Añade varios elementos en bloque al final. + * x Añade varios elementos en bloque en una posición concreta. + * x Elimina un elemento en una posición concreta. + * x Actualiza el valor de un elemento en una posición concreta. + * x Comprueba si un elemento está en un conjunto. + * x Elimina todo el contenido del conjunto. + */ +""" + +'''Base''' +# Conjuntos +# Pensaba que se referia a sets {}, pero al ver los requerimientos he visto que se refiere a conjunto de datos simplemente + +mi_conjunto = ["Hola",1,False] +print(mi_conjunto) + +# Añadir Elementos +'''Inicio''' +mi_conjunto.insert(0, "Nuevo Elemento Principio") +print(mi_conjunto) +'''Final''' +mi_conjunto.append("Nuevo Elemento Final") +print(mi_conjunto) +'''Varios al Final''' +mi_conjunto.extend(["Varios1","Varios2"]) +print(mi_conjunto) + +'''Varios en Posición Concreta''' +mi_conjunto[1:1] = ["Varios3","Varios4"] +print(mi_conjunto) + +# Eliminar Elementos +mi_conjunto.remove(mi_conjunto[4]) +print(mi_conjunto) + +# Actualizar Elemento +mi_conjunto[4] = True +print(mi_conjunto) + +# Comprobación de Elemento +elemento_comprobar = "Varios3" +print(f"¿{elemento_comprobar} esta en el conjunto?: {elemento_comprobar in mi_conjunto}") + +# Borrar todo el conjunto +mi_conjunto.clear() +print(mi_conjunto) + +''' + * DIFICULTAD EXTRA (opcional): + * Muestra ejemplos de las siguientes operaciones con conjuntos: + * x Unión. + * x Intersección. + * x Diferencia. + * x Diferencia simétrica. +''' + +conjunto_1 = [1,"2",False,"3",4] +conjunto_2 = [1,"2",False,3,"4"] + +# Union +union = list(set(conjunto_1).union(conjunto_2)) +print(union) + +# Intersección +interset = list(set(conjunto_1).intersection(conjunto_2)) +print(interset) + +# Diferencia +deffe_1 = list(set(conjunto_1).difference(conjunto_2)) +deffe_2 = list(set(conjunto_2).difference(conjunto_1)) +print(deffe_1) +print(deffe_2) + +# Diferencia simetrica +simetrica = list(set(conjunto_1).symmetric_difference(conjunto_2)) +print(simetrica) From d6108fb12a0597d47f7efe05c922770797e4f9be Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Tue, 16 Jul 2024 11:25:40 +0200 Subject: [PATCH 16/24] # 19 - Python --- .../python/EmmanuelMMontesinos.py | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 Roadmap/19 - ENUMERACIONES/python/EmmanuelMMontesinos.py diff --git a/Roadmap/19 - ENUMERACIONES/python/EmmanuelMMontesinos.py b/Roadmap/19 - ENUMERACIONES/python/EmmanuelMMontesinos.py new file mode 100644 index 0000000000..8797bef01d --- /dev/null +++ b/Roadmap/19 - ENUMERACIONES/python/EmmanuelMMontesinos.py @@ -0,0 +1,121 @@ +"""/* + * EJERCICIO: + * Empleando tu lenguaje, explora la definición del tipo de dato + * que sirva para definir enumeraciones (Enum). + * Crea un Enum que represente los días de la semana del lunes + * al domingo, en ese orden. Con ese enumerado, crea una operación + * que muestre el nombre del día de la semana dependiendo del número entero + * utilizado (del 1 al 7). + */""" + +# Enumeracion +from enum import Enum + +class Dias(Enum): + lunes = 1 + martes = 2 + miercoles = 3 + jueves = 4 + viernes = 5 + sabado = 6 + domingo = 7 + + def numero_a_dia(self,num:int): + try: + print(f"El {num} es {self(num).name.title()}\n") + except ValueError as e: + print(f"{num} no esta dentro del rango (1/7)\n") + +# Pruebas + +Dias.numero_a_dia(Dias,1) + +''' + * DIFICULTAD EXTRA (opcional): + * Crea un pequeño sistema de gestión del estado de pedidos. + * Implementa una clase que defina un pedido con las siguientes características: + * - El pedido tiene un identificador y un estado. + * - El estado es un Enum con estos valores: PENDIENTE, ENVIADO, ENTREGADO y CANCELADO. + * - Implementa las funciones que sirvan para modificar el estado: + * - Pedido enviado + * - Pedido cancelado + * - Pedido entregado + * (Establece una lógica, por ejemplo, no se puede entregar si no se ha enviado, etc...) + * - Implementa una función para mostrar un texto descriptivo según el estado actual. + * - Crea diferentes pedidos y muestra cómo se interactúa con ellos. +''' + +# Pedidos +class Pedidos: + + # Estados de los pedidos + class Estados_Pedidos(Enum): + PENDIENTE = "Pendiente" + ENVIADO = "Enviado" + ENTREGADO = "Entregado" + CANCELADO = "Cancelado" + + total_pedidos = 0 + + def __init__(self) -> None: + + Pedidos.total_pedidos += 1 + self.identificador = Pedidos.total_pedidos + self.estado = Pedidos.Estados_Pedidos.PENDIENTE + + def info(self): + print(f"Identificador: {self.identificador}\nEstado: {self.estado.value}\nPedidos Totales: {Pedidos.total_pedidos}\n") + + # Metodo para cambiar de estado dependiendo de su estado actual + def cambiar_estado(self,cambio): + + if cambio.lower() == "enviado": + + if self.estado == Pedidos.Estados_Pedidos.PENDIENTE: + + print(f"Cambiando estado de {self.estado.value} a {cambio.title()}") + self.estado = Pedidos.Estados_Pedidos.ENVIADO + print("Cambio realizado con exito\n") + + else: + + print(f"No se puede cambiar de estado de {self.estado.value} a {cambio}\n") + + elif cambio.lower() == "entregado": + + if self.estado == Pedidos.Estados_Pedidos.ENVIADO: + + print(f"Cambiando estado de {self.estado.value} a {cambio.title()}") + self.estado = Pedidos.Estados_Pedidos.ENTREGADO + print("Cambio realizado con exito\n") + + else: + + print(f"No se puede cambiar de estado de {self.estado.value} a {cambio}\n") + + + elif cambio.lower() == "cancelado": + + if self.estado != Pedidos.Estados_Pedidos.CANCELADO: + + print(f"Cambiando estado de {self.estado.value} a {cambio.title()}") + self.estado = Pedidos.Estados_Pedidos.CANCELADO + print("Cambio realizado con exito\n") + + else: + + print(f"No se puede cambiar de estado de {self.estado.value} a {cambio}\n") + self.info() + +# Pruebas +pedido_1 = Pedidos() +pedido_2 = Pedidos() +pedido_3 = Pedidos() + +pedido_1.cambiar_estado("enviado") +pedido_2.cambiar_estado("entregado") +pedido_3.cambiar_estado("cancelado") + +pedido_1.info() +pedido_2.info() +pedido_3.info() \ No newline at end of file From ca94f23a6eb10d75ad88345681c05c097f0de25d Mon Sep 17 00:00:00 2001 From: Jordi Ayala Date: Tue, 16 Jul 2024 10:20:34 -0600 Subject: [PATCH 17/24] #29 - Java --- Roadmap/29 - SOLID ISP/java/asjordi.java | 144 +++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 Roadmap/29 - SOLID ISP/java/asjordi.java diff --git a/Roadmap/29 - SOLID ISP/java/asjordi.java b/Roadmap/29 - SOLID ISP/java/asjordi.java new file mode 100644 index 0000000000..8ff5e76c32 --- /dev/null +++ b/Roadmap/29 - SOLID ISP/java/asjordi.java @@ -0,0 +1,144 @@ +/* + El Principio de Segregación de Interfaces (ISP) establece que las implementaciones de una interfaz + no deben depender de comportamientos que no usen. En otras palabras, una clase no debe implementar métodos que no necesita. + Por lo cual, es mejor tener muchas interfaces específicas que realicen 1 o 2 tareas que una interfaz general que realice muchas tareas. + */ + +public class Main { + + public static void main(String[] args) { + SimpleBlackAndWhitePrinter bwPrinter = new SimpleBlackAndWhitePrinter(); + SimpleColorPrinter colorPrinter = new SimpleColorPrinter(); + MultifunctionPrinter multifunctionPrinter = new MultifunctionPrinter(); + + bwPrinter.printBlackAndWhite(); + colorPrinter.printColor(); + multifunctionPrinter.printBlackAndWhite(); + multifunctionPrinter.printColor(); + multifunctionPrinter.scan(); + multifunctionPrinter.fax(); + } + + /* + EJERCICIO: + Explora el "Principio SOLID de Segregación de Interfaces (Interface Segregation Principle, ISP)" + y crea un ejemplo simple donde se muestre su funcionamiento de forma correcta e incorrecta. + */ + + // Interfaz general que viola el ISP + public interface Worker { + void work(); + void eat(); + } + + // Trabajador que solo trabaja + public static class RobotWorker implements Worker { + @Override + public void work() { + System.out.println("Trabajando..."); + } + + @Override + public void eat() { + throw new UnsupportedOperationException("No puede comer"); + } + } + + // Ejemplo Correcto (Aplicación del ISP) + // Interfaz específica para trabajar + public interface Workable { + void work(); + } + + // Interfaz específica para comer + public interface Eatable { + void eat(); + } + + // Trabajador que solo trabaja + public static class RobotWorker2 implements Workable { + @Override + public void work() { + System.out.println("Trabajando..."); + } + } + + // Trabajador humano que trabaja y come + public static class HumanWorker implements Workable, Eatable { + @Override + public void work() { + System.out.println("Trabajando..."); + } + + @Override + public void eat() { + System.out.println("Comiendo..."); + } + } + + /* + DIFICULTAD EXTRA (opcional): + Crea un gestor de impresoras. + Requisitos: + 1. Algunas impresoras sólo imprimen en blanco y negro. + 2. Otras sólo a color. + 3. Otras son multifunción, pueden imprimir, escanear y enviar fax. + Instrucciones: + 1. Implementa el sistema, con los diferentes tipos de impresoras y funciones. + 2. Aplica el ISP a la implementación. + 3. Desarrolla un código que compruebe que se cumple el principio. + */ + + interface BlackAndWhitePrinter { + void printBlackAndWhite(); + } + + interface ColorPrinter { + void printColor(); + } + + interface Scanner { + void scan(); + } + + interface Fax { + void fax(); + } + + static class SimpleBlackAndWhitePrinter implements BlackAndWhitePrinter { + @Override + public void printBlackAndWhite() { + System.out.println("Printing in black and white..."); + } + } + + static class SimpleColorPrinter implements ColorPrinter { + @Override + public void printColor() { + System.out.println("Printing in color..."); + } + } + + static class MultifunctionPrinter implements BlackAndWhitePrinter, ColorPrinter, Scanner, Fax { + + @Override + public void printBlackAndWhite() { + System.out.println("Printing in black and white..."); + } + + @Override + public void printColor() { + System.out.println("Printing in color..."); + } + + @Override + public void fax() { + System.out.println("Sending fax..."); + } + + @Override + public void scan() { + System.out.println("Scanning document..."); + } + } +} From 2f37d4596231a5b0521d78536f072ac40b4d9026 Mon Sep 17 00:00:00 2001 From: kenysdev Date: Tue, 16 Jul 2024 11:43:01 -0500 Subject: [PATCH 18/24] 29-c#-SOLID-ISP --- Roadmap/29 - SOLID ISP/c#/kenysdev.cs | 159 ++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 Roadmap/29 - SOLID ISP/c#/kenysdev.cs diff --git a/Roadmap/29 - SOLID ISP/c#/kenysdev.cs b/Roadmap/29 - SOLID ISP/c#/kenysdev.cs new file mode 100644 index 0000000000..20663fa6e4 --- /dev/null +++ b/Roadmap/29 - SOLID ISP/c#/kenysdev.cs @@ -0,0 +1,159 @@ +namespace exs28; +/* +╔══════════════════════════════════════╗ +║ Autor: Kenys Alvarado ║ +║ GitHub: https://github.com/Kenysdev ║ +║ 2024 - C# ║ +╚══════════════════════════════════════╝ +----------------------------------------------------- +* SOLID: PRINCIPIO DE SEGREGACIÓN DE INTERFACES (ISP) +----------------------------------------------------- +- Una clase no debería estar obligada a implementar interfaces que no utiliza. + Evitando crear grandes clases monolíticas. +*/ + +// NOTA: Este ejemplo muestra el uso CORRECTO. Para suponer un ejemplo que viole el principio, sería. +//       Imaginar todos los métodos siguientes, en una sola interfaz, entonces algunos animales +//       implementarían una interfaz que no utilizarían. + +public interface IFlyable +{ + void Fly(); +} + +public interface ISwimmable +{ + void Swim(); +} + +// ____________________________ +// Implementar +public class Fish : ISwimmable +{ + public void Swim() + { + Console.WriteLine("El pez está nadando."); + } +} + +public class Duck : IFlyable, ISwimmable +{ + public void Fly() + { + Console.WriteLine("El pato está volando."); + } + + public void Swim() + { + Console.WriteLine("El pato está nadando."); + } +} + +/* +_______________ + * EJERCICIO: + * Crea un gestor de impresoras. + * Requisitos: + * 1. Algunas impresoras sólo imprimen en blanco y negro. + * 2. Otras sólo a color. + * 3. Otras son multifunción, pueden imprimir, escanear y enviar fax. + * Instrucciones: + * 1. Implementa el sistema, con los diferentes tipos de impresoras y funciones. + * 2. Aplica el ISP a la implementación. + * 3. Desarrolla un código que compruebe que se cumple el principio. +*/ + +public interface IPrinter +{ + void PrintFile(string file); +} + +public interface IScanner +{ + void ToScan(string pathSave); +} + +public interface IFax +{ + void SendFile(string file, int phoneNumber); +} + +// ____________________________ +// Implementar +public class MonoPrinter : IPrinter +{ + public void PrintFile(string file) + { + Console.WriteLine("\nImpresora blanco y negro:"); + Console.WriteLine(file + " se imprimió."); + } +} + +public class ColorPrinter : IPrinter +{ + public void PrintFile(string file) + { + Console.WriteLine("\nImpresora a color:"); + Console.WriteLine(file + " se imprimió."); + } +} + +public class Scanner : IScanner +{ + public void ToScan(string pathSave) + { + Console.WriteLine("\nEscaneo realizado, Guardado en: " + pathSave); + } +} + +public class Fax : IFax +{ + public void SendFile(string file, int phoneNumber) + { + Console.WriteLine("\n-" + file + " Fue enviado a: " + phoneNumber); + } +} + +public class MultiFunctionPrinter +{ + public MonoPrinter monoPrinter = new(); + public ColorPrinter colorPrinter = new(); + public Scanner theScanner = new(); + public Fax fax = new(); +} + +//__________________ +public class Program +{ + static void Main() + { + Fish theFish = new(); + Duck theDuck = new(); + theFish.Swim(); + theDuck.Swim(); + theDuck.Fly(); + + //___________________________ + // exs 2 + MonoPrinter monoPrinter = new(); + monoPrinter.PrintFile("filex.pdf"); + + ColorPrinter colorPrinter = new(); + colorPrinter.PrintFile("filex.pdf"); + + Scanner theScanner = new (); + theScanner.ToScan("c:\\docs"); + + Fax fax = new(); + fax.SendFile("filex.pdf", 12345678); + + Console.WriteLine("\n___________\nMultifunción:"); + + MultiFunctionPrinter multiFunctionPrinter = new(); + multiFunctionPrinter.monoPrinter.PrintFile("filex.pdf"); + multiFunctionPrinter.colorPrinter.PrintFile("filex.pdf"); + multiFunctionPrinter.theScanner.ToScan("c:\\docs"); + multiFunctionPrinter.fax.SendFile("filex.pdf", 12345678); + + } +} From e6cf641d65eb8162ec7fce76a451f5b5d215225b Mon Sep 17 00:00:00 2001 From: ElHacedorDeCosas Date: Tue, 16 Jul 2024 17:47:49 -0300 Subject: [PATCH 19/24] Create ElHacedorDeCosas.gd --- .../gdscript/ElHacedorDeCosas.gd | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/gdscript/ElHacedorDeCosas.gd diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/gdscript/ElHacedorDeCosas.gd b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/gdscript/ElHacedorDeCosas.gd new file mode 100644 index 0000000000..a7a0f25901 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/gdscript/ElHacedorDeCosas.gd @@ -0,0 +1,143 @@ +# Operadores + +#en GDscript todo script tiene que estar asociado a una escena o nodo para poder ejecutarlo + +#Operadores Aritméticos +extends Node +func _ready(): #la función _ready hace que la función se ejecute al momento de iniciar la ecena y solo puede ser usada una vez por script + #suma + print(10 + 3) + #resta + print(10 - 3) + #multiplicación + print(10 * 3) + #división + print(10 / 3.0) #si no se especifica que uno de los dos numeros es flotante te dará siempre como resultado un entero + print(10 / float(3)) #se puede hacer de estas dos formas + #modulo o resto + print(10 % 3) + #potencia + print(10 ** 3) + +#Operadores de comparación +extends Node +func _ready(): + var x = 2 + print ("x = " + str(x)) #para poder hacer print a una variable de tipo texto y una de tipo booleano a la vez + #Igualdad # tienes que convertir esta a texto + print("x == 10 = " + str(x == 10)) + #Desigualdad + print("x != 10 = " + str(x != 10)) + #Mayor que + print("x > 10 = " + str(x > 10)) + #Menor que + print("x < 10 = " + str(x < 10)) + #Mayor o igual que + print("x >= 10 = " + str(x >= 10)) + #Menor o igual que + print("x <= 10 = " + str(x <= 10)) + +#Operadores lógicos +extends Node +func _ready(): + # "and" o "&&" + print("(2 > 3 and 4 + 3 = 7)= " + str(2 > 3 and (4 + 3 == 7))) + # "or" o "||" + print("(2 > 3 or 4 + 3 = 7)= " + str(2 > 3 or (4 + 3 == 7))) + # "not" o "!" + print("not 3 > 2 = " + str(not 3 > 2)) + +#Operadores de asignación +#Las asignaciones en GDScript no pueden estar dentro de expreciones +extends Node +func _ready(): + #Asignación + var y = 7 + #Suma y asignación + y += 2 + print(y) + #Resta y asignación + y -= 2 + print(y) + #Multiplicación y asignación + y *= 2 + print(y) + #División y asignación + y /= 2 + print(y) + #Resto y asignación + y %= 2 + print(y) + #Exponente y asignación + y **= 2 + print(y) + +#Operadores de pertenencia +extends Node +func _ready(): + # in + print("u in pablo = " + str("u" in "pablo")) + print("a in pablo = " + str("a" in "pablo")) + # not in + print("u not in pablo = " + str("u" not in "pablo")) + print("a not in pablo = " + str("a" not in "pablo")) + +#Operadores de bit +extends Node +func _ready(): + var numero_uno = 10 #1010 + var numero_dos = 5 #0101 + # "&" o "AND" + print("10 & 5 = " + str(numero_uno & numero_dos)) #0 = 0000 + # "^" o "XOR" + print("10 ^ 5 = " + str(numero_uno ^ numero_dos)) #15 = 1111 + # "|" o "OR" + print("10 | 5 = " + str(numero_uno | numero_dos)) #15 = 1111 + # "~" o "NOT" + print("~10 = " + str(~numero_uno)) #-11 + # Desplazamiento a la derecha o ">>" + print("10 >> 3 = " + str(numero_uno >> 3)) #1 = 0000001 + # Desplazamiento a la izquierda o "<<" + print("10 << 3 = " + str(numero_uno << 3)) #80 = 1010000 + +#Estructuras de control + +#Condicionales +extends Node +var edad = 21 +func _ready(): + #Condicional "si" o "if" + if (edad < 18): + print ("eres menor de edad") + #Condicional "sino, si" o "elif" + elif (edad > 29): + print("eres un adulto") + #Condicional "sino" o "else" + else: print("eres un joven adulto") + +#Iterativas +extends Node +func _ready(): + for i in 7: + print(i) + for i in range(7): + print(i) + #while + var i = 0 + while (i< 12): + print(i) + i += 2 + +#Excepciones +#GDScript no maneja execpriones y la explicaciñon sacada de la pagina de GDScript es la siguiente: +#"Creemos que los juegos no deben fallar no importa la situación. Si una situación inesperada sucede, +#Godot mostrara un error (el cual puede incluso llevarte al script), +#pero seguidamente intentara recuperarse lo mejor posible y continuar en la medida de lo posible." + + +#Ejercicio extra +extends Node +func _ready(): + for numero in range(10, 56, 2): #en el rango entre 10 y 56 avanza cada 2 numeros + if numero != 16 and numero % 3 != 0: + print(numero) From ea75d5268692e1564b504080c05a998f886dbb3a Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Tue, 16 Jul 2024 22:51:55 +0200 Subject: [PATCH 20/24] #20 - Python --- .../python/EmmanuelMMontesinos.py | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 Roadmap/20 - PETICIONES HTTP/python/EmmanuelMMontesinos.py diff --git a/Roadmap/20 - PETICIONES HTTP/python/EmmanuelMMontesinos.py b/Roadmap/20 - PETICIONES HTTP/python/EmmanuelMMontesinos.py new file mode 100644 index 0000000000..98acda6afe --- /dev/null +++ b/Roadmap/20 - PETICIONES HTTP/python/EmmanuelMMontesinos.py @@ -0,0 +1,126 @@ +""" +/* + * EJERCICIO: + * Utilizando un mecanismo de peticiones HTTP de tu lenguaje, realiza + * una petición a la web que tú quieras, verifica que dicha petición + * fue exitosa y muestra por consola el contenido de la web. + */ +""" + +# Peticiones HTTP +import requests + +respuesta = requests.get("https://retosdeprogramacion.com/") + +if respuesta.status_code == 200: + print(respuesta.text) + +else: + print(f"Hay un error: {respuesta.status_code}") + +""" + * DIFICULTAD EXTRA (opcional): + * Utilizando la PokéAPI (https://pokeapi.co), crea un programa por + * terminal al que le puedas solicitar información de un Pokémon concreto + * utilizando su nombre o número. + * - Muestra el nombre, id, peso, altura y tipo(s) del Pokémon + * - Muestra el nombre de su cadena de evoluciones + * - Muestra los juegos en los que aparece + * - Controla posibles errores +""" + +# Clase para la consulta +class PokeConsulta: + + URL = "https://pokeapi.co/api/v2/pokemon/" + + # Función para imprimir listas + def anidado(self,campo,nombre=None,evoluciones=False): + ciclo = 0 + # Si NO son evoluciones + if not evoluciones: + for n in campo: + ciclo += 1 + print(f"{ciclo} - {n}") + # Si son evoluciones + else: + marcador = "Pre-Evolución" + for n in campo: + ciclo += 1 + if nombre == n: + marcador = "Pokemon Actual" + elif nombre != n and marcador == "Pokemon Actual": + marcador = "Evolución" + print(f"{ciclo} - {n} ({marcador})") + + print() + + # Función para consultar a la Api + def consultar(self,consulta): + + respuesta = requests.get(f"{PokeConsulta.URL+str(consulta)}") + + if respuesta.status_code == 200: + # Asigna valores para despues imprimirlos + pokemon = respuesta.json() + nombre = pokemon["name"].title() + id = pokemon["id"] + peso = pokemon["weight"] + altura = pokemon["height"] + tipos = [t["type"]["name"].title() for t in pokemon["types"]] + + # Nueva request para obtener todas las evoluciones + evoluciones = [] + respuesta_evo = requests.get(f"https://pokeapi.co/api/v2/pokemon-species/{id}") + respuesta_evo = respuesta_evo.json() + url_evo = respuesta_evo["evolution_chain"]["url"] + respuesta_evo = requests.get(url_evo) + respuesta_evo = respuesta_evo.json() + + check = False + nido = respuesta_evo["chain"] + baby = None + if nido["is_baby"] == True: + baby = nido["species"]["name"].title() + while not check: + evoluciones.append(nido["species"]["name"].title()) + if len(nido["evolves_to"]) == 0: + check = True + else: + nido = nido["evolves_to"][0] + # Obtener todos los juegos donde aparece + juegos = [game["version"]["name"].title() for game in pokemon["game_indices"]] + + # Imprimir Info + print(f"Nombre: {nombre}") + print(f"ID: {id}") + print(f"Peso: {peso}") + print(f"Altura: {altura}") + print() + print("Evoluciones:") + print(f"Bebe: {baby}") + self.anidado(evoluciones,nombre=nombre,evoluciones=True) + print("Tipos:") + self.anidado(tipos) + print("Ha salido en los siguientes Juegos:") + self.anidado(juegos) + else: + print(f"{consulta} no aparece en la api, comprueba que sea un nombre/numero válido") + +# Programa en terminal +def program_terminal(): + + check = False + consulta = PokeConsulta() + while not check: + + solicitud = input("Ponga el numero o el nombre de un pokemon (escribir 'salir' para cerrar): ") + + if solicitud.lower() == "salir": + check = True + else: + consulta.consultar(solicitud) + +# Pruebas +if __name__ == "__main__": + program_terminal() From bbdd1e4905352fef0d3f182655d186280fba167f Mon Sep 17 00:00:00 2001 From: kenysdev Date: Tue, 16 Jul 2024 16:13:35 -0500 Subject: [PATCH 21/24] 29-vb.net-SOLID-ISP --- Roadmap/29 - SOLID ISP/vb.net/kenysdev.vb | 150 ++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 Roadmap/29 - SOLID ISP/vb.net/kenysdev.vb diff --git a/Roadmap/29 - SOLID ISP/vb.net/kenysdev.vb b/Roadmap/29 - SOLID ISP/vb.net/kenysdev.vb new file mode 100644 index 0000000000..64bc915003 --- /dev/null +++ b/Roadmap/29 - SOLID ISP/vb.net/kenysdev.vb @@ -0,0 +1,150 @@ +' ╔══════════════════════════════════════╗ +' ║ Autor: Kenys Alvarado              ║ +' ║ GitHub: https://github.com/Kenysdev  ║ +' ║ 2024 - VB.NET                       ║ +' ╚══════════════════════════════════════╝ +'----------------------------------------------------- +'* SOLID: PRINCIPIO DE SEGREGACIÓN DE INTERFACES (ISP) +'----------------------------------------------------- +' - Una clase no debería estar obligada a implementar interfaces que no utiliza. +' Evitando crear grandes clases monolíticas. + +'__________________________ +' NOTA: Este ejemplo muestra el uso CORRECTO. Para suponer un ejemplo que viole el principio, sería. +'       Imaginar todos los métodos siguientes, en una sola interfaz, entonces algunos dispositivos +'      implementarían una interfaz que no necesitan. + +Public Interface IPlayable + Sub Play() +End Interface + +Public Interface IDisplayable + Sub Display() +End Interface + +' ____________________________________________________ +' Implementar +Public Class Speaker + Implements IPlayable + + Public Sub Play() Implements IPlayable.Play + Console.WriteLine("El altavoz está reproduciendo música.") + End Sub +End Class + +Public Class Phone + Implements IPlayable, IDisplayable + + Public Sub Play() Implements IPlayable.Play + Console.WriteLine("El teléfono está reproduciendo una canción.") + End Sub + + Public Sub Display() Implements IDisplayable.Display + Console.WriteLine("El teléfono está mostrando la pantalla de reproducción.") + End Sub +End Class + +'__________________________ +'* EJERCICIO +'* Crea un gestor de impresoras. +'* Requisitos: +'* 1. Algunas impresoras sólo imprimen en blanco y negro. +'* 2. Otras sólo a color. +'* 3. Otras son multifunción, pueden imprimir, escanear y enviar fax. +'* Instrucciones: +'* 1. Implementa el sistema, con los diferentes tipos de impresoras y funciones. +'* 2. Aplica el ISP a la implementación. +'* 3. Desarrolla un código que compruebe que se cumple el principio. + +Public Interface IPrinter + Sub PrintFile(file As String) +End Interface + +Public Interface IScanner + Sub ToScan(pathSave As String) +End Interface + +Public Interface IFax + Sub SendFile(file As String, phoneNumber As Integer) +End Interface + +' ____________________________________________________ +' Implementaciones +Public Class MonoPrinter + Implements IPrinter + + Public Sub PrintFile(file As String) Implements IPrinter.PrintFile + Console.WriteLine(vbCrLf + "Impresora blanco y negro:") + Console.WriteLine(file + " se imprimió.") + End Sub +End Class + +Public Class ColorPrinter + Implements IPrinter + + Public Sub PrintFile(file As String) Implements IPrinter.PrintFile + Console.WriteLine(vbCrLf + "Impresora a color:") + Console.WriteLine(file + " se imprimió.") + End Sub +End Class + +Public Class Scanner + Implements IScanner + + Public Sub ToScan(pathSave As String) Implements IScanner.ToScan + Console.WriteLine(vbCrLf + "Escaneo realizado, Guardado en: " + pathSave) + End Sub +End Class + +Public Class Fax + Implements IFax + + Public Sub SendFile(file As String, phoneNumber As Integer) Implements IFax.SendFile + Console.WriteLine(vbCrLf + $"{file} Fue enviado a: {phoneNumber}") + End Sub +End Class + +Public Class MultiFunctionPrinter + Public monoPrinter As New MonoPrinter + Public colorPrinter As New ColorPrinter + Public theScanner As New Scanner + Public fax As New Fax +End Class + +' ____________________________________________________ +Public Module Program + Public Sub Main() + ' Exs 1 + Dim phone As New Phone() + phone.Play() + phone.Display() + + Dim speaker As New Speaker() + speaker.Play() + + '_____________________________________________ + ' Exs 2 + Console.WriteLine(vbCrLf + "Exs #2") + + Dim MonoPrinter As New MonoPrinter + MonoPrinter.PrintFile("filex.pdf") + + Dim ColorPrinter As New ColorPrinter + ColorPrinter.PrintFile("filex.pdf") + + Dim theScanner As New Scanner + theScanner.ToScan("c:\\docs") + + Dim Fax As New Fax + Fax.SendFile("filex.pdf", 12345678) + + Console.WriteLine(vbCrLf + "___________" + vbCrLf + "Multifunción") + + Dim MultiFunctionPrinter As New MultiFunctionPrinter + MultiFunctionPrinter.monoPrinter.PrintFile("filex.pdf") + MultiFunctionPrinter.colorPrinter.PrintFile("filex.pdf") + MultiFunctionPrinter.theScanner.ToScan("c:\\docs") + MultiFunctionPrinter.fax.SendFile("filex.pdf", 12345678) + + End Sub +End Module From ebe897bc652de7df9ea629c519dba2054855b728 Mon Sep 17 00:00:00 2001 From: mouredev Date: Wed, 17 Jul 2024 00:14:00 +0000 Subject: [PATCH 22/24] Update stats --- Roadmap/stats.json | 822 +++++++++++++++++++++++---------------------- 1 file changed, 414 insertions(+), 408 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index c79ce85812..ae68ea579f 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,18 +1,18 @@ { "challenges_total": 30, "languages_total": 48, - "files_total": 5566, - "users_total": 947, + "files_total": 5578, + "users_total": 948, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1061 + "count": 1062 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 647 + "count": 648 }, { "order": 3, @@ -52,7 +52,7 @@ { "order": 10, "name": "09 - HERENCIA", - "count": 190 + "count": 191 }, { "order": 11, @@ -72,7 +72,7 @@ { "order": 14, "name": "13 - PRUEBAS UNITARIAS", - "count": 109 + "count": 110 }, { "order": 15, @@ -92,12 +92,12 @@ { "order": 18, "name": "17 - ITERACIONES", - "count": 94 + "count": 95 }, { "order": 19, "name": "18 - CONJUNTOS", - "count": 92 + "count": 94 }, { "order": 20, @@ -152,39 +152,39 @@ { "order": 30, "name": "29 - SOLID ISP", - "count": 3 + "count": 8 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 2380, - "percentage": 42.76 + "count": 2382, + "percentage": 42.7 }, { "order": 2, "name": "javascript", - "count": 1116, - "percentage": 20.05 + "count": 1117, + "percentage": 20.03 }, { "order": 3, "name": "java", - "count": 472, - "percentage": 8.48 + "count": 476, + "percentage": 8.53 }, { "order": 4, "name": "typescript", "count": 227, - "percentage": 4.08 + "percentage": 4.07 }, { "order": 5, "name": "c#", - "count": 217, - "percentage": 3.9 + "count": 218, + "percentage": 3.91 }, { "order": 6, @@ -196,19 +196,19 @@ "order": 7, "name": "kotlin", "count": 158, - "percentage": 2.84 + "percentage": 2.83 }, { "order": 8, "name": "swift", "count": 157, - "percentage": 2.82 + "percentage": 2.81 }, { "order": 9, "name": "php", - "count": 123, - "percentage": 2.21 + "count": 124, + "percentage": 2.22 }, { "order": 10, @@ -242,15 +242,15 @@ }, { "order": 15, - "name": "ocaml", + "name": "vb.net", "count": 30, "percentage": 0.54 }, { "order": 16, - "name": "vb.net", - "count": 29, - "percentage": 0.52 + "name": "ocaml", + "count": 30, + "percentage": 0.54 }, { "order": 17, @@ -261,8 +261,8 @@ { "order": 18, "name": "pascal", - "count": 15, - "percentage": 0.27 + "count": 16, + "percentage": 0.29 }, { "order": 19, @@ -362,49 +362,49 @@ }, { "order": 35, - "name": "raku", + "name": "gdscript", "count": 2, "percentage": 0.04 }, { "order": 36, - "name": "zig", + "name": "raku", "count": 2, "percentage": 0.04 }, { "order": 37, - "name": "ada", + "name": "zig", "count": 2, "percentage": 0.04 }, { "order": 38, - "name": "haskell", + "name": "ada", "count": 2, "percentage": 0.04 }, { "order": 39, - "name": "tcl", - "count": 1, - "percentage": 0.02 + "name": "haskell", + "count": 2, + "percentage": 0.04 }, { "order": 40, - "name": "clojure", + "name": "tcl", "count": 1, "percentage": 0.02 }, { "order": 41, - "name": "harbour", + "name": "clojure", "count": 1, "percentage": 0.02 }, { "order": 42, - "name": "gdscript", + "name": "harbour", "count": 1, "percentage": 0.02 }, @@ -449,13 +449,13 @@ { "order": 1, "name": "miguelex", - "count": 140, + "count": 141, "languages": 15 }, { "order": 2, "name": "kenysdev", - "count": 116, + "count": 118, "languages": 4 }, { @@ -538,22 +538,22 @@ }, { "order": 16, + "name": "edalmava", + "count": 40, + "languages": 15 + }, + { + "order": 17, "name": "didacdev", "count": 40, "languages": 5 }, { - "order": 17, + "order": 18, "name": "raulg91", "count": 39, "languages": 2 }, - { - "order": 18, - "name": "edalmava", - "count": 38, - "languages": 15 - }, { "order": 19, "name": "alexdevrep", @@ -658,19 +658,19 @@ }, { "order": 36, - "name": "any7dev", - "count": 29, - "languages": 2 + "name": "asjordi", + "count": 30, + "languages": 1 }, { "order": 37, - "name": "mouredev", + "name": "any7dev", "count": 29, - "languages": 1 + "languages": 2 }, { "order": 38, - "name": "asjordi", + "name": "mouredev", "count": 29, "languages": 1 }, @@ -988,61 +988,61 @@ }, { "order": 91, - "name": "oriaj3", + "name": "chartypes", "count": 15, - "languages": 1 + "languages": 2 }, { "order": 92, - "name": "seandsun", + "name": "oriaj3", "count": 15, "languages": 1 }, { "order": 93, - "name": "sniker1223", - "count": 14, - "languages": 4 + "name": "jafeito", + "count": 15, + "languages": 1 }, { "order": 94, - "name": "gonzadev28", - "count": 14, - "languages": 2 + "name": "seandsun", + "count": 15, + "languages": 1 }, { "order": 95, - "name": "andresgcastillo", + "name": "sniker1223", "count": 14, - "languages": 2 + "languages": 4 }, { "order": 96, - "name": "ygriegasb", + "name": "gonzadev28", "count": 14, "languages": 2 }, { "order": 97, - "name": "chartypes", + "name": "andresgcastillo", "count": 14, "languages": 2 }, { "order": 98, - "name": "kuroz00", + "name": "ygriegasb", "count": 14, "languages": 2 }, { "order": 99, - "name": "paula2409", + "name": "kuroz00", "count": 14, - "languages": 1 + "languages": 2 }, { "order": 100, - "name": "jafeito", + "name": "paula2409", "count": 14, "languages": 1 }, @@ -1360,73 +1360,73 @@ }, { "order": 153, - "name": "teren91", + "name": "julian98789", "count": 10, "languages": 1 }, { "order": 154, - "name": "julianbuitragocharry-dev", - "count": 9, - "languages": 3 + "name": "teren91", + "count": 10, + "languages": 1 }, { "order": 155, - "name": "luisolivaresj", + "name": "julianbuitragocharry-dev", "count": 9, - "languages": 2 + "languages": 3 }, { "order": 156, - "name": "djsurgeon", + "name": "luisolivaresj", "count": 9, "languages": 2 }, { "order": 157, - "name": "troynebula", + "name": "djsurgeon", "count": 9, - "languages": 1 + "languages": 2 }, { "order": 158, - "name": "jcdm60", + "name": "troynebula", "count": 9, "languages": 1 }, { "order": 159, - "name": "gjbecerrae", + "name": "jcdm60", "count": 9, "languages": 1 }, { "order": 160, - "name": "yoezequiel", + "name": "gjbecerrae", "count": 9, "languages": 1 }, { "order": 161, - "name": "karys4", + "name": "yoezequiel", "count": 9, "languages": 1 }, { "order": 162, - "name": "brockar", + "name": "karys4", "count": 9, "languages": 1 }, { "order": 163, - "name": "omarland", + "name": "brockar", "count": 9, "languages": 1 }, { "order": 164, - "name": "julian98789", + "name": "omarland", "count": 9, "languages": 1 }, @@ -1558,129 +1558,129 @@ }, { "order": 186, - "name": "josecox13", + "name": "bytecodesky", "count": 7, "languages": 1 }, { "order": 187, - "name": "hectordbh", + "name": "josecox13", "count": 7, "languages": 1 }, { "order": 188, - "name": "ocandodev", + "name": "hectordbh", "count": 7, "languages": 1 }, { "order": 189, - "name": "18miguelgalarza", + "name": "ocandodev", "count": 7, "languages": 1 }, { "order": 190, - "name": "abrahamraies", + "name": "18miguelgalarza", "count": 7, "languages": 1 }, { "order": 191, - "name": "andreavzqz", + "name": "abrahamraies", "count": 7, "languages": 1 }, { "order": 192, - "name": "marinaortells", + "name": "andreavzqz", "count": 7, "languages": 1 }, { "order": 193, - "name": "ldre3", + "name": "marinaortells", "count": 7, "languages": 1 }, { "order": 194, - "name": "mtirador", + "name": "ldre3", "count": 7, "languages": 1 }, { "order": 195, - "name": "fidelysla", - "count": 6, - "languages": 3 + "name": "mtirador", + "count": 7, + "languages": 1 }, { "order": 196, - "name": "curtobrull", + "name": "fidelysla", "count": 6, "languages": 3 }, { "order": 197, - "name": "devknn", + "name": "curtobrull", "count": 6, - "languages": 2 + "languages": 3 }, { "order": 198, - "name": "troleomotor10", + "name": "devknn", "count": 6, "languages": 2 }, { "order": 199, - "name": "roswer13", + "name": "troleomotor10", "count": 6, "languages": 2 }, { "order": 200, - "name": "danilo0203", + "name": "roswer13", "count": 6, "languages": 2 }, { "order": 201, - "name": "rserradev", + "name": "danilo0203", "count": 6, "languages": 2 }, { "order": 202, - "name": "luisk0706", + "name": "rserradev", "count": 6, "languages": 2 }, { "order": 203, - "name": "luterfloyd", + "name": "luisk0706", "count": 6, "languages": 2 }, { "order": 204, - "name": "isaias-alt", + "name": "luterfloyd", "count": 6, "languages": 2 }, { "order": 205, - "name": "volumidev", + "name": "isaias-alt", "count": 6, "languages": 2 }, { "order": 206, - "name": "bytecodesky", + "name": "volumidev", "count": 6, - "languages": 1 + "languages": 2 }, { "order": 207, @@ -3466,1513 +3466,1513 @@ }, { "order": 504, - "name": "peibolstrike", + "name": "elhacedordecosas", "count": 2, "languages": 1 }, { "order": 505, - "name": "freddyasierraj", + "name": "peibolstrike", "count": 2, "languages": 1 }, { "order": 506, - "name": "vicgallego", + "name": "freddyasierraj", "count": 2, "languages": 1 }, { "order": 507, - "name": "gomezcamilo9701", + "name": "vicgallego", "count": 2, "languages": 1 }, { "order": 508, - "name": "nicolastapiasanz", + "name": "gomezcamilo9701", "count": 2, "languages": 1 }, { "order": 509, - "name": "victormugo", + "name": "nicolastapiasanz", "count": 2, "languages": 1 }, { "order": 510, - "name": "porto1090", + "name": "victormugo", "count": 2, "languages": 1 }, { "order": 511, - "name": "cristiansystem", + "name": "porto1090", "count": 2, "languages": 1 }, { "order": 512, - "name": "fefestuve", + "name": "cristiansystem", "count": 2, "languages": 1 }, { "order": 513, - "name": "fsfigueroa77", + "name": "fefestuve", "count": 2, "languages": 1 }, { "order": 514, - "name": "johannhsdev", + "name": "fsfigueroa77", "count": 2, "languages": 1 }, { "order": 515, - "name": "jago86", + "name": "johannhsdev", "count": 2, "languages": 1 }, { "order": 516, - "name": "lorenamesa", + "name": "jago86", "count": 2, "languages": 1 }, { "order": 517, - "name": "diegokarabin", + "name": "lorenamesa", "count": 2, "languages": 1 }, { "order": 518, - "name": "reanthonyh", + "name": "diegokarabin", "count": 2, "languages": 1 }, { "order": 519, - "name": "matiasfarfan89", + "name": "reanthonyh", "count": 2, "languages": 1 }, { "order": 520, - "name": "glaboryp", + "name": "matiasfarfan89", "count": 2, "languages": 1 }, { "order": 521, - "name": "angelvelasco1", + "name": "glaboryp", "count": 2, "languages": 1 }, { "order": 522, - "name": "wesborland-github", + "name": "angelvelasco1", "count": 2, "languages": 1 }, { "order": 523, - "name": "jaimemunozdev", + "name": "wesborland-github", "count": 2, "languages": 1 }, { "order": 524, - "name": "lmedina96", + "name": "jaimemunozdev", "count": 2, "languages": 1 }, { "order": 525, - "name": "murquisdev", + "name": "lmedina96", "count": 2, "languages": 1 }, { "order": 526, - "name": "tomasmarquez81", + "name": "murquisdev", "count": 2, "languages": 1 }, { "order": 527, - "name": "rikar2o", + "name": "tomasmarquez81", "count": 2, "languages": 1 }, { "order": 528, - "name": "akzorla", + "name": "rikar2o", "count": 2, "languages": 1 }, { "order": 529, - "name": "memogv", + "name": "akzorla", "count": 2, "languages": 1 }, { "order": 530, - "name": "cesarocbu", + "name": "memogv", "count": 2, "languages": 1 }, { "order": 531, - "name": "ovjohn", + "name": "cesarocbu", "count": 2, "languages": 1 }, { "order": 532, - "name": "nxl22", + "name": "ovjohn", "count": 2, "languages": 1 }, { "order": 533, - "name": "cpcarlosprieto", + "name": "nxl22", "count": 2, "languages": 1 }, { "order": 534, - "name": "rolo27s", + "name": "cpcarlosprieto", "count": 2, "languages": 1 }, { "order": 535, - "name": "valeriatorrealba", + "name": "rolo27s", "count": 2, "languages": 1 }, { "order": 536, - "name": "aleoe01", + "name": "valeriatorrealba", "count": 2, "languages": 1 }, { "order": 537, - "name": "soldochris", + "name": "aleoe01", "count": 2, "languages": 1 }, { "order": 538, - "name": "misterdan100", + "name": "soldochris", "count": 2, "languages": 1 }, { "order": 539, - "name": "jhonf1992", + "name": "misterdan100", "count": 2, "languages": 1 }, { "order": 540, - "name": "farthaz", + "name": "jhonf1992", "count": 2, "languages": 1 }, { "order": 541, - "name": "leonardo291024", + "name": "farthaz", "count": 2, "languages": 1 }, { "order": 542, - "name": "jeisonredondo", + "name": "leonardo291024", "count": 2, "languages": 1 }, { "order": 543, - "name": "haryblanco20", + "name": "jeisonredondo", "count": 2, "languages": 1 }, { "order": 544, - "name": "miguelrejon96", + "name": "haryblanco20", "count": 2, "languages": 1 }, { "order": 545, - "name": "doblea74", + "name": "miguelrejon96", "count": 2, "languages": 1 }, { "order": 546, - "name": "davhage", + "name": "doblea74", "count": 2, "languages": 1 }, { "order": 547, - "name": "adrs1166ma", + "name": "davhage", "count": 2, "languages": 1 }, { "order": 548, - "name": "peeanoot", + "name": "adrs1166ma", "count": 2, "languages": 1 }, { "order": 549, - "name": "isidrojng", + "name": "peeanoot", "count": 2, "languages": 1 }, { "order": 550, - "name": "arhl2023", + "name": "isidrojng", "count": 2, "languages": 1 }, { "order": 551, - "name": "yowcloud", + "name": "arhl2023", "count": 2, "languages": 1 }, { "order": 552, - "name": "jcknot", + "name": "yowcloud", "count": 2, "languages": 1 }, { "order": 553, - "name": "coronelsam", + "name": "jcknot", "count": 2, "languages": 1 }, { "order": 554, - "name": "hersac", + "name": "coronelsam", "count": 2, "languages": 1 }, { "order": 555, - "name": "rrcoder", + "name": "hersac", "count": 2, "languages": 1 }, { "order": 556, - "name": "diegosilval", + "name": "rrcoder", "count": 2, "languages": 1 }, { "order": 557, - "name": "tiaguiito3", + "name": "diegosilval", "count": 2, "languages": 1 }, { "order": 558, - "name": "elmarqueli", + "name": "tiaguiito3", "count": 2, "languages": 1 }, { "order": 559, - "name": "rikar20", + "name": "elmarqueli", "count": 2, "languages": 1 }, { "order": 560, - "name": "reaien", + "name": "rikar20", "count": 2, "languages": 1 }, { "order": 561, - "name": "frannmv", + "name": "reaien", "count": 2, "languages": 1 }, { "order": 562, - "name": "lordzzz777", + "name": "frannmv", "count": 2, "languages": 1 }, { "order": 563, - "name": "ssanjua", + "name": "lordzzz777", "count": 2, "languages": 1 }, { "order": 564, - "name": "raulallue", + "name": "ssanjua", "count": 2, "languages": 1 }, { "order": 565, - "name": "luciarf", + "name": "raulallue", "count": 2, "languages": 1 }, { "order": 566, - "name": "aserranot", + "name": "luciarf", "count": 2, "languages": 1 }, { "order": 567, - "name": "hawkbott", + "name": "aserranot", "count": 2, "languages": 1 }, { "order": 568, - "name": "poetry0354", + "name": "hawkbott", "count": 2, "languages": 1 }, { "order": 569, - "name": "nandaalf", + "name": "poetry0354", "count": 2, "languages": 1 }, { "order": 570, - "name": "nikorasu-d", - "count": 1, + "name": "nandaalf", + "count": 2, "languages": 1 }, { "order": 571, - "name": "ddaniel27", + "name": "nikorasu-d", "count": 1, "languages": 1 }, { "order": 572, - "name": "jjaljuria", + "name": "ddaniel27", "count": 1, "languages": 1 }, { "order": 573, - "name": "h4cker54n", + "name": "jjaljuria", "count": 1, "languages": 1 }, { "order": 574, - "name": "batmarc91", + "name": "h4cker54n", "count": 1, "languages": 1 }, { "order": 575, - "name": "ingjavierpinilla", + "name": "batmarc91", "count": 1, "languages": 1 }, { "order": 576, - "name": "cuervo23alpha", + "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { "order": 577, - "name": "joancharles07", + "name": "cuervo23alpha", "count": 1, "languages": 1 }, { "order": 578, - "name": "mauricioobgo", + "name": "joancharles07", "count": 1, "languages": 1 }, { "order": 579, - "name": "angel-agis", + "name": "mauricioobgo", "count": 1, "languages": 1 }, { "order": 580, - "name": "lordzzz", + "name": "angel-agis", "count": 1, "languages": 1 }, { "order": 581, - "name": "alinares94", + "name": "lordzzz", "count": 1, "languages": 1 }, { "order": 582, - "name": "jferchotorres", + "name": "alinares94", "count": 1, "languages": 1 }, { "order": 583, - "name": "713avo", + "name": "jferchotorres", "count": 1, "languages": 1 }, { "order": 584, - "name": "micendev", + "name": "713avo", "count": 1, "languages": 1 }, { "order": 585, - "name": "derobpe", + "name": "micendev", "count": 1, "languages": 1 }, { "order": 586, - "name": "carlosmares", + "name": "derobpe", "count": 1, "languages": 1 }, { "order": 587, - "name": "vikernes27666", + "name": "carlosmares", "count": 1, "languages": 1 }, { "order": 588, - "name": "cub-tor", + "name": "vikernes27666", "count": 1, "languages": 1 }, { "order": 589, - "name": "nightmare79", + "name": "cub-tor", "count": 1, "languages": 1 }, { "order": 590, - "name": "luism95", + "name": "nightmare79", "count": 1, "languages": 1 }, { "order": 591, - "name": "santyjl44", + "name": "luism95", "count": 1, "languages": 1 }, { "order": 592, - "name": "riukac", + "name": "santyjl44", "count": 1, "languages": 1 }, { "order": 593, - "name": "wijimenezz", + "name": "riukac", "count": 1, "languages": 1 }, { "order": 594, - "name": "vickalc", + "name": "wijimenezz", "count": 1, "languages": 1 }, { "order": 595, - "name": "rafapg93", + "name": "vickalc", "count": 1, "languages": 1 }, { "order": 596, - "name": "rusian69", + "name": "rafapg93", "count": 1, "languages": 1 }, { "order": 597, - "name": "orzefox", + "name": "rusian69", "count": 1, "languages": 1 }, { "order": 598, - "name": "acirdeveloper", + "name": "orzefox", "count": 1, "languages": 1 }, { "order": 599, - "name": "sve-nnn", + "name": "acirdeveloper", "count": 1, "languages": 1 }, { "order": 600, - "name": "emiliordev", + "name": "sve-nnn", "count": 1, "languages": 1 }, { "order": 601, - "name": "edgarmedranoa", + "name": "emiliordev", "count": 1, "languages": 1 }, { "order": 602, - "name": "sergiopq", + "name": "edgarmedranoa", "count": 1, "languages": 1 }, { "order": 603, - "name": "davidsorroche", + "name": "sergiopq", "count": 1, "languages": 1 }, { "order": 604, - "name": "nicoloboo02", + "name": "davidsorroche", "count": 1, "languages": 1 }, { "order": 605, - "name": "righelch", + "name": "nicoloboo02", "count": 1, "languages": 1 }, { "order": 606, - "name": "jony-english22", + "name": "righelch", "count": 1, "languages": 1 }, { "order": 607, - "name": "angeloro", + "name": "jony-english22", "count": 1, "languages": 1 }, { "order": 608, - "name": "deathbat00", + "name": "angeloro", "count": 1, "languages": 1 }, { "order": 609, - "name": "albertovf", + "name": "deathbat00", "count": 1, "languages": 1 }, { "order": 610, - "name": "leonardo-henao", + "name": "albertovf", "count": 1, "languages": 1 }, { "order": 611, - "name": "bryanalzate007", + "name": "leonardo-henao", "count": 1, "languages": 1 }, { "order": 612, - "name": "c-blskv", + "name": "bryanalzate007", "count": 1, "languages": 1 }, { "order": 613, - "name": "emaerniquez", + "name": "c-blskv", "count": 1, "languages": 1 }, { "order": 614, - "name": "juancamilofvx", + "name": "emaerniquez", "count": 1, "languages": 1 }, { "order": 615, - "name": "davidbastosg", + "name": "juancamilofvx", "count": 1, "languages": 1 }, { "order": 616, - "name": "franespina", + "name": "davidbastosg", "count": 1, "languages": 1 }, { "order": 617, - "name": "girngoma", + "name": "franespina", "count": 1, "languages": 1 }, { "order": 618, - "name": "juampaweb", + "name": "girngoma", "count": 1, "languages": 1 }, { "order": 619, - "name": "javosss", + "name": "juampaweb", "count": 1, "languages": 1 }, { "order": 620, - "name": "francomyburg", + "name": "javosss", "count": 1, "languages": 1 }, { "order": 621, - "name": "neicervb", + "name": "francomyburg", "count": 1, "languages": 1 }, { "order": 622, - "name": "evilpodato04", + "name": "neicervb", "count": 1, "languages": 1 }, { "order": 623, - "name": "gabriel-dangelo", + "name": "evilpodato04", "count": 1, "languages": 1 }, { "order": 624, - "name": "agustinfccll", + "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { "order": 625, - "name": "miguel2rar", + "name": "agustinfccll", "count": 1, "languages": 1 }, { "order": 626, - "name": "anitandil", + "name": "miguel2rar", "count": 1, "languages": 1 }, { "order": 627, - "name": "miquelrr", + "name": "anitandil", "count": 1, "languages": 1 }, { "order": 628, - "name": "eamartin", + "name": "miquelrr", "count": 1, "languages": 1 }, { "order": 629, - "name": "josephinoo", + "name": "eamartin", "count": 1, "languages": 1 }, { "order": 630, - "name": "miguelmancebo", + "name": "josephinoo", "count": 1, "languages": 1 }, { "order": 631, - "name": "sherkla12e", + "name": "miguelmancebo", "count": 1, "languages": 1 }, { "order": 632, - "name": "acobo3", + "name": "sherkla12e", "count": 1, "languages": 1 }, { "order": 633, - "name": "tashidian", + "name": "acobo3", "count": 1, "languages": 1 }, { "order": 634, - "name": "perla-zg", + "name": "tashidian", "count": 1, "languages": 1 }, { "order": 635, - "name": "manuu42", + "name": "perla-zg", "count": 1, "languages": 1 }, { "order": 636, - "name": "m4xxdev", + "name": "manuu42", "count": 1, "languages": 1 }, { "order": 637, - "name": "lizzymaken", + "name": "m4xxdev", "count": 1, "languages": 1 }, { "order": 638, - "name": "giovanni-schmaily", + "name": "lizzymaken", "count": 1, "languages": 1 }, { "order": 639, - "name": "e-xtian", + "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { "order": 640, - "name": "claudios1980", + "name": "e-xtian", "count": 1, "languages": 1 }, { "order": 641, - "name": "pablom-2015", + "name": "claudios1980", "count": 1, "languages": 1 }, { "order": 642, - "name": "osneidert", + "name": "pablom-2015", "count": 1, "languages": 1 }, { "order": 643, - "name": "jgregoris", + "name": "osneidert", "count": 1, "languages": 1 }, { "order": 644, - "name": "danidan1214", + "name": "jgregoris", "count": 1, "languages": 1 }, { "order": 645, - "name": "salas89", + "name": "danidan1214", "count": 1, "languages": 1 }, { "order": 646, - "name": "pushodev", + "name": "salas89", "count": 1, "languages": 1 }, { "order": 647, - "name": "davidgramiro", + "name": "pushodev", "count": 1, "languages": 1 }, { "order": 648, - "name": "vickalck", + "name": "davidgramiro", "count": 1, "languages": 1 }, { "order": 649, - "name": "adcarret", + "name": "vickalck", "count": 1, "languages": 1 }, { "order": 650, - "name": "julioorozco05", + "name": "adcarret", "count": 1, "languages": 1 }, { "order": 651, - "name": "mrf1989", + "name": "julioorozco05", "count": 1, "languages": 1 }, { "order": 652, - "name": "erickcis", + "name": "mrf1989", "count": 1, "languages": 1 }, { "order": 653, - "name": "turudev1979", + "name": "erickcis", "count": 1, "languages": 1 }, { "order": 654, - "name": "snowcardenas", + "name": "turudev1979", "count": 1, "languages": 1 }, { "order": 655, - "name": "francgci", + "name": "snowcardenas", "count": 1, "languages": 1 }, { "order": 656, - "name": "cd1974", + "name": "francgci", "count": 1, "languages": 1 }, { "order": 657, - "name": "jalonso76", + "name": "cd1974", "count": 1, "languages": 1 }, { "order": 658, - "name": "sofiamfernandez", + "name": "jalonso76", "count": 1, "languages": 1 }, { "order": 659, - "name": "lluistech", + "name": "sofiamfernandez", "count": 1, "languages": 1 }, { "order": 660, - "name": "geridage", + "name": "lluistech", "count": 1, "languages": 1 }, { "order": 661, - "name": "yetlanezils", + "name": "geridage", "count": 1, "languages": 1 }, { "order": 662, - "name": "sergiovelayos", + "name": "yetlanezils", "count": 1, "languages": 1 }, { "order": 663, - "name": "juan-cruz01", + "name": "sergiovelayos", "count": 1, "languages": 1 }, { "order": 664, - "name": "carlosbb70", + "name": "juan-cruz01", "count": 1, "languages": 1 }, { "order": 665, - "name": "ignacioskm", + "name": "carlosbb70", "count": 1, "languages": 1 }, { "order": 666, - "name": "demegorash", + "name": "ignacioskm", "count": 1, "languages": 1 }, { "order": 667, - "name": "leo18q", + "name": "demegorash", "count": 1, "languages": 1 }, { "order": 668, - "name": "natanaelzubiri", + "name": "leo18q", "count": 1, "languages": 1 }, { "order": 669, - "name": "xcortes", + "name": "natanaelzubiri", "count": 1, "languages": 1 }, { "order": 670, - "name": "latorredev", + "name": "xcortes", "count": 1, "languages": 1 }, { "order": 671, - "name": "judithernandez", + "name": "latorredev", "count": 1, "languages": 1 }, { "order": 672, - "name": "hnaranjog", + "name": "judithernandez", "count": 1, "languages": 1 }, { "order": 673, - "name": "luceldasilva", + "name": "hnaranjog", "count": 1, "languages": 1 }, { "order": 674, - "name": "nachodev7", + "name": "luceldasilva", "count": 1, "languages": 1 }, { "order": 675, - "name": "albertomorilla", + "name": "nachodev7", "count": 1, "languages": 1 }, { "order": 676, - "name": "ferngpv", + "name": "albertomorilla", "count": 1, "languages": 1 }, { "order": 677, - "name": "jafuma0320", + "name": "ferngpv", "count": 1, "languages": 1 }, { "order": 678, - "name": "mjordanaam", + "name": "jafuma0320", "count": 1, "languages": 1 }, { "order": 679, - "name": "luisangeles20", + "name": "mjordanaam", "count": 1, "languages": 1 }, { "order": 680, - "name": "charly024", + "name": "luisangeles20", "count": 1, "languages": 1 }, { "order": 681, - "name": "eatsangels", + "name": "charly024", "count": 1, "languages": 1 }, { "order": 682, - "name": "v0l0v", + "name": "eatsangels", "count": 1, "languages": 1 }, { "order": 683, - "name": "devkenn", + "name": "v0l0v", "count": 1, "languages": 1 }, { "order": 684, - "name": "vmarialuzm", + "name": "devkenn", "count": 1, "languages": 1 }, { "order": 685, - "name": "and-y21", + "name": "vmarialuzm", "count": 1, "languages": 1 }, { "order": 686, - "name": "wilsonbarrera", + "name": "and-y21", "count": 1, "languages": 1 }, { "order": 687, - "name": "neftalyr", + "name": "wilsonbarrera", "count": 1, "languages": 1 }, { "order": 688, - "name": "anexo01", + "name": "neftalyr", "count": 1, "languages": 1 }, { "order": 689, - "name": "marcos0803", + "name": "anexo01", "count": 1, "languages": 1 }, { "order": 690, - "name": "dakkaj", + "name": "marcos0803", "count": 1, "languages": 1 }, { "order": 691, - "name": "juanalbornoz32", + "name": "dakkaj", "count": 1, "languages": 1 }, { "order": 692, - "name": "marcelinoarias369", + "name": "juanalbornoz32", "count": 1, "languages": 1 }, { "order": 693, - "name": "arturodlapaz17", + "name": "marcelinoarias369", "count": 1, "languages": 1 }, { "order": 694, - "name": "xhinto", + "name": "arturodlapaz17", "count": 1, "languages": 1 }, { "order": 695, - "name": "amitchellg", + "name": "xhinto", "count": 1, "languages": 1 }, { "order": 696, - "name": "neshurtado", + "name": "amitchellg", "count": 1, "languages": 1 }, { "order": 697, - "name": "diegogomezcor4", + "name": "neshurtado", "count": 1, "languages": 1 }, { "order": 698, - "name": "cristianvergaraf", + "name": "diegogomezcor4", "count": 1, "languages": 1 }, { "order": 699, - "name": "xalejandrow", + "name": "cristianvergaraf", "count": 1, "languages": 1 }, { "order": 700, - "name": "ndepaul82", + "name": "xalejandrow", "count": 1, "languages": 1 }, { "order": 701, - "name": "alejarandro", + "name": "ndepaul82", "count": 1, "languages": 1 }, { "order": 702, - "name": "johao23", + "name": "alejarandro", "count": 1, "languages": 1 }, { "order": 703, - "name": "gilbertho502", + "name": "johao23", "count": 1, "languages": 1 }, { "order": 704, - "name": "dacaldev", + "name": "gilbertho502", "count": 1, "languages": 1 }, { "order": 705, - "name": "javirr4", + "name": "dacaldev", "count": 1, "languages": 1 }, { "order": 706, - "name": "alejandro000", + "name": "javirr4", "count": 1, "languages": 1 }, { "order": 707, - "name": "emmanuelmmontesinos ", + "name": "alejandro000", "count": 1, "languages": 1 }, { "order": 708, - "name": "90dread", + "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { "order": 709, - "name": "gersonoroz", + "name": "90dread", "count": 1, "languages": 1 }, { "order": 710, - "name": "kshields51", + "name": "gersonoroz", "count": 1, "languages": 1 }, { "order": 711, - "name": "wallsified", + "name": "kshields51", "count": 1, "languages": 1 }, { "order": 712, - "name": "jchernandez87", + "name": "wallsified", "count": 1, "languages": 1 }, { "order": 713, - "name": "cris10026", + "name": "jchernandez87", "count": 1, "languages": 1 }, { "order": 714, - "name": "chema-dw", + "name": "cris10026", "count": 1, "languages": 1 }, { "order": 715, - "name": "masenace", + "name": "chema-dw", "count": 1, "languages": 1 }, { "order": 716, - "name": "pr1de-23", + "name": "masenace", "count": 1, "languages": 1 }, { "order": 717, - "name": "fergz1988", + "name": "pr1de-23", "count": 1, "languages": 1 }, { "order": 718, - "name": "zeraven09", + "name": "fergz1988", "count": 1, "languages": 1 }, { "order": 719, - "name": "betulioo", + "name": "zeraven09", "count": 1, "languages": 1 }, { "order": 720, - "name": "isaacdci", + "name": "betulioo", "count": 1, "languages": 1 }, { "order": 721, - "name": "gmedinat911", + "name": "isaacdci", "count": 1, "languages": 1 }, { "order": 722, - "name": "deivimiller", + "name": "gmedinat911", "count": 1, "languages": 1 }, { "order": 723, - "name": "cisneros2404", + "name": "deivimiller", "count": 1, "languages": 1 }, { "order": 724, - "name": "jereaguilar", + "name": "cisneros2404", "count": 1, "languages": 1 }, { "order": 725, - "name": "dimanu-py", + "name": "jereaguilar", "count": 1, "languages": 1 }, { "order": 726, - "name": "yamiyugi25", + "name": "dimanu-py", "count": 1, "languages": 1 }, { "order": 727, - "name": "g4nd4lf", + "name": "yamiyugi25", "count": 1, "languages": 1 }, { "order": 728, - "name": "sbngl", + "name": "g4nd4lf", "count": 1, "languages": 1 }, { "order": 729, - "name": "mbmaeso", + "name": "sbngl", "count": 1, "languages": 1 }, { "order": 730, - "name": "daniel-cas", + "name": "mbmaeso", "count": 1, "languages": 1 }, { "order": 731, - "name": "jaennova", + "name": "daniel-cas", "count": 1, "languages": 1 }, { "order": 732, - "name": "deiiviitdev", + "name": "jaennova", "count": 1, "languages": 1 }, { "order": 733, - "name": "jhordanluyo", + "name": "deiiviitdev", "count": 1, "languages": 1 }, { "order": 734, - "name": "acirdevelper", + "name": "jhordanluyo", "count": 1, "languages": 1 }, { "order": 735, - "name": "braiso-22", + "name": "acirdevelper", "count": 1, "languages": 1 }, { "order": 736, - "name": "luisalberto22", + "name": "braiso-22", "count": 1, "languages": 1 }, { "order": 737, - "name": "davidcv-dev", + "name": "luisalberto22", "count": 1, "languages": 1 }, { "order": 738, - "name": "alvarominarro", + "name": "davidcv-dev", "count": 1, "languages": 1 }, { "order": 739, - "name": "francisleble", + "name": "alvarominarro", "count": 1, "languages": 1 }, { "order": 740, - "name": "borjadelgadodev", + "name": "francisleble", "count": 1, "languages": 1 }, { "order": 741, - "name": "marcosjarrin", + "name": "borjadelgadodev", "count": 1, "languages": 1 }, { "order": 742, - "name": "marcosapodaca", + "name": "marcosjarrin", "count": 1, "languages": 1 }, { "order": 743, - "name": "manugonzalito", + "name": "marcosapodaca", "count": 1, "languages": 1 }, { "order": 744, - "name": "coletonosh", + "name": "manugonzalito", "count": 1, "languages": 1 }, { "order": 745, - "name": "serg032", + "name": "coletonosh", "count": 1, "languages": 1 }, { "order": 746, - "name": "seigigim", + "name": "serg032", "count": 1, "languages": 1 }, { "order": 747, - "name": "axelwestman", + "name": "seigigim", "count": 1, "languages": 1 }, { "order": 748, - "name": "is2095", + "name": "axelwestman", "count": 1, "languages": 1 }, { "order": 749, - "name": "manuhssj", + "name": "is2095", "count": 1, "languages": 1 }, { "order": 750, - "name": "lucc4sz", + "name": "manuhssj", "count": 1, "languages": 1 }, { "order": 751, - "name": "gizelads", + "name": "lucc4sz", "count": 1, "languages": 1 }, { "order": 752, - "name": "cibacoa", + "name": "gizelads", "count": 1, "languages": 1 }, { "order": 753, - "name": "jancalos", + "name": "cibacoa", "count": 1, "languages": 1 }, { "order": 754, - "name": "mauricioyair", + "name": "jancalos", "count": 1, "languages": 1 }, { "order": 755, - "name": "elhacedordecosas", + "name": "mauricioyair", "count": 1, "languages": 1 }, @@ -5860,270 +5860,276 @@ }, { "order": 903, - "name": "diegopardomontero", + "name": "marioyellowy", "count": 1, "languages": 1 }, { "order": 904, - "name": "antoniojzp86", + "name": "diegopardomontero", "count": 1, "languages": 1 }, { "order": 905, - "name": "angeldevsarrollo", + "name": "antoniojzp86", "count": 1, "languages": 1 }, { "order": 906, - "name": "deathbato", + "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { "order": 907, - "name": "sanuka78", + "name": "deathbato", "count": 1, "languages": 1 }, { "order": 908, - "name": "jony_english22", + "name": "sanuka78", "count": 1, "languages": 1 }, { "order": 909, - "name": "cristian-encalada", + "name": "jony_english22", "count": 1, "languages": 1 }, { "order": 910, - "name": "jrgim", + "name": "cristian-encalada", "count": 1, "languages": 1 }, { "order": 911, - "name": "adriansaint07", + "name": "jrgim", "count": 1, "languages": 1 }, { "order": 912, - "name": "cristianmr87", + "name": "adriansaint07", "count": 1, "languages": 1 }, { "order": 913, - "name": "javiir", + "name": "cristianmr87", "count": 1, "languages": 1 }, { "order": 914, - "name": "xhaloidx", + "name": "javiir", "count": 1, "languages": 1 }, { "order": 915, - "name": "algeloro", + "name": "xhaloidx", "count": 1, "languages": 1 }, { "order": 916, - "name": "v1k770r", + "name": "algeloro", "count": 1, "languages": 1 }, { "order": 917, - "name": "gianellannie", + "name": "v1k770r", "count": 1, "languages": 1 }, { "order": 918, - "name": "det3992", + "name": "gianellannie", "count": 1, "languages": 1 }, { "order": 919, - "name": "iguerrerov", + "name": "det3992", "count": 1, "languages": 1 }, { "order": 920, - "name": "serg_pq", + "name": "iguerrerov", "count": 1, "languages": 1 }, { "order": 921, - "name": "mathiur", + "name": "serg_pq", "count": 1, "languages": 1 }, { "order": 922, - "name": "fredylopez01", + "name": "mathiur", "count": 1, "languages": 1 }, { "order": 923, - "name": "chrystiancalderon", + "name": "fredylopez01", "count": 1, "languages": 1 }, { "order": 924, - "name": "lizandev", + "name": "chrystiancalderon", "count": 1, "languages": 1 }, { "order": 925, - "name": "santiagopereiraviroga", + "name": "lizandev", "count": 1, "languages": 1 }, { "order": 926, - "name": "albert-29", + "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { "order": 927, - "name": "lewisoneil", + "name": "albert-29", "count": 1, "languages": 1 }, { "order": 928, - "name": "durwian", + "name": "lewisoneil", "count": 1, "languages": 1 }, { "order": 929, - "name": "pvigo10", + "name": "durwian", "count": 1, "languages": 1 }, { "order": 930, - "name": "jlrojano", + "name": "pvigo10", "count": 1, "languages": 1 }, { "order": 931, - "name": "zyn7e", + "name": "jlrojano", "count": 1, "languages": 1 }, { "order": 932, - "name": "reneguzman7", + "name": "zyn7e", "count": 1, "languages": 1 }, { "order": 933, - "name": "adriangonzalezroble", + "name": "reneguzman7", "count": 1, "languages": 1 }, { "order": 934, - "name": "frankmon03", + "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { "order": 935, - "name": "alvaropg15", + "name": "frankmon03", "count": 1, "languages": 1 }, { "order": 936, - "name": "bycris13", + "name": "alvaropg15", "count": 1, "languages": 1 }, { "order": 937, - "name": "bjchavez", + "name": "bycris13", "count": 1, "languages": 1 }, { "order": 938, - "name": "willypaz243", + "name": "bjchavez", "count": 1, "languages": 1 }, { "order": 939, - "name": "qwik-zghieb", + "name": "willypaz243", "count": 1, "languages": 1 }, { "order": 940, - "name": "gonzalinuz18", + "name": "qwik-zghieb", "count": 1, "languages": 1 }, { "order": 941, - "name": "ouendinga", + "name": "gonzalinuz18", "count": 1, "languages": 1 }, { "order": 942, - "name": "deivisaherreraj", + "name": "ouendinga", "count": 1, "languages": 1 }, { "order": 943, - "name": "alfaroo1", + "name": "deivisaherreraj", "count": 1, "languages": 1 }, { "order": 944, - "name": "dgquintero", + "name": "alfaroo1", "count": 1, "languages": 1 }, { "order": 945, - "name": "torvicv", + "name": "dgquintero", "count": 1, "languages": 1 }, { "order": 946, - "name": "astrarothdlcxvi", + "name": "torvicv", "count": 1, "languages": 1 }, { "order": 947, + "name": "astrarothdlcxvi", + "count": 1, + "languages": 1 + }, + { + "order": 948, "name": "emersonxinay", "count": 1, "languages": 1 From 334412dd6bec954a41a79de251dc16c23bb956c3 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Wed, 17 Jul 2024 09:37:26 +0200 Subject: [PATCH 23/24] 21 - Python --- .../python/EmmanuelMMontesinos.py | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Roadmap/21 - CALLBACKS/python/EmmanuelMMontesinos.py diff --git a/Roadmap/21 - CALLBACKS/python/EmmanuelMMontesinos.py b/Roadmap/21 - CALLBACKS/python/EmmanuelMMontesinos.py new file mode 100644 index 0000000000..0b214ec734 --- /dev/null +++ b/Roadmap/21 - CALLBACKS/python/EmmanuelMMontesinos.py @@ -0,0 +1,60 @@ +""" +/* + * EJERCICIO: + * Explora el concepto de callback en tu lenguaje creando un ejemplo + * simple (a tu elección) que muestre su funcionamiento. + */ +""" + +# Callback + +def mi_callback(numero): + for n in range(numero): + print(f"Llamada a Callback nº {n+1} de {numero}") + +def ping(numero,callback): + if numero > 0: + callback(numero) + else: + print(f"{numero} no es mayor a 0") + +ping(20,mi_callback) + +""" + * DIFICULTAD EXTRA (opcional): + * Crea un simulador de pedidos de un restaurante utilizando callbacks. + * Estará formado por una función que procesa pedidos. + * Debe aceptar el nombre del plato, una callback de confirmación, una + * de listo y otra de entrega. + * - Debe imprimir un confirmación cuando empiece el procesamiento. + * - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre + * procesos. + * - Debe invocar a cada callback siguiendo un orden de procesado. + * - Debe notificar que el plato está listo o ha sido entregado. +""" +from time import sleep +from random import randint +def proceso_pedido(plato,confirmacion,listo,entregado): + + confirmacion(plato) + + tiempo_listo = randint(1,10) + sleep(tiempo_listo) + listo(plato,tiempo_listo) + + tiempo_entregado = randint(1,10) + sleep(tiempo_entregado) + entregado(plato,tiempo_entregado) + +def confirmacion(plato): + print(f"{plato} ha sido confirmado, pronto estara listo.") + +def listo(plato,tiempo): + print(f"{plato} esta listo en {tiempo}s") + +def entregado(plato,tiempo): + print(f"{plato} ha sido entregado en {tiempo}s") + +proceso_pedido("Tortilla de patatas",confirmacion,listo,entregado) +proceso_pedido("Burger XXL",confirmacion,listo,entregado) +proceso_pedido("Cordero Asado",confirmacion,listo,entregado) \ No newline at end of file From 5180372176e691111c5d93fa8ec6731b488a21d0 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Wed, 17 Jul 2024 09:45:51 +0200 Subject: [PATCH 24/24] threading.Thread correcion al ver otros ejercicios --- .../python/EmmanuelMMontesinos.py | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Roadmap/21 - CALLBACKS/python/EmmanuelMMontesinos.py b/Roadmap/21 - CALLBACKS/python/EmmanuelMMontesinos.py index 0b214ec734..c401bc30de 100644 --- a/Roadmap/21 - CALLBACKS/python/EmmanuelMMontesinos.py +++ b/Roadmap/21 - CALLBACKS/python/EmmanuelMMontesinos.py @@ -34,18 +34,20 @@ def ping(numero,callback): """ from time import sleep from random import randint -def proceso_pedido(plato,confirmacion,listo,entregado): - - confirmacion(plato) +import threading - tiempo_listo = randint(1,10) - sleep(tiempo_listo) - listo(plato,tiempo_listo) +def proceso_pedido(plato,confirmacion,listo,entregado): + def proceso(): + confirmacion(plato) - tiempo_entregado = randint(1,10) - sleep(tiempo_entregado) - entregado(plato,tiempo_entregado) + tiempo_listo = randint(1,10) + sleep(tiempo_listo) + listo(plato,tiempo_listo) + tiempo_entregado = randint(1,10) + sleep(tiempo_entregado) + entregado(plato,tiempo_entregado) + threading.Thread(target=proceso).start() def confirmacion(plato): print(f"{plato} ha sido confirmado, pronto estara listo.")